{"version":3,"sources":["../../src/cli/argv.ts","../../package.json","../../src/sdk-version.ts","../../src/cli/commands/api-key/catalog.ts","../../src/cli/commands/auth/catalog.ts","../../src/cli/commands/commands/catalog.ts","../../src/cli/commands/doctor/catalog.ts","../../src/cli/commands/env/catalog.ts","../../src/cli/commands/generate/catalog.ts","../../src/cli/commands/help/catalog.ts","../../src/cli/commands/init/catalog.ts","../../src/cli/commands/migrate/catalog.ts","../../src/cli/commands/billing/catalog.ts","../../src/cli/commands/policy/catalog.ts","../../src/cli/commands/rights/catalog.ts","../../src/cli/commands/schema/catalog.ts","../../src/cli/commands/validate/catalog.ts","../../src/cli/commands/version/catalog.ts","../../src/cli/ui/capabilities.ts","../../src/cli/ui/colors.ts","../../src/cli/ui/rail.ts","../../src/cli/ui/help.ts","../../src/cli/commands-catalog.ts","../../src/cli/exit-code.ts","../../src/cli/errors.ts","../../src/cli/suggest.ts","../../src/cli/parse-helpers.ts","../../src/cli/platform/define-command.ts","../../src/cli/platform/registry.ts","../../src/cli/debug.ts","../../src/cli/format-error.ts","../../src/migrations/types.ts","../../src/cli/platform/map-exit.ts","../../src/gateway/errors.ts","../../src/gateway/url.ts","../../src/rights/errors.ts","../../src/rights/key.ts","../../src/env/index.ts","../../src/cli/platform/constants.ts","../../src/cli/platform/execute.ts","../../src/cli/platform/apply-globals.ts","../../src/cli/platform/globals.ts","../../src/cli/platform/json-protocol.ts","../../src/cli/platform/parse.ts","../../src/cli/platform/index.ts","../../src/auth/contract/operations.ts","../../src/auth/contract/index.ts","../../src/auth/contract/operations.generated.ts","../../src/config/errors.ts","../../src/postgres/connection-string.ts","../../src/postgres/driver.ts","../../src/runtime/ownership.ts","../../src/postgres/runtime.ts","../../src/postgres/owned-runtime.ts","../../src/auth/local/request-timing.ts","../../src/auth/local/errors.ts","../../src/auth/local/database.ts","../../src/node-crypto.ts","../../src/migrations/checksum.ts","../../src/auth/local/organization-invariants.ts","../../src/rights/matching.ts","../../src/billing/errors.ts","../../src/billing/runtime/invocation-authority.ts","../../src/billing/runtime/rights.ts","../../src/runtime/error/failure.ts","../../src/runtime/error/data.ts","../../src/runtime/error/generated/auth.ts","../../src/runtime/error/generated/billing.ts","../../src/runtime/error/generated/chat.ts","../../src/runtime/error/generated/data.ts","../../src/runtime/error/generated/gateway.ts","../../src/runtime/error/generated/internal.ts","../../src/runtime/error/generated/notifications.ts","../../src/runtime/error/generated/policy.ts","../../src/runtime/error/generated/storage.ts","../../src/runtime/error/generated/webhook.ts","../../src/runtime/error/registry.ts","../../src/runtime/error/classifier.ts","../../src/runtime/error/instance.ts","../../src/runtime/error/index.ts","../../src/storage/runtime/types.ts","../../src/storage/runtime/errors.ts","../../src/storage/runtime/rights.ts","../../src/runtime/authorization/catalog.ts","../../src/runtime/authorization/capabilities.ts","../../src/runtime/authorization/clone-source.ts","../../src/runtime/authorization/role-descriptor.ts","../../src/runtime/authorization/role-invariants.ts","../../src/runtime/authorization/snapshot-catalog.ts","../../src/runtime/authorization/templates.ts","../../src/runtime/authorization/postgres.ts","../../src/auth/local/authorization-sql.ts","../../src/auth/email/events.ts","../../src/auth/local/email/schema-sql.ts","../../src/auth/local/ledger-health.ts","../../src/auth/local/schema-inspect.ts","../../src/auth/local/schema-manifest.ts","../../src/auth/local/schema.ts","../../src/utils/parse-boolean-flag.ts","../../src/auxiliaries.ts","../../src/migrations/constants.ts","../../src/generator/schema-selection.ts","../../src/generator/table-selection.ts","../../src/generator/config.ts","../../src/generator/database-authority.ts","../../src/migrations/application/authority.ts","../../src/auth/app-identity.ts","../../src/migrations/sql-guards.ts","../../src/migrations/discovery.ts","../../src/migrations/planner.ts","../../src/migrations/analysis/ast.ts","../../src/migrations/analysis/projected-schema.ts","../../src/migrations/analysis/catalog.ts","../../src/migrations/postgres.ts","../../src/billing/safety/money.ts","../../src/migrations/embedded-billing/sql/0001_billing_canonical.sql","../../src/migrations/embedded-billing/sql/0002_billing_subject_bindings.sql","../../src/migrations/embedded-billing/sql/0003_billing_subject_finality.sql","../../src/migrations/embedded-billing/sql/0004_billing_customer_import.sql","../../src/migrations/embedded-billing/sql/0005_billing_reconciliation_observability.sql","../../src/migrations/embedded-billing/sql/0006_billing_webhook_management.sql","../../src/migrations/embedded-billing/sql/0007_billing_connection_credential_reference.sql","../../src/migrations/embedded-billing/sql/0008_billing_webhook_ingress_observability.sql","../../src/migrations/embedded-billing/sql/0009_billing_webhook_delivery_health.sql","../../src/migrations/embedded-billing/sql/0010_billing_checkout_sessions.sql","../../src/migrations/embedded-billing/sql/0011_billing_subject_binding_uniqueness.sql","../../src/migrations/embedded-billing/sql/0012_billing_reconciliation_lease_epoch.sql","../../src/migrations/embedded-billing/sql/0013_billing_audit_failure_outcome.sql","../../src/migrations/embedded-billing/sql/0014_billing_connection_declared_slot.sql","../../src/migrations/embedded-billing/sql/0015_billing_webhook_signing_secrets.sql","../../src/migrations/embedded-billing/sql/0016_billing_checkout_return_finality.sql","../../src/migrations/embedded-billing/sql/0017_billing_webhook_ingress_stage_catalog.sql","../../src/migrations/embedded-billing/sql/0018_billing_provider_account_id_nullable.sql","../../src/migrations/embedded-billing/catalog.ts","../../src/chat/schema-version.ts","../../src/migrations/embedded-chat/sql/0001_chat_runtime_v4.sql","../../src/migrations/embedded-chat/catalog.ts","../../src/migrations/embedded-event-ingress/sql/0001_event_ingress.sql","../../src/migrations/embedded-event-ingress/sql/0002_event_ingress_failure_machine.sql","../../src/migrations/embedded-event-ingress/catalog.ts","../../src/migrations/ensure-directory.ts","../../src/migrations/managed-auth.ts","../../src/auth/bridge/code.ts","../../src/auth/observability/config.ts","../../src/auth/passkey/policy.ts","../../src/auth/config.ts","../../src/auth/hooks/assert-local.ts","../../src/node-env.ts","../../src/utils/athena-auth-url.ts","../../src/auth/resolve-routing.ts","../../src/billing/runtime/remote/project-capabilities.ts","../../src/billing/runtime/environment.ts","../../src/billing/safety/environment.ts","../../src/billing/safety/registry.ts","../../src/billing/safety/idempotency.ts","../../src/billing/safety/validators.ts","../../src/billing/safety/prepare.ts","../../src/billing/runtime/admin/unavailable.ts","../../src/billing/runtime/dispatch.ts","../../src/billing/runtime/self/unavailable.ts","../../src/cookies/cookie-utils.ts","../../src/cookies/index.ts","../../src/utils/athena-request-headers.ts","../../src/billing/runtime/remote/transport.ts","../../src/billing/runtime/remote/runtime.ts","../../src/billing/module.ts","../../src/runtime/data/discovery-document.ts","../../src/runtime/transport/http/url.ts","../../src/runtime/transport/http/request-compiler.ts","../../src/runtime/transport/http/response-parser.ts","../../src/runtime/transport/http/client.ts","../../src/runtime/transport/http.ts","../../src/billing/subject/errors.ts","../../src/billing/runtime/http-error.ts","../../src/billing/runtime/browser-transport.ts","../../src/runtime/resolve.ts","../../src/billing/runtime/credentials.ts","../../src/billing/runtime/local/providers/inspect.ts","../../src/billing/runtime/local/providers/token-authority.ts","../../src/billing/runtime/local/providers/stripe/config.ts","../../src/billing/runtime/local/providers/config.ts","../../src/billing/runtime/resolve-mode.ts","../../src/gateway/routes.ts","../../src/result/mutation-meta.ts","../../src/admin/query.ts","../../src/http/parse-response-body.ts","../../src/http/upstream-html-error.ts","../../src/auth/capabilities.ts","../../src/auth/limits.ts","../../src/auth/passkey/browser/diagnostic.ts","../../src/auth/passkey/browser/options.ts","../../src/auth/passkey/browser/serialize.ts","../../src/auth/passkey/browser/ceremony.ts","../../src/auth/passkey/metadata/catalog.ts","../../src/auth/passkey/metadata/resolve.ts","../../src/auth/passkey/metadata/index.ts","../../src/auth/passkey/normalize.ts","../../src/auth/passkey/requests.ts","../../src/auth/passkey/client-module.ts","../../src/auth/react-email.ts","../../src/auth/session-errors.ts","../../src/auth/session-store.ts","../../src/auth/session-controller.ts","../../src/auth/token-provider.ts","../../src/auth/client.ts","../../src/chat/capabilities.ts","../../src/chat/remote/runtime.ts","../../src/chat/module.ts","../../src/client-request.ts","../../src/client-result.ts","../../src/gateway/structured-select.ts","../../src/query-ast.ts","../../src/query/include-select.ts","../../src/query-transport.ts","../../src/sql-identifiers.ts","../../src/client-sql.ts","../../src/db/transaction/errors.ts","../../src/db/transaction/cache.ts","../../src/db/transaction/begin-sql.ts","../../src/db/transaction/types.ts","../../src/db/transaction/compile.ts","../../src/db/transaction/options.ts","../../src/db/transaction/coordinator.ts","../../src/db/transaction/index.ts","../../src/schema/resource.ts","../../src/query/canonicalize.ts","../../src/query/descriptor.ts","../../src/query-debug-ast.ts","../../src/query-tracing.ts","../../src/client-fluent.ts","../../src/release/identity.ts","../../src/compatibility/report.ts","../../src/db/transaction/interactive-gateway.ts","../../src/query/engine/ast.ts","../../src/query/engine/capabilities.ts","../../src/query/engine/errors.ts","../../src/query/engine/normalize.ts","../../src/query/engine/validate.ts","../../src/gateway/serialize-ast.ts","../../src/gateway/transaction.ts","../../src/gateway/client.ts","../../src/schema/model-target.ts","../../src/http/append-query.ts","../../src/storage/errors.ts","../../src/storage/backup.ts","../../src/storage/xhr-put.ts","../../src/storage/direct-upload.ts","../../src/storage/file.ts","../../src/storage/module.ts","../../src/client/context.ts","../../src/cloudflare/capabilities.ts","../../src/cloudflare/types.ts","../../src/cloudflare/d1/runner.ts","../../src/query/engine/relations.ts","../../src/query/engine/plan.ts","../../src/query/engine/index.ts","../../src/query/legacy-boolean.ts","../../src/cloudflare/d1/sql.ts","../../src/cloudflare/d1/compile-ast.ts","../../src/cloudflare/d1/relation-catalog.ts","../../src/cloudflare/d1/compile-fetch.ts","../../src/cloudflare/d1/sql-rewrite.ts","../../src/cloudflare/d1/transaction.ts","../../src/cloudflare/d1/transport.ts","../../src/cloudflare/execution-mode.ts","../../src/cloudflare/r2/storage.ts","../../src/context/merge.ts","../../src/diagnostics.ts","../../src/email/errors.ts","../../src/email/provider.ts","../../src/email/normalize-config.ts","../../src/email/capabilities.ts","../../src/email/runtime.ts","../../src/email/module.ts","../../src/notifications/events-store.ts","../../src/notifications/store.ts","../../src/notifications/memory-store.ts","../../src/notifications/types.ts","../../src/notifications/catalog.ts","../../src/notifications/errors.ts","../../src/notifications/resolve.ts","../../src/notifications/module.ts","../../src/query/explain.ts","../../src/query/entity-graph.ts","../../src/query/model-identity.ts","../../src/react/query-client/entity-store.ts","../../src/query/query-index.ts","../../src/react/query-client/graph-index.ts","../../src/react/utils.ts","../../src/react/query-client/query-store.ts","../../src/react/query-client/mutation-store.ts","../../src/react/query-client.ts","../../src/runtime/client-internals.ts","../../src/runtime/data/lifecycle/assert.ts","../../src/storage/runtime/bind.ts","../../src/storage/runtime/bytes-envelope.ts","../../src/storage/runtime/browser-transport.ts","../../src/policy/match-principal.ts","../../src/policy/decide.ts","../../src/storage/runtime/nucleus.ts","../../src/storage/object-keys.ts","../../src/storage/runtime/object-ops.ts","../../src/storage/runtime/overlays.ts","../../src/storage/runtime/index.ts","../../src/storage/runtime.ts","../../src/v3-client-core.ts","../../src/schema/diff/types.ts","../../src/schema/diff/normalize.ts","../../src/schema/postgres-introspection-core.ts","../../src/schema/postgres-provider.ts","../../src/generator/providers.ts","../../src/cli/commands/migrate/flags.ts","../../src/migrations/analysis/diagnostics.ts","../../src/migrations/analysis/cache.ts","../../src/migrations/analysis/parser.ts","../../src/migrations/analysis/plpgsql-bindings.ts","../../src/migrations/analysis/query-deps.ts","../../src/migrations/analysis/analyzer.ts","../../src/migrations/analysis/schema-provider.ts","../../src/migrations/analysis/verifier.ts","../../src/migrations/analysis/dependency-graph.ts","../../src/migrations/analysis/compiler.ts","../../src/migrations/analysis/index.ts","../../src/migrations/application/apply.ts","../../src/cli/ui/symbols.ts","../../src/cli/ui/table.ts","../../src/cli/ui/plain.ts","../../src/cli/ui/clack.ts","../../src/cli/ui/json.ts","../../src/cli/ui/index.ts","../../src/migrations/source-control/git.ts","../../src/migrations/source-control/status.ts","../../src/migrations/source-control/safety.ts","../../src/migrations/source-control/provenance.ts","../../src/migrations/source-control/index.ts","../../src/migrations/application/prepare.ts","../../src/migrations/reconciliation/engine.ts","../../src/migrations/reconciliation/assemble.ts","../../src/migrations/reconciliation/format.ts","../../src/migrations/reconciliation/index.ts","../../src/migrations/application/reconcile.ts","../../src/migrations/embedded-auth/enablement.ts","../../src/auth/schema/migrations.ts","../../src/migrations/embedded/semantics.ts","../../src/migrations/application/semantics.ts","../../src/auth/node/migrate.ts","../../src/migrations/embedded-auth/plan.ts","../../src/migrations/embedded-auth/apply.ts","../../src/migrations/embedded-auth/repair.ts","../../src/migrations/embedded-event-ingress/enablement.ts","../../src/migrations/embedded-sql-apply.ts","../../src/migrations/embedded-billing/apply.ts","../../src/migrations/embedded-chat/enablement.ts","../../src/migrations/embedded-chat/apply.ts","../../src/migrations/embedded-event-ingress/apply.ts","../../src/migrations/embedded-modules-inspect.ts","../../src/migrations/reporting/conflicts.ts","../../src/migrations/report.ts","../../src/migrations/reporting/render.ts","../../src/migrations/runner.ts","../../src/cli/commands/migrate/auth-sync.ts","../../src/migrations/verify.ts","../../src/cli/commands/migrate/verify.ts","../../src/cli/commands/migrate/index.ts","../../src/cli/commands/migrate/define.ts","../../src/billing/observability/audit.ts","../../src/billing/observability/config.ts","../../src/billing/observability/traces.ts","../../src/billing/reconciliation/context.ts","../../src/billing/observability/events.ts","../../src/billing/observability/validate.ts","../../src/billing/reconciliation/semantic-audit.ts","../../src/billing/reconciliation/lease.ts","../../src/billing/import/errors.ts","../../src/billing/runtime/local/providers/binding.ts","../../src/billing/runtime/local/providers/execution-context.ts","../../src/billing/runtime/local/providers/registry.ts","../../src/billing/runtime/local/providers/connection-binding.ts","../../src/billing/import/database.ts","../../src/billing/subject/postgres.ts","../../src/billing/import/postgres.ts","../../src/billing/ingestion/reconciliation/repository.ts","../../src/billing/ingestion/urls.ts","../../src/billing/ingestion/types.ts","../../src/billing/ingestion/config.ts","../../src/billing/runtime/local/providers/mollie/webhook-capability.ts","../../src/billing/ingestion/ownership.ts","../../src/billing/ingestion/reconciliation/desired-state.ts","../../src/billing/ingestion/reconciliation/planner.ts","../../src/billing/ingestion/reconciliation/coordinator.ts","../../src/billing/ingestion/automatic.ts","../../src/policy/bind.ts","../../src/policy/eval-expr.ts","../../src/policy/fingerprint.ts","../../src/policy/types.ts","../../src/policy/validate-ir.ts","../../src/policy/registry.ts","../../src/policy/coverage.ts","../../src/runtime/data/rights-diagnostics.ts","../../src/runtime/data/principal.ts","../../src/policy/explain.ts","../../src/policy/lint.ts","../../src/policy/schema-impact.ts","../../src/policy/index.ts","../../src/cli/commands/policy/load.ts","../../src/schema/ir/identity.ts","../../src/schema/ir/version.ts","../../src/schema/ir/validate.ts","../../src/schema/ir/canonicalize.ts","../../src/schema/ir/compatibility.ts","../../src/schema/diff/identity.ts","../../src/schema/diff/summary.ts","../../src/schema/diff/errors.ts","../../src/schema/diff/validate.ts","../../src/schema/diff/diff.ts","../../src/schema/diff/from-introspection.ts","../../src/schema/diff/index.ts","../../src/cli/commands/schema/format.ts","../../src/cli/commands/schema/paths.ts","../../src/cli/commands/schema/run.ts","../../src/cli/index.ts","../../src/cli/commands/help/index.ts","../../src/cli/commands/register.ts","../../src/cli/commands/api-key/index.ts","../../src/cli/gateway-admin.ts","../../src/cli/commands/env/project-env.ts","../../src/cli/commands/api-key/secret.ts","../../src/cli/commands/auth/commands.ts","../../src/cli/commands/auth/index.ts","../../src/cli/commands/auth/capabilities-report.ts","../../src/cli/commands/auth/inspect-local.ts","../../src/cli/commands/auth/status-report.ts","../../src/cli/commands/commands/index.ts","../../src/cli/commands/doctor/bundle.ts","../../src/cli/logging/redact.ts","../../src/cli/commands/doctor/doctor.ts","../../src/cli/identity.ts","../../src/cli/commands/validate/validate-local.ts","../../src/auth/passkey/server/relying-party.ts","../../src/runtime/data/rights-resolution.ts","../../src/billing/runtime/local/catalog/normalize.ts","../../src/cli/commands/validate/validate-billing.ts","../../src/cli/commands/doctor/index.ts","../../src/cli/commands/env/index.ts","../../src/cli/commands/generate/index.ts","../../src/generator/artifact-merge.ts","../../src/generator/pipeline.ts","../../src/generator/config-file.ts","../../src/generator/schema-discovery.ts","../../src/generator/renderer.ts","../../src/utils/slugify.ts","../../src/generator/naming.ts","../../src/generator/postgres-type-mapping.ts","../../src/generator/generated-file-header.ts","../../src/generator/placeholders.ts","../../src/generator/render-shared.ts","../../src/generator/table-builder-renderer.ts","../../src/cli/commands/init/index.ts","../../src/cli/commands/migrate/apply.ts","../../src/cli/commands/migrate/commands.ts","../../src/cli/commands/migrate/check.ts","../../src/cli/commands/migrate/drift.ts","../../src/cli/commands/migrate/explain.ts","../../src/cli/commands/migrate/graph.ts","../../src/cli/commands/migrate/plan.ts","../../src/cli/commands/migrate/reconcile.ts","../../src/cli/commands/migrate/repair.ts","../../src/cli/commands/migrate/status.ts","../../src/cli/commands/billing/commands.ts","../../src/billing/import/report.ts","../../src/cli/commands/billing/index.ts","../../src/billing/import/assemble.ts","../../src/billing/reconciliation/index.ts","../../src/billing/reconciliation/coordinator.ts","../../src/billing/reconciliation/types.ts","../../src/billing/reconciliation/policy.ts","../../src/billing/reconciliation/retry.ts","../../src/billing/reconciliation/webhook.ts","../../src/billing/runtime/local/providers/mollie/config.ts","../../src/billing/runtime/local/providers/mollie/profile-target.ts","../../src/billing/runtime/local/providers/mollie/errors.ts","../../src/billing/safety/retry.ts","../../src/billing/runtime/local/providers/mollie/sdk/contracts.ts","../../src/billing/runtime/local/providers/mollie/sdk/assertions.ts","../../src/billing/runtime/local/providers/mollie/sdk/client-factory.ts","../../src/billing/import/audit.ts","../../src/billing/import/types.ts","../../src/billing/import/candidate-resolver.ts","../../src/billing/import/apply.ts","../../src/billing/import/importer.ts","../../src/billing/import/confidence.ts","../../src/billing/import/planner.ts","../../src/billing/import/project.ts","../../src/billing/runtime/hal-link-href.ts","../../src/billing/runtime/local/providers/mollie/cursor.ts","../../src/billing/runtime/local/providers/mollie/sdk/errors.ts","../../src/billing/runtime/local/providers/mollie/sdk/invoke.ts","../../src/billing/runtime/local/providers/mollie/sdk/call.ts","../../src/billing/runtime/local/providers/mollie/sdk/page.ts","../../src/billing/import/providers/mollie.ts","../../src/cli/commands/billing/execute.ts","../../src/billing/ingestion/application-id.ts","../../src/runtime/ingress/errors.ts","../../src/runtime/ingress/postgres.ts","../../src/runtime/ingress/runtime.ts","../../src/runtime/ingress/sql.ts","../../src/billing/runtime/local/ingress/attach.ts","../../src/billing/ingestion/observability/delivery-health.ts","../../src/billing/ingestion/observability/health.ts","../../src/billing/runtime/local/execute/invoke.ts","../../src/billing/runtime/local/execute/shared.ts","../../src/billing/runtime/authority.ts","../../src/billing/runtime/local/providers/operation-authority.ts","../../src/billing/runtime/local/capability-decision.ts","../../src/billing/runtime/local/providers/operation-scope.ts","../../src/billing/runtime/local/providers/resolve-target.ts","../../src/billing/runtime/local/execute/price-list.ts","../../src/billing/runtime/self/advance-enrollment.ts","../../src/billing/runtime/self/checkout-intent.ts","../../src/billing/runtime/self/delegated-principal.ts","../../src/billing/runtime/self/enroll.ts","../../src/billing/subject/principal-user.ts","../../src/billing/subject/sole-connection.ts","../../src/billing/runtime/local/execute/subscriptions.ts","../../src/billing/runtime/self/enrollment-session.ts","../../src/billing/runtime/local/providers/mollie/resolve-resource.ts","../../src/runtime/ingress/identity.ts","../../src/billing/canonical/document.ts","../../src/runtime/events/causality.ts","../../src/runtime/events/identity.ts","../../src/billing/canonical/transition.ts","../../src/billing/runtime/local/providers/mollie/verify-webhook.ts","../../src/billing/runtime/local/providers/mollie/parse-webhook.ts","../../src/billing/runtime/local/providers/mollie/projection/invoice.ts","../../src/billing/runtime/local/providers/mollie/projection/subscription.ts","../../src/billing/runtime/local/providers/mollie/projection.ts","../../src/billing/runtime/local/providers/mollie/project-document.ts","../../src/billing/runtime/local/providers/mollie/webhook-port.ts","../../src/runtime/events/hooks.ts","../../src/runtime/ingress/failure.ts","../../src/billing/ingestion/observability/stages.ts","../../src/runtime/events/outbox.ts","../../src/billing/runtime/local/ingress/revision.ts","../../src/billing/runtime/local/ingress/apply.ts","../../src/billing/runtime/local/ingress/handler.ts","../../src/runtime/events/sql.ts","../../src/billing/runtime/local/ingress/sql.ts","../../src/runtime/ingress/memory.ts","../../src/billing/runtime/local/ingress/replay.ts","../../src/billing/runtime/local/providers/create-registry.ts","../../src/billing/runtime/local/catalog/page.ts","../../src/billing/runtime/local/catalog/prices.ts","../../src/billing/runtime/local/catalog/products.ts","../../src/billing/runtime/local/providers/mollie/capabilities.ts","../../src/billing/runtime/local/providers/mollie/dialect/customers.ts","../../src/billing/runtime/local/providers/mollie/projection/customer.ts","../../src/billing/runtime/local/providers/mollie/customers.ts","../../src/billing/runtime/local/providers/mollie/dialect/invoices.ts","../../src/billing/runtime/local/providers/mollie/invoices.ts","../../src/billing/runtime/local/providers/mollie/dialect/payment-links.ts","../../src/billing/runtime/local/providers/mollie/dialect/webhook-url.ts","../../src/billing/runtime/local/providers/mollie/projection/payment-link.ts","../../src/billing/runtime/local/providers/mollie/payment-links.ts","../../src/billing/runtime/local/providers/mollie/payments.ts","../../src/billing/runtime/local/providers/mollie/dialect/payments.ts","../../src/billing/runtime/local/providers/mollie/refunds.ts","../../src/billing/runtime/local/providers/mollie/dialect/refunds.ts","../../src/billing/runtime/local/providers/mollie/projection/refund.ts","../../src/billing/runtime/local/providers/mollie/dialect/subscriptions.ts","../../src/billing/runtime/local/providers/mollie/subscriptions.ts","../../src/billing/runtime/local/providers/mollie/runtime.ts","../../src/billing/runtime/local/providers/mollie/dialect/webhooks.ts","../../src/billing/runtime/local/providers/mollie/sdk/json.ts","../../src/billing/runtime/local/providers/mollie/webhooks.ts","../../src/billing/runtime/local/providers/stripe/capabilities.ts","../../src/billing/runtime/local/providers/stripe/runtime.ts","../../src/billing/ingestion/secrets/postgres.ts","../../src/billing/ingestion/secrets/envelope.ts","../../src/billing/ingestion/secrets/cache.ts","../../src/billing/ingestion/secrets/master-key.ts","../../src/cli/commands/policy/commands.ts","../../src/cli/commands/policy/index.ts","../../src/cli/commands/rights/index.ts","../../src/cli/commands/schema/commands.ts","../../src/cli/commands/schema/index.ts","../../src/cli/commands/validate/index.ts","../../src/cli/commands/version/index.ts","../../src/cli/parse-command.ts"],"names":["init_catalog","index","body","tag","CLI_COMMAND_CATALOG","names","row","lines","CliExitCode","databaseLabel","isErrorWithCode","init_errors","CLI_JSON_SCHEMA_VERSION","matched","AsyncLocalStorage","init_data","init_registry","init_types","isRecord","init_rights","cached","init_capabilities","id","result","parseBooleanFlag","message","table","constraint","kind","resolve","init_constants","normalizeRawEnvValue","parseEnvLine","PROJECT_ENV_FILENAMES","existsSync","readFileSync","POSTGRES_PROTOCOLS","DIRECT_CONNECTION_STRING_ENV_KEYS","GATEWAY_URL_ENV_KEYS","GATEWAY_API_KEY_ENV_KEYS","fileURLToPath","require","pathToFileURL","stat","readdir","join","readFile","column","init_postgres","randomUUID","mkdir","writeFile","path","isLoopbackHost","init_config","init_policy","asRecord","originFromConfiguredUrl","stripTrailingSlashes","isAbsoluteHttpUrl","asString","asStringList","resolveBillingEnvironment","init_environment","init_unavailable","request","init_runtime","connectionQuery","init_url","error","normalizeOptional","formatProviderLabel","nonEmpty","listeners","init_resolve","run","SDK_HEADER_VALUE","capabilityDisabled","gateCapability","token","requireUserId","sessions","SDK_NAME","init_client","resolveRequestId","resolveErrorMessage","buildHeaders","init_module","parsed","firstNonEmptyString","aliasIdentifier","baseIdentifier","init_options","columns","stringifyFilterValue","filterMethods","filters","report","init_ast","isRelationSelectNode","init_normalize","IDENTIFIER","init_transaction","nonEmptyString","resolveStructuredErrorPayload","AthenaStorageError","appendQuery","sourceName","headerValue","withPathParam","resolveErrorHint","isBlobBody","storage","sum","j","rows","outputAlias","splitTopLevel","compilePredicate","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","conditionToWhere","clause","parts","assignments","quoteIdent","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","mapped","init_transport","relative","init_storage","readProcessEnv","trimOptional","stamp","serialized","sleep","normalizeAthenaError","sourceData","selectedData","next","asExecutorTransport","init_browser_transport","decision","OVERLAY_PRINCIPAL","readFirstEnvHttpUrl","appendPath","isD1Binding","tableKey","init_diagnostics","init_cache","parse","unwrap","dep","spawnSync","sep","basename","init_prepare","init_engine","listAthenaAuthCanonicalMigrations","init_semantics","init_plan","init_apply","init_enablement","init_report","embeddedSections","outcome","catalogFingerprint","init_runner","prepareApplicationMigrationRun","assertDirectPostgres","providerLabel","blockingSemantic","compileApplicationSemantics","loadAuthPlan","planMigrations","createPostgresMigrationBackend","ATHENA_AUTH_SCHEMA_GENERATION","init_verify","usage","runMigrateVerify","init_migrate","init_context","init_events","init_validate","init_database","mapRow","createHash","init_ownership","init_planner","init_coordinator","init_bind","ACTION_BITS","asDocument","init_explain","walkOperands","dirname","isAbsolute","init_identity","columnNames","tableId","isObject","REFERENTIAL_ACTIONS","init_canonicalize","DEFAULT_SCHEMA","tableIdentityKey","item","tableIdentity","init_diff","init_format","mkdirSync","writeFileSync","diff","randomBytes","query","readdirSync","block","loadPgPoolConstructor","absolutePath","posix","renderModelArtifact","normalizeTypeLabel","relationKey","normalizePath","sessionTitle","jsonValue","readString","UUID_RE","uuidOrNull","configuredProviderNames","provider","createHmac","timingSafeEqual","optionalString","serializationRetry","projectMoney","projected","stage","classifiedFailure","encodeBase64Url","decodeBase64Url","createCipheriv","createDecipheriv","normalizeAthenaBillingIngestion","resolveBillingIngressEndpoints","runAutomaticBillingWebhookReconcileIfEnabled","wantsJson","adapt","runSchemaDiff","runSchemaSnapshot"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface CliPresentationFlags {\n\tforceColor: boolean;\n\tnoColor: boolean;\n}\n\nconst COLOR_NEVER = new Set([\"never\", \"false\", \"0\", \"off\", \"no\"]);\nconst COLOR_ALWAYS = new Set([\"always\", \"true\", \"1\", \"on\", \"yes\"]);\n\nfunction applyColorValue(\n\tvalue: string,\n\tflags: CliPresentationFlags\n): void {\n\tconst normalized = value.trim().toLowerCase();\n\tif (normalized === \"\" || COLOR_ALWAYS.has(normalized)) {\n\t\tflags.forceColor = true;\n\t\tflags.noColor = false;\n\t\treturn;\n\t}\n\tif (COLOR_NEVER.has(normalized)) {\n\t\tflags.noColor = true;\n\t\tflags.forceColor = false;\n\t}\n}\n\n/**\n * Pull global presentation flags out of argv so command parsers never see them.\n *\n * Supported:\n *   --no-color\n *   --color\n *   --force-color\n *   --color=always|never|auto\n */\nexport function peelPresentationFlags(argv: readonly string[]): {\n\targv: string[];\n\tpresentation: CliPresentationFlags;\n} {\n\tconst presentation: CliPresentationFlags = {\n\t\tforceColor: false,\n\t\tnoColor: false,\n\t};\n\tconst tokens: string[] = [];\n\n\tfor (const token of argv) {\n\t\tif (token === \"--no-color\") {\n\t\t\tpresentation.noColor = true;\n\t\t\tpresentation.forceColor = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--color\" || token === \"--force-color\") {\n\t\t\tpresentation.forceColor = true;\n\t\t\tpresentation.noColor = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.startsWith(\"--color=\")) {\n\t\t\tapplyColorValue(token.slice(\"--color=\".length), presentation);\n\t\t\tcontinue;\n\t\t}\n\t\ttokens.push(token);\n\t}\n\n\treturn { argv: tokens, presentation };\n}\n\n/**\n * Expand `--flag=value` into `--flag`, `value` (including empty `--prefix=`).\n * Leaves `--flag` and `--flag=`-style color tokens to {@link peelPresentationFlags}.\n */\nexport function expandEqualsArgv(argv: readonly string[]): string[] {\n\tconst tokens: string[] = [];\n\tfor (const token of argv) {\n\t\tif (!token.startsWith(\"--\") || token === \"--\") {\n\t\t\ttokens.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tconst eq = token.indexOf(\"=\");\n\t\tif (eq <= 2) {\n\t\t\ttokens.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\ttokens.push(token.slice(0, eq), token.slice(eq + 1));\n\t}\n\treturn tokens;\n}\n\nexport function argvWantsHelp(argv: readonly string[]): boolean {\n\treturn argv.includes(\"--help\") || argv.includes(\"-h\");\n}\n\nexport function flagName(flag: string): string {\n\tconst [head] = flag.split(/\\s+/);\n\treturn head ?? flag;\n}\n","{\n  \"author\": \"floris@xylex.group\",\n  \"bin\": {\n    \"athena-js\": \"bin/athena-js.js\"\n  },\n  \"dependencies\": {\n    \"@clack/prompts\": \"^0.11.0\",\n    \"@noble/hashes\": \"^1.8.0\",\n    \"@simplewebauthn/server\": \"^13.3.2\",\n    \"blessed\": \"^0.1.81\",\n    \"chalk\": \"^4.1.2\",\n    \"cron-parser\": \"^4.9.0\",\n    \"jose\": \"^6.2.3\",\n    \"pg\": \"^8.20.0\",\n    \"pgsql-parser\": \"^18.2.6\",\n    \"server-only\": \"^0.0.1\",\n    \"tsx\": \"^4.21.0\",\n    \"use-sync-external-store\": \"^1.6.0\",\n    \"zod\": \"^4.4.3\"\n  },\n  \"description\": \"Athena JS SDK\",\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"^2.5.5\",\n    \"@react-email/components\": \"^1.0.12\",\n    \"@react-email/render\": \"^2.0.8\",\n    \"@types/blessed\": \"^0.1.27\",\n    \"@types/express\": \"^4.17.25\",\n    \"@types/node\": \"^20.19.43\",\n    \"@types/pg\": \"^8.20.0\",\n    \"@types/react\": \"^18.3.28\",\n    \"@types/react-test-renderer\": \"^18.3.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"dotenv\": \"^16.6.1\",\n    \"esbuild\": \"^0.28.1\",\n    \"eslint\": \"^8.57.1\",\n    \"express\": \"^4.22.2\",\n    \"mollie-api-typescript\": \"1.12.25\",\n    \"next\": \"16.3.1\",\n    \"publint\": \"^0.3.23\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-test-renderer\": \"^18.3.1\",\n    \"tsup\": \"^8.5.1\",\n    \"typescript\": \"^5.9.3\",\n    \"ultracite\": \"^7.9.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"browser\": {\n        \"types\": \"./dist/browser.d.ts\",\n        \"import\": \"./dist/browser.js\",\n        \"require\": \"./dist/browser.cjs\",\n        \"default\": \"./dist/browser.js\"\n      },\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"default\": \"./dist/index.js\"\n    },\n    \"./auth/server\": {\n      \"types\": \"./dist/auth/server.d.ts\",\n      \"import\": \"./dist/auth/server.js\",\n      \"require\": \"./dist/auth/server.cjs\",\n      \"default\": \"./dist/auth/server.js\"\n    },\n    \"./admin\": {\n      \"types\": \"./dist/admin.d.ts\",\n      \"import\": \"./dist/admin.js\",\n      \"require\": \"./dist/admin.cjs\",\n      \"default\": \"./dist/admin.js\"\n    },\n    \"./billing\": {\n      \"types\": \"./dist/billing.d.ts\",\n      \"import\": \"./dist/billing.js\",\n      \"require\": \"./dist/billing.cjs\",\n      \"default\": \"./dist/billing.js\"\n    },\n    \"./browser\": {\n      \"types\": \"./dist/browser.d.ts\",\n      \"import\": \"./dist/browser.js\",\n      \"require\": \"./dist/browser.cjs\",\n      \"default\": \"./dist/browser.js\"\n    },\n    \"./cloudflare\": {\n      \"types\": \"./dist/cloudflare.d.ts\",\n      \"import\": \"./dist/cloudflare.js\",\n      \"require\": \"./dist/cloudflare.cjs\",\n      \"default\": \"./dist/cloudflare.js\"\n    },\n    \"./contracts\": {\n      \"types\": \"./dist/contracts.d.ts\",\n      \"import\": \"./dist/contracts.js\",\n      \"require\": \"./dist/contracts.cjs\",\n      \"default\": \"./dist/contracts.js\"\n    },\n    \"./contracts/v1\": {\n      \"types\": \"./dist/contracts/v1.d.ts\",\n      \"import\": \"./dist/contracts/v1.js\",\n      \"require\": \"./dist/contracts/v1.cjs\",\n      \"default\": \"./dist/contracts/v1.js\"\n    },\n    \"./cookies\": {\n      \"types\": \"./dist/cookies.d.ts\",\n      \"import\": \"./dist/cookies.js\",\n      \"require\": \"./dist/cookies.cjs\",\n      \"default\": \"./dist/cookies.js\"\n    },\n    \"./env\": {\n      \"types\": \"./dist/env.d.ts\",\n      \"import\": \"./dist/env.js\",\n      \"require\": \"./dist/env.cjs\",\n      \"default\": \"./dist/env.js\"\n    },\n    \"./email\": {\n      \"types\": \"./dist/email.d.ts\",\n      \"import\": \"./dist/email.js\",\n      \"require\": \"./dist/email.cjs\",\n      \"default\": \"./dist/email.js\"\n    },\n    \"./email/node\": {\n      \"types\": \"./dist/email/node.d.ts\",\n      \"import\": \"./dist/email/node.js\",\n      \"require\": \"./dist/email/node.cjs\",\n      \"default\": \"./dist/email/node.js\"\n    },\n    \"./next/client\": {\n      \"types\": \"./dist/next/client.d.ts\",\n      \"import\": \"./dist/next/client.js\",\n      \"require\": \"./dist/next/client.cjs\",\n      \"default\": \"./dist/next/client.js\"\n    },\n    \"./next/server\": {\n      \"types\": \"./dist/next/server.d.ts\",\n      \"import\": \"./dist/next/server.js\",\n      \"require\": \"./dist/next/server.cjs\",\n      \"default\": \"./dist/next/server.js\"\n    },\n    \"./next/session\": {\n      \"types\": \"./dist/next/session.d.ts\",\n      \"import\": \"./dist/next/session.js\",\n      \"require\": \"./dist/next/session.cjs\",\n      \"default\": \"./dist/next/session.js\"\n    },\n    \"./organization\": {\n      \"types\": \"./dist/organization.d.ts\",\n      \"import\": \"./dist/organization.js\",\n      \"require\": \"./dist/organization.cjs\",\n      \"default\": \"./dist/organization.js\"\n    },\n    \"./policy\": {\n      \"types\": \"./dist/policy.d.ts\",\n      \"import\": \"./dist/policy.js\",\n      \"require\": \"./dist/policy.cjs\",\n      \"default\": \"./dist/policy.js\"\n    },\n    \"./rights\": {\n      \"types\": \"./dist/rights.d.ts\",\n      \"import\": \"./dist/rights.js\",\n      \"require\": \"./dist/rights.cjs\",\n      \"default\": \"./dist/rights.js\"\n    },\n    \"./schema\": {\n      \"types\": \"./dist/schema.d.ts\",\n      \"import\": \"./dist/schema.js\",\n      \"require\": \"./dist/schema.cjs\",\n      \"default\": \"./dist/schema.js\"\n    },\n    \"./devtools\": {\n      \"types\": \"./dist/devtools.d.ts\",\n      \"import\": \"./dist/devtools.js\",\n      \"require\": \"./dist/devtools.cjs\",\n      \"default\": \"./dist/devtools.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./server\": {\n      \"types\": \"./dist/server.d.ts\",\n      \"import\": \"./dist/server.js\",\n      \"require\": \"./dist/server.cjs\",\n      \"default\": \"./dist/server.js\"\n    },\n    \"./runtime\": {\n      \"types\": \"./dist/runtime.d.ts\",\n      \"import\": \"./dist/runtime.js\",\n      \"require\": \"./dist/runtime.cjs\",\n      \"default\": \"./dist/runtime.js\"\n    },\n    \"./react\": {\n      \"types\": \"./dist/react.d.ts\",\n      \"import\": \"./dist/react.js\",\n      \"require\": \"./dist/react.cjs\",\n      \"default\": \"./dist/react.js\"\n    },\n    \"./react-native\": {\n      \"types\": \"./dist/react-native.d.ts\",\n      \"import\": \"./dist/react-native.js\",\n      \"require\": \"./dist/react-native.cjs\",\n      \"default\": \"./dist/react-native.js\"\n    },\n    \"./social-providers\": {\n      \"types\": \"./dist/social-providers.d.ts\",\n      \"import\": \"./dist/social-providers.js\",\n      \"require\": \"./dist/social-providers.cjs\",\n      \"default\": \"./dist/social-providers.js\"\n    },\n    \"./utils\": {\n      \"types\": \"./dist/utils.d.ts\",\n      \"import\": \"./dist/utils.js\",\n      \"require\": \"./dist/utils.cjs\",\n      \"default\": \"./dist/utils.js\"\n    },\n    \"./migrations\": {\n      \"types\": \"./dist/migrations.d.ts\",\n      \"import\": \"./dist/migrations.js\",\n      \"require\": \"./dist/migrations.cjs\",\n      \"default\": \"./dist/migrations.js\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"database\",\n    \"driver\",\n    \"api-gateway\",\n    \"sdk\",\n    \"react\",\n    \"hooks\",\n    \"http\",\n    \"postgres\",\n    \"query-builder\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"name\": \"@xylex-group/athena\",\n  \"peerDependencies\": {\n    \"@react-email/components\": \">=1.0.0\",\n    \"@react-email/render\": \">=2.0.0\",\n    \"mollie-api-typescript\": \">=1.12.25\",\n    \"next\": \">=15.0.0 <17\",\n    \"pg\": \">=8.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    \"mollie-api-typescript\": {\n      \"optional\": true\n    },\n    \"next\": {\n      \"optional\": true\n    },\n    \"pg\": {\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.git\",\n    \"directory\": \"packages/athena-js\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/xylex-group/athena/issues\"\n  },\n  \"homepage\": \"https://github.com/xylex-group/athena/tree/main/packages/athena-js#readme\",\n  \"scripts\": {\n    \"prepack\": \"node scripts/strip-self-dependency-for-pack.mjs strip\",\n    \"postpack\": \"node scripts/strip-self-dependency-for-pack.mjs restore\",\n    \"build\": \"node scripts/tsup-build.mjs\",\n    \"check\": \"ultracite check && node scripts/check-structural-complexity.mjs\",\n    \"check:all\": \"pnpm lint && pnpm typecheck && pnpm build && pnpm test && pnpm test:browser-bundle && pnpm audit:rn && node scripts/check-structural-complexity.mjs\",\n    \"check:exports\": \"node scripts/inspect-package.mjs\",\n    \"check:publint\": \"publint\",\n    \"check:tarball\": \"node scripts/check-release-tarball.mjs\",\n    \"cli:dev\": \"node --import tsx src/cli/bin.ts\",\n    \"docs:check\": \"node scripts/check-docs-consistency.mjs\",\n    \"audit:runtime-boundaries\": \"node scripts/audit-runtime-boundaries.mjs\",\n    \"test:node-import\": \"node scripts/test-package-node-import.mjs\",\n    \"check:release\": \"pnpm lint && pnpm typecheck:all && pnpm test && pnpm build && pnpm test:browser-bundle && node scripts/audit-runtime-boundaries.mjs && node scripts/test-package-node-import.mjs && pnpm audit:rn && pnpm check:exports && pnpm check:publint && pnpm check:tarball && pnpm docs:check && node scripts/check-structural-complexity.mjs\",\n    \"dev\": \"node scripts/assert-published-dts.mjs && ATHENA_TSUP_WATCH=1 tsup --watch\",\n    \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n    \"generate:error-ir\": \"node scripts/generate-error-ir.mjs\",\n    \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n    \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n    \"example:admin\": \"tsx examples/node/admin-permission.ts\",\n    \"example:auth-session\": \"tsx examples/node/auth-session.ts\",\n    \"example:billing\": \"tsx examples/node/billing.ts\",\n    \"example:cloudflare\": \"pnpm typecheck:examples\",\n    \"example:env\": \"tsx examples/node/env.ts\",\n    \"example:node\": \"tsx examples/node/create-client.ts\",\n    \"example:session\": \"tsc -p examples/session/tsconfig.json\",\n    \"example:storage\": \"tsx examples/node/storage.ts\",\n    \"fix\": \"ultracite fix\",\n    \"format\": \"ultracite fix\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n    \"lint:fix\": \"pnpm lint -- --fix\",\n    \"prepublishOnly\": \"pnpm release:verify\",\n    \"publish:token\": \"node scripts/publish.js\",\n    \"release:verify\": \"node scripts/verify-auth-schema-release.mjs && pnpm test:finality && pnpm test:tarball && pnpm test:examples\",\n    \"test\": \"node scripts/run-unit-tests.mjs\",\n    \"test:examples\": \"pnpm typecheck:examples && node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/examples-session.test.ts\",\n    \"test:finality\": \"node scripts/run-finality.mjs\",\n    \"test:tarball\": \"node scripts/check-release-tarball.mjs\",\n    \"test:react-native\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/react-native-adapter.test.ts\",\n    \"test:expo-fixture\": \"pnpm --dir test/fixtures/expo check\",\n    \"audit:consumer\": \"node scripts/audit-consumer-athena-usage.mjs\",\n    \"audit:rn\": \"node scripts/audit-rn-bundle-safety.mjs\",\n    \"test:browser-bundle\": \"node scripts/audit-browser-bundle-safety.mjs\",\n    \"test:integration:postgres\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/postgres-introspection.integration.test.ts test/postgres-direct-live.test.ts test/postgres-direct-live-ast.test.ts test/sdd/athena-local-runtime.live.test.ts test/sdd/athena-local-runtime.r6.test.ts test/sdd/athena-local-runtime.r7.test.ts test/sdd/athena-local-runtime.r7.live.test.ts test/sdd/speedrun-pg-finality.live.test.ts\",\n    \"test:policy-conformance\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/sdd/athena-local-runtime.r7.test.ts test/sdd/athena-local-runtime.r3.test.ts\",\n    \"auth:route-parity\": \"node scripts/auth-route-parity.mjs --print\",\n    \"test:parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/finality-parity-suite.test.ts test/finality-password-portability.test.ts test/finality-portability.test.ts test/admin-auth-parity.test.ts test/admin-auth-portability.test.ts test/auth-route-inventory.test.ts test/auth-embedded-tier-a.test.ts test/email-parity.test.ts\",\n    \"test:email-parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/email-parity.test.ts test/email-architecture.test.ts test/email-auth-injection.test.ts\",\n    \"test:parity:live\": \"node scripts/run-parity-live.mjs\",\n    \"test:embedded-next\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/finality-handlers-from-root.test.ts test/sdd/athena-local-runtime.r5.security.test.ts test/conformance/act-5-1-embedded.test.ts\",\n    \"test:query-ast\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/query-engine-*.test.ts test/postgres-compile-ast*.test.ts test/d1-compile-ast*.test.ts test/gateway-serialize-ast.test.ts test/query-ast.test.ts test/query-ast-act.test.ts test/query-ast-parity.test.ts\",\n    \"test:query-parity\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/query-ast-parity.test.ts test/query-ast-act.test.ts\",\n    \"test:conformance\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/conformance/**/*.test.ts\",\n    \"test:sdd\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/sdd/**/*.test.ts\",\n    \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts test/sdd/**/*.test.ts\",\n    \"typecheck\": \"tsc -p tsconfig.typecheck.json\",\n    \"typecheck:examples\": \"tsc -p examples/cloudflare/tsconfig.json && tsc -p examples/node/tsconfig.json && tsc -p examples/session/tsconfig.json\",\n    \"typecheck:tests\": \"tsc -p tsconfig.full.json --noEmit\",\n    \"typecheck:all\": \"pnpm typecheck && pnpm typecheck:examples && pnpm typecheck:tests\",\n    \"test:migrations\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/migrations*.test.ts test/cli-migrate.test.ts\"\n  },\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"*\": [\n        \"dist/index.d.ts\"\n      ],\n      \"admin\": [\n        \"dist/admin.d.ts\"\n      ],\n      \"auth/server\": [\n        \"dist/auth/server.d.ts\"\n      ],\n      \"billing\": [\n        \"dist/billing.d.ts\"\n      ],\n      \"browser\": [\n        \"dist/browser.d.ts\"\n      ],\n      \"cloudflare\": [\n        \"dist/cloudflare.d.ts\"\n      ],\n      \"contracts\": [\n        \"dist/contracts.d.ts\"\n      ],\n      \"contracts/v1\": [\n        \"dist/contracts/v1.d.ts\"\n      ],\n      \"cookies\": [\n        \"dist/cookies.d.ts\"\n      ],\n      \"env\": [\n        \"dist/env.d.ts\"\n      ],\n      \"email\": [\n        \"dist/email.d.ts\"\n      ],\n      \"email/node\": [\n        \"dist/email/node.d.ts\"\n      ],\n      \"next/client\": [\n        \"dist/next/client.d.ts\"\n      ],\n      \"next/server\": [\n        \"dist/next/server.d.ts\"\n      ],\n      \"next/session\": [\n        \"dist/next/session.d.ts\"\n      ],\n      \"organization\": [\n        \"dist/organization.d.ts\"\n      ],\n      \"policy\": [\n        \"dist/policy.d.ts\"\n      ],\n      \"server\": [\n        \"dist/server.d.ts\"\n      ],\n      \"runtime\": [\n        \"dist/runtime.d.ts\"\n      ],\n      \"rights\": [\n        \"dist/rights.d.ts\"\n      ],\n      \"devtools\": [\n        \"dist/devtools.d.ts\"\n      ],\n      \"react\": [\n        \"dist/react.d.ts\"\n      ],\n      \"react-native\": [\n        \"dist/react-native.d.ts\"\n      ],\n      \"social-providers\": [\n        \"dist/social-providers.d.ts\"\n      ],\n      \"utils\": [\n        \"dist/utils.d.ts\"\n      ],\n      \"migrations\": [\n        \"dist/migrations.d.ts\"\n      ]\n    }\n  },\n  \"version\": \"5.4.1\",\n  \"overrides\": {\n    \"brace-expansion@<1.1.18\": \"1.1.18\",\n    \"brace-expansion@>=5 <5.0.9\": \"5.0.9\",\n    \"flatted\": \">=3.4.4\",\n    \"minimatch@3\": \"3.1.3\",\n    \"picomatch\": \"4.0.4\",\n    \"rollup\": \">=4.59.0\"\n  },\n  \"packageManager\": \"pnpm@11.23.0\",\n  \"pnpm\": {\n    \"overrides\": {\n      \"brace-expansion@1\": \"1.1.18\",\n      \"brace-expansion@5\": \"5.0.9\",\n      \"flatted\": \">=3.4.4\",\n      \"minimatch@3\": \"3.1.3\",\n      \"picomatch@4\": \"4.0.4\",\n      \"rollup\": \">=4.59.0\",\n      \"ajv@6\": \"6.14.0\",\n      \"esbuild@0.27\": \"0.28.1\",\n      \"esbuild@0.28.0\": \"0.28.1\"\n    }\n  }\n}\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 { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst apiKeyGenerateFlags = [\n\t\"--bytes <n>\",\n\t\"--prefix <str>\",\n\t\"--write\",\n\t\"--env-file <path>\",\n\t\"--env-key <name>\",\n\t\"--force\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst apiKeyCreateFlags = [\n\t\"--name <name>\",\n\t\"--rights a,b\",\n\t\"--client-name <c>\",\n\t\"--description <d>\",\n\t\"--expires-at <iso>\",\n\t\"--url <gateway>\",\n\t\"--admin-key <secret>\",\n\t\"--write\",\n\t\"--env-file <path>\",\n\t\"--env-key <name>\",\n\t\"--force\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst apiKeyListFlags = [\n\t\"--url <gateway>\",\n\t\"--admin-key <secret>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const apiKeyCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"key generate\", \"api-key gen\", \"api-key new\"],\n\t\tcommand: \"api-key generate\",\n\t\tdescription:\n\t\t\t\"Generate a local static admin secret (ATHENA_KEY_12; no network)\",\n\t\tflags: apiKeyGenerateFlags,\n\t\tgroup: \"local-secrets\",\n\t\thelpTopic: \"api-key\",\n\t\tnotes: [\n\t\t\t\"generate: offline ATHENA_KEY_12 / P12 secret only — does not register a gateway API key store row.\",\n\t\t\t\"create/list: POST/GET /admin/api-keys via gateway admin (ATHENA_KEY_12). create --write sets ATHENA_API_KEY.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js api-key generate --write\",\n\t\t\t\"athena-js api-key create --name analytics --rights gateway.query --client-name analytics --write\",\n\t\t\t\"athena-js api-key list --json\",\n\t\t],\n\t},\n\t{\n\t\taliases: [\"key create\"],\n\t\tcommand: \"api-key create\",\n\t\tdescription:\n\t\t\t\"Create gateway API key via POST /admin/api-keys (static admin key)\",\n\t\tflags: apiKeyCreateFlags,\n\t\tgroup: \"gateway-admin\",\n\t\thelpTopic: \"api-key\",\n\t\tnotes: [\n\t\t\t\"--rights tokens are parseAthenaRightKey (dotted AthenaRightKey). Invalid names fail closed; admin:read is not rewritten to admin.read.\",\n\t\t],\n\t},\n\t{\n\t\taliases: [\"key list\", \"api-key ls\", \"key ls\"],\n\t\tcommand: \"api-key list\",\n\t\tdescription: \"List gateway API keys via GET /admin/api-keys\",\n\t\tflags: apiKeyListFlags,\n\t\tgroup: \"gateway-admin\",\n\t\thelpTopic: \"api-key\",\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst authHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst authJsonFlags = [\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authDoctorFlags = [\n\t\"--json\",\n\t\"--strict\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authAuditFlags = [\n\t\"--limit <n>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authTracesFlags = [\n\t\"--errors\",\n\t\"--limit <n>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const authCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"auth\",\n\t\tdescription: \"Embedded Auth operations (status, capabilities, audit, traces)\",\n\t\tflags: authHelpFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\texamples: [\n\t\t\t\"athena-js auth status\",\n\t\t\t\"athena-js auth doctor\",\n\t\t\t\"athena-js auth capabilities\",\n\t\t\t\"athena-js auth audit list --limit 20\",\n\t\t\t\"athena-js auth traces list --errors\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"auth status\",\n\t\tdescription: \"Embedded vs Rust capability snapshot and schema generation\",\n\t\tflags: authJsonFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\tnotes: [\n\t\t\t\"Inspects Embedded Auth on postgres/direct (schema generation and observability tables).\",\n\t\t\t\"Inspect failures exit nonzero. Observability columns are not printed as unknown when inspect cannot run.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"auth doctor\",\n\t\tdescription: \"Auth-focused health: generation, capabilities, observability tables\",\n\t\tflags: authDoctorFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\tnotes: [\n\t\t\t\"Same inspect path as auth status, plus --strict.\",\n\t\t\t\"Inspect failures exit nonzero instead of reporting audit_log_auth / traces_auth as unknown.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"auth capabilities\",\n\t\tdescription: \"Catalog matrix of Embedded vs Rust Auth operations\",\n\t\tflags: authJsonFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\tnotes: [\n\t\t\t\"Static catalog matrix (Embedded vs dedicated Auth). Does not open a database.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"auth audit\",\n\t\tdescription: \"List or show audit_log_auth events (local database)\",\n\t\tflags: authAuditFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\tnotes: [\n\t\t\t\"Reads athena.audit_log_auth on postgres/direct. Requires observability generation 23+.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"auth traces\",\n\t\tdescription: \"List or show traces_auth rows (local database)\",\n\t\tflags: authTracesFlags,\n\t\tgroup: \"auth\",\n\t\thelpTopic: \"auth\",\n\t\tnotes: [\n\t\t\t\"Reads athena.traces_auth on postgres/direct. Requires observability generation 23+.\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst commandsFlags = [\n\t\"--json\",\n\t\"--plain\",\n\t\"--groups\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const commandsCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\n\t\t\t\"-C\",\n\t\t\t\"--commands\",\n\t\t\t\"--list-commands\",\n\t\t\t\"--cmds\",\n\t\t\t\"commands\",\n\t\t\t\"list-commands\",\n\t\t\t\"cmds\",\n\t\t],\n\t\tcommand: \"commands\",\n\t\tdescription: \"List every CLI command, alias, and common flags\",\n\t\tflags: commandsFlags,\n\t\tgroup: \"global\",\n\t\thelpTopic: \"commands\",\n\t\tnotes: [\n\t\t\t\"Prints the full athena-js command inventory (SSOT).\",\n\t\t\t\"Use `athena-js <command> --help` for detailed flags on one command.\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst doctorFlags = [\n\t\"--config <path>\",\n\t\"--strict\",\n\t\"--skip-runtime\",\n\t\"--json\",\n\t\"--plain\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst doctorBundleFlags = [\n\t\"--out <path>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const doctorCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"doctor\",\n\t\tdescription:\n\t\t\t\"Project health check: Node, config, env, and local runtime (read-only)\",\n\t\tflags: doctorFlags,\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"doctor\",\n\t\tnotes: [\n\t\t\t\"Read-only project health check (Node, config, env, local runtime).\",\n\t\t\t\"Does not write files or apply migrations. Exit 5 when any check is error.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js doctor\",\n\t\t\t\"athena-js doctor --strict\",\n\t\t\t\"athena-js doctor --skip-runtime --json\",\n\t\t\t\"athena-js doctor bundle\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"doctor bundle\",\n\t\tdescription: \"Write a secret-safe diagnostic directory\",\n\t\tflags: doctorBundleFlags,\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"doctor\",\n\t\tnotes: [\n\t\t\t\"Writes redacted JSON (no database passwords, API keys, JWT, or SMTP secrets).\",\n\t\t],\n\t},\n];\n","import type {\n\tCliCatalogFlag,\n\tCliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst envCheckFlags = [\n\t\"--file <path>\",\n\t\"-f <path>\",\n\t\"--mode auto|direct|gateway\",\n\t\"--strict\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const envCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"env\", \"env validate\"],\n\t\tcommand: \"env check\",\n\t\tdescription: \"Validate .env / .env.local keys and URLs\",\n\t\tflags: envCheckFlags,\n\t\tgroup: \"env\",\n\t\thelpTopic: \"env\",\n\t\tnotes: [\n\t\t\t\"Validates Athena-related keys and URLs from project env files and process env.\",\n\t\t\t\"Exit 5 when one or more validation errors are present.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js env check\",\n\t\t\t\"athena-js env check --file .env.local --mode gateway\",\n\t\t\t\"athena-js env validate --json\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst generateFlags = [\n\t\"--config <path>\",\n\t\"--dry-run\",\n\t\"--no-write-config\",\n\t\"--write-config\",\n\t\"--no-discover-schemas\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const generateCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"generate\",\n\t\tdescription: \"Introspect schema and write models/registry artifacts\",\n\t\tflags: generateFlags,\n\t\tgroup: \"generator\",\n\t\thelpTopic: \"generate\",\n\t\tnotes: [\n\t\t\t\"Config resolution:\",\n\t\t\t\"  - uses athena.config.* discovery first\",\n\t\t\t\"  - falls back to env-only direct mode when DATABASE_URL/PG_URL is present\",\n\t\t\t\"  - falls back to env-only gateway mode when ATHENA_URL + ATHENA_API_KEY are present\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js generate\",\n\t\t\t\"DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/app_db athena-js generate --dry-run\",\n\t\t\t\"athena-js generate --config ./athena.config.ts --dry-run\",\n\t\t\t\"athena-js generate --no-write-config\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst helpFlags = [\"[<topic>]\"] as const satisfies readonly CliCatalogFlag[];\n\nexport const helpCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"-h\", \"--help\", \"help\"],\n\t\tcommand: \"help\",\n\t\tdescription: \"Show root help (or help <topic>)\",\n\t\tflags: helpFlags,\n\t\tgroup: \"global\",\n\t\thelpTopic: \"root\",\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst initFlags = [\n\t\"--config <path>\",\n\t\"--mode direct|gateway|auto\",\n\t\"--force\",\n\t\"--dry-run\",\n\t\"--no-discover-schemas\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const initCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"init\",\n\t\tdescription: \"Create or surgically update athena.config.ts\",\n\t\tflags: initFlags,\n\t\tgroup: \"project\",\n\t\thelpTopic: \"init\",\n\t\tnotes: [\n\t\t\t\"Behavior:\",\n\t\t\t\"  - missing file → write modern athena-direct config with generatorEnv-backed secrets\",\n\t\t\t\"  - existing file → only patch provider.schemas when discovery finds new schemas\",\n\t\t\t\"  - gateway mode works fully via ATHENA_URL + ATHENA_API_KEY env fallbacks\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js init\",\n\t\t\t\"athena-js init --mode gateway\",\n\t\t\t\"athena-js init --dry-run\",\n\t\t\t\"athena-js init --force\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst migrateApplyFlags = [\n\t\"--config <path>\",\n\t\"--dry-run\",\n\t\"--allow-dirty-migrations\",\n\t\"--json\",\n\t\"--plain\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateStatusFlags = [\n\t\"--config <path>\",\n\t\"--json\",\n\t\"--plain\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateJsonFlags = [\n\t\"--config <path>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateCheckFlags = [\n\t\"--config <path>\",\n\t\"--strict\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateReconcileFlags = [\n\t\"--config <path>\",\n\t\"--apply\",\n\t\"--yes\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateVerifyFlags = [\n\t\"--config <path>\",\n\t\"--json\",\n\t\"--strict\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateRepairFlags = [\n\t\"--config <path>\",\n\t\"--yes\",\n\t\"--dry-run\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const migrateCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"migrate\",\n\t\tdescription: \"Apply pending SQL migrations (direct Postgres)\",\n\t\tflags: migrateApplyFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t\tnotes: [\n\t\t\t\"Requires provider.kind=postgres and provider.mode=direct.\",\n\t\t\t\"Preflights the pending batch against the physical catalog, then applies each file under a PostgreSQL session advisory lock.\",\n\t\t\t\"Use migrate check for static analysis; migrate reconcile [--apply] for ledger vs physical metadata.\",\n\t\t\t\"Fails closed on uncommitted files unless --allow-dirty-migrations --yes.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js migrate\",\n\t\t\t\"athena-js migrate --dry-run\",\n\t\t\t\"athena-js migrate status\",\n\t\t\t\"athena-js migrate check --strict\",\n\t\t\t\"athena-js migrate reconcile\",\n\t\t\t\"athena-js migrate reconcile --apply --yes\",\n\t\t\t\"athena-js migrate --allow-dirty-migrations --yes\",\n\t\t\t\"athena-js migrate repair --yes\",\n\t\t\t\"athena-js migrate auth sync\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"migrate status\",\n\t\tdescription: \"Show applied/pending/conflict migration rows\",\n\t\tflags: migrateStatusFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate-status\",\n\t\tnotes: [\n\t\t\t\"Prints applied, pending, and conflict rows from local SQL plus the athena.schema_migrations ledger.\",\n\t\t\t\"Does not apply migrations. Use --plain for unstyled output, --json for machines.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"migrate plan\",\n\t\tdescription: \"Compiler report: graph, pending, physical drift\",\n\t\tflags: migrateJsonFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate check\",\n\t\tdescription: \"Static analysis + physical verification (zero mutations)\",\n\t\tflags: migrateCheckFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate graph\",\n\t\tdescription: \"Print object dependency graph\",\n\t\tflags: migrateJsonFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate explain\",\n\t\tdescription: \"Explain one migration's creates/reads/deps\",\n\t\tflags: migrateJsonFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t\tnotes: [\n\t\t\t\"Requires a version or filename argument.\",\n\t\t\t\"athena-js migrate explain with no target prints migrate help; it does not explain a missing version as (missing).\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js migrate explain 0007\",\n\t\t\t\"athena-js migrate explain 0007_add_indexes.sql\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"migrate drift\",\n\t\tdescription: \"Ledger vs projected vs physical schema\",\n\t\tflags: migrateJsonFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate reconcile\",\n\t\tdescription:\n\t\t\t\"Three-way diagnose repository vs ledger vs physical schema (no SQL)\",\n\t\tflags: migrateReconcileFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate verify\",\n\t\tdescription:\n\t\t\t\"Deployment readiness: ledgers, drift, dirty worktree, Auth generation\",\n\t\tflags: migrateVerifyFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t\tnotes: [\n\t\t\t\"Read-only. Does not apply SQL. Exit 6 when the revision is not safe to deploy.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"migrate repair\",\n\t\tdescription: \"Repair Auth schema drift (inspect/restore app objects separately)\",\n\t\tflags: migrateRepairFlags,\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t},\n\t{\n\t\tcommand: \"migrate auth sync\",\n\t\taliases: [\"migrate auth materialize\", \"migrate auth\"],\n\t\tdescription:\n\t\t\t\"Rematerialize package-owned Embedded Auth SQL under athena/managed/auth/migrations\",\n\t\tflags: [\"--config <path>\", \"--dry-run\", \"--json\", \"--plain\", \"-h\"],\n\t\tgroup: \"migrations\",\n\t\thelpTopic: \"migrate\",\n\t\tnotes: [\n\t\t\t\"Local files are a read-only inspection view. Runtime apply never executes edited copies.\",\n\t\t\t\"Does not touch athena/migrations or the application ledger.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js migrate auth sync\",\n\t\t\t\"athena-js migrate auth materialize\",\n\t\t\t\"athena-js migrate auth sync --dry-run\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst reconcileFlags = [\n\t\"--config <path>\",\n\t\"--connection <id>\",\n\t\"--subject <id>\",\n\t\"--provider <name>\",\n\t\"--customer <id>\",\n\t\"--limit <n>\",\n\t\"--max-pages <n>\",\n\t\"--max-customers <n>\",\n\t\"--max-duration <ms>\",\n\t\"--cursor <cursor>\",\n\t\"--include-ambiguous\",\n\t\"--dry-run\",\n\t\"--apply\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const billingCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"billing reconcile-subjects\",\n\t\tdescription:\n\t\t\t\"Import provider customers onto Athena subjects (dry-run default; email is never identity)\",\n\t\texamples: [\n\t\t\t\"athena-js billing reconcile-subjects --connection <id> --dry-run\",\n\t\t\t\"athena-js billing reconcile-subjects --connection <id> --apply --json\",\n\t\t],\n\t\tflags: reconcileFlags,\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t\tnotes: [\n\t\t\t\"Does not bind ownership by email unless unique-email auto-bind is enabled.\",\n\t\t\t\"Provider metadata subject IDs outrank email.\",\n\t\t\t\"Does not auto-merge duplicate provider customers.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"billing webhooks status\",\n\t\tdescription:\n\t\t\t\"Show owned billing webhook registration, route, and delivery health\",\n\t\texamples: [\n\t\t\t\"athena-js billing webhooks status --json\",\n\t\t\t\"athena-js billing webhooks status --connection <id>\",\n\t\t],\n\t\tflags: [\n\t\t\t\"--config <path>\",\n\t\t\t\"--connection <id>\",\n\t\t\t\"--provider <name>\",\n\t\t\t\"--json\",\n\t\t\t\"-h\",\n\t\t],\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t},\n\t{\n\t\tcommand: \"billing ingestion health\",\n\t\tdescription: \"Show recent webhook ingress accept/reject rates\",\n\t\texamples: [\n\t\t\t\"athena-js billing ingestion health --json\",\n\t\t\t\"athena-js billing ingestion health --connection <id>\",\n\t\t],\n\t\tflags: [\n\t\t\t\"--config <path>\",\n\t\t\t\"--connection <id>\",\n\t\t\t\"--provider <name>\",\n\t\t\t\"--json\",\n\t\t\t\"-h\",\n\t\t],\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t},\n\t{\n\t\tcommand: \"billing webhooks reconcile\",\n\t\tdescription:\n\t\t\t\"Reconcile Athena-owned Mollie webhook registrations (dry-run default)\",\n\t\texamples: [\n\t\t\t\"athena-js billing webhooks reconcile --dry-run\",\n\t\t\t\"athena-js billing webhooks reconcile --apply --connection <id>\",\n\t\t],\n\t\tflags: [\n\t\t\t\"--config <path>\",\n\t\t\t\"--connection <id>\",\n\t\t\t\"--provider <name>\",\n\t\t\t\"--dry-run\",\n\t\t\t\"--apply\",\n\t\t\t\"--json\",\n\t\t\t\"-h\",\n\t\t],\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t\tnotes: [\n\t\t\t\"Never mutates foreign provider webhook registrations.\",\n\t\t\t\"--dry-run prints the desired-state diff without calling Mollie.\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"billing webhooks verify\",\n\t\tdescription: \"Verify Athena-owned billing webhook registrations\",\n\t\texamples: [\"athena-js billing webhooks verify --connection <id>\"],\n\t\tflags: [\n\t\t\t\"--config <path>\",\n\t\t\t\"--connection <id>\",\n\t\t\t\"--provider <name>\",\n\t\t\t\"--json\",\n\t\t\t\"-h\",\n\t\t],\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t},\n\t{\n\t\tcommand: \"billing ingress replay\",\n\t\tdescription:\n\t\t\t\"Classify stuck resolving rows and replay retryable billing ingress\",\n\t\texamples: [\n\t\t\t\"athena-js billing ingress replay --dry-run --json\",\n\t\t\t\"athena-js billing ingress replay --classify-only --limit 50\",\n\t\t],\n\t\tflags: [\n\t\t\t\"--config <path>\",\n\t\t\t\"--limit <n>\",\n\t\t\t\"--classify-only\",\n\t\t\t\"--dry-run\",\n\t\t\t\"--json\",\n\t\t\t\"-h\",\n\t\t],\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"billing\",\n\t\tnotes: [\n\t\t\t\"Stuck resolving rows are classified as retryable or terminal. They are never marked processed.\",\n\t\t],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst policyHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst policyConfigFlags = [\n\t\"--config <path>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyShowFlags = [\n\t\"--config <path>\",\n\t\"--id <id>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyExplainFlags = [\n\t\"--config <path>\",\n\t\"--action <name>\",\n\t\"--resource <name>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policySimulateFlags = [\n\t\"--config <path>\",\n\t\"--action <name>\",\n\t\"--resource <name>\",\n\t\"--row\",\n\t\"--row <json>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyExportFlags = [\n\t\"--config <path>\",\n\t\"--format ir\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const policyCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"policy\",\n\t\tdescription: \"Inspect authored Athena Policy IR (no database)\",\n\t\tflags: policyHelpFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t\tnotes: [\n\t\t\t\"Loads policies from athena.config.ts (`policies` or lazy `tooling.policies`).\",\n\t\t\t\"Does not require a generator provider or database connection.\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js policy list\",\n\t\t\t\"athena-js policy validate\",\n\t\t\t\"athena-js policy explain --action select --resource public.invoices\",\n\t\t\t\"athena-js policy simulate --row '{\\\"userId\\\":\\\"user-1\\\"}'\",\n\t\t\t\"athena-js policy export --format ir\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"policy list\",\n\t\tdescription: \"Inventory authored policies\",\n\t\tflags: policyConfigFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy show\",\n\t\tdescription: \"Show one authored policy by id\",\n\t\tflags: policyShowFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy validate\",\n\t\tdescription: \"Validate Policy IR (no database)\",\n\t\tflags: policyConfigFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy lint\",\n\t\tdescription: \"Lint policy expressions with stable codes and severity\",\n\t\tflags: policyConfigFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy coverage\",\n\t\tdescription: \"Coverage cells per resource × action\",\n\t\tflags: policyConfigFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy explain\",\n\t\tdescription: \"Structural interrogation of compiled Policy IR\",\n\t\tflags: policyExplainFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy simulate\",\n\t\tdescription: \"Bind --row and evaluate Policy against a concrete row\",\n\t\tflags: policySimulateFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy fingerprint\",\n\t\tdescription: \"Fingerprint the loaded Policy IR document\",\n\t\tflags: policyConfigFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n\t{\n\t\tcommand: \"policy export\",\n\t\tdescription: \"Export canonical Policy IR (byte-equal to canonicalizeDocument)\",\n\t\tflags: policyExportFlags,\n\t\tgroup: \"policy\",\n\t\thelpTopic: \"policy\",\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst rightsReadFlags = [\n\t\"--url <gateway>\",\n\t\"--admin-key <secret>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst rightsCreateFlags = [\n\t\"--name <right>\",\n\t\"--description <text>\",\n\t\"--url <gateway>\",\n\t\"--admin-key <secret>\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const rightsCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"rights ls\"],\n\t\tcommand: \"rights list\",\n\t\tdescription: \"List dynamic API key rights (GET /admin/api-key-rights)\",\n\t\tflags: rightsReadFlags,\n\t\tgroup: \"gateway-admin\",\n\t\thelpTopic: \"rights\",\n\t},\n\t{\n\t\taliases: [\"rights all\"],\n\t\tcommand: \"rights catalog\",\n\t\tdescription:\n\t\t\t\"Unified native + dynamic rights catalog (GET /admin/rights/catalog)\",\n\t\tflags: rightsReadFlags,\n\t\tgroup: \"gateway-admin\",\n\t\thelpTopic: \"rights\",\n\t},\n\t{\n\t\tcommand: \"rights create\",\n\t\tdescription:\n\t\t\t\"Bootstrap a right (POST /admin/api-key-rights). --name is parseAthenaRightKey (fail-closed)\",\n\t\tflags: rightsCreateFlags,\n\t\tgroup: \"gateway-admin\",\n\t\thelpTopic: \"rights\",\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst schemaHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst schemaDiffFlags = [\n\t\"--config <path>\",\n\t\"--from <path>\",\n\t\"--json\",\n\t\"--migration\",\n\t\"--policy-impact\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst schemaSnapshotFlags = [\n\t\"--config <path>\",\n\t\"--out <path>\",\n\t\"--check\",\n\t\"--json\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const schemaCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\tcommand: \"schema\",\n\t\tdescription: \"Schema IR vs physical database (diff / snapshot)\",\n\t\tflags: schemaHelpFlags,\n\t\tgroup: \"schema\",\n\t\thelpTopic: \"schema\",\n\t\tnotes: [\n\t\t\t\"Compares a checked-in schema snapshot to the physical database.\",\n\t\t\t\"Does not apply migrations. Use `schema diff --migration` for a proposed SQL comment stub.\",\n\t\t\t\"`schema diff --policy-impact` reports authored policies impacted by dropped/renamed tables/columns (not a schema lifecycle engine).\",\n\t\t],\n\t\texamples: [\n\t\t\t\"athena-js schema snapshot\",\n\t\t\t\"athena-js schema snapshot --check\",\n\t\t\t\"athena-js schema diff\",\n\t\t\t\"athena-js schema diff --json\",\n\t\t\t\"athena-js schema diff --migration\",\n\t\t\t\"athena-js schema diff --policy-impact\",\n\t\t],\n\t},\n\t{\n\t\tcommand: \"schema diff\",\n\t\tdescription: \"Diff checked-in snapshot against the physical database\",\n\t\tflags: schemaDiffFlags,\n\t\tgroup: \"schema\",\n\t\thelpTopic: \"schema\",\n\t},\n\t{\n\t\tcommand: \"schema snapshot\",\n\t\tdescription: \"Write or check athena/schema.snapshot.json\",\n\t\tflags: schemaSnapshotFlags,\n\t\tgroup: \"schema\",\n\t\thelpTopic: \"schema\",\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst validateFlags = [\n\t\"--config <path>\",\n\t\"--strict\",\n\t\"--json\",\n\t\"--plain\",\n\t\"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const validateCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"validate local\"],\n\t\tcommand: \"validate\",\n\t\tdescription:\n\t\t\t\"Inspect local Data Runtime, Embedded Auth schema, and passkeys (read-only)\",\n\t\tflags: validateFlags,\n\t\tgroup: \"runtime\",\n\t\thelpTopic: \"validate\",\n\t\tnotes: [\n\t\t\t\"Read-only inspection of the local Data Runtime and Embedded Auth on direct Postgres.\",\n\t\t\t\"Does not apply migrations. Exit 5 when any check is error.\",\n\t\t],\n\t\texamples: [\"athena-js validate\", \"athena-js validate local --strict\"],\n\t},\n];\n","import type { CliCatalogFlag, CliCommandEntry } from \"../../commands-catalog.ts\";\n\nconst versionFlags = [\n\t\"--short\",\n\t\"-q\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const versionCatalog: readonly CliCommandEntry[] = [\n\t{\n\t\taliases: [\"-v\", \"--version\", \"v\", \"version\"],\n\t\tcommand: \"version\",\n\t\tdescription: \"Print CLI version, package path, config, and module flags\",\n\t\tflags: versionFlags,\n\t\tgroup: \"global\",\n\t\thelpTopic: \"version\",\n\t},\n];\n","import type { CliCapabilities, CliOutputMode } from \"./types.ts\";\n\nexport interface ResolveCliCapabilitiesOptions {\n\t/** Explicit --json */\n\tjson?: boolean;\n\t/** Explicit --plain */\n\tplain?: boolean;\n\t/** Explicit --no-color */\n\tnoColor?: boolean;\n\t/** Explicit --color / --force-color / FORCE_COLOR */\n\tforceColor?: boolean;\n\tquiet?: boolean;\n\tverbose?: boolean;\n\t/** Injectable stdout TTY detection (tests). */\n\tisTty?: boolean;\n\tenv?: Record<string, string | undefined>;\n}\n\nfunction readEnv(\n\tenv: Record<string, string | undefined> | undefined,\n): Record<string, string | undefined> {\n\tif (env) {\n\t\treturn env;\n\t}\n\treturn (\n\t\t(globalThis as { process?: { env?: Record<string, string | undefined> } })\n\t\t\t.process?.env ?? {}\n\t);\n}\n\nexport function resolveCliOutputMode(\n\toptions: ResolveCliCapabilitiesOptions = {},\n): CliOutputMode {\n\tif (options.json) {\n\t\treturn \"json\";\n\t}\n\tif (options.plain || options.noColor) {\n\t\treturn \"plain\";\n\t}\n\tconst env = readEnv(options.env);\n\tif (env.NO_COLOR !== undefined && env.NO_COLOR !== \"\") {\n\t\treturn \"plain\";\n\t}\n\tif (env.ATHENA_JS_PLAIN === \"1\" || env.ATHENA_JS_PLAIN === \"true\") {\n\t\treturn \"plain\";\n\t}\n\tif (env.ATHENA_JS_JSON === \"1\" || env.ATHENA_JS_JSON === \"true\") {\n\t\treturn \"json\";\n\t}\n\tconst isTty =\n\t\toptions.isTty ??\n\t\tBoolean(\n\t\t\t(globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\n\t\t\t\t?.stdout?.isTTY,\n\t\t);\n\tif (!isTty) {\n\t\treturn \"plain\";\n\t}\n\tif (env.TERM === \"dumb\") {\n\t\treturn \"plain\";\n\t}\n\treturn \"interactive\";\n}\n\nexport function resolveCliCapabilities(\n\toptions: ResolveCliCapabilitiesOptions = {},\n): CliCapabilities {\n\tconst env = readEnv(options.env);\n\tconst mode = resolveCliOutputMode(options);\n\tconst isTty =\n\t\toptions.isTty ??\n\t\tBoolean(\n\t\t\t(globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\n\t\t\t\t?.stdout?.isTTY,\n\t\t);\n\tconst envForceColor =\n\t\tenv.FORCE_COLOR === \"1\" ||\n\t\tenv.FORCE_COLOR === \"2\" ||\n\t\tenv.FORCE_COLOR === \"3\" ||\n\t\tenv.FORCE_COLOR === \"true\";\n\tconst forceColor = Boolean(options.forceColor) || envForceColor;\n\tconst colorDisabled =\n\t\toptions.noColor === true ||\n\t\t(env.NO_COLOR !== undefined && env.NO_COLOR !== \"\") ||\n\t\tenv.FORCE_COLOR === \"0\";\n\tconst color =\n\t\tmode !== \"json\" &&\n\t\tmode !== \"plain\" &&\n\t\t!colorDisabled &&\n\t\t!options.plain &&\n\t\t(mode === \"interactive\" || forceColor);\n\n\treturn {\n\t\tmode,\n\t\tcolor,\n\t\tisTty,\n\t\tquiet: Boolean(options.quiet),\n\t\tverbose: Boolean(options.verbose),\n\t};\n}\n","import type { CliCapabilities, MigrationDisplayStatus } from \"./types.ts\";\n\nconst ANSI = {\n\treset: \"\\u001b[0m\",\n\tbold: \"\\u001b[1m\",\n\tdim: \"\\u001b[2m\",\n\tred: \"\\u001b[31m\",\n\tgreen: \"\\u001b[32m\",\n\tyellow: \"\\u001b[33m\",\n\tcyan: \"\\u001b[36m\",\n} as const;\n\nexport function paint(\n\ttext: string,\n\tcolor: keyof typeof ANSI | \"none\",\n\tcapabilities: CliCapabilities,\n): string {\n\tif (!capabilities.color || color === \"none\" || color === \"reset\") {\n\t\treturn text;\n\t}\n\treturn `${ANSI[color]}${text}${ANSI.reset}`;\n}\n\nexport function statusColor(\n\tstatus: MigrationDisplayStatus,\n): keyof typeof ANSI | \"none\" {\n\tswitch (status) {\n\t\tcase \"applied\":\n\t\tcase \"repaired\":\n\t\t\treturn \"green\";\n\t\tcase \"pending\":\n\t\tcase \"legacy-compatible\":\n\t\tcase \"drift\":\n\t\t\treturn \"yellow\";\n\t\tcase \"applying\":\n\t\t\treturn \"cyan\";\n\t\tcase \"checksum-mismatch\":\n\t\tcase \"failed\":\n\t\tcase \"missing-local\":\n\t\t\treturn \"red\";\n\t\tcase \"skipped\":\n\t\tcase \"unknown\":\n\t\t\treturn \"dim\";\n\t\tcase \"name-mismatch\":\n\t\tcase \"historical-insertion\":\n\t\t\treturn \"yellow\";\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = status;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n","import { paint } from \"./colors.ts\";\nimport type { CliCapabilities } from \"./types.ts\";\n\nexport interface CliRail {\n  bar: string;\n  done: string;\n  end: string;\n  error: string;\n  start: string;\n  step: string;\n  warn: string;\n}\n\nexport function cliRail(interactive: boolean): CliRail {\n  if (interactive) {\n    return {\n      bar: \"│\",\n      done: \"◇\",\n      end: \"└\",\n      error: \"■\",\n      start: \"┌\",\n      step: \"◆\",\n      warn: \"▲\",\n    };\n  }\n  return {\n    bar: \"\",\n    done: \"\",\n    end: \"\",\n    error: \"\",\n    start: \"\",\n    step: \"\",\n    warn: \"\",\n  };\n}\n\nexport function usesRail(capabilities: CliCapabilities): boolean {\n  return capabilities.mode === \"interactive\";\n}\n\nexport function railStart(\n  title: string,\n  capabilities: CliCapabilities\n): string {\n  const rail = cliRail(usesRail(capabilities));\n  if (!rail.start) {\n    return paint(title, \"bold\", capabilities);\n  }\n  return `${paint(rail.start, \"dim\", capabilities)}  ${paint(title, \"bold\", capabilities)}`;\n}\n\nexport function railBar(\n  text: string,\n  capabilities: CliCapabilities\n): string {\n  const rail = cliRail(usesRail(capabilities));\n  if (!rail.bar) {\n    return text;\n  }\n  const bar = paint(rail.bar, \"dim\", capabilities);\n  if (text.length === 0) {\n    return bar;\n  }\n  return `${bar}  ${text}`;\n}\n\nexport function railEnd(\n  message: string,\n  capabilities: CliCapabilities\n): string {\n  const rail = cliRail(usesRail(capabilities));\n  if (!rail.end) {\n    return message;\n  }\n  const end = paint(rail.end, \"dim\", capabilities);\n  if (message.length === 0) {\n    return end;\n  }\n  return `${end}  ${message}`;\n}\n\nexport function railError(\n  message: string,\n  capabilities: CliCapabilities\n): string {\n  const rail = cliRail(usesRail(capabilities));\n  const painted = paint(message, \"red\", capabilities);\n  if (!rail.end) {\n    return painted;\n  }\n  return `${paint(rail.end, \"red\", capabilities)}  ${paint(rail.error, \"red\", capabilities)}  ${painted}`;\n}\n\n/**\n * Wrap a multi-line block in the same ┌ │ └ session used by prompts.\n * No-ops in plain/json modes so scripts keep unframed text.\n */\nexport function frameBlock(\n  text: string,\n  capabilities: CliCapabilities\n): string {\n  if (!usesRail(capabilities)) {\n    return text;\n  }\n  const lines = text.split(\"\\n\");\n  const title = lines[0] ?? \"\";\n  const rest = lines.slice(1);\n  const framed = [railStart(title, capabilities)];\n  for (const line of rest) {\n    framed.push(railBar(line, capabilities));\n  }\n  framed.push(railEnd(\"\", capabilities));\n  return framed.join(\"\\n\");\n}\n","import { paint } from \"./colors.ts\";\nimport { frameBlock, usesRail } from \"./rail.ts\";\nimport type { CliCapabilities } from \"./types.ts\";\n\nconst SECTION_RE = /^[A-Za-z][A-Za-z0-9 /&|()._-]{0,48}:$/;\n\nfunction colorizeFlags(line: string, capabilities: CliCapabilities): string {\n\tif (!capabilities.color) {\n\t\treturn line;\n\t}\n\treturn line\n\t\t.replaceAll(\n\t\t\t/(^| )(--[a-zA-Z0-9-]+)/g,\n\t\t\t(_match, space: string, flag: string) => {\n\t\t\t\treturn `${space}${paint(flag, \"yellow\", capabilities)}`;\n\t\t\t},\n\t\t)\n\t\t.replaceAll(\n\t\t\t/(^| )(-[a-zA-Z])(?![a-zA-Z0-9-])/g,\n\t\t\t(_match, space: string, flag: string) => {\n\t\t\t\treturn `${space}${paint(flag, \"yellow\", capabilities)}`;\n\t\t\t},\n\t\t);\n}\n\n/**\n * Paint help pages: bold title, cyan section headers, yellow flags,\n * then the shared TUI rail when interactive.\n */\nexport function styleHelpText(\n\ttext: string,\n\tcapabilities: CliCapabilities,\n): string {\n\tconst lines = text.split(\"\\n\");\n\tconst styled = lines.map((line, index) => {\n\t\tif (index === 0 && line.length > 0) {\n\t\t\treturn usesRail(capabilities) ? line : paint(line, \"bold\", capabilities);\n\t\t}\n\t\tif (SECTION_RE.test(line)) {\n\t\t\treturn paint(line, \"cyan\", capabilities);\n\t\t}\n\t\treturn colorizeFlags(line, capabilities);\n\t});\n\tconst body = styled.join(\"\\n\");\n\tif (!usesRail(capabilities)) {\n\t\treturn body;\n\t}\n\treturn frameBlock(body, capabilities);\n}\n\nconst TAG_COLOR: Record<string, \"cyan\" | \"green\" | \"yellow\" | \"red\" | \"dim\"> = {\n\tadmin: \"cyan\",\n\tconfig: \"cyan\",\n\t\"dry-run\": \"cyan\",\n\terror: \"red\",\n\tfilter: \"cyan\",\n\tmerge: \"cyan\",\n\tmode: \"cyan\",\n\tnote: \"dim\",\n\tok: \"green\",\n\tprovider: \"cyan\",\n\tskip: \"dim\",\n\ttargets: \"cyan\",\n\twarn: \"yellow\",\n\twrite: \"green\",\n};\n\n/**\n * Color leading `[tag]` markers used by generate / init / env / admin output.\n */\nexport function colorizeTaggedLine(\n\tline: string,\n\tcapabilities: CliCapabilities,\n): string {\n\tif (!capabilities.color) {\n\t\treturn line;\n\t}\n\treturn line.replace(\n\t\t/^(\\s*)\\[([^\\]]+)\\]/,\n\t\t(_match, space: string, rawTag: string) => {\n\t\t\tconst tag = rawTag.trim().toLowerCase();\n\t\t\tconst color = TAG_COLOR[tag];\n\t\t\tif (!color) {\n\t\t\t\treturn `${space}[${rawTag}]`;\n\t\t\t}\n\t\t\treturn `${space}${paint(`[${rawTag}]`, color, capabilities)}`;\n\t\t},\n\t);\n}\n","/**\n * Full athena-js CLI command inventory (assembled from `commands/<name>/catalog.ts`).\n */\n\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport { apiKeyCatalog } from \"./commands/api-key/catalog.ts\";\nimport { authCatalog } from \"./commands/auth/catalog.ts\";\nimport { commandsCatalog } from \"./commands/commands/catalog.ts\";\nimport { doctorCatalog } from \"./commands/doctor/catalog.ts\";\nimport { envCatalog } from \"./commands/env/catalog.ts\";\nimport { generateCatalog } from \"./commands/generate/catalog.ts\";\nimport { helpCatalog } from \"./commands/help/catalog.ts\";\nimport { initCatalog } from \"./commands/init/catalog.ts\";\nimport { migrateCatalog } from \"./commands/migrate/catalog.ts\";\nimport { billingCatalog } from \"./commands/billing/catalog.ts\";\nimport { policyCatalog } from \"./commands/policy/catalog.ts\";\nimport { rightsCatalog } from \"./commands/rights/catalog.ts\";\nimport { schemaCatalog } from \"./commands/schema/catalog.ts\";\nimport { validateCatalog } from \"./commands/validate/catalog.ts\";\nimport { versionCatalog } from \"./commands/version/catalog.ts\";\nimport { resolveCliCapabilities } from \"./ui/capabilities.ts\";\nimport { paint } from \"./ui/colors.ts\";\nimport { styleHelpText } from \"./ui/help.ts\";\nimport type { CliCapabilities } from \"./ui/types.ts\";\n\n/** Canonical `athena-js billing reconcile-subjects` inventory token. */\nexport const BILLING_RECONCILE_SUBJECTS_COMMAND = \"billing reconcile-subjects\";\n\n/** Documented flag tokens in `CLI_COMMAND_CATALOG` (help / `commands` inventory). */\nexport type CliCatalogFlag =\n\t| \"-f <path>\"\n\t| \"-h\"\n\t| \"-q\"\n\t| \"--admin-key <secret>\"\n\t| \"--allow-dirty-migrations\"\n\t| \"--apply\"\n\t| \"--bytes <n>\"\n\t| \"--client-name <c>\"\n\t| \"--config <path>\"\n\t| \"--description <d>\"\n\t| \"--description <text>\"\n\t| \"--dry-run\"\n\t| \"--env-file <path>\"\n\t| \"--env-key <name>\"\n\t| \"--expires-at <iso>\"\n\t| \"--file <path>\"\n\t| \"--force\"\n\t| \"--groups\"\n\t| \"--json\"\n\t| `--mode ${string}`\n\t| \"--name <name>\"\n\t| \"--name <right>\"\n\t| \"--no-discover-schemas\"\n\t| \"--no-write-config\"\n\t| \"--plain\"\n\t| \"--prefix <str>\"\n\t| \"--rights a,b\"\n\t| \"--short\"\n\t| \"--skip-runtime\"\n\t| \"--strict\"\n\t| \"--url <gateway>\"\n\t| \"--write\"\n\t| \"--write-config\"\n\t| \"--yes\"\n\t| \"--from <path>\"\n\t| \"--out <path>\"\n\t| \"--migration\"\n\t| \"--check\"\n\t| \"--limit <n>\"\n\t| \"--errors\"\n\t| \"--id <id>\"\n\t| \"--action <name>\"\n\t| \"--resource <name>\"\n\t| \"--row\"\n\t| \"--row <json>\"\n\t| \"--format ir\"\n\t| \"--policy-impact\"\n\t| \"--connection <id>\"\n\t| \"--subject <id>\"\n\t| \"--provider <name>\"\n\t| \"--customer <id>\"\n\t| \"--cursor <cursor>\"\n\t| \"--classify-only\"\n\t| \"--include-ambiguous\"\n\t| \"--max-pages <n>\"\n\t| \"--max-customers <n>\"\n\t| \"--max-duration <ms>\"\n\t| \"[<topic>]\";\n\nexport interface CliCommandEntry {\n\t/** Canonical invocation path, e.g. `api-key create`. */\n\tcommand: string;\n\t/** Short summary. */\n\tdescription: string;\n\t/** Notable flags (not exhaustive when `…` used). */\n\tflags?: readonly CliCatalogFlag[];\n\t/** Alternate spellings that parse to the same command. */\n\taliases?: string[];\n\t/** Grouping label for human output. */\n\tgroup:\n\t\t| \"global\"\n\t\t| \"project\"\n\t\t| \"generator\"\n\t\t| \"schema\"\n\t\t| \"migrations\"\n\t\t| \"auth\"\n\t\t| \"env\"\n\t\t| \"runtime\"\n\t\t| \"gateway-admin\"\n\t\t| \"local-secrets\"\n\t\t| \"policy\";\n\t/** Help topic for `athena-js help <topic>`. */\n\thelpTopic?: CatalogHelpTopic;\n\t/** Extra help paragraphs after Options. */\n\tnotes?: readonly string[];\n\t/** Example invocations (`athena-js …` or env-prefixed). */\n\texamples?: readonly string[];\n}\n\nexport type CatalogHelpTopic =\n\t| \"root\"\n\t| \"generate\"\n\t| \"init\"\n\t| \"migrate\"\n\t| \"migrate-status\"\n\t| \"env\"\n\t| \"api-key\"\n\t| \"rights\"\n\t| \"version\"\n\t| \"commands\"\n\t| \"validate\"\n\t| \"doctor\"\n\t| \"schema\"\n\t| \"auth\"\n\t| \"policy\"\n\t| \"billing\";\n\nexport const CLI_COMMAND_CATALOG: readonly CliCommandEntry[] = [\n\t...helpCatalog,\n\t...versionCatalog,\n\t...commandsCatalog,\n\t...initCatalog,\n\t...generateCatalog,\n\t...schemaCatalog,\n\t...policyCatalog,\n\t...billingCatalog,\n\t...migrateCatalog,\n\t...authCatalog,\n\t...envCatalog,\n\t...validateCatalog,\n\t...doctorCatalog,\n\t...apiKeyCatalog,\n\t...rightsCatalog,\n];\n\nconst GROUP_TITLES: Record<CliCommandEntry[\"group\"], string> = {\n\tauth: \"Auth\",\n\tenv: \"Environment\",\n\tgenerator: \"Generator\",\n\tglobal: \"Global\",\n\t\"gateway-admin\": \"Gateway admin (ATHENA_KEY_12)\",\n\t\"local-secrets\": \"Local secrets\",\n\tmigrations: \"Migrations\",\n\tpolicy: \"Policy\",\n\tproject: \"Project config\",\n\truntime: \"Local runtime\",\n\tschema: \"Schema\",\n};\n\nexport type CommandsListFormat = \"full\" | \"json\" | \"plain\" | \"groups\";\n\nexport interface CommandsListOptions {\n\tformat?: CommandsListFormat;\n\t/** Override catalog (tests). */\n\tcatalog?: readonly CliCommandEntry[];\n\t/** Color the human catalog. Defaults to TTY detection. Ignored for json/plain. */\n\tcapabilities?: CliCapabilities;\n}\n\nexport function listCliCommands(\n\toptions: CommandsListOptions = {},\n): readonly CliCommandEntry[] {\n\treturn options.catalog ?? CLI_COMMAND_CATALOG;\n}\n\nfunction firstPathToken(path: string): string | undefined {\n\tconst token = path.split(\" \")[0];\n\treturn token && token.length > 0 ? token : undefined;\n}\n\nfunction tokenAfterParent(path: string, parent: string): string | undefined {\n\tif (path === parent) {\n\t\treturn undefined;\n\t}\n\tconst prefix = `${parent} `;\n\tif (!path.startsWith(prefix)) {\n\t\treturn undefined;\n\t}\n\treturn firstPathToken(path.slice(prefix.length));\n}\n\nfunction uniqueInCatalogOrder(\n\tcatalog: readonly CliCommandEntry[],\n\tpick: (entry: CliCommandEntry) => string | undefined,\n): string[] {\n\tconst names: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const entry of catalog) {\n\t\tconst name = pick(entry);\n\t\tif (!name || seen.has(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\tnames.push(name);\n\t}\n\treturn names;\n}\n\nfunction catalogPathMatches(\n\tentryCommand: string,\n\tcommandPath: string,\n): boolean {\n\treturn (\n\t\tentryCommand === commandPath ||\n\t\tentryCommand.startsWith(`${commandPath} `) ||\n\t\tcommandPath.startsWith(`${entryCommand} `)\n\t);\n}\n\nfunction optionFlagToken(flag: string): string | undefined {\n\tconst token = flag.split(/\\s+/)[0];\n\treturn token?.startsWith(\"-\") ? token : undefined;\n}\n\n/** Dash flags declared on catalog entries for `commandPath`, plus `--help` / `-h`. */\nexport function catalogOptionFlags(\n\tcommandPath: string,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string[] {\n\tconst names: string[] = [];\n\tconst seen = new Set<string>();\n\tconst add = (name: string | undefined) => {\n\t\tif (!name || seen.has(name)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(name);\n\t\tnames.push(name);\n\t};\n\tfor (const entry of catalog) {\n\t\tif (!catalogPathMatches(entry.command, commandPath)) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const flag of entry.flags ?? []) {\n\t\t\tadd(optionFlagToken(flag));\n\t\t}\n\t}\n\tadd(\"--help\");\n\tadd(\"-h\");\n\treturn names;\n}\n\nexport function catalogHelpTopic(\n\tcommand: string,\n\trest: readonly string[] = [],\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): CatalogHelpTopic | undefined {\n\tconst tokens = command.startsWith(\"-\")\n\t\t? [command]\n\t\t: [command, ...rest.filter((token) => !token.startsWith(\"-\"))];\n\tfor (let length = tokens.length; length >= 1; length -= 1) {\n\t\tconst candidate = tokens.slice(0, length).join(\" \");\n\t\tconst topic = matchCatalogHelpTopic(candidate, catalog);\n\t\tif (topic) {\n\t\t\treturn topic;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction matchCatalogHelpTopic(\n\tcandidate: string,\n\tcatalog: readonly CliCommandEntry[],\n): CatalogHelpTopic | undefined {\n\tfor (const entry of catalog) {\n\t\tif (entry.helpTopic && entry.command === candidate) {\n\t\t\treturn entry.helpTopic;\n\t\t}\n\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\tif (entry.helpTopic && alias === candidate) {\n\t\t\t\treturn entry.helpTopic;\n\t\t\t}\n\t\t}\n\t}\n\tfor (const entry of catalog) {\n\t\tif (entry.helpTopic && firstPathToken(entry.command) === candidate) {\n\t\t\treturn entry.helpTopic;\n\t\t}\n\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\tif (entry.helpTopic && firstPathToken(alias) === candidate) {\n\t\t\t\treturn entry.helpTopic;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function catalogOptionHelpHint(\n\tcommandPath: string,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string {\n\tif (!commandPath) {\n\t\treturn \"Run `athena-js --help` for usage.\";\n\t}\n\tconst topic = catalogHelpTopic(commandPath, [], catalog);\n\tif (topic && topic !== \"root\") {\n\t\treturn `Run \\`athena-js help ${topic}\\` for flags.`;\n\t}\n\treturn `Run \\`athena-js ${commandPath} --help\\` for flags.`;\n}\n\n/** Canonical top-level verbs (`generate`, `api-key`, …) in catalog order. */\nexport function catalogRootCommands(\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string[] {\n\treturn uniqueInCatalogOrder(catalog, (entry) =>\n\t\tfirstPathToken(entry.command),\n\t);\n}\n\n/** Canonical subcommands of `parent` (`api-key create` → `create`). */\nexport function catalogSubcommands(\n\tparent: string,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string[] {\n\treturn uniqueInCatalogOrder(catalog, (entry) =>\n\t\ttokenAfterParent(entry.command, parent),\n\t);\n}\n\n/**\n * Suggestion tokens for an unknown subcommand: canonical names plus\n * non-flag alias tails under the same parent (`api-key gen` → `gen`).\n */\nexport function catalogSubcommandTokens(\n\tparent: string,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string[] {\n\tconst names: string[] = [];\n\tconst seen = new Set<string>();\n\tconst add = (path: string) => {\n\t\tconst name = tokenAfterParent(path, parent);\n\t\tif (!name || seen.has(name)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(name);\n\t\tnames.push(name);\n\t};\n\tfor (const entry of catalog) {\n\t\tadd(entry.command);\n\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\tif (!alias.startsWith(\"-\")) {\n\t\t\t\tadd(alias);\n\t\t\t}\n\t\t}\n\t}\n\treturn names;\n}\n\n/** `\"a\"`, `\"a\" or \"b\"`, or `\"a\", \"b\", or \"c\"`. */\nexport function formatQuotedOrList(items: readonly string[]): string {\n\tif (items.length === 0) {\n\t\treturn \"\";\n\t}\n\tif (items.length === 1) {\n\t\treturn `\"${items[0]}\"`;\n\t}\n\tconst quoted = items.map((item) => `\"${item}\"`);\n\tif (quoted.length === 2) {\n\t\treturn `${quoted[0]} or ${quoted[1]}`;\n\t}\n\tconst last = quoted.at(-1);\n\treturn `${quoted.slice(0, -1).join(\", \")}, or ${last}`;\n}\n\nexport function formatExpectedCommandsLine(items: readonly string[]): string {\n\tconst list = formatQuotedOrList(items);\n\treturn list.length > 0 ? `Expected ${list}.` : \"\";\n}\n\nconst HELP_COLUMN = 24;\n\nfunction formatHelpColumn(left: string, description: string): string {\n\tconst body = left.startsWith(\"  \") ? left : `  ${left}`;\n\tif (body.length >= HELP_COLUMN) {\n\t\treturn `${body} ${description}`;\n\t}\n\treturn `${body}${\" \".repeat(HELP_COLUMN - body.length)}${description}`;\n}\n\nfunction usageFlags(flags: readonly CliCatalogFlag[] | undefined): string {\n\tconst visible = (flags ?? []).filter((flag) => flag !== \"-h\");\n\treturn visible.length > 0 ? ` ${visible.join(\" \")}` : \"\";\n}\n\nfunction dashAliases(entry: CliCommandEntry): string[] {\n\treturn (entry.aliases ?? []).filter((alias) => alias.startsWith(\"-\"));\n}\n\n/** One invocation line: `athena-js generate --dry-run …`. */\nexport function formatCatalogInvocation(entry: CliCommandEntry): string {\n\treturn `athena-js ${entry.command}${usageFlags(entry.flags)}`;\n}\n\nfunction catalogGroupsInOrder(\n\tcatalog: readonly CliCommandEntry[],\n): CliCommandEntry[\"group\"][] {\n\tconst groups: CliCommandEntry[\"group\"][] = [];\n\tconst seen = new Set<CliCommandEntry[\"group\"]>();\n\tfor (const entry of catalog) {\n\t\tif (seen.has(entry.group)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(entry.group);\n\t\tgroups.push(entry.group);\n\t}\n\treturn groups;\n}\n\nfunction familySectionLines(\n\tcatalog: readonly CliCommandEntry[],\n\trender: (entry: CliCommandEntry) => string | undefined,\n): string[] {\n\tconst lines: string[] = [];\n\tfor (const group of catalogGroupsInOrder(catalog)) {\n\t\tconst rendered: string[] = [];\n\t\tfor (const entry of catalog) {\n\t\t\tif (entry.group !== group || entry.command === \"help\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst line = render(entry);\n\t\t\tif (line) {\n\t\t\t\trendered.push(line);\n\t\t\t}\n\t\t}\n\t\tif (rendered.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (lines.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(`${GROUP_TITLES[group]}:`);\n\t\tlines.push(...rendered);\n\t}\n\treturn lines;\n}\n\nfunction rootCommandRows(\n\tcatalog: readonly CliCommandEntry[],\n): Array<{ description: string; group: CliCommandEntry[\"group\"]; name: string }> {\n\tconst rows: Array<{\n\t\tdescription: string;\n\t\tgroup: CliCommandEntry[\"group\"];\n\t\tname: string;\n\t}> = [];\n\tconst seen = new Set<string>();\n\tfor (const entry of catalog) {\n\t\tconst name = firstPathToken(entry.command);\n\t\tif (!name || name === \"help\" || seen.has(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\tconst exact = catalog.find((candidate) => candidate.command === name);\n\t\trows.push({\n\t\t\tdescription: exact?.description ?? entry.description,\n\t\t\tgroup: exact?.group ?? entry.group,\n\t\t\tname,\n\t\t});\n\t}\n\treturn rows;\n}\n\nfunction groupedRootCommandLines(catalog: readonly CliCommandEntry[]): string[] {\n\tconst rows = rootCommandRows(catalog);\n\tconst lines: string[] = [];\n\tfor (const group of catalogGroupsInOrder(catalog)) {\n\t\tconst groupRows = rows.filter((row) => row.group === group);\n\t\tif (groupRows.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (lines.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(`${GROUP_TITLES[group]}:`);\n\t\tfor (const row of groupRows) {\n\t\t\tlines.push(formatHelpColumn(row.name, row.description));\n\t\t}\n\t}\n\treturn lines;\n}\n\nfunction globalOptionRows(catalog: readonly CliCommandEntry[]): string[] {\n\tconst rows: string[] = [];\n\tfor (const entry of catalog) {\n\t\tif (entry.group !== \"global\" || entry.command === \"help\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst flags = dashAliases(entry);\n\t\tif (flags.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\trows.push(\n\t\t\tformatHelpColumn(flags.slice(0, 2).join(\", \"), entry.description),\n\t\t);\n\t\tfor (const extra of flags.slice(2)) {\n\t\t\trows.push(\n\t\t\t\tformatHelpColumn(extra, `Alias of ${flags[1] ?? entry.command}`),\n\t\t\t);\n\t\t}\n\t}\n\tconst help = catalog.find((entry) => entry.command === \"help\");\n\tif (help) {\n\t\tconst flags = dashAliases(help);\n\t\trows.unshift(\n\t\t\tformatHelpColumn(\n\t\t\t\tflags.length > 0 ? flags.join(\", \") : \"-h, --help\",\n\t\t\t\t`${help.description} (also: athena-js --help <command>)`,\n\t\t\t),\n\t\t);\n\t}\n\trows.push(\n\t\tformatHelpColumn(\n\t\t\t\"--color\",\n\t\t\t\"Force ANSI color (--color=always, or FORCE_COLOR=1)\",\n\t\t),\n\t);\n\trows.push(\n\t\tformatHelpColumn(\n\t\t\t\"--no-color\",\n\t\t\t\"Disable ANSI color (--color=never, or NO_COLOR=1)\",\n\t\t),\n\t);\n\trows.push(\n\t\tformatHelpColumn(\n\t\t\t\"-o, --output <format|file>\",\n\t\t\t\"Format text|json|ndjson, or a report file path (e.g. -o strict.txt)\",\n\t\t),\n\t);\n\trows.push(formatHelpColumn(\"-j, --json\", \"Alias of --output json\"));\n\trows.push(\n\t\tformatHelpColumn(\n\t\t\t\"--out-file <path>\",\n\t\t\t\"Write the CLI report to a file (combine with --json for JSON)\",\n\t\t),\n\t);\n\trows.push(formatHelpColumn(\"--plain\", \"Disable rails and color\"));\n\trows.push(formatHelpColumn(\"--quiet\", \"Reduce informational text\"));\n\trows.push(\n\t\tformatHelpColumn(\"--verbose\", \"Print timings and extra diagnostics\"),\n\t);\n\trows.push(\n\t\tformatHelpColumn(\n\t\t\t\"--cwd <path>\",\n\t\t\t\"Working directory (use --cwd; -C remains commands)\",\n\t\t),\n\t);\n\trows.push(formatHelpColumn(\"-c, --config <path>\", \"athena.config path\"));\n\trows.push(formatHelpColumn(\"--profile <name>\", \"Named CLI profile\"));\n\trows.push(\n\t\tformatHelpColumn(\"--strict\", \"Promote configured warnings to errors\"),\n\t);\n\trows.push(\n\t\tformatHelpColumn(\"--debug\", \"Debug verbosity (also ATHENA_JS_DEBUG=1)\"),\n\t);\n\treturn rows;\n}\n\n/** Root `athena-js --help` text from the command catalog. */\nexport function formatRootUsage(\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string {\n\tconst usageLines = familySectionLines(catalog, (entry) => {\n\t\treturn `  ${formatCatalogInvocation(entry)}`;\n\t});\n\tconst commandLines = groupedRootCommandLines(catalog);\n\tconst exampleLines = familySectionLines(catalog, (entry) => {\n\t\treturn `  athena-js ${entry.command}`;\n\t});\n\n\treturn [\n\t\t`athena-js  ${PACKAGE_VERSION}`,\n\t\t\"\",\n\t\t\"Schema, Auth, and environment CLI for @xylex-group/athena.\",\n\t\t\"\",\n\t\t\"Usage:\",\n\t\t...usageLines,\n\t\t\"\",\n\t\t\"Commands:\",\n\t\t...commandLines,\n\t\t\"\",\n\t\t\"Global options:\",\n\t\t...globalOptionRows(catalog),\n\t\t\"\",\n\t\t\"Examples:\",\n\t\t...exampleLines,\n\t\t\"  athena-js --help\",\n\t\t\"  athena-js <command> --help\",\n\t].join(\"\\n\");\n}\n\n/** Topic help (`athena-js help generate`, `help migrate`, …) from catalog entries. */\nexport function formatCatalogTopicUsage(\n\ttopic: CatalogHelpTopic,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string {\n\tif (topic === \"root\") {\n\t\treturn formatRootUsage(catalog);\n\t}\n\n\tconst exact = catalog.filter((entry) => entry.helpTopic === topic);\n\tconst rootName = topic.includes(\"-\") ? undefined : topic;\n\tconst entries =\n\t\trootName === undefined\n\t\t\t? exact\n\t\t\t: catalog.filter((entry) => firstPathToken(entry.command) === rootName);\n\tconst pages = entries.length > 0 ? entries : exact;\n\tconst primary = pages[0];\n\tif (!primary) {\n\t\treturn `athena-js ${topic}`;\n\t}\n\n\tconst titleRoot = firstPathToken(primary.command) ?? primary.command;\n\tconst title =\n\t\ttopic === \"migrate-status\"\n\t\t\t? \"athena-js migrate status\"\n\t\t\t: `athena-js ${titleRoot}`;\n\n\tconst invocations = new Set<string>();\n\tfor (const entry of pages) {\n\t\tinvocations.add(`  ${formatCatalogInvocation(entry)}`);\n\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\tif (alias.startsWith(\"-\") && !alias.startsWith(\"--\")) {\n\t\t\t\tinvocations.add(`  athena-js ${alias}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tinvocations.add(`  athena-js ${alias}${usageFlags(entry.flags)}`);\n\t\t}\n\t}\n\n\tconst optionFlags: string[] = [];\n\tconst seenFlags = new Set<string>();\n\tconst addFlag = (flag: string) => {\n\t\tif (seenFlags.has(flag)) {\n\t\t\treturn;\n\t\t}\n\t\tseenFlags.add(flag);\n\t\toptionFlags.push(flag);\n\t};\n\tfor (const entry of pages) {\n\t\tfor (const flag of entry.flags ?? []) {\n\t\t\tif (flag === \"-h\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\taddFlag(flag);\n\t\t}\n\t}\n\taddFlag(\"-h, --help\");\n\n\tconst notes: string[] = [];\n\tconst examples: string[] = [];\n\tconst seenNote = new Set<string>();\n\tfor (const entry of pages) {\n\t\tnotes.push(entry.description);\n\t\tfor (const note of entry.notes ?? []) {\n\t\t\tif (seenNote.has(note)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseenNote.add(note);\n\t\t\tnotes.push(note);\n\t\t}\n\t\tfor (const example of entry.examples ?? []) {\n\t\t\texamples.push(example.startsWith(\"  \") ? example : `  ${example}`);\n\t\t}\n\t}\n\tif (examples.length === 0) {\n\t\tfor (const entry of pages) {\n\t\t\texamples.push(`  athena-js ${entry.command}`);\n\t\t}\n\t}\n\n\treturn [\n\t\ttitle,\n\t\t\"\",\n\t\t\"Usage:\",\n\t\t...invocations,\n\t\t\"\",\n\t\t\"Options:\",\n\t\t...optionFlags.map((flag) => `  ${flag}`),\n\t\t\"\",\n\t\t...notes,\n\t\t\"\",\n\t\t\"Examples:\",\n\t\t...examples,\n\t].join(\"\\n\");\n}\n\n/** Topic help for a single catalog command name (e.g. `version`). */\nexport function formatCatalogCommandUsage(\n\tcommandName: string,\n\tcatalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG,\n): string {\n\tconst primary =\n\t\tcatalog.find((entry) => entry.command === commandName) ??\n\t\tcatalog.find((entry) => firstPathToken(entry.command) === commandName);\n\tconst topic = primary?.helpTopic;\n\tif (!topic || topic === \"root\") {\n\t\treturn formatRootUsage(catalog);\n\t}\n\treturn formatCatalogTopicUsage(topic, catalog);\n}\n\nexport function formatCommandsCatalog(\n\toptions: CommandsListOptions = {},\n): string {\n\tconst catalog = [...listCliCommands(options)];\n\tconst format = options.format ?? \"full\";\n\n\tif (format === \"json\") {\n\t\treturn JSON.stringify(\n\t\t\t{\n\t\t\t\tcommands: catalog,\n\t\t\t\tcount: catalog.length,\n\t\t\t\tsdkVersion: PACKAGE_VERSION,\n\t\t\t},\n\t\t\tnull,\n\t\t\t2,\n\t\t);\n\t}\n\n\tif (format === \"plain\") {\n\t\tconst paths = new Set<string>();\n\t\tfor (const entry of catalog) {\n\t\t\tpaths.add(entry.command);\n\t\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\t\t// Skip pure flag aliases in plain path mode when they start with -\n\t\t\t\tif (!alias.startsWith(\"-\")) {\n\t\t\t\t\tpaths.add(alias);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...paths].sort((a, b) => a.localeCompare(b)).join(\"\\n\");\n\t}\n\n\tconst capabilities =\n\t\toptions.capabilities ??\n\t\tresolveCliCapabilities({\n\t\t\tplain: true,\n\t\t});\n\n\tif (format === \"groups\") {\n\t\tconst byGroup = new Map<string, string[]>();\n\t\tfor (const entry of catalog) {\n\t\t\tconst title = GROUP_TITLES[entry.group];\n\t\t\tconst bucket = byGroup.get(title) ?? [];\n\t\t\tbucket.push(entry.command);\n\t\t\tbyGroup.set(title, bucket);\n\t\t}\n\t\tconst lines = [`athena-js commands (sdk ${PACKAGE_VERSION})`, \"\"];\n\t\tfor (const [title, commands] of byGroup.entries()) {\n\t\t\tlines.push(`${paint(`${title}:`, \"cyan\", capabilities)}`);\n\t\t\tfor (const command of commands) {\n\t\t\t\tlines.push(`  ${command}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\t\treturn styleHelpText(lines.join(\"\\n\").trimEnd(), capabilities);\n\t}\n\n\t// full\n\tconst lines = [\n\t\t`athena-js command catalog (sdk ${PACKAGE_VERSION})`,\n\t\t`commands: ${catalog.length}`,\n\t\t\"\",\n\t\t\"Global discovery:\",\n\t\t\"  athena-js --help | -h | help\",\n\t\t\"  athena-js --version | -v | version | v [--short|-q]\",\n\t\t\"  athena-js --commands | -C | commands [--json|--plain|--groups]\",\n\t\t\"  athena-js help <topic>\",\n\t\t\"\",\n\t];\n\n\tlet currentGroup: CliCommandEntry[\"group\"] | undefined;\n\tfor (const entry of catalog) {\n\t\tif (entry.group !== currentGroup) {\n\t\t\tcurrentGroup = entry.group;\n\t\t\tlines.push(`${GROUP_TITLES[currentGroup]}:`);\n\t\t}\n\t\tlines.push(`  ${entry.command}`);\n\t\tlines.push(`    ${entry.description}`);\n\t\tif (entry.aliases && entry.aliases.length > 0) {\n\t\t\tlines.push(`    aliases: ${entry.aliases.join(\", \")}`);\n\t\t}\n\t\tif (entry.flags && entry.flags.length > 0) {\n\t\t\tlines.push(`    flags: ${entry.flags.join(\" \")}`);\n\t\t}\n\t\tif (entry.helpTopic) {\n\t\t\tlines.push(`    help: athena-js help ${entry.helpTopic}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"Tips:\");\n\tlines.push(\"  athena-js <command> --help     detailed flags for one command\");\n\tlines.push(\"  athena-js commands --json      machine-readable inventory\");\n\tlines.push(\"  athena-js commands --plain     one path per line (scripting)\");\n\treturn styleHelpText(lines.join(\"\\n\").trimEnd(), capabilities);\n}\n","/**\n * Stable process exit-code taxonomy for `athena-js`.\n *\n * 0 success\n * 1 unexpected/internal failure\n * 2 CLI usage / invalid arguments\n * 3 configuration invalid\n * 4 connectivity/runtime unavailable\n * 5 validation failure\n * 6 migration conflict/drift\n * 7 authentication/authorization failure\n * 8 operation refused by a safety gate\n */\n\nexport const CliExitCode = {\n\tSuccess: 0,\n\tUnexpected: 1,\n\tUsage: 2,\n\tConfiguration: 3,\n\tRuntime: 4,\n\tValidation: 5,\n\tConflict: 6,\n\tAuthorization: 7,\n\tSafetyRefusal: 8,\n} as const;\n\nexport type CliExitCode = (typeof CliExitCode)[keyof typeof CliExitCode];\n\nexport function setCliExitCode(code: number): void {\n\tconst proc = (globalThis as { process?: { exitCode?: number } }).process;\n\tif (proc) {\n\t\tproc.exitCode = code;\n\t}\n}\n\nexport function isCliExitCode(value: number): value is CliExitCode {\n\treturn (\n\t\tvalue === CliExitCode.Success ||\n\t\tvalue === CliExitCode.Unexpected ||\n\t\tvalue === CliExitCode.Usage ||\n\t\tvalue === CliExitCode.Configuration ||\n\t\tvalue === CliExitCode.Runtime ||\n\t\tvalue === CliExitCode.Validation ||\n\t\tvalue === CliExitCode.Conflict ||\n\t\tvalue === CliExitCode.Authorization ||\n\t\tvalue === CliExitCode.SafetyRefusal\n\t);\n}\n","import { CliExitCode } from \"./exit-code.ts\";\n\nexport interface AthenaCliErrorOptions {\n\tcode: string;\n\tmessage: string;\n\thint?: string;\n\tcause?: unknown;\n\tmetadata?: Record<string, unknown>;\n\texitCode?: CliExitCode;\n}\n\nexport class AthenaCliError extends Error {\n\treadonly code: string;\n\treadonly hint?: string;\n\treadonly metadata?: Record<string, unknown>;\n\treadonly exitCode: CliExitCode;\n\n\tconstructor(options: AthenaCliErrorOptions) {\n\t\tsuper(\n\t\t\toptions.message,\n\t\t\toptions.cause !== undefined ? { cause: options.cause } : undefined,\n\t\t);\n\t\tthis.name = \"AthenaCliError\";\n\t\tthis.code = options.code;\n\t\tthis.hint = options.hint;\n\t\tthis.metadata = options.metadata;\n\t\tthis.exitCode = options.exitCode ?? CliExitCode.Unexpected;\n\t}\n}\n\nexport function formatAthenaCliError(\n\terror: AthenaCliError,\n\tlogPath?: string,\n): string {\n\tconst lines = [error.message];\n\tlines.push(\"\", `  ${error.code}`);\n\tif (error.hint) {\n\t\tlines.push(\n\t\t\t\"\",\n\t\t\t...error.hint.split(\"\\n\").map((line) => (line ? `  ${line}` : \"\")),\n\t\t);\n\t}\n\tif (logPath) {\n\t\tlines.push(\"\", `  Log  ${logPath}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n","/**\n * Closest-token suggestions for unknown CLI commands and flags.\n */\n\nexport function levenshtein(a: string, b: string): number {\n\tif (a === b) {\n\t\treturn 0;\n\t}\n\tif (a.length === 0) {\n\t\treturn b.length;\n\t}\n\tif (b.length === 0) {\n\t\treturn a.length;\n\t}\n\n\tconst row = Array.from({ length: b.length + 1 }, (_, index) => index);\n\tfor (let i = 1; i <= a.length; i += 1) {\n\t\tlet previous = i - 1;\n\t\trow[0] = i;\n\t\tfor (let j = 1; j <= b.length; j += 1) {\n\t\t\tconst current = row[j] ?? 0;\n\t\t\tconst cost = a[i - 1] === b[j - 1] ? 0 : 1;\n\t\t\trow[j] = Math.min(\n\t\t\t\t(row[j] ?? 0) + 1,\n\t\t\t\t(row[j - 1] ?? 0) + 1,\n\t\t\t\tprevious + cost\n\t\t\t);\n\t\t\tprevious = current;\n\t\t}\n\t}\n\treturn row[b.length] ?? b.length;\n}\n\nfunction maxSuggestDistance(token: string): number {\n\tif (token.length <= 3) {\n\t\treturn 1;\n\t}\n\tif (token.length <= 8) {\n\t\treturn 2;\n\t}\n\treturn 3;\n}\n\nexport function closestMatches(\n\ttoken: string,\n\tcandidates: readonly string[],\n\tlimit = 3\n): string[] {\n\tconst needle = token.toLowerCase();\n\tconst maxDistance = maxSuggestDistance(needle);\n\tconst ranked = candidates\n\t\t.filter((candidate) => candidate.length > 0)\n\t\t.map((candidate) => ({\n\t\t\tcandidate,\n\t\t\tdistance: levenshtein(needle, candidate.toLowerCase()),\n\t\t}))\n\t\t.filter(\n\t\t\t({ candidate, distance }) =>\n\t\t\t\tdistance > 0 &&\n\t\t\t\tdistance <= maxDistance &&\n\t\t\t\tdistance < candidate.length\n\t\t)\n\t\t.sort((left, right) => {\n\t\t\tif (left.distance !== right.distance) {\n\t\t\t\treturn left.distance - right.distance;\n\t\t\t}\n\t\t\treturn left.candidate.localeCompare(right.candidate);\n\t\t});\n\n\tconst unique: string[] = [];\n\tfor (const { candidate } of ranked) {\n\t\tif (!unique.includes(candidate)) {\n\t\t\tunique.push(candidate);\n\t\t}\n\t\tif (unique.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn unique;\n}\n\nexport function formatDidYouMean(matches: readonly string[]): string {\n\tif (matches.length === 0) {\n\t\treturn \"\";\n\t}\n\tif (matches.length === 1) {\n\t\treturn `Did you mean ${matches[0]}?`;\n\t}\n\treturn `Did you mean one of: ${matches.join(\", \")}?`;\n}\n","import {\n\tCLI_COMMAND_CATALOG,\n\tcatalogOptionFlags,\n\tcatalogOptionHelpHint,\n\tcatalogRootCommands,\n\tformatExpectedCommandsLine,\n} from \"./commands-catalog.ts\";\nimport { AthenaCliError } from \"./errors.ts\";\nimport { CliExitCode } from \"./exit-code.ts\";\nimport { closestMatches, formatDidYouMean } from \"./suggest.ts\";\nimport type { HelpCommand } from \"./types.ts\";\n\nexport function parseCsvList(raw: string): string[] {\n\treturn raw\n\t\t.split(\",\")\n\t\t.map((part) => part.trim())\n\t\t.filter((part) => part.length > 0);\n}\n\nexport function parseGatewayAdminFlags(\n\trest: string[],\n\tstartIndex: number,\n): {\n\tadminKey?: string;\n\tindex: number;\n\tjson: boolean;\n\tconsumed: Record<string, string | boolean | string[] | undefined>;\n\turl?: string;\n} {\n\tlet index = startIndex;\n\tlet json = false;\n\tlet url: string | undefined;\n\tlet adminKey: string | undefined;\n\tconst consumed: Record<string, string | boolean | string[] | undefined> = {};\n\n\twhile (index < rest.length) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--url\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --url option.\");\n\t\t\t}\n\t\t\turl = nextValue;\n\t\t\tindex += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--admin-key\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --admin-key option.\");\n\t\t\t}\n\t\t\tadminKey = nextValue;\n\t\t\tindex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Leave specialized flags to the caller by stopping at unknown tokens\n\t\t// only when caller wants — here we collect common + pass unknown via index.\n\t\tbreak;\n\t}\n\n\tconsumed.json = json;\n\tconsumed.url = url;\n\tconsumed.adminKey = adminKey;\n\treturn { adminKey, consumed, index, json, url };\n}\n\nexport function helpOrRejectUnknownFlags(\n\trest: string[],\n\tstartIndex: number,\n\tcommandPath: string,\n\ttopic: HelpCommand[\"topic\"],\n): HelpCommand | undefined {\n\tfor (const token of rest.slice(startIndex)) {\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic };\n\t\t}\n\t\tthrow unknownOptionError(token, commandPath);\n\t}\n\treturn undefined;\n}\n\nexport function catalogCommandNames(): string[] {\n\tconst names = new Set<string>();\n\tfor (const entry of CLI_COMMAND_CATALOG) {\n\t\tnames.add(entry.command);\n\t\tconst head = entry.command.split(\" \")[0];\n\t\tif (head) {\n\t\t\tnames.add(head);\n\t\t}\n\t\tfor (const alias of entry.aliases ?? []) {\n\t\t\tif (!alias.startsWith(\"-\")) {\n\t\t\t\tnames.add(alias);\n\t\t\t\tconst aliasHead = alias.split(\" \")[0];\n\t\t\t\tif (aliasHead) {\n\t\t\t\t\tnames.add(aliasHead);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...names];\n}\n\nexport function flagsForCommand(commandPath: string): string[] {\n\treturn [\n\t\t...new Set([\n\t\t\t...catalogOptionFlags(commandPath),\n\t\t\t\"--color\",\n\t\t\t\"--no-color\",\n\t\t\t\"--force-color\",\n\t\t]),\n\t];\n}\n\nexport function unknownCommandError(command: string): AthenaCliError {\n\tconst suggestion = formatDidYouMean(\n\t\tclosestMatches(command, catalogCommandNames()),\n\t);\n\treturn new AthenaCliError({\n\t\tcode: \"CLI002\",\n\t\texitCode: CliExitCode.Usage,\n\t\tmessage: [\n\t\t\t`Unknown command \"${command}\".`,\n\t\t\tsuggestion,\n\t\t\tformatExpectedCommandsLine(catalogRootCommands()),\n\t\t\t\"Run `athena-js --help` for usage.\",\n\t\t]\n\t\t\t.filter((line) => line.length > 0)\n\t\t\t.join(\"\\n\"),\n\t});\n}\n\nexport function unknownOptionError(token: string, commandPath: string): AthenaCliError {\n\tconst suggestion = formatDidYouMean(\n\t\tclosestMatches(token, flagsForCommand(commandPath)),\n\t);\n\treturn new AthenaCliError({\n\t\tcode: \"CLI003\",\n\t\texitCode: CliExitCode.Usage,\n\t\tmessage: [\n\t\t\t`Unknown option \"${token}\"${commandPath ? ` for ${commandPath}` : \"\"}.`,\n\t\t\tsuggestion,\n\t\t\tformatExpectedCommandsLine(catalogOptionFlags(commandPath)),\n\t\t\tcatalogOptionHelpHint(commandPath),\n\t\t]\n\t\t\t.filter((line) => line.length > 0)\n\t\t\t.join(\"\\n\"),\n\t});\n}\n","import type { CommandContext } from \"../command-context.ts\";\nimport type { CliCommand } from \"../types.ts\";\n\nexport interface RegisteredCommand {\n\t/** Dotted id used in the JSON protocol (`migrate.plan`). */\n\tid: string;\n\t/** Canonical invocation path (`[\"migrate\", \"plan\"]`). */\n\tpath: readonly string[];\n\t/**\n\t * Alternate first-token spellings (`key` for `api-key`, `-v` for version).\n\t * Full-path aliases use {@link aliasPaths}.\n\t */\n\taliases?: readonly string[];\n\t/** Extra full paths (`[\"env\", \"validate\"]` for `env check`). */\n\taliasPaths?: readonly (readonly string[])[];\n\tlegacy: CliCommand[\"command\"] | readonly CliCommand[\"command\"][];\n\tparse: (rest: string[]) => CliCommand;\n\trun: (ctx: CommandContext, parsed: CliCommand) => Promise<void>;\n\tusage: () => string;\n\tsessionTitle?: (parsed: CliCommand) => string | undefined;\n}\n\nexport interface DefineCommandOptions {\n\tpath: readonly string[];\n\tid?: string;\n\taliases?: readonly string[];\n\taliasPaths?: readonly (readonly string[])[];\n\tlegacy: RegisteredCommand[\"legacy\"];\n\tparse: RegisteredCommand[\"parse\"];\n\trun: RegisteredCommand[\"run\"];\n\tusage: RegisteredCommand[\"usage\"];\n\tsessionTitle?: RegisteredCommand[\"sessionTitle\"];\n}\n\nexport function commandIdFromPath(path: readonly string[]): string {\n\treturn path.join(\".\");\n}\n\nexport function defineCommand(\n\toptions: DefineCommandOptions,\n): RegisteredCommand {\n\treturn {\n\t\tid: options.id ?? commandIdFromPath(options.path),\n\t\tpath: options.path,\n\t\taliases: options.aliases,\n\t\taliasPaths: options.aliasPaths,\n\t\tlegacy: options.legacy,\n\t\tparse: options.parse,\n\t\trun: options.run,\n\t\tusage: options.usage,\n\t\tsessionTitle: options.sessionTitle,\n\t};\n}\n\nexport function legacyIds(command: RegisteredCommand): CliCommand[\"command\"][] {\n\tconst { legacy } = command;\n\tif (typeof legacy === \"string\") {\n\t\treturn [legacy];\n\t}\n\treturn [...legacy];\n}\n","import type { CliCommand } from \"../types.ts\";\nimport {\n\ttype RegisteredCommand,\n\tlegacyIds,\n} from \"./define-command.ts\";\n\nfunction pathEquals(left: readonly string[], right: readonly string[]): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\treturn left.every((token, index) => token === right[index]);\n}\n\nfunction argvStartsWith(argv: readonly string[], path: readonly string[]): boolean {\n\tif (argv.length < path.length) {\n\t\treturn false;\n\t}\n\treturn path.every((token, index) => argv[index] === token);\n}\n\nexport class CommandRegistry {\n\treadonly commands: readonly RegisteredCommand[];\n\n\tconstructor(commands: readonly RegisteredCommand[]) {\n\t\tthis.commands = commands;\n\t}\n\n\tmatch(argv: readonly string[]): { command: RegisteredCommand; rest: string[] } | undefined {\n\t\tlet best: { command: RegisteredCommand; length: number } | undefined;\n\t\tfor (const command of this.commands) {\n\t\t\tconst paths = [command.path, ...(command.aliasPaths ?? [])];\n\t\t\tfor (const path of paths) {\n\t\t\t\tif (argvStartsWith(argv, path) && path.length > (best?.length ?? 0)) {\n\t\t\t\t\tbest = { command, length: path.length };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (command.path.length === 1) {\n\t\t\t\tconst head = argv[0];\n\t\t\t\tif (\n\t\t\t\t\thead &&\n\t\t\t\t\tcommand.aliases?.includes(head) &&\n\t\t\t\t\t1 > (best?.length ?? 0)\n\t\t\t\t) {\n\t\t\t\t\tbest = { command, length: 1 };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!best) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tcommand: best.command,\n\t\t\trest: argv.slice(best.length),\n\t\t};\n\t}\n\n\tfindByLegacy(legacy: CliCommand[\"command\"]): RegisteredCommand | undefined {\n\t\tfor (const command of this.commands) {\n\t\t\tif (legacyIds(command).includes(legacy)) {\n\t\t\t\treturn command;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfindByPath(path: readonly string[]): RegisteredCommand | undefined {\n\t\treturn this.commands.find((command) => pathEquals(command.path, path));\n\t}\n\n\tids(): string[] {\n\t\treturn this.commands.map((command) => command.id);\n\t}\n}\n","export function isDebugEnabled(): boolean {\n\tconst value = (\n\t\tglobalThis as { process?: { env?: Record<string, string | undefined> } }\n\t).process?.env?.ATHENA_JS_DEBUG;\n\treturn value === \"1\" || value === \"true\";\n}\n","import { isDebugEnabled } from \"./debug.ts\";\nimport { railBar, railError } from \"./ui/rail.ts\";\nimport { paint } from \"./ui/colors.ts\";\nimport { resolveCliCapabilities } from \"./ui/capabilities.ts\";\nimport type { CliCapabilities } from \"./ui/types.ts\";\n\ninterface ErrorWithCode {\n\taddress?: unknown;\n\tcause?: unknown;\n\tcode?: unknown;\n\terrno?: unknown;\n\thostname?: unknown;\n\tmessage?: unknown;\n\tport?: unknown;\n\tstack?: unknown;\n\tsyscall?: unknown;\n}\n\nfunction normalizeErrorMessage(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\tif (typeof error === \"string\") {\n\t\treturn error;\n\t}\n\treturn \"Unknown generator error.\";\n}\n\nfunction extractMissingDatabaseName(message: string): string | undefined {\n\tconst match = message.match(/database \"([^\"]+)\" does not exist/i);\n\treturn match?.[1];\n}\n\nfunction isErrorWithCode(error: unknown): error is ErrorWithCode {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error;\n}\n\nfunction isNetworkConnectionError(error: unknown): boolean {\n\tif (!isErrorWithCode(error)) {\n\t\treturn false;\n\t}\n\tconst code = typeof error.code === \"string\" ? error.code : \"\";\n\tif (\n\t\tcode === \"ECONNRESET\" ||\n\t\tcode === \"ECONNREFUSED\" ||\n\t\tcode === \"ETIMEDOUT\" ||\n\t\tcode === \"ENOTFOUND\" ||\n\t\tcode === \"EAI_AGAIN\" ||\n\t\tcode === \"EPIPE\" ||\n\t\tcode === \"EHOSTUNREACH\" ||\n\t\tcode === \"ENETUNREACH\"\n\t) {\n\t\treturn true;\n\t}\n\tconst message = normalizeErrorMessage(error).toLowerCase();\n\treturn (\n\t\tmessage.includes(\"econnreset\") ||\n\t\tmessage.includes(\"econnrefused\") ||\n\t\tmessage.includes(\"etimedout\") ||\n\t\tmessage.includes(\"connection terminated\") ||\n\t\tmessage.includes(\"connection refused\") ||\n\t\tmessage.includes(\"timeout expired\")\n\t);\n}\n\nfunction collectErrorDiagnostics(error: unknown): string[] {\n\tconst lines: string[] = [];\n\tif (!(isErrorWithCode(error) || error instanceof Error)) {\n\t\treturn lines;\n\t}\n\n\tconst code =\n\t\tisErrorWithCode(error) && error.code !== undefined\n\t\t\t? String(error.code)\n\t\t\t: undefined;\n\tif (code) {\n\t\tlines.push(`  code: ${code}`);\n\t}\n\n\tconst errno =\n\t\tisErrorWithCode(error) && error.errno !== undefined\n\t\t\t? String(error.errno)\n\t\t\t: undefined;\n\tif (errno) {\n\t\tlines.push(`  errno: ${errno}`);\n\t}\n\n\tconst syscall =\n\t\tisErrorWithCode(error) && typeof error.syscall === \"string\"\n\t\t\t? error.syscall\n\t\t\t: undefined;\n\tif (syscall) {\n\t\tlines.push(`  syscall: ${syscall}`);\n\t}\n\n\tconst address =\n\t\tisErrorWithCode(error) && typeof error.address === \"string\"\n\t\t\t? error.address\n\t\t\t: undefined;\n\tconst port =\n\t\tisErrorWithCode(error) && error.port !== undefined\n\t\t\t? String(error.port)\n\t\t\t: undefined;\n\tif (address || port) {\n\t\tlines.push(`  remote: ${address ?? \"?\"}${port ? `:${port}` : \"\"}`);\n\t}\n\n\tconst hostname =\n\t\tisErrorWithCode(error) && typeof error.hostname === \"string\"\n\t\t\t? error.hostname\n\t\t\t: undefined;\n\tif (hostname) {\n\t\tlines.push(`  hostname: ${hostname}`);\n\t}\n\n\tlet cause: unknown =\n\t\terror instanceof Error\n\t\t\t? error.cause\n\t\t\t: isErrorWithCode(error)\n\t\t\t\t? error.cause\n\t\t\t\t: undefined;\n\tlet depth = 0;\n\twhile (cause && depth < 4) {\n\t\tconst causeMessage = normalizeErrorMessage(cause);\n\t\tconst causeCode =\n\t\t\tisErrorWithCode(cause) && cause.code !== undefined\n\t\t\t\t? String(cause.code)\n\t\t\t\t: undefined;\n\t\tlines.push(\n\t\t\t`  cause[${depth}]: ${causeCode ? `${causeCode} — ` : \"\"}${causeMessage}`,\n\t\t);\n\t\tcause =\n\t\t\tcause instanceof Error\n\t\t\t\t? cause.cause\n\t\t\t\t: isErrorWithCode(cause)\n\t\t\t\t\t? cause.cause\n\t\t\t\t\t: undefined;\n\t\tdepth += 1;\n\t}\n\n\treturn lines;\n}\n\nexport function formatGeneratorError(error: unknown, configPath?: string): Error {\n\tconst diagnostics = collectErrorDiagnostics(error);\n\tconst diagnosticsBlock =\n\t\tdiagnostics.length > 0 ? [\"\", \"Diagnostics:\", ...diagnostics] : [];\n\n\tif (isErrorWithCode(error) && error.code === \"3D000\") {\n\t\tconst message = normalizeErrorMessage(error);\n\t\tconst databaseName = extractMissingDatabaseName(message);\n\t\tconst databaseLabel = databaseName\n\t\t\t? `PostgreSQL database \"${databaseName}\" does not exist`\n\t\t\t: \"The target PostgreSQL database does not exist\";\n\t\tconst configLabel = configPath\n\t\t\t? `config \"${configPath}\"`\n\t\t\t: \"the resolved athena config\";\n\n\t\treturn new Error(\n\t\t\t[\n\t\t\t\t`${databaseLabel} (code 3D000).`,\n\t\t\t\t`Update provider.connectionString (and provider.database, if set) in ${configLabel}, or create that database before running generate.`,\n\t\t\t\t...diagnosticsBlock,\n\t\t\t\t\"\",\n\t\t\t\t\"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tif (isNetworkConnectionError(error)) {\n\t\tconst message = normalizeErrorMessage(error);\n\t\tconst configLabel = configPath\n\t\t\t? `config \"${configPath}\"`\n\t\t\t: \"the resolved athena config\";\n\t\tconst code =\n\t\t\tisErrorWithCode(error) && typeof error.code === \"string\"\n\t\t\t\t? error.code\n\t\t\t\t: \"network\";\n\n\t\treturn new Error(\n\t\t\t[\n\t\t\t\t`Schema introspection failed: database connection was reset or unreachable (${code}: ${message}).`,\n\t\t\t\t`The CLI started correctly; generate could not finish talking to Postgres for ${configLabel}.`,\n\t\t\t\t...diagnosticsBlock,\n\t\t\t\t\"\",\n\t\t\t\t\"Check:\",\n\t\t\t\t\"  1. DATABASE_URL / provider.connectionString is reachable from this machine (VPN, Railway proxy, firewall).\",\n\t\t\t\t'  2. The database is running and accepts connections (try `psql \"$DATABASE_URL\" -c \"select 1\"`).',\n\t\t\t\t\"  3. SSL settings match the host (Railway/public proxy often needs `?sslmode=require`).\",\n\t\t\t\t\"  4. Retry once — ECONNRESET is often a transient proxy drop mid-introspection.\",\n\t\t\t\t\"\",\n\t\t\t\t\"For a full stack: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tif (error instanceof Error) {\n\t\tif (diagnostics.length === 0 && !isDebugEnabled()) {\n\t\t\treturn error;\n\t\t}\n\t\tconst base = error.message || normalizeErrorMessage(error);\n\t\treturn new Error(\n\t\t\t[\n\t\t\t\tbase,\n\t\t\t\t...diagnosticsBlock,\n\t\t\t\t...(isDebugEnabled() && error.stack\n\t\t\t\t\t? [\"\", \"Stack:\", error.stack]\n\t\t\t\t\t: [\"\", \"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js\"]),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\treturn new Error(normalizeErrorMessage(error));\n}\n\n/**\n * Print a CLI error to stderr with optional stack when `ATHENA_JS_DEBUG=1`.\n */\nexport function logCliError(\n\terror: unknown,\n\terrorLog: (message: string) => void = console.error,\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n): void {\n\tconst message =\n\t\terror instanceof Error ? error.message : normalizeErrorMessage(error);\n\tconst lines = message.includes(\"\\n\") ? message.split(\"\\n\") : [message];\n\tconst [first, ...rest] = lines;\n\terrorLog(railError(first ?? message, capabilities));\n\tfor (const line of rest) {\n\t\tif (line.length === 0) {\n\t\t\terrorLog(railBar(\"\", capabilities));\n\t\t\tcontinue;\n\t\t}\n\t\terrorLog(railBar(paint(line, \"dim\", capabilities), capabilities));\n\t}\n\n\tif (isDebugEnabled() && error instanceof Error && error.stack) {\n\t\tconst stackOnly = error.stack.startsWith(error.message)\n\t\t\t? error.stack.slice(error.message.length).replace(/^\\n/, \"\")\n\t\t\t: error.stack;\n\t\tif (stackOnly) {\n\t\t\terrorLog(railBar(paint(stackOnly, \"dim\", capabilities), capabilities));\n\t\t}\n\t}\n}\n","/**\n * Domain types for Athena JS application SQL migrations.\n * Tooling-only — never imported by browser/runtime client paths.\n */\n\n/** Local migration file discovered under the migrations directory. */\nexport interface MigrationFile {\n  checksum: string;\n  executionId?: string;\n  filename: string;\n  name: string;\n  path: string;\n  provenance?: import(\"./source-control/types.ts\").MigrationFileProvenance;\n  sourceDirty?: boolean;\n  sql: string;\n  version: number;\n}\n\n/** Row persisted in the application migration ledger. */\nexport interface AppliedMigration {\n  appliedAt: Date;\n  checksum: string;\n  executionId?: string;\n  executionMs: number;\n  name: string;\n  sourceBlobSha?: string;\n  sourceBranch?: string;\n  sourceCommit?: string;\n  sourceDirty?: boolean;\n  sourcePath?: string;\n  sourceRepository?: string;\n  version: number;\n}\n\nexport type MigrationPlanStatus = \"applied\" | \"pending\";\n\nexport type MigrationConflictKind =\n  | \"checksum-mismatch\"\n  | \"missing-local\"\n  | \"name-mismatch\"\n  | \"historical-insertion\"\n  | \"duplicate-version\";\n\nexport type MigrationDisplayStatus =\n  | MigrationPlanStatus\n  | MigrationConflictKind;\n\nexport interface MigrationPlanEntry {\n  migration: MigrationFile;\n  status: MigrationPlanStatus;\n}\n\nexport interface MigrationConflict {\n  applied?: AppliedMigration;\n  kind: MigrationConflictKind;\n  local?: MigrationFile;\n  version: number;\n}\n\nexport interface MigrationPlan {\n  applied: MigrationPlanEntry[];\n  conflicts: MigrationConflict[];\n  pending: MigrationPlanEntry[];\n}\n\n/** Result of applying a single migration successfully. */\nexport interface AppliedMigrationResult extends AppliedMigration {\n  filename: string;\n}\n\nexport interface MigrationBackend {\n  readonly kind: string;\n  acquireLock(): Promise<void>;\n  applyMigration(migration: MigrationFile): Promise<AppliedMigrationResult>;\n  close(): Promise<void>;\n  ensureLedger(): Promise<void>;\n  inspectCatalog(): Promise<\n    import(\"./analysis/catalog.ts\").PhysicalCatalog\n  >;\n  listAppliedMigrations(): Promise<AppliedMigration[]>;\n  listArchivedSources?(): Promise<\n    import(\"./reconciliation/types.ts\").ArchivedMigrationSource[]\n  >;\n  repairLedgerChecksum?(version: number, checksum: string): Promise<void>;\n  insertReconciliation?(row: {\n    action: string;\n    classification: string;\n    confidence: string;\n    evidence: unknown;\n    newChecksum?: string;\n    oldChecksum?: string;\n    physicalFingerprint?: string;\n    repositoryCommit?: string;\n    version: number;\n  }): Promise<void>;\n  releaseLock(): Promise<void>;\n}\n\nexport type MigrationCommandMode =\n  | \"apply\"\n  | \"status\"\n  | \"plan\"\n  | \"dry-run\"\n  | \"repair\"\n  | \"check\"\n  | \"graph\"\n  | \"explain\"\n  | \"drift\"\n  | \"reconcile\"\n  | \"verify\";\n\nexport interface RunMigrationsOptions {\n  /**\n   * When set, overrides config-resolved migrations directory\n   * (relative to cwd or absolute).\n   */\n  configPath?: string;\n  cwd?: string;\n  /** Defaults to false. When true, never mutates the database. */\n  dryRun?: boolean;\n  /**\n   * Injectable backend factory for tests. When omitted, created from config.\n   */\n  createBackend?: (context: MigrationBackendContext) => Promise<MigrationBackend>;\n  /**\n   * Injectable Auth database factory for tests / custom adapters.\n   */\n  createAuthDatabase?: (\n    connectionString: string\n  ) => Promise<import(\"../auth/local/database.ts\").AthenaAuthDatabase>;\n  /**\n   * Injectable discovery for tests.\n   */\n  discover?: (directory: string) => Promise<MigrationFile[]>;\n  log?: (message: string) => void;\n  /**\n   * Injectable Auth schema migrate for tests. Production apply uses\n   * `migrateAthenaAuthSchema` against the same PostgreSQL URL.\n   */\n  migrateAuthSchema?: () => Promise<void>;\n  /** Injectable Auth planner for tests. */\n  planAuthSchema?: () => Promise<\n    import(\"../auth/local/schema.ts\").AthenaAuthMigrationPlan\n  >;\n  /** Injectable Auth repair for tests. */\n  repairAuthSchema?: (options: { dryRun: boolean }) => Promise<void>;\n  mode?: MigrationCommandMode;\n  /** Confirm non-interactive repair. */\n  yes?: boolean;\n  json?: boolean;\n  plain?: boolean;\n  /** Fail on dynamic SQL / unverifiable constructs. */\n  strict?: boolean;\n  /** Target for `migrate explain <file-or-version>`. */\n  explainTarget?: string;\n  /** Apply HIGH-confidence reconcile repairs (never migration SQL). */\n  applyReconcile?: boolean;\n  /**\n   * Apply/repair despite uncommitted migration files or migrate config.\n   */\n  allowDirtyMigrations?: boolean;\n  /** @deprecated Use allowDirtyMigrations */\n  allowDirty?: boolean;\n  /**\n   * Injectable source-control inspector for tests.\n   */\n  inspectSourceControl?: (\n    input: import(\"./source-control/types.ts\").InspectSourceControlInput\n  ) => import(\"./source-control/types.ts\").MigrationSourceControlState;\n  /** Optional presentation adapter; defaults from flags/TTY. */\n  ui?: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}\n\nexport interface MigrationBackendContext {\n  connectionString: string;\n  database?: string;\n}\n\nexport interface MigrationRunSummary {\n  appliedCount: number;\n  authPlan?: import(\"../auth/local/schema.ts\").AthenaAuthMigrationPlan;\n  conflicts: MigrationConflict[];\n  diagnostics?: import(\"../cli/ui/types.ts\").Diagnostic[];\n  directory: string;\n  dryRun: boolean;\n  failedCount: number;\n  mode: MigrationCommandMode;\n  pendingCount: number;\n  plan: MigrationPlan;\n  providerLabel: string;\n  databaseLabel: string;\n  skippedCount: number;\n  newlyApplied: AppliedMigrationResult[];\n  semantic?: import(\"./analysis/compiler.ts\").CompileMigrationsResult;\n  gitWorktree?: import(\"./git-worktree.ts\").DirtyMigrationWorktree;\n  sourceControl?: import(\"./source-control/types.ts\").MigrationSourceControlState;\n  reconciliation?: import(\"./reconciliation/types.ts\").ReconciliationReport;\n}\n\nexport class MigrationError extends Error {\n  readonly code:\n    | \"CONFIG\"\n    | \"DISCOVERY\"\n    | \"INTEGRITY\"\n    | \"HISTORY\"\n    | \"PROVIDER\"\n    | \"EXECUTION\"\n    | \"LOCK\"\n    | \"LEDGER\"\n    | \"SEMANTIC\";\n\n  constructor(\n    code: MigrationError[\"code\"],\n    message: string,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);\n    this.name = \"MigrationError\";\n    this.code = code;\n  }\n}\n","import { AthenaCliError } from \"../errors.ts\";\nimport { CliExitCode } from \"../exit-code.ts\";\nimport { MigrationError } from \"../../migrations/types.ts\";\n\nfunction isErrorWithCode(error: unknown): error is { code?: unknown } {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error;\n}\n\nfunction isNetworkError(error: unknown): boolean {\n\tif (!isErrorWithCode(error) || typeof error.code !== \"string\") {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === \"ECONNRESET\" ||\n\t\terror.code === \"ECONNREFUSED\" ||\n\t\terror.code === \"ETIMEDOUT\" ||\n\t\terror.code === \"ENOTFOUND\" ||\n\t\terror.code === \"EAI_AGAIN\" ||\n\t\terror.code === \"EPIPE\" ||\n\t\terror.code === \"EHOSTUNREACH\" ||\n\t\terror.code === \"ENETUNREACH\" ||\n\t\terror.code === \"3D000\"\n\t);\n}\n\nexport function exitCodeForError(error: unknown): CliExitCode {\n\tif (error instanceof AthenaCliError) {\n\t\treturn error.exitCode;\n\t}\n\tif (error instanceof MigrationError) {\n\t\tswitch (error.code) {\n\t\t\tcase \"CONFIG\":\n\t\t\tcase \"PROVIDER\":\n\t\t\t\treturn CliExitCode.Configuration;\n\t\t\tcase \"INTEGRITY\":\n\t\t\tcase \"HISTORY\":\n\t\t\tcase \"LEDGER\":\n\t\t\tcase \"SEMANTIC\":\n\t\t\t\treturn CliExitCode.Conflict;\n\t\t\tcase \"LOCK\":\n\t\t\tcase \"DISCOVERY\":\n\t\t\t\treturn CliExitCode.Runtime;\n\t\t\tcase \"EXECUTION\":\n\t\t\t\treturn CliExitCode.Unexpected;\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = error.code;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t}\n\t}\n\tif (isErrorWithCode(error) && error.code === \"3D000\") {\n\t\treturn CliExitCode.Configuration;\n\t}\n\tif (isNetworkError(error)) {\n\t\treturn CliExitCode.Runtime;\n\t}\n\tif (error instanceof Error) {\n\t\tconst message = error.message;\n\t\tif (\n\t\t\tmessage.startsWith(\"Unknown command \") ||\n\t\t\tmessage.startsWith(\"Unknown option \") ||\n\t\t\tmessage.startsWith(\"Missing value for \") ||\n\t\t\tmessage.startsWith(\"Invalid --\") ||\n\t\t\tmessage.startsWith(\"Unexpected \")\n\t\t) {\n\t\t\treturn CliExitCode.Usage;\n\t\t}\n\t}\n\treturn CliExitCode.Unexpected;\n}\n","import type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n} from \"./types.js\";\n\nexport interface AthenaGatewayErrorInput {\n  cause?: string;\n  code: AthenaGatewayErrorCode;\n  endpoint?: AthenaGatewayEndpointPath;\n  /** Original thrown value for Error.cause (distinct from string `cause` detail). */\n  errorCause?: unknown;\n  hint?: string;\n  message: string;\n  method?: AthenaGatewayMethod;\n  requestId?: string;\n  status?: number;\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n  readonly code: AthenaGatewayErrorCode;\n  readonly status: number;\n  readonly endpoint?: AthenaGatewayEndpointPath;\n  readonly method?: AthenaGatewayMethod;\n  readonly requestId?: string;\n  readonly hint?: string;\n  readonly causeDetail?: string;\n\n  constructor(input: AthenaGatewayErrorInput) {\n    super(\n      input.message,\n      input.errorCause === undefined ? undefined : { cause: input.errorCause }\n    );\n    this.name = \"AthenaGatewayError\";\n    this.code = input.code;\n    this.status = input.status ?? 0;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.hint = input.hint;\n    this.causeDetail = input.cause;\n  }\n\n  toDetails(): AthenaGatewayErrorDetails {\n    return {\n      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      message: this.message,\n      method: this.method,\n      requestId: this.requestId,\n      status: this.status,\n    };\n  }\n\n  static fromResponse<T>(\n    response: AthenaGatewayResponse<T>,\n    fallback: Omit<AthenaGatewayErrorInput, \"code\" | \"message\" | \"status\">\n  ) {\n    const details = response.errorDetails;\n    if (details) {\n      return new AthenaGatewayError({\n        cause: details.cause,\n        code: details.code,\n        endpoint: details.endpoint ?? fallback.endpoint,\n        hint: details.hint,\n        message: details.message,\n        method: details.method ?? fallback.method,\n        requestId: details.requestId ?? fallback.requestId,\n        status: details.status,\n      });\n    }\n\n    return new AthenaGatewayError({\n      code: \"HTTP_ERROR\",\n      endpoint: fallback.endpoint,\n      message: response.error ?? \"Gateway request failed\",\n      method: fallback.method,\n      requestId: fallback.requestId,\n      status: response.status,\n    });\n  }\n}\n\nexport function isAthenaGatewayError(\n  error: unknown\n): error is AthenaGatewayError {\n  return error instanceof AthenaGatewayError;\n}\n","import { AthenaGatewayError } from \"./errors.ts\";\n\nexport const ATHENA_DEFAULT_BASE_URL = \"https://mirror2.athena-cluster.com\";\n\nfunction describeReceivedValue(value: unknown): string {\n  if (value === undefined) {\n    return \"undefined\";\n  }\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"string\") {\n    return value.trim().length > 0 ? JSON.stringify(value) : \"an empty string\";\n  }\n  return `${typeof value} ${JSON.stringify(value)}`;\n}\n\nfunction invalidBaseUrlError(\n  message: string,\n  hint: string,\n  cause?: unknown\n): AthenaGatewayError {\n  return new AthenaGatewayError({\n    cause:\n      cause instanceof Error\n        ? cause.message\n        : cause === undefined || cause === null\n          ? undefined\n          : String(cause),\n    code: \"INVALID_URL\",\n    errorCause: cause,\n    hint,\n    message,\n    status: 0,\n  });\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n  defaultBaseUrl?: string;\n  label?: string;\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n  input: string | null | undefined,\n  options: NormalizeAthenaGatewayBaseUrlOptions = {}\n): string {\n  const label = options.label ?? \"Athena gateway base URL\";\n  const candidate = input ?? options.defaultBaseUrl;\n\n  if (candidate === undefined || candidate === null) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  const trimmed = candidate.trim();\n  if (!trimmed) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(trimmed);\n  } catch (error) {\n    throw invalidBaseUrlError(\n      `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n      error\n    );\n  }\n\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw invalidBaseUrlError(\n      `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n      'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  if (parsed.search || parsed.hash) {\n    throw invalidBaseUrlError(\n      `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n      'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.'\n    );\n  }\n\n  return parsed.toString().replace(/\\/+$/, \"\");\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n  if (!path.startsWith(\"/\")) {\n    throw invalidBaseUrlError(\n      `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      'Use a leading slash such as \"/gateway/fetch\" or \"/\".'\n    );\n  }\n\n  return `${baseUrl}${path}`;\n}\n","export type AthenaRightKeyErrorCode =\n\t| \"RIGHT_KEY_EMPTY\"\n\t| \"RIGHT_KEY_INVALID_CHARACTERS\"\n\t| \"RIGHT_KEY_EMPTY_SEGMENT\"\n\t| \"RIGHT_KEY_MALFORMED_PATTERN\";\n\nexport class AthenaRightKeyError extends Error {\n\treadonly code: AthenaRightKeyErrorCode;\n\treadonly key?: string;\n\n\tconstructor(code: AthenaRightKeyErrorCode, message: string, key?: string) {\n\t\tsuper(message);\n\t\tthis.name = \"AthenaRightKeyError\";\n\t\tthis.code = code;\n\t\tif (key !== undefined) {\n\t\t\tthis.key = key;\n\t\t}\n\t}\n}\n","import {\n\tAthenaRightKeyError,\n\ttype AthenaRightKeyErrorCode,\n} from \"./errors.ts\";\n\ndeclare const athenaRightKeyBrand: unique symbol;\n\n/** Branded Right identity. Runtime value is a normal string. */\nexport type AthenaRightKey = string & {\n\treadonly [athenaRightKeyBrand]: true;\n};\n\nfunction brandAthenaRightKey(canonical: string): AthenaRightKey {\n\treturn canonical as AthenaRightKey;\n}\n\nfunction isAsciiAlphanumeric(ch: string): boolean {\n\tconst code = ch.charCodeAt(0);\n\treturn (\n\t\t(code >= 48 && code <= 57) ||\n\t\t(code >= 65 && code <= 90) ||\n\t\t(code >= 97 && code <= 122)\n\t);\n}\n\nfunction isIdentifierChar(ch: string): boolean {\n\treturn isAsciiAlphanumeric(ch) || ch === \"_\";\n}\n\n/** Unicode White_Space — same set as Rust `char::is_whitespace` / `str::trim`. */\nfunction isRustWhiteSpace(ch: string): boolean {\n\tconst code = ch.codePointAt(0);\n\tif (code === undefined) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(code >= 0x09 && code <= 0x0d) ||\n\t\tcode === 0x20 ||\n\t\tcode === 0x85 ||\n\t\tcode === 0xa0 ||\n\t\tcode === 0x1680 ||\n\t\t(code >= 0x2000 && code <= 0x200a) ||\n\t\tcode === 0x2028 ||\n\t\tcode === 0x2029 ||\n\t\tcode === 0x202f ||\n\t\tcode === 0x205f ||\n\t\tcode === 0x3000\n\t);\n}\n\nfunction trimRustWhiteSpace(raw: string): string {\n\tlet start = 0;\n\tlet end = raw.length;\n\twhile (start < end) {\n\t\tconst head = raw[start];\n\t\tif (head === undefined || !isRustWhiteSpace(head)) {\n\t\t\tbreak;\n\t\t}\n\t\tstart += 1;\n\t}\n\twhile (end > start) {\n\t\tconst tail = raw[end - 1];\n\t\tif (tail === undefined || !isRustWhiteSpace(tail)) {\n\t\t\tbreak;\n\t\t}\n\t\tend -= 1;\n\t}\n\treturn raw.slice(start, end);\n}\n\nfunction throwKeyError(\n\tcode: AthenaRightKeyErrorCode,\n\tmessage: string,\n\tkey?: string,\n): never {\n\tthrow new AthenaRightKeyError(code, message, key);\n}\n\nfunction validateSegment(segment: string, key: string): void {\n\tif (segment.length === 0) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${key}\\` has an empty segment`,\n\t\t\tkey,\n\t\t);\n\t}\n\tif (segment === \"*\") {\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"{\") && segment.endsWith(\"}\")) {\n\t\tconst inner = segment.slice(1, -1);\n\t\tif (inner.length === 0 || ![...inner].every(isIdentifierChar)) {\n\t\t\tthrowKeyError(\n\t\t\t\t\"RIGHT_KEY_MALFORMED_PATTERN\",\n\t\t\t\t`right key \\`${key}\\` is a malformed pattern`,\n\t\t\t\tkey,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\tconst first = segment[0];\n\tif (first === undefined) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${key}\\` has an empty segment`,\n\t\t\tkey,\n\t\t);\n\t}\n\tif (!(isAsciiAlphanumeric(first) || first === \"_\")) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${key}\\` contains invalid characters`,\n\t\t\tkey,\n\t\t);\n\t}\n\tconst rest = segment.slice(1);\n\tif (\n\t\t![...rest].every(\n\t\t\t(ch) => isAsciiAlphanumeric(ch) || ch === \"_\" || ch === \"-\",\n\t\t)\n\t) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${key}\\` contains invalid characters`,\n\t\t\tkey,\n\t\t);\n\t}\n}\n\n/**\n * Parse and canonicalize a right key. Trims edges; rejects interior whitespace.\n * Exact parity with `crates/athena-rights/src/key.rs`.\n */\nexport function parseAthenaRightKey(raw: string): AthenaRightKey {\n\tconst trimmed = trimRustWhiteSpace(raw);\n\tif (trimmed.length === 0) {\n\t\tthrowKeyError(\"RIGHT_KEY_EMPTY\", \"right key must not be empty\");\n\t}\n\tif ([...trimmed].some(isRustWhiteSpace)) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_INVALID_CHARACTERS\",\n\t\t\t`right key \\`${trimmed}\\` contains invalid characters`,\n\t\t\ttrimmed,\n\t\t);\n\t}\n\tif (\n\t\ttrimmed.startsWith(\".\") ||\n\t\ttrimmed.endsWith(\".\") ||\n\t\ttrimmed.includes(\"..\")\n\t) {\n\t\tthrowKeyError(\n\t\t\t\"RIGHT_KEY_EMPTY_SEGMENT\",\n\t\t\t`right key \\`${trimmed}\\` has an empty segment`,\n\t\t\ttrimmed,\n\t\t);\n\t}\n\tfor (const segment of trimmed.split(\".\")) {\n\t\tvalidateSegment(segment, trimmed);\n\t}\n\treturn brandAthenaRightKey(trimmed);\n}\n\nexport function tryParseAthenaRightKey(raw: string): AthenaRightKey | undefined {\n\ttry {\n\t\treturn parseAthenaRightKey(raw);\n\t} catch (error) {\n\t\tif (error instanceof AthenaRightKeyError) {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport function athenaRightKeyString(key: AthenaRightKey): string {\n\treturn key;\n}\n","/**\n * Canonical Athena environment resolution and createClient alias catalogs.\n *\n * Primary keys (default for {@link resolveAthenaEnv}):\n * - `ATHENA_URL`\n * - `ATHENA_API_KEY`\n * - `ATHENA_CLIENT`\n * - `ATHENA_AUTH_URL`\n *\n * Pass `legacyAliases: true` to also accept historical multi-key sets used by\n * older apps.\n *\n * **createClient / Workers / execution-mode** always consult the ordered\n * catalogs below (`ATHENA_ENV_URL_KEYS`, `ATHENA_ENV_DB_URL_KEYS`,\n * `ATHENA_ENV_API_KEY_KEYS`, `ATHENA_ENV_CLIENT_KEYS`,\n * `ATHENA_ENV_GATEWAY_URL_KEYS`). Those lists are the single source of truth —\n * do not re-copy them in v3-client or cloudflare façades.\n *\n * Service-specific keys (auth/chat/storage) and generator-only keys\n * (`ATHENA_GENERATOR_*`) stay in their owning modules.\n */\n\nimport type { EnvLike } from \"../utils/athena-auth-url.ts\";\n\n/** Recommended primary environment keys. */\nexport const ATHENA_ENV_PRIMARY_KEYS = {\n  apiKey: \"ATHENA_API_KEY\",\n  authUrl: \"ATHENA_AUTH_URL\",\n  client: \"ATHENA_CLIENT\",\n  url: \"ATHENA_URL\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// createClient / Workers / execution-mode catalogs (order = priority)\n// ---------------------------------------------------------------------------\n\n/**\n * Unified root URL keys for createClient top-level `url` / env root.\n * Used before path derivation for service URLs.\n */\nexport const ATHENA_ENV_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"NEXT_PUBLIC_ATHENA_URL\",\n] as const;\n\n/**\n * DB / gateway service URL keys for createClient `db.url`.\n * Consulted after root URL derivation when no explicit `db.url` is set.\n */\nexport const ATHENA_ENV_DB_URL_KEYS = [\n  \"ATHENA_DB_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"NEXT_PUBLIC_ATHENA_DB_API_URL\",\n] as const;\n\n/**\n * Combined gateway/root URL keys for execution-mode resolution and Worker façades.\n * Order matches createClient: root URL keys first, then DB-specific aliases.\n */\nexport const ATHENA_ENV_GATEWAY_URL_KEYS = [\n  ...ATHENA_ENV_URL_KEYS,\n  ...ATHENA_ENV_DB_URL_KEYS,\n] as const;\n\n/** API key keys accepted by createClient resolveCore (and Worker key forwarding). */\nexport const ATHENA_ENV_API_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"NEXT_PUBLIC_ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"X_API_KEY\",\n] as const;\n\n/**\n * Public application origin keys for app identity. First configured\n * http(s) value wins. Losing aliases are not independently trusted.\n */\nexport const ATHENA_ENV_APP_URL_KEYS = [\n  \"APP_URL\",\n  \"NEXT_PUBLIC_APP_URL\",\n  \"NEXT_PUBLIC_URL\",\n  \"BETTER_AUTH_URL\",\n] as const;\n\n/** Client-name keys accepted by createClient resolveCore (`X-Athena-Client`). */\nexport const ATHENA_ENV_CLIENT_KEYS = [\n  \"ATHENA_CLIENT\",\n  \"ATHENA_GATEWAY_CLIENT\",\n  \"ATHENA_GENERATOR_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_GATEWAY_CLIENT\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// resolveAthenaEnv legacy catalogs (gated by legacyAliases; membership differs\n// from createClient lists — do not merge without a product decision)\n// ---------------------------------------------------------------------------\n\n/** Legacy URL aliases for {@link resolveAthenaEnv} (order = priority). */\nexport const ATHENA_ENV_LEGACY_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"NEXT_PUBLIC_ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"NEXT_PUBLIC_ATHENA_GATEWAY_URL\",\n] as const;\n\n/** Legacy API key aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_API_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_KEY\",\n  \"ATHENA_PUBLISHABLE_KEY\",\n  \"NEXT_PUBLIC_ATHENA_API_KEY\",\n  \"NEXT_PUBLIC_ATHENA_PUBLISHABLE_KEY\",\n] as const;\n\n/** Legacy client-name aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_CLIENT_KEYS = [\n  \"ATHENA_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_CLIENT\",\n  \"ATHENA_CLIENT_NAME\",\n] as const;\n\n/** Legacy auth URL aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_AUTH_URL_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"ATHENA_AUTH_UPSTREAM_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL\",\n] as const;\n\nexport type AthenaEnvField = \"url\" | \"apiKey\" | \"client\" | \"authUrl\";\n\nexport interface ResolveAthenaEnvOptions {\n  /** Log which keys resolved and which were ignored (non-production only unless forced). */\n  debug?: boolean;\n  /** Explicit env map. Defaults to `process.env` when available. */\n  env?: EnvLike;\n  /**\n   * When true, fall back to {@link ATHENA_ENV_LEGACY_*_KEYS} after primary keys.\n   * Default false so new apps only document one key set.\n   */\n  legacyAliases?: boolean;\n}\n\nexport interface AthenaEnvResolution {\n  apiKey?: string;\n  authUrl?: string;\n  client?: string;\n  /** Non-empty keys that were considered but not chosen (lower priority). */\n  ignored: Array<{ field: AthenaEnvField; key: string }>;\n  /** Key that supplied each field, when present. */\n  sources: Partial<Record<AthenaEnvField, string>>;\n  url?: string;\n}\n\nfunction readProcessEnv(): EnvLike {\n  try {\n    return (globalThis as { process?: { env?: EnvLike } }).process?.env ?? {};\n  } catch {\n    return {};\n  }\n}\n\nfunction candidatesFor(\n  field: AthenaEnvField,\n  legacyAliases: boolean\n): readonly string[] {\n  const primary = ATHENA_ENV_PRIMARY_KEYS[field];\n  if (!legacyAliases) {\n    return [primary];\n  }\n\n  switch (field) {\n    case \"url\":\n      return ATHENA_ENV_LEGACY_URL_KEYS;\n    case \"apiKey\":\n      return ATHENA_ENV_LEGACY_API_KEY_KEYS;\n    case \"client\":\n      return ATHENA_ENV_LEGACY_CLIENT_KEYS;\n    case \"authUrl\":\n      return ATHENA_ENV_LEGACY_AUTH_URL_KEYS;\n    default:\n      return [primary];\n  }\n}\n\nfunction pickField(\n  field: AthenaEnvField,\n  source: EnvLike,\n  legacyAliases: boolean,\n  ignored: AthenaEnvResolution[\"ignored\"]\n): { value?: string; key?: string } {\n  const keys = candidatesFor(field, legacyAliases);\n  let chosen: { value?: string; key?: string } = {};\n\n  for (const key of keys) {\n    const raw = source[key]?.trim();\n    if (!raw) {\n      continue;\n    }\n    if (chosen.value) {\n      ignored.push({ field, key });\n    } else {\n      chosen = { key, value: raw };\n    }\n  }\n\n  return chosen;\n}\n\n/**\n * Resolve Athena connection settings from an env map.\n *\n * Primary keys only unless `legacyAliases: true`.\n */\nexport function resolveAthenaEnv(\n  options: ResolveAthenaEnvOptions = {}\n): AthenaEnvResolution {\n  const source = options.env ?? readProcessEnv();\n  const legacyAliases = options.legacyAliases === true;\n  const ignored: AthenaEnvResolution[\"ignored\"] = [];\n\n  const url = pickField(\"url\", source, legacyAliases, ignored);\n  const apiKey = pickField(\"apiKey\", source, legacyAliases, ignored);\n  const client = pickField(\"client\", source, legacyAliases, ignored);\n  const authUrl = pickField(\"authUrl\", source, legacyAliases, ignored);\n\n  const result: AthenaEnvResolution = {\n    apiKey: apiKey.value,\n    authUrl: authUrl.value,\n    client: client.value,\n    ignored,\n    sources: {\n      ...(url.key ? { url: url.key } : {}),\n      ...(apiKey.key ? { apiKey: apiKey.key } : {}),\n      ...(client.key ? { client: client.key } : {}),\n      ...(authUrl.key ? { authUrl: authUrl.key } : {}),\n    },\n    url: url.value,\n  };\n\n  const shouldDebug =\n    options.debug === true ||\n    (options.debug !== false &&\n      (globalThis as { process?: { env?: { ATHENA_ENV_DEBUG?: string } } })\n        .process?.env?.ATHENA_ENV_DEBUG === \"1\");\n\n  if (shouldDebug) {\n    console.info(\"[athena/env] resolved\", {\n      hasApiKey: Boolean(result.apiKey),\n      hasAuthUrl: Boolean(result.authUrl),\n      hasClient: Boolean(result.client),\n      hasUrl: Boolean(result.url),\n      ignored: result.ignored,\n      sources: result.sources,\n    });\n  }\n\n  return result;\n}\n\n/**\n * Like {@link resolveAthenaEnv}, but throws when `url` or `apiKey` is missing.\n */\nexport function requireAthenaEnv(\n  options: ResolveAthenaEnvOptions = {}\n): AthenaEnvResolution & { url: string; apiKey: string } {\n  const resolved = resolveAthenaEnv(options);\n  if (!(resolved.url && resolved.apiKey)) {\n    const missing: string[] = [];\n    if (!resolved.url) {\n      missing.push(ATHENA_ENV_PRIMARY_KEYS.url);\n    }\n    if (!resolved.apiKey) {\n      missing.push(ATHENA_ENV_PRIMARY_KEYS.apiKey);\n    }\n    throw new Error(\n      `Missing required Athena env: ${missing.join(\", \")}. ` +\n        (options.legacyAliases\n          ? \"Legacy aliases were enabled but none resolved.\"\n          : \"Set primary keys, or pass legacyAliases: true for historical names.\")\n    );\n  }\n  return {\n    ...resolved,\n    apiKey: resolved.apiKey,\n    url: resolved.url,\n  };\n}\n","export const CLI_JSON_SCHEMA_VERSION = 1 as const;\n\nexport type CliOutputFormat = \"text\" | \"json\" | \"ndjson\";\n\nexport type CliVerbosity = \"quiet\" | \"normal\" | \"verbose\" | \"debug\";\n","import type { CommandContext } from \"../command-context.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport type { CommandRegistry } from \"./registry.ts\";\n\nexport async function dispatchRegistered(\n\tregistry: CommandRegistry,\n\tctx: CommandContext,\n\tparsed: CliCommand,\n): Promise<void> {\n\tconst command = registry.findByLegacy(parsed.command);\n\tif (!command) {\n\t\tthrow new Error(`No registered command for \"${parsed.command}\".`);\n\t}\n\tawait command.run(ctx, parsed);\n}\n\nexport function sessionTitleFor(\n\tregistry: CommandRegistry,\n\tparsed: CliCommand,\n): string | undefined {\n\treturn registry.findByLegacy(parsed.command)?.sessionTitle?.(parsed);\n}\n","import type { CliCommand } from \"../types.ts\";\nimport type { CliGlobalFlags } from \"./globals.ts\";\n\nfunction withJson<T extends object>(parsed: T, json: boolean): T {\n\tif (!json || !(\"json\" in parsed)) {\n\t\treturn parsed;\n\t}\n\treturn { ...parsed, json: true };\n}\n\nfunction withPlain<T extends object>(parsed: T, plain: boolean): T {\n\tif (!plain || !(\"plain\" in parsed)) {\n\t\treturn parsed;\n\t}\n\treturn { ...parsed, plain: true };\n}\n\nfunction withStrict<T extends object>(parsed: T, strict: boolean): T {\n\tif (!strict || !(\"strict\" in parsed)) {\n\t\treturn parsed;\n\t}\n\treturn { ...parsed, strict: true };\n}\n\nfunction withConfig<T extends object>(\n\tparsed: T,\n\tconfigPath: string | undefined,\n): T {\n\tif (!configPath || !(\"configPath\" in parsed)) {\n\t\treturn parsed;\n\t}\n\treturn { ...parsed, configPath };\n}\n\n/**\n * Merge peeled global flags onto the legacy `CliCommand` object so existing\n * command implementations keep reading `json` / `configPath` / `strict`.\n */\nexport function applyGlobalsToCommand(\n\tparsed: CliCommand,\n\tglobals: CliGlobalFlags,\n): CliCommand {\n\tif (parsed.command === \"help\") {\n\t\treturn parsed;\n\t}\n\n\tlet next = parsed;\n\tconst json = globals.output === \"json\";\n\n\tif (next.command === \"commands\") {\n\t\tif (json) {\n\t\t\tnext = { ...next, format: \"json\" };\n\t\t} else if (globals.plain && next.format === \"full\") {\n\t\t\tnext = { ...next, format: \"plain\" };\n\t\t}\n\t}\n\n\tnext = withJson(next, json);\n\tnext = withPlain(next, globals.plain);\n\tnext = withStrict(next, globals.strict);\n\tnext = withConfig(next, globals.configPath);\n\treturn next;\n}\n","import type { CliOutputFormat, CliVerbosity } from \"./constants.ts\";\n\nexport interface CliGlobalFlags {\n\tconfigPath?: string;\n\tcwd?: string;\n\tdebug: boolean;\n\toutput: CliOutputFormat;\n\t/** When set, CLI report lines are also written to this path (cwd-relative). */\n\toutputPath?: string;\n\tplain: boolean;\n\tprofile?: string;\n\tstrict: boolean;\n\tverbosity: CliVerbosity;\n}\n\nexport interface PeeledGlobals {\n\targv: string[];\n\tglobals: CliGlobalFlags;\n}\n\nconst OUTPUT_VALUES = new Set<CliOutputFormat>([\"text\", \"json\", \"ndjson\"]);\n\nfunction takeValue(\n\ttokens: readonly string[],\n\tindex: number,\n\tflag: string,\n): { nextIndex: number; value: string } {\n\tconst nextValue = tokens[index + 1];\n\tif (nextValue === undefined || nextValue.startsWith(\"-\")) {\n\t\tthrow new Error(`Missing value for ${flag} option.`);\n\t}\n\treturn { nextIndex: index + 2, value: nextValue };\n}\n\n/**\n * Pull global execution flags so command parsers never re-solve them.\n *\n * Compatibility:\n * - `-v` / `-q` stay version (`--version` / `--short`).\n * - `-C` stays the `commands` inventory alias (use `--cwd` for directory).\n * Use `--verbose` / `--quiet` for verbosity (not `-v` / `-q`).\n */\nexport function peelGlobalFlags(argv: readonly string[]): PeeledGlobals {\n\tconst globals: CliGlobalFlags = {\n\t\tdebug: false,\n\t\toutput: \"text\",\n\t\tplain: false,\n\t\tstrict: false,\n\t\tverbosity: \"normal\",\n\t};\n\tconst tokens: string[] = [];\n\n\tfor (let index = 0; index < argv.length; index += 1) {\n\t\tconst token = argv[index];\n\t\tif (token === \"--json\" || token === \"-j\") {\n\t\t\tglobals.output = \"json\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--plain\") {\n\t\t\tglobals.plain = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--quiet\") {\n\t\t\tglobals.verbosity = \"quiet\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--verbose\") {\n\t\t\tglobals.verbosity = \"verbose\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--debug\") {\n\t\t\tglobals.debug = true;\n\t\t\tglobals.verbosity = \"debug\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--strict\") {\n\t\t\tglobals.strict = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--out-file\") {\n\t\t\tconst taken = takeValue(argv, index, \"--out-file\");\n\t\t\tglobals.outputPath = taken.value;\n\t\t\tindex = taken.nextIndex - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--output\" || token === \"-o\") {\n\t\t\tconst taken = takeValue(argv, index, \"--output\");\n\t\t\tif (OUTPUT_VALUES.has(taken.value as CliOutputFormat)) {\n\t\t\t\tglobals.output = taken.value as CliOutputFormat;\n\t\t\t} else {\n\t\t\t\tglobals.outputPath = taken.value;\n\t\t\t}\n\t\t\tindex = taken.nextIndex - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--cwd\") {\n\t\t\tconst taken = takeValue(argv, index, \"--cwd\");\n\t\t\tglobals.cwd = taken.value;\n\t\t\tindex = taken.nextIndex - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\" || token === \"-c\") {\n\t\t\tconst taken = takeValue(argv, index, \"--config\");\n\t\t\tglobals.configPath = taken.value;\n\t\t\tindex = taken.nextIndex - 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--profile\") {\n\t\t\tconst taken = takeValue(argv, index, \"--profile\");\n\t\t\tglobals.profile = taken.value;\n\t\t\tindex = taken.nextIndex - 1;\n\t\t\tcontinue;\n\t\t}\n\t\ttokens.push(token);\n\t}\n\n\treturn { argv: tokens, globals };\n}\n","import { CLI_JSON_SCHEMA_VERSION } from \"./constants.ts\";\nimport type { CliDiagnostic } from \"./result.ts\";\n\nexport interface CliJsonErrorBody {\n\tcode: string;\n\tmessage: string;\n\thint?: string;\n\tdetails?: Record<string, unknown>;\n}\n\nexport interface CliJsonSuccess<T = unknown> {\n\tschemaVersion: typeof CLI_JSON_SCHEMA_VERSION;\n\tcommand: string;\n\tok: true;\n\tdata: T;\n\twarnings?: CliDiagnostic[];\n\tmeta?: {\n\t\tdurationMs: number;\n\t};\n}\n\nexport interface CliJsonFailure {\n\tschemaVersion: typeof CLI_JSON_SCHEMA_VERSION;\n\tcommand: string;\n\tok: false;\n\terror: CliJsonErrorBody;\n}\n\nexport type CliJsonEnvelope<T = unknown> = CliJsonSuccess<T> | CliJsonFailure;\n\nexport function encodeCliJsonSuccess<T>(\n\tcommand: string,\n\tdata: T,\n\toptions: { durationMs?: number; warnings?: CliDiagnostic[] } = {},\n): CliJsonSuccess<T> {\n\tconst envelope: CliJsonSuccess<T> = {\n\t\tschemaVersion: CLI_JSON_SCHEMA_VERSION,\n\t\tcommand,\n\t\tok: true,\n\t\tdata,\n\t};\n\tif (options.warnings && options.warnings.length > 0) {\n\t\tenvelope.warnings = options.warnings;\n\t}\n\tif (options.durationMs !== undefined) {\n\t\tenvelope.meta = { durationMs: options.durationMs };\n\t}\n\treturn envelope;\n}\n\nexport function encodeCliJsonFailure(\n\tcommand: string,\n\terror: CliJsonErrorBody,\n): CliJsonFailure {\n\treturn {\n\t\tschemaVersion: CLI_JSON_SCHEMA_VERSION,\n\t\tcommand,\n\t\tok: false,\n\t\terror,\n\t};\n}\n\nexport function stringifyCliJson(envelope: CliJsonEnvelope): string {\n\treturn JSON.stringify(envelope, null, 2);\n}\n","import { argvWantsHelp } from \"../argv.ts\";\nimport {\n\ttype CatalogHelpTopic,\n\tcatalogHelpTopic,\n} from \"../commands-catalog.ts\";\nimport { unknownCommandError } from \"../parse-helpers.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport type { CommandRegistry } from \"./registry.ts\";\n\nfunction helpTopicFromPath(path: readonly string[]): CatalogHelpTopic {\n\tconst head = path[0];\n\tif (head == null || head === \"\") {\n\t\treturn \"root\";\n\t}\n\treturn catalogHelpTopic(head, path.slice(1)) ?? \"root\";\n}\n\nfunction helpCommand(topic: CatalogHelpTopic): CliCommand {\n\treturn { command: \"help\", topic };\n}\n\nexport function parseRegisteredCommand(\n\tregistry: CommandRegistry,\n\targv: readonly string[],\n): CliCommand {\n\tif (argv.length === 0) {\n\t\treturn helpCommand(\"root\");\n\t}\n\n\tif (argv[0] === \"--help\" || argv[0] === \"-h\") {\n\t\tconst matched = argv[1] ? registry.match(argv.slice(1)) : undefined;\n\t\tif (matched) {\n\t\t\treturn helpCommand(helpTopicFromPath(matched.command.path));\n\t\t}\n\t\treturn helpCommand(\"root\");\n\t}\n\n\tconst matched = registry.match(argv);\n\tif (!matched) {\n\t\tif (argvWantsHelp(argv)) {\n\t\t\treturn helpCommand(helpTopicFromPath(argv));\n\t\t}\n\t\tthrow unknownCommandError(argv[0] ?? \"\");\n\t}\n\n\tif (argvWantsHelp(argv) && matched.command.path[0] !== \"help\") {\n\t\treturn helpCommand(helpTopicFromPath(matched.command.path));\n\t}\n\n\treturn matched.command.parse(matched.rest);\n}\n","export { CLI_JSON_SCHEMA_VERSION, type CliOutputFormat, type CliVerbosity } from \"./constants.ts\";\nexport { defineCommand, type RegisteredCommand } from \"./define-command.ts\";\nexport { dispatchRegistered, sessionTitleFor } from \"./execute.ts\";\nexport {\n\tapplyGlobalsToCommand,\n} from \"./apply-globals.ts\";\nexport {\n\ttype CliGlobalFlags,\n\tpeelGlobalFlags,\n} from \"./globals.ts\";\nexport {\n\tencodeCliJsonFailure,\n\tencodeCliJsonSuccess,\n\tstringifyCliJson,\n\ttype CliJsonEnvelope,\n} from \"./json-protocol.ts\";\nexport { exitCodeForError } from \"./map-exit.ts\";\nexport {\n\tbooleanOption,\n\tenumOption,\n\tnumberOption,\n\tpathOption,\n\tstringOption,\n} from \"./options.ts\";\nexport { parseRegisteredCommand } from \"./parse.ts\";\nexport { CommandRegistry } from \"./registry.ts\";\nexport type { CliDiagnostic, CommandResult } from \"./result.ts\";\n","/**\n * Shared Athena Auth operation contract.\n *\n * Live HTTP support is generated (`operations.generated.ts` /\n * `contracts/auth/routes.generated.json`). This module owns the type and\n * derived views. Do not hand-maintain a second missing-route list.\n */\n\nimport type { AthenaAuthDomainEvent } from \"../hooks/events.ts\";\n\nexport type AthenaAuthRuntimeSupport = \"supported\" | \"unsupported\";\n\nexport type AthenaAuthOperationAuth =\n\t| \"public\"\n\t| \"optional-session\"\n\t| \"session\"\n\t| \"admin\";\n\nexport type AthenaAuthOperationCapability =\n\t| \"accounts\"\n\t| \"admin\"\n\t| \"apiKeys\"\n\t| \"email\"\n\t| \"health\"\n\t| \"invitations\"\n\t| \"jwt\"\n\t| \"oidc\"\n\t| \"organizations\"\n\t| \"passkeys\"\n\t| \"password\"\n\t| \"sessions\"\n\t| \"social\"\n\t| \"tokens\"\n\t| \"twoFactor\";\n\nexport interface AthenaAuthOperationDefinition {\n\tid: string;\n\tmethod: string;\n\tpath: string;\n\tcapability: AthenaAuthOperationCapability | string;\n\trust: AthenaAuthRuntimeSupport;\n\tembedded: AthenaAuthRuntimeSupport;\n\tauth: AthenaAuthOperationAuth;\n\tmutation: boolean;\n\tdomainEvent?: AthenaAuthDomainEvent;\n\tnonportable?: boolean;\n}\n\nexport function operationKey(\n\toperation: Pick<AthenaAuthOperationDefinition, \"method\" | \"path\">,\n): string {\n\treturn `${operation.method} ${operation.path}`;\n}\n\n/**\n * Product-portable gaps: Rust serves the route, embedded does not, and the\n * route is not a dedicated-service operator surface (`nonportable`).\n *\n * Wave 0 keeps `KNOWN_MISSING_IN_LOCAL` as a freeze snapshot of this list.\n * Later waves delete the Set once this function returns [].\n */\nexport function listMissingEmbeddedOperations(\n\toperations: readonly AthenaAuthOperationDefinition[],\n): string[] {\n\treturn operations\n\t\t.filter(\n\t\t\t(operation) =>\n\t\t\t\toperation.rust === \"supported\" &&\n\t\t\t\toperation.embedded === \"unsupported\" &&\n\t\t\t\toperation.nonportable !== true,\n\t\t)\n\t\t.map(operationKey)\n\t\t.sort();\n}\n\nexport function operationsForCapability(\n\toperations: readonly AthenaAuthOperationDefinition[],\n\tcapability: string,\n): AthenaAuthOperationDefinition[] {\n\treturn operations.filter((operation) => operation.capability === capability);\n}\n\n/**\n * Advertised `passkeys` / social providers must stay false until every\n * portable Rust-supported operation in that capability is embedded-supported.\n */\nexport function deriveEmbeddedCapabilityAdvertisement(\n\toperations: readonly AthenaAuthOperationDefinition[],\n): {\n\tpasskeys: boolean;\n\tsocialProvidersAdvertised: boolean;\n} {\n\tconst portable = (capability: string) =>\n\t\toperations.filter(\n\t\t\t(operation) =>\n\t\t\t\toperation.capability === capability &&\n\t\t\t\toperation.rust === \"supported\" &&\n\t\t\t\toperation.nonportable !== true,\n\t\t);\n\n\tconst passkeyOps = portable(\"passkeys\");\n\tconst socialOps = portable(\"social\");\n\n\treturn {\n\t\tpasskeys:\n\t\t\tpasskeyOps.length > 0 &&\n\t\t\tpasskeyOps.every((operation) => operation.embedded === \"supported\"),\n\t\tsocialProvidersAdvertised:\n\t\t\tsocialOps.length > 0 &&\n\t\t\tsocialOps.every((operation) => operation.embedded === \"supported\"),\n\t};\n}\n","/**\n * Server-neutral Athena Auth contract.\n *\n * Externally observable protocol shared by the Rust runtime\n * (`services/athena-auth`) and the TypeScript local runtime.\n *\n * HTTP operation SSOT: `AthenaAuthOperationDefinition` plus generated\n * `ATHENA_AUTH_OPERATIONS` (`scripts/auth-route-parity.mjs`).\n */\n\nexport type {\n\tAthenaAuthOperationAuth,\n\tAthenaAuthOperationCapability,\n\tAthenaAuthOperationDefinition,\n\tAthenaAuthRuntimeSupport,\n} from \"./operations.ts\";\nexport {\n\tderiveEmbeddedCapabilityAdvertisement,\n\tlistMissingEmbeddedOperations,\n\toperationKey,\n\toperationsForCapability,\n} from \"./operations.ts\";\n\nexport const ATHENA_AUTH_PROTOCOL_VERSION = \"1\";\n\nexport const ATHENA_AUTH_DEFAULT_BASE_PATH = \"/api/auth\";\n\nexport const ATHENA_AUTH_TRACE_ID_HEADER = \"x-athena-trace-id\";\nexport const ATHENA_AUTH_REQUEST_ID_HEADER = \"x-request-id\";\n\n/** Rust default session cookie name (`AuthConfig.session.cookie_name`). */\nexport const ATHENA_AUTH_SESSION_COOKIE_NAME = \"athena-auth.session-token\";\n\n/** Additional cookie names accepted when reading a session. */\nexport const ATHENA_AUTH_SESSION_COOKIE_ALIASES = [\n\t\"athena-auth.session_token\",\n\t\"athena-auth-session_token\",\n\t\"better-auth.session_token\",\n\t\"better-auth-session_token\",\n] as const;\n\nexport const ATHENA_AUTH_PASSWORD_HASH_KEY = \"password_hash\";\n\n/** Credential account provider id used when a password row is also written. */\nexport const ATHENA_AUTH_CREDENTIAL_PROVIDER_ID = \"credential\";\n\n/**\n * Current Athena Auth schema generation (JS ledger max).\n * Rust incremental files 001–021 plus JS `021_runtime_key_and_ledger`,\n * `022_add_updated_at_to_passkeys`, `023_auth_observability`,\n * `024_email_event_default_templates`, `025_add_aaguid_to_passkeys`,\n * `026_passkey_resident_key_and_registration_transactions`,\n * `027_auth_bridge_codes`, `028_oauth_transactions`,\n * `029_notification_preferences`, `030_organization_created_by`,\n * `031_authorization_assignment`, and `032_authorization_assignment_constraints`.\n */\nexport const ATHENA_AUTH_SCHEMA_GENERATION = 32;\nexport const ATHENA_AUTH_MIN_SUPPORTED_SCHEMA_GENERATION = 1;\n\nexport const ATHENA_AUTH_SCHEMA_NAME = \"athena\";\n\nexport const ATHENA_AUTH_TABLES = {\n\tusers: \"athena.users\",\n\tsessions: \"athena.sessions\",\n\taccounts: \"athena.accounts\",\n\tverifications: \"athena.verifications\",\n\torganization: \"athena.organization\",\n\tmember: \"athena.member\",\n\tinvitation: \"athena.invitation\",\n\ttwoFactor: \"athena.two_factor\",\n\tapiKeys: \"athena.api_keys\",\n\tpasskeys: \"athena.passkeys\",\n\temails: \"athena.emails\",\n\temailSendFailures: \"athena.email_send_failures\",\n\temailEventTypes: \"athena.email_event_types\",\n\temailTemplates: \"athena.email_templates\",\n\truntimeKey: \"athena.runtime_key\",\n\tschemaMigrations: \"athena.auth_schema_migrations\",\n\tpasskeyRegistrationTransactions:\n\t\t\"athena.passkey_registration_transactions\",\n\tauthBridgeCodes: \"athena.auth_bridge_codes\",\n\toauthTransactions: \"athena.oauth_transactions\",\n\tnotificationPreferences: \"athena.notification_preferences\",\n\tauthorizationRights: \"athena.authorization_rights\",\n\tauthorizationRoles: \"athena.authorization_roles\",\n\tauthorizationRoleRights: \"athena.authorization_role_rights\",\n\tauthorizationUserRoles: \"athena.authorization_user_roles\",\n\tauthorizationMemberRoles: \"athena.authorization_member_roles\",\n\tauthorizationRevisions: \"athena.authorization_revisions\",\n\tauthorizationAuditLog: \"athena.authorization_audit_log\",\n} as const;\n\nexport const ATHENA_AUTH_CORE_ROUTES = {\n\tok: { method: \"GET\", path: \"/ok\" },\n\thealth: { method: \"GET\", path: \"/health\" },\n\tgetSession: { methods: [\"GET\", \"POST\"] as const, path: \"/get-session\" },\n\tsignUpEmail: { method: \"POST\", path: \"/sign-up/email\" },\n\tsignInEmail: { method: \"POST\", path: \"/sign-in/email\" },\n\tsignInUsername: { method: \"POST\", path: \"/sign-in/username\" },\n\tsignOut: { method: \"POST\", path: \"/sign-out\" },\n\tforgetPassword: { method: \"POST\", path: \"/forget-password\" },\n\tresetPassword: { method: \"POST\", path: \"/reset-password\" },\n\tchangePassword: { method: \"POST\", path: \"/change-password\" },\n\tupdateUser: { method: \"POST\", path: \"/update-user\" },\n\tdeleteUser: { method: \"POST\", path: \"/delete-user\" },\n\tlistSessions: { method: \"GET\", path: \"/list-sessions\" },\n\trevokeSession: { method: \"POST\", path: \"/revoke-session\" },\n\trevokeSessions: { method: \"POST\", path: \"/revoke-sessions\" },\n\trevokeOtherSessions: { method: \"POST\", path: \"/revoke-other-sessions\" },\n\tlistAccounts: { method: \"GET\", path: \"/list-accounts\" },\n\torganizationCreate: { method: \"POST\", path: \"/organization/create\" },\n\torganizationList: { method: \"GET\", path: \"/organization/list\" },\n\torganizationGet: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/get-full-organization\",\n\t},\n\torganizationUpdate: { method: \"POST\", path: \"/organization/update\" },\n\torganizationDelete: { method: \"POST\", path: \"/organization/delete\" },\n\torganizationSetActive: { method: \"POST\", path: \"/organization/set-active\" },\n\torganizationListMembers: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/list-members\",\n\t},\n\torganizationAddMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/add-member\",\n\t},\n\torganizationInviteReminder: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/invite-member-reminder\",\n\t},\n\torganizationRemoveMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/remove-member\",\n\t},\n\tsendSecurityAlert: { method: \"POST\", path: \"/send-security-alert\" },\n\tsendSignInEmail: { method: \"POST\", path: \"/send-sign-in-email\" },\n\torganizationUpdateMemberRole: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/update-member-role\",\n\t},\n\torganizationLeave: { method: \"POST\", path: \"/organization/leave\" },\n\torganizationInviteMember: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/invite-member\",\n\t},\n\torganizationAcceptInvitation: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/accept-invitation\",\n\t},\n\torganizationCancelInvitation: {\n\t\tmethod: \"POST\",\n\t\tpath: \"/organization/cancel-invitation\",\n\t},\n\torganizationListInvitations: {\n\t\tmethod: \"GET\",\n\t\tpath: \"/organization/list-invitations\",\n\t},\n} as const;\n\nexport type AthenaAuthHttpMethod =\n\t| \"GET\"\n\t| \"POST\"\n\t| \"PUT\"\n\t| \"PATCH\"\n\t| \"DELETE\"\n\t| \"HEAD\"\n\t| \"OPTIONS\";\n\nexport interface AthenaAuthErrorBody {\n\tcode?: string;\n\tmessage: string;\n\ttraceId: string;\n\tversion: string;\n}\n\nexport interface AthenaAuthContractUser {\n\tbanExpires?: string | null;\n\tbanned?: boolean;\n\tbanReason?: string | null;\n\tcreatedAt: string;\n\tdisplayUsername?: string | null;\n\temail?: string | null;\n\temailVerified: boolean;\n\tid: string;\n\timage?: string | null;\n\tlastSignInAt?: string | null;\n\tname?: string | null;\n\trole?: string | null;\n\ttwoFactorEnabled?: boolean;\n\tupdatedAt: string;\n\tusername?: string | null;\n}\n\nexport interface AthenaAuthContractSession {\n\tactiveOrganizationId?: string | null;\n\tcreatedAt: string;\n\texpiresAt: string;\n\tid: string;\n\timpersonatedBy?: string | null;\n\tipAddress?: string | null;\n\ttoken: string;\n\tupdatedAt: string;\n\tuserAgent?: string | null;\n\tuserId: string;\n}\n\nexport interface AthenaAuthArgon2Params {\n\tmemoryCost: number;\n\tparallelism: number;\n\ttimeCost: number;\n}\n\n/** Rust `Argon2Config::default()` — 1 MiB, 2 iterations, 1 lane, Argon2id v19. */\nexport const ATHENA_AUTH_DEFAULT_ARGON2: AthenaAuthArgon2Params = {\n\tmemoryCost: 1024,\n\tparallelism: 1,\n\ttimeCost: 2,\n};\n\nexport const ATHENA_AUTH_DEFAULT_PASSWORD_MIN_LENGTH = 8;\nexport const ATHENA_AUTH_DEFAULT_PASSWORD_MAX_LENGTH = 128;\nexport const ATHENA_AUTH_DEFAULT_SESSION_EXPIRES_SECONDS = 7 * 24 * 60 * 60;\nexport const ATHENA_AUTH_DEFAULT_SESSION_UPDATE_AGE_SECONDS = 24 * 60 * 60;\nexport const ATHENA_AUTH_DEFAULT_BODY_LIMIT_BYTES = 1_048_576;\nexport const ATHENA_AUTH_RUNTIME_KEY_PURPOSE = \"local-runtime\";\n/**\n * Session/transaction advisory lock for Embedded Auth DDL (keyring, migrate, repair).\n * Independent of application migrate locks (`ATHA`/`MIGS` in PostgresMigrationBackend).\n * The application lock does not serialize `AthenaAuthDatabase` connections.\n */\nexport const ATHENA_AUTH_INIT_ADVISORY_LOCK = 872_046_011;\n/** Alias: Embedded Auth migrator lock. Same bigint as `ATHENA_AUTH_INIT_ADVISORY_LOCK`. */\nexport const ATHENA_AUTH_MIGRATION_ADVISORY_LOCK = ATHENA_AUTH_INIT_ADVISORY_LOCK;\n","/**\n * Generated by scripts/auth-route-parity.mjs. Do not edit.\n * Wave 0 Auth Finality operation catalog (live rust + embedded scan).\n */\nimport type { AthenaAuthOperationDefinition } from \"./operations.ts\";\n\nexport const ATHENA_AUTH_OPERATIONS: AthenaAuthOperationDefinition[] = [\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"DELETE\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"jwt.jwks\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/jwks.json\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"oidc.discovery\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/openid-configuration\",\n    \"capability\": \"oidc\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.relatedOrigins\",\n    \"method\": \"GET\",\n    \"path\": \"/.well-known/webauthn\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailEventType.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-event-type/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailFailure.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-failure/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailFailure.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-failure/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailTemplate.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-template/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.emailTemplate.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email-template/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.email.get\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email/get\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"admin.email.list\",\n    \"method\": \"GET\",\n    \"path\": \"/admin/email/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.get\",\n    \"method\": \"GET\",\n    \"path\": \"/api-key/get\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.list\",\n    \"method\": \"GET\",\n    \"path\": \"/api-key/list\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.audit\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/audit\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.rights\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/rights\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/roles\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.snapshot\",\n    \"method\": \"GET\",\n    \"path\": \"/authorization/snapshot\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"social.callback\",\n    \"method\": \"GET\",\n    \"path\": \"/callback/{provider}\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.email.verify.change\",\n    \"method\": \"GET\",\n    \"path\": \"/change-email/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.delete.verify\",\n    \"method\": \"GET\",\n    \"path\": \"/delete-user/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"email.list\",\n    \"method\": \"GET\",\n    \"path\": \"/email/list\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"session.get\",\n    \"method\": \"GET\",\n    \"path\": \"/get-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"health.health\",\n    \"method\": \"GET\",\n    \"path\": \"/health\",\n    \"capability\": \"health\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"account.list\",\n    \"method\": \"GET\",\n    \"path\": \"/list-accounts\",\n    \"capability\": \"accounts\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"session.list\",\n    \"method\": \"GET\",\n    \"path\": \"/list-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"health.ok\",\n    \"method\": \"GET\",\n    \"path\": \"/ok\",\n    \"capability\": \"health\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"member.active\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-active-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.get\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-full-organization\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.get\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/get-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-invitations\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"member.list\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-members\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.listUser\",\n    \"method\": \"GET\",\n    \"path\": \"/organization/list-user-invitations\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.register.options\",\n    \"method\": \"GET\",\n    \"path\": \"/passkey/generate-register-options\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"passkey.list\",\n    \"method\": \"GET\",\n    \"path\": \"/passkey/list-user-passkeys\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.password.reset.token\",\n    \"method\": \"GET\",\n    \"path\": \"/reset-password/{token}\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"user.email.verify\",\n    \"method\": \"GET\",\n    \"path\": \"/verify-email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false,\n    \"domainEvent\": \"user.email.verify\"\n  },\n  {\n    \"id\": \"health.ok.head\",\n    \"method\": \"HEAD\",\n    \"path\": \"/ok\",\n    \"capability\": \"health\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"PATCH\",\n    \"path\": \"/authorization/roles/{id}\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailFailure.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-failure/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.send\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/send\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.emailTemplate.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email-template/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.create\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/create\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/delete\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"admin.email.update\",\n    \"method\": \"POST\",\n    \"path\": \"/admin/email/update\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"admin\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"apiKey.create\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/create\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.create\"\n  },\n  {\n    \"id\": \"apiKey.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/delete\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.delete\"\n  },\n  {\n    \"id\": \"apiKey.deleteExpired\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/delete-all-expired-api-keys\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"apiKey.get.post\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/get\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"apiKey.update\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/update\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"apiKey.update\"\n  },\n  {\n    \"id\": \"apiKey.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/api-key/verify\",\n    \"capability\": \"apiKeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"authorization.roles\",\n    \"method\": \"POST\",\n    \"path\": \"/authorization/roles\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"authorization.roles.clone\",\n    \"method\": \"POST\",\n    \"path\": \"/authorization/roles/clone\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"callback.by\",\n    \"method\": \"POST\",\n    \"path\": \"/callback/{provider}\",\n    \"capability\": \"social\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.email.update\",\n    \"method\": \"POST\",\n    \"path\": \"/change-email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.email.update\"\n  },\n  {\n    \"id\": \"user.email.verify.change.post\",\n    \"method\": \"POST\",\n    \"path\": \"/change-email/verify\",\n    \"capability\": \"password\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.change\",\n    \"method\": \"POST\",\n    \"path\": \"/change-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.password.change\"\n  },\n  {\n    \"id\": \"user.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/delete-user\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.delete\"\n  },\n  {\n    \"id\": \"user.password.forget\",\n    \"method\": \"POST\",\n    \"path\": \"/forget-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"jwt.accessToken\",\n    \"method\": \"POST\",\n    \"path\": \"/get-access-token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.get.post\",\n    \"method\": \"POST\",\n    \"path\": \"/get-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"account.link\",\n    \"method\": \"POST\",\n    \"path\": \"/link-social\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"account.link\"\n  },\n  {\n    \"id\": \"invitation.accept\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/accept-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.accept\"\n  },\n  {\n    \"id\": \"member.add\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/add-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.add\"\n  },\n  {\n    \"id\": \"invitation.cancel\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/cancel-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.cancel\"\n  },\n  {\n    \"id\": \"organization.checkSlug\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/check-slug\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"organization.create\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/create\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.create\"\n  },\n  {\n    \"id\": \"organization.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/delete\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.delete\"\n  },\n  {\n    \"id\": \"organization.hasPermission\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/has-permission\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"invitation.create\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/invite-member\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.create\"\n  },\n  {\n    \"id\": \"invitation.reminder\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/invite-member-reminder\",\n    \"capability\": \"invitations\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.invite.reminder\"\n  },\n  {\n    \"id\": \"organization.leave\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/leave\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"id\": \"invitation.reject\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/reject-invitation\",\n    \"capability\": \"invitations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.invitation.reject\"\n  },\n  {\n    \"id\": \"member.remove\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/remove-member\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"id\": \"organization.setActive\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/set-active\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.activeOrganization.update\"\n  },\n  {\n    \"id\": \"organization.update\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/update\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.update\"\n  },\n  {\n    \"id\": \"member.role.update\",\n    \"method\": \"POST\",\n    \"path\": \"/organization/update-member-role\",\n    \"capability\": \"organizations\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"organization.member.role.update\"\n  },\n  {\n    \"id\": \"passkey.delete\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/delete-passkey\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.delete\"\n  },\n  {\n    \"id\": \"passkey.authenticate.options\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/generate-authenticate-options\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"optional-session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"passkey.update\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/update-passkey\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.update\"\n  },\n  {\n    \"id\": \"passkey.authenticate.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/verify-authentication\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"passkey.register.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/passkey/verify-registration\",\n    \"capability\": \"passkeys\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"passkey.register\"\n  },\n  {\n    \"id\": \"jwt.refresh\",\n    \"method\": \"POST\",\n    \"path\": \"/refresh-token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.reset\",\n    \"method\": \"POST\",\n    \"path\": \"/reset-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.password.reset\"\n  },\n  {\n    \"id\": \"session.revoke.others\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-other-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"session.revoke\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-session\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"session.revoke.all\",\n    \"method\": \"POST\",\n    \"path\": \"/revoke-sessions\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"email.securityAlert\",\n    \"method\": \"POST\",\n    \"path\": \"/send-security-alert\",\n    \"capability\": \"email\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.security.alert\"\n  },\n  {\n    \"id\": \"email.signIn\",\n    \"method\": \"POST\",\n    \"path\": \"/send-sign-in-email\",\n    \"capability\": \"email\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.sign-in.email\"\n  },\n  {\n    \"id\": \"user.email.verify.send\",\n    \"method\": \"POST\",\n    \"path\": \"/send-verification-email\",\n    \"capability\": \"email\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.bridge.exchange\",\n    \"method\": \"POST\",\n    \"path\": \"/session/bridge/exchange\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.bridge.issue\",\n    \"method\": \"POST\",\n    \"path\": \"/session/bridge/issue\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"user.password.set\",\n    \"method\": \"POST\",\n    \"path\": \"/set-password\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"session.issue.email\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.issue.social\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/social\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.issue.username\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-in/username\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"id\": \"session.revoke.current\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-out\",\n    \"capability\": \"sessions\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"id\": \"user.create\",\n    \"method\": \"POST\",\n    \"path\": \"/sign-up/email\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.create\"\n  },\n  {\n    \"id\": \"jwt.token\",\n    \"method\": \"POST\",\n    \"path\": \"/token\",\n    \"capability\": \"jwt\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"public\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.disable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/disable\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.disable\"\n  },\n  {\n    \"id\": \"twoFactor.enable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/enable\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"id\": \"twoFactor.backupCodes.generate\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/generate-backup-codes\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.getUri\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/get-totp-uri\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": false\n  },\n  {\n    \"id\": \"twoFactor.emailOtp.send\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/send-otp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.backupCodes.consume\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-backup-code\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.emailOtp.verify\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-otp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\n  },\n  {\n    \"id\": \"twoFactor.verifyEnable\",\n    \"method\": \"POST\",\n    \"path\": \"/two-factor/verify-totp\",\n    \"capability\": \"twoFactor\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"id\": \"account.unlink\",\n    \"method\": \"POST\",\n    \"path\": \"/unlink-account\",\n    \"capability\": \"social\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"account.unlink\"\n  },\n  {\n    \"id\": \"user.update\",\n    \"method\": \"POST\",\n    \"path\": \"/update-user\",\n    \"capability\": \"password\",\n    \"rust\": \"supported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true,\n    \"domainEvent\": \"user.update\"\n  },\n  {\n    \"id\": \"authorization.roles.by.rights\",\n    \"method\": \"PUT\",\n    \"path\": \"/authorization/roles/{id}/rights\",\n    \"capability\": \"sessions\",\n    \"rust\": \"unsupported\",\n    \"embedded\": \"supported\",\n    \"auth\": \"session\",\n    \"mutation\": true\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_AUTH_NOT_AVAILABLE\"\n  | \"ATHENA_API_KEY_REQUIRED\"\n  | \"ATHENA_INVALID_URL\"\n  | \"ATHENA_NEXT_SERVER_RUNTIME_REQUIRED\"\n  | \"ATHENA_NODE_RUNTIME_REQUIRED\"\n  | \"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\"\n  | \"ATHENA_AUTH_ROUTING_CONFLICT\"\n  | \"ATHENA_AUTH_UPSTREAM_REQUIRED\"\n  | \"ATHENA_AUTH_DUPLICATE_PATH\"\n  | \"ATHENA_AUTH_INVALID_URL\"\n  | \"ATHENA_AUTH_CREDENTIALS_MISMATCH\"\n  | \"ATHENA_AUTH_REQUEST_ORIGIN_REQUIRED\"\n  | \"ATHENA_AUTH_PROXY_CONFIGURATION_INVALID\"\n  | \"ATHENA_AUTH_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_AUTH_LOCAL_DATABASE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\"\n  | \"ATHENA_CHAT_LOCAL_REMOTE_CONFLICT\"\n  | \"ATHENA_CHAT_REMOTE_URL_REQUIRED\"\n  | \"ATHENA_CHAT_CONFIG_INCOMPLETE\"\n  | \"ATHENA_CHAT_MODE_INVALID\"\n  | \"ATHENA_AUTH_FEATURE_UNSUPPORTED\"\n  | \"ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME\"\n  | \"ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_DATA_LIFECYCLE_AFTER_COMMIT_UNSUPPORTED\"\n  | \"ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED\"\n  | \"ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_BILLING_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\"\n  | \"ATHENA_BILLING_INGESTION_PUBLIC_URL_REQUIRED\"\n  | \"ATHENA_BILLING_INGESTION_NEXT_GEN_REQUIRED\"\n\t| \"ATHENA_BILLING_INGESTION_CONFIG_INVALID\"\n\t| \"ATHENA_BILLING_APPLICATION_ID_REQUIRED\"\n\t| \"ATHENA_AUTH_RUNTIME_CONFIG_CONFLICT\"\n  | \"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\"\n  | \"ATHENA_STORAGE_S3_NODE_REQUIRED\"\n  | \"ATHENA_STORAGE_CAPABILITY_UNSUPPORTED\"\n  | \"ATHENA_DATABASE_URL_CONFLICT\"\n  | \"ATHENA_RUNTIME_CONFIG_INVALID\"\n  | \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n  | \"ATHENA_PASSKEY_RP_AMBIGUOUS\"\n  | \"ATHENA_RUNTIME_DISPOSED\"\n  | \"ATHENA_HANDLER_ROOT_CLIENT_REQUIRED\"\n  | \"ATHENA_RUNTIME_OWNERSHIP_INVALID\"\n  | \"ATHENA_LOCAL_RUNTIME_REQUIRED\"\n  | \"ATHENA_POSTGRES_DRIVER_MISSING\"\n  | \"ATHENA_BROWSER_SERVER_IMPORT\"\n  | \"ATHENA_RUNTIME_CLOSED\"\n  | \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\"\n  | \"ATHENA_CONFIG_IMPORT_FAILED\";\n\n/**\n * Structured configuration failure raised during client construction or\n * unavailable-service access. Distinct from transport/auth/gateway errors.\n */\nexport class AthenaConfigurationError extends Error {\n  readonly code: AthenaConfigurationErrorCode;\n  readonly service?: AthenaService;\n\n  constructor(\n    code: AthenaConfigurationErrorCode,\n    message: string,\n    service?: AthenaService,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaConfigurationError\";\n    this.code = code;\n    this.service = service;\n  }\n}\n","/**\n * Postgres URI helpers for Node `pg` / pg-connection-string.\n *\n * pg-connection-string v2 treats sslmode `prefer` / `require` / `verify-ca` as\n * `verify-full` and emits a SECURITY WARNING unless the mode is already\n * `verify-full` or `uselibpqcompat=true` is set. Duplicate query keys also\n * re-trigger the warning. Collapse keys and pin `verify-full` once before\n * opening a pool.\n */\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst LIBPQ_COMPAT_SSLMODES = new Set([\"prefer\", \"require\", \"verify-ca\"]);\n\nfunction isLoopbackHost(hostname: string): boolean {\n\tconst host = hostname.replace(/^\\[|\\]$/g, \"\").toLowerCase();\n\treturn (\n\t\thost === \"localhost\" ||\n\t\thost === \"127.0.0.1\" ||\n\t\thost === \"::1\" ||\n\t\thost === \"0.0.0.0\"\n\t);\n}\n\nfunction collapseSearchParams(params: URLSearchParams): URLSearchParams {\n\tconst merged = new URLSearchParams();\n\tfor (const [key, value] of params.entries()) {\n\t\tmerged.set(key, value);\n\t}\n\treturn merged;\n}\n\nfunction rewritePostgresUrl(url: URL): void {\n\tconst merged = collapseSearchParams(url.searchParams);\n\tconst sslmode = (merged.get(\"sslmode\") ?? \"\").trim().toLowerCase();\n\tconst optedIntoLibpq =\n\t\t(merged.get(\"uselibpqcompat\") ?? \"\").trim().toLowerCase() === \"true\";\n\n\tif (!sslmode && !isLoopbackHost(url.hostname)) {\n\t\tmerged.set(\"sslmode\", \"verify-full\");\n\t} else if (LIBPQ_COMPAT_SSLMODES.has(sslmode) && !optedIntoLibpq) {\n\t\t// pg v2 treats prefer/require/verify-ca as verify-full and warns.\n\t\t// Pin verify-full (current secure behavior) instead of uselibpqcompat,\n\t\t// which would switch `require` to libpq's weaker no-verify semantics.\n\t\tmerged.set(\"sslmode\", \"verify-full\");\n\t}\n\n\turl.search = merged.toString();\n}\n\n/**\n * Deduplicate connection-string query params and pin remote TLS to\n * `sslmode=verify-full` so `pg` does not warn that `prefer` / `require` /\n * `verify-ca` are aliases of `verify-full`. Explicit `uselibpqcompat=true`\n * is left alone for callers that opted into libpq `require`.\n */\nexport function withPostgresLibpqCompatConnectionString(\n\tconnectionString: string,\n): string {\n\tconst trimmed = connectionString.trim();\n\tif (trimmed.length === 0) {\n\t\treturn connectionString;\n\t}\n\n\ttry {\n\t\tconst usesPostgresql = /^postgresql:/i.test(trimmed);\n\t\tconst normalized = trimmed.replace(/^postgresql:/i, \"postgres:\");\n\t\tconst url = new URL(normalized);\n\t\tif (!POSTGRES_PROTOCOLS.has(url.protocol)) {\n\t\t\treturn connectionString;\n\t\t}\n\n\t\trewritePostgresUrl(url);\n\t\tconst rewritten = url.toString();\n\t\treturn usesPostgresql\n\t\t\t? rewritten.replace(/^postgres:/i, \"postgresql:\")\n\t\t\t: rewritten;\n\t} catch {\n\t\treturn connectionString;\n\t}\n}\n","import type {\n\tPool,\n\tPoolClient,\n\tPoolConfig,\n\tQueryResult,\n\tQueryResultRow,\n} from \"pg\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport const ATHENA_POSTGRES_DRIVER_MISSING_MESSAGE = [\n\t\"Athena local PostgreSQL runtime requires `pg`.\",\n\t\"\",\n\t\"Install:\",\n\t\"  pnpm add pg\",\n\t\"  npm install pg\",\n\t\"  yarn add pg\",\n\t\"  bun add pg\",\n].join(\"\\n\");\n\nexport function postgresDriverMissingError(\n\tcause?: unknown,\n): AthenaConfigurationError {\n\treturn new AthenaConfigurationError(\n\t\t\"ATHENA_POSTGRES_DRIVER_MISSING\",\n\t\tATHENA_POSTGRES_DRIVER_MISSING_MESSAGE,\n\t\t\"db\",\n\t\t{ cause },\n\t);\n}\n\nfunction isModuleNotFound(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = (error as { code?: unknown }).code;\n\tif (code === \"ERR_MODULE_NOT_FOUND\" || code === \"MODULE_NOT_FOUND\") {\n\t\treturn true;\n\t}\n\tconst message = (error as { message?: unknown }).message;\n\treturn (\n\t\ttypeof message === \"string\" &&\n\t\t/cannot find module ['\"]pg['\"]|can't resolve ['\"]pg['\"]/i.test(message)\n\t);\n}\n\n/**\n * Narrow pool surface used by Athena tooling (introspection + migrations).\n * Avoids leaking the full `pg` type graph into every consumer.\n */\nexport interface AthenaPostgresQueryable {\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n}\n\nexport interface AthenaPostgresPoolDiagnostics {\n\tidleCount: number;\n\ttotalCount: number;\n\twaitingCount: number;\n}\n\nexport interface AthenaPostgresPool extends AthenaPostgresQueryable {\n\tconnect(): Promise<AthenaPostgresClient>;\n\tend(): Promise<void>;\n\treadonly idleCount?: number;\n\treadonly totalCount?: number;\n\treadonly waitingCount?: number;\n}\n\nexport const ATHENA_POSTGRES_POOL_DEFAULTS = {\n\tconnectionTimeoutMillis: 10_000,\n\tidleTimeoutMillis: 30_000,\n\tmax: 20,\n} as const;\n\nexport function postgresPoolDiagnostics(\n\tpool: AthenaPostgresPool,\n): AthenaPostgresPoolDiagnostics {\n\treturn {\n\t\tidleCount: pool.idleCount ?? 0,\n\t\ttotalCount: pool.totalCount ?? 0,\n\t\twaitingCount: pool.waitingCount ?? 0,\n\t};\n}\n\nexport interface AthenaPostgresClient {\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n\trelease(err?: Error | boolean): void;\n}\n\ntype PgPoolConstructor = new (config: PoolConfig) => Pool;\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined;\n\n/**\n * Lazily loads the Node-only `pg` Pool constructor.\n * Safe to call only from server/CLI tooling entry points.\n */\nexport async function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n\tif (!pgPoolConstructorPromise) {\n\t\tpgPoolConstructorPromise = import(\"pg\")\n\t\t\t.then((module) => {\n\t\t\t\tconst poolConstructor =\n\t\t\t\t\t(module as { Pool?: PgPoolConstructor }).Pool ??\n\t\t\t\t\t(module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool;\n\n\t\t\t\tif (!poolConstructor) {\n\t\t\t\t\tthrow postgresDriverMissingError();\n\t\t\t\t}\n\n\t\t\t\treturn poolConstructor;\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tpgPoolConstructorPromise = undefined;\n\t\t\t\tif (\n\t\t\t\t\tisModuleNotFound(error) ||\n\t\t\t\t\terror instanceof AthenaConfigurationError\n\t\t\t\t) {\n\t\t\t\t\tthrow error instanceof AthenaConfigurationError\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: postgresDriverMissingError(error);\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t});\n\t}\n\n\treturn pgPoolConstructorPromise;\n}\n\n/**\n * Creates a PostgreSQL connection pool for Node tooling.\n */\nexport async function createPostgresPool(\n\tconnectionString: string,\n\tconfig: Omit<PoolConfig, \"connectionString\"> = {},\n): Promise<AthenaPostgresPool> {\n\tconst PoolConstructor = await loadPgPoolConstructor();\n\tconst pool = new PoolConstructor({\n\t\tconnectionString: withPostgresLibpqCompatConnectionString(connectionString),\n\t\tconnectionTimeoutMillis:\n\t\t\tATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis,\n\t\tidleTimeoutMillis: ATHENA_POSTGRES_POOL_DEFAULTS.idleTimeoutMillis,\n\t\tmax: ATHENA_POSTGRES_POOL_DEFAULTS.max,\n\t\t...config,\n\t});\n\treturn pool as unknown as AthenaPostgresPool;\n}\n\nexport type { Pool, PoolClient, QueryResult, QueryResultRow };\n","/**\n * Client ownership vs resource ownership.\n *\n *   ownership          — is this object a root or a request runtime?\n *   runtimeOwnership   — does this object own / borrow / have no runtime resources?\n *   lifecycle.runtimeId — shared identity across root + views\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport const ATHENA_CLIENT_INTERNAL_PROTOCOL = 1;\n\n/** Process-wide client: owns pools, embedded Auth, migrate, close, handlers. */\nexport interface AthenaRootRuntime {\n  readonly ownership: \"root\";\n}\n\n/** Request-scoped view: borrows root resources and must not own lifecycle. */\nexport interface AthenaRequestRuntime {\n  readonly ownership: \"request\";\n}\n\nexport type AthenaClientOwnership = \"root\" | \"request\";\nexport type AthenaRuntimeResourceOwnership = \"owned\" | \"borrowed\" | \"none\";\nexport type AthenaOwnershipReceived =\n  | \"request-view\"\n  | \"unknown\"\n  | \"foreign-runtime\";\n\nexport interface AthenaClientLifecycle {\n  closed: boolean;\n  requestViewsCreated: number;\n  readonly runtimeId: symbol;\n}\n\nexport interface AthenaRuntimeDiagnostics {\n  authRuntimesCreated: number;\n  closed: boolean;\n  internalProtocolVersion: number;\n  ownership: AthenaClientOwnership;\n  postgresPoolsCreated: number;\n  requestViewsCreated: number;\n  runtimeId: string;\n  runtimeOwnership: AthenaRuntimeResourceOwnership;\n  sdkVersion: string;\n}\n\nexport class AthenaRuntimeOwnershipError extends AthenaConfigurationError {\n  readonly caller: string;\n  readonly expected: \"root\";\n  readonly received: AthenaOwnershipReceived;\n\n  constructor(options: {\n    caller: string;\n    code?:\n      | \"ATHENA_RUNTIME_OWNERSHIP_INVALID\"\n      | \"ATHENA_HANDLER_ROOT_CLIENT_REQUIRED\"\n      | \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\";\n    message: string;\n    received: AthenaOwnershipReceived;\n  }) {\n    super(\n      options.code ?? \"ATHENA_RUNTIME_OWNERSHIP_INVALID\",\n      options.message,\n      \"db\"\n    );\n    this.name = \"AthenaRuntimeOwnershipError\";\n    this.caller = options.caller;\n    this.expected = \"root\";\n    this.received = options.received;\n  }\n}\n\nexport function createAthenaClientLifecycle(): AthenaClientLifecycle {\n  return {\n    closed: false,\n    requestViewsCreated: 0,\n    runtimeId: Symbol(\"athena.runtime\"),\n  };\n}\n\nconst COUNTERS = Symbol.for(\"@xylex-group/athena.runtimeCounters\");\n\nexport interface AthenaRuntimeCounters {\n  authRuntimesCreated: number;\n  postgresPoolsCreated: number;\n}\n\nexport function athenaRuntimeCounters(): AthenaRuntimeCounters {\n  const holder = globalThis as typeof globalThis & {\n    [COUNTERS]?: AthenaRuntimeCounters;\n  };\n  holder[COUNTERS] ??= {\n    authRuntimesCreated: 0,\n    postgresPoolsCreated: 0,\n  };\n  return holder[COUNTERS];\n}\n\nexport function recordPostgresPoolCreated(): void {\n  athenaRuntimeCounters().postgresPoolsCreated += 1;\n}\n\nexport function recordAuthRuntimeCreated(): void {\n  athenaRuntimeCounters().authRuntimesCreated += 1;\n}\n\nexport function formatRuntimeId(runtimeId: symbol): string {\n  return runtimeId.description\n    ? `${runtimeId.description}:${String(runtimeId).slice(7, 15)}`\n    : String(runtimeId);\n}\n\nexport function describeAthenaRuntime(\n  ownership: AthenaClientOwnership,\n  runtimeOwnership: AthenaRuntimeResourceOwnership,\n  lifecycle: AthenaClientLifecycle\n): AthenaRuntimeDiagnostics {\n  const counters = athenaRuntimeCounters();\n  return {\n    authRuntimesCreated: counters.authRuntimesCreated,\n    closed: lifecycle.closed,\n    internalProtocolVersion: ATHENA_CLIENT_INTERNAL_PROTOCOL,\n    ownership,\n    postgresPoolsCreated: counters.postgresPoolsCreated,\n    requestViewsCreated: lifecycle.requestViewsCreated,\n    runtimeId: formatRuntimeId(lifecycle.runtimeId),\n    runtimeOwnership,\n    sdkVersion: PACKAGE_VERSION,\n  };\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\n\n/**\n * Direct PostgreSQL requires a Node.js server runtime (pg + sockets).\n */\nexport function assertNodePostgresRuntime(): void {\n\tconst isNode =\n\t\ttypeof process !== \"undefined\" &&\n\t\ttypeof process.versions === \"object\" &&\n\t\tprocess.versions !== null &&\n\t\ttypeof process.versions.node === \"string\" &&\n\t\tprocess.versions.node.length > 0;\n\n\tif (!isNode) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NODE_RUNTIME_REQUIRED\",\n\t\t\t\"Direct PostgreSQL execution requires a Node.js server runtime. Use Athena Gateway or a runtime-native backend such as D1 in edge/client environments.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n\nexport function isNodePostgresRuntime(): boolean {\n\ttry {\n\t\tassertNodePostgresRuntime();\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { recordPostgresPoolCreated } from \"../runtime/ownership.ts\";\nimport {\n\tATHENA_POSTGRES_POOL_DEFAULTS,\n\ttype AthenaPostgresClient,\n\ttype AthenaPostgresPool,\n\ttype AthenaPostgresPoolDiagnostics,\n\tcreatePostgresPool,\n\tpostgresPoolDiagnostics,\n\ttype QueryResult,\n\ttype QueryResultRow,\n} from \"./driver.ts\";\nimport { assertNodePostgresRuntime } from \"./runtime.ts\";\n\nfunction isPostgresDebugEnabled(): boolean {\n\tconst value = (\n\t\tglobalThis as { process?: { env?: Record<string, string | undefined> } }\n\t).process?.env?.ATHENA_JS_DEBUG;\n\treturn value === \"1\" || value === \"true\";\n}\n\nfunction logPoolSaturation(\n\tstats: AthenaPostgresPoolDiagnostics,\n\tdurationMs: number,\n): void {\n\tif (!isPostgresDebugEnabled()) {\n\t\treturn;\n\t}\n\tif (stats.waitingCount <= 0 && !(stats.idleCount === 0 && durationMs >= 50)) {\n\t\treturn;\n\t}\n\tconsole.warn(\n\t\t`[athena-postgres] pool total=${stats.totalCount} idle=${stats.idleCount} waiting=${stats.waitingCount} queryMs=${Math.round(durationMs)}`,\n\t);\n}\n\nexport type AthenaResourceOwnership = \"owned\" | \"borrowed\";\n\nexport interface AthenaOwnedResource<T> {\n\treadonly ownership: AthenaResourceOwnership;\n\treadonly resource: T;\n}\n\nexport type AthenaPostgresTransactionOptions = {\n\tdeadlineMs?: number;\n};\n\nexport interface AthenaPostgresRuntime {\n\tclose(): Promise<void>;\n\tgetPool(): Promise<AthenaPostgresPool>;\n\tinspectPool(): Promise<AthenaPostgresPoolDiagnostics>;\n\treadonly ownership: AthenaResourceOwnership;\n\tquery<T extends QueryResultRow = QueryResultRow>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<QueryResult<T>>;\n\ttransaction<T>(\n\t\tfn: (runtime: AthenaPostgresRuntime) => Promise<T>,\n\t\toptions?: AthenaPostgresTransactionOptions,\n\t): Promise<T>;\n}\n\nexport function connectPostgresPoolWithDeadline(\n\tpool: AthenaPostgresPool,\n\tdeadlineMs: number,\n): Promise<AthenaPostgresClient> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet timedOut = false;\n\tconst connecting = pool.connect().then((client) => {\n\t\tif (timedOut) {\n\t\t\tclient.release();\n\t\t\tthrow postgresConnectDeadlineError();\n\t\t}\n\t\treturn client;\n\t});\n\tconnecting.catch(() => undefined);\n\treturn Promise.race([\n\t\tconnecting,\n\t\tnew Promise<never>((_, reject) => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\ttimedOut = true;\n\t\t\t\treject(postgresConnectDeadlineError());\n\t\t\t}, deadlineMs);\n\t\t}),\n\t]).finally(() => {\n\t\tif (timer !== undefined) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t});\n}\n\nfunction postgresConnectDeadlineError(): Error {\n\treturn new Error(\"connection timeout exceeded\");\n}\n\nexport interface CreateAthenaPostgresRuntimeOptions {\n\tconnectionString?: string;\n\townership?: AthenaResourceOwnership;\n\tpool?: AthenaPostgresPool;\n}\n\nconst runtimeByTransport = new WeakMap<object, AthenaPostgresRuntime>();\n\nconst OWNED_RUNTIME_CACHE = Symbol.for(\n\t\"@xylex-group/athena.ownedPostgresRuntimes\",\n);\n\ntype OwnedRuntimeCacheEntry = {\n\trefs: number;\n\truntime: AthenaPostgresRuntime;\n};\n\ntype OwnedRuntimeCache = Map<string, OwnedRuntimeCacheEntry>;\n\nfunction ownedRuntimeCache(): OwnedRuntimeCache {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[OWNED_RUNTIME_CACHE]?: OwnedRuntimeCache;\n\t};\n\tholder[OWNED_RUNTIME_CACHE] ??= new Map();\n\treturn holder[OWNED_RUNTIME_CACHE];\n}\n\nexport function bindPostgresRuntime(\n\ttransport: object,\n\truntime: AthenaPostgresRuntime,\n): void {\n\truntimeByTransport.set(transport, runtime);\n}\n\nexport function getBoundPostgresRuntime(\n\ttransport: object | undefined,\n): AthenaPostgresRuntime | undefined {\n\treturn transport ? runtimeByTransport.get(transport) : undefined;\n}\n\nexport function createAthenaPostgresRuntime(\n\toptions: CreateAthenaPostgresRuntimeOptions,\n): AthenaPostgresRuntime {\n\tconst connectionString = options.connectionString?.trim();\n\tif (!(options.pool || connectionString)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\"AthenaPostgresRuntime requires a connection string or an existing pool.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tassertNodePostgresRuntime();\n\n\tconst ownership: AthenaResourceOwnership = options.pool\n\t\t? (options.ownership ?? \"borrowed\")\n\t\t: \"owned\";\n\n\tif (ownership === \"owned\" && connectionString && !options.pool) {\n\t\tconst cached = ownedRuntimeCache().get(connectionString);\n\t\tif (cached) {\n\t\t\tcached.refs += 1;\n\t\t\treturn cached.runtime;\n\t\t}\n\t}\n\n\tlet poolPromise: Promise<AthenaPostgresPool> | undefined;\n\tlet closed = false;\n\n\tconst getPool = async (): Promise<AthenaPostgresPool> => {\n\t\tif (closed) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_DISPOSED\",\n\t\t\t\t\"Athena PostgreSQL runtime was disposed.\",\n\t\t\t\t\"db\",\n\t\t\t);\n\t\t}\n\t\tif (options.pool) {\n\t\t\treturn options.pool;\n\t\t}\n\t\tpoolPromise ??= createPostgresPool(connectionString as string);\n\t\treturn poolPromise;\n\t};\n\n\tconst inspectPool = async (): Promise<AthenaPostgresPoolDiagnostics> =>\n\t\tpostgresPoolDiagnostics(await getPool());\n\n\tconst runtime: AthenaPostgresRuntime = {\n\t\tasync close() {\n\t\t\tif (connectionString && ownership === \"owned\") {\n\t\t\t\tconst entry = ownedRuntimeCache().get(connectionString);\n\t\t\t\tif (entry && entry.runtime === runtime) {\n\t\t\t\t\tentry.refs -= 1;\n\t\t\t\t\tif (entry.refs > 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\townedRuntimeCache().delete(connectionString);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclosed = true;\n\t\t\tif (ownership !== \"owned\" || !poolPromise) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pool = await poolPromise.catch(() => undefined);\n\t\t\tpoolPromise = undefined;\n\t\t\tif (pool) {\n\t\t\t\tawait pool.end();\n\t\t\t}\n\t\t},\n\t\tgetPool,\n\t\tinspectPool,\n\t\townership,\n\t\tasync query(text, values) {\n\t\t\tconst pool = await getPool();\n\t\t\tconst stats = postgresPoolDiagnostics(pool);\n\t\t\tconst started = performance.now();\n\t\t\ttry {\n\t\t\t\treturn await pool.query(text, values);\n\t\t\t} finally {\n\t\t\t\tlogPoolSaturation(stats, performance.now() - started);\n\t\t\t}\n\t\t},\n\t\tasync transaction(fn, options) {\n\t\t\tconst pool = await getPool();\n\t\t\tconst deadlineMs =\n\t\t\t\toptions?.deadlineMs ??\n\t\t\t\tATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis;\n\t\t\tconst client = await connectPostgresPoolWithDeadline(pool, deadlineMs);\n\t\t\tconst txRuntime: AthenaPostgresRuntime = {\n\t\t\t\tclose: async () => { },\n\t\t\t\tgetPool,\n\t\t\t\tinspectPool,\n\t\t\t\townership: \"borrowed\",\n\t\t\t\tquery: async (text, values) => client.query(text, values),\n\t\t\t\ttransaction: (inner) => inner(txRuntime),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst value = await fn(txRuntime);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn value;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback failure\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n\n\tif (ownership === \"owned\" && connectionString && !options.pool) {\n\t\townedRuntimeCache().set(connectionString, { refs: 1, runtime });\n\t\trecordPostgresPoolCreated();\n\t}\n\n\treturn runtime;\n}\n\nexport function getAthenaOwnedRuntimeCacheSize(): number {\n\treturn ownedRuntimeCache().size;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type AuthTimingSpan =\n  | \"parse\"\n  | \"session_lookup\"\n  | \"session_refresh\"\n  | \"user_lookup\"\n  | \"authz\"\n  | \"org_lookup\"\n  | \"grants\"\n  | \"avatar\"\n  | \"users_batch\"\n  | \"serialize\";\n\nexport interface AuthRequestTimingSnapshot {\n  authzMs: number;\n  avatarMs: number;\n  grantsMs: number;\n  orgLookupMs: number;\n  parseMs: number;\n  serializeMs: number;\n  sessionLookupMs: number;\n  sessionRefreshMs: number;\n  sqlAcquireMs: number;\n  sqlCount: number;\n  sqlExecMs: number;\n  sqlPoolIdle: number;\n  sqlPoolTotal: number;\n  sqlPoolWaiting: number;\n  userLookupMs: number;\n  usersBatchMs: number;\n}\n\nconst SPAN_KEYS: Record<AuthTimingSpan, keyof AuthRequestTimingSnapshot> = {\n  authz: \"authzMs\",\n  avatar: \"avatarMs\",\n  grants: \"grantsMs\",\n  org_lookup: \"orgLookupMs\",\n  parse: \"parseMs\",\n  serialize: \"serializeMs\",\n  session_lookup: \"sessionLookupMs\",\n  session_refresh: \"sessionRefreshMs\",\n  user_lookup: \"userLookupMs\",\n  users_batch: \"usersBatchMs\",\n};\n\nexport class AuthRequestTiming {\n  private requestTraceId: string | null = null;\n\n  private readonly snapshot: AuthRequestTimingSnapshot = {\n    authzMs: 0,\n    avatarMs: 0,\n    grantsMs: 0,\n    orgLookupMs: 0,\n    parseMs: 0,\n    serializeMs: 0,\n    sessionLookupMs: 0,\n    sessionRefreshMs: 0,\n    sqlAcquireMs: 0,\n    sqlCount: 0,\n    sqlExecMs: 0,\n    sqlPoolIdle: 0,\n    sqlPoolTotal: 0,\n    sqlPoolWaiting: 0,\n    userLookupMs: 0,\n    usersBatchMs: 0,\n  };\n\n  setTraceId(traceId: string): void {\n    const trimmed = traceId.trim();\n    this.requestTraceId = trimmed.length > 0 ? trimmed : null;\n  }\n\n  traceId(): string | null {\n    return this.requestTraceId;\n  }\n\n  addSpan(span: AuthTimingSpan, durationMs: number): void {\n    const key = SPAN_KEYS[span];\n    this.snapshot[key] += Math.max(0, durationMs);\n  }\n\n  addSqlAcquire(durationMs: number): void {\n    this.snapshot.sqlAcquireMs += Math.max(0, durationMs);\n  }\n\n  addSqlExec(durationMs: number): void {\n    this.snapshot.sqlExecMs += Math.max(0, durationMs);\n  }\n\n  addSqlCount(count = 1): void {\n    this.snapshot.sqlCount += count;\n  }\n\n  setSqlPool(stats: {\n    idleCount: number;\n    totalCount: number;\n    waitingCount: number;\n  }): void {\n    this.snapshot.sqlPoolIdle = stats.idleCount;\n    this.snapshot.sqlPoolTotal = stats.totalCount;\n    this.snapshot.sqlPoolWaiting = stats.waitingCount;\n  }\n\n  copy(): AuthRequestTimingSnapshot {\n    return { ...this.snapshot };\n  }\n\n  toServerTimingHeader(totalMs: number): string {\n    const snap = this.snapshot;\n    const parts = [\n      `parse;dur=${Math.round(snap.parseMs)}`,\n      `session_lookup;dur=${Math.round(snap.sessionLookupMs)}`,\n      `authz;dur=${Math.round(snap.authzMs)}`,\n      `org_lookup;dur=${Math.round(snap.orgLookupMs)}`,\n      `sql_acquire;dur=${Math.round(snap.sqlAcquireMs)}`,\n      `sql_exec;dur=${Math.round(snap.sqlExecMs)}`,\n      `sql_pool;desc=\"total=${snap.sqlPoolTotal} idle=${snap.sqlPoolIdle} waiting=${snap.sqlPoolWaiting}\"`,\n      `serialize;dur=${Math.round(snap.serializeMs)}`,\n      `total;dur=${Math.round(totalMs)}`,\n      `sql_count;desc=\"${snap.sqlCount}\"`,\n    ];\n    if (snap.sessionRefreshMs > 0) {\n      parts.push(`session_refresh;dur=${Math.round(snap.sessionRefreshMs)}`);\n    }\n    if (snap.userLookupMs > 0) {\n      parts.push(`user_lookup;dur=${Math.round(snap.userLookupMs)}`);\n    }\n    if (snap.grantsMs > 0) {\n      parts.push(`grants;dur=${Math.round(snap.grantsMs)}`);\n    }\n    if (snap.avatarMs > 0) {\n      parts.push(`avatar;dur=${Math.round(snap.avatarMs)}`);\n    }\n    if (snap.usersBatchMs > 0) {\n      parts.push(`users_batch;dur=${Math.round(snap.usersBatchMs)}`);\n    }\n    return parts.join(\", \");\n  }\n}\n\nconst storage = new AsyncLocalStorage<AuthRequestTiming>();\n\nexport function currentAuthRequestTiming(): AuthRequestTiming | undefined {\n  return storage.getStore();\n}\n\nexport function runWithAuthRequestTiming<T>(\n  fn: () => Promise<T>\n): Promise<T> {\n  return storage.run(new AuthRequestTiming(), fn);\n}\n\nexport async function timeAuthSpan<T>(\n  span: AuthTimingSpan,\n  fn: () => Promise<T>\n): Promise<T> {\n  const started = performance.now();\n  try {\n    return await fn();\n  } finally {\n    currentAuthRequestTiming()?.addSpan(span, performance.now() - started);\n  }\n}\n\nexport async function timeAuthSql<T>(fn: () => Promise<T>): Promise<T> {\n  const started = performance.now();\n  try {\n    return await fn();\n  } finally {\n    const timing = currentAuthRequestTiming();\n    if (timing) {\n      timing.addSqlExec(performance.now() - started);\n      timing.addSqlCount(1);\n    }\n  }\n}\n\nexport function instrumentAuthStoreMethods<T extends object>(stores: T): T {\n  return new Proxy(stores, {\n    get(target, property, receiver) {\n      const value = Reflect.get(target, property, receiver) as unknown;\n      if (typeof value !== \"function\" || property === \"then\") {\n        return value;\n      }\n      return (...args: unknown[]) => {\n        const result = (value as (...inner: unknown[]) => unknown).apply(\n          target,\n          args\n        );\n        if (\n          result !== null &&\n          typeof result === \"object\" &&\n          \"then\" in result &&\n          typeof (result as Promise<unknown>).then === \"function\"\n        ) {\n          return timeAuthSql(() => result as Promise<unknown>);\n        }\n        return result;\n      };\n    },\n  }) as T;\n}\n\nexport const AUTH_TIMING_EXPOSE_HEADERS =\n  \"Server-Timing, X-Athena-Time, x-athena-trace-id, x-request-id\";\n\nexport function attachAuthTimingHeaders(\n  response: Response,\n  totalMs: number\n): Response {\n  const headers = new Headers(response.headers);\n  const timing = currentAuthRequestTiming();\n  headers.set(\n    \"Server-Timing\",\n    (timing ?? new AuthRequestTiming()).toServerTimingHeader(totalMs)\n  );\n  headers.set(\"X-Athena-Time\", `${Math.round(totalMs)}ms`);\n  const exposed = headers.get(\"Access-Control-Expose-Headers\");\n  if (exposed) {\n    if (!exposed.toLowerCase().includes(\"server-timing\")) {\n      headers.set(\n        \"Access-Control-Expose-Headers\",\n        `${exposed}, ${AUTH_TIMING_EXPOSE_HEADERS}`\n      );\n    }\n  } else {\n    headers.set(\"Access-Control-Expose-Headers\", AUTH_TIMING_EXPOSE_HEADERS);\n  }\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n}\n","import { PACKAGE_VERSION } from \"../../sdk-version.ts\";\nimport {\n  ATHENA_AUTH_REQUEST_ID_HEADER,\n  ATHENA_AUTH_TRACE_ID_HEADER,\n  type AthenaAuthErrorBody,\n} from \"../contract/index.ts\";\nimport { currentAuthRequestTiming } from \"./request-timing.ts\";\n\nexport class AthenaAuthRuntimeError extends Error {\n  readonly code?: string;\n  readonly publicMessage: string;\n  readonly status: number;\n\n  constructor(\n    status: number,\n    publicMessage: string,\n    options?: { cause?: unknown; code?: string; internalMessage?: string },\n  ) {\n    super(options?.internalMessage ?? publicMessage, { cause: options?.cause });\n    this.name = \"AthenaAuthRuntimeError\";\n    this.status = status;\n    this.publicMessage = publicMessage;\n    this.code = options?.code;\n  }\n\n  static badRequest(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(400, message);\n  }\n\n  static invalidCredentials(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Invalid credentials\");\n  }\n\n  static unauthenticated(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Authentication required\");\n  }\n\n  static sessionNotFound(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(401, \"Session not found or expired\");\n  }\n\n  static forbidden(\n    message = \"Insufficient permissions\",\n  ): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(403, message);\n  }\n\n  static notFound(message = \"Not found\"): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(404, message);\n  }\n\n  static conflict(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(409, message);\n  }\n\n  static rateLimited(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(429, \"Too many requests\");\n  }\n\n  static notImplemented(message: string): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(501, message);\n  }\n\n  static payloadTooLarge(): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(413, \"Request body too large\");\n  }\n\n  static internal(cause?: unknown): AthenaAuthRuntimeError {\n    return new AthenaAuthRuntimeError(500, \"Internal server error\", {\n      cause,\n      code: \"ATHENA_AUTH_INTERNAL\",\n      internalMessage:\n        cause instanceof Error ? cause.message : \"Internal server error\",\n    });\n  }\n}\n\nexport function createTraceId(): string {\n  return crypto.randomUUID();\n}\n\nexport function errorBody(\n  error: AthenaAuthRuntimeError,\n  traceId: string,\n  version = PACKAGE_VERSION,\n): AthenaAuthErrorBody {\n  const body: AthenaAuthErrorBody = {\n    message:\n      error.status >= 500 ? \"Internal server error\" : error.publicMessage,\n    traceId,\n    version,\n  };\n  if (error.code) {\n    body.code = error.code;\n  }\n  return body;\n}\n\nexport function jsonResponse(\n  status: number,\n  body: unknown,\n  headers?: HeadersInit,\n  traceId?: string,\n): Response {\n  const responseHeaders = new Headers(headers);\n  responseHeaders.set(\"content-type\", \"application/json; charset=utf-8\");\n  if (traceId) {\n    responseHeaders.set(ATHENA_AUTH_TRACE_ID_HEADER, traceId);\n    responseHeaders.set(ATHENA_AUTH_REQUEST_ID_HEADER, traceId);\n  }\n  const serializeStarted = performance.now();\n  const bodyText = JSON.stringify(body);\n  currentAuthRequestTiming()?.addSpan(\n    \"serialize\",\n    performance.now() - serializeStarted,\n  );\n  return new Response(bodyText, {\n    headers: responseHeaders,\n    status,\n  });\n}\n\nexport function errorResponse(\n  error: unknown,\n  traceId: string,\n  version = PACKAGE_VERSION,\n): Response {\n  const runtimeError =\n    error instanceof AthenaAuthRuntimeError\n      ? error\n      : AthenaAuthRuntimeError.internal(error);\n  if (runtimeError.status >= 500) {\n    console.error(\"[athena-auth]\", {\n      code: runtimeError.code ?? \"ATHENA_AUTH_INTERNAL\",\n      status: runtimeError.status,\n      traceId,\n      error: runtimeError.message,\n    });\n  }\n  return jsonResponse(\n    runtimeError.status,\n    errorBody(runtimeError, traceId, version),\n    undefined,\n    traceId,\n  );\n}\n","import {\n\ttype AthenaPostgresPool,\n\tcreatePostgresPool,\n\tpostgresPoolDiagnostics,\n} from \"../../postgres/driver.ts\";\nimport {\n\ttype AthenaPostgresRuntime,\n\tconnectPostgresPoolWithDeadline,\n} from \"../../postgres/owned-runtime.ts\";\nimport { assertNodePostgresRuntime } from \"../../postgres/runtime.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport { currentAuthRequestTiming } from \"./request-timing.ts\";\n\nexport type AuthDatabaseTimeoutPhase =\n\t| \"sql_acquire\"\n\t| \"sql_exec\"\n\t| \"transaction\";\n\nfunction isAuthJsDebugEnabled(): boolean {\n\tconst value = (\n\t\tglobalThis as { process?: { env?: Record<string, string | undefined> } }\n\t).process?.env?.ATHENA_JS_DEBUG;\n\treturn value === \"1\" || value === \"true\";\n}\n\nfunction logAuthDatabaseTimeout(phase: AuthDatabaseTimeoutPhase): void {\n\tif (!isAuthJsDebugEnabled()) {\n\t\treturn;\n\t}\n\tconst timing = currentAuthRequestTiming();\n\tconst snap = timing?.copy();\n\tconsole.warn(\"[athena-auth] ATHENA_AUTH_DATABASE_TIMEOUT\", {\n\t\tphase,\n\t\tpool: {\n\t\t\tidle: snap?.sqlPoolIdle ?? 0,\n\t\t\ttotal: snap?.sqlPoolTotal ?? 0,\n\t\t\twaiting: snap?.sqlPoolWaiting ?? 0,\n\t\t},\n\t\tsqlAcquireMs: snap?.sqlAcquireMs ?? 0,\n\t\tsqlExecMs: snap?.sqlExecMs ?? 0,\n\t\ttraceId: timing?.traceId() ?? null,\n\t});\n}\n\nexport const ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS = 15_000;\n\nexport interface AthenaAuthQueryResult<T = Record<string, unknown>> {\n\trowCount: number;\n\trows: T[];\n}\n\nexport interface AthenaAuthDatabase {\n\tclose?(): Promise<void>;\n\tquery<T = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaAuthQueryResult<T>>;\n\ttransaction<T>(fn: (db: AthenaAuthDatabase) => Promise<T>): Promise<T>;\n}\n\n/**\n * Normalize any driver-shaped query result into the Auth database contract.\n * Never let callers hit `undefined.rows` / `undefined.length`.\n */\nexport function assertQueryResult<T = Record<string, unknown>>(\n\tvalue: unknown,\n\tcontext: string,\n): AthenaAuthQueryResult<T> {\n\tif (Array.isArray(value)) {\n\t\treturn {\n\t\t\trowCount: value.length,\n\t\t\trows: value as T[],\n\t\t};\n\t}\n\n\tif (value === null || value === undefined || typeof value !== \"object\") {\n\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t500,\n\t\t\t[\n\t\t\t\t\"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n\t\t\t\t\"\",\n\t\t\t\t\"Embedded Auth database adapter returned an unexpected query result.\",\n\t\t\t\t\"\",\n\t\t\t\t`Context: ${context}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Run with:\",\n\t\t\t\t\"  ATHENA_JS_DEBUG=1 athena-js migrate\",\n\t\t\t].join(\"\\n\"),\n\t\t\t{ code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n\t\t);\n\t}\n\n\tconst record = value as Record<string, unknown>;\n\tconst rows = record.rows;\n\tif (!Array.isArray(rows)) {\n\t\tthrow new AthenaAuthRuntimeError(\n\t\t\t500,\n\t\t\t[\n\t\t\t\t\"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n\t\t\t\t\"\",\n\t\t\t\t\"Embedded Auth database adapter returned an invalid result while\",\n\t\t\t\t`${context}: expected result.rows to be an array.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Run with:\",\n\t\t\t\t\"  ATHENA_JS_DEBUG=1 athena-js migrate\",\n\t\t\t].join(\"\\n\"),\n\t\t\t{ code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n\t\t);\n\t}\n\n\tconst rawCount = record.rowCount;\n\tconst rowCount =\n\t\ttypeof rawCount === \"number\" && Number.isFinite(rawCount)\n\t\t\t? rawCount\n\t\t\t: rows.length;\n\n\treturn {\n\t\trowCount,\n\t\trows: rows as T[],\n\t};\n}\n\nfunction isDatabaseTimeoutError(error: unknown): boolean {\n\tif (\n\t\terror instanceof AthenaAuthRuntimeError &&\n\t\terror.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\"\n\t) {\n\t\treturn true;\n\t}\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; message?: unknown };\n\tif (record.code === \"ETIMEDOUT\" || record.code === \"57014\") {\n\t\treturn true;\n\t}\n\treturn (\n\t\ttypeof record.message === \"string\" &&\n\t\t/timeout exceeded|query_timeout|statement timeout|connection timeout/i.test(\n\t\t\trecord.message,\n\t\t)\n\t);\n}\n\nexport function authDatabaseTimeoutError(\n\tcause?: unknown,\n): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(\n\t\t504,\n\t\t[\n\t\t\t\"ATHENA_AUTH_DATABASE_TIMEOUT\",\n\t\t\t\"\",\n\t\t\t\"Embedded Auth could not complete a database operation before the timeout.\",\n\t\t].join(\"\\n\"),\n\t\t{ cause, code: \"ATHENA_AUTH_DATABASE_TIMEOUT\" },\n\t);\n}\n\nasync function withAuthDatabaseTimeout<T>(\n\toperation: () => Promise<T>,\n\ttimeoutMs: number,\n\tphase: AuthDatabaseTimeoutPhase,\n): Promise<T> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\toperation().then(\n\t\t\t\t(value) => value,\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tif (isDatabaseTimeoutError(error)) {\n\t\t\t\t\t\tlogAuthDatabaseTimeout(phase);\n\t\t\t\t\t\tthrow authDatabaseTimeoutError(error);\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t},\n\t\t\t),\n\t\t\tnew Promise<never>((_, reject) => {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tlogAuthDatabaseTimeout(phase);\n\t\t\t\t\treject(authDatabaseTimeoutError());\n\t\t\t\t}, timeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer !== undefined) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n}\n\nfunction recordSqlTiming(idleCount: number, elapsedMs: number): void {\n\tconst timing = currentAuthRequestTiming();\n\tif (!timing) {\n\t\treturn;\n\t}\n\tif (idleCount <= 0) {\n\t\ttiming.addSqlAcquire(elapsedMs);\n\t} else {\n\t\ttiming.addSqlExec(elapsedMs);\n\t}\n\ttiming.addSqlCount(1);\n}\n\nfunction normalizeDriverResult<T>(\n\tresult: unknown,\n\tcontext: string,\n): AthenaAuthQueryResult<T> {\n\treturn assertQueryResult<T>(result, context);\n}\n\nclass PoolDatabase implements AthenaAuthDatabase {\n\tconstructor(\n\t\tprivate readonly pool: AthenaPostgresPool,\n\t\tprivate readonly ownership: \"owned\" | \"borrowed\" = \"owned\",\n\t\tprivate readonly operationTimeoutMs = ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS,\n\t) { }\n\n\tclose = async (): Promise<void> => {\n\t\tif (this.ownership === \"borrowed\") {\n\t\t\treturn;\n\t\t}\n\t\tawait this.pool.end();\n\t};\n\n\tquery = async <T = Record<string, unknown>>(\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t): Promise<AthenaAuthQueryResult<T>> => {\n\t\tconst stats = postgresPoolDiagnostics(this.pool);\n\t\tcurrentAuthRequestTiming()?.setSqlPool(stats);\n\t\treturn withAuthDatabaseTimeout(\n\t\t\tasync () => {\n\t\t\t\tconst started = performance.now();\n\t\t\t\tconst result = await this.pool.query<T & Record<string, unknown>>(\n\t\t\t\t\ttext,\n\t\t\t\t\tvalues,\n\t\t\t\t);\n\t\t\t\trecordSqlTiming(stats.idleCount, performance.now() - started);\n\t\t\t\treturn normalizeDriverResult<T>(result, \"pool.query\");\n\t\t\t},\n\t\t\tthis.operationTimeoutMs,\n\t\t\tstats.idleCount <= 0 ? \"sql_acquire\" : \"sql_exec\",\n\t\t);\n\t};\n\n\ttransaction = async <T>(\n\t\tfn: (db: AthenaAuthDatabase) => Promise<T>,\n\t): Promise<T> => {\n\t\treturn withAuthDatabaseTimeout(\n\t\t\tasync () => {\n\t\t\t\tconst acquireStarted = performance.now();\n\t\t\t\tconst client = await connectPostgresPoolWithDeadline(\n\t\t\t\t\tthis.pool,\n\t\t\t\t\tthis.operationTimeoutMs,\n\t\t\t\t);\n\t\t\t\tcurrentAuthRequestTiming()?.addSqlAcquire(\n\t\t\t\t\tperformance.now() - acquireStarted,\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\t\tconst scoped: AthenaAuthDatabase = {\n\t\t\t\t\t\tquery: async <TRow = Record<string, unknown>>(\n\t\t\t\t\t\t\ttext: string,\n\t\t\t\t\t\t\tvalues?: unknown[],\n\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\tconst execStarted = performance.now();\n\t\t\t\t\t\t\tconst result = await client.query(text, values);\n\t\t\t\t\t\t\tconst timing = currentAuthRequestTiming();\n\t\t\t\t\t\t\tif (timing) {\n\t\t\t\t\t\t\t\ttiming.addSqlExec(performance.now() - execStarted);\n\t\t\t\t\t\t\t\ttiming.addSqlCount(1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalizeDriverResult<TRow>(\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t\t\"transaction.query\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttransaction: (inner) => inner(scoped),\n\t\t\t\t\t};\n\t\t\t\t\tconst value = await fn(scoped);\n\t\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\t\treturn value;\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignore rollback failure\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tclient.release();\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis.operationTimeoutMs,\n\t\t\t\"transaction\",\n\t\t);\n\t};\n}\n\nexport async function createPostgresAuthDatabase(\n\tconnectionString: string,\n): Promise<AthenaAuthDatabase> {\n\tassertNodePostgresRuntime();\n\tconst pool = await createPostgresPool(connectionString, {\n\t\tmax: 20,\n\t\tmin: 4,\n\t});\n\treturn new PoolDatabase(pool);\n}\n\nexport function createAuthDatabaseFromPool(\n\tpool: AthenaPostgresPool,\n): AthenaAuthDatabase {\n\treturn new PoolDatabase(pool, \"borrowed\");\n}\n\nexport const createPostgresAuthDatabaseFromPool = createAuthDatabaseFromPool;\n\nexport function createAuthDatabaseFromRuntime(\n\truntime: Pick<AthenaPostgresRuntime, \"inspectPool\" | \"query\" | \"transaction\">,\n\toptions?: { operationTimeoutMs?: number },\n): AthenaAuthDatabase {\n\tconst timeoutMs =\n\t\toptions?.operationTimeoutMs ?? ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS;\n\n\tconst adapter: AthenaAuthDatabase = {\n\t\tasync close() { },\n\t\tasync query(text, values) {\n\t\t\tconst stats = await runtime.inspectPool();\n\t\t\tcurrentAuthRequestTiming()?.setSqlPool(stats);\n\t\t\treturn withAuthDatabaseTimeout(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst started = performance.now();\n\t\t\t\t\tconst result = await runtime.query(text, values);\n\t\t\t\t\trecordSqlTiming(stats.idleCount, performance.now() - started);\n\t\t\t\t\treturn assertQueryResult(result, \"runtime.query\");\n\t\t\t\t},\n\t\t\t\ttimeoutMs,\n\t\t\t\tstats.idleCount <= 0 ? \"sql_acquire\" : \"sql_exec\",\n\t\t\t);\n\t\t},\n\t\tasync transaction(fn) {\n\t\t\treturn withAuthDatabaseTimeout(\n\t\t\t\t() =>\n\t\t\t\t\truntime.transaction(\n\t\t\t\t\t\tasync (tx) => fn(createAuthDatabaseFromRuntime(tx, options)),\n\t\t\t\t\t\t{ deadlineMs: timeoutMs },\n\t\t\t\t\t),\n\t\t\t\ttimeoutMs,\n\t\t\t\t\"transaction\",\n\t\t\t);\n\t\t},\n\t};\n\treturn adapter;\n}\n","/**\n * Node `createHash` without static `node:crypto` / `Buffer` references.\n * Keeps DTS/tsup builds green when `@types/node` is not on the type path\n * (Workers CI / athena-auth-ui local overlay builds).\n */\n\ntype HashLike = {\n  update(data: string | Uint8Array, encoding?: string): HashLike;\n  digest(encoding: \"hex\"): string;\n};\n\ntype NodeCryptoLike = {\n  createHash: (algorithm: string) => HashLike;\n};\n\nfunction loadNodeCrypto(): NodeCryptoLike {\n  const processLike = (\n    globalThis as {\n      process?: {\n        getBuiltinModule?: (id: string) => unknown;\n      };\n    }\n  ).process;\n\n  // Node 20.16+ / 22.12+: no import graph for DTS.\n  const fromBuiltin = processLike?.getBuiltinModule?.(\"crypto\") as\n    | NodeCryptoLike\n    | undefined;\n  if (typeof fromBuiltin?.createHash === \"function\") {\n    return fromBuiltin;\n  }\n\n  // Node 18 / older 20: CJS `require` when available (tsup CJS output, some loaders).\n  try {\n    const nodeRequire = Function(\n      \"return typeof require !== 'undefined' ? require : null\"\n    )() as ((id: string) => NodeCryptoLike) | null;\n    const fromRequire = nodeRequire?.(\"crypto\");\n    if (typeof fromRequire?.createHash === \"function\") {\n      return fromRequire;\n    }\n  } catch {\n    // fall through\n  }\n\n  throw new Error(\n    \"Node.js crypto.createHash is required (process.getBuiltinModule or require)\"\n  );\n}\n\nlet cached: NodeCryptoLike | undefined;\n\n/** SHA-256 hex digest of a UTF-8 string (Node crypto, sync). */\nexport function sha256HexUtf8(text: string): string {\n  cached ??= loadNodeCrypto();\n  return cached.createHash(\"sha256\").update(text, \"utf8\").digest(\"hex\");\n}\n","import { sha256HexUtf8 } from \"../node-crypto.ts\";\n\n/**\n * Deterministic SHA-256 checksum of exact UTF-8 migration SQL bytes.\n * No line-ending normalization — file content is hashed as authored.\n * Uses node-crypto helper (no static `node:crypto` import) so DTS stays green\n * without `@types/node` on the type path.\n */\nexport function checksumMigrationSql(sql: string): string {\n  return sha256HexUtf8(sql);\n}\n","import { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type { AuthMemberRow, AuthOrganizationRow, AuthSessionRow } from \"./models.ts\";\n\n/**\n * AUTH-ORG-CTX-001: a persisted session MUST NOT reference an organization\n * for which its user lacks membership.\n *\n * AUTH-ORG-CTX-002: any mutation that invalidates membership MUST clear the\n * matching active organization context in the same transaction (all sessions,\n * not a single token).\n */\n\nexport const FOUNDING_OWNER_REMOVE_FORBIDDEN =\n\t\"The founding owner cannot be removed from the organization\";\nexport const FOUNDING_OWNER_ROLE_LOCKED = \"The founding owner role is locked.\";\nexport const FOUNDING_OWNER_LEAVE_FORBIDDEN =\n\t\"The founding owner can't leave the organization.\";\nexport const LAST_MEMBER_LEAVE_FORBIDDEN =\n\t\"The last member can't leave the organization.\";\nexport const LAST_OWNER_LEAVE_FORBIDDEN =\n\t\"The sole owner can't leave the organization.\";\nexport const LAST_OWNER_REMOVE_FORBIDDEN =\n\t\"The sole owner can't be removed from the organization.\";\nexport const LAST_OWNER_ROLE_LOCKED =\n\t\"The sole owner role cannot be changed.\";\nexport const SELF_ELEVATION_FORBIDDEN =\n\t\"Members cannot assign themselves a higher role.\";\nexport const GRANT_HIGHER_ROLE_FORBIDDEN =\n\t\"Cannot assign a role above your own.\";\nexport const GRANT_OWNER_FORBIDDEN =\n\t\"Only organization owners can assign the owner role.\";\n\nfunction membershipRank(role: string): number {\n\tconst key = role.trim().toLowerCase();\n\tif (key === \"owner\" || key === \"organization_owner\") {\n\t\treturn 3;\n\t}\n\tif (key === \"admin\" || key === \"organization_admin\") {\n\t\treturn 2;\n\t}\n\tif (key === \"member\" || key === \"organization_member\") {\n\t\treturn 1;\n\t}\n\tif (key.startsWith(\"custom_\")) {\n\t\treturn 2;\n\t}\n\treturn 0;\n}\n\nexport function assertMemberRoleAssignmentAllowed(input: {\n\tactorCanAssignOwner: boolean;\n\tactorRole: string;\n\tactorUserId: string;\n\tnextRole: string;\n\ttargetRole: string;\n\ttargetUserId: string;\n}): void {\n\tconst nextRank = membershipRank(input.nextRole);\n\tconst actorRank = membershipRank(input.actorRole);\n\tif (\n\t\tinput.actorUserId === input.targetUserId &&\n\t\tnextRank > membershipRank(input.targetRole)\n\t) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(SELF_ELEVATION_FORBIDDEN);\n\t}\n\tif (nextRank > actorRank) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(GRANT_HIGHER_ROLE_FORBIDDEN);\n\t}\n\tif (nextRank >= 3 && !input.actorCanAssignOwner) {\n\t\tthrow AthenaAuthRuntimeError.forbidden(GRANT_OWNER_FORBIDDEN);\n\t}\n}\n\nexport function resolveFoundingOwnerUserId(\n\torganization: Pick<AuthOrganizationRow, \"created_by_user_id\"> | undefined,\n\tmembers: readonly AuthMemberRow[],\n): string | null {\n\tconst stored =\n\t\ttypeof organization?.created_by_user_id === \"string\"\n\t\t\t? organization.created_by_user_id.trim()\n\t\t\t: \"\";\n\tif (stored.length > 0) {\n\t\treturn stored;\n\t}\n\tconst owners = members\n\t\t.filter((member) => member.role === \"owner\")\n\t\t.slice()\n\t\t.sort((left, right) => {\n\t\t\tconst byTime =\n\t\t\t\tnew Date(left.created_at).getTime() - new Date(right.created_at).getTime();\n\t\t\tif (byTime !== 0) {\n\t\t\t\treturn byTime;\n\t\t\t}\n\t\t\treturn left.id.localeCompare(right.id);\n\t\t});\n\treturn owners[0]?.user_id ?? null;\n}\n\nexport function assertFoundingOwnerMutationAllowed(input: {\n\tkind: \"leave\" | \"remove\" | \"role\";\n\tmembers: readonly AuthMemberRow[];\n\tnextRole?: string;\n\torganization: AuthOrganizationRow | undefined;\n\ttargetUserId: string;\n}): void {\n\tif (input.kind === \"role\" && input.nextRole === \"owner\") {\n\t\treturn;\n\t}\n\tconst founderId = resolveFoundingOwnerUserId(\n\t\tinput.organization,\n\t\tinput.members,\n\t);\n\tif (founderId !== input.targetUserId) {\n\t\treturn;\n\t}\n\tif (input.kind === \"leave\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_LEAVE_FORBIDDEN);\n\t}\n\tif (input.kind === \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_ROLE_LOCKED);\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport function assertLastOwnerMutationAllowed(input: {\n\tkind: \"leave\" | \"remove\" | \"role\";\n\tmembers: readonly AuthMemberRow[];\n\tnextRole?: string;\n\ttargetUserId: string;\n}): void {\n\tif (input.members.length <= 1 && input.kind !== \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_MEMBER_LEAVE_FORBIDDEN);\n\t}\n\tconst owners = input.members.filter((member) => member.role === \"owner\");\n\tconst target = input.members.find(\n\t\t(member) => member.user_id === input.targetUserId,\n\t);\n\tif (!target || target.role !== \"owner\") {\n\t\treturn;\n\t}\n\tif (owners.length > 1) {\n\t\treturn;\n\t}\n\tif (input.kind === \"role\" && input.nextRole === \"owner\") {\n\t\treturn;\n\t}\n\tif (input.kind === \"leave\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_LEAVE_FORBIDDEN);\n\t}\n\tif (input.kind === \"role\") {\n\t\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_ROLE_LOCKED);\n\t}\n\tthrow AthenaAuthRuntimeError.forbidden(LAST_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport async function normalizeSessionActiveOrganization(\n\tsession: AuthSessionRow,\n\tstores: {\n\t\tgetMember(\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t): Promise<AuthMemberRow | undefined>;\n\t\tsetSessionActiveOrganization(\n\t\t\ttoken: string,\n\t\t\torganizationId: string | null,\n\t\t): Promise<void>;\n\t},\n): Promise<AuthSessionRow> {\n\tconst organizationId = session.active_organization_id;\n\tif (!organizationId) {\n\t\treturn session;\n\t}\n\tconst membership = await stores.getMember(organizationId, session.user_id);\n\tif (membership) {\n\t\treturn session;\n\t}\n\tawait stores.setSessionActiveOrganization(session.token, null);\n\treturn {\n\t\t...session,\n\t\tactive_organization_id: null,\n\t};\n}\n","import type { AthenaRightKey } from \"./key.ts\";\n\nfunction splitOnce(value: string): [string, string] | undefined {\n\tconst index = value.indexOf(\".\");\n\tif (index < 0) {\n\t\treturn undefined;\n\t}\n\treturn [value.slice(0, index), value.slice(index + 1)];\n}\n\n/**\n * Exact parity with `crates/athena-rights/src/matching.rs` `right_matches`.\n * Adapters must parse before calling; unparsed strings are not accepted.\n */\nexport function rightMatches(\n\tgranted: AthenaRightKey,\n\trequired: AthenaRightKey,\n): boolean {\n\tif (granted === \"*\" || granted === required) {\n\t\treturn true;\n\t}\n\n\tconst grantedParts = splitOnce(granted);\n\tif (grantedParts === undefined) {\n\t\treturn false;\n\t}\n\tconst requiredParts = splitOnce(required);\n\tif (requiredParts === undefined) {\n\t\treturn false;\n\t}\n\n\tconst [grantedResource, grantedAction] = grantedParts;\n\tconst [requiredResource, requiredAction] = requiredParts;\n\n\tif (grantedResource === \"*\" && grantedAction === requiredAction) {\n\t\treturn true;\n\t}\n\tif (grantedResource === requiredResource && grantedAction === \"*\") {\n\t\treturn true;\n\t}\n\tif (grantedResource === \"gateway\" && grantedAction === requiredAction) {\n\t\treturn true;\n\t}\n\tif (grantedResource === \"gateway\" && grantedAction === \"*\") {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function missingRequiredRights(\n\tgranted: readonly AthenaRightKey[],\n\trequired: readonly AthenaRightKey[],\n): AthenaRightKey[] {\n\treturn required.filter(\n\t\t(requiredKey) =>\n\t\t\t!granted.some((grantedKey) => rightMatches(grantedKey, requiredKey)),\n\t);\n}\n","export const ATHENA_BILLING_HTTP_ERROR = \"ATHENA_BILLING_HTTP_ERROR\" as const;\n\nexport class AthenaBillingError extends Error {\n\tbody: unknown;\n\tcode: string;\n\tendpoint: string;\n\tmethod: string;\n\tstatus: number;\n\n\tconstructor(input: {\n\t\tbody: unknown;\n\t\tcode?: string;\n\t\tendpoint: string;\n\t\tmessage: string;\n\t\tmethod: string;\n\t\tstatus: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingError\";\n\t\tthis.body = input.body;\n\t\tthis.code = input.code ?? ATHENA_BILLING_HTTP_ERROR;\n\t\tthis.endpoint = input.endpoint;\n\t\tthis.method = input.method;\n\t\tthis.status = input.status;\n\t}\n}\n\nexport const ATHENA_BILLING_OPERATION_UNAVAILABLE =\n\t\"ATHENA_BILLING_OPERATION_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_AUTHORIZATION_DENIED =\n\t\"ATHENA_BILLING_AUTHORIZATION_DENIED\" as const;\n\nexport const ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED =\n\t\"ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_CONFIGURED =\n\t\"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_REGISTERED =\n\t\"ATHENA_BILLING_PROVIDER_NOT_REGISTERED\" as const;\n\nexport const ATHENA_BILLING_TARGET_AMBIGUOUS =\n\t\"ATHENA_BILLING_TARGET_AMBIGUOUS\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_CONFIG_INVALID =\n\t\"ATHENA_BILLING_PROVIDER_CONFIG_INVALID\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SERVER_REQUIRED =\n\t\"ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SDK_REQUIRED =\n\t\"ATHENA_BILLING_PROVIDER_SDK_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_CONFIG_CONFLICT =\n\"ATHENA_BILLING_CONFIG_CONFLICT\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_UNAVAILABLE =\n\t\"ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH =\n\t\"ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_INVALID =\n\t\"ATHENA_BILLING_CREDENTIAL_INVALID\" as const;\n\nexport type AthenaBillingProviderErrorCode =\n\t| typeof ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\n\t| typeof ATHENA_BILLING_PROVIDER_NOT_REGISTERED\n\t| typeof ATHENA_BILLING_TARGET_AMBIGUOUS\n\t| typeof ATHENA_BILLING_PROVIDER_CONFIG_INVALID\n\t| typeof ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\n\t| typeof ATHENA_BILLING_PROVIDER_SDK_REQUIRED\n\t| typeof ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\n\t| typeof ATHENA_BILLING_CONFIG_CONFLICT;\n\nexport type BillingProviderErrorKind =\n\t| \"authentication\"\n\t| \"authorization\"\n\t| \"invalid_request\"\n\t| \"not_found\"\n\t| \"conflict\"\n\t| \"idempotency_conflict\"\n\t| \"rate_limited\"\n\t| \"provider_unavailable\"\n\t| \"network\"\n\t| \"timeout\"\n\t| \"signature_invalid\"\n\t| \"unsupported_operation\"\n\t| \"unsupported_currency\"\n\t| \"unsupported_payment_method\"\n\t| \"customer_action_required\"\n\t| \"payment_declined\"\n\t| \"resource_state_conflict\"\n\t| \"serialization\"\n\t| \"unknown\";\n\nexport type BillingRetryDisposition =\n\t| \"never\"\n\t| \"safe\"\n\t| \"reconcile_first\"\n\t| \"customer_action_required\";\n\nexport type AthenaBillingCredentialErrorCode =\n\t| typeof ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\n\t| typeof ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\n\t| typeof ATHENA_BILLING_CREDENTIAL_INVALID;\n\nexport class AthenaBillingCredentialError extends Error {\n\treadonly provider: string;\n\treadonly environment: \"test\" | \"live\";\n\treadonly code: AthenaBillingCredentialErrorCode;\n\n\tconstructor(input: {\n\t\tcode: AthenaBillingCredentialErrorCode;\n\t\tmessage: string;\n\t\tprovider: string;\n\t\tenvironment: \"test\" | \"live\";\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingCredentialError\";\n\t\tthis.code = input.code;\n\t\tthis.provider = input.provider;\n\t\tthis.environment = input.environment;\n\t}\n}\n\nexport function isAthenaBillingCredentialError(\n\terror: unknown,\n): error is AthenaBillingCredentialError {\n\treturn error instanceof AthenaBillingCredentialError;\n}\n\nexport class AthenaBillingProviderError extends Error {\n\treadonly code: AthenaBillingProviderErrorCode;\n\n\tconstructor(input: {\n\t\tcode: AthenaBillingProviderErrorCode;\n\t\tmessage: string;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingProviderError\";\n\t\tthis.code = input.code;\n\t}\n}\n\nexport function isAthenaBillingProviderError(\n\terror: unknown,\n): error is AthenaBillingProviderError {\n\treturn error instanceof AthenaBillingProviderError;\n}\n\nexport type AthenaBillingCapabilityErrorCode =\n\ttypeof ATHENA_BILLING_OPERATION_UNAVAILABLE;\n\nexport class AthenaBillingAuthorizationError extends AthenaBillingError {\n\treadonly errorNumber: number;\n\treadonly missing: readonly string[];\n\treadonly operation: string;\n\n\tconstructor(input: {\n\t\tmissing: readonly string[];\n\t\toperation: string;\n\t}) {\n\t\tsuper({\n\t\t\tbody: { missing: input.missing, operation: input.operation },\n\t\t\tcode: ATHENA_BILLING_AUTHORIZATION_DENIED,\n\t\t\tendpoint: \"\",\n\t\t\tmessage:\n\t\t\t\tinput.missing.length === 0\n\t\t\t\t\t? `Billing operation ${input.operation} denied (no subject binding)`\n\t\t\t\t\t: `Billing operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: 403,\n\t\t});\n\t\tthis.name = \"AthenaBillingAuthorizationError\";\n\t\tthis.errorNumber = 4014;\n\t\tthis.missing = input.missing;\n\t\tthis.operation = input.operation;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaBillingAuthorizationError(\n\terror: unknown,\n): error is AthenaBillingAuthorizationError {\n\tif (error instanceof AthenaBillingAuthorizationError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === ATHENA_BILLING_AUTHORIZATION_DENIED &&\n\t\terror.errorNumber === 4014 &&\n\t\ttypeof error.operation === \"string\" &&\n\t\tArray.isArray(error.missing)\n\t);\n}\n\nexport class AthenaBillingCapabilityError extends Error {\n\treadonly code: AthenaBillingCapabilityErrorCode;\n\treadonly operation: string;\n\treadonly reason: string;\n\n\tconstructor(input: {\n\t\tmessage?: string;\n\t\toperation: string;\n\t\treason: string;\n\t}) {\n\t\tsuper(\n\t\t\tinput.message ??\n\t\t\t\t`Billing operation ${input.operation} is unavailable (${input.reason})`,\n\t\t);\n\t\tthis.name = \"AthenaBillingCapabilityError\";\n\t\tthis.code = ATHENA_BILLING_OPERATION_UNAVAILABLE;\n\t\tthis.operation = input.operation;\n\t\tthis.reason = input.reason;\n\t}\n}\n\nexport function isAthenaBillingCapabilityError(\n\terror: unknown,\n): error is AthenaBillingCapabilityError {\n\tif (error instanceof AthenaBillingCapabilityError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === ATHENA_BILLING_OPERATION_UNAVAILABLE &&\n\t\ttypeof error.operation === \"string\" &&\n\t\ttypeof error.reason === \"string\"\n\t);\n}\n\nexport class AthenaBillingProviderRequestError extends Error {\n\treadonly provider: string;\n\treadonly kind: BillingProviderErrorKind;\n\treadonly retry: BillingRetryDisposition;\n\treadonly operation?: string;\n\treadonly status?: number;\n\treadonly details?: unknown;\n\n\tconstructor(input: {\n\t\tmessage: string;\n\t\tprovider: string;\n\t\tkind: BillingProviderErrorKind;\n\t\tretry: BillingRetryDisposition;\n\t\toperation?: string;\n\t\tstatus?: number;\n\t\tdetails?: unknown;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingProviderRequestError\";\n\t\tthis.provider = input.provider;\n\t\tthis.kind = input.kind;\n\t\tthis.retry = input.retry;\n\t\tthis.operation = input.operation;\n\t\tthis.status = input.status;\n\t\tthis.details = input.details;\n\t}\n\n\ttoJSON(): Record<string, unknown> {\n\t\treturn {\n\t\t\tdetails: this.details,\n\t\t\tkind: this.kind,\n\t\t\tmessage: this.message,\n\t\t\tname: this.name,\n\t\t\toperation: this.operation,\n\t\t\tprovider: this.provider,\n\t\t\tretry: this.retry,\n\t\t\tstatus: this.status,\n\t\t};\n\t}\n}\n\nexport function isAthenaBillingProviderRequestError(\n\terror: unknown,\n): error is AthenaBillingProviderRequestError {\n\treturn error instanceof AthenaBillingProviderRequestError;\n}\n\nexport function billingProviderErrorKindFromHttp(input: {\n\tstatus?: number;\n\tkey?: string;\n\tdetail?: string;\n}): BillingProviderErrorKind {\n\tconst key = input.key?.trim().toLowerCase();\n\tif (key === \"authentication\" || key === \"unauthorized\") {\n\t\treturn \"authentication\";\n\t}\n\tif (key === \"forbidden\") {\n\t\treturn \"authorization\";\n\t}\n\tif (key === \"not_found\") {\n\t\treturn \"not_found\";\n\t}\n\tif (key === \"conflict\") {\n\t\treturn \"conflict\";\n\t}\n\tif (key === \"idempotency_conflict\") {\n\t\treturn \"idempotency_conflict\";\n\t}\n\tif (key === \"rate_limited\") {\n\t\treturn \"rate_limited\";\n\t}\n\tif (key === \"validation_error\" || key === \"unprocessable_entity\") {\n\t\treturn \"invalid_request\";\n\t}\n\tif (key === \"payment_declined\") {\n\t\treturn \"payment_declined\";\n\t}\n\tif (key === \"customer_action_required\") {\n\t\treturn \"customer_action_required\";\n\t}\n\tif (input.status === 401) {\n\t\treturn \"authentication\";\n\t}\n\tif (input.status === 403) {\n\t\treturn \"authorization\";\n\t}\n\tif (input.status === 404) {\n\t\treturn \"not_found\";\n\t}\n\tif (input.status === 409) {\n\t\treturn \"conflict\";\n\t}\n\tif (input.status === 422) {\n\t\treturn \"invalid_request\";\n\t}\n\tif (input.status === 429) {\n\t\treturn \"rate_limited\";\n\t}\n\tif (input.status != null && input.status >= 500 && input.status <= 599) {\n\t\treturn \"provider_unavailable\";\n\t}\n\tconst detail = (input.detail ?? \"\").toLowerCase();\n\tif (detail.includes(\"timeout\")) {\n\t\treturn \"timeout\";\n\t}\n\tif (detail.includes(\"declined\")) {\n\t\treturn \"payment_declined\";\n\t}\n\treturn \"unknown\";\n}\n","export const PROCESS_INVOCATION_BRAND =\n\t\"athena.billing.invocation.process\" as const;\n\nexport type BillingProcessInvocationAuthority = {\n\treadonly brand: typeof PROCESS_INVOCATION_BRAND;\n\treadonly kind: \"process\";\n};\n\nexport type BillingSessionInvocationAuthority = {\n\treadonly kind: \"session\";\n};\n\nexport type BillingInvocationAuthority =\n\t| BillingProcessInvocationAuthority\n\t| BillingSessionInvocationAuthority;\n\nexport const PROCESS_BILLING_INVOCATION: BillingProcessInvocationAuthority =\n\tObject.freeze({\n\t\tbrand: PROCESS_INVOCATION_BRAND,\n\t\tkind: \"process\",\n\t});\n\nexport const SESSION_BILLING_INVOCATION: BillingSessionInvocationAuthority =\n\tObject.freeze({\n\t\tkind: \"session\",\n\t});\n\nexport function isProcessBillingInvocation(\n\tauthority: BillingInvocationAuthority | { readonly kind?: string } | undefined,\n): authority is BillingProcessInvocationAuthority {\n\treturn (\n\t\tauthority != null &&\n\t\tauthority.kind === \"process\" &&\n\t\t\"brand\" in authority &&\n\t\t(authority as BillingProcessInvocationAuthority).brand ===\n\t\t\tPROCESS_INVOCATION_BRAND\n\t);\n}\n\n/**\n * Process invocation is sealed. `{ kind: \"process\" }` without the brand is\n * ignored. Omitted authority is session (least privilege). Operator Node\n * runtimes must pass `PROCESS_BILLING_INVOCATION` explicitly.\n */\nexport function resolveBillingInvocationAuthority(input: {\n\tauthority?: BillingInvocationAuthority | { readonly kind?: string };\n}): BillingInvocationAuthority {\n\tif (isProcessBillingInvocation(input.authority)) {\n\t\treturn PROCESS_BILLING_INVOCATION;\n\t}\n\treturn SESSION_BILLING_INVOCATION;\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingAuthorizationError } from \"../errors.ts\";\nimport type {\n\tBillingOperation,\n\tBillingOperationCapability,\n} from \"./capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"./invocation-authority.ts\";\nimport {\n\tisProcessBillingInvocation,\n\tSESSION_BILLING_INVOCATION,\n} from \"./invocation-authority.ts\";\n\nconst CATALOG_READ = parseAthenaRightKey(\"billing.catalog.read\");\nconst PAYMENTS_READ = parseAthenaRightKey(\"billing.payments.read\");\nconst PAYMENTS_WRITE = parseAthenaRightKey(\"billing.payments.write\");\nconst CUSTOMERS_READ = parseAthenaRightKey(\"billing.customers.read\");\nconst CUSTOMERS_WRITE = parseAthenaRightKey(\"billing.customers.write\");\nconst REFUNDS_READ = parseAthenaRightKey(\"billing.refunds.read\");\nconst REFUNDS_WRITE = parseAthenaRightKey(\"billing.refunds.write\");\nconst SUBSCRIPTIONS_READ = parseAthenaRightKey(\"billing.subscriptions.read\");\nconst SUBSCRIPTIONS_WRITE = parseAthenaRightKey(\"billing.subscriptions.write\");\nconst PAYMENT_LINKS_READ = parseAthenaRightKey(\"billing.payment-links.read\");\nconst PAYMENT_LINKS_WRITE = parseAthenaRightKey(\"billing.payment-links.write\");\nconst SALES_INVOICES_READ = parseAthenaRightKey(\"billing.sales-invoices.read\");\nconst WEBHOOKS_READ = parseAthenaRightKey(\"billing.webhooks.read\");\nconst WEBHOOKS_WRITE = parseAthenaRightKey(\"billing.webhooks.write\");\nconst SELF_INVOICES_READ = parseAthenaRightKey(\"billing.self.invoices.read\");\nconst SELF_PAYMENTS_READ = parseAthenaRightKey(\"billing.self.payments.read\");\nconst SELF_SUBSCRIPTION_READ = parseAthenaRightKey(\n\t\"billing.self.subscription.read\",\n);\nconst SELF_SUBSCRIPTION_WRITE = parseAthenaRightKey(\n\t\"billing.self.subscription.write\",\n);\nconst SELF_CHECKOUT_WRITE = parseAthenaRightKey(\"billing.self.checkout.write\");\nconst ADMIN_RECONCILIATION_WRITE = parseAthenaRightKey(\n\t\"billing.admin.reconciliation.write\",\n);\nconst ADMIN_WEBHOOKS_READ = parseAthenaRightKey(\"billing.admin.webhooks.read\");\nconst ADMIN_WEBHOOKS_WRITE = parseAthenaRightKey(\"billing.admin.webhooks.write\");\nconst ADMIN_INGESTION_READ = parseAthenaRightKey(\"billing.admin.ingestion.read\");\nconst ADMIN_CONFLICTS_WRITE = parseAthenaRightKey(\n\t\"billing.admin.conflicts.write\",\n);\n\n/** Process-owned overlay Rights — dialect execute keys, not grant-catalog. */\nexport const BILLING_DIALECT_RIGHTS: readonly AthenaRightKey[] = Object.freeze([\n\tCATALOG_READ,\n\tPAYMENTS_READ,\n\tPAYMENTS_WRITE,\n\tCUSTOMERS_READ,\n\tCUSTOMERS_WRITE,\n\tREFUNDS_READ,\n\tREFUNDS_WRITE,\n\tSUBSCRIPTIONS_READ,\n\tSUBSCRIPTIONS_WRITE,\n\tPAYMENT_LINKS_READ,\n\tPAYMENT_LINKS_WRITE,\n\tSALES_INVOICES_READ,\n\tWEBHOOKS_READ,\n\tWEBHOOKS_WRITE,\n\tSELF_INVOICES_READ,\n\tSELF_PAYMENTS_READ,\n\tSELF_SUBSCRIPTION_READ,\n\tSELF_SUBSCRIPTION_WRITE,\n\tSELF_CHECKOUT_WRITE,\n\tADMIN_RECONCILIATION_WRITE,\n\tADMIN_WEBHOOKS_READ,\n\tADMIN_WEBHOOKS_WRITE,\n\tADMIN_INGESTION_READ,\n\tADMIN_CONFLICTS_WRITE,\n]);\n\n/** In-process dialect Rights bag. Not an HTTP identity and not detected by userId. */\nexport const PROCESS_OWNED_BILLING_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: BILLING_DIALECT_RIGHTS,\n\tuserId: \"athena.billing.process\",\n};\n\n/**\n * Catalog reads do not require a provider-subject binding. Everything else\n * is operator-only until an Athena billing subject is bound.\n */\nconst BILLING_UNBOUND_SESSION_OPERATIONS = new Set<BillingOperation>([\n\t\"prices.list\",\n\t\"products.list\",\n\t\"self.invoices.list\",\n\t\"self.invoices.get\",\n\t\"self.payments.list\",\n\t\"self.payments.get\",\n\t\"self.subscription.get\",\n\t\"self.subscription.cancel\",\n\t\"self.subscription.enroll\",\n\t\"self.checkout.create\",\n\t\"self.checkout.resume\",\n]);\n\nexport function isProcessOwnedBillingPrincipal(\n\tprincipal: AthenaPrincipal,\n): boolean {\n\treturn principal === PROCESS_OWNED_BILLING_PRINCIPAL;\n}\n\nexport const BILLING_OPERATION_RIGHTS: Record<\n\tBillingOperation,\n\treadonly AthenaRightKey[]\n> = {\n\t\"customers.create\": [CUSTOMERS_WRITE],\n\t\"customers.delete\": [CUSTOMERS_WRITE],\n\t\"customers.get\": [CUSTOMERS_READ],\n\t\"customers.list\": [CUSTOMERS_READ],\n\t\"customers.update\": [CUSTOMERS_WRITE],\n\t\"invoices.get\": [SALES_INVOICES_READ],\n\t\"invoices.list\": [SALES_INVOICES_READ],\n\t\"paymentLinks.create\": [PAYMENT_LINKS_WRITE],\n\t\"paymentLinks.delete\": [PAYMENT_LINKS_WRITE],\n\t\"paymentLinks.get\": [PAYMENT_LINKS_READ],\n\t\"paymentLinks.list\": [PAYMENT_LINKS_READ],\n\t\"paymentLinks.update\": [PAYMENT_LINKS_WRITE],\n\t\"payments.cancel\": [PAYMENTS_WRITE],\n\t\"payments.create\": [PAYMENTS_WRITE],\n\t\"payments.get\": [PAYMENTS_READ],\n\t\"payments.list\": [PAYMENTS_READ],\n\t\"refunds.cancel\": [REFUNDS_WRITE],\n\t\"refunds.create\": [REFUNDS_WRITE],\n\t\"refunds.get\": [REFUNDS_READ],\n\t\"refunds.list\": [REFUNDS_READ],\n\t\"subscriptions.cancel\": [SUBSCRIPTIONS_WRITE],\n\t\"subscriptions.create\": [SUBSCRIPTIONS_WRITE],\n\t\"subscriptions.get\": [SUBSCRIPTIONS_READ],\n\t\"subscriptions.list\": [SUBSCRIPTIONS_READ],\n\t\"subscriptions.update\": [SUBSCRIPTIONS_WRITE],\n\t\"webhooks.create\": [WEBHOOKS_WRITE],\n\t\"webhooks.delete\": [WEBHOOKS_WRITE],\n\t\"webhooks.get\": [WEBHOOKS_READ],\n\t\"webhooks.list\": [WEBHOOKS_READ],\n\t\"webhooks.test\": [WEBHOOKS_WRITE],\n\t\"webhooks.update\": [WEBHOOKS_WRITE],\n\t\"products.list\": [CATALOG_READ],\n\t\"prices.list\": [CATALOG_READ],\n\t\"checkout.create\": [PAYMENTS_WRITE],\n\t\"self.invoices.list\": [SELF_INVOICES_READ],\n\t\"self.invoices.get\": [SELF_INVOICES_READ],\n\t\"self.payments.list\": [SELF_PAYMENTS_READ],\n\t\"self.payments.get\": [SELF_PAYMENTS_READ],\n\t\"self.subscription.get\": [SELF_SUBSCRIPTION_READ],\n\t\"self.subscription.cancel\": [SELF_SUBSCRIPTION_WRITE],\n\t\"self.subscription.enroll\": [SELF_SUBSCRIPTION_WRITE],\n\t\"self.checkout.create\": [SELF_CHECKOUT_WRITE],\n\t\"self.checkout.resume\": [SELF_CHECKOUT_WRITE],\n\t\"admin.connections.materialize\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.conflicts.resolve\": [ADMIN_CONFLICTS_WRITE],\n\t\"admin.ingestion.health\": [ADMIN_INGESTION_READ],\n\t\"admin.reconciliation.retry\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.reconciliation.run\": [ADMIN_RECONCILIATION_WRITE],\n\t\"admin.webhooks.reconcile\": [ADMIN_WEBHOOKS_WRITE],\n\t\"admin.webhooks.status\": [ADMIN_WEBHOOKS_READ],\n\t\"admin.webhooks.verify\": [ADMIN_WEBHOOKS_WRITE],\n};\n\nexport function requiredBillingRights(\n\toperation: BillingOperation,\n): readonly AthenaRightKey[] {\n\treturn BILLING_OPERATION_RIGHTS[operation];\n}\n\n/**\n * Rights gate for local Billing. Grants are never consulted.\n * Returns a deny error, or undefined when the principal holds the Rights.\n */\nexport function authorizeBillingOperation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n): AthenaBillingAuthorizationError | undefined {\n\tconst required = requiredBillingRights(operation);\n\tconst missing = missingRequiredRights(principal.rights, required);\n\tif (missing.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn new AthenaBillingAuthorizationError({\n\t\tmissing,\n\t\toperation,\n\t});\n}\n\n/**\n * Session principals cannot run merchant-wide Billing. Process invocation\n * authority is the operator path — never a forgeable principal userId.\n */\nexport function authorizeBillingSubjectBinding(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation | string,\n\tauthority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION,\n): AthenaBillingAuthorizationError | undefined {\n\tvoid principal;\n\tif (isProcessBillingInvocation(authority)) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof operation === \"string\" &&\n\t\tBILLING_UNBOUND_SESSION_OPERATIONS.has(operation as BillingOperation)\n\t) {\n\t\treturn undefined;\n\t}\n\tif (typeof operation === \"string\" && operation.startsWith(\"self.\")) {\n\t\treturn undefined;\n\t}\n\treturn new AthenaBillingAuthorizationError({\n\t\tmissing: [],\n\t\toperation,\n\t});\n}\n\nexport function denyBillingInvocation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n\tauthority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION,\n): AthenaBillingAuthorizationError | undefined {\n\tif (isProcessBillingInvocation(authority)) {\n\t\treturn authorizeBillingOperation(principal, operation);\n\t}\n\treturn (\n\t\tauthorizeBillingOperation(principal, operation) ??\n\t\tauthorizeBillingSubjectBinding(principal, operation, authority)\n\t);\n}\n\nexport function callerEffectiveBillingCapability(input: {\n\tauthority?: BillingInvocationAuthority;\n\tcapability: BillingOperationCapability;\n\toperation: BillingOperation;\n\tprincipal: AthenaPrincipal;\n}): BillingOperationCapability {\n\tif (input.capability.available !== true) {\n\t\treturn input.capability;\n\t}\n\tconst authority = input.authority ?? SESSION_BILLING_INVOCATION;\n\tconst denied = denyBillingInvocation(\n\t\tinput.principal,\n\t\tinput.operation,\n\t\tauthority,\n\t);\n\tif (denied == null) {\n\t\treturn input.capability;\n\t}\n\tconst sessionMerchant =\n\t\tauthority.kind === \"session\" &&\n\t\t!BILLING_UNBOUND_SESSION_OPERATIONS.has(input.operation);\n\treturn {\n\t\tavailable: false,\n\t\treason: sessionMerchant ? \"operator_only\" : \"missing_permission\",\n\t};\n}\n","/**\n * Transport/provider/runtime input to Error Classification.\n *\n * Failure IR deliberately contains occurrence facts only. It cannot carry\n * canonical error numbers, retry policy, or domain meaning.\n */\nexport interface AthenaFailureBase {\n\treadonly cause?: unknown;\n\treadonly code?: string;\n\treadonly details?: unknown;\n\treadonly message?: string;\n\treadonly status?: number;\n}\n\nexport interface AthenaHttpFailureIR extends AthenaFailureBase {\n\treadonly source: \"http\";\n}\n\nexport interface AthenaProviderFailureIR extends AthenaFailureBase {\n\treadonly provider?: string;\n\treadonly providerCode?: string;\n\treadonly source: \"provider\";\n}\n\nexport interface AthenaRuntimeFailureIR extends AthenaFailureBase {\n\treadonly reason?: string;\n\treadonly source: \"runtime\";\n}\n\nexport type AthenaFailureIR =\n\t| AthenaHttpFailureIR\n\t| AthenaProviderFailureIR\n\t| AthenaRuntimeFailureIR;\n\nexport function failureFromUnknown(\n\tsource: AthenaFailureIR[\"source\"],\n\terror: unknown,\n\tinput: Omit<Partial<AthenaFailureIR>, \"source\"> = {},\n): AthenaFailureIR {\n\tconst fromOccurrence = occurrenceFields(error);\n\treturn {\n\t\t...fromOccurrence,\n\t\t...input,\n\t\tcause: input.cause ?? error,\n\t\tmessage: input.message ?? messageFromUnknown(error),\n\t\tsource,\n\t} as AthenaFailureIR;\n}\n\nfunction occurrenceFields(\n\terror: unknown,\n): Omit<Partial<AthenaFailureIR>, \"source\"> {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn {};\n\t}\n\tconst record = error as {\n\t\tcode?: unknown;\n\t\tdetails?: unknown;\n\t\tstatus?: unknown;\n\t};\n\treturn {\n\t\t...(typeof record.code === \"string\" && record.code.length > 0\n\t\t\t? { code: record.code }\n\t\t\t: {}),\n\t\t...(record.details !== undefined ? { details: record.details } : {}),\n\t\t...(typeof record.status === \"number\" ? { status: record.status } : {}),\n\t};\n}\n\nexport function messageFromUnknown(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nexport function failureRecord(\n\tfailure: AthenaFailureIR,\n): Record<string, unknown> {\n\treturn failure as unknown as Record<string, unknown>;\n}\n","/**\n * PostgreSQL provider facts → Data catalog code (one class per SQLSTATE family).\n * SQLSTATE is never a public code.\n */\nconst SQLSTATE = /^[0-9A-Z]{5}$/;\n\nexport type AthenaDataErrorCode =\n\t| \"data_backend_unavailable\"\n\t| \"data_column_not_found\"\n\t| \"data_conflict\"\n\t| \"data_constraint_violation\"\n\t| \"data_execution_failed\"\n\t| \"data_function_not_found\"\n\t| \"data_invalid_value\"\n\t| \"data_permission_denied\"\n\t| \"data_query_cancelled\"\n\t| \"data_relation_not_found\"\n\t| \"data_schema_not_found\";\n\nexport function dataErrorCodeForProviderFacts(input: {\n\thint?: string;\n\tmessage?: string;\n\tproviderCode?: string;\n\ttransportCode?: string;\n}): AthenaDataErrorCode {\n\tconst sqlState =\n\t\tnormalizeSqlState(input.providerCode) ??\n\t\tnormalizeSqlState(input.hint) ??\n\t\tsqlStateFromNamedHint(input.hint);\n\n\tif (sqlState === \"42P01\") {\n\t\treturn \"data_relation_not_found\";\n\t}\n\tif (sqlState === \"3F000\") {\n\t\treturn \"data_schema_not_found\";\n\t}\n\tif (sqlState === \"42703\") {\n\t\treturn \"data_column_not_found\";\n\t}\n\tif (sqlState === \"42883\") {\n\t\treturn \"data_function_not_found\";\n\t}\n\tif (\n\t\tsqlState === \"23505\" ||\n\t\tsqlState === \"23503\" ||\n\t\tsqlState === \"40001\" ||\n\t\tsqlState === \"40P01\"\n\t) {\n\t\treturn \"data_conflict\";\n\t}\n\tif (\n\t\tsqlState === \"23502\" ||\n\t\tsqlState === \"23514\" ||\n\t\tsqlState?.startsWith(\"22\")\n\t) {\n\t\treturn \"data_invalid_value\";\n\t}\n\tif (sqlState?.startsWith(\"23\")) {\n\t\treturn \"data_constraint_violation\";\n\t}\n\tif (sqlState === \"42501\") {\n\t\treturn \"data_permission_denied\";\n\t}\n\tif (sqlState === \"57014\") {\n\t\treturn \"data_query_cancelled\";\n\t}\n\tif (\n\t\tsqlState?.startsWith(\"08\") ||\n\t\tsqlState === \"53300\" ||\n\t\tsqlState === \"57P03\"\n\t) {\n\t\treturn \"data_backend_unavailable\";\n\t}\n\n\tconst haystack =\n\t\t`${input.message ?? \"\"} ${input.hint ?? \"\"} ${input.transportCode ?? \"\"}`.toLowerCase();\n\tif (\n\t\tinput.hint === \"connection\" ||\n\t\tinput.transportCode === \"NETWORK_ERROR\" ||\n\t\t/(econnrefused|enotfound|econnreset|connection terminated)/.test(haystack)\n\t) {\n\t\treturn \"data_backend_unavailable\";\n\t}\n\n\treturn \"data_execution_failed\";\n}\n\nfunction normalizeSqlState(value: string | undefined): string | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim().toUpperCase();\n\treturn SQLSTATE.test(trimmed) ? trimmed : undefined;\n}\n\nfunction sqlStateFromNamedHint(hint: string | undefined): string | undefined {\n\tif (!hint) {\n\t\treturn undefined;\n\t}\n\tif (hint.startsWith(\"unique_violation\")) {\n\t\treturn \"23505\";\n\t}\n\tif (hint.startsWith(\"foreign_key_violation\")) {\n\t\treturn \"23503\";\n\t}\n\tif (hint.startsWith(\"not_null_violation\")) {\n\t\treturn \"23502\";\n\t}\n\tif (hint.startsWith(\"check_violation\")) {\n\t\treturn \"23514\";\n\t}\n\treturn undefined;\n}\n","/* AUTO-GENERATED from contracts/auth/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_AUTH_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"auth\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"auth_bad_request\",\n\t    \"description\": \"The auth request payload or headers are malformed.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_invalid_request\",\n\t    \"description\": \"The auth request is invalid for the target endpoint.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_validation\",\n\t    \"description\": \"Auth input failed validation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_invalid_credentials\",\n\t    \"description\": \"The provided credentials are invalid.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8003,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_unauthenticated\",\n\t    \"description\": \"Authentication is required for this operation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_session_not_found\",\n\t    \"description\": \"The session was not found or has expired.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_forbidden\",\n\t    \"description\": \"The authenticated principal is forbidden from this operation.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8006,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_insufficient_permissions\",\n\t    \"description\": \"The authenticated principal lacks the required permissions.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_user_not_found\",\n\t    \"description\": \"The requested user was not found.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8008,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_not_found\",\n\t    \"description\": \"The requested auth resource was not found.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8009,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_conflict\",\n\t    \"description\": \"The auth operation conflicts with existing state.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8010,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_rate_limited\",\n\t    \"description\": \"Too many auth requests; retry later.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8011,\n\t    \"kind\": \"rate_limited\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 429\n\t  },\n\t  {\n\t    \"code\": \"auth_not_implemented\",\n\t    \"description\": \"The requested auth capability is not implemented.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8012,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 501\n\t  },\n\t  {\n\t    \"code\": \"auth_config\",\n\t    \"description\": \"Auth service configuration is invalid or incomplete.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8013,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_database\",\n\t    \"description\": \"Auth persistence failed unexpectedly.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8014,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_internal\",\n\t    \"description\": \"An unexpected auth internal error occurred.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_invalid_payload\",\n\t    \"description\": \"The avatar image payload is invalid.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8016,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_unsupported_format\",\n\t    \"description\": \"The avatar image must be PNG, JPEG, or WebP.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8017,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_too_large\",\n\t    \"description\": \"The avatar image exceeds the maximum allowed size.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8018,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 413\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_storage_unavailable\",\n\t    \"description\": \"Avatar object storage is not configured.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8019,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_upload_failed\",\n\t    \"description\": \"Avatar upload to object storage failed.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8020,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_url_generation_failed\",\n\t    \"description\": \"Unable to generate an avatar object URL.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8021,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_avatar_signing_failed\",\n\t    \"description\": \"Unable to sign an avatar object URL.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8022,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_bridge_exchange_invalid\",\n\t    \"description\": \"The one-time auth bridge code is invalid, expired, already consumed, or bound to a different destination.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8023,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_previous_required\",\n\t    \"description\": \"The Auth audit Event IR requires a previous snapshot and none was captured.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8024,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_result_required\",\n\t    \"description\": \"The Auth audit Event IR requires a result snapshot and none was produced.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8025,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_subject_required\",\n\t    \"description\": \"The Auth audit Event IR could not resolve a subject id and type.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8026,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_subject_type_mismatch\",\n\t    \"description\": \"The resolved audit subject type does not match the catalog subjectType.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8027,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_organization_unresolved\",\n\t    \"description\": \"An org-aware Auth event could not resolve organization_id from the Event IR.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8028,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_athena_audit_invalid_result\",\n\t    \"description\": \"The Auth audit result snapshot failed the resource vs receipt policy.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8029,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_protected\",\n\t    \"description\": \"Built-in protected roles cannot be renamed, deleted, or have their rights replaced.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8030,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_version_conflict\",\n\t    \"description\": \"The role was modified concurrently; reload and retry with the current version.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8031,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_has_assignments\",\n\t    \"description\": \"The role still has assignments; reassign them before deleting.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8032,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_unknown\",\n\t    \"description\": \"The requested right is not in the authorization catalog.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8033,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_not_assignable\",\n\t    \"description\": \"The requested right is not assignable to roles.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8034,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_right_scope_mismatch\",\n\t    \"description\": \"The right's scope is not allowed on this role.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8035,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_role_not_found\",\n\t    \"description\": \"The authorization role was not found in the current command scope.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8036,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"auth_authorization_reassignment_invalid\",\n\t    \"description\": \"The replacement role is missing, out of scope, or not assignable.\",\n\t    \"domain\": \"auth\",\n\t    \"errorNumber\": 8037,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/billing/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_BILLING_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"billing\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"billing_webhook_secret_invalid\",\n\t    \"description\": \"The billing webhook secret did not match the configured connection secret.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4000,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"billing_mollie_webhook_rejected\",\n\t    \"description\": \"Athena rejected the Mollie webhook after signature or payload verification failed.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"billing_connection_not_found\",\n\t    \"description\": \"The requested billing provider connection does not exist.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4002,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"billing_provider_unsupported\",\n\t    \"description\": \"The requested billing provider is not supported by this Athena runtime.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4003,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"billing_provider_mismatch\",\n\t    \"description\": \"The billing provider path did not match the stored provider connection.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"billing_connection_config_invalid\",\n\t    \"description\": \"The stored billing provider connection config is invalid.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4005,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"billing_adapter_failed\",\n\t    \"description\": \"The upstream billing provider adapter failed while fetching or projecting provider state.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4006,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"billing_auth_sync_failed\",\n\t    \"description\": \"Athena could not apply the projected billing grants to Athena Auth.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4007,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"billing_auth_sync_config_invalid\",\n\t    \"description\": \"The Athena Auth billing sync runtime configuration is invalid.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4008,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"billing_stripe_webhook_rejected\",\n\t    \"description\": \"Athena rejected the Stripe webhook after signature or payload verification failed.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4009,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"billing_webhook_payload_unsupported\",\n\t    \"description\": \"The billing webhook payload was valid but Athena does not project that event shape yet.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4010,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"billing_provider_response_invalid\",\n\t    \"description\": \"Athena could not parse the upstream billing provider response or webhook payload.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4011,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"billing_provider_http_failed\",\n\t    \"description\": \"Athena could not complete the required upstream billing provider HTTP request.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4012,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"billing_webhook_base_url_mismatch\",\n\t    \"description\": \"The billing webhook arrived on an Athena mirror URL that does not match the connection ingress policy.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4013,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"billing_authorization_denied\",\n\t    \"description\": \"The billing operation was denied because the principal is missing required Athena Rights.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4014,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"billing_import_conflict\",\n\t    \"description\": \"Billing customer import found a conflicting subject mapping and did not change ownership.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4015,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"billing_import_ambiguous_subject\",\n\t    \"description\": \"Billing customer import could not choose a unique Athena subject.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4016,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"billing_import_provider_failed\",\n\t    \"description\": \"Billing customer import could not list provider customers.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4017,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"billing_import_subject_not_found\",\n\t    \"description\": \"Billing customer import metadata pointed at an Athena subject that does not exist.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"billing_import_binding_conflict\",\n\t    \"description\": \"Billing customer import could not bind a provider customer that is already mapped to another subject.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4019,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"billing_import_cursor_invalid\",\n\t    \"description\": \"Billing customer import received an invalid provider list cursor.\",\n\t    \"domain\": \"billing\",\n\t    \"errorNumber\": 4020,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/chat/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_CHAT_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"chat\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"chat_auth_required\",\n\t    \"description\": \"The chat route requires an authenticated actor.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"chat_forbidden\",\n\t    \"description\": \"The actor is not allowed to perform the requested chat action.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5001,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"chat_not_found\",\n\t    \"description\": \"The requested chat room, member, message, or related resource was not found.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5002,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"chat_conflict\",\n\t    \"description\": \"The requested chat mutation conflicts with the current durable chat state.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5003,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"chat_validation_failed\",\n\t    \"description\": \"The chat request payload failed validation.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"chat_unavailable\",\n\t    \"description\": \"Athena chat is temporarily unavailable.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5005,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"chat_unsupported\",\n\t    \"description\": \"The requested chat operation is not supported by this Athena runtime.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5006,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"chat_internal\",\n\t    \"description\": \"Athena chat failed while processing the request.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5007,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/data/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_DATA_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"data\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"data_relation_not_found\",\n\t    \"description\": \"The requested table or schema does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10000,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_schema_not_found\",\n\t    \"description\": \"The requested database schema does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10001,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_column_not_found\",\n\t    \"description\": \"The requested column does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10002,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_function_not_found\",\n\t    \"description\": \"The requested database function does not exist.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10003,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"data_constraint_violation\",\n\t    \"description\": \"A database constraint rejected the request.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"data_invalid_value\",\n\t    \"description\": \"The request included a value the database rejected.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"data_conflict\",\n\t    \"description\": \"The request conflicts with existing data.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10006,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"data_permission_denied\",\n\t    \"description\": \"The database refused the operation.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10007,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"data_query_cancelled\",\n\t    \"description\": \"The database cancelled the query before it completed.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10008,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"never\",\n\t    \"status\": 408\n\t  },\n\t  {\n\t    \"code\": \"data_backend_unavailable\",\n\t    \"description\": \"The database backend is unavailable.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10009,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"data_execution_failed\",\n\t    \"description\": \"The data operation failed.\",\n\t    \"domain\": \"data\",\n\t    \"errorNumber\": 10010,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/gateway/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_GATEWAY_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"gateway\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"gateway_validation_failed\",\n\t    \"description\": \"Legacy generic validation fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_internal_error\",\n\t    \"description\": \"Legacy generic internal fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2001,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_service_unavailable\",\n\t    \"description\": \"Legacy generic availability fallback for older gateway paths.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2002,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_client_header\",\n\t    \"description\": \"The request omitted both X-Athena-Client and direct PostgreSQL routing headers.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2003,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_client\",\n\t    \"description\": \"The provided Athena client name does not resolve to a configured client.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_inactive\",\n\t    \"description\": \"The resolved Athena client exists but is inactive.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_frozen\",\n\t    \"description\": \"The resolved Athena client exists but is frozen.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_client_metadata\",\n\t    \"description\": \"Athena client metadata is invalid for the requested operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_lookup_failed\",\n\t    \"description\": \"Athena could not resolve the requested client because the lookup backend failed.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2008,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_client_catalog_unavailable\",\n\t    \"description\": \"Athena could not read catalog state needed to resolve the requested client.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2009,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_request_body\",\n\t    \"description\": \"The request body is required for this gateway operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2010,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_view_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the view parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2011,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_eq_column_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the eq_column parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2012,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_eq_value_parameter\",\n\t    \"description\": \"The legacy GET /data compatibility route requires the eq_value parameter.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2013,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_table_name\",\n\t    \"description\": \"The request did not include a usable table_name selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_resource_id\",\n\t    \"description\": \"The gateway delete request did not include a resource_id.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2015,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_update_payload\",\n\t    \"description\": \"The gateway update request did not include a valid update payload.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2016,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_conditions\",\n\t    \"description\": \"The gateway update request did not include any conditions.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2017,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_missing_organization_header\",\n\t    \"description\": \"Legacy error code retained for API stability. X-Organization-Id is no longer accepted; organization scope comes from Athena Auth context.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_insert_payload\",\n\t    \"description\": \"The insert request body was missing canonical fields or contained an invalid target selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2019,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_delete_payload\",\n\t    \"description\": \"The delete request body failed Athena delete-side validation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2020,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_fetch_condition\",\n\t    \"description\": \"The fetch request contained an invalid compatibility condition.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2021,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_condition_value\",\n\t    \"description\": \"A request condition value failed Athena validation or coercion.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2022,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_structured_select_request\",\n\t    \"description\": \"The structured select request body does not satisfy Athena's public fetch contract.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2023,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_schema_table_selector\",\n\t    \"description\": \"The combination of schema_name and table_name is invalid or ambiguous.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2024,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_schema_name\",\n\t    \"description\": \"The provided schema_name is not a valid Athena schema selector.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2025,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_post_processing_configuration\",\n\t    \"description\": \"The fetch request asked Athena to apply an invalid post-processing configuration.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2026,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_query_payload\",\n\t    \"description\": \"The /gateway/query JSON body does not match the canonical request shape.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2027,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_malformed_json_payload\",\n\t    \"description\": \"The request body could not be parsed as valid JSON.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2028,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_relation_select_compatibility_query\",\n\t    \"description\": \"The SQL relation-select compatibility query could not be rewritten into a valid Athena fetch plan.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2029,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_empty_query\",\n\t    \"description\": \"The provided SQL query was empty after normalization.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2030,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_unsupported_schema_name\",\n\t    \"description\": \"The requested backend does not support schema_name for this operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2031,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_unsupported_fetch_shape\",\n\t    \"description\": \"The request used a fetch shape that Athena cannot execute on the resolved backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2032,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_deferred_query_not_supported\",\n\t    \"description\": \"The resolved backend does not support deferred gateway query execution.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2033,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_deferred_queue_unavailable\",\n\t    \"description\": \"Athena could not enqueue the request into the deferred queue.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2034,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_outbound_request_rate_limited\",\n\t    \"description\": \"Athena throttled an outbound backend request before execution completed.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2035,\n\t    \"kind\": \"rate_limited\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_backend_temporarily_unavailable\",\n\t    \"description\": \"The resolved backend is temporarily unavailable and should be retried later.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2036,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_backend_unavailable\",\n\t    \"description\": \"A backend dependency needed by the gateway route is unavailable.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2037,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_route_target\",\n\t    \"description\": \"The configured route target URL is invalid for Athena proxying.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2038,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_loop_detected\",\n\t    \"description\": \"Athena rejected a proxy loop back into another route target hop.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2039,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_unavailable\",\n\t    \"description\": \"Athena could not reach the configured upstream route target.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2040,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_route_target_response_unavailable\",\n\t    \"description\": \"Athena reached the route target but could not read the upstream response body.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2041,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_delegation_failed\",\n\t    \"description\": \"Athena failed while delegating a legacy GET /data request through the fetch path.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2042,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_response_processing_failed\",\n\t    \"description\": \"Athena failed while post-processing or normalizing fetch results.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2043,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_fetch_data_failed\",\n\t    \"description\": \"Athena failed while building the final gateway fetch response.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2044,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_delete_execution_failed\",\n\t    \"description\": \"Athena failed while executing the gateway delete operation.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2045,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_sql_execution_failed\",\n\t    \"description\": \"Athena rejected SQL statement execution for a caller-correctable reason.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2046,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_backend_unavailable\",\n\t    \"description\": \"Athena could not execute the query because the resolved backend was unavailable.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2047,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_query_execution_failed\",\n\t    \"description\": \"Athena failed while executing the query after validation succeeded.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2048,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_d1_backend_unavailable\",\n\t    \"description\": \"Athena could not reach the Cloudflare D1 backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2049,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_scylla_backend_unavailable\",\n\t    \"description\": \"Athena could not reach the Scylla backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2050,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"gateway_insert_window_response_channel_dropped\",\n\t    \"description\": \"The insert window worker failed to return a response to the HTTP handler.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2051,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"gateway_supabase_client_resolution_failed\",\n\t    \"description\": \"Athena could not resolve a legacy Supabase client for the request.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2052,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"gateway_invalid_delete_resource_id_column\",\n\t    \"description\": \"The explicit delete resource_id column alias is invalid for the resolved backend.\",\n\t    \"domain\": \"gateway\",\n\t    \"errorNumber\": 2053,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/internal/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_INTERNAL_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"internal\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"unique_violation\",\n\t    \"description\": \"A uniqueness constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1000,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"foreign_key_violation\",\n\t    \"description\": \"A foreign-key constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"not_null_violation\",\n\t    \"description\": \"A required database field was missing.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"check_constraint_violation\",\n\t    \"description\": \"A database check constraint rejected the request.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"invalid_text_encoding\",\n\t    \"description\": \"The request included invalid text encoding.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"undefined_column\",\n\t    \"description\": \"The request referenced a column that does not exist.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"type_operator_mismatch\",\n\t    \"description\": \"The request used incompatible operand types.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"text_uuid_operator_mismatch\",\n\t    \"description\": \"The request compared text and UUID values without compatible coercion.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1007,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"syntax_error\",\n\t    \"description\": \"The SQL or query shape is invalid.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1008,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"insufficient_privilege\",\n\t    \"description\": \"The caller lacks database privileges.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1009,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"connection_error\",\n\t    \"description\": \"Athena could not reach the database backend.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1010,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"pool_timeout\",\n\t    \"description\": \"Athena timed out waiting for a database connection.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1011,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"pool_closed\",\n\t    \"description\": \"The database connection pool is closed.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1012,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"worker_crashed\",\n\t    \"description\": \"A database worker crashed during execution.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1013,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"io_error\",\n\t    \"description\": \"A database network or I/O failure occurred.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1014,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"tls_error\",\n\t    \"description\": \"A secure database connection could not be established.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"column_not_found\",\n\t    \"description\": \"Athena could not find a query result column it expected.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1016,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"column_index_out_of_bounds\",\n\t    \"description\": \"Athena attempted to read a query result column beyond the available range.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1017,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"type_not_found\",\n\t    \"description\": \"Athena could not resolve a database type.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"column_decode_error\",\n\t    \"description\": \"Athena failed to decode a result column.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1019,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"row_not_found\",\n\t    \"description\": \"The requested row does not exist.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1020,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"migration_error\",\n\t    \"description\": \"A database migration operation failed.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1021,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"configuration_error\",\n\t    \"description\": \"Athena database configuration is invalid.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1022,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"database_error\",\n\t    \"description\": \"Athena hit an unclassified database error.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1023,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"data_exception\",\n\t    \"description\": \"The database rejected caller-provided data.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1024,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"query_syntax\",\n\t    \"description\": \"The query is invalid for the database backend.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1025,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"db_error\",\n\t    \"description\": \"The database returned an unclassified server error.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1026,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"postgres_driver_error\",\n\t    \"description\": \"The PostgreSQL driver failed before completion.\",\n\t    \"domain\": \"internal\",\n\t    \"errorNumber\": 1027,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/notifications/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"notifications\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"notifications_athena_unauthenticated\",\n\t    \"description\": \"A signed-in user is required for this notifications operation.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_topic_unknown\",\n\t    \"description\": \"The notification topic is not in the Athena catalog.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_channel_unknown\",\n\t    \"description\": \"The notification channel is not in the Athena catalog.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9002,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_digest_invalid\",\n\t    \"description\": \"Notification digest must be null, daily, or weekly.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_scope_invalid\",\n\t    \"description\": \"Notification organization scope is empty or invalid.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9004,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_event_not_found\",\n\t    \"description\": \"The notification event was not found.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"notifications_athena_unavailable\",\n\t    \"description\": \"The notifications capability is not available on this client.\",\n\t    \"domain\": \"notifications\",\n\t    \"errorNumber\": 9006,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/policy/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_POLICY_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"policy\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"policy_denied\",\n\t    \"description\": \"The policy engine denied the requested operation.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_field_denied\",\n\t    \"description\": \"The policy engine denied access to one or more fields.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_write_conflict\",\n\t    \"description\": \"The write conflicts with policy visibility or check predicates.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7002,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_subject_required\",\n\t    \"description\": \"A trusted policy subject is required for this operation.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7003,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"policy_subject_attribute_missing\",\n\t    \"description\": \"A required trusted subject attribute is missing.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7004,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"policy_resource_unmanaged\",\n\t    \"description\": \"The target resource is not managed by the active policy set.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7005,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_invalid\",\n\t    \"description\": \"The policy definition or IR document is invalid.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7006,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"policy_compilation_failed\",\n\t    \"description\": \"Athena failed to compile the policy set into a runtime artifact.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7007,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_capability_unsupported\",\n\t    \"description\": \"The backend capability profile cannot enforce the required policy predicate.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7008,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_raw_sql_denied\",\n\t    \"description\": \"Raw SQL is denied while policy enforcement is active.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7009,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_rpc_denied\",\n\t    \"description\": \"RPC execution is denied while policy enforcement is active.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7010,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"policy_context_invalid\",\n\t    \"description\": \"The policy evaluation context is invalid.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7011,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"policy_version_mismatch\",\n\t    \"description\": \"The bound policy version does not match the compiled artifact.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7012,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_not_found\",\n\t    \"description\": \"The requested policy was not found.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7013,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"policy_set_not_found\",\n\t    \"description\": \"The requested policy set was not found.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"policy_evaluation_failed\",\n\t    \"description\": \"Policy evaluation failed unexpectedly.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7015,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_enforcement_failed\",\n\t    \"description\": \"Policy enforcement failed unexpectedly.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7016,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"policy_binding_conflict\",\n\t    \"description\": \"The policy binding conflicts with an existing binding.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7017,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"policy_import_unsupported\",\n\t    \"description\": \"The imported policy construct is unsupported.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7018,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_import_function_unresolved\",\n\t    \"description\": \"An imported policy function could not be resolved.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7019,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 422\n\t  },\n\t  {\n\t    \"code\": \"policy_schema_drift\",\n\t    \"description\": \"The live schema drifted from the schema fingerprint used to compile policies.\",\n\t    \"domain\": \"policy\",\n\t    \"errorNumber\": 7020,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/storage/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_STORAGE_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"storage\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"storage_invalid_request\",\n\t    \"description\": \"Caller-correctable storage request validation failure.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3000,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_invalid_provider\",\n\t    \"description\": \"Unknown storage provider label rejected without AWS fallback.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3001,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_unsupported_provider\",\n\t    \"description\": \"Storage provider is recognized but not implemented.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3002,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_authorization_denied\",\n\t    \"description\": \"Caller is not authorized for the storage operation.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3003,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_connection_not_found\",\n\t    \"description\": \"Storage connection or related resource was not found.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3004,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_file_not_found\",\n\t    \"description\": \"Managed file or permission was not found.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3005,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_conflict\",\n\t    \"description\": \"Storage state conflict or idempotency collision.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3006,\n\t    \"kind\": \"conflict\",\n\t    \"retry\": \"never\",\n\t    \"status\": 409\n\t  },\n\t  {\n\t    \"code\": \"storage_provider_unavailable\",\n\t    \"description\": \"Upstream object store is unavailable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3007,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_provider_authentication_failed\",\n\t    \"description\": \"Upstream object store rejected the resolved credentials.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3008,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_persistence_failure\",\n\t    \"description\": \"Storage metadata persistence failed.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3009,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_internal\",\n\t    \"description\": \"Unexpected storage subsystem failure.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3010,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"storage_r2_invalid_access_key_id_format\",\n\t    \"description\": \"Cloudflare R2 direct credentials used an invalid S3 access key ID format for the selected endpoint.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3011,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_invalid_argument\",\n\t    \"description\": \"The upstream S3-compatible backend rejected the request as caller-correctable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3012,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_access_denied\",\n\t    \"description\": \"The upstream S3-compatible backend rejected the request because the provided credentials lack permission.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3013,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"storage_bucket_not_found\",\n\t    \"description\": \"The requested bucket does not exist on the selected storage backend.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3014,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"storage_upstream_unavailable\",\n\t    \"description\": \"Athena could not reach or complete the request against the selected storage backend.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3015,\n\t    \"kind\": \"unavailable\",\n\t    \"retry\": \"safe\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_list_buckets_failed\",\n\t    \"description\": \"Athena failed while normalizing an upstream bucket-list response.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3016,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"storage_list_objects_failed\",\n\t    \"description\": \"Athena failed while normalizing an upstream object-list response.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3017,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 502\n\t  },\n\t  {\n\t    \"code\": \"storage_encryption_key_missing\",\n\t    \"description\": \"Storage encryption key is not configured and auto-generation is disabled (ATHENA_STORAGE_SECRET_ENCRYPTION_KEY_AUTO=false); credential operations are unavailable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3018,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_encryption_key_invalid\",\n\t    \"description\": \"Storage encryption key configuration is present but unusable.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3019,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_decrypt_failed\",\n\t    \"description\": \"Active s3_credentials.secret_key_encrypted could not be decrypted with the configured encryption key. s3_id refers to s3_catalogs.id.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3020,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_missing\",\n\t    \"description\": \"No active athena.s3_credentials row exists for the requested s3_catalogs.id (API field s3_id).\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3021,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_credential_corrupted\",\n\t    \"description\": \"Active credential ciphertext is missing, empty after decrypt, or structurally invalid.\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3022,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 503\n\t  },\n\t  {\n\t    \"code\": \"storage_catalog_not_found\",\n\t    \"description\": \"No athena.s3_catalogs row exists for the requested s3_id (catalog id).\",\n\t    \"domain\": \"storage\",\n\t    \"errorNumber\": 3023,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  }\n\t]);\n","/* AUTO-GENERATED from contracts/webhooks/errors.json. Do not hand-edit. */\nimport type { AthenaErrorIR } from \"../ir.ts\";\n\nexport const ATHENA_WEBHOOK_ERROR_DESCRIPTORS: readonly AthenaErrorIR<string, \"webhook\">[] =\n\tObject.freeze([\n\t  {\n\t    \"code\": \"webhook_not_found\",\n\t    \"description\": \"The requested gateway webhook definition does not exist.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6000,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"webhook_sink_not_found\",\n\t    \"description\": \"The requested gateway webhook sink definition does not exist.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6001,\n\t    \"kind\": \"not_found\",\n\t    \"retry\": \"never\",\n\t    \"status\": 404\n\t  },\n\t  {\n\t    \"code\": \"webhook_sink_provision_failed\",\n\t    \"description\": \"Athena could not persist the requested webhook sink definition set.\",\n\t    \"domain\": \"webhook\",\n\t    \"errorNumber\": 6002,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  }\n\t]);\n","import { ATHENA_AUTH_ERROR_DESCRIPTORS } from \"./generated/auth.ts\";\nimport { ATHENA_BILLING_ERROR_DESCRIPTORS } from \"./generated/billing.ts\";\nimport { ATHENA_CHAT_ERROR_DESCRIPTORS } from \"./generated/chat.ts\";\nimport { ATHENA_DATA_ERROR_DESCRIPTORS } from \"./generated/data.ts\";\nimport { ATHENA_GATEWAY_ERROR_DESCRIPTORS } from \"./generated/gateway.ts\";\nimport { ATHENA_INTERNAL_ERROR_DESCRIPTORS } from \"./generated/internal.ts\";\nimport { ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS } from \"./generated/notifications.ts\";\nimport { ATHENA_POLICY_ERROR_DESCRIPTORS } from \"./generated/policy.ts\";\nimport { ATHENA_STORAGE_ERROR_DESCRIPTORS } from \"./generated/storage.ts\";\nimport { ATHENA_WEBHOOK_ERROR_DESCRIPTORS } from \"./generated/webhook.ts\";\nimport type { AthenaErrorDomain, AthenaErrorIR } from \"./ir.ts\";\n\nconst DESCRIPTORS: ReadonlyMap<string, AthenaErrorIR> = new Map(\n\t[\n\t\t...ATHENA_AUTH_ERROR_DESCRIPTORS,\n\t\t...ATHENA_BILLING_ERROR_DESCRIPTORS,\n\t\t...ATHENA_CHAT_ERROR_DESCRIPTORS,\n\t\t...ATHENA_DATA_ERROR_DESCRIPTORS,\n\t\t...ATHENA_GATEWAY_ERROR_DESCRIPTORS,\n\t\t...ATHENA_INTERNAL_ERROR_DESCRIPTORS,\n\t\t...ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS,\n\t\t...ATHENA_POLICY_ERROR_DESCRIPTORS,\n\t\t...ATHENA_STORAGE_ERROR_DESCRIPTORS,\n\t\t...ATHENA_WEBHOOK_ERROR_DESCRIPTORS,\n\t].map((descriptor) => [\n\t\t`${descriptor.domain}:${descriptor.code}`,\n\t\tdescriptor,\n\t]),\n);\nconst DESCRIPTOR_LIST = [...DESCRIPTORS.values()];\nconst DESCRIPTORS_BY_CODE: ReadonlyMap<string, AthenaErrorIR> = new Map(\n\tDESCRIPTOR_LIST.map((descriptor) => [descriptor.code, descriptor]),\n);\n\nexport function errorDescriptor(\n\tdomain: AthenaErrorDomain,\n\tcode: string,\n): AthenaErrorIR | undefined {\n\treturn DESCRIPTORS.get(`${domain}:${normalizeCatalogCode(domain, code)}`);\n}\n\nexport function normalizeCatalogCode(\n\tdomain: AthenaErrorDomain,\n\tcode: string,\n): string {\n\tconst normalized = code.trim().toLowerCase();\n\tconst withoutAthenaPrefix = normalized.startsWith(\"athena_\")\n\t\t? normalized.slice(\"athena_\".length)\n\t\t: normalized;\n\tif (domain === \"internal\") {\n\t\treturn withoutAthenaPrefix;\n\t}\n\tconst domainPrefix = `${domain}_`;\n\tif (withoutAthenaPrefix.startsWith(domainPrefix)) {\n\t\treturn withoutAthenaPrefix;\n\t}\n\treturn `${domainPrefix}${withoutAthenaPrefix}`;\n}\n\nexport function storageErrorDescriptor(\n\tcode: string,\n): AthenaErrorIR<string, \"storage\"> | undefined {\n\treturn errorDescriptor(\"storage\", code) as\n\t\t| AthenaErrorIR<string, \"storage\">\n\t\t| undefined;\n}\n\nexport function dataErrorDescriptor(\n\tcode: string,\n): AthenaErrorIR<string, \"data\"> | undefined {\n\treturn errorDescriptor(\"data\", code) as\n\t\t| AthenaErrorIR<string, \"data\">\n\t\t| undefined;\n}\n\nexport function errorDescriptorForPublicCode(\n\tcode: string,\n): AthenaErrorIR | undefined {\n\treturn DESCRIPTORS_BY_CODE.get(code.trim().toLowerCase());\n}\n\nexport function isCatalogErrorCode(code: string): boolean {\n\treturn DESCRIPTORS_BY_CODE.has(code.trim().toLowerCase());\n}\n\nexport function errorDescriptorsForDomain(\n\tdomain: AthenaErrorDomain,\n): readonly AthenaErrorIR[] {\n\treturn DESCRIPTOR_LIST.filter((descriptor) => descriptor.domain === domain);\n}\n","import {\n\ttype AthenaFailureIR,\n\tfailureFromUnknown,\n\tmessageFromUnknown,\n} from \"./failure.ts\";\nimport type { AthenaErrorDomain, AthenaErrorIR } from \"./ir.ts\";\nimport type { AthenaErrorKind } from \"./kinds.ts\";\nimport { dataErrorCodeForProviderFacts } from \"./data.ts\";\nimport {\n\tdataErrorDescriptor,\n\terrorDescriptor,\n\terrorDescriptorsForDomain,\n\tstorageErrorDescriptor,\n} from \"./registry.ts\";\n\nexport interface ClassifyAthenaErrorInput {\n\treadonly domain: AthenaErrorDomain;\n\treadonly failure: AthenaFailureIR | unknown;\n}\n\nexport function classifyAthenaError(\n\tinput: ClassifyAthenaErrorInput,\n): AthenaErrorIR {\n\tconst failure = asFailure(input.failure);\n\tconst explicit = descriptorForFailure(input.domain, failure);\n\tif (explicit) {\n\t\treturn explicit;\n\t}\n\n\tconst descriptor = fallbackDescriptor(input.domain, failure);\n\treturn descriptor;\n}\n\nfunction descriptorForFailure(\n\tdomain: AthenaErrorDomain,\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR | undefined {\n\tif (!failure.code) {\n\t\treturn;\n\t}\n\tconst code = failure.code.toLowerCase();\n\tif (domain === \"storage\" && code === \"storage_unavailable\") {\n\t\treturn storageErrorDescriptor(\"storage_provider_unavailable\");\n\t}\n\treturn errorDescriptor(domain, code);\n}\n\nfunction fallbackDescriptor(\n\tdomain: AthenaErrorDomain,\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR {\n\tif (domain === \"storage\") {\n\t\treturn storageFallbackDescriptor(failure);\n\t}\n\tif (domain === \"data\") {\n\t\treturn dataFallbackDescriptor(failure);\n\t}\n\tif (failure.status === 401 || failure.status === 403) {\n\t\treturn descriptorByKind(domain, \"authorization\");\n\t}\n\tif (failure.status === 404) {\n\t\treturn descriptorByKind(domain, \"not_found\");\n\t}\n\tif (failure.status === 503) {\n\t\treturn descriptorByKind(domain, \"unavailable\");\n\t}\n\tif (failure.status && failure.status >= 400 && failure.status < 500) {\n\t\treturn descriptorByKind(domain, \"validation\");\n\t}\n\treturn descriptorByKind(domain, \"internal\");\n}\n\nfunction storageFallbackDescriptor(\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR<string, \"storage\"> {\n\tconst code = failure.code?.toLowerCase() ?? \"\";\n\tconst providerCode =\n\t\t\"providerCode\" in failure ? (failure.providerCode ?? \"\") : \"\";\n\tconst combined =\n\t\t`${code} ${providerCode} ${failure.message ?? \"\"}`.toLowerCase();\n\tconst status = failure.status;\n\n\tif (\n\t\t(status === 401 || status === 403) &&\n\t\t!isProviderAuthenticationFailure(combined)\n\t) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_authorization_denied\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\tif (\n\t\tcombined.includes(\"accessdenied\") ||\n\t\tcombined.includes(\"access denied\") ||\n\t\tcombined.includes(\"forbidden\")\n\t) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_authorization_denied\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\tif (\n\t\tstatus === 404 ||\n\t\tcombined.includes(\"nosuchkey\") ||\n\t\tcombined.includes(\"not found\") ||\n\t\tcombined.includes(\"enoent\")\n\t) {\n\t\treturn storageErrorDescriptor(\"storage_file_not_found\") as AthenaErrorIR<\n\t\t\tstring,\n\t\t\t\"storage\"\n\t\t>;\n\t}\n\tif (\n\t\tstatus === 400 ||\n\t\tcombined.includes(\"invalidargument\") ||\n\t\tcombined.includes(\"invalid request\") ||\n\t\tcombined.includes(\"object key\")\n\t) {\n\t\treturn storageErrorDescriptor(\"storage_invalid_request\") as AthenaErrorIR<\n\t\t\tstring,\n\t\t\t\"storage\"\n\t\t>;\n\t}\n\tif (status === 503 || (failure.source === \"http\" && status === undefined)) {\n\t\treturn storageErrorDescriptor(\n\t\t\t\"storage_provider_unavailable\",\n\t\t) as AthenaErrorIR<string, \"storage\">;\n\t}\n\treturn storageErrorDescriptor(\"storage_internal\") as AthenaErrorIR<\n\t\tstring,\n\t\t\"storage\"\n\t>;\n}\n\nfunction dataFallbackDescriptor(\n\tfailure: AthenaFailureIR,\n): AthenaErrorIR<string, \"data\"> {\n\tconst providerCode =\n\t\t\"providerCode\" in failure ? failure.providerCode : undefined;\n\tconst details = failure.details;\n\tconst hint =\n\t\tdetails && typeof details === \"object\" && !Array.isArray(details)\n\t\t\t? (details as { hint?: unknown }).hint\n\t\t\t: undefined;\n\tconst code = dataErrorCodeForProviderFacts({\n\t\thint: typeof hint === \"string\" ? hint : undefined,\n\t\tmessage: failure.message,\n\t\tproviderCode,\n\t\ttransportCode: failure.code,\n\t});\n\tconst descriptor = dataErrorDescriptor(code);\n\tif (!descriptor) {\n\t\tthrow new Error(`No Data Error IR descriptor is registered for ${code}`);\n\t}\n\treturn descriptor;\n}\n\nfunction isProviderAuthenticationFailure(value: string): boolean {\n\treturn (\n\t\tvalue.includes(\"invalid access key\") ||\n\t\tvalue.includes(\"credential\") ||\n\t\tvalue.includes(\"authentication\")\n\t);\n}\n\nfunction descriptorByKind(\n\tdomain: AthenaErrorDomain,\n\tkind: AthenaErrorKind,\n): AthenaErrorIR {\n\tconst descriptor = errorDescriptorsForDomain(domain).find(\n\t\t(candidate) => candidate.kind === kind,\n\t);\n\tif (!descriptor) {\n\t\tthrow new Error(\n\t\t\t`No ${kind} Error IR descriptor is registered for ${domain}`,\n\t\t);\n\t}\n\treturn descriptor;\n}\n\nfunction asFailure(value: AthenaFailureIR | unknown): AthenaFailureIR {\n\tif (isFailure(value)) {\n\t\treturn value;\n\t}\n\treturn failureFromUnknown(\"runtime\", value);\n}\n\nfunction isFailure(value: unknown): value is AthenaFailureIR {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst source = (value as { source?: unknown }).source;\n\treturn source === \"http\" || source === \"provider\" || source === \"runtime\";\n}\n\nexport function errorKind(error: AthenaErrorIR): AthenaErrorKind {\n\treturn error.kind;\n}\n\nexport function errorMessage(failure: AthenaFailureIR | unknown): string {\n\treturn isFailure(failure)\n\t\t? (failure.message ?? \"Athena request failed\")\n\t\t: messageFromUnknown(failure);\n}\n","import type { AthenaErrorIR } from \"./ir.ts\";\n\nexport interface AthenaErrorInstance<\n\tError extends AthenaErrorIR = AthenaErrorIR,\n> {\n\treadonly error: Error;\n\treadonly message: string;\n\treadonly details?: unknown;\n\treadonly cause?: unknown;\n}\n\nexport function createAthenaErrorInstance<Error extends AthenaErrorIR>(\n\terror: Error,\n\tinput: {\n\t\treadonly cause?: unknown;\n\t\treadonly details?: unknown;\n\t\treadonly message?: string;\n\t} = {},\n): AthenaErrorInstance<Error> {\n\treturn Object.freeze({\n\t\tcause: input.cause,\n\t\tdetails: input.details,\n\t\terror,\n\t\tmessage: input.message ?? error.description,\n\t});\n}\n\nexport interface AthenaErrorResult {\n\treadonly error: {\n\t\treadonly code: string;\n\t\treadonly errorNumber: number;\n\t\treadonly message: string;\n\t\treadonly missing?: readonly string[];\n\t\treadonly operation?: string;\n\t};\n\treadonly ok: false;\n\treadonly status: number;\n}\n\nexport function athenaErrorResult(\n\tinstance: AthenaErrorInstance,\n): AthenaErrorResult {\n\tconst envelope = authorizationEnvelopeFromDetails(instance.details);\n\treturn {\n\t\terror: {\n\t\t\tcode: instance.error.code,\n\t\t\terrorNumber: instance.error.errorNumber,\n\t\t\tmessage: instance.message,\n\t\t\t...envelope,\n\t\t},\n\t\tok: false,\n\t\tstatus: instance.error.status,\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nfunction authorizationEnvelopeFromDetails(details: unknown): {\n\tmissing?: readonly string[];\n\toperation?: string;\n} {\n\tif (!isRecord(details)) {\n\t\treturn {};\n\t}\n\tconst extra: {\n\t\tmissing?: readonly string[];\n\t\toperation?: string;\n\t} = {};\n\tif (typeof details.operation === \"string\" && details.operation.length > 0) {\n\t\textra.operation = details.operation;\n\t}\n\tif (\n\t\tArray.isArray(details.missing) &&\n\t\tdetails.missing.length > 0 &&\n\t\tdetails.missing.every((entry) => typeof entry === \"string\")\n\t) {\n\t\textra.missing = details.missing;\n\t}\n\treturn extra;\n}\n","export {\n\tclassifyAthenaError,\n\terrorKind,\n\terrorMessage,\n} from \"./classifier.ts\";\nexport type {\n\tAthenaFailureIR,\n\tAthenaHttpFailureIR,\n\tAthenaProviderFailureIR,\n\tAthenaRuntimeFailureIR,\n} from \"./failure.ts\";\nexport {\n\tfailureFromUnknown,\n\tmessageFromUnknown,\n} from \"./failure.ts\";\nexport type {\n\tAthenaErrorInstance,\n\tAthenaErrorResult,\n} from \"./instance.ts\";\nexport {\n\tathenaErrorResult,\n\tcreateAthenaErrorInstance,\n} from \"./instance.ts\";\nexport type {\n\tAthenaErrorDomain,\n\tAthenaErrorIR,\n} from \"./ir.ts\";\nexport type { AthenaErrorKind } from \"./kinds.ts\";\nexport type { AthenaRetryDisposition } from \"./retry.ts\";\nexport { failureFromAthenaWire } from \"./wire.ts\";\n","import type { AthenaPolicyRegistry } from \"../../policy/registry.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\n\nexport type StorageObjectOp = \"get\" | \"put\" | \"delete\" | \"list\" | \"head\";\n\nexport function isStorageObjectOp(value: unknown): value is StorageObjectOp {\n\treturn (\n\t\tvalue === \"delete\" ||\n\t\tvalue === \"get\" ||\n\t\tvalue === \"head\" ||\n\t\tvalue === \"list\" ||\n\t\tvalue === \"put\"\n\t);\n}\n\nexport interface StorageObjectRequest {\n\tbody?: Uint8Array | string;\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n}\n\nexport interface AuthorizedStorageOperation {\n\tbody?: Uint8Array;\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n\tprincipal: AthenaPrincipal;\n}\n\nexport interface StorageObjectError {\n\tcode: string;\n\terrorNumber: number;\n\tmessage: string;\n\tmissing?: readonly string[];\n\toperation?: StorageObjectOp;\n}\n\nexport interface StorageObjectResult {\n\tdata?: unknown;\n\terror?: StorageObjectError;\n\tok: boolean;\n\tstatus: number;\n}\n\nexport interface StorageObjectProvider {\n\texecute(op: AuthorizedStorageOperation): Promise<StorageObjectResult>;\n}\n\nexport interface AthenaStorageLifecycleHooks {\n\tafter?(event: { op: StorageObjectOp; result: StorageObjectResult }): void;\n\tbefore?(event: { op: StorageObjectOp; request: StorageObjectRequest }): void;\n}\n\nexport interface CreateStorageRuntimeOptions {\n\tlifecycle?: AthenaStorageLifecycleHooks;\n\tpolicies?: AthenaPolicyRegistry;\n\tprovider: StorageObjectProvider;\n}\n\nexport interface StorageRuntime {\n\texecute(\n\t\trequest: StorageObjectRequest,\n\t\tprincipal: AthenaPrincipal,\n\t): Promise<StorageObjectResult>;\n\treadonly provider: StorageObjectProvider;\n}\n\nexport const ATHENA_STORAGE_PROVIDER = Symbol.for(\n\t\"@xylex-group/athena.storage.provider\",\n);\n\nexport const ATHENA_STORAGE_RUNTIME = Symbol.for(\n\t\"@xylex-group/athena.storage.runtime\",\n);\n\nexport type StorageProviderHandle = StorageObjectProvider;\n","import {\n\ttype AthenaFailureIR,\n\tathenaErrorResult,\n\tclassifyAthenaError,\n\tcreateAthenaErrorInstance,\n\tfailureFromUnknown,\n\tmessageFromUnknown,\n} from \"../../runtime/error/index.ts\";\nimport {\n\tisStorageObjectOp,\n\ttype StorageObjectOp,\n\ttype StorageObjectResult,\n} from \"./types.ts\";\n\nexport class AthenaStorageError extends Error {\n\treadonly code: string;\n\treadonly details?: unknown;\n\treadonly errorNumber: number;\n\treadonly status: number;\n\n\tconstructor(input: {\n\t\tcode: string;\n\t\tdetails?: unknown;\n\t\terrorNumber: number;\n\t\tmessage: string;\n\t\tstatus: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaStorageError\";\n\t\tthis.code = input.code;\n\t\tthis.errorNumber = input.errorNumber;\n\t\tthis.status = input.status;\n\t\tthis.details = input.details;\n\t}\n}\n\nexport class AthenaStorageAuthorizationError extends AthenaStorageError {\n\treadonly missing: readonly string[];\n\treadonly operation: StorageObjectOp;\n\n\tconstructor(input: {\n\t\tmissing: readonly string[];\n\t\toperation: StorageObjectOp;\n\t}) {\n\t\tsuper({\n\t\t\tcode: \"storage_authorization_denied\",\n\t\t\tdetails: {\n\t\t\t\tmissing: input.missing,\n\t\t\t\toperation: input.operation,\n\t\t\t},\n\t\t\terrorNumber: 3003,\n\t\t\tmessage:\n\t\t\t\tinput.missing.length === 0\n\t\t\t\t\t? `Storage operation ${input.operation} denied`\n\t\t\t\t\t: `Storage operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n\t\t\tstatus: 403,\n\t\t});\n\t\tthis.name = \"AthenaStorageAuthorizationError\";\n\t\tthis.missing = input.missing;\n\t\tthis.operation = input.operation;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaStorageAuthorizationError(\n\terror: unknown,\n): error is AthenaStorageAuthorizationError {\n\tif (error instanceof AthenaStorageAuthorizationError) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\treturn (\n\t\terror.code === \"storage_authorization_denied\" &&\n\t\tArray.isArray(error.missing) &&\n\t\tisStorageObjectOp(error.operation)\n\t);\n}\n\nexport function storageErrorResult(\n\tfailure: AthenaFailureIR | unknown,\n): StorageObjectResult;\n/**\n * Compatibility overload for existing provider tests and internal adapters.\n * New call sites must pass a Failure IR (or an unknown occurrence) so the\n * classifier owns canonical identity.\n */\nexport function storageErrorResult(\n\terrorNumber: number,\n\tcode: string,\n\tmessage: string,\n\tstatus: number,\n): StorageObjectResult;\nexport function storageErrorResult(\n\tfailureOrErrorNumber: AthenaFailureIR | unknown | number,\n\tcode?: string,\n\tmessage?: string,\n\tstatus?: number,\n): StorageObjectResult {\n\tconst failure =\n\t\ttypeof failureOrErrorNumber === \"number\"\n\t\t\t? failureFromUnknown(\n\t\t\t\t\"runtime\",\n\t\t\t\tnew Error(message ?? \"storage request failed\"),\n\t\t\t\t{\n\t\t\t\t\tcode,\n\t\t\t\t\tstatus,\n\t\t\t\t},\n\t\t\t)\n\t\t\t: failureOrErrorNumber;\n\tconst error = classifyAthenaError({ domain: \"storage\", failure });\n\tconst instance = createAthenaErrorInstance(error, {\n\t\tdetails: occurrenceDetails(failure),\n\t\tmessage:\n\t\t\ttypeof failureOrErrorNumber === \"number\"\n\t\t\t\t? (message ?? error.description)\n\t\t\t\t: messageFromUnknownFailure(failure),\n\t});\n\tconst result = athenaErrorResult(instance);\n\tconst explicitCode =\n\t\ttypeof code === \"string\" && code.trim() ? code.trim() : undefined;\n\n\t// Pre-Error-Spine wire aliases. Keep them narrow so HTTP principal\n\t// failures still classify with Direct (unknown codes → storage_internal).\n\tif (explicitCode === \"storage_unauthenticated\" && status === 401) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: \"storage_unauthenticated\",\n\t\t\t\terrorNumber: 3003,\n\t\t\t\tmessage: result.error.message,\n\t\t\t},\n\t\t\tok: false,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\tif (failure instanceof AthenaStorageAuthorizationError) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: failure.code,\n\t\t\t\terrorNumber: failure.errorNumber,\n\t\t\t\tmessage: failure.message,\n\t\t\t\tmissing: failure.missing,\n\t\t\t\toperation: failure.operation,\n\t\t\t},\n\t\t\tok: false,\n\t\t\tstatus: failure.status,\n\t\t};\n\t}\n\n\tconst resolvedCode =\n\t\tresult.error.code === \"storage_provider_unavailable\"\n\t\t\t? \"storage_unavailable\"\n\t\t\t: result.error.code;\n\tconst operation = isStorageObjectOp(result.error.operation)\n\t\t? result.error.operation\n\t\t: undefined;\n\tconst missing = Array.isArray(result.error.missing)\n\t\t? result.error.missing\n\t\t: undefined;\n\n\treturn {\n\t\terror: {\n\t\t\tcode: resolvedCode,\n\t\t\terrorNumber: result.error.errorNumber,\n\t\t\tmessage: result.error.message,\n\t\t\t...(missing !== undefined ? { missing } : {}),\n\t\t\t...(operation !== undefined ? { operation } : {}),\n\t\t},\n\t\tok: false,\n\t\tstatus: result.status,\n\t};\n}\n\nfunction occurrenceDetails(failure: unknown): unknown {\n\tif (failure instanceof AthenaStorageAuthorizationError) {\n\t\treturn {\n\t\t\tmissing: failure.missing,\n\t\t\toperation: failure.operation,\n\t\t};\n\t}\n\tif (isRecord(failure) && failure.details !== undefined) {\n\t\treturn failure.details;\n\t}\n\treturn undefined;\n}\n\nexport function storageOkResult(\n\tdata: unknown,\n\tstatus = 200,\n): StorageObjectResult {\n\treturn { data, ok: true, status };\n}\n\nexport function mapProviderFailure(error: unknown): StorageObjectResult {\n\treturn storageErrorResult({\n\t\t...providerFailureFields(error),\n\t\tsource: \"provider\",\n\t});\n}\n\nfunction messageFromUnknownFailure(failure: unknown): string {\n\tif (failure && typeof failure === \"object\") {\n\t\tconst message = (failure as { message?: unknown }).message;\n\t\tif (typeof message === \"string\" && message.length > 0) {\n\t\t\treturn message;\n\t\t}\n\t}\n\treturn messageFromUnknown(failure);\n}\n\nfunction providerFailureFields(error: unknown): {\n\tcause: unknown;\n\tmessage: string;\n\tproviderCode?: string;\n\tstatus?: number;\n} {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn { cause: error, message: messageFromUnknown(error) };\n\t}\n\tconst record = error as {\n\t\t$metadata?: { httpStatusCode?: unknown };\n\t\tCode?: unknown;\n\t\tcode?: unknown;\n\t\tmessage?: unknown;\n\t\tname?: unknown;\n\t\tstatus?: unknown;\n\t};\n\tconst providerCode =\n\t\ttypeof record.Code === \"string\"\n\t\t\t? record.Code\n\t\t\t: typeof record.code === \"string\"\n\t\t\t\t? record.code\n\t\t\t\t: typeof record.name === \"string\"\n\t\t\t\t\t? record.name\n\t\t\t\t\t: undefined;\n\tconst status =\n\t\ttypeof record.status === \"number\"\n\t\t\t? record.status\n\t\t\t: typeof record.$metadata?.httpStatusCode === \"number\"\n\t\t\t\t? record.$metadata.httpStatusCode\n\t\t\t\t: undefined;\n\treturn {\n\t\tcause: error,\n\t\tmessage:\n\t\t\ttypeof record.message === \"string\" ? record.message : String(error),\n\t\tproviderCode,\n\t\tstatus,\n\t};\n}\n","import {\n\tathenaRightKeyString,\n\tparseAthenaRightKey,\n\ttype AthenaRightKey,\n} from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tstorageErrorResult,\n} from \"./errors.ts\";\nimport type { StorageObjectOp, StorageObjectResult } from \"./types.ts\";\n\nconst STORAGE_GET = parseAthenaRightKey(\"storage.get\");\nconst STORAGE_HEAD = parseAthenaRightKey(\"storage.head\");\nconst STORAGE_LIST = parseAthenaRightKey(\"storage.list\");\nconst STORAGE_PUT = parseAthenaRightKey(\"storage.put\");\nconst STORAGE_DELETE = parseAthenaRightKey(\"storage.delete\");\n\nconst STORAGE_OPERATION_RIGHTS: Record<StorageObjectOp, AthenaRightKey> = {\n\tdelete: STORAGE_DELETE,\n\tget: STORAGE_GET,\n\thead: STORAGE_HEAD,\n\tlist: STORAGE_LIST,\n\tput: STORAGE_PUT,\n};\n\nexport function requiredStorageRight(op: StorageObjectOp): AthenaRightKey {\n\treturn STORAGE_OPERATION_RIGHTS[op];\n}\n\nexport function listStorageRightKeys(): readonly AthenaRightKey[] {\n\treturn Object.values(STORAGE_OPERATION_RIGHTS);\n}\n\n/**\n * Rights gate for Storage Nucleus. Grants are never consulted.\n * Returns a deny result, or undefined when the principal holds the Right.\n */\nexport function authorizeStorageOperation(\n\tprincipal: AthenaPrincipal,\n\top: StorageObjectOp,\n): StorageObjectResult | undefined {\n\tif (!principal.authenticated) {\n\t\treturn storageErrorResult(\n\t\t\t3003,\n\t\t\t\"storage_unauthenticated\",\n\t\t\t\"authentication is required\",\n\t\t\t401,\n\t\t);\n\t}\n\tconst required = requiredStorageRight(op);\n\tconst missing = missingRequiredRights(principal.rights, [required]);\n\tif (missing.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn storageErrorResult(\n\t\tnew AthenaStorageAuthorizationError({\n\t\t\tmissing: missing.map(athenaRightKeyString),\n\t\t\toperation: op,\n\t\t}),\n\t);\n}\n","import { BILLING_OPERATION_RIGHTS } from \"../../billing/runtime/rights.ts\";\nimport { parseAthenaRightKey, type AthenaRightKey } from \"../../rights/key.ts\";\nimport { listStorageRightKeys } from \"../../storage/runtime/rights.ts\";\nimport type {\n\tAthenaAuthorizationRightDefinition,\n\tAthenaAuthorizationRiskLevel,\n\tAthenaAuthorizationScopeKind,\n} from \"./types.ts\";\n\nexport const AUTHORIZATION_CATALOG_VERSION = 1;\n\nexport function defineAthenaRight(input: {\n\tdescription: string;\n\tdisplayName: string;\n\tdomain: string;\n\tkey: string;\n\trisk?: AthenaAuthorizationRiskLevel;\n\tscope: AthenaAuthorizationScopeKind;\n\tassignable?: boolean;\n}): AthenaAuthorizationRightDefinition {\n\treturn {\n\t\tassignable: input.assignable !== false,\n\t\tdescription: input.description,\n\t\tdisplayName: input.displayName,\n\t\tdomain: input.domain,\n\t\tkey: parseAthenaRightKey(input.key),\n\t\triskLevel: input.risk ?? \"low\",\n\t\tscopeKind: input.scope,\n\t};\n}\n\nconst ORGANIZATION_RIGHTS: readonly AthenaAuthorizationRightDefinition[] = [\n\tdefineAthenaRight({\n\t\tdescription: \"List organization members and invitations\",\n\t\tdisplayName: \"View members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.read\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Invite, change role, or remove organization members\",\n\t\tdisplayName: \"Manage members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.write\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Assign the organization owner role\",\n\t\tdisplayName: \"Assign owners\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.owners.assign\",\n\t\trisk: \"critical\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Delete the organization\",\n\t\tdisplayName: \"Delete organization\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.lifecycle.delete\",\n\t\trisk: \"critical\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Send organization invitations\",\n\t\tdisplayName: \"Invite members\",\n\t\tdomain: \"organization\",\n\t\tkey: \"organization.members.invite\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"View organization role templates and assignments\",\n\t\tdisplayName: \"View organization roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.roles.read\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Create or clone organization roles\",\n\t\tdisplayName: \"Manage organization roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.roles.write\",\n\t\trisk: \"elevated\",\n\t\tscope: \"organization\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"View platform role templates\",\n\t\tdisplayName: \"View platform roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.platform.read\",\n\t\tscope: \"platform\",\n\t}),\n\tdefineAthenaRight({\n\t\tdescription: \"Assign platform roles\",\n\t\tdisplayName: \"Manage platform roles\",\n\t\tdomain: \"authorization\",\n\t\tkey: \"authorization.platform.write\",\n\t\trisk: \"critical\",\n\t\tscope: \"platform\",\n\t}),\n];\n\nconst BILLING_RIGHT_META: Record<\n\tstring,\n\tPick<AthenaAuthorizationRightDefinition, \"displayName\" | \"description\" | \"scopeKind\" | \"riskLevel\">\n> = {\n\t\"billing.admin.conflicts.write\": {\n\t\tdescription: \"Resolve billing ingestion conflicts\",\n\t\tdisplayName: \"Resolve billing conflicts\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.ingestion.read\": {\n\t\tdescription: \"View billing ingestion health\",\n\t\tdisplayName: \"View billing ingestion\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.reconciliation.write\": {\n\t\tdescription: \"Run billing reconciliation\",\n\t\tdisplayName: \"Run billing reconciliation\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.webhooks.read\": {\n\t\tdescription: \"View billing webhook status\",\n\t\tdisplayName: \"View billing webhooks\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.admin.webhooks.write\": {\n\t\tdescription: \"Reconcile or verify billing webhooks\",\n\t\tdisplayName: \"Manage billing webhooks\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.catalog.read\": {\n\t\tdescription: \"List Athena-owned products and prices\",\n\t\tdisplayName: \"View catalog\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.customers.read\": {\n\t\tdescription: \"Read merchant customer records\",\n\t\tdisplayName: \"View customers\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.customers.write\": {\n\t\tdescription: \"Create or update merchant customers\",\n\t\tdisplayName: \"Manage customers\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.payment-links.read\": {\n\t\tdescription: \"View payment links\",\n\t\tdisplayName: \"View payment links\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payment-links.write\": {\n\t\tdescription: \"Create or update payment links\",\n\t\tdisplayName: \"Manage payment links\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payments.read\": {\n\t\tdescription: \"List merchant-wide payments\",\n\t\tdisplayName: \"View all payments\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.payments.write\": {\n\t\tdescription: \"Create or cancel merchant payments\",\n\t\tdisplayName: \"Manage payments\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.refunds.read\": {\n\t\tdescription: \"View refunds\",\n\t\tdisplayName: \"View refunds\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.refunds.write\": {\n\t\tdescription: \"Create refunds\",\n\t\tdisplayName: \"Manage refunds\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.sales-invoices.read\": {\n\t\tdescription: \"View sales invoices\",\n\t\tdisplayName: \"View invoices\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.self.checkout.write\": {\n\t\tdescription: \"Start or resume own checkout\",\n\t\tdisplayName: \"Checkout\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.invoices.read\": {\n\t\tdescription: \"View own invoices\",\n\t\tdisplayName: \"View own invoices\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.payments.read\": {\n\t\tdescription: \"View payments belonging to the current account\",\n\t\tdisplayName: \"View own payments\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.subscription.read\": {\n\t\tdescription: \"View own subscription\",\n\t\tdisplayName: \"View own subscription\",\n\t\triskLevel: \"low\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.self.subscription.write\": {\n\t\tdescription: \"Enroll or cancel own subscription\",\n\t\tdisplayName: \"Manage own subscription\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"self\",\n\t},\n\t\"billing.subscriptions.read\": {\n\t\tdescription: \"View merchant subscriptions\",\n\t\tdisplayName: \"View subscriptions\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.subscriptions.write\": {\n\t\tdescription: \"Create or cancel merchant subscriptions\",\n\t\tdisplayName: \"Manage subscriptions\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.webhooks.read\": {\n\t\tdescription: \"View webhook endpoints\",\n\t\tdisplayName: \"View webhooks\",\n\t\triskLevel: \"elevated\",\n\t\tscopeKind: \"platform\",\n\t},\n\t\"billing.webhooks.write\": {\n\t\tdescription: \"Create or update webhook endpoints\",\n\t\tdisplayName: \"Manage webhooks\",\n\t\triskLevel: \"critical\",\n\t\tscopeKind: \"platform\",\n\t},\n};\n\nfunction uniqueBillingRightKeys(): AthenaRightKey[] {\n\tconst keys = new Set<string>();\n\tfor (const required of Object.values(BILLING_OPERATION_RIGHTS)) {\n\t\tfor (const key of required) {\n\t\t\tkeys.add(key);\n\t\t}\n\t}\n\treturn [...keys].sort().map((key) => parseAthenaRightKey(key));\n}\n\nfunction billingDescriptors(): AthenaAuthorizationRightDefinition[] {\n\treturn uniqueBillingRightKeys().map((key) => {\n\t\tconst meta = BILLING_RIGHT_META[key];\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tdescription: meta?.description ?? `Billing right ${key}`,\n\t\t\tdisplayName: meta?.displayName ?? key,\n\t\t\tdomain: \"billing\",\n\t\t\tkey,\n\t\t\triskLevel: meta?.riskLevel ?? \"elevated\",\n\t\t\tscopeKind: meta?.scopeKind ?? \"platform\",\n\t\t};\n\t});\n}\n\nfunction storageDescriptors(): AthenaAuthorizationRightDefinition[] {\n\treturn listStorageRightKeys().map((key) =>\n\t\tdefineAthenaRight({\n\t\t\tdescription: `Storage ${key}`,\n\t\t\tdisplayName: key === \"storage.get\" ? \"Read files\" : key,\n\t\t\tdomain: \"storage\",\n\t\t\tkey,\n\t\t\tscope: \"self\",\n\t\t}),\n\t);\n}\n\nlet cached: readonly AthenaAuthorizationRightDefinition[] | undefined;\n\nexport function listAthenaAuthorizationRights(): readonly AthenaAuthorizationRightDefinition[] {\n\tcached ??= Object.freeze([\n\t\t...billingDescriptors(),\n\t\t...storageDescriptors(),\n\t\t...ORGANIZATION_RIGHTS,\n\t]);\n\treturn cached;\n}\n\nexport function getAthenaAuthorizationRight(\n\tkey: string,\n): AthenaAuthorizationRightDefinition | undefined {\n\treturn listAthenaAuthorizationRights().find((entry) => entry.key === key);\n}\n\nexport function assertBillingOperationsReferenceCatalog(): void {\n\tconst registered = new Set(\n\t\tlistAthenaAuthorizationRights().map((entry) => entry.key),\n\t);\n\tfor (const [operation, required] of Object.entries(BILLING_OPERATION_RIGHTS)) {\n\t\tfor (const key of required) {\n\t\t\tif (!registered.has(key)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Billing operation ${operation} references unregistered right ${key}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const ORGANIZATION_MEMBERS_READ = parseAthenaRightKey(\n\t\"organization.members.read\",\n);\nexport const ORGANIZATION_MEMBERS_WRITE = parseAthenaRightKey(\n\t\"organization.members.write\",\n);\nexport const ORGANIZATION_OWNERS_ASSIGN = parseAthenaRightKey(\n\t\"organization.owners.assign\",\n);\nexport const ORGANIZATION_LIFECYCLE_DELETE = parseAthenaRightKey(\n\t\"organization.lifecycle.delete\",\n);\nexport const ORGANIZATION_MEMBERS_INVITE = parseAthenaRightKey(\n\t\"organization.members.invite\",\n);\nexport const AUTHORIZATION_ROLES_READ = parseAthenaRightKey(\n\t\"authorization.roles.read\",\n);\nexport const AUTHORIZATION_ROLES_WRITE = parseAthenaRightKey(\n\t\"authorization.roles.write\",\n);\nexport const AUTHORIZATION_PLATFORM_READ = parseAthenaRightKey(\n\t\"authorization.platform.read\",\n);\nexport const AUTHORIZATION_PLATFORM_WRITE = parseAthenaRightKey(\n\t\"authorization.platform.write\",\n);\nexport const BILLING_PAYMENTS_READ = parseAthenaRightKey(\"billing.payments.read\");\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n\tAUTHORIZATION_PLATFORM_WRITE,\n\tAUTHORIZATION_ROLES_WRITE,\n\tORGANIZATION_LIFECYCLE_DELETE,\n\tORGANIZATION_MEMBERS_INVITE,\n\tORGANIZATION_MEMBERS_WRITE,\n} from \"./catalog.ts\";\nimport type { AuthorizationCapabilities } from \"./types.ts\";\n\nexport function capabilitiesFromRights(\n\trights: readonly AthenaRightKey[],\n): AuthorizationCapabilities {\n\tconst holds = (required: AthenaRightKey) =>\n\t\tmissingRequiredRights(rights, [required]).length === 0;\n\tconst canManageMembers = holds(ORGANIZATION_MEMBERS_WRITE);\n\treturn {\n\t\tcanChangeMemberRole: canManageMembers,\n\t\tcanDeleteOrganization: holds(ORGANIZATION_LIFECYCLE_DELETE),\n\t\tcanInviteMembers: canManageMembers || holds(ORGANIZATION_MEMBERS_INVITE),\n\t\tcanManageOrganizationRoles: holds(AUTHORIZATION_ROLES_WRITE),\n\t\tcanManagePlatformRoles: holds(AUTHORIZATION_PLATFORM_WRITE),\n\t\tcanRemoveMember: canManageMembers,\n\t};\n}\n","import { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AthenaAuthorizationRoleScope } from \"./types.ts\";\n\n/**\n * Organization custom roles are tenant-owned. Built-in organization templates\n * (`organization_id` NULL) may be cloned into the actor's organization.\n * Another organization's custom role must never be a clone source.\n */\nexport function assertCloneRoleTenantBoundary(input: {\n\tsourceOrganizationId: string | null;\n\tsourceScopeKind: AthenaAuthorizationRoleScope;\n\ttargetOrganizationId: string | null | undefined;\n}): void {\n\tconst targetOrganizationId = input.targetOrganizationId ?? null;\n\tif (input.sourceScopeKind === \"platform\" && targetOrganizationId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Platform roles cannot be cloned into an organization\",\n\t\t);\n\t}\n\tif (input.sourceScopeKind === \"organization\" && !targetOrganizationId) {\n\t\tthrow AthenaAuthRuntimeError.badRequest(\n\t\t\t\"Organization roles must be cloned into an organization\",\n\t\t);\n\t}\n\tif (\n\t\tinput.sourceScopeKind === \"organization\" &&\n\t\tinput.sourceOrganizationId !== null &&\n\t\tinput.sourceOrganizationId !== targetOrganizationId\n\t) {\n\t\tthrow AthenaAuthRuntimeError.forbidden();\n\t}\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport type {\n\tAthenaAuthorizationRoleDetail,\n\tAthenaAuthorizationRoleRecord,\n\tRoleDescriptor,\n} from \"./types.ts\";\n\nexport function toRoleDescriptor(\n\trole: AthenaAuthorizationRoleRecord,\n\tcounts: { assignmentCount: number; rightCount: number },\n\tdescription?: string,\n): RoleDescriptor {\n\treturn {\n\t\tassignable: role.assignable,\n\t\tassignmentCount: counts.assignmentCount,\n\t\t...(description ? { description } : {}),\n\t\tdisplayName: role.name,\n\t\tid: role.id,\n\t\tkey: role.key,\n\t\torganizationId: role.organizationId,\n\t\tprotected: role.protected,\n\t\trightCount: counts.rightCount,\n\t\tscopeKind: role.scopeKind,\n\t\tsystemKind: role.systemKind,\n\t\tversion: role.version,\n\t};\n}\n\nexport function toRoleDetail(\n\trole: AthenaAuthorizationRoleRecord,\n\trights: readonly AthenaRightKey[],\n\tassignmentCount: number,\n): AthenaAuthorizationRoleDetail {\n\treturn {\n\t\t...role,\n\t\tassignmentCount,\n\t\trightCount: rights.length,\n\t\trights,\n\t};\n}\n","import { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tgetAthenaAuthorizationRight,\n} from \"./catalog.ts\";\nimport type {\n\tAthenaAuthorizationRoleRecord,\n\tAthenaAuthorizationRoleScope,\n\tAthenaAuthorizationScopeKind,\n} from \"./types.ts\";\n\nexport const AUTHORIZATION_ROLE_PROTECTED = \"AUTHORIZATION_ROLE_PROTECTED\";\nexport const AUTHORIZATION_ROLE_VERSION_CONFLICT =\n\t\"AUTHORIZATION_ROLE_VERSION_CONFLICT\";\nexport const AUTHORIZATION_ROLE_HAS_ASSIGNMENTS =\n\t\"AUTHORIZATION_ROLE_HAS_ASSIGNMENTS\";\nexport const AUTHORIZATION_RIGHT_UNKNOWN = \"AUTHORIZATION_RIGHT_UNKNOWN\";\nexport const AUTHORIZATION_RIGHT_NOT_ASSIGNABLE =\n\t\"AUTHORIZATION_RIGHT_NOT_ASSIGNABLE\";\nexport const AUTHORIZATION_RIGHT_SCOPE_MISMATCH =\n\t\"AUTHORIZATION_RIGHT_SCOPE_MISMATCH\";\nexport const AUTHORIZATION_ROLE_NOT_FOUND = \"AUTHORIZATION_ROLE_NOT_FOUND\";\nexport const AUTHORIZATION_REASSIGNMENT_INVALID =\n\t\"AUTHORIZATION_REASSIGNMENT_INVALID\";\n\nfunction authorizationError(\n\tstatus: number,\n\tcode: string,\n\tmessage: string,\n): AthenaAuthRuntimeError {\n\treturn new AthenaAuthRuntimeError(status, message, { code });\n}\n\nexport function throwRoleProtected(): never {\n\tthrow authorizationError(\n\t\t403,\n\t\tAUTHORIZATION_ROLE_PROTECTED,\n\t\t\"Protected roles cannot be renamed, deleted, or have their rights changed\",\n\t);\n}\n\nexport function throwRoleVersionConflict(): never {\n\tthrow authorizationError(\n\t\t409,\n\t\tAUTHORIZATION_ROLE_VERSION_CONFLICT,\n\t\t\"Role version conflict\",\n\t);\n}\n\nexport function throwRoleHasAssignments(): never {\n\tthrow authorizationError(\n\t\t409,\n\t\tAUTHORIZATION_ROLE_HAS_ASSIGNMENTS,\n\t\t\"Role has assignments\",\n\t);\n}\n\nexport function throwRoleNotFound(): never {\n\tthrow authorizationError(404, AUTHORIZATION_ROLE_NOT_FOUND, \"Role not found\");\n}\n\nexport function throwReassignmentInvalid(message = \"Invalid reassignment role\"): never {\n\tthrow authorizationError(400, AUTHORIZATION_REASSIGNMENT_INVALID, message);\n}\n\nexport function assertProtectedRoleImmutable(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"protected\">,\n): void {\n\tif (role.protected) {\n\t\tthrowRoleProtected();\n\t}\n}\n\nexport function assertExpectedVersion(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"version\">,\n\texpectedVersion: number,\n): void {\n\tif (role.version !== expectedVersion) {\n\t\tthrowRoleVersionConflict();\n\t}\n}\n\nfunction rightAllowedOnRoleScope(\n\troleScope: AthenaAuthorizationRoleScope,\n\trightScope: AthenaAuthorizationScopeKind,\n): boolean {\n\tif (rightScope === \"self\") {\n\t\treturn true;\n\t}\n\tif (roleScope === \"platform\") {\n\t\treturn rightScope === \"platform\";\n\t}\n\treturn rightScope === \"organization\";\n}\n\nexport function assertRoleRightAssignmentAllowed(input: {\n\torganizationId?: string | null;\n\tright: string;\n\troleScope: AthenaAuthorizationRoleScope;\n}): void {\n\tvoid input.organizationId;\n\tconst parsed = tryParseAthenaRightKey(input.right);\n\tif (!parsed) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_UNKNOWN,\n\t\t\t\"Unknown authorization right\",\n\t\t);\n\t}\n\tconst definition = getAthenaAuthorizationRight(parsed);\n\tif (!definition) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_UNKNOWN,\n\t\t\t\"Unknown authorization right\",\n\t\t);\n\t}\n\tif (!definition.assignable) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_NOT_ASSIGNABLE,\n\t\t\t\"Right is not assignable\",\n\t\t);\n\t}\n\tif (!rightAllowedOnRoleScope(input.roleScope, definition.scopeKind)) {\n\t\tthrow authorizationError(\n\t\t\t400,\n\t\t\tAUTHORIZATION_RIGHT_SCOPE_MISMATCH,\n\t\t\t\"Right is not allowed on this role scope\",\n\t\t);\n\t}\n}\n\nexport function assertRightsReplaceAllowed(input: {\n\torganizationId?: string | null;\n\trights: readonly string[];\n\troleScope: AthenaAuthorizationRoleScope;\n}): void {\n\tfor (const right of input.rights) {\n\t\tassertRoleRightAssignmentAllowed({\n\t\t\torganizationId: input.organizationId,\n\t\t\tright,\n\t\t\troleScope: input.roleScope,\n\t\t});\n\t}\n}\n\nexport function requireExpectedVersion(value: unknown): number {\n\tif (typeof value === \"number\" && Number.isInteger(value) && value >= 1) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && /^\\d+$/.test(value.trim())) {\n\t\tconst parsed = Number(value.trim());\n\t\tif (parsed >= 1) {\n\t\t\treturn parsed;\n\t\t}\n\t}\n\tthrow AthenaAuthRuntimeError.badRequest(\"expectedVersion is required\");\n}\n","import type { AuthorizationCapabilities, RoleDescriptor } from \"./types.ts\";\n\nexport function projectAssignableRoles(input: {\n\tactiveOrganizationId?: string | null;\n\tcapabilities: AuthorizationCapabilities;\n\troles: readonly RoleDescriptor[];\n}): RoleDescriptor[] {\n\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\tconst { capabilities } = input;\n\treturn input.roles.filter((role) => {\n\t\tif (!role.assignable) {\n\t\t\treturn false;\n\t\t}\n\t\tif (role.scopeKind === \"platform\") {\n\t\t\treturn capabilities.canManagePlatformRoles;\n\t\t}\n\t\tif (organizationId.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (\n\t\t\trole.organizationId !== null &&\n\t\t\trole.organizationId !== organizationId\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (role.organizationId === organizationId) {\n\t\t\treturn (\n\t\t\t\tcapabilities.canManageOrganizationRoles ||\n\t\t\t\tcapabilities.canChangeMemberRole ||\n\t\t\t\tcapabilities.canInviteMembers\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\tcapabilities.canManageOrganizationRoles ||\n\t\t\tcapabilities.canChangeMemberRole ||\n\t\t\tcapabilities.canInviteMembers\n\t\t);\n\t});\n}\n","import { parseAthenaRightKey, type AthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tAUTHORIZATION_PLATFORM_READ,\n\tAUTHORIZATION_PLATFORM_WRITE,\n\tAUTHORIZATION_ROLES_READ,\n\tAUTHORIZATION_ROLES_WRITE,\n\tORGANIZATION_MEMBERS_INVITE,\n\tORGANIZATION_MEMBERS_READ,\n\tORGANIZATION_MEMBERS_WRITE,\n\tORGANIZATION_OWNERS_ASSIGN,\n\tORGANIZATION_LIFECYCLE_DELETE,\n\tlistAthenaAuthorizationRights,\n} from \"./catalog.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"./types.ts\";\n\nexport const PLATFORM_ADMIN_ROLE = \"platform_admin\";\nexport const PLATFORM_CUSTOMER_ROLE = \"platform_customer\";\nexport const PLATFORM_UNAUTHORIZED_ROLE = \"platform_unauthorized\";\nexport const ORGANIZATION_OWNER_ROLE = \"organization_owner\";\nexport const ORGANIZATION_ADMIN_ROLE = \"organization_admin\";\nexport const ORGANIZATION_MEMBER_ROLE = \"organization_member\";\n\nexport interface BuiltInAuthorizationRoleTemplate {\n\tassignable: boolean;\n\tdescription: string;\n\tid: string;\n\tkey: string;\n\tname: string;\n\tprotected: boolean;\n\trights: readonly AthenaRightKey[];\n\tscopeKind: \"platform\" | \"organization\";\n\tsystemKind: \"owner\" | \"admin\" | \"member\" | null;\n}\n\nfunction billingKeysMatching(\n\tpredicate: (key: string) => boolean,\n): AthenaRightKey[] {\n\treturn listAthenaAuthorizationRights()\n\t\t.filter((entry) => entry.domain === \"billing\" && predicate(entry.key))\n\t\t.map((entry) => entry.key);\n}\n\nfunction storageKeys(): AthenaRightKey[] {\n\treturn listAthenaAuthorizationRights()\n\t\t.filter((entry) => entry.domain === \"storage\")\n\t\t.map((entry) => entry.key);\n}\n\nconst CUSTOMER_BILLING: readonly AthenaRightKey[] = Object.freeze([\n\tparseAthenaRightKey(\"billing.catalog.read\"),\n\tparseAthenaRightKey(\"billing.self.invoices.read\"),\n\tparseAthenaRightKey(\"billing.self.payments.read\"),\n\tparseAthenaRightKey(\"billing.self.subscription.read\"),\n\tparseAthenaRightKey(\"billing.self.subscription.write\"),\n\tparseAthenaRightKey(\"billing.self.checkout.write\"),\n\tparseAthenaRightKey(\"billing.customers.write\"),\n]);\n\nexport const BUILTIN_AUTHORIZATION_ROLES: readonly BuiltInAuthorizationRoleTemplate[] =\n\tObject.freeze([\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Platform operator\",\n\t\t\tid: PLATFORM_ADMIN_ROLE,\n\t\t\tkey: PLATFORM_ADMIN_ROLE,\n\t\t\tname: \"Platform administrator\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\t...billingKeysMatching(() => true),\n\t\t\t\t...storageKeys(),\n\t\t\t\tAUTHORIZATION_PLATFORM_READ,\n\t\t\t\tAUTHORIZATION_PLATFORM_WRITE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: \"admin\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Customer account\",\n\t\t\tid: PLATFORM_CUSTOMER_ROLE,\n\t\t\tkey: PLATFORM_CUSTOMER_ROLE,\n\t\t\tname: \"Customer\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\t...CUSTOMER_BILLING,\n\t\t\t\t...storageKeys().filter((key) => key !== \"storage.put\" && key !== \"storage.delete\"),\n\t\t\t]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: \"member\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"No rights\",\n\t\t\tid: PLATFORM_UNAUTHORIZED_ROLE,\n\t\t\tkey: PLATFORM_UNAUTHORIZED_ROLE,\n\t\t\tname: \"Unauthorized\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([]),\n\t\t\tscopeKind: \"platform\",\n\t\t\tsystemKind: null,\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization owner\",\n\t\t\tid: ORGANIZATION_OWNER_ROLE,\n\t\t\tkey: ORGANIZATION_OWNER_ROLE,\n\t\t\tname: \"Organization owner\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t\t\tORGANIZATION_MEMBERS_INVITE,\n\t\t\t\tORGANIZATION_OWNERS_ASSIGN,\n\t\t\t\tORGANIZATION_LIFECYCLE_DELETE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t\tAUTHORIZATION_ROLES_WRITE,\n\t\t\t]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"owner\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization administrator\",\n\t\t\tid: ORGANIZATION_ADMIN_ROLE,\n\t\t\tkey: ORGANIZATION_ADMIN_ROLE,\n\t\t\tname: \"Organization administrator\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([\n\t\t\t\tORGANIZATION_MEMBERS_READ,\n\t\t\t\tORGANIZATION_MEMBERS_WRITE,\n\t\t\t\tORGANIZATION_MEMBERS_INVITE,\n\t\t\t\tAUTHORIZATION_ROLES_READ,\n\t\t\t]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"admin\",\n\t\t},\n\t\t{\n\t\t\tassignable: true,\n\t\t\tdescription: \"Organization member\",\n\t\t\tid: ORGANIZATION_MEMBER_ROLE,\n\t\t\tkey: ORGANIZATION_MEMBER_ROLE,\n\t\t\tname: \"Organization member\",\n\t\t\tprotected: true,\n\t\t\trights: Object.freeze([ORGANIZATION_MEMBERS_READ]),\n\t\t\tscopeKind: \"organization\",\n\t\t\tsystemKind: \"member\",\n\t\t},\n\t]);\n\nexport function mapLegacyUserRole(role: string | null | undefined): string {\n\tconst trimmed = role?.trim() ?? \"\";\n\tif (trimmed === \"admin\") {\n\t\treturn PLATFORM_ADMIN_ROLE;\n\t}\n\tif (trimmed === \"unauthorized\") {\n\t\treturn PLATFORM_UNAUTHORIZED_ROLE;\n\t}\n\tif (trimmed === \"\" || trimmed === \"customer\") {\n\t\treturn PLATFORM_CUSTOMER_ROLE;\n\t}\n\treturn PLATFORM_UNAUTHORIZED_ROLE;\n}\n\nexport function mapLegacyMemberRole(role: string | null | undefined): string {\n\tconst trimmed = role?.trim().toLowerCase() ?? \"member\";\n\tif (trimmed === \"owner\") {\n\t\treturn ORGANIZATION_OWNER_ROLE;\n\t}\n\tif (trimmed === \"admin\") {\n\t\treturn ORGANIZATION_ADMIN_ROLE;\n\t}\n\tif (trimmed === \"member\") {\n\t\treturn ORGANIZATION_MEMBER_ROLE;\n\t}\n\treturn ORGANIZATION_MEMBER_ROLE;\n}\n\nexport function resolveMemberAssignmentRole(\n\trole: string | null | undefined,\n): string {\n\tconst trimmed = role?.trim() ?? \"member\";\n\tconst lower = trimmed.toLowerCase();\n\tif (lower === \"owner\" || lower === ORGANIZATION_OWNER_ROLE) {\n\t\treturn ORGANIZATION_OWNER_ROLE;\n\t}\n\tif (lower === \"admin\" || lower === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn ORGANIZATION_ADMIN_ROLE;\n\t}\n\tif (lower === \"member\" || lower === ORGANIZATION_MEMBER_ROLE) {\n\t\treturn ORGANIZATION_MEMBER_ROLE;\n\t}\n\treturn trimmed;\n}\n\nexport function persistedMemberRole(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">,\n): string {\n\tif (role.systemKind === \"owner\") {\n\t\treturn \"owner\";\n\t}\n\tif (role.systemKind === \"admin\") {\n\t\treturn \"admin\";\n\t}\n\tif (role.systemKind === \"member\") {\n\t\treturn \"member\";\n\t}\n\treturn role.key;\n}\n\nexport function grantRankRole(\n\trole: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">,\n): string {\n\tif (role.systemKind === \"owner\" || role.key === ORGANIZATION_OWNER_ROLE) {\n\t\treturn \"owner\";\n\t}\n\tif (role.systemKind === \"admin\" || role.key === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\tif (role.systemKind === \"member\" || role.key === ORGANIZATION_MEMBER_ROLE) {\n\t\treturn \"member\";\n\t}\n\treturn \"admin\";\n}\n\nexport function builtinRoleRecord(\n\ttemplate: BuiltInAuthorizationRoleTemplate,\n): AthenaAuthorizationRoleRecord {\n\treturn {\n\t\tassignable: template.assignable,\n\t\tid: template.id,\n\t\tkey: template.key,\n\t\tname: template.name,\n\t\torganizationId: null,\n\t\tprotected: template.protected,\n\t\tscopeKind: template.scopeKind,\n\t\tsystemKind: template.systemKind,\n\t\tversion: 1,\n\t};\n}\n\nexport function compatibilityMemberRole(roleKey: string): string {\n\tif (roleKey === ORGANIZATION_OWNER_ROLE) {\n\t\treturn \"owner\";\n\t}\n\tif (roleKey === ORGANIZATION_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\treturn \"member\";\n}\n\nexport function compatibilityUserRole(roleKey: string): string | null {\n\tif (roleKey === PLATFORM_ADMIN_ROLE) {\n\t\treturn \"admin\";\n\t}\n\tif (roleKey === PLATFORM_UNAUTHORIZED_ROLE) {\n\t\treturn \"unauthorized\";\n\t}\n\tif (roleKey === PLATFORM_CUSTOMER_ROLE) {\n\t\treturn \"customer\";\n\t}\n\treturn null;\n}\n","import type { AthenaAuthDatabase } from \"../../auth/local/database.ts\";\nimport { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport {\n\tFOUNDING_OWNER_REMOVE_FORBIDDEN,\n\tFOUNDING_OWNER_ROLE_LOCKED,\n} from \"../../auth/local/organization-invariants.ts\";\nimport { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { capabilitiesFromRights } from \"./capabilities.ts\";\nimport {\n\tAUTHORIZATION_CATALOG_VERSION,\n\tlistAthenaAuthorizationRights,\n} from \"./catalog.ts\";\nimport { assertCloneRoleTenantBoundary } from \"./clone-source.ts\";\nimport { toRoleDescriptor, toRoleDetail } from \"./role-descriptor.ts\";\nimport {\n\tassertProtectedRoleImmutable,\n\tassertRightsReplaceAllowed,\n\tthrowReassignmentInvalid,\n\tthrowRoleHasAssignments,\n\tthrowRoleNotFound,\n\tthrowRoleVersionConflict,\n} from \"./role-invariants.ts\";\nimport { projectAssignableRoles } from \"./snapshot-catalog.ts\";\nimport type { AthenaAuthorizationStore } from \"./store.ts\";\nimport {\n\tBUILTIN_AUTHORIZATION_ROLES,\n\tmapLegacyMemberRole,\n\tmapLegacyUserRole,\n\tORGANIZATION_OWNER_ROLE,\n\tresolveMemberAssignmentRole,\n} from \"./templates.ts\";\nimport type {\n\tAssignedRoleSummary,\n\tAthenaAuthorizationRoleDetail,\n\tAthenaAuthorizationRoleRecord,\n\tAuthorizationSnapshot,\n\tMemberAuthorizationActions,\n\tRoleDescriptor,\n} from \"./types.ts\";\n\ninterface RoleRow {\n\tassignable: boolean;\n\tid: string;\n\tkey: string;\n\tname: string;\n\torganization_id: string | null;\n\tprotected: boolean;\n\tscope_kind: \"platform\" | \"organization\";\n\tsystem_kind: \"owner\" | \"admin\" | \"member\" | null;\n\tversion: number;\n}\n\nfunction mapRoleRow(row: RoleRow): AthenaAuthorizationRoleRecord {\n\treturn {\n\t\tassignable: row.assignable,\n\t\tid: row.id,\n\t\tkey: row.key,\n\t\tname: row.name,\n\t\torganizationId: row.organization_id,\n\t\tprotected: row.protected,\n\t\tscopeKind: row.scope_kind,\n\t\tsystemKind: row.system_kind,\n\t\tversion: row.version,\n\t};\n}\n\nexport class PostgresAuthorizationStore implements AthenaAuthorizationStore {\n\tconstructor(private readonly db: AthenaAuthDatabase) { }\n\n\tasync materialize(): Promise<void> {\n\t\tfor (const right of listAthenaAuthorizationRights()) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_rights (\n\t\t\t\t\tkey, domain, display_name, description, scope_kind, risk_level,\n\t\t\t\t\tassignable, source_version\n\t\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n\t\t\t\tON CONFLICT (key) DO UPDATE SET\n\t\t\t\t\tdomain = EXCLUDED.domain,\n\t\t\t\t\tdisplay_name = EXCLUDED.display_name,\n\t\t\t\t\tdescription = EXCLUDED.description,\n\t\t\t\t\tscope_kind = EXCLUDED.scope_kind,\n\t\t\t\t\trisk_level = EXCLUDED.risk_level,\n\t\t\t\t\tassignable = EXCLUDED.assignable,\n\t\t\t\t\tsource_version = EXCLUDED.source_version`,\n\t\t\t\t[\n\t\t\t\t\tright.key,\n\t\t\t\t\tright.domain,\n\t\t\t\t\tright.displayName,\n\t\t\t\t\tright.description,\n\t\t\t\t\tright.scopeKind,\n\t\t\t\t\tright.riskLevel,\n\t\t\t\t\tright.assignable,\n\t\t\t\t\tAUTHORIZATION_CATALOG_VERSION,\n\t\t\t\t],\n\t\t\t);\n\t\t}\n\t\tfor (const template of BUILTIN_AUTHORIZATION_ROLES) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\t\tprotected, assignable, version\n\t\t\t\t) VALUES ($1, $2, $3, $4, NULL, $5, $6, $7, 1)\n\t\t\t\tON CONFLICT (id) DO UPDATE SET\n\t\t\t\t\tname = EXCLUDED.name,\n\t\t\t\t\tscope_kind = EXCLUDED.scope_kind,\n\t\t\t\t\tsystem_kind = EXCLUDED.system_kind,\n\t\t\t\t\tprotected = EXCLUDED.protected,\n\t\t\t\t\tassignable = EXCLUDED.assignable,\n\t\t\t\t\tupdated_at = NOW()`,\n\t\t\t\t[\n\t\t\t\t\ttemplate.id,\n\t\t\t\t\ttemplate.key,\n\t\t\t\t\ttemplate.name,\n\t\t\t\t\ttemplate.scopeKind,\n\t\t\t\t\ttemplate.systemKind,\n\t\t\t\t\ttemplate.protected,\n\t\t\t\t\ttemplate.assignable,\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait this.db.query(\n\t\t\t\t`DELETE FROM athena.authorization_role_rights WHERE role_id = $1`,\n\t\t\t\t[template.id],\n\t\t\t);\n\t\t\tfor (const key of template.rights) {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\t\t VALUES ($1, $2)\n\t\t\t\t\t ON CONFLICT DO NOTHING`,\n\t\t\t\t\t[template.id, key],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') = 'admin'\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_admin\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') = 'unauthorized'\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_unauthorized\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE COALESCE(u.role, '') IN ('', 'customer')\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_customer\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id)\n\t\t\t SELECT u.id, r.id\n\t\t\t FROM athena.users u\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = $1\n\t\t\t  AND r.organization_id IS NULL\n\t\t\t WHERE u.role IS NOT NULL\n\t\t\t   AND u.role NOT IN ('admin', 'unauthorized', 'customer')\n\t\t\t   AND NOT EXISTS (\n\t\t\t     SELECT 1 FROM athena.authorization_user_roles a WHERE a.user_id = u.id\n\t\t\t   )`,\n\t\t\t[\"platform_unauthorized\"],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_member_roles (member_id, role_id)\n\t\t\t SELECT m.id, r.id\n\t\t\t FROM athena.member m\n\t\t\t JOIN athena.authorization_roles r\n\t\t\t   ON r.id = CASE\n\t\t\t     WHEN m.role = 'owner' THEN 'organization_owner'\n\t\t\t     WHEN m.role = 'admin' THEN 'organization_admin'\n\t\t\t     ELSE 'organization_member'\n\t\t\t   END\n\t\t\t WHERE NOT EXISTS (\n\t\t\t   SELECT 1 FROM athena.authorization_member_roles a WHERE a.member_id = m.id\n\t\t\t )`,\n\t\t);\n\t}\n\n\tasync hasUserAssignment(userId: string): Promise<boolean> {\n\t\tconst result = await this.db.query(\n\t\t\t`SELECT 1 FROM athena.authorization_user_roles WHERE user_id = $1`,\n\t\t\t[userId],\n\t\t);\n\t\treturn result.rowCount > 0;\n\t}\n\n\tasync assignUserRole(\n\t\tuserId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t): Promise<void> {\n\t\tconst mapped = mapLegacyUserRole(\n\t\t\troleKey === \"admin\" ||\n\t\t\t\troleKey === \"customer\" ||\n\t\t\t\troleKey === \"unauthorized\"\n\t\t\t\t? roleKey\n\t\t\t\t: roleKey,\n\t\t);\n\t\tconst key = roleKey.startsWith(\"platform_\") ? roleKey : mapped;\n\t\tconst inserted = await this.db.query(\n\t\t\t`INSERT INTO athena.authorization_user_roles (user_id, role_id, assigned_by)\n\t\t\t SELECT $1, id, $3\n\t\t\t FROM athena.authorization_roles\n\t\t\t WHERE key = $2 AND organization_id IS NULL AND scope_kind = 'platform'\n\t\t\t ON CONFLICT (user_id) DO UPDATE SET\n\t\t\t   role_id = EXCLUDED.role_id,\n\t\t\t   assigned_by = EXCLUDED.assigned_by,\n\t\t\t   updated_at = NOW()`,\n\t\t\t[userId, key, assignedBy ?? null],\n\t\t);\n\t\tif (inserted.rowCount < 1) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Unknown platform role\");\n\t\t}\n\t\tawait this.bumpRevision(null);\n\t\tawait this.writeAudit({\n\t\t\taction: \"user.role.assign\",\n\t\t\tactorUserId: assignedBy,\n\t\t\tafter: { roleKey: key },\n\t\t\ttargetId: userId,\n\t\t\ttargetKind: \"user\",\n\t\t});\n\t}\n\n\tasync assignMemberRole(\n\t\tmemberId: string,\n\t\troleKey: string,\n\t\tassignedBy?: string,\n\t\torganizationId?: string | null,\n\t): Promise<void> {\n\t\tconst member = await this.db.query<{ organization_id: string }>(\n\t\t\t`SELECT organization_id FROM athena.member WHERE id = $1`,\n\t\t\t[memberId],\n\t\t);\n\t\tconst orgId = organizationId ?? member.rows[0]?.organization_id ?? null;\n\t\tif (!orgId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Member not found\");\n\t\t}\n\t\tconst role = await this.lookupAssignableOrganizationRole(orgId, roleKey);\n\t\tif (!role) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Unknown or unassignable role\");\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_member_roles (member_id, role_id, assigned_by)\n\t\t\t VALUES ($1, $2, $3)\n\t\t\t ON CONFLICT (member_id) DO UPDATE SET\n\t\t\t   role_id = EXCLUDED.role_id,\n\t\t\t   assigned_by = EXCLUDED.assigned_by,\n\t\t\t   updated_at = NOW()`,\n\t\t\t[memberId, role.id, assignedBy ?? null],\n\t\t);\n\t\tawait this.bumpRevision(orgId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"member.role.assign\",\n\t\t\tactorUserId: assignedBy,\n\t\t\tafter: { roleKey: role.key },\n\t\t\torganizationId: orgId,\n\t\t\ttargetId: memberId,\n\t\t\ttargetKind: \"member\",\n\t\t});\n\t}\n\n\tasync lookupAssignableOrganizationRole(\n\t\torganizationId: string,\n\t\troleRef: string,\n\t): Promise<AthenaAuthorizationRoleRecord | undefined> {\n\t\tconst mapped = resolveMemberAssignmentRole(roleRef);\n\t\tconst result = await this.db.query<RoleRow>(\n\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t WHERE scope_kind = 'organization'\n\t\t\t   AND assignable = TRUE\n\t\t\t   AND (\n\t\t\t     id = $2\n\t\t\t     OR key = $2\n\t\t\t     OR key = $3\n\t\t\t     OR ($2 IN ('owner', 'organization_owner') AND key = 'organization_owner')\n\t\t\t     OR ($2 IN ('admin', 'organization_admin') AND key = 'organization_admin')\n\t\t\t     OR ($2 IN ('member', 'organization_member') AND key = 'organization_member')\n\t\t\t   )\n\t\t\t   AND (organization_id IS NULL OR organization_id = $1)\n\t\t\t ORDER BY CASE WHEN organization_id IS NOT NULL THEN 0 ELSE 1 END\n\t\t\t LIMIT 1`,\n\t\t\t[organizationId, roleRef, mapped],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn mapRoleRow(row);\n\t}\n\n\tasync cloneRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\tsourceRoleId: string;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.cloneRoleInTransaction(input);\n\t\t});\n\t}\n\n\tprivate async cloneRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\tsourceRoleId: string;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst id = crypto.randomUUID();\n\t\tconst source = await this.db.query<RoleRow>(\n\t\t\t`SELECT * FROM athena.authorization_roles WHERE id = $1`,\n\t\t\t[input.sourceRoleId],\n\t\t);\n\t\tconst row = source.rows[0];\n\t\tif (!row) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"Source role not found\");\n\t\t}\n\t\tconst organizationId = input.organizationId ?? row.organization_id;\n\t\tassertCloneRoleTenantBoundary({\n\t\t\tsourceOrganizationId: row.organization_id,\n\t\t\tsourceScopeKind: row.scope_kind,\n\t\t\ttargetOrganizationId: organizationId,\n\t\t});\n\t\tconst key = `custom_${id.slice(0, 8)}`;\n\t\tconst name = input.name.trim() || `${row.name} copy`;\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\tprotected, assignable, version\n\t\t\t) VALUES ($1, $2, $3, $4, $5, NULL, FALSE, TRUE, 1)`,\n\t\t\t[id, key, name, row.scope_kind, organizationId],\n\t\t);\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t SELECT $1, right_key FROM athena.authorization_role_rights WHERE role_id = $2`,\n\t\t\t[id, input.sourceRoleId],\n\t\t);\n\t\tawait this.bumpRevision(organizationId);\n\t\tconst clonedRights = await this.listRoleRights(id);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.clone\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: [...clonedRights] },\n\t\t\torganizationId,\n\t\t\ttargetId: id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey,\n\t\t\tname,\n\t\t\torganizationId,\n\t\t\tprotected: false,\n\t\t\tscopeKind: row.scope_kind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tasync createRole(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\trights?: readonly string[];\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.createRoleInTransaction(input);\n\t\t});\n\t}\n\n\tasync getRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleDetail | undefined> {\n\t\tconst role = await this.loadScopedRole(id, organizationId);\n\t\tif (!role) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst rights = await this.listRoleRights(role.id);\n\t\treturn toRoleDetail(role, rights, await this.countAssignments(role));\n\t}\n\n\tasync listRoles(input: {\n\t\torganizationId?: string | null;\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<readonly RoleDescriptor[]> {\n\t\tconst result = input.organizationId\n\t\t\t? await this.db.query<\n\t\t\t\t\tRoleRow & { assignment_count: string; right_count: string }\n\t\t\t\t>(\n\t\t\t\t\t`SELECT r.*,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_member_roles mr WHERE mr.role_id = r.id) AS assignment_count,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id) AS right_count\n\t\t\t\t\t FROM athena.authorization_roles r\n\t\t\t\t\t WHERE r.scope_kind = 'organization'\n\t\t\t\t\t   AND (r.organization_id IS NULL OR r.organization_id = $1)\n\t\t\t\t\t ORDER BY r.protected DESC, r.key`,\n\t\t\t\t\t[input.organizationId],\n\t\t\t\t)\n\t\t\t: await this.db.query<\n\t\t\t\t\tRoleRow & { assignment_count: string; right_count: string }\n\t\t\t\t>(\n\t\t\t\t\t`SELECT r.*,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_user_roles ur WHERE ur.role_id = r.id) AS assignment_count,\n\t\t\t\t\t        (SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id) AS right_count\n\t\t\t\t\t FROM athena.authorization_roles r\n\t\t\t\t\t WHERE r.scope_kind = 'platform' AND r.organization_id IS NULL\n\t\t\t\t\t ORDER BY r.protected DESC, r.key`,\n\t\t\t\t);\n\t\treturn result.rows\n\t\t\t.filter((row) => row.scope_kind === input.scopeKind)\n\t\t\t.map((row) =>\n\t\t\t\ttoRoleDescriptor(mapRoleRow(row), {\n\t\t\t\t\tassignmentCount: Number(row.assignment_count),\n\t\t\t\t\trightCount: Number(row.right_count),\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tasync listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]> {\n\t\tconst result = await this.db.query<{ right_key: string }>(\n\t\t\t`SELECT right_key FROM athena.authorization_role_rights\n\t\t\t WHERE role_id = $1 ORDER BY right_key`,\n\t\t\t[roleId],\n\t\t);\n\t\treturn result.rows.map((row) => parseAthenaRightKey(row.right_key));\n\t}\n\n\tasync updateRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.updateRoleInTransaction(input);\n\t\t});\n\t}\n\n\tasync replaceRoleRights(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\trights: readonly string[];\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\treturn this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\treturn nested.replaceRoleRightsInTransaction(input);\n\t\t});\n\t}\n\n\tasync deleteRole(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\treassignmentRoleId?: string | null;\n\t}): Promise<void> {\n\t\tawait this.db.transaction(async (tx) => {\n\t\t\tconst nested = new PostgresAuthorizationStore(tx);\n\t\t\tawait nested.deleteRoleInTransaction(input);\n\t\t});\n\t}\n\n\tprivate async createRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t\trights?: readonly string[];\n\t\tscopeKind: \"platform\" | \"organization\";\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tif (input.scopeKind === \"organization\" && !input.organizationId) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n\t\t}\n\t\tconst rights = input.rights ?? [];\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: input.organizationId,\n\t\t\trights,\n\t\t\troleScope: input.scopeKind,\n\t\t});\n\t\tconst id = crypto.randomUUID();\n\t\tconst key = `custom_${id.slice(0, 8)}`;\n\t\tconst organizationId =\n\t\t\tinput.scopeKind === \"organization\" ? (input.organizationId ?? null) : null;\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_roles (\n\t\t\t\tid, key, name, scope_kind, organization_id, system_kind,\n\t\t\t\tprotected, assignable, version\n\t\t\t) VALUES ($1, $2, $3, $4, $5, NULL, FALSE, TRUE, 1)`,\n\t\t\t[id, key, name, input.scopeKind, organizationId],\n\t\t);\n\t\tawait this.replaceMapping(id, rights);\n\t\tawait this.bumpRevision(organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.create\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: [...rights].sort() },\n\t\t\torganizationId,\n\t\t\ttargetId: id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn {\n\t\t\tassignable: true,\n\t\t\tid,\n\t\t\tkey,\n\t\t\tname,\n\t\t\torganizationId,\n\t\t\tprotected: false,\n\t\t\tscopeKind: input.scopeKind,\n\t\t\tsystemKind: null,\n\t\t\tversion: 1,\n\t\t};\n\t}\n\n\tprivate async updateRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\tname: string;\n\t\torganizationId?: string | null;\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tconst name = input.name.trim();\n\t\tif (!name) {\n\t\t\tthrow AthenaAuthRuntimeError.badRequest(\"name is required\");\n\t\t}\n\t\tconst updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tawait this.db.query(\n\t\t\t`UPDATE athena.authorization_roles SET name = $1, updated_at = NOW() WHERE id = $2`,\n\t\t\t[name, role.id],\n\t\t);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.rename\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { name },\n\t\t\tbefore: { name: role.name },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn { ...updated, name };\n\t}\n\n\tprivate async replaceRoleRightsInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\trights: readonly string[];\n\t}): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tassertRightsReplaceAllowed({\n\t\t\torganizationId: role.organizationId,\n\t\t\trights: input.rights,\n\t\t\troleScope: role.scopeKind,\n\t\t});\n\t\tconst before = [...(await this.listRoleRights(role.id))].sort();\n\t\tconst after = [...new Set(input.rights)].sort();\n\t\tconst updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tawait this.replaceMapping(role.id, after);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.rights.replace\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tafter: { rights: after },\n\t\t\tbefore: { rights: before },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t\treturn updated;\n\t}\n\n\tprivate async deleteRoleInTransaction(input: {\n\t\tactorUserId: string;\n\t\texpectedVersion: number;\n\t\tid: string;\n\t\torganizationId?: string | null;\n\t\treassignmentRoleId?: string | null;\n\t}): Promise<void> {\n\t\tconst role = await this.requireScopedRole(input.id, input.organizationId);\n\t\tassertProtectedRoleImmutable(role);\n\t\tawait this.bumpRoleVersion(role.id, input.expectedVersion);\n\t\tconst assigned = await this.countAssignments(role);\n\t\tif (assigned > 0) {\n\t\t\tconst replacementId = input.reassignmentRoleId?.trim() ?? \"\";\n\t\t\tif (!replacementId) {\n\t\t\t\tthrowRoleHasAssignments();\n\t\t\t}\n\t\t\tconst replacement = await this.requireScopedRole(\n\t\t\t\treplacementId,\n\t\t\t\tinput.organizationId,\n\t\t\t);\n\t\t\tif (\n\t\t\t\treplacement.id === role.id ||\n\t\t\t\t!replacement.assignable ||\n\t\t\t\treplacement.scopeKind !== role.scopeKind\n\t\t\t) {\n\t\t\t\tthrowReassignmentInvalid();\n\t\t\t}\n\t\t\tif (role.scopeKind === \"organization\") {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`UPDATE athena.authorization_member_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n\t\t\t\t\t[replacement.id, role.id],\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tawait this.db.query(\n\t\t\t\t\t`UPDATE athena.authorization_user_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n\t\t\t\t\t[replacement.id, role.id],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst before = [...(await this.listRoleRights(role.id))].sort();\n\t\tawait this.db.query(\n\t\t\t`DELETE FROM athena.authorization_roles WHERE id = $1`,\n\t\t\t[role.id],\n\t\t);\n\t\tawait this.bumpRevision(role.organizationId);\n\t\tawait this.writeAudit({\n\t\t\taction: \"role.delete\",\n\t\t\tactorUserId: input.actorUserId,\n\t\t\tbefore: { rights: before },\n\t\t\torganizationId: role.organizationId,\n\t\t\ttargetId: role.id,\n\t\t\ttargetKind: \"role\",\n\t\t});\n\t}\n\n\tasync listAudit(input: {\n\t\tlimit?: number;\n\t\torganizationId?: string | null;\n\t}): Promise<readonly Record<string, unknown>[]> {\n\t\tconst result = await this.db.query<Record<string, unknown>>(\n\t\t\t`SELECT * FROM athena.authorization_audit_log\n\t\t\t WHERE (\n\t\t\t   ($1::text IS NULL AND organization_id IS NULL)\n\t\t\t   OR ($1::text IS NOT NULL AND organization_id = $1)\n\t\t\t )\n\t\t\t ORDER BY created_at DESC\n\t\t\t LIMIT $2`,\n\t\t\t[input.organizationId ?? null, input.limit ?? 50],\n\t\t);\n\t\treturn result.rows;\n\t}\n\n\tasync resolveEffectiveRights(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tuserId: string;\n\t}): Promise<readonly AthenaRightKey[]> {\n\t\tconst platform = await this.db.query<{ right_key: string }>(\n\t\t\t`SELECT rr.right_key\n\t\t\t FROM athena.authorization_user_roles ur\n\t\t\t JOIN athena.authorization_role_rights rr ON rr.role_id = ur.role_id\n\t\t\t WHERE ur.user_id = $1`,\n\t\t\t[input.userId],\n\t\t);\n\t\tconst keys = new Set(platform.rows.map((row) => row.right_key));\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tif (organizationId.length > 0) {\n\t\t\tconst member = await input.getMember(organizationId, input.userId);\n\t\t\tif (member) {\n\t\t\t\tconst org = await this.db.query<{ right_key: string }>(\n\t\t\t\t\t`SELECT rr.right_key\n\t\t\t\t\t FROM athena.authorization_member_roles mr\n\t\t\t\t\t JOIN athena.authorization_role_rights rr ON rr.role_id = mr.role_id\n\t\t\t\t\t WHERE mr.member_id = $1`,\n\t\t\t\t\t[member.id],\n\t\t\t\t);\n\t\t\t\tfor (const row of org.rows) {\n\t\t\t\t\tkeys.add(row.right_key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...keys].sort().map((key) => parseAthenaRightKey(key));\n\t}\n\n\tasync readSnapshot(input: {\n\t\tactiveOrganizationId?: string | null;\n\t\tfoundingOwnerUserId?: string | null;\n\t\tgetMember: (\n\t\t\torganizationId: string,\n\t\t\tuserId: string,\n\t\t) => Promise<AuthMemberRow | undefined>;\n\t\tlistMembers: (organizationId: string) => Promise<AuthMemberRow[]>;\n\t\tuserId: string;\n\t}): Promise<AuthorizationSnapshot> {\n\t\tvoid input.foundingOwnerUserId;\n\t\tvoid input.listMembers;\n\t\tconst effectiveRights = await this.resolveEffectiveRights(input);\n\t\tconst capabilities = capabilitiesFromRights(effectiveRights);\n\t\tconst roleRows = await this.db.query<{\n\t\t\tkey: string;\n\t\t\tname: string;\n\t\t\tscope_kind: \"platform\" | \"organization\";\n\t\t}>(\n\t\t\t`SELECT r.key, r.name, r.scope_kind\n\t\t\t FROM athena.authorization_user_roles ur\n\t\t\t JOIN athena.authorization_roles r ON r.id = ur.role_id\n\t\t\t WHERE ur.user_id = $1\n\t\t\t UNION ALL\n\t\t\t SELECT r.key, r.name, r.scope_kind\n\t\t\t FROM athena.member m\n\t\t\t JOIN athena.authorization_member_roles mr ON mr.member_id = m.id\n\t\t\t JOIN athena.authorization_roles r ON r.id = mr.role_id\n\t\t\t WHERE m.user_id = $1 AND $2::text IS NOT NULL AND m.organization_id = $2`,\n\t\t\t[input.userId, input.activeOrganizationId ?? null],\n\t\t);\n\t\tconst roles: AssignedRoleSummary[] = roleRows.rows.map((row) => ({\n\t\t\tdisplayName: row.name,\n\t\t\tkey: row.key,\n\t\t\tscopeKind: row.scope_kind,\n\t\t}));\n\t\tconst assignable = await this.db.query<{\n\t\t\tassignable: boolean;\n\t\t\tassignment_count: string;\n\t\t\tid: string;\n\t\t\tkey: string;\n\t\t\tname: string;\n\t\t\torganization_id: string | null;\n\t\t\tprotected: boolean;\n\t\t\tright_count: string;\n\t\t\tscope_kind: \"platform\" | \"organization\";\n\t\t\tsystem_kind: \"owner\" | \"admin\" | \"member\" | null;\n\t\t\tversion: number;\n\t\t}>(\n\t\t\t`SELECT r.id, r.key, r.name, r.scope_kind, r.organization_id, r.protected, r.assignable, r.system_kind, r.version,\n\t\t\t        (\n\t\t\t          CASE\n\t\t\t            WHEN r.scope_kind = 'organization' THEN (\n\t\t\t              SELECT COUNT(*)::text\n\t\t\t              FROM athena.authorization_member_roles mr\n\t\t\t              JOIN athena.member m ON m.id = mr.member_id\n\t\t\t              WHERE mr.role_id = r.id\n\t\t\t                AND ($1::text IS NULL OR m.organization_id = $1)\n\t\t\t            )\n\t\t\t            ELSE (\n\t\t\t              SELECT COUNT(*)::text FROM athena.authorization_user_roles ur WHERE ur.role_id = r.id\n\t\t\t            )\n\t\t\t          END\n\t\t\t        ) AS assignment_count,\n\t\t\t        (\n\t\t\t          SELECT COUNT(*)::text FROM athena.authorization_role_rights rr WHERE rr.role_id = r.id\n\t\t\t        ) AS right_count\n\t\t\t FROM athena.authorization_roles r\n\t\t\t WHERE r.assignable = TRUE\n\t\t\t   AND (r.organization_id IS NULL OR r.organization_id = $1)\n\t\t\t ORDER BY r.scope_kind, r.key`,\n\t\t\t[input.activeOrganizationId ?? null],\n\t\t);\n\t\tconst assignableRoles = projectAssignableRoles({\n\t\t\tactiveOrganizationId: input.activeOrganizationId,\n\t\t\tcapabilities,\n\t\t\troles: assignable.rows.map((row) =>\n\t\t\t\ttoRoleDescriptor(\n\t\t\t\t\t{\n\t\t\t\t\t\tassignable: row.assignable,\n\t\t\t\t\t\tid: row.id,\n\t\t\t\t\t\tkey: row.key,\n\t\t\t\t\t\tname: row.name,\n\t\t\t\t\t\torganizationId: row.organization_id,\n\t\t\t\t\t\tprotected: row.protected,\n\t\t\t\t\t\tscopeKind: row.scope_kind,\n\t\t\t\t\t\tsystemKind: row.system_kind,\n\t\t\t\t\t\tversion: row.version,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tassignmentCount: Number(row.assignment_count),\n\t\t\t\t\t\trightCount: Number(row.right_count),\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t});\n\t\tconst organizationId = input.activeOrganizationId?.trim() ?? \"\";\n\t\tconst revisionRow = await this.db.query<{ revision: string }>(\n\t\t\torganizationId.length > 0\n\t\t\t\t? `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'organization' AND organization_id = $1`\n\t\t\t\t: `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t\torganizationId.length > 0 ? [organizationId] : [],\n\t\t);\n\t\treturn {\n\t\t\t...(organizationId.length > 0\n\t\t\t\t? { activeOrganizationId: organizationId }\n\t\t\t\t: {}),\n\t\t\tassignableRoles,\n\t\t\tcapabilities,\n\t\t\teffectiveRights,\n\t\t\trevision: Number(revisionRow.rows[0]?.revision ?? 1),\n\t\t\troles,\n\t\t};\n\t}\n\n\tasync annotateMember(\n\t\tmember: AuthMemberRow,\n\t\tactor: {\n\t\t\tfoundingOwnerUserId: string | null;\n\t\t\tgetMember: (\n\t\t\t\torganizationId: string,\n\t\t\t\tuserId: string,\n\t\t\t) => Promise<AuthMemberRow | undefined>;\n\t\t\tuserId: string;\n\t\t},\n\t): Promise<MemberAuthorizationActions> {\n\t\tconst roleRow = await this.db.query<{ key: string; name: string }>(\n\t\t\t`SELECT r.key, r.name\n\t\t\t FROM athena.authorization_member_roles mr\n\t\t\t JOIN athena.authorization_roles r ON r.id = mr.role_id\n\t\t\t WHERE mr.member_id = $1`,\n\t\t\t[member.id],\n\t\t);\n\t\tconst roleKey = roleRow.rows[0]?.key ?? mapLegacyMemberRole(member.role);\n\t\tconst roleName = roleRow.rows[0]?.name ?? roleKey;\n\t\tconst actorRights = await this.resolveEffectiveRights({\n\t\t\tactiveOrganizationId: member.organization_id,\n\t\t\tgetMember: actor.getMember,\n\t\t\tuserId: actor.userId,\n\t\t});\n\t\tconst capabilities = capabilitiesFromRights(actorRights);\n\t\tconst denialReasons: MemberAuthorizationActions[\"denialReasons\"] = {};\n\t\tif (actor.foundingOwnerUserId === member.user_id) {\n\t\t\tdenialReasons.changeRole = FOUNDING_OWNER_ROLE_LOCKED;\n\t\t\tdenialReasons.remove = FOUNDING_OWNER_REMOVE_FORBIDDEN;\n\t\t} else if (\n\t\t\tactor.userId === member.user_id &&\n\t\t\troleKey === ORGANIZATION_OWNER_ROLE\n\t\t) {\n\t\t\tdenialReasons.changeRole =\n\t\t\t\t\"Owners can't change their own role from the members table.\";\n\t\t\tdenialReasons.remove =\n\t\t\t\t\"Owners can't suspend or remove themselves from the members table.\";\n\t\t} else if (!capabilities.canChangeMemberRole) {\n\t\t\tdenialReasons.changeRole = \"Not allowed to change member roles.\";\n\t\t\tdenialReasons.remove = \"Not allowed to remove members.\";\n\t\t}\n\t\treturn {\n\t\t\tcanChangeRole: denialReasons.changeRole === undefined,\n\t\t\tcanRemove: denialReasons.remove === undefined,\n\t\t\tdenialReasons,\n\t\t\troleDisplayName: roleName,\n\t\t\troleKey,\n\t\t};\n\t}\n\n\tprivate async loadScopedRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleRecord | undefined> {\n\t\tconst result = organizationId\n\t\t\t? await this.db.query<RoleRow>(\n\t\t\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t\t\t WHERE id = $1 AND scope_kind = 'organization'\n\t\t\t\t\t   AND (organization_id IS NULL OR organization_id = $2)`,\n\t\t\t\t\t[id, organizationId],\n\t\t\t\t)\n\t\t\t: await this.db.query<RoleRow>(\n\t\t\t\t\t`SELECT * FROM athena.authorization_roles\n\t\t\t\t\t WHERE id = $1 AND scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t\t\t\t[id],\n\t\t\t\t);\n\t\tconst row = result.rows[0];\n\t\treturn row ? mapRoleRow(row) : undefined;\n\t}\n\n\tprivate async requireScopedRole(\n\t\tid: string,\n\t\torganizationId?: string | null,\n\t): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst role = await this.loadScopedRole(id, organizationId);\n\t\tif (!role) {\n\t\t\tthrowRoleNotFound();\n\t\t}\n\t\treturn role;\n\t}\n\n\tprivate async countAssignments(\n\t\trole: Pick<AthenaAuthorizationRoleRecord, \"id\" | \"scopeKind\">,\n\t): Promise<number> {\n\t\tif (role.scopeKind === \"organization\") {\n\t\t\tconst result = await this.db.query<{ count: string }>(\n\t\t\t\t`SELECT COUNT(*)::text AS count FROM athena.authorization_member_roles WHERE role_id = $1`,\n\t\t\t\t[role.id],\n\t\t\t);\n\t\t\treturn Number(result.rows[0]?.count ?? 0);\n\t\t}\n\t\tconst result = await this.db.query<{ count: string }>(\n\t\t\t`SELECT COUNT(*)::text AS count FROM athena.authorization_user_roles WHERE role_id = $1`,\n\t\t\t[role.id],\n\t\t);\n\t\treturn Number(result.rows[0]?.count ?? 0);\n\t}\n\n\tprivate async replaceMapping(\n\t\troleId: string,\n\t\trights: readonly string[],\n\t): Promise<void> {\n\t\tawait this.db.query(\n\t\t\t`DELETE FROM athena.authorization_role_rights WHERE role_id = $1`,\n\t\t\t[roleId],\n\t\t);\n\t\tfor (const key of rights) {\n\t\t\tawait this.db.query(\n\t\t\t\t`INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\t VALUES ($1, $2)`,\n\t\t\t\t[roleId, parseAthenaRightKey(key)],\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async bumpRoleVersion(\n\t\tid: string,\n\t\texpectedVersion: number,\n\t): Promise<AthenaAuthorizationRoleRecord> {\n\t\tconst updated = await this.db.query<RoleRow>(\n\t\t\t`UPDATE athena.authorization_roles\n\t\t\t SET version = version + 1, updated_at = NOW()\n\t\t\t WHERE id = $1 AND version = $2\n\t\t\t RETURNING *`,\n\t\t\t[id, expectedVersion],\n\t\t);\n\t\tconst row = updated.rows[0];\n\t\tif (!row) {\n\t\t\tthrowRoleVersionConflict();\n\t\t}\n\t\treturn mapRoleRow(row);\n\t}\n\n\tprivate async bumpRevision(organizationId: string | null): Promise<void> {\n\t\tif (organizationId) {\n\t\t\tawait this.db.query(\n\t\t\t\t`WITH updated AS (\n\t\t\t\t\tUPDATE athena.authorization_revisions\n\t\t\t\t\tSET revision = revision + 1, updated_at = NOW()\n\t\t\t\t\tWHERE organization_id = $1\n\t\t\t\t\tRETURNING organization_id\n\t\t\t\t)\n\t\t\t\tINSERT INTO athena.authorization_revisions (scope_kind, organization_id, revision)\n\t\t\t\tSELECT 'organization', $1, 1\n\t\t\t\tWHERE NOT EXISTS (SELECT 1 FROM updated)`,\n\t\t\t\t[organizationId],\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tawait this.db.query(\n\t\t\t`UPDATE athena.authorization_revisions\n\t\t\t SET revision = revision + 1, updated_at = NOW()\n\t\t\t WHERE scope_kind = 'platform' AND organization_id IS NULL`,\n\t\t);\n\t}\n\n\tprivate async writeAudit(input: {\n\t\taction: string;\n\t\tactorUserId?: string;\n\t\tafter?: unknown;\n\t\tbefore?: unknown;\n\t\torganizationId?: string | null;\n\t\ttargetId: string;\n\t\ttargetKind: string;\n\t}): Promise<void> {\n\t\tawait this.db.query(\n\t\t\t`INSERT INTO athena.authorization_audit_log (\n\t\t\t\tid, actor_user_id, action, target_kind, target_id, organization_id,\n\t\t\t\tbefore_state, after_state, created_at\n\t\t\t) VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb, $8::jsonb, NOW())`,\n\t\t\t[\n\t\t\t\tcrypto.randomUUID(),\n\t\t\t\tinput.actorUserId ?? null,\n\t\t\t\tinput.action,\n\t\t\t\tinput.targetKind,\n\t\t\t\tinput.targetId,\n\t\t\t\tinput.organizationId ?? null,\n\t\t\t\tJSON.stringify(input.before ?? {}),\n\t\t\t\tJSON.stringify(input.after ?? {}),\n\t\t\t],\n\t\t);\n\t}\n}\n","/** Embedded Auth generation 31 — roles, assignments, revisions, audit. */\n\nexport const ATHENA_AUTHORIZATION_ASSIGNMENT_SQL = `\nCREATE TABLE IF NOT EXISTS athena.authorization_rights (\n    key TEXT PRIMARY KEY,\n    domain TEXT NOT NULL,\n    display_name TEXT NOT NULL,\n    description TEXT NOT NULL,\n    scope_kind TEXT NOT NULL CHECK (scope_kind IN ('self', 'organization', 'platform')),\n    risk_level TEXT NOT NULL CHECK (risk_level IN ('low', 'elevated', 'critical')),\n    assignable BOOLEAN NOT NULL DEFAULT TRUE,\n    source_version INTEGER NOT NULL DEFAULT 1,\n    deprecated_at TIMESTAMPTZ\n);\nCREATE TABLE IF NOT EXISTS athena.authorization_roles (\n    id TEXT PRIMARY KEY,\n    key TEXT NOT NULL,\n    name TEXT NOT NULL,\n    scope_kind TEXT NOT NULL CHECK (scope_kind IN ('platform', 'organization')),\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    system_kind TEXT CHECK (system_kind IN ('owner', 'admin', 'member')),\n    protected BOOLEAN NOT NULL DEFAULT FALSE,\n    assignable BOOLEAN NOT NULL DEFAULT TRUE,\n    version INTEGER NOT NULL DEFAULT 1,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (key, organization_id)\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_authorization_roles_platform_key\n    ON athena.authorization_roles (key)\n    WHERE organization_id IS NULL;\nCREATE TABLE IF NOT EXISTS athena.authorization_role_rights (\n    role_id TEXT NOT NULL REFERENCES athena.authorization_roles (id) ON DELETE CASCADE,\n    right_key TEXT NOT NULL REFERENCES athena.authorization_rights (key),\n    PRIMARY KEY (role_id, right_key)\n);\nCREATE TABLE IF NOT EXISTS athena.authorization_user_roles (\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    role_id TEXT NOT NULL REFERENCES athena.authorization_roles (id),\n    assigned_by TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    PRIMARY KEY (user_id)\n);\nCREATE TABLE IF NOT EXISTS athena.authorization_member_roles (\n    member_id TEXT NOT NULL REFERENCES athena.member (id) ON DELETE CASCADE,\n    role_id TEXT NOT NULL REFERENCES athena.authorization_roles (id),\n    assigned_by TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    PRIMARY KEY (member_id)\n);\nCREATE TABLE IF NOT EXISTS athena.authorization_revisions (\n    scope_kind TEXT NOT NULL CHECK (scope_kind IN ('platform', 'organization')),\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    revision BIGINT NOT NULL DEFAULT 1,\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_authorization_revisions_platform\n    ON athena.authorization_revisions (scope_kind)\n    WHERE organization_id IS NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_authorization_revisions_organization\n    ON athena.authorization_revisions (organization_id)\n    WHERE organization_id IS NOT NULL;\nCREATE TABLE IF NOT EXISTS athena.authorization_audit_log (\n    id TEXT PRIMARY KEY,\n    actor_user_id TEXT,\n    action TEXT NOT NULL,\n    target_kind TEXT NOT NULL,\n    target_id TEXT NOT NULL,\n    organization_id TEXT,\n    before_state JSONB,\n    after_state JSONB,\n    reason TEXT,\n    trace_id TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_authorization_audit_created_at\n    ON athena.authorization_audit_log (created_at DESC);\nINSERT INTO athena.authorization_revisions (scope_kind, organization_id, revision)\nSELECT 'platform', NULL, 1\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena.authorization_revisions\n    WHERE scope_kind = 'platform' AND organization_id IS NULL\n);\n`;\n\n/** Embedded Auth generation 32 — assignment scope constraints. */\nexport const ATHENA_AUTHORIZATION_CONSTRAINTS_SQL = `\nALTER TABLE athena.authorization_roles\n    DROP CONSTRAINT IF EXISTS authorization_roles_scope_organization_id;\nALTER TABLE athena.authorization_roles\n    ADD CONSTRAINT authorization_roles_scope_organization_id CHECK (\n        (scope_kind = 'platform' AND organization_id IS NULL)\n        OR (\n            scope_kind = 'organization'\n            AND (\n                organization_id IS NULL\n                OR (organization_id IS NOT NULL AND system_kind IS NULL)\n            )\n        )\n    );\nALTER TABLE athena.authorization_revisions\n    DROP CONSTRAINT IF EXISTS authorization_revisions_scope_nullability;\nALTER TABLE athena.authorization_revisions\n    ADD CONSTRAINT authorization_revisions_scope_nullability CHECK (\n        (scope_kind = 'platform' AND organization_id IS NULL)\n        OR (scope_kind = 'organization' AND organization_id IS NOT NULL)\n    );\nCREATE OR REPLACE FUNCTION athena.authorization_assert_user_role_platform()\nRETURNS trigger\nLANGUAGE plpgsql\nAS $$\nDECLARE\n    role_scope TEXT;\n    role_org TEXT;\nBEGIN\n    SELECT scope_kind, organization_id INTO role_scope, role_org\n    FROM athena.authorization_roles\n    WHERE id = NEW.role_id;\n    IF role_scope IS DISTINCT FROM 'platform' OR role_org IS NOT NULL THEN\n        RAISE EXCEPTION 'user assignments require a platform role';\n    END IF;\n    RETURN NEW;\nEND;\n$$;\nDROP TRIGGER IF EXISTS authorization_user_roles_platform ON athena.authorization_user_roles;\nCREATE TRIGGER authorization_user_roles_platform\n    BEFORE INSERT OR UPDATE ON athena.authorization_user_roles\n    FOR EACH ROW\n    EXECUTE PROCEDURE athena.authorization_assert_user_role_platform();\nCREATE OR REPLACE FUNCTION athena.authorization_assert_member_role_organization()\nRETURNS trigger\nLANGUAGE plpgsql\nAS $$\nDECLARE\n    role_scope TEXT;\n    role_org TEXT;\n    member_org TEXT;\nBEGIN\n    SELECT scope_kind, organization_id INTO role_scope, role_org\n    FROM athena.authorization_roles\n    WHERE id = NEW.role_id;\n    SELECT organization_id INTO member_org\n    FROM athena.member\n    WHERE id = NEW.member_id;\n    IF role_scope IS DISTINCT FROM 'organization' THEN\n        RAISE EXCEPTION 'member assignments require an organization role';\n    END IF;\n    IF role_org IS NOT NULL AND role_org IS DISTINCT FROM member_org THEN\n        RAISE EXCEPTION 'custom role organization must match the member organization';\n    END IF;\n    RETURN NEW;\nEND;\n$$;\nDROP TRIGGER IF EXISTS authorization_member_roles_organization ON athena.authorization_member_roles;\nCREATE TRIGGER authorization_member_roles_organization\n    BEFORE INSERT OR UPDATE ON athena.authorization_member_roles\n    FOR EACH ROW\n    EXECUTE PROCEDURE athena.authorization_assert_member_role_organization();\n`;\n","export const authEmailEvents = {\n\torganization: {\n\t\tcreated: \"organization.create\",\n\t\tmember: {\n\t\t\tadded: \"organization.member.added\",\n\t\t\tinvite: \"organization.member.invite\",\n\t\t\tinviteReminder: \"organization.member.invite.reminder\",\n\t\t\tinviteRevoked: \"organization.member.invite.revoked\",\n\t\t\tremoved: \"organization.member.removed\",\n\t\t\troleUpdated: \"organization.member.role.updated\",\n\t\t},\n\t},\n\tuser: {\n\t\taccount: {\n\t\t\tdeletionConfirmation: \"user.account.delete.confirmation\",\n\t\t},\n\t\temail: {\n\t\t\tchangeConfirmation: \"user.email.change.confirmation\",\n\t\t\tverify: \"user.email.verify\",\n\t\t},\n\t\tpassword: {\n\t\t\tchanged: \"user.password.changed\",\n\t\t\treset: \"user.password.reset\",\n\t\t},\n\t\tsecurity: {\n\t\t\talert: \"user.security.alert\",\n\t\t},\n\t\tsignIn: {\n\t\t\temail: \"user.sign-in.email\",\n\t\t\totp: \"user.sign-in.otp\",\n\t\t},\n\t\tsignUp: {\n\t\t\twelcome: \"user.sign-up.welcome\",\n\t\t},\n\t},\n} as const;\n\nexport type AuthEmailEventNested = typeof authEmailEvents;\n\nexport interface AthenaAuthEmailEventDefinition {\n\tcategory: string;\n\tdefault_template_key: string;\n\tdescription: string;\n\tevent_type: string;\n\tis_active: boolean;\n\tis_system: boolean;\n\toptional_variables: readonly string[];\n\trequired_variables: readonly string[];\n}\n\nexport const AUTH_EMAIL_EVENT_CATALOG: readonly AthenaAuthEmailEventDefinition[] =\n\t[\n\t\t{\n\t\t\tcategory: \"user_lifecycle\",\n\t\t\tdefault_template_key: \"verification_email\",\n\t\t\tdescription:\n\t\t\t\t\"Verify a user email address after signup or manual verification resend.\",\n\t\t\tevent_type: authEmailEvents.user.email.verify,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"password_reset_email\",\n\t\t\tdescription: \"Send a password reset link.\",\n\t\t\tevent_type: authEmailEvents.user.password.reset,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"reset_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"change_email_confirmation_email\",\n\t\t\tdescription: \"Confirm a pending user email address change.\",\n\t\t\tevent_type: authEmailEvents.user.email.changeConfirmation,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"account_deletion_confirmation_email\",\n\t\t\tdescription: \"Confirm account deletion before destructive delete.\",\n\t\t\tevent_type: authEmailEvents.user.account.deletionConfirmation,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"verification_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"two_factor_otp_email\",\n\t\t\tdescription: \"Deliver one-time passcode for two-factor authentication.\",\n\t\t\tevent_type: authEmailEvents.user.signIn.otp,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"otp_code\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_email\",\n\t\t\tdescription: \"Invite a member to join an organization.\",\n\t\t\tevent_type: authEmailEvents.organization.member.invite,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\n\t\t\t\t\"organization_name\",\n\t\t\t\t\"role\",\n\t\t\t\t\"inviter_identity\",\n\t\t\t\t\"invitation_url\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"magic_link_email\",\n\t\t\tdescription:\n\t\t\t\t\"Email-based sign-in link or magic-link authentication flow.\",\n\t\t\tevent_type: authEmailEvents.user.signIn.email,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\"],\n\t\t\trequired_variables: [\"sign_in_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_lifecycle\",\n\t\t\tdefault_template_key: \"welcome_email\",\n\t\t\tdescription: \"Welcome message after account creation.\",\n\t\t\tevent_type: authEmailEvents.user.signUp.welcome,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"dashboard_url\"],\n\t\t\trequired_variables: [\"user_name\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"password_changed_email\",\n\t\t\tdescription: \"Security notification after password change completes.\",\n\t\t\tevent_type: authEmailEvents.user.password.changed,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"support_url\"],\n\t\t\trequired_variables: [],\n\t\t},\n\t\t{\n\t\t\tcategory: \"user_security\",\n\t\t\tdefault_template_key: \"security_alert_email\",\n\t\t\tdescription:\n\t\t\t\t\"General security alert notification (suspicious sign-in, new device, policy event).\",\n\t\t\tevent_type: authEmailEvents.user.security.alert,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"support_url\"],\n\t\t\trequired_variables: [\"alert_title\", \"alert_details\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_created_email\",\n\t\t\tdescription: \"Organization creation confirmation and onboarding.\",\n\t\t\tevent_type: authEmailEvents.organization.created,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"organization_url\"],\n\t\t\trequired_variables: [\"organization_name\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_added_email\",\n\t\t\tdescription: \"Notify when a member is added without invite flow.\",\n\t\t\tevent_type: authEmailEvents.organization.member.added,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_removed_email\",\n\t\t\tdescription: \"Notify when a member is removed from an organization.\",\n\t\t\tevent_type: authEmailEvents.organization.member.removed,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_member_role_updated_email\",\n\t\t\tdescription: \"Notify when organization member role is changed.\",\n\t\t\tevent_type: authEmailEvents.organization.member.roleUpdated,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"previous_role\", \"actor_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"member_identity\", \"new_role\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_reminder_email\",\n\t\t\tdescription: \"Reminder message for pending organization invitations.\",\n\t\t\tevent_type: authEmailEvents.organization.member.inviteReminder,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"role\", \"inviter_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"invitation_url\"],\n\t\t},\n\t\t{\n\t\t\tcategory: \"organization_lifecycle\",\n\t\t\tdefault_template_key: \"organization_invitation_revoked_email\",\n\t\t\tdescription: \"Notification that an invitation has been revoked.\",\n\t\t\tevent_type: authEmailEvents.organization.member.inviteRevoked,\n\t\t\tis_active: true,\n\t\t\tis_system: true,\n\t\t\toptional_variables: [\"app_name\", \"inviter_identity\"],\n\t\t\trequired_variables: [\"organization_name\", \"invited_email\"],\n\t\t},\n\t];\n\nexport function flattenAuthEmailEvents(\n\ttree: unknown,\n\tacc: string[] = [],\n): string[] {\n\tif (typeof tree === \"string\") {\n\t\tacc.push(tree);\n\t\treturn acc;\n\t}\n\tif (tree && typeof tree === \"object\") {\n\t\tfor (const value of Object.values(tree)) {\n\t\t\tflattenAuthEmailEvents(value, acc);\n\t\t}\n\t}\n\treturn acc;\n}\n\nexport function getAuthEmailEventDefinition(\n\teventType: string | null | undefined,\n): AthenaAuthEmailEventDefinition | undefined {\n\tif (!eventType) {\n\t\treturn undefined;\n\t}\n\treturn AUTH_EMAIL_EVENT_CATALOG.find(\n\t\t(entry) => entry.event_type === eventType,\n\t);\n}\n","import { AUTH_EMAIL_EVENT_CATALOG } from \"../../email/events.ts\";\n\n/**\n * Frozen 014 seed. Released migration 014 permanently inserted the ten later\n * events with `default_template_key = NULL`. Do not regenerate this from the\n * live catalog — 024 is the forward fix.\n */\nconst AUTH_EMAIL_EVENT_CATALOG_V014: ReadonlyArray<{\n  category: string;\n  default_template_key: string | null;\n  description: string;\n  event_type: string;\n  optional_variables: readonly string[];\n  required_variables: readonly string[];\n}> = AUTH_EMAIL_EVENT_CATALOG.map((entry) => {\n  const futureKeys: Record<string, null> = {\n    \"organization.create\": null,\n    \"organization.member.added\": null,\n    \"organization.member.invite.reminder\": null,\n    \"organization.member.invite.revoked\": null,\n    \"organization.member.removed\": null,\n    \"organization.member.role.updated\": null,\n    \"user.password.changed\": null,\n    \"user.security.alert\": null,\n    \"user.sign-in.email\": null,\n    \"user.sign-up.welcome\": null,\n  };\n  return {\n    category: entry.category,\n    default_template_key:\n      entry.event_type in futureKeys ? null : entry.default_template_key,\n    description: entry.description,\n    event_type: entry.event_type,\n    optional_variables: entry.optional_variables,\n    required_variables: entry.required_variables,\n  };\n});\n\n/**\n * Rust Athena Auth email tables (`services/athena-auth` migrations 006, 007,\n * 011, 012, 014, 015 + runtime ensure-schema). Same names and columns so a\n * shared Postgres is mutually readable.\n */\nexport const ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS: ReadonlyArray<{\n  name: string;\n  sql: string;\n  version: number;\n}> = [\n  {\n    name: \"006_create_email_send_failures_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_send_failures (\n    id TEXT PRIMARY KEY,\n    user_id TEXT,\n    recipient_email TEXT NOT NULL,\n    flow TEXT NOT NULL,\n    provider TEXT,\n    error_message TEXT NOT NULL,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    resolved BOOLEAN NOT NULL DEFAULT FALSE,\n    resolution_note TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_created_at\n    ON athena.email_send_failures (created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_recipient_email\n    ON athena.email_send_failures (recipient_email);\n`,\n    version: 6,\n  },\n  {\n    name: \"007_create_emails_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.emails (\n    id TEXT PRIMARY KEY,\n    recipient_email TEXT NOT NULL,\n    subject TEXT NOT NULL,\n    from_address TEXT NOT NULL,\n    from_name TEXT,\n    text_body TEXT,\n    html_body TEXT,\n    provider TEXT NOT NULL,\n    flow TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_emails_created_at ON athena.emails (created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_emails_recipient_email ON athena.emails (recipient_email);\n`,\n    version: 7,\n  },\n  {\n    name: \"011_create_email_templates_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_templates (\n    id TEXT PRIMARY KEY,\n    template_key TEXT NOT NULL,\n    locale TEXT NOT NULL DEFAULT 'en',\n    subject_template TEXT NOT NULL,\n    text_template TEXT,\n    html_template TEXT,\n    variables JSONB NOT NULL DEFAULT '[]',\n    is_active BOOLEAN NOT NULL DEFAULT TRUE,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (template_key, locale)\n);\nCREATE INDEX IF NOT EXISTS idx_email_templates_template_key ON athena.email_templates (template_key);\nCREATE INDEX IF NOT EXISTS idx_email_templates_is_active ON athena.email_templates (is_active);\n`,\n    version: 11,\n  },\n  {\n    name: \"012_email_multitenancy_admin_ops\",\n    sql: `\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS resolved BOOLEAN NOT NULL DEFAULT FALSE;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS resolution_note TEXT;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_resolved\n    ON athena.email_send_failures (resolved);\nCREATE INDEX IF NOT EXISTS idx_email_send_failures_flow\n    ON athena.email_send_failures (flow);\nALTER TABLE athena.emails ADD COLUMN IF NOT EXISTS flow TEXT;\nALTER TABLE athena.emails ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\nCREATE INDEX IF NOT EXISTS idx_emails_provider ON athena.emails (provider);\nCREATE INDEX IF NOT EXISTS idx_emails_flow ON athena.emails (flow);\n`,\n    version: 12,\n  },\n  {\n    name: \"014_email_event_types_and_template_assignment\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.email_event_types (\n    event_type TEXT PRIMARY KEY,\n    category TEXT NOT NULL,\n    description TEXT NOT NULL,\n    default_template_key TEXT,\n    is_active BOOLEAN NOT NULL DEFAULT TRUE,\n    is_system BOOLEAN NOT NULL DEFAULT TRUE,\n    required_variables JSONB NOT NULL DEFAULT '[]',\n    optional_variables JSONB NOT NULL DEFAULT '[]',\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nALTER TABLE athena.email_templates ADD COLUMN IF NOT EXISTS event_type TEXT;\nCREATE INDEX IF NOT EXISTS idx_email_event_types_category ON athena.email_event_types (category);\nCREATE INDEX IF NOT EXISTS idx_email_event_types_is_active ON athena.email_event_types (is_active);\nCREATE INDEX IF NOT EXISTS idx_email_templates_event_type ON athena.email_templates (event_type);\nCREATE INDEX IF NOT EXISTS idx_email_templates_event_type_locale_active\n    ON athena.email_templates (event_type, locale, is_active);\n${emailEventTypeSeedSql(AUTH_EMAIL_EVENT_CATALOG_V014)}\n`,\n    version: 14,\n  },\n  {\n    name: \"015_email_template_attachments\",\n    sql: `\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS attachments JSONB NOT NULL DEFAULT '[]';\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS attachment_failure_mode TEXT NOT NULL DEFAULT 'fail';\nALTER TABLE athena.email_templates\n    ADD COLUMN IF NOT EXISTS variable_bindings JSONB NOT NULL DEFAULT '[]';\n`,\n    version: 15,\n  },\n  {\n    name: \"024_email_event_default_templates\",\n    sql: `\nINSERT INTO athena.email_event_types (\n    event_type, category, description, default_template_key,\n    required_variables, optional_variables, is_active, is_system, metadata\n)\nVALUES\n    (\n        'user.sign-in.email',\n        'user_security',\n        'Email-based sign-in link or magic-link authentication flow.',\n        'magic_link_email',\n        '[\"sign_in_url\"]'::jsonb,\n        '[\"app_name\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.sign-up.welcome',\n        'user_lifecycle',\n        'Welcome message after account creation.',\n        'welcome_email',\n        '[\"user_name\"]'::jsonb,\n        '[\"app_name\",\"dashboard_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.password.changed',\n        'user_security',\n        'Security notification after password change completes.',\n        'password_changed_email',\n        '[]'::jsonb,\n        '[\"app_name\",\"support_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'user.security.alert',\n        'user_security',\n        'General security alert notification (suspicious sign-in, new device, policy event).',\n        'security_alert_email',\n        '[\"alert_title\",\"alert_details\"]'::jsonb,\n        '[\"app_name\",\"support_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"auth\"}'::jsonb\n    ),\n    (\n        'organization.create',\n        'organization_lifecycle',\n        'Organization creation confirmation and onboarding.',\n        'organization_created_email',\n        '[\"organization_name\"]'::jsonb,\n        '[\"app_name\",\"organization_url\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.added',\n        'organization_lifecycle',\n        'Notify when a member is added without invite flow.',\n        'organization_member_added_email',\n        '[\"organization_name\",\"member_identity\"]'::jsonb,\n        '[\"app_name\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.removed',\n        'organization_lifecycle',\n        'Notify when a member is removed from an organization.',\n        'organization_member_removed_email',\n        '[\"organization_name\",\"member_identity\"]'::jsonb,\n        '[\"app_name\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.role.updated',\n        'organization_lifecycle',\n        'Notify when organization member role is changed.',\n        'organization_member_role_updated_email',\n        '[\"organization_name\",\"member_identity\",\"new_role\"]'::jsonb,\n        '[\"app_name\",\"previous_role\",\"actor_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.invite.reminder',\n        'organization_lifecycle',\n        'Reminder message for pending organization invitations.',\n        'organization_invitation_reminder_email',\n        '[\"organization_name\",\"invitation_url\"]'::jsonb,\n        '[\"app_name\",\"role\",\"inviter_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    ),\n    (\n        'organization.member.invite.revoked',\n        'organization_lifecycle',\n        'Notification that an invitation has been revoked.',\n        'organization_invitation_revoked_email',\n        '[\"organization_name\",\"invited_email\"]'::jsonb,\n        '[\"app_name\",\"inviter_identity\"]'::jsonb,\n        TRUE,\n        TRUE,\n        '{\"scope\":\"organization\"}'::jsonb\n    )\nON CONFLICT (event_type) DO UPDATE\nSET\n    category = EXCLUDED.category,\n    description = EXCLUDED.description,\n    default_template_key = EXCLUDED.default_template_key,\n    required_variables = EXCLUDED.required_variables,\n    optional_variables = EXCLUDED.optional_variables,\n    is_active = EXCLUDED.is_active,\n    is_system = EXCLUDED.is_system,\n    metadata = EXCLUDED.metadata,\n    updated_at = NOW();\nUPDATE athena.email_templates AS t\nSET event_type = m.event_type\nFROM (\n    VALUES\n        ('magic_link_email', 'user.sign-in.email'),\n        ('welcome_email', 'user.sign-up.welcome'),\n        ('password_changed_email', 'user.password.changed'),\n        ('security_alert_email', 'user.security.alert'),\n        ('organization_created_email', 'organization.create'),\n        ('organization_member_added_email', 'organization.member.added'),\n        ('organization_member_removed_email', 'organization.member.removed'),\n        ('organization_member_role_updated_email', 'organization.member.role.updated'),\n        ('organization_invitation_reminder_email', 'organization.member.invite.reminder'),\n        ('organization_invitation_revoked_email', 'organization.member.invite.revoked')\n) AS m(template_key, event_type)\nWHERE t.template_key = m.template_key\n  AND (t.event_type IS NULL OR t.event_type IS DISTINCT FROM m.event_type);\n`,\n    version: 24,\n  },\n];\n\nfunction sqlLiteral(value: string | null): string {\n  if (value === null) {\n    return \"NULL\";\n  }\n  return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\nfunction emailEventTypeSeedSql(\n  catalog: ReadonlyArray<{\n    category: string;\n    default_template_key: string | null;\n    description: string;\n    event_type: string;\n    optional_variables: readonly string[];\n    required_variables: readonly string[];\n  }> = AUTH_EMAIL_EVENT_CATALOG,\n): string {\n  const values = catalog.map(\n    (entry) => `(\n        ${sqlLiteral(entry.event_type)},\n        ${sqlLiteral(entry.category)},\n        ${sqlLiteral(entry.description)},\n        ${sqlLiteral(entry.default_template_key)},\n        '${JSON.stringify(entry.required_variables)}'::jsonb,\n        '${JSON.stringify(entry.optional_variables)}'::jsonb,\n        TRUE,\n        TRUE,\n        '{}'::jsonb\n    )`\n  ).join(\",\\n    \");\n  return `\nINSERT INTO athena.email_event_types (\n    event_type, category, description, default_template_key,\n    required_variables, optional_variables, is_active, is_system, metadata\n)\nVALUES\n    ${values}\nON CONFLICT (event_type) DO UPDATE\nSET\n    category = EXCLUDED.category,\n    description = EXCLUDED.description,\n    default_template_key = EXCLUDED.default_template_key,\n    required_variables = EXCLUDED.required_variables,\n    optional_variables = EXCLUDED.optional_variables,\n    is_active = EXCLUDED.is_active,\n    is_system = EXCLUDED.is_system,\n    metadata = EXCLUDED.metadata,\n    updated_at = NOW();\n`;\n}\n","/**\n * Classify Embedded Auth ledger probe failures.\n *\n * A missing `athena.auth_schema_migrations` table is UNINITIALIZED.\n * Connection, privilege, and malformed-adapter failures are not.\n */\n\nexport type AthenaAuthLedgerHealth =\n\t| \"UNINITIALIZED\"\n\t| \"UNREACHABLE\"\n\t| \"PERMISSION_DENIED\"\n\t| \"INVALID_LEDGER\"\n\t| \"FUTURE_GENERATION\"\n\t| \"DRIFT\"\n\t| \"HEALTHY\";\n\nexport type AthenaAuthLedgerQueryFailure =\n\t| \"UNINITIALIZED\"\n\t| \"UNREACHABLE\"\n\t| \"PERMISSION_DENIED\"\n\t| \"INVALID_LEDGER\";\n\nconst NETWORK_NODE_CODES = new Set([\n\t\"ECONNREFUSED\",\n\t\"ECONNRESET\",\n\t\"ETIMEDOUT\",\n\t\"ENOTFOUND\",\n\t\"EAI_AGAIN\",\n\t\"EPIPE\",\n\t\"EHOSTUNREACH\",\n\t\"ENETUNREACH\",\n]);\n\nfunction codeOf(error: unknown): string {\n\tif (error && typeof error === \"object\" && \"code\" in error) {\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (typeof code === \"string\" && code.trim()) {\n\t\t\treturn code.trim();\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction messageOf(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn String(error);\n}\n\nfunction walkCauses(error: unknown): unknown[] {\n\tconst seen: unknown[] = [];\n\tlet current: unknown = error;\n\tfor (let depth = 0; depth < 6 && current; depth += 1) {\n\t\tseen.push(current);\n\t\tif (typeof current !== \"object\" || current === null || !(\"cause\" in current)) {\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = (current as { cause: unknown }).cause;\n\t}\n\treturn seen;\n}\n\n/**\n * Classify an error raised while reading `athena.auth_schema_migrations`.\n */\nexport function classifyAuthLedgerQueryError(\n\terror: unknown,\n): AthenaAuthLedgerQueryFailure {\n\tfor (const node of walkCauses(error)) {\n\t\tconst code = codeOf(node);\n\t\tif (code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\") {\n\t\t\treturn \"INVALID_LEDGER\";\n\t\t}\n\t\tif (code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\") {\n\t\t\treturn \"UNREACHABLE\";\n\t\t}\n\t\tif (code === \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\") {\n\t\t\treturn \"PERMISSION_DENIED\";\n\t\t}\n\t\tconst sqlState = /^[0-9A-Z]{5}$/i.test(code) ? code.toUpperCase() : \"\";\n\t\tif (sqlState === \"42P01\" || sqlState === \"3F000\") {\n\t\t\treturn \"UNINITIALIZED\";\n\t\t}\n\t\tif (\n\t\t\tsqlState === \"42501\" ||\n\t\t\tsqlState === \"25006\" ||\n\t\t\tsqlState === \"28P01\" ||\n\t\t\tsqlState === \"28000\"\n\t\t) {\n\t\t\treturn \"PERMISSION_DENIED\";\n\t\t}\n\t\tif (\n\t\t\tsqlState.startsWith(\"08\") ||\n\t\t\tsqlState === \"57P03\" ||\n\t\t\tNETWORK_NODE_CODES.has(code)\n\t\t) {\n\t\t\treturn \"UNREACHABLE\";\n\t\t}\n\t}\n\n\tconst message = messageOf(error);\n\tif (\n\t\t/relation [\"']?athena\\.auth_schema_migrations[\"']? does not exist/i.test(\n\t\t\tmessage,\n\t\t) ||\n\t\t/relation [\"']?auth_schema_migrations[\"']? does not exist/i.test(message) ||\n\t\t/schema [\"']?athena[\"']? does not exist/i.test(message)\n\t) {\n\t\treturn \"UNINITIALIZED\";\n\t}\n\tif (\n\t\t/permission denied|insufficient privilege|password authentication failed|not authorized/i.test(\n\t\t\tmessage,\n\t\t)\n\t) {\n\t\treturn \"PERMISSION_DENIED\";\n\t}\n\tif (\n\t\t/econnrefused|enotfound|etimedout|eai_again|econnreset|connection refused|connection terminated|timeout expired/i.test(\n\t\t\tmessage,\n\t\t)\n\t) {\n\t\treturn \"UNREACHABLE\";\n\t}\n\n\treturn \"UNREACHABLE\";\n}\n\nexport function healthFromAuthPlan(input: {\n\tconflictCount: number;\n\thasBlockingDrift: boolean;\n\tentries: ReadonlyArray<{ ledgerState: string }>;\n}): AthenaAuthLedgerHealth {\n\tif (input.entries.some((entry) => entry.ledgerState === \"unknown\")) {\n\t\treturn \"FUTURE_GENERATION\";\n\t}\n\tif (input.hasBlockingDrift) {\n\t\treturn \"DRIFT\";\n\t}\n\tif (\n\t\tinput.entries.length > 0 &&\n\t\tinput.entries.every((entry) => entry.ledgerState === \"absent\")\n\t) {\n\t\treturn \"UNINITIALIZED\";\n\t}\n\tif (input.conflictCount > 0) {\n\t\treturn \"DRIFT\";\n\t}\n\treturn \"HEALTHY\";\n}\n","import type { AthenaAuthDatabase } from \"./database.ts\";\nimport { assertQueryResult } from \"./database.ts\";\nimport type { SchemaExpectation } from \"./schema-manifest.ts\";\n\nexport type AthenaAuthSchemaDriftKind =\n  | \"missing-schema\"\n  | \"missing-table\"\n  | \"missing-column\"\n  | \"column-mismatch\"\n  | \"missing-index\"\n  | \"missing-constraint\";\n\nexport interface AthenaAuthSchemaDrift {\n  kind: AthenaAuthSchemaDriftKind;\n  object: string;\n  expected?: unknown;\n  actual?: unknown;\n}\n\ninterface CatalogSnapshot {\n  schemas: Set<string>;\n  tables: Set<string>;\n  columns: Set<string>;\n  indexes: Set<string>;\n  constraints: Set<string>;\n}\n\nasync function loadCatalogSnapshot(\n  db: AthenaAuthDatabase\n): Promise<CatalogSnapshot> {\n  const schemasResult = assertQueryResult<{ nspname: string }>(\n    await db.query<{ nspname: string }>(\n      `SELECT nspname FROM pg_catalog.pg_namespace WHERE nspname = 'athena'`\n    ),\n    \"schema-inspect schemas\"\n  );\n\n  const tablesResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n  }>(\n    await db.query<{ table_schema: string; table_name: string }>(\n      `SELECT table_schema, table_name\n       FROM information_schema.tables\n       WHERE table_schema = 'athena'\n         AND table_type = 'BASE TABLE'`\n    ),\n    \"schema-inspect tables\"\n  );\n\n  const columnsResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n    column_name: string;\n  }>(\n    await db.query<{\n      table_schema: string;\n      table_name: string;\n      column_name: string;\n    }>(\n      `SELECT table_schema, table_name, column_name\n       FROM information_schema.columns\n       WHERE table_schema = 'athena'`\n    ),\n    \"schema-inspect columns\"\n  );\n\n  const indexesResult = assertQueryResult<{\n    schemaname: string;\n    indexname: string;\n  }>(\n    await db.query<{ schemaname: string; indexname: string }>(\n      `SELECT schemaname, indexname\n       FROM pg_catalog.pg_indexes\n       WHERE schemaname = 'athena'`\n    ),\n    \"schema-inspect indexes\"\n  );\n\n  const constraintsResult = assertQueryResult<{\n    table_schema: string;\n    table_name: string;\n    constraint_name: string;\n  }>(\n    await db.query<{\n      table_schema: string;\n      table_name: string;\n      constraint_name: string;\n    }>(\n      `SELECT table_schema, table_name, constraint_name\n       FROM information_schema.table_constraints\n       WHERE table_schema = 'athena'`\n    ),\n    \"schema-inspect constraints\"\n  );\n\n  return {\n    schemas: new Set(schemasResult.rows.map((row) => row.nspname)),\n    tables: new Set(\n      tablesResult.rows.map((row) => `${row.table_schema}.${row.table_name}`)\n    ),\n    columns: new Set(\n      columnsResult.rows.map(\n        (row) => `${row.table_schema}.${row.table_name}.${row.column_name}`\n      )\n    ),\n    indexes: new Set(\n      indexesResult.rows.map((row) => `${row.schemaname}.${row.indexname}`)\n    ),\n    constraints: new Set(\n      constraintsResult.rows.map(\n        (row) =>\n          `${row.table_schema}.${row.table_name}.${row.constraint_name}`\n      )\n    ),\n  };\n}\n\nfunction evaluateExpectation(\n  expectation: SchemaExpectation,\n  catalog: CatalogSnapshot\n): AthenaAuthSchemaDrift | undefined {\n  switch (expectation.kind) {\n    case \"schema\": {\n      const name = expectation.schema ?? expectation.name ?? \"\";\n      if (!catalog.schemas.has(name)) {\n        return {\n          kind: \"missing-schema\",\n          object: expectation.object,\n          expected: name,\n        };\n      }\n      return undefined;\n    }\n    case \"table\": {\n      if (!catalog.tables.has(expectation.object)) {\n        return {\n          kind: \"missing-table\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"column\": {\n      if (!catalog.columns.has(expectation.object)) {\n        return {\n          kind: \"missing-column\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"index\": {\n      if (!catalog.indexes.has(expectation.object)) {\n        return {\n          kind: \"missing-index\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    case \"constraint\": {\n      if (!catalog.constraints.has(expectation.object)) {\n        return {\n          kind: \"missing-constraint\",\n          object: expectation.object,\n          expected: expectation.object,\n        };\n      }\n      return undefined;\n    }\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Compare structural expectations against live PostgreSQL catalogs.\n */\nexport async function inspectAthenaAuthExpectations(\n  db: AthenaAuthDatabase,\n  expectations: readonly SchemaExpectation[]\n): Promise<AthenaAuthSchemaDrift[]> {\n  if (expectations.length === 0) {\n    return [];\n  }\n  const catalog = await loadCatalogSnapshot(db);\n  const drift: AthenaAuthSchemaDrift[] = [];\n  for (const expectation of expectations) {\n    const item = evaluateExpectation(expectation, catalog);\n    if (item) {\n      drift.push(item);\n    }\n  }\n  return drift;\n}\n","/**\n * Structural expectations for embedded Athena Auth migrations.\n * Used for ledger/schema drift detection — not full DDL equivalence.\n */\n\nexport type MigrationRepairability = \"idempotent\" | \"inspect-only\" | \"manual\";\n\nexport type SchemaExpectationKind =\n  | \"schema\"\n  | \"table\"\n  | \"column\"\n  | \"index\"\n  | \"constraint\";\n\nexport interface SchemaExpectation {\n  kind: SchemaExpectationKind;\n  /** Fully-qualified display name, e.g. athena.users or athena.idx_users_email */\n  object: string;\n  schema?: string;\n  table?: string;\n  name?: string;\n  column?: string;\n}\n\nexport interface AthenaAuthMigrationDefinition {\n  version: number;\n  name: string;\n  sql: string;\n  expectations?: readonly SchemaExpectation[];\n  repairability?: MigrationRepairability;\n}\n\nexport function schema(name: string): SchemaExpectation {\n  return { kind: \"schema\", name, object: name, schema: name };\n}\n\nexport function table(schemaName: string, tableName: string): SchemaExpectation {\n  return {\n    kind: \"table\",\n    schema: schemaName,\n    table: tableName,\n    name: tableName,\n    object: `${schemaName}.${tableName}`,\n  };\n}\n\nexport function column(\n  schemaName: string,\n  tableName: string,\n  columnName: string\n): SchemaExpectation {\n  return {\n    kind: \"column\",\n    schema: schemaName,\n    table: tableName,\n    column: columnName,\n    name: columnName,\n    object: `${schemaName}.${tableName}.${columnName}`,\n  };\n}\n\nexport function index(schemaName: string, indexName: string): SchemaExpectation {\n  return {\n    kind: \"index\",\n    schema: schemaName,\n    name: indexName,\n    object: `${schemaName}.${indexName}`,\n  };\n}\n\nexport function constraint(\n  schemaName: string,\n  tableName: string,\n  constraintName: string\n): SchemaExpectation {\n  return {\n    kind: \"constraint\",\n    schema: schemaName,\n    table: tableName,\n    name: constraintName,\n    object: `${schemaName}.${tableName}.${constraintName}`,\n  };\n}\n\n/** Core structural invariants keyed by migration version. */\nexport const ATHENA_AUTH_MIGRATION_EXPECTATIONS: Readonly<\n  Record<number, readonly SchemaExpectation[]>\n> = {\n  1: [\n    table(\"athena\", \"users\"),\n    table(\"athena\", \"sessions\"),\n    table(\"athena\", \"accounts\"),\n    table(\"athena\", \"verifications\"),\n    index(\"athena\", \"idx_users_email\"),\n    index(\"athena\", \"idx_sessions_token\"),\n  ],\n  2: [\n    table(\"athena\", \"organization\"),\n    table(\"athena\", \"member\"),\n    table(\"athena\", \"invitation\"),\n    index(\"athena\", \"idx_organization_slug\"),\n  ],\n  3: [table(\"athena\", \"two_factor\"), index(\"athena\", \"idx_two_factor_user_id\")],\n  4: [table(\"athena\", \"api_keys\"), index(\"athena\", \"idx_api_keys_user_id\")],\n  5: [table(\"athena\", \"passkeys\"), index(\"athena\", \"idx_passkeys_user_id\")],\n  6: [table(\"athena\", \"email_send_failures\")],\n  7: [table(\"athena\", \"emails\")],\n  9: [column(\"athena\", \"users\", \"last_sign_in_at\")],\n  11: [table(\"athena\", \"email_templates\")],\n  12: [\n    column(\"athena\", \"email_send_failures\", \"resolved\"),\n    column(\"athena\", \"emails\", \"flow\"),\n  ],\n  14: [table(\"athena\", \"email_event_types\")],\n  15: [column(\"athena\", \"email_templates\", \"attachments\")],\n  21: [\n    table(\"athena\", \"auth_schema_migrations\"),\n    table(\"athena\", \"runtime_key\"),\n  ],\n  22: [\n    column(\"athena\", \"passkeys\", \"updated_at\"),\n    index(\"athena\", \"idx_passkeys_user_id\"),\n    index(\"athena\", \"idx_passkeys_credential_id\"),\n  ],\n  23: [\n    table(\"athena\", \"audit_log_auth\"),\n    table(\"athena\", \"traces_auth\"),\n    index(\"athena\", \"audit_log_auth_event_id_idx\"),\n    index(\"athena\", \"traces_auth_trace_id_idx\"),\n    index(\"athena\", \"traces_auth_event_id_idx\"),\n  ],\n  24: [table(\"athena\", \"email_event_types\")],\n  25: [column(\"athena\", \"passkeys\", \"aaguid\")],\n  26: [\n    column(\"athena\", \"passkeys\", \"resident_key\"),\n    table(\"athena\", \"passkey_registration_transactions\"),\n    index(\"athena\", \"idx_passkey_reg_tx_challenge_hash\"),\n  ],\n  27: [\n    table(\"athena\", \"auth_bridge_codes\"),\n    index(\"athena\", \"idx_auth_bridge_codes_expires_at\"),\n    index(\"athena\", \"idx_auth_bridge_codes_session_id\"),\n    index(\"athena\", \"idx_auth_bridge_codes_user_id\"),\n    index(\"athena\", \"idx_auth_bridge_codes_outstanding_session\"),\n  ],\n  28: [\n    table(\"athena\", \"oauth_transactions\"),\n    index(\"athena\", \"idx_oauth_transactions_expires_at\"),\n  ],\n  29: [\n    table(\"athena\", \"notification_preferences\"),\n    index(\"athena\", \"uq_notification_preferences_user_channel_topic\"),\n    index(\"athena\", \"uq_notification_preferences_user_org_channel_topic\"),\n  ],\n  30: [\n    column(\"athena\", \"organization\", \"created_by_user_id\"),\n    index(\"athena\", \"idx_organization_created_by_user_id\"),\n  ],\n  31: [\n    table(\"athena\", \"authorization_rights\"),\n    table(\"athena\", \"authorization_roles\"),\n    table(\"athena\", \"authorization_role_rights\"),\n    table(\"athena\", \"authorization_user_roles\"),\n    table(\"athena\", \"authorization_member_roles\"),\n    table(\"athena\", \"authorization_revisions\"),\n    table(\"athena\", \"authorization_audit_log\"),\n  ],\n  32: [\n    constraint(\"athena\", \"authorization_roles\", \"authorization_roles_scope_organization_id\"),\n    constraint(\"athena\", \"authorization_revisions\", \"authorization_revisions_scope_nullability\"),\n  ],\n};\n\n/**\n * Auth migrations use IF NOT EXISTS / ADD COLUMN IF NOT EXISTS and are\n * generally safe to re-apply for structural repair.\n */\nexport function repairabilityForAuthMigration(): MigrationRepairability {\n  return \"idempotent\";\n}\n","import { checksumMigrationSql } from \"../../migrations/checksum.ts\";\nimport { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport {\n  ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n  ATHENA_AUTH_SCHEMA_GENERATION,\n} from \"../contract/index.ts\";\nimport { ATHENA_AUTHORIZATION_ASSIGNMENT_SQL, ATHENA_AUTHORIZATION_CONSTRAINTS_SQL } from \"./authorization-sql.ts\";\nimport type { AthenaAuthDatabase } from \"./database.ts\";\nimport { assertQueryResult } from \"./database.ts\";\nimport { ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS } from \"./email/schema-sql.ts\";\nimport { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport {\n  type AthenaAuthLedgerHealth,\n  classifyAuthLedgerQueryError,\n  healthFromAuthPlan,\n} from \"./ledger-health.ts\";\nimport type { AthenaAuthSchemaDrift } from \"./schema-inspect.ts\";\nimport { inspectAthenaAuthExpectations } from \"./schema-inspect.ts\";\nimport {\n  ATHENA_AUTH_MIGRATION_EXPECTATIONS,\n  type MigrationRepairability,\n  repairabilityForAuthMigration,\n} from \"./schema-manifest.ts\";\n\nconst SCHEMA_STATEMENTS: ReadonlyArray<{ name: string; sql: string; version: number }> = [\n  {\n    name: \"001_create_schema\",\n    sql: \"CREATE SCHEMA IF NOT EXISTS athena\",\n    version: 0,\n  },\n  {\n    name: \"001_create_core_tables\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.users (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    email TEXT UNIQUE,\n    email_verified BOOLEAN NOT NULL DEFAULT FALSE,\n    image TEXT,\n    username TEXT UNIQUE,\n    display_username TEXT,\n    two_factor_enabled BOOLEAN NOT NULL DEFAULT FALSE,\n    role TEXT,\n    banned BOOLEAN NOT NULL DEFAULT FALSE,\n    ban_reason TEXT,\n    ban_expires TIMESTAMPTZ,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.sessions (\n    id TEXT PRIMARY KEY,\n    expires_at TIMESTAMPTZ NOT NULL,\n    token TEXT NOT NULL UNIQUE,\n    ip_address TEXT,\n    user_agent TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    impersonated_by TEXT,\n    active_organization_id TEXT,\n    active BOOLEAN NOT NULL DEFAULT TRUE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.accounts (\n    id TEXT PRIMARY KEY,\n    account_id TEXT NOT NULL,\n    provider_id TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    access_token TEXT,\n    refresh_token TEXT,\n    id_token TEXT,\n    access_token_expires_at TIMESTAMPTZ,\n    refresh_token_expires_at TIMESTAMPTZ,\n    scope TEXT,\n    password TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (provider_id, account_id)\n);\nCREATE TABLE IF NOT EXISTS athena.verifications (\n    id TEXT PRIMARY KEY,\n    identifier TEXT NOT NULL,\n    value TEXT NOT NULL,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_users_email ON athena.users (email);\nCREATE INDEX IF NOT EXISTS idx_users_username ON athena.users (username);\nCREATE INDEX IF NOT EXISTS idx_sessions_token ON athena.sessions (token);\nCREATE INDEX IF NOT EXISTS idx_sessions_user_id ON athena.sessions (user_id);\nCREATE INDEX IF NOT EXISTS idx_sessions_expires_at ON athena.sessions (expires_at);\nCREATE INDEX IF NOT EXISTS idx_accounts_user_id ON athena.accounts (user_id);\nCREATE INDEX IF NOT EXISTS idx_accounts_provider_account ON athena.accounts (provider_id, account_id);\n`,\n    version: 1,\n  },\n  {\n    name: \"002_create_organization_tables\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.organization (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    slug TEXT NOT NULL UNIQUE,\n    logo TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.member (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    role TEXT NOT NULL DEFAULT 'member',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (organization_id, user_id)\n);\nCREATE TABLE IF NOT EXISTS athena.invitation (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    email TEXT NOT NULL,\n    role TEXT NOT NULL DEFAULT 'member',\n    status TEXT NOT NULL DEFAULT 'pending',\n    inviter_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_organization_slug ON athena.organization (slug);\nCREATE INDEX IF NOT EXISTS idx_member_organization_id ON athena.member (organization_id);\nCREATE INDEX IF NOT EXISTS idx_member_user_id ON athena.member (user_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_organization_id ON athena.invitation (organization_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_email ON athena.invitation (email);\n`,\n    version: 2,\n  },\n  {\n    name: \"003_create_two_factor_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.two_factor (\n    id TEXT PRIMARY KEY,\n    secret TEXT NOT NULL,\n    backup_codes TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (user_id)\n);\nCREATE INDEX IF NOT EXISTS idx_two_factor_user_id ON athena.two_factor (user_id);\n`,\n    version: 3,\n  },\n  {\n    name: \"004_create_api_key_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.api_keys (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    start TEXT,\n    prefix TEXT,\n    key TEXT NOT NULL UNIQUE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    refill_interval INTEGER,\n    refill_amount INTEGER,\n    last_refill_at TIMESTAMPTZ,\n    enabled BOOLEAN NOT NULL DEFAULT true,\n    rate_limit_enabled BOOLEAN NOT NULL DEFAULT false,\n    rate_limit_time_window INTEGER,\n    rate_limit_max INTEGER,\n    request_count INTEGER DEFAULT 0,\n    remaining INTEGER,\n    last_request TIMESTAMPTZ,\n    expires_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    permissions TEXT,\n    metadata TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON athena.api_keys (user_id);\n`,\n    version: 4,\n  },\n  {\n    name: \"005_create_passkey_table\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.passkeys (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    public_key TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    credential_id TEXT NOT NULL UNIQUE,\n    counter BIGINT NOT NULL DEFAULT 0,\n    device_type TEXT NOT NULL DEFAULT 'singleDevice',\n    backed_up BOOLEAN NOT NULL DEFAULT FALSE,\n    transports TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_passkeys_user_id ON athena.passkeys (user_id);\nCREATE INDEX IF NOT EXISTS idx_passkeys_credential_id ON athena.passkeys (credential_id);\n`,\n    version: 5,\n  },\n  {\n    name: \"009_add_last_sign_in_at_to_users\",\n    sql: `\nALTER TABLE athena.users ADD COLUMN IF NOT EXISTS last_sign_in_at TIMESTAMPTZ;\nCREATE INDEX IF NOT EXISTS idx_users_last_sign_in_at ON athena.users (last_sign_in_at);\n`,\n    version: 9,\n  },\n  {\n    name: \"021_runtime_key_and_ledger\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.auth_schema_migrations (\n    version INTEGER PRIMARY KEY,\n    name TEXT NOT NULL,\n    applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.runtime_key (\n    key_id TEXT PRIMARY KEY,\n    purpose TEXT NOT NULL,\n    key_material TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    activated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    retired_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_runtime_key_active_purpose\n    ON athena.runtime_key (purpose)\n    WHERE retired_at IS NULL;\n`,\n    version: 21,\n  },\n  {\n    name: \"022_add_updated_at_to_passkeys\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\n`,\n    version: 22,\n  },\n  {\n    name: \"023_auth_observability\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.audit_log_auth (\n    id UUID PRIMARY KEY,\n    event_id UUID NOT NULL,\n    trace_id TEXT NOT NULL,\n    event TEXT NOT NULL,\n    actor_kind TEXT NOT NULL,\n    actor_user_id TEXT,\n    actor_session_id TEXT,\n    subject_type TEXT,\n    subject_id TEXT,\n    organization_id TEXT,\n    previous JSONB,\n    result JSONB,\n    request_ip TEXT,\n    request_user_agent TEXT,\n    outcome TEXT NOT NULL DEFAULT 'success',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS audit_log_auth_event_id_idx\n    ON athena.audit_log_auth(event_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_trace_id_idx\n    ON athena.audit_log_auth(trace_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_event_created_at_idx\n    ON athena.audit_log_auth(event, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_actor_user_id_idx\n    ON athena.audit_log_auth(actor_user_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_subject_idx\n    ON athena.audit_log_auth(subject_type, subject_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_organization_id_idx\n    ON athena.audit_log_auth(organization_id, created_at DESC);\nCREATE TABLE IF NOT EXISTS athena.traces_auth (\n    id UUID PRIMARY KEY,\n    trace_id TEXT NOT NULL,\n    event_id UUID,\n    operation TEXT,\n    method TEXT NOT NULL,\n    path TEXT NOT NULL,\n    actor_kind TEXT,\n    actor_user_id TEXT,\n    organization_id TEXT,\n    outcome TEXT NOT NULL,\n    status_code INTEGER,\n    authorize_ms DOUBLE PRECISION,\n    validate_ms DOUBLE PRECISION,\n    before_hooks_ms DOUBLE PRECISION,\n    transaction_ms DOUBLE PRECISION,\n    after_hooks_ms DOUBLE PRECISION,\n    total_ms DOUBLE PRECISION NOT NULL,\n    error_code TEXT,\n    error_phase TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    started_at TIMESTAMPTZ NOT NULL,\n    completed_at TIMESTAMPTZ NOT NULL\n);\nCREATE INDEX IF NOT EXISTS traces_auth_trace_id_idx\n    ON athena.traces_auth(trace_id);\nCREATE INDEX IF NOT EXISTS traces_auth_event_id_idx\n    ON athena.traces_auth(event_id);\nCREATE INDEX IF NOT EXISTS traces_auth_operation_started_at_idx\n    ON athena.traces_auth(operation, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_outcome_started_at_idx\n    ON athena.traces_auth(outcome, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_actor_user_id_idx\n    ON athena.traces_auth(actor_user_id, started_at DESC);\n`,\n    version: 23,\n  },\n  ...ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS,\n  {\n    name: \"025_add_aaguid_to_passkeys\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS aaguid TEXT;\n`,\n    version: 25,\n  },\n  {\n    name: \"026_passkey_resident_key_and_registration_transactions\",\n    sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS resident_key BOOLEAN;\nCREATE TABLE IF NOT EXISTS athena.passkey_registration_transactions (\n    id TEXT PRIMARY KEY,\n    challenge_hash TEXT NOT NULL,\n    rp_id TEXT NOT NULL,\n    user_handle TEXT NOT NULL,\n    mode TEXT NOT NULL,\n    context TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    consumed_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_passkey_reg_tx_challenge_hash\n    ON athena.passkey_registration_transactions (challenge_hash);\nCREATE INDEX IF NOT EXISTS idx_passkey_reg_tx_expires_at\n    ON athena.passkey_registration_transactions (expires_at);\n`,\n    version: 26,\n  },\n  {\n    name: \"027_auth_bridge_codes\",\n    sql: `CREATE TABLE IF NOT EXISTS athena.auth_bridge_codes (id TEXT PRIMARY KEY, code_hash TEXT NOT NULL UNIQUE, session_id TEXT NOT NULL REFERENCES athena.sessions (id) ON DELETE CASCADE, user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE, organization_id TEXT, destination_origin TEXT NOT NULL, redirect_path TEXT NOT NULL, expires_at TIMESTAMPTZ NOT NULL, consumed_at TIMESTAMPTZ, consume_reason TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_expires_at ON athena.auth_bridge_codes (expires_at); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_session_id ON athena.auth_bridge_codes (session_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_user_id ON athena.auth_bridge_codes (user_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_outstanding_session ON athena.auth_bridge_codes (session_id) WHERE consumed_at IS NULL;`,\n    version: 27,\n  },\n  {\n    name: \"028_oauth_transactions\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_transactions (\n    id TEXT PRIMARY KEY,\n    state_hash TEXT NOT NULL UNIQUE,\n    provider_id TEXT NOT NULL,\n    intent TEXT NOT NULL,\n    code_challenge_method TEXT NOT NULL,\n    pkce_verifier_ciphertext TEXT NOT NULL,\n    nonce_hash TEXT NOT NULL,\n    redirect_uri TEXT NOT NULL,\n    user_id TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_transactions_expires_at\n    ON athena.oauth_transactions (expires_at);\n`,\n    version: 28,\n  },\n  {\n    name: \"029_notification_preferences\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.notification_preferences (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL,\n    organization_id TEXT NULL,\n    channel TEXT NOT NULL,\n    topic TEXT NOT NULL,\n    enabled BOOLEAN NOT NULL DEFAULT TRUE,\n    digest TEXT NULL,\n    metadata JSONB NOT NULL DEFAULT '{}'::jsonb,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_channel_topic\n  ON athena.notification_preferences (user_id, channel, topic)\n  WHERE organization_id IS NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_org_channel_topic\n  ON athena.notification_preferences (user_id, organization_id, channel, topic)\n  WHERE organization_id IS NOT NULL;\n`,\n    version: 29,\n  },\n  {\n    name: \"030_organization_created_by\",\n    sql: `\nALTER TABLE athena.organization\n  ADD COLUMN IF NOT EXISTS created_by_user_id TEXT;\nUPDATE athena.organization AS org\nSET created_by_user_id = founder.user_id\nFROM (\n  SELECT DISTINCT ON (organization_id)\n    organization_id,\n    user_id\n  FROM athena.member\n  WHERE role = 'owner'\n  ORDER BY organization_id, created_at ASC, id ASC\n) AS founder\nWHERE org.created_by_user_id IS NULL\n  AND founder.organization_id = org.id;\nCREATE INDEX IF NOT EXISTS idx_organization_created_by_user_id\n  ON athena.organization (created_by_user_id);\n`,\n    version: 30,\n  },\n  {\n    name: \"031_authorization_assignment\",\n    sql: ATHENA_AUTHORIZATION_ASSIGNMENT_SQL,\n    version: 31,\n  },\n  {\n    name: \"032_authorization_assignment_constraints\",\n    sql: ATHENA_AUTHORIZATION_CONSTRAINTS_SQL,\n    version: 32,\n  },\n];\n\nexport type AthenaAuthSchemaDirection =\n  | \"current\"\n  | \"upgrade-required\"\n  | \"runtime-too-old\"\n  | \"history-diverged\";\n\nexport interface AthenaAuthLedgerEntry {\n  checksum?: string | null;\n  name: string;\n  version: number;\n}\n\nexport interface AthenaAuthSchemaCompatibility {\n  checksumMismatch: number[];\n  compatible: boolean;\n  current: number;\n  direction: AthenaAuthSchemaDirection;\n  expected: number;\n  missing: number[];\n  unknown: number[];\n}\n\nexport type AthenaAuthSchemaStatus = AthenaAuthSchemaCompatibility;\n\nexport type AthenaAuthLedgerState =\n  | \"absent\"\n  | \"applied\"\n  | \"checksum-mismatch\"\n  | \"unknown\";\n\nexport type AthenaAuthSchemaState = \"unknown\" | \"healthy\" | \"drift\";\n\nexport type AthenaAuthMigrationAction =\n  | \"none\"\n  | \"apply\"\n  | \"repair\"\n  | \"blocked\";\n\nexport interface AthenaAuthMigrationPlanEntry {\n  version: number;\n  name: string;\n  checksum: string;\n  ledgerState: AthenaAuthLedgerState;\n  schemaState: AthenaAuthSchemaState;\n  action: AthenaAuthMigrationAction;\n  repairability: MigrationRepairability;\n  drift?: AthenaAuthSchemaDrift[];\n}\n\nexport interface AthenaAuthMigrationPlan {\n  entries: AthenaAuthMigrationPlanEntry[];\n  appliedCount: number;\n  pendingCount: number;\n  driftCount: number;\n  conflictCount: number;\n  hasBlockingDrift: boolean;\n  health: AthenaAuthLedgerHealth;\n}\n\nexport interface AthenaAuthRepairResult {\n  repaired: AthenaAuthMigrationPlanEntry[];\n  skipped: AthenaAuthMigrationPlanEntry[];\n  dryRun: boolean;\n}\n\nfunction ledgeredStatements(): Array<(typeof SCHEMA_STATEMENTS)[number]> {\n  return SCHEMA_STATEMENTS.filter((statement) => statement.version > 0).sort(\n    (a, b) => a.version - b.version\n  );\n}\n\nfunction statementByVersion(\n  version: number\n): (typeof SCHEMA_STATEMENTS)[number] | undefined {\n  return SCHEMA_STATEMENTS.find((statement) => statement.version === version);\n}\n\nexport interface AthenaAuthCanonicalMigration {\n  name: string;\n  sql: string;\n  version: number;\n}\n\n/** Package-owned Auth generations (ledgered, version > 0). Execution SSOT. */\nexport function listAthenaAuthCanonicalMigrations(): AthenaAuthCanonicalMigration[] {\n  return ledgeredStatements().map((statement) => ({\n    name: statement.name,\n    sql: statement.sql,\n    version: statement.version,\n  }));\n}\n\nexport function getAthenaAuthExpectedLedger(): AthenaAuthLedgerEntry[] {\n  return listAthenaAuthCanonicalMigrations().map((statement) => ({\n    checksum: checksumMigrationSql(statement.sql),\n    name: statement.name,\n    version: statement.version,\n  }));\n}\n\nexport function getAthenaAuthSchemaManifest(): Record<string, string> {\n  const manifest: Record<string, string> = {};\n  for (const entry of getAthenaAuthExpectedLedger()) {\n    manifest[String(entry.version).padStart(3, \"0\")] = entry.checksum ?? \"\";\n  }\n  return manifest;\n}\n\nfunction maxVersion(versions: Iterable<number>): number {\n  let max = 0;\n  for (const version of versions) {\n    if (version > max) {\n      max = version;\n    }\n  }\n  return max;\n}\n\nexport function compareAthenaAuthLedgers(\n  actual: ReadonlyArray<Pick<AthenaAuthLedgerEntry, \"checksum\" | \"version\">>,\n  expected: readonly AthenaAuthLedgerEntry[] = getAthenaAuthExpectedLedger()\n): AthenaAuthSchemaCompatibility {\n  const expectedByVersion = new Map(\n    expected.map((entry) => [entry.version, entry])\n  );\n  const actualByVersion = new Map<number, (typeof actual)[number]>();\n  for (const row of actual) {\n    const version = Number(row.version);\n    if (!Number.isFinite(version)) {\n      continue;\n    }\n    actualByVersion.set(version, row);\n  }\n\n  const missing: number[] = [];\n  const checksumMismatch: number[] = [];\n  const checksumMissing: number[] = [];\n  for (const entry of expected) {\n    const applied = actualByVersion.get(entry.version);\n    if (!applied) {\n      missing.push(entry.version);\n      continue;\n    }\n    const checksum = applied.checksum?.trim() ?? \"\";\n    if (!checksum) {\n      checksumMissing.push(entry.version);\n      continue;\n    }\n    if (entry.checksum && checksum !== entry.checksum) {\n      checksumMismatch.push(entry.version);\n    }\n  }\n\n  const unknown = [...actualByVersion.keys()]\n    .filter((version) => !expectedByVersion.has(version))\n    .sort((a, b) => a - b);\n  const current = maxVersion(actualByVersion.keys());\n  const expectedGeneration = maxVersion(expected.map((entry) => entry.version));\n\n  const appliedExpected = [...actualByVersion.keys()].filter((version) =>\n    expectedByVersion.has(version)\n  );\n  const maxAppliedExpected = maxVersion(appliedExpected);\n  const hasHole = missing.some((version) => version < maxAppliedExpected);\n  const hasNewerUnknown = unknown.some((version) => version > expectedGeneration);\n\n  let direction: AthenaAuthSchemaDirection;\n  if (hasNewerUnknown) {\n    direction = \"runtime-too-old\";\n  } else if (checksumMismatch.length > 0 || unknown.length > 0 || hasHole) {\n    direction = \"history-diverged\";\n  } else if (missing.length > 0 || checksumMissing.length > 0) {\n    direction = \"upgrade-required\";\n  } else {\n    direction = \"current\";\n  }\n\n  return {\n    checksumMismatch,\n    compatible: direction === \"current\",\n    current,\n    direction,\n    expected: expectedGeneration || ATHENA_AUTH_SCHEMA_GENERATION,\n    missing,\n    unknown,\n  };\n}\n\nexport function toAthenaAuthSchemaCompatibility(\n  current: number,\n  expected: number = ATHENA_AUTH_SCHEMA_GENERATION\n): AthenaAuthSchemaCompatibility {\n  const direction: AthenaAuthSchemaDirection =\n    current === expected\n      ? \"current\"\n      : current > expected\n        ? \"runtime-too-old\"\n        : \"upgrade-required\";\n  return {\n    checksumMismatch: [],\n    compatible: direction === \"current\",\n    current,\n    direction,\n    expected,\n    missing: [],\n    unknown: current > expected ? [current] : [],\n  };\n}\n\nfunction expectedName(version: number): string {\n  return (\n    getAthenaAuthExpectedLedger().find((entry) => entry.version === version)\n      ?.name ?? String(version).padStart(3, \"0\")\n  );\n}\n\nfunction formatMissingLines(versions: readonly number[]): string {\n  if (versions.length === 0) {\n    return \"\";\n  }\n  return `\\n\\nMissing:\\n${versions.map((version) => `    ${expectedName(version)}`).join(\"\\n\")}`;\n}\n\nfunction formatSchemaCompatibilityError(status: AthenaAuthSchemaCompatibility): {\n  code: string;\n  message: string;\n} {\n  if (status.direction === \"runtime-too-old\") {\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_TOO_NEW\",\n      message: `ATHENA_AUTH_SCHEMA_TOO_NEW\\n\\nEmbedded Athena Auth requires schema generation ${status.expected}.\\nDatabase currently has generation ${status.current}.\\n\\nUpgrade @xylex-group/athena.`,\n    };\n  }\n  if (status.direction === \"history-diverged\") {\n    const mismatch =\n      status.checksumMismatch.length > 0\n        ? `\\n\\nChecksum mismatch:\\n${status.checksumMismatch.map((version) => `    ${expectedName(version)}`).join(\"\\n\")}`\n        : \"\";\n    const unknown =\n      status.unknown.length > 0\n        ? `\\n\\nUnknown:\\n${status.unknown.map((version) => `    ${version}`).join(\"\\n\")}`\n        : \"\";\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_DRIFT\",\n      message: `ATHENA_AUTH_SCHEMA_DRIFT\\n\\nEmbedded Athena Auth schema history diverged.\\nRuntime generation ${status.expected}. Database generation ${status.current}.\\n\\nRun:\\n\\n    npx athena-js migrate\\n${formatMissingLines(status.missing)}${mismatch}${unknown}`,\n    };\n  }\n  if (status.current === 0) {\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_MISSING\",\n      message:\n        \"ATHENA_AUTH_SCHEMA_MISSING\\n\\nAthena Auth schema is not installed.\\n\\nRun:\\n\\n    npx athena-js migrate\",\n    };\n  }\n  return {\n    code: \"ATHENA_AUTH_SCHEMA_OUTDATED\",\n    message: `ATHENA_AUTH_SCHEMA_OUTDATED\\n\\nEmbedded Athena Auth requires schema generation ${status.expected}.\\nDatabase currently has generation ${status.current}.\\n\\nRun:\\n\\n    npx athena-js migrate${formatMissingLines(status.missing)}`,\n  };\n}\n\nasync function readAuthSchemaLedgerRows(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthLedgerEntry[]> {\n  try {\n    const applied = assertQueryResult<{\n      checksum?: string | null;\n      name?: string;\n      version: number;\n    }>(\n      await db.query<{\n        checksum?: string | null;\n        name?: string;\n        version: number;\n      }>(\n        \"SELECT version, name, checksum FROM athena.auth_schema_migrations ORDER BY version\"\n      ),\n      \"reading migration ledger\"\n    );\n    return applied.rows.map((row) => ({\n      checksum: row.checksum,\n      name: row.name ?? expectedName(Number(row.version)),\n      version: Number(row.version),\n    }));\n  } catch (error) {\n    if (\n      error instanceof AthenaAuthRuntimeError &&\n      error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n    ) {\n      throw error;\n    }\n    const kind = classifyAuthLedgerQueryError(error);\n    if (kind === \"UNINITIALIZED\") {\n      return [];\n    }\n    try {\n      const applied = assertQueryResult<{ name?: string; version: number }>(\n        await db.query<{ name?: string; version: number }>(\n          \"SELECT version, name FROM athena.auth_schema_migrations ORDER BY version\"\n        ),\n        \"reading migration ledger (legacy columns)\"\n      );\n      return applied.rows.map((row) => ({\n        name: row.name ?? expectedName(Number(row.version)),\n        version: Number(row.version),\n      }));\n    } catch (inner) {\n      if (\n        inner instanceof AthenaAuthRuntimeError &&\n        inner.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n      ) {\n        throw inner;\n      }\n      if (classifyAuthLedgerQueryError(inner) === \"UNINITIALIZED\") {\n        return [];\n      }\n      throw wrapAuthLedgerQueryError(inner);\n    }\n  }\n}\n\nfunction wrapAuthLedgerQueryError(error: unknown): AthenaAuthRuntimeError {\n  if (\n    error instanceof AthenaAuthRuntimeError &&\n    (error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" ||\n      error.code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\" ||\n      error.code === \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\")\n  ) {\n    return error;\n  }\n  const kind = classifyAuthLedgerQueryError(error);\n  if (kind === \"INVALID_LEDGER\") {\n    if (error instanceof AthenaAuthRuntimeError) {\n      return error;\n    }\n    return new AthenaAuthRuntimeError(\n      500,\n      \"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n      { cause: error, code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" }\n    );\n  }\n  if (kind === \"PERMISSION_DENIED\") {\n    return new AthenaAuthRuntimeError(\n      403,\n      [\n        \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\",\n        \"\",\n        \"Embedded Auth cannot read athena.auth_schema_migrations.\",\n        \"\",\n        error instanceof Error ? error.message : String(error),\n      ].join(\"\\n\"),\n      { cause: error, code: \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\" }\n    );\n  }\n  const causeText = error instanceof Error ? error.message : String(error);\n  const causeFirstLine = causeText.split(/\\r?\\n/, 1)[0] ?? causeText;\n  return new AthenaAuthRuntimeError(\n    503,\n    [\n      `ATHENA_AUTH_LEDGER_UNREACHABLE: ${causeFirstLine}`,\n      \"\",\n      \"Embedded Auth could not reach the database to read the migration ledger.\",\n      \"\",\n      causeText,\n    ].join(\"\\n\"),\n    { cause: error, code: \"ATHENA_AUTH_LEDGER_UNREACHABLE\" }\n  );\n}\n\n/**\n * Session advisory lock on this Auth database connection.\n * Distinct from application `pg_advisory_lock(ATHA, MIGS)` — that lock is held\n * on the migrate backend session and does not cover this connection.\n */\nexport async function withAthenaAuthMigrationLock<T>(\n  db: AthenaAuthDatabase,\n  fn: () => Promise<T>\n): Promise<T> {\n  await db.query(`SELECT pg_advisory_lock($1)`, [\n    ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n  ]);\n  try {\n    return await fn();\n  } finally {\n    try {\n      await db.query(`SELECT pg_advisory_unlock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n    } catch {\n      // Session end / pool release drops session-level locks.\n    }\n  }\n}\n\nfunction formatDriftBlock(entries: readonly AthenaAuthMigrationPlanEntry[]): string {\n  const drifted = entries.filter(\n    (entry) => entry.schemaState === \"drift\" || entry.action === \"repair\"\n  );\n  if (drifted.length === 0) {\n    return \"\";\n  }\n  const blocks = drifted.map((entry) => {\n    const missing = (entry.drift ?? [])\n      .map((item) => `    ${item.kind.replace(\"missing-\", \"\")} ${item.object}`)\n      .join(\"\\n\");\n    return [\n      entry.name,\n      \"\",\n      \"  Missing:\",\n      missing || \"    (structural invariant)\",\n    ].join(\"\\n\");\n  });\n  return blocks.join(\"\\n\\n\");\n}\n\n/**\n * Sole planning authority for embedded Auth migrations.\n * Combines ledger history with physical schema expectations.\n */\nexport async function planAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { inspectSchema?: boolean } = {}\n): Promise<AthenaAuthMigrationPlan> {\n  const inspectSchema = options.inspectSchema !== false;\n  const expected = getAthenaAuthExpectedLedger();\n  let actualRows: AthenaAuthLedgerEntry[] = [];\n  try {\n    actualRows = await readAuthSchemaLedgerRows(db);\n  } catch (error) {\n    throw wrapAuthLedgerQueryError(error);\n  }\n\n  const actualByVersion = new Map(\n    actualRows.map((row) => [Number(row.version), row])\n  );\n  const expectedVersions = new Set(expected.map((entry) => entry.version));\n\n  const entries: AthenaAuthMigrationPlanEntry[] = [];\n\n  for (const entry of expected) {\n    const applied = actualByVersion.get(entry.version);\n    let ledgerState: AthenaAuthLedgerState = \"absent\";\n    if (applied) {\n      const checksum = applied.checksum?.trim() ?? \"\";\n      if (\n        entry.checksum &&\n        checksum &&\n        checksum !== entry.checksum\n      ) {\n        ledgerState = \"checksum-mismatch\";\n      } else {\n        ledgerState = \"applied\";\n      }\n    }\n\n    let schemaState: AthenaAuthSchemaState = \"unknown\";\n    let drift: AthenaAuthSchemaDrift[] | undefined;\n    if (inspectSchema && ledgerState === \"applied\") {\n      const expectations =\n        ATHENA_AUTH_MIGRATION_EXPECTATIONS[entry.version] ?? [];\n      if (expectations.length > 0) {\n        try {\n          drift = await inspectAthenaAuthExpectations(db, expectations);\n          schemaState = drift.length > 0 ? \"drift\" : \"healthy\";\n        } catch (error) {\n          if (\n            error instanceof AthenaAuthRuntimeError &&\n            error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\"\n          ) {\n            throw error;\n          }\n          schemaState = \"unknown\";\n        }\n      } else {\n        schemaState = \"healthy\";\n      }\n    }\n\n    let action: AthenaAuthMigrationAction = \"none\";\n    if (ledgerState === \"absent\") {\n      action = \"apply\";\n    } else if (ledgerState === \"checksum-mismatch\") {\n      action = \"blocked\";\n    } else if (schemaState === \"drift\") {\n      action = \"repair\";\n    }\n\n    entries.push({\n      version: entry.version,\n      name: entry.name,\n      checksum: entry.checksum ?? \"\",\n      ledgerState,\n      schemaState,\n      action,\n      repairability: repairabilityForAuthMigration(),\n      drift,\n    });\n  }\n\n  for (const [version, row] of actualByVersion) {\n    if (expectedVersions.has(version)) {\n      continue;\n    }\n    entries.push({\n      version,\n      name: row.name ?? String(version).padStart(3, \"0\"),\n      checksum: row.checksum ?? \"\",\n      ledgerState: \"unknown\",\n      schemaState: \"unknown\",\n      action: \"blocked\",\n      repairability: \"manual\",\n    });\n  }\n\n  entries.sort((a, b) => a.version - b.version);\n\n  const appliedCount = entries.filter((e) => e.ledgerState === \"applied\" && e.schemaState !== \"drift\").length;\n  const pendingCount = entries.filter((e) => e.action === \"apply\").length;\n  const driftCount = entries.filter((e) => e.schemaState === \"drift\").length;\n  const conflictCount = entries.filter(\n    (e) => e.action === \"blocked\" || e.ledgerState === \"checksum-mismatch\"\n  ).length;\n  const hasBlockingDrift = driftCount > 0;\n\n  return {\n    entries,\n    appliedCount,\n    pendingCount,\n    driftCount,\n    conflictCount,\n    hasBlockingDrift,\n    health: healthFromAuthPlan({\n      conflictCount,\n      entries,\n      hasBlockingDrift,\n    }),\n  };\n}\n\nexport async function repairAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { dryRun?: boolean } = {}\n): Promise<AthenaAuthRepairResult> {\n  return withAthenaAuthMigrationLock(db, async () => {\n    const plan = await planAthenaAuthSchema(db, { inspectSchema: true });\n    const toRepair = plan.entries.filter((entry) => entry.action === \"repair\");\n    const skipped = toRepair.filter((entry) => entry.repairability !== \"idempotent\");\n    const repairable = toRepair.filter((entry) => entry.repairability === \"idempotent\");\n\n    if (options.dryRun) {\n      return { repaired: repairable, skipped, dryRun: true };\n    }\n\n    if (skipped.length > 0 && repairable.length === 0) {\n      throw new AthenaAuthRuntimeError(\n        500,\n        [\n          \"ATHENA_AUTH_SCHEMA_REPAIR_MANUAL\",\n          \"\",\n          \"Athena cannot safely repair these migrations automatically.\",\n          \"\",\n          ...skipped.map((entry) => `  ${entry.name}`),\n        ].join(\"\\n\"),\n        { code: \"ATHENA_AUTH_SCHEMA_REPAIR_MANUAL\" }\n      );\n    }\n\n    await db.transaction(async (tx) => {\n      // Transaction-scoped lock on the same key as the session lock (reentrant\n      // in this session; blocks other Auth connections).\n      await tx.query(`SELECT pg_advisory_xact_lock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n      for (const entry of repairable) {\n        const statement = statementByVersion(entry.version);\n        if (!statement) {\n          continue;\n        }\n        await tx.query(statement.sql);\n      }\n    });\n\n    return { repaired: repairable, skipped, dryRun: false };\n  });\n}\n\nexport async function migrateAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { allowDrift?: boolean } = {}\n): Promise<AthenaAuthSchemaStatus> {\n  return withAthenaAuthMigrationLock(db, async () => {\n    const expected = getAthenaAuthExpectedLedger();\n\n    // Fail closed: ledger-applied migrations with physical drift must not be\n    // silently repaired by normal migrate.\n    if (!options.allowDrift) {\n      const plan = await planAthenaAuthSchema(db, { inspectSchema: true });\n      if (plan.hasBlockingDrift) {\n        throw new AthenaAuthRuntimeError(\n          500,\n          [\n            \"ATHENA_AUTH_SCHEMA_DRIFT\",\n            \"\",\n            \"Embedded Auth schema drift detected\",\n            \"\",\n            formatDriftBlock(plan.entries),\n            \"\",\n            \"Migration history says these migrations were already applied.\",\n            \"\",\n            \"Athena will not silently modify a drifted schema.\",\n            \"\",\n            \"Run:\",\n            \"\",\n            \"    athena-js migrate repair\",\n          ].join(\"\\n\"),\n          { code: \"ATHENA_AUTH_SCHEMA_DRIFT\" }\n        );\n      }\n    }\n\n    await db.transaction(async (tx) => {\n      await tx.query(`SELECT pg_advisory_xact_lock($1)`, [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n      await tx.query(\"CREATE SCHEMA IF NOT EXISTS athena\");\n      await tx.query(`\n      CREATE TABLE IF NOT EXISTS athena.auth_schema_migrations (\n        version INTEGER PRIMARY KEY,\n        name TEXT NOT NULL,\n        checksum TEXT NOT NULL DEFAULT '',\n        applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n      )\n    `);\n      await tx.query(`\n      ALTER TABLE athena.auth_schema_migrations\n        ADD COLUMN IF NOT EXISTS checksum TEXT NOT NULL DEFAULT ''\n    `);\n\n      const appliedRows = await readAuthSchemaLedgerRows(tx);\n      const preflight = compareAthenaAuthLedgers(appliedRows, expected);\n      if (preflight.direction === \"runtime-too-old\") {\n        const formatted = formatSchemaCompatibilityError(preflight);\n        throw new AthenaAuthRuntimeError(500, formatted.message, {\n          code: formatted.code,\n        });\n      }\n      if (preflight.checksumMismatch.length > 0 || preflight.unknown.length > 0) {\n        const formatted = formatSchemaCompatibilityError({\n          ...preflight,\n          direction: \"history-diverged\",\n          compatible: false,\n        });\n        throw new AthenaAuthRuntimeError(500, formatted.message, {\n          code: formatted.code,\n        });\n      }\n\n      const appliedVersions = new Set(appliedRows.map((row) => row.version));\n\n      // Ensure schema exists first (version 0), then apply in numeric order.\n      const bootstrap = SCHEMA_STATEMENTS.find((s) => s.version === 0);\n      if (bootstrap) {\n        await tx.query(bootstrap.sql);\n      }\n\n      for (const statement of ledgeredStatements()) {\n        if (appliedVersions.has(statement.version)) {\n          continue;\n        }\n        const checksum = checksumMigrationSql(statement.sql);\n        await tx.query(statement.sql);\n        await tx.query(\n          \"INSERT INTO athena.auth_schema_migrations (version, name, checksum) VALUES ($1, $2, $3) ON CONFLICT (version) DO NOTHING\",\n          [statement.version, statement.name, checksum]\n        );\n      }\n\n      for (const entry of expected) {\n        if (!appliedVersions.has(entry.version) || !entry.checksum) {\n          continue;\n        }\n        await tx.query(\n          `UPDATE athena.auth_schema_migrations\n         SET checksum = $1\n         WHERE version = $2 AND (checksum IS NULL OR checksum = '')`,\n          [entry.checksum, entry.version]\n        );\n      }\n    });\n\n    await new PostgresAuthorizationStore(db).materialize();\n    return readAthenaAuthSchemaStatus(db);\n  });\n}\n\nexport async function readAthenaAuthSchemaStatus(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthSchemaStatus> {\n  const rows = await readAuthSchemaLedgerRows(db);\n  return compareAthenaAuthLedgers(rows);\n}\n\nexport async function assertAthenaAuthSchemaCompatible(\n  db: AthenaAuthDatabase\n): Promise<AthenaAuthSchemaCompatibility> {\n  const status = await readAthenaAuthSchemaStatus(db);\n  if (status.compatible) {\n    return status;\n  }\n  const formatted = formatSchemaCompatibilityError(status);\n  throw new AthenaAuthRuntimeError(500, formatted.message, {\n    code: formatted.code,\n  });\n}\n","export function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean\n): boolean {\n  if (!rawValue) {\n    return fallback;\n  }\n\n  const normalized = rawValue.trim().toLowerCase();\n\n  if (\n    normalized === \"1\" ||\n    normalized === \"true\" ||\n    normalized === \"yes\" ||\n    normalized === \"on\"\n  ) {\n    return true;\n  }\n\n  if (\n    normalized === \"0\" ||\n    normalized === \"false\" ||\n    normalized === \"no\" ||\n    normalized === \"off\"\n  ) {\n    return false;\n  }\n\n  return fallback;\n}\n","import type { AthenaResult } from \"./client-result.ts\";\nimport { AthenaGatewayError, isAthenaGatewayError } from \"./gateway/errors.ts\";\nimport type {\n\tAthenaGatewayErrorCode,\n\tAthenaGatewayErrorDetails,\n} from \"./gateway/types.ts\";\nimport { parseBooleanFlag as parseBooleanFlagUtil } from \"./utils/parse-boolean-flag.ts\";\n\nexport type AthenaErrorKind =\n\t| \"unique_violation\"\n\t| \"not_found\"\n\t| \"validation\"\n\t| \"auth\"\n\t| \"rate_limit\"\n\t| \"transient\"\n\t| \"unknown\";\n\nexport const AthenaErrorKind = {\n\tAuth: \"auth\",\n\tNotFound: \"not_found\",\n\tRateLimit: \"rate_limit\",\n\tTransient: \"transient\",\n\tUniqueViolation: \"unique_violation\",\n\tUnknown: \"unknown\",\n\tValidation: \"validation\",\n} as const;\n\nexport type AthenaErrorCode =\n\t| \"UNIQUE_VIOLATION\"\n\t| \"NOT_FOUND\"\n\t| \"VALIDATION_FAILED\"\n\t| \"AUTH_UNAUTHORIZED\"\n\t| \"AUTH_FORBIDDEN\"\n\t| \"RATE_LIMITED\"\n\t| \"NETWORK_UNAVAILABLE\"\n\t| \"TRANSIENT_FAILURE\"\n\t| \"HTTP_FAILURE\"\n\t| \"UNKNOWN\";\n\nexport const AthenaErrorCode = {\n\tAuthForbidden: \"AUTH_FORBIDDEN\",\n\tAuthUnauthorized: \"AUTH_UNAUTHORIZED\",\n\tHttpFailure: \"HTTP_FAILURE\",\n\tNetworkUnavailable: \"NETWORK_UNAVAILABLE\",\n\tNotFound: \"NOT_FOUND\",\n\tRateLimited: \"RATE_LIMITED\",\n\tTransientFailure: \"TRANSIENT_FAILURE\",\n\tUniqueViolation: \"UNIQUE_VIOLATION\",\n\tUnknown: \"UNKNOWN\",\n\tValidationFailed: \"VALIDATION_FAILED\",\n} as const satisfies Record<string, AthenaErrorCode>;\n\nexport type AthenaErrorCategory =\n\t| \"transport\"\n\t| \"client\"\n\t| \"server\"\n\t| \"database\"\n\t| \"unknown\";\n\nexport const AthenaErrorCategory = {\n\tClient: \"client\",\n\tDatabase: \"database\",\n\tServer: \"server\",\n\tTransport: \"transport\",\n\tUnknown: \"unknown\",\n} as const satisfies Record<string, AthenaErrorCategory>;\n\nexport interface AthenaOperationContext {\n\tidentity?: string | Record<string, unknown>;\n\toperation?: string;\n\ttable?: string;\n}\n\nexport interface NormalizedAthenaError {\n\tcategory: AthenaErrorCategory;\n\tcode: AthenaErrorCode;\n\tconstraint?: string;\n\tkind: AthenaErrorKind;\n\tmessage: string;\n\toperation?: string;\n\traw: unknown;\n\tretryable: boolean;\n\tstatus?: number;\n\ttable?: string;\n}\n\nexport interface AthenaErrorInput {\n\tcategory: AthenaErrorCategory;\n\tcode: AthenaErrorCode;\n\tcontext?: AthenaOperationContext;\n\tkind: AthenaErrorKind;\n\tmessage: string;\n\traw?: unknown;\n\trequestId?: string;\n\tretryable?: boolean;\n\tstatus?: number;\n}\n\nexport interface UnwrapOptions {\n\tallowNull?: boolean;\n\tcontext?: AthenaOperationContext;\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n\trequireExactlyOne?: boolean;\n}\n\nexport interface IntCoercionOptions {\n\tmax?: number;\n\tmin?: number;\n\tstrictBigInt?: boolean;\n}\n\nexport type RetryBackoffStrategy =\n\t| \"linear\"\n\t| \"exponential\"\n\t| ((attempt: number, error: unknown) => number);\n\nexport interface RetryConfig {\n\tbackoff?: RetryBackoffStrategy;\n\tbaseDelayMs?: number;\n\tjitter?: boolean | number;\n\tmaxDelayMs?: number;\n\tretries: number;\n\tshouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>;\n}\n\nexport interface RequireAffectedOptions {\n\tmin?: 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\trawValue: string | undefined,\n\tfallback: boolean,\n): boolean {\n\treturn parseBooleanFlagUtil(rawValue, fallback);\n}\n\nexport class AthenaError extends Error {\n\treadonly code: AthenaErrorCode;\n\treadonly kind: AthenaErrorKind;\n\treadonly category: AthenaErrorCategory;\n\treadonly status?: number;\n\treadonly retryable: boolean;\n\treadonly requestId?: string;\n\treadonly context?: AthenaOperationContext;\n\treadonly raw?: unknown;\n\n\tconstructor(input: AthenaErrorInput) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaError\";\n\t\tthis.code = input.code;\n\t\tthis.kind = input.kind;\n\t\tthis.category = input.category;\n\t\tthis.status = input.status;\n\t\tthis.retryable = input.retryable ?? false;\n\t\tthis.requestId = input.requestId;\n\t\tthis.context = input.context;\n\t\tthis.raw = input.raw;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n\tif (typeof error === \"string\" && error.trim().length > 0) {\n\t\treturn error.trim();\n\t}\n\tif (error instanceof Error && error.message.trim().length > 0) {\n\t\treturn error.message.trim();\n\t}\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\treturn firstNonEmptyString(error.message, error.error, error.details);\n}\n\nfunction gatewayCodeFromUnknownError(\n\terror: unknown,\n): AthenaGatewayErrorCode | undefined {\n\tif (!isRecord(error) || typeof error.gatewayCode !== \"string\") {\n\t\treturn undefined;\n\t}\n\treturn error.gatewayCode as AthenaGatewayErrorCode;\n}\n\nfunction isAthenaResultErrorLike(value: unknown): value is {\n\tmessage: string;\n\tathenaCode?: AthenaErrorCode;\n\tkind?: AthenaErrorKind;\n\tcategory?: AthenaErrorCategory;\n\tretryable?: boolean;\n\tstatus?: number;\n\tconstraint?: string;\n\ttable?: string;\n\toperation?: string;\n\traw?: unknown;\n} {\n\treturn (\n\t\tisRecord(value) &&\n\t\ttypeof value.message === \"string\" &&\n\t\t(value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n\t\t(value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n\t\t(value.category === undefined || isAthenaErrorCategory(value.category)) &&\n\t\t(value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n\t\t(value.status === undefined || typeof value.status === \"number\")\n\t);\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n\treturn (\n\t\tvalue === \"unique_violation\" ||\n\t\tvalue === \"not_found\" ||\n\t\tvalue === \"validation\" ||\n\t\tvalue === \"auth\" ||\n\t\tvalue === \"rate_limit\" ||\n\t\tvalue === \"transient\" ||\n\t\tvalue === \"unknown\"\n\t);\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n\treturn (\n\t\tvalue === \"UNIQUE_VIOLATION\" ||\n\t\tvalue === \"NOT_FOUND\" ||\n\t\tvalue === \"VALIDATION_FAILED\" ||\n\t\tvalue === \"AUTH_UNAUTHORIZED\" ||\n\t\tvalue === \"AUTH_FORBIDDEN\" ||\n\t\tvalue === \"RATE_LIMITED\" ||\n\t\tvalue === \"NETWORK_UNAVAILABLE\" ||\n\t\tvalue === \"TRANSIENT_FAILURE\" ||\n\t\tvalue === \"HTTP_FAILURE\" ||\n\t\tvalue === \"UNKNOWN\"\n\t);\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n\treturn (\n\t\tvalue === \"transport\" ||\n\t\tvalue === \"client\" ||\n\t\tvalue === \"server\" ||\n\t\tvalue === \"database\" ||\n\t\tvalue === \"unknown\"\n\t);\n}\n\nfunction isNormalizedAthenaError(\n\tvalue: unknown,\n): value is NormalizedAthenaError {\n\treturn (\n\t\tisRecord(value) &&\n\t\tisAthenaErrorKind(value.kind) &&\n\t\tisAthenaErrorCode(value.code) &&\n\t\tisAthenaErrorCategory(value.category) &&\n\t\ttypeof value.retryable === \"boolean\" &&\n\t\ttypeof value.message === \"string\" &&\n\t\t\"raw\" in value\n\t);\n}\n\nfunction withContextOverrides(\n\tnormalized: NormalizedAthenaError,\n\tcontext?: AthenaOperationContext,\n): NormalizedAthenaError {\n\tif (!(context?.table || context?.operation)) {\n\t\treturn normalized;\n\t}\n\n\treturn {\n\t\t...normalized,\n\t\toperation: context.operation ?? normalized.operation,\n\t\ttable: context.table ?? normalized.table,\n\t};\n}\n\nfunction resolveAttachedNormalizedError(\n\tresultOrError: unknown,\n): NormalizedAthenaError | undefined {\n\tif (!isRecord(resultOrError)) {\n\t\treturn undefined;\n\t}\n\tif (!(\"__athenaNormalizedError\" in resultOrError)) {\n\t\treturn undefined;\n\t}\n\tconst candidate = resultOrError.__athenaNormalizedError;\n\treturn isNormalizedAthenaError(candidate) ? candidate : undefined;\n}\n\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\tconst serialized = JSON.stringify(value);\n\t\treturn serialized ?? String(value);\n\t} catch {\n\t\treturn \"[unserializable]\";\n\t}\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n\tif (!context?.identity) {\n\t\treturn undefined;\n\t}\n\tconst identity =\n\t\ttypeof context.identity === \"string\"\n\t\t\t? context.identity\n\t\t\t: safeStringify(context.identity);\n\treturn `Identity: ${identity}`;\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n\treturn (\n\t\tisRecord(value) &&\n\t\t\"status\" in value &&\n\t\t\"error\" in value &&\n\t\t\"data\" in value &&\n\t\ttypeof value.status === \"number\"\n\t);\n}\n\nfunction operationFromDetails(\n\tdetails?: AthenaGatewayErrorDetails | null,\n): string | undefined {\n\tif (!details?.endpoint) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\tdetails.endpoint === \"/gateway/fetch\" ||\n\t\tdetails.endpoint === \"/gateway/query\"\n\t) {\n\t\treturn \"select\";\n\t}\n\tif (details.endpoint === \"/gateway/insert\") {\n\t\treturn \"insert\";\n\t}\n\tif (details.endpoint === \"/gateway/update\") {\n\t\treturn \"update\";\n\t}\n\tif (details.endpoint === \"/gateway/delete\") {\n\t\treturn \"delete\";\n\t}\n\tif (\n\t\tdetails.endpoint === \"/gateway/rpc\" ||\n\t\tdetails.endpoint.startsWith(\"/rpc/\")\n\t) {\n\t\treturn \"rpc\";\n\t}\n\treturn undefined;\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n\tfor (const pattern of patterns) {\n\t\tconst match = pattern.exec(input);\n\t\tif (match?.[1]) {\n\t\t\treturn match[1];\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction extractConstraint(message: string): string | undefined {\n\treturn matchRegex(message, [\n\t\t/unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t\t/constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t]);\n}\n\nfunction extractTable(message: string): string | undefined {\n\treturn matchRegex(message, [\n\t\t/(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n\t\t/on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n\t]);\n}\n\nfunction classifyKind(\n\tstatus: number | undefined,\n\tcode: AthenaGatewayErrorCode | undefined,\n\tmessage: string,\n): AthenaErrorKind {\n\tconst lower = message.toLowerCase();\n\tconst hasUniquePattern =\n\t\tlower.includes(\"unique constraint\") ||\n\t\tlower.includes(\"duplicate key\") ||\n\t\tlower.includes(\"already exists\") ||\n\t\tlower.includes(\"duplicate\");\n\tconst hasNotFoundPattern =\n\t\tlower.includes(\"not found\") || lower.includes(\"no rows\");\n\tconst hasValidationPattern =\n\t\tlower.includes(\"validation\") ||\n\t\tlower.includes(\"invalid\") ||\n\t\tlower.includes(\"malformed\");\n\tconst hasAuthPattern =\n\t\tlower.includes(\"unauthorized\") ||\n\t\tlower.includes(\"forbidden\") ||\n\t\tlower.includes(\"auth\");\n\tconst hasRateLimitPattern =\n\t\tlower.includes(\"rate limit\") || lower.includes(\"too many requests\");\n\tconst hasTransientPattern =\n\t\tlower.includes(\"timeout\") ||\n\t\tlower.includes(\"temporar\") ||\n\t\tlower.includes(\"connection reset\") ||\n\t\tlower.includes(\"socket\") ||\n\t\tlower.includes(\"deadlock\");\n\n\tif (status === 409 || hasUniquePattern) {\n\t\treturn \"unique_violation\";\n\t}\n\tif (status === 404 || hasNotFoundPattern) {\n\t\treturn \"not_found\";\n\t}\n\tif (status === 401 || status === 403 || hasAuthPattern) {\n\t\treturn \"auth\";\n\t}\n\tif (status === 429 || hasRateLimitPattern) {\n\t\treturn \"rate_limit\";\n\t}\n\tif (code === \"INVALID_URL\") {\n\t\treturn \"validation\";\n\t}\n\tif (status === 400 || status === 422 || hasValidationPattern) {\n\t\treturn \"validation\";\n\t}\n\tif (\n\t\tcode === \"NETWORK_ERROR\" ||\n\t\tstatus === 0 ||\n\t\t(status !== undefined && status >= 500) ||\n\t\thasTransientPattern\n\t) {\n\t\treturn \"transient\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction toAthenaErrorCode(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n\tgatewayCode?: AthenaGatewayErrorCode,\n): AthenaErrorCode {\n\tif (gatewayCode === \"INVALID_URL\") {\n\t\treturn AthenaErrorCode.ValidationFailed;\n\t}\n\n\tif (\n\t\tgatewayCode === \"NETWORK_ERROR\" ||\n\t\t(kind === \"transient\" && status === 0)\n\t) {\n\t\treturn AthenaErrorCode.NetworkUnavailable;\n\t}\n\n\tswitch (kind) {\n\t\tcase \"unique_violation\":\n\t\t\treturn AthenaErrorCode.UniqueViolation;\n\t\tcase \"not_found\":\n\t\t\treturn AthenaErrorCode.NotFound;\n\t\tcase \"validation\":\n\t\t\treturn AthenaErrorCode.ValidationFailed;\n\t\tcase \"rate_limit\":\n\t\t\treturn AthenaErrorCode.RateLimited;\n\t\tcase \"auth\":\n\t\t\tif (status === 403) {\n\t\t\t\treturn AthenaErrorCode.AuthForbidden;\n\t\t\t}\n\t\t\treturn AthenaErrorCode.AuthUnauthorized;\n\t\tcase \"transient\":\n\t\t\treturn status !== undefined && status >= 500\n\t\t\t\t? AthenaErrorCode.HttpFailure\n\t\t\t\t: AthenaErrorCode.TransientFailure;\n\t\tdefault:\n\t\t\treturn status !== undefined && status >= 400\n\t\t\t\t? AthenaErrorCode.HttpFailure\n\t\t\t\t: AthenaErrorCode.Unknown;\n\t}\n}\n\nfunction toAthenaErrorCategory(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n): AthenaErrorCategory {\n\tif (kind === \"transient\" && (status === 0 || status === undefined)) {\n\t\treturn AthenaErrorCategory.Transport;\n\t}\n\tif (kind === \"unique_violation\") {\n\t\treturn AthenaErrorCategory.Database;\n\t}\n\tif (kind === \"validation\" || kind === \"auth\" || kind === \"not_found\") {\n\t\treturn AthenaErrorCategory.Client;\n\t}\n\tif (kind === \"rate_limit\" || kind === \"transient\") {\n\t\treturn AthenaErrorCategory.Server;\n\t}\n\treturn AthenaErrorCategory.Unknown;\n}\n\nfunction isRetryable(\n\tkind: AthenaErrorKind,\n\tstatus: number | undefined,\n): boolean {\n\tif (kind === \"rate_limit\" || kind === \"transient\") {\n\t\treturn true;\n\t}\n\treturn status !== undefined && status >= 500;\n}\n\nfunction toGatewayCode(\n\tkind: AthenaErrorKind,\n\tstatus?: number,\n): AthenaGatewayErrorCode {\n\tif (kind === \"transient\" && (status === 0 || status === undefined)) {\n\t\treturn \"NETWORK_ERROR\";\n\t}\n\tif (kind === \"validation\") {\n\t\treturn \"INVALID_JSON\";\n\t}\n\tif (status !== undefined && status >= 400) {\n\t\treturn \"HTTP_ERROR\";\n\t}\n\treturn \"UNKNOWN_ERROR\";\n}\n\nfunction toAthenaGatewayError(\n\tsource: unknown,\n\tfallbackMessage: string,\n\tcontext?: AthenaOperationContext,\n): AthenaGatewayError {\n\tif (isAthenaGatewayError(source)) {\n\t\treturn source;\n\t}\n\n\tif (isAthenaResultLike(source) && source.errorDetails) {\n\t\tconst message =\n\t\t\tmessageFromUnknownError(source.error) ??\n\t\t\tsource.errorDetails.message ??\n\t\t\tfallbackMessage;\n\t\treturn new AthenaGatewayError({\n\t\t\tcause:\n\t\t\t\t(isRecord(source.error)\n\t\t\t\t\t? firstNonEmptyString(source.error.cause)\n\t\t\t\t\t: undefined) ?? source.errorDetails.cause,\n\t\t\tcode: source.errorDetails.code,\n\t\t\tendpoint: source.errorDetails.endpoint,\n\t\t\thint:\n\t\t\t\t(isRecord(source.error)\n\t\t\t\t\t? firstNonEmptyString(source.error.hint)\n\t\t\t\t\t: undefined) ?? source.errorDetails.hint,\n\t\t\tmessage,\n\t\t\tmethod: source.errorDetails.method,\n\t\t\trequestId: source.errorDetails.requestId,\n\t\t\tstatus: source.status,\n\t\t});\n\t}\n\n\tconst normalized = normalizeAthenaError(source, context);\n\tconst message =\n\t\tisAthenaResultLike(source) &&\n\t\tsource.error === null &&\n\t\tsource.errorDetails === null\n\t\t\t? fallbackMessage\n\t\t\t: normalized.message || fallbackMessage;\n\n\treturn new AthenaGatewayError({\n\t\tcause:\n\t\t\ttypeof normalized.raw === \"string\"\n\t\t\t\t? normalized.raw\n\t\t\t\t: safeStringify(normalized.raw),\n\t\tcode: toGatewayCode(normalized.kind, normalized.status),\n\t\thint:\n\t\t\tnormalized.constraint === null\n\t\t\t\t? contextHint(context)\n\t\t\t\t: `Constraint: ${normalized.constraint}`,\n\t\tmessage,\n\t\tstatus: normalized.status ?? 0,\n\t});\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\treturn 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\tresultOrError: unknown,\n\tcontext?: AthenaOperationContext,\n): NormalizedAthenaError {\n\tconst attached = resolveAttachedNormalizedError(resultOrError);\n\tif (attached) {\n\t\treturn withContextOverrides(attached, context);\n\t}\n\n\tif (isAthenaResultLike(resultOrError)) {\n\t\tif (isAthenaResultErrorLike(resultOrError.error)) {\n\t\t\treturn {\n\t\t\t\tcategory:\n\t\t\t\t\tresultOrError.error.category ??\n\t\t\t\t\ttoAthenaErrorCategory(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t),\n\t\t\t\tcode:\n\t\t\t\t\tresultOrError.error.athenaCode ??\n\t\t\t\t\ttoAthenaErrorCode(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t),\n\t\t\t\tconstraint: resultOrError.error.constraint,\n\t\t\t\tkind:\n\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t),\n\t\t\t\tmessage: resultOrError.error.message,\n\t\t\t\toperation: context?.operation ?? resultOrError.error.operation,\n\t\t\t\traw: resultOrError.error.raw ?? resultOrError.raw,\n\t\t\t\tretryable:\n\t\t\t\t\tresultOrError.error.retryable ??\n\t\t\t\t\tisRetryable(\n\t\t\t\t\t\tresultOrError.error.kind ??\n\t\t\t\t\t\t\tclassifyKind(\n\t\t\t\t\t\t\t\tresultOrError.status,\n\t\t\t\t\t\t\t\tgatewayCodeFromUnknownError(resultOrError.error),\n\t\t\t\t\t\t\t\tresultOrError.error.message,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tresultOrError.error.status ?? resultOrError.status,\n\t\t\t\t\t),\n\t\t\t\tstatus: resultOrError.error.status ?? resultOrError.status,\n\t\t\t\ttable: context?.table ?? resultOrError.error.table,\n\t\t\t};\n\t\t}\n\n\t\tconst details = resultOrError.errorDetails;\n\t\tconst message =\n\t\t\tmessageFromUnknownError(resultOrError.error) ??\n\t\t\tdetails?.message ??\n\t\t\t`Athena ${context?.operation ?? operationFromDetails(details) ?? \"request\"} failed`;\n\t\tconst operation = context?.operation ?? operationFromDetails(details);\n\t\tconst table = context?.table ?? extractTable(message);\n\t\tconst constraint = extractConstraint(message);\n\t\tconst gatewayCode =\n\t\t\tdetails?.code ?? gatewayCodeFromUnknownError(resultOrError.error);\n\t\tconst kind = classifyKind(resultOrError.status, gatewayCode, message);\n\t\tconst code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode);\n\t\tconst category = toAthenaErrorCategory(kind, resultOrError.status);\n\t\treturn {\n\t\t\tcategory,\n\t\t\tcode,\n\t\t\tconstraint,\n\t\t\tkind,\n\t\t\tmessage,\n\t\t\toperation,\n\t\t\traw: resultOrError.raw,\n\t\t\tretryable: isRetryable(kind, resultOrError.status),\n\t\t\tstatus: resultOrError.status,\n\t\t\ttable,\n\t\t};\n\t}\n\n\tif (isAthenaGatewayError(resultOrError)) {\n\t\tconst details = resultOrError.toDetails();\n\t\tconst operation = context?.operation ?? operationFromDetails(details);\n\t\tconst table = context?.table ?? extractTable(resultOrError.message);\n\t\tconst constraint = extractConstraint(resultOrError.message);\n\t\tconst kind = classifyKind(\n\t\t\tresultOrError.status,\n\t\t\tresultOrError.code,\n\t\t\tresultOrError.message,\n\t\t);\n\t\tconst code = toAthenaErrorCode(\n\t\t\tkind,\n\t\t\tresultOrError.status,\n\t\t\tresultOrError.code,\n\t\t);\n\t\tconst category = toAthenaErrorCategory(kind, resultOrError.status);\n\t\treturn {\n\t\t\tcategory,\n\t\t\tcode,\n\t\t\tconstraint,\n\t\t\tkind,\n\t\t\tmessage: resultOrError.message,\n\t\t\toperation,\n\t\t\traw: resultOrError,\n\t\t\tretryable: isRetryable(kind, resultOrError.status),\n\t\t\tstatus: resultOrError.status,\n\t\t\ttable,\n\t\t};\n\t}\n\n\tif (resultOrError instanceof Error) {\n\t\tconst maybeStatus =\n\t\t\tisRecord(resultOrError) && typeof resultOrError.status === \"number\"\n\t\t\t\t? resultOrError.status\n\t\t\t\t: undefined;\n\t\tconst kind = classifyKind(maybeStatus, undefined, resultOrError.message);\n\t\treturn {\n\t\t\tcategory: toAthenaErrorCategory(kind, maybeStatus),\n\t\t\tcode: toAthenaErrorCode(kind, maybeStatus),\n\t\t\tconstraint: extractConstraint(resultOrError.message),\n\t\t\tkind,\n\t\t\tmessage: resultOrError.message,\n\t\t\toperation: context?.operation,\n\t\t\traw: resultOrError,\n\t\t\tretryable: isRetryable(kind, maybeStatus),\n\t\t\tstatus: maybeStatus,\n\t\t\ttable: context?.table ?? extractTable(resultOrError.message),\n\t\t};\n\t}\n\n\tconst message =\n\t\ttypeof resultOrError === \"string\" ? resultOrError : \"Unknown Athena error\";\n\tconst kind = classifyKind(undefined, undefined, message);\n\treturn {\n\t\tcategory: toAthenaErrorCategory(kind, undefined),\n\t\tcode: toAthenaErrorCode(kind, undefined),\n\t\tconstraint: extractConstraint(message),\n\t\tkind,\n\t\tmessage,\n\t\toperation: context?.operation,\n\t\traw: resultOrError,\n\t\tretryable: isRetryable(kind, undefined),\n\t\tstatus: undefined,\n\t\ttable: context?.table ?? extractTable(message),\n\t};\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\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOptions,\n): T[] {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Athena request failed\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (result.data === null) {\n\t\treturn [];\n\t}\n\treturn 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\tresult: AthenaResult<T | null>,\n\toptions: UnwrapOptions & { allowNull: true },\n): T | null;\nexport function unwrap<T>(\n\tresult: AthenaResult<T | null>,\n\toptions?: UnwrapOptions,\n): T;\nexport function unwrap<T>(\n\tresult: AthenaResult<T | null>,\n\toptions?: UnwrapOptions,\n): T | null {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Athena request failed\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (result.data === null && !options?.allowNull) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Expected data but received null\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\treturn 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\tresult: AthenaResult<T[] | T | null>,\n\toptions: UnwrapOneOptions & { allowNull: true },\n): T | null;\nexport function unwrapOne<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOneOptions,\n): T;\nexport function unwrapOne<T>(\n\tresult: AthenaResult<T[] | T | null>,\n\toptions?: UnwrapOneOptions,\n): T | null {\n\tconst rows = unwrapRows(result, options);\n\tif (!rows.length) {\n\t\tif (options?.allowNull) {\n\t\t\treturn null;\n\t\t}\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t\"Expected one row but received none\",\n\t\t\toptions?.context,\n\t\t);\n\t}\n\tif (options?.requireExactlyOne && rows.length !== 1) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t`Expected exactly one row but received ${rows.length}`,\n\t\t\toptions.context,\n\t\t);\n\t}\n\treturn 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\tresult: AthenaResult<T>,\n\tcontext?: AthenaOperationContext,\n): AthenaResult<T> {\n\tif (!isOk(result)) {\n\t\tthrow toAthenaGatewayError(\n\t\t\tresult,\n\t\t\t`Athena ${context?.operation ?? \"request\"} failed`,\n\t\t\tcontext,\n\t\t);\n\t}\n\treturn result;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\n/**\n * Enforces mutation postconditions from the canonical row-count:\n * numeric `result.count`, else numeric `result.affectedRows`.\n *\n * - Validates success first.\n * - Does not require `{ count: \"exact\" }` on PG/D1 (driver meta already\n *   populates `count` / `affectedRows`).\n * - When `options.min` is set, validates resolved count `>= min`.\n *   A CAS miss (`0`) is a successful read of the count, not a missing field.\n */\nexport function requireAffected<T>(\n\tresult: AthenaResult<T>,\n\toptions?: RequireAffectedOptions,\n\tcontext?: AthenaOperationContext,\n): number {\n\trequireSuccess(result, context);\n\n\tconst count = isFiniteNumber(result.count)\n\t\t? result.count\n\t\t: isFiniteNumber(result.affectedRows)\n\t\t\t? result.affectedRows\n\t\t\t: null;\n\tif (count === null) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcause: safeStringify(result.raw),\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\thint: \"Fluent mutations expose count or affectedRows from adapter meta (PostgreSQL rowCount, D1 changes, Gateway envelope). Never fabricated.\",\n\t\t\tmessage:\n\t\t\t\t\"Expected affected row count but response.count/affectedRows is missing\",\n\t\t\tstatus: result.status,\n\t\t});\n\t}\n\n\tconst minimum = options?.min;\n\tif (minimum !== undefined && count < minimum) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcause: safeStringify(result.raw),\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\thint: contextHint(context),\n\t\t\tmessage: `Expected at least ${minimum} affected rows but received ${count}`,\n\t\t\tstatus: result.status,\n\t\t});\n\t}\n\n\treturn count;\n}\n\nfunction applyBounds(\n\tvalue: number,\n\toptions?: IntCoercionOptions,\n): number | null {\n\tif (options?.min !== undefined && value < options.min) {\n\t\treturn null;\n\t}\n\tif (options?.max !== undefined && value > options.max) {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nfunction parseIntegerString(value: string): number | null {\n\tconst normalized = value.trim();\n\tif (!/^[-+]?\\d+$/.test(normalized)) {\n\t\treturn null;\n\t}\n\tconst parsed = Number(normalized);\n\tif (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n\t\treturn null;\n\t}\n\treturn parsed;\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(\n\tvalue: unknown,\n\toptions?: IntCoercionOptions,\n): number | null {\n\tif (value === null) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\tif (!(Number.isFinite(value) && Number.isInteger(value))) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(value, options);\n\t}\n\n\tif (typeof value === \"string\") {\n\t\tconst parsed = parseIntegerString(value);\n\t\tif (parsed === null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(parsed, options);\n\t}\n\n\tif (typeof value === \"bigint\") {\n\t\tif (\n\t\t\toptions?.strictBigInt &&\n\t\t\t(value > BigInt(Number.MAX_SAFE_INTEGER) ||\n\t\t\t\tvalue < BigInt(Number.MIN_SAFE_INTEGER))\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst parsed = Number(value);\n\t\tif (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n\t\t\treturn null;\n\t\t}\n\t\treturn applyBounds(parsed, options);\n\t}\n\n\treturn null;\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(\n\tvalue: unknown,\n\tlabel = \"value\",\n\toptions?: IntCoercionOptions,\n): number {\n\tconst parsed = coerceInt(value, options);\n\tif (parsed === null) {\n\t\tthrow new TypeError(`${label} must be a finite integer`);\n\t}\n\treturn parsed;\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n\tconst normalized = normalizeAthenaError(error);\n\treturn normalized.kind === \"transient\" || normalized.kind === \"rate_limit\";\n}\n\nfunction computeDelayMs(\n\tattempt: number,\n\terror: unknown,\n\tconfig: Required<\n\t\tPick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n\t>,\n): number {\n\tconst baseDelay = config.baseDelayMs;\n\tconst rawDelay =\n\t\ttypeof config.backoff === \"function\"\n\t\t\t? config.backoff(attempt, error)\n\t\t\t: config.backoff === \"linear\"\n\t\t\t\t? baseDelay * attempt\n\t\t\t\t: baseDelay * 2 ** (attempt - 1);\n\n\tconst safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0;\n\tconst clamped = Math.min(config.maxDelayMs, safeDelay);\n\tconst jitterFactor =\n\t\ttypeof config.jitter === \"number\"\n\t\t\t? Math.max(0, Math.min(1, config.jitter))\n\t\t\t: config.jitter\n\t\t\t\t? 0.2\n\t\t\t\t: 0;\n\n\tif (!jitterFactor) {\n\t\treturn clamped;\n\t}\n\tconst deviation = clamped * jitterFactor;\n\tconst offset = (Math.random() * 2 - 1) * deviation;\n\treturn Math.max(0, clamped + offset);\n}\n\nfunction sleep(ms: number): Promise<void> {\n\tif (ms <= 0) {\n\t\treturn Promise.resolve();\n\t}\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(\n\tconfig: RetryConfig,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst retries = Math.max(0, Math.trunc(config.retries));\n\tconst shouldRetry = config.shouldRetry ?? defaultShouldRetry;\n\tconst resolvedConfig = {\n\t\tbackoff: config.backoff ?? \"exponential\",\n\t\tbaseDelayMs: config.baseDelayMs ?? 100,\n\t\tjitter: config.jitter ?? false,\n\t\tmaxDelayMs: config.maxDelayMs ?? 10_000,\n\t} satisfies Required<\n\t\tPick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n\t>;\n\n\tfor (let attempts = 0; attempts <= retries; attempts += 1) {\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} catch (error) {\n\t\t\tif (attempts >= retries) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst currentAttempt = attempts + 1;\n\t\t\tconst retry = await shouldRetry(error, currentAttempt);\n\t\t\tif (!retry) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst delay = computeDelayMs(currentAttempt, error, resolvedConfig);\n\t\t\tawait sleep(delay);\n\t\t}\n\t}\n\n\tthrow new Error(\"withRetry reached an unexpected state\");\n}\n","/** Default application SQL migrations directory (project-relative). */\nexport const DEFAULT_MIGRATIONS_DIRECTORY = \"athena/migrations\";\n\n/** Materialized, read-only view of package-owned Embedded Auth generations. */\nexport const DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY =\n\t\"athena/managed/auth/migrations\";\n","import type {\n\tGeneratorProviderConfig,\n\tGeneratorSchemaSelection,\n} from \"./types.ts\";\n\nexport const DEFAULT_POSTGRES_SCHEMAS = [\"public\"] as const;\n\nfunction collectSchemaNames(\n\tinput: GeneratorSchemaSelection | undefined,\n): string[] {\n\tif (!input) {\n\t\treturn [];\n\t}\n\n\tconst values = typeof input === \"string\" ? [input] : input;\n\treturn values.flatMap((value) => String(value).split(\",\"));\n}\n\n/**\n * Normalizes schema selection from config or env-backed strings into a stable,\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\n */\nexport function normalizeSchemaSelection(\n\tinput: GeneratorSchemaSelection | undefined,\n): string[] {\n\tconst schemas: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of collectSchemaNames(input)) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tschemas.push(schema);\n\t}\n\n\treturn schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS];\n}\n\n/**\n * Resolves the effective schema list for provider-backed generator runs.\n */\nexport function resolveProviderSchemas(\n\tproviderConfig: GeneratorProviderConfig,\n): string[] {\n\tif (providerConfig.kind === \"postgres\") {\n\t\treturn normalizeSchemaSelection(providerConfig.schemas);\n\t}\n\n\treturn [...DEFAULT_POSTGRES_SCHEMAS];\n}\n","import type {\n\tIntrospectionSchema,\n\tIntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport type {\n\tGeneratorTableSelection,\n\tNormalizedGeneratorFilterConfig,\n} from \"./types.ts\";\n\nfunction normalizeTableSelector(value: string): string | undefined {\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function normalizeTableSelection(\n\tvalue: GeneratorTableSelection | undefined,\n): string[] {\n\tif (typeof value === \"string\") {\n\t\treturn Array.from(\n\t\t\tnew Set(\n\t\t\t\tvalue\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map(normalizeTableSelector)\n\t\t\t\t\t.filter((entry): entry is string => Boolean(entry)),\n\t\t\t),\n\t\t);\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn Array.from(\n\t\t\tnew Set(\n\t\t\t\tvalue\n\t\t\t\t\t.map((entry) =>\n\t\t\t\t\t\ttypeof entry === \"string\"\n\t\t\t\t\t\t\t? normalizeTableSelector(entry)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t)\n\t\t\t\t\t.filter((entry): entry is string => Boolean(entry)),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn [];\n}\n\nfunction matchesTableSelector(\n\tschemaName: string,\n\ttableName: string,\n\tselector: string,\n): boolean {\n\tconst separatorIndex = selector.indexOf(\".\");\n\tif (separatorIndex < 0) {\n\t\treturn tableName === selector;\n\t}\n\n\tconst selectorSchema = selector.slice(0, separatorIndex).trim();\n\tconst selectorTable = selector.slice(separatorIndex + 1).trim();\n\treturn selectorSchema === schemaName && selectorTable === tableName;\n}\n\nfunction shouldKeepTable(\n\tschemaName: string,\n\ttableName: string,\n\tfilter: NormalizedGeneratorFilterConfig,\n): boolean {\n\tconst included =\n\t\tfilter.includeTables.length === 0 ||\n\t\tfilter.includeTables.some((selector) =>\n\t\t\tmatchesTableSelector(schemaName, tableName, selector),\n\t\t);\n\tif (!included) {\n\t\treturn false;\n\t}\n\n\treturn !filter.excludeTables.some((selector) =>\n\t\tmatchesTableSelector(schemaName, tableName, selector),\n\t);\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n\treturn filter.includeTables.length > 0 || filter.excludeTables.length > 0;\n}\n\nexport function filterIntrospectionSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tfilter: NormalizedGeneratorFilterConfig,\n): IntrospectionSnapshot {\n\tif (!hasTableFilters(filter)) {\n\t\treturn snapshot;\n\t}\n\n\tconst schemas: Record<string, IntrospectionSchema> = {};\n\n\tfor (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n\t\tconst tables = Object.fromEntries(\n\t\t\tObject.entries(schema.tables).filter(([tableName]) =>\n\t\t\t\tshouldKeepTable(schemaName, tableName, filter),\n\t\t\t),\n\t\t);\n\n\t\tif (Object.keys(tables).length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tschemas[schemaName] = {\n\t\t\t...schema,\n\t\t\ttables,\n\t\t};\n\t}\n\n\tif (Object.keys(schemas).length === 0) {\n\t\tconst includeLabel =\n\t\t\tfilter.includeTables.length > 0\n\t\t\t\t? ` includeTables=${filter.includeTables.join(\", \")}`\n\t\t\t\t: \"\";\n\t\tconst excludeLabel =\n\t\t\tfilter.excludeTables.length > 0\n\t\t\t\t? ` excludeTables=${filter.excludeTables.join(\", \")}`\n\t\t\t\t: \"\";\n\t\tthrow new Error(\n\t\t\t`Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`,\n\t\t);\n\t}\n\n\treturn {\n\t\t...snapshot,\n\t\tschemas,\n\t};\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { parseBooleanFlag } from \"../auxiliaries.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_ENV_CLIENT_KEYS } from \"../env/index.ts\";\nimport type { BackendType } from \"../gateway/types.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"../migrations/constants.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport { normalizeTableSelection } from \"./table-selection.ts\";\nimport type {\n\tAthenaConfig,\n\tAthenaGeneratorConfig,\n\tAthenaMigrationsConfig,\n\tAthenaPolicyProjectConfig,\n\tAthenaToolingEntrypoints,\n\tGeneratorArtifactWriteConfig,\n\tGeneratorArtifactWritePolicy,\n\tGeneratorExperimentalFlags,\n\tGeneratorFeatureFlags,\n\tGeneratorFilterConfig,\n\tGeneratorInternalConfig,\n\tGeneratorNamingConfig,\n\tGeneratorOutputConfig,\n\tGeneratorOutputFormat,\n\tGeneratorOutputPreset,\n\tGeneratorOutputTargets,\n\tGeneratorProviderConfig,\n\tGeneratorProviderInputConfig,\n\tLoadedAthenaConfig,\n\tLoadedGeneratorConfig,\n\tLoadAthenaConfigOptions,\n\tLoadGeneratorConfigOptions,\n\tNormalizedAthenaGeneratorConfig,\n\tNormalizedAthenaMigrationsConfig,\n\tNormalizedGeneratorOutputConfig,\n} from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n\t\"athena.config.ts\",\n\t\"athena.config.js\",\n\t\"athena-js.config.ts\",\n\t\"athena-js.config.js\",\n\t\".athena.config.ts\",\n\t\".athena.config.js\",\n];\n\n/**\n * N-1 layout (Architecture 3 / early 4-RC root `athena/*`).\n * Generator still accepts this preset; doctor warns; migrate upgrades to N.\n */\nconst LEGACY_DEFAULT_TARGETS: GeneratorOutputTargets = {\n\tdatabase: \"athena/relations.ts\",\n\tmodel: \"athena/models/{schema_kebab}/{model_kebab}.ts\",\n\tregistry: \"athena/registry.generated.ts\",\n\tschema: \"athena/schemas/{schema_kebab}.ts\",\n};\n\n/**\n * Project artifact root — generated models sit next to `athena/migrations`\n * and `athena/schema.snapshot.json`. Runtime client files may still live\n * under `src/lib/athena/` without a generated subtree.\n */\nexport const ATHENA_PROJECT_GENERATED_ROOT = \"athena/generated\";\n\n/**\n * Accepted runtime-colocated generated root (Architecture 4.0 N).\n * Still first-class; generate does not warn.\n */\nexport const ATHENA_RUNTIME_GENERATED_ROOT = \"src/lib/athena/generated\";\n\n/**\n * Architecture 4.0 default (`preset: athena-direct`) — project `athena/generated/`.\n * Model home is the `models/` directory (not a single long-term file).\n */\nconst ATHENA_DIRECT_TARGETS: GeneratorOutputTargets = {\n\tdatabase: `${ATHENA_PROJECT_GENERATED_ROOT}/relations.ts`,\n\tmodel: `${ATHENA_PROJECT_GENERATED_ROOT}/models/{schema_kebab}/{model_kebab}.ts`,\n\tregistry: `${ATHENA_PROJECT_GENERATED_ROOT}/registry.ts`,\n\tschema: `${ATHENA_PROJECT_GENERATED_ROOT}/schema/{schema_kebab}.ts`,\n};\n\n/** Default generated root (project artifact folder). */\nexport const ATHENA_GENERATED_ROOT = ATHENA_PROJECT_GENERATED_ROOT;\n\nfunction normalizeGeneratedPath(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\n/** True when a target lives under project or runtime-colocated generated roots. */\nexport function isCurrentAthenaGeneratedPath(pathValue: string): boolean {\n\tconst path = normalizeGeneratedPath(pathValue);\n\treturn (\n\t\tpath === ATHENA_PROJECT_GENERATED_ROOT ||\n\t\tpath.startsWith(`${ATHENA_PROJECT_GENERATED_ROOT}/`) ||\n\t\tpath === ATHENA_RUNTIME_GENERATED_ROOT ||\n\t\tpath.startsWith(`${ATHENA_RUNTIME_GENERATED_ROOT}/`)\n\t);\n}\n\n/**\n * True for flat N-1 `athena/*` (registry.generated.ts, athena/schema.ts, …)\n * and not for `athena/generated/**`.\n */\nexport function isLegacyFlatAthenaGeneratedPath(pathValue: string): boolean {\n\tconst path = normalizeGeneratedPath(pathValue);\n\tif (isCurrentAthenaGeneratedPath(path)) {\n\t\treturn false;\n\t}\n\treturn path === \"athena\" || path.startsWith(\"athena/\");\n}\n\n/** Path of generator ownership manifest relative to project cwd. */\nexport const GENERATED_MANIFEST_REL = \".athena/generated-manifest.json\";\n\nconst DEFAULT_OUTPUT_FORMAT: GeneratorOutputFormat = \"table-builder\";\nconst DEFAULT_OUTPUT_PRESET: GeneratorOutputPreset = \"athena-direct\";\nconst DEFAULT_ARTIFACT_WRITE_POLICY: GeneratorArtifactWritePolicy = \"merge\";\nconst ARTIFACT_WRITE_POLICIES = new Set<GeneratorArtifactWritePolicy>([\n\t\"merge\",\n\t\"skip\",\n\t\"overwrite\",\n]);\n\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\n\tdatabaseConst: \"camel\",\n\tmodelConst: \"camel\",\n\tmodelType: \"pascal\",\n\tregistryConst: \"camel\",\n\tschemaConst: \"camel\",\n};\n\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\n\temitRegistry: true,\n\temitRelations: true,\n};\n\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n\tpostgresGatewayIntrospection: false,\n\tscyllaProviderContracts: true,\n};\n\nconst DEFAULT_INTERNAL_CONFIG: GeneratorInternalConfig = {\n\tschemaVersion: 1,\n};\n\nconst DEFAULT_FILTER_CONFIG = {\n\texcludeTables: [],\n\tincludeTables: [],\n} as const;\n\nconst PROJECT_ENV_FILENAMES = [\".env\", \".env.local\"] as const;\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_PG_URL\",\n\t\"DATABASE_URL\",\n\t\"PG_URL\",\n\t\"POSTGRES_URL\",\n\t\"POSTGRESQL_URL\",\n] as const;\n\nconst POSTGRES_DATABASE_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_DB\",\n\t\"ATHENA_DATABASE\",\n\t\"PGDATABASE\",\n] as const;\n\nconst POSTGRES_PASSWORD_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_PG_PASSWORD\",\n\t\"PGPASSWORD\",\n] as const;\n\n/**\n * Generator gateway URL keys (server/CLI only — intentionally omits NEXT_PUBLIC_*).\n * Includes primary + gateway alias keys, plus generator-only ATHENA_GENERATOR_URL.\n */\nconst GATEWAY_URL_ENV_KEYS = [\n\t\"ATHENA_URL\",\n\t\"ATHENA_GATEWAY_URL\",\n\t\"ATHENA_GENERATOR_URL\",\n] as const;\n\n/**\n * Generator API key keys (server/CLI only — no NEXT_PUBLIC_*, adds ATHENA_GENERATOR_API_KEY).\n */\nconst GATEWAY_API_KEY_ENV_KEYS = [\n\t\"ATHENA_API_KEY\",\n\t\"ATHENA_GATEWAY_API_KEY\",\n\t\"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Registry client name for gateway introspection (`X-Athena-Client`).\n * Shared env client keys via ATHENA_ENV_CLIENT_KEYS SSOT.\n */\nconst GATEWAY_CLIENT_ENV_KEYS = ATHENA_ENV_CLIENT_KEYS;\n\nconst GENERATOR_SCHEMA_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMAS\"] as const;\nconst OUTPUT_FORMAT_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_FORMAT\"] as const;\nconst OUTPUT_PRESET_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_PRESET\"] as const;\nconst MODEL_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_TARGET\"] as const;\nconst SCHEMA_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_TARGET\"] as const;\nconst DATABASE_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_TARGET\"] as const;\nconst REGISTRY_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_TARGET\"] as const;\nconst TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_TABLES\"] as const;\nconst EXCLUDE_TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_EXCLUDE_TABLES\"] as const;\nconst PLACEHOLDER_MAP_ENV_KEYS = [\"ATHENA_GENERATOR_PLACEHOLDER_MAP\"] as const;\nconst MODEL_TYPE_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_MODEL_TYPE\",\n\t\"ATHENA_GENERATOR_MODEL_STYLE\",\n] as const;\nconst MODEL_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_CONST\"] as const;\nconst SCHEMA_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_CONST\"] as const;\nconst DATABASE_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_CONST\"] as const;\nconst REGISTRY_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_CONST\"] as const;\nconst EMIT_RELATIONS_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_RELATIONS\"] as const;\nconst EMIT_REGISTRY_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_REGISTRY\"] as const;\nconst GATEWAY_BACKEND_ENV_KEYS = [\"ATHENA_GENERATOR_BACKEND\"] as const;\nconst GATEWAY_EXPERIMENTAL_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_GATEWAY_EXPERIMENTAL\",\n] as const;\nconst SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_SCYLLA_PROVIDER_CONTRACTS\",\n] as const;\nconst ENV_ONLY_CONFIG_PATH = \"[environment defaults]\";\n\nconst NAMING_STYLE_VALUES = [\n\t\"preserve\",\n\t\"camel\",\n\t\"pascal\",\n\t\"snake\",\n\t\"kebab\",\n] as const;\nconst OUTPUT_FORMAT_VALUES = [\"define-model\", \"table-builder\"] as const;\nconst OUTPUT_PRESET_VALUES = [\"legacy\", \"athena-direct\"] as const;\nconst BACKEND_TYPE_VALUES = [\n\t\"athena\",\n\t\"postgrest\",\n\t\"postgresql\",\n\t\"scylladb\",\n] as const;\n\nconst OUTPUT_PRESET_TARGETS: Record<\n\tGeneratorOutputPreset,\n\tGeneratorOutputTargets\n> = {\n\t\"athena-direct\": ATHENA_DIRECT_TARGETS,\n\tlegacy: LEGACY_DEFAULT_TARGETS,\n};\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n\tif (\n\t\trawValue.startsWith('\"') &&\n\t\trawValue.endsWith('\"') &&\n\t\trawValue.length >= 2\n\t) {\n\t\tconst inner = rawValue.slice(1, -1);\n\t\treturn inner\n\t\t\t.replace(/\\\\n/g, \"\\n\")\n\t\t\t.replace(/\\\\r/g, \"\\r\")\n\t\t\t.replace(/\\\\t/g, \"\\t\")\n\t\t\t.replace(/\\\\\"/g, '\"')\n\t\t\t.replace(/\\\\\\\\/g, \"\\\\\");\n\t}\n\n\tif (\n\t\trawValue.startsWith(\"'\") &&\n\t\trawValue.endsWith(\"'\") &&\n\t\trawValue.length >= 2\n\t) {\n\t\treturn rawValue.slice(1, -1);\n\t}\n\n\tconst commentIndex = rawValue.search(/\\s+#/);\n\tconst withoutComment =\n\t\tcommentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n\treturn withoutComment.trim();\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n\tconst trimmed = line.trim();\n\tif (!trimmed || trimmed.startsWith(\"#\")) {\n\t\treturn undefined;\n\t}\n\n\tconst match = trimmed.match(\n\t\t/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\tconst [, key, rawValue] = match;\n\treturn [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n\tconst nodeEnv = process.env.NODE_ENV?.trim();\n\tconst filenames = [\n\t\t...PROJECT_ENV_FILENAMES,\n\t\t...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n\t];\n\n\tconst entries = new Map<string, string>();\n\n\tfor (const filename of filenames) {\n\t\tconst absolutePath = resolve(cwd, filename);\n\t\tif (!existsSync(absolutePath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst content = readFileSync(absolutePath, \"utf8\");\n\t\tconst lines = content.split(/\\r?\\n/g);\n\t\tfor (const line of lines) {\n\t\t\tconst parsed = parseEnvLine(line);\n\t\t\tif (!parsed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst [key, value] = parsed;\n\t\t\tentries.set(key, value);\n\t\t}\n\t}\n\n\treturn entries;\n}\n\n/**\n * Loads project `.env*` into `process.env` without overriding existing shell\n * values. Same authority migrate / `loadGeneratorConfig` use before resolving\n * connection strings. Returns a restore function that removes staged keys.\n */\nexport function applyGeneratorProjectEnv(cwd: string): () => void {\n\tconst envEntries = readProjectEnvEntries(cwd);\n\tif (envEntries.size === 0) {\n\t\treturn () => {};\n\t}\n\n\tconst initialKeys = new Set<string>(\n\t\tObject.keys(process.env).filter((key) => process.env[key] !== undefined),\n\t);\n\tconst staged = new Map<string, string>();\n\n\tfor (const [key, value] of envEntries.entries()) {\n\t\tif (initialKeys.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tstaged.set(key, value);\n\t}\n\n\tfor (const [key, value] of staged.entries()) {\n\t\tprocess.env[key] = value;\n\t}\n\n\treturn () => {\n\t\tfor (const key of staged.keys()) {\n\t\t\tdelete process.env[key];\n\t\t}\n\t};\n}\n\n/** @deprecated Use {@link applyGeneratorProjectEnv}. */\nconst applyProjectEnv = applyGeneratorProjectEnv;\n\nfunction readEnvStringValue(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction resolveFallbackValue(\n\tfallbackKeys: readonly string[],\n): string | undefined {\n\tfor (const key of fallbackKeys) {\n\t\tconst value = readEnvStringValue(key);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeOneOfValue<const T extends string>(\n\trawValue: string | undefined,\n\tallowedValues: readonly T[],\n\tenvKeys: readonly string[],\n): T | undefined {\n\tif (!rawValue) {\n\t\treturn undefined;\n\t}\n\tif (allowedValues.includes(rawValue as T)) {\n\t\treturn rawValue as T;\n\t}\n\tthrow new Error(\n\t\t`Generator config env vars ${envKeys.join(\", \")} must resolve to one of: ${allowedValues.join(\", \")}. Received: ${rawValue}.`,\n\t);\n}\n\nfunction resolveOptionalOneOf<const T extends string>(\n\tenvKeys: readonly string[],\n\tallowedValues: readonly T[],\n): T | undefined {\n\treturn normalizeOneOfValue(\n\t\tresolveFallbackValue(envKeys),\n\t\tallowedValues,\n\t\tenvKeys,\n\t);\n}\n\nfunction resolveOptionalBoolean(\n\tenvKeys: readonly string[],\n): boolean | undefined {\n\tconst rawValue = resolveFallbackValue(envKeys);\n\treturn rawValue === undefined ? undefined : parseBooleanFlag(rawValue, false);\n}\n\nfunction resolveOptionalJson<T>(envKeys: readonly string[]): T | undefined {\n\tconst rawValue = resolveFallbackValue(envKeys);\n\tif (rawValue === undefined) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn JSON.parse(rawValue) as T;\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(\n\t\t\t`Generator config env vars ${envKeys.join(\", \")} must contain valid JSON. ${message}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nfunction deriveDatabaseNameFromConnectionString(\n\tconnectionString: string,\n): string | undefined {\n\ttry {\n\t\tconst parsedUrl = new URL(connectionString);\n\t\tif (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst pathname = parsedUrl.pathname.replace(/^\\/+/, \"\").trim();\n\t\treturn pathname.length > 0 ? decodeURIComponent(pathname) : undefined;\n\t} catch {\n\t\t// Invalid connection string — no database name.\n\t}\n\treturn undefined;\n}\n\nfunction normalizeOptionalString(\n\tvalue: unknown,\n\tfallbackKeys: readonly string[],\n): string | undefined {\n\tif (typeof value === \"string\") {\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed.length > 0) {\n\t\t\treturn trimmed;\n\t\t}\n\t}\n\n\treturn resolveFallbackValue(fallbackKeys);\n}\n\nfunction normalizeRequiredString(\n\tvalue: unknown,\n\tfieldLabel: string,\n\tfallbackKeys: readonly string[],\n): string {\n\tconst resolved = normalizeOptionalString(value, fallbackKeys);\n\tif (resolved) {\n\t\treturn resolved;\n\t}\n\n\tthrow new Error(\n\t\t`Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(\", \")}.`,\n\t);\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n\tlet parsedUrl: URL;\n\ttry {\n\t\tparsedUrl = new URL(connectionString);\n\t} catch {\n\t\treturn connectionString;\n\t}\n\n\tif (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n\t\treturn connectionString;\n\t}\n\n\tif (!parsedUrl.username || parsedUrl.password) {\n\t\treturn connectionString;\n\t}\n\n\tconst fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS);\n\tif (!fallbackPassword) {\n\t\treturn connectionString;\n\t}\n\n\tparsedUrl.password = fallbackPassword;\n\treturn parsedUrl.toString();\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n\tif (typeof rawValue === \"boolean\") {\n\t\treturn rawValue;\n\t}\n\tif (typeof rawValue === \"string\") {\n\t\treturn parseBooleanFlag(rawValue, fallback);\n\t}\n\treturn fallback;\n}\n\nfunction normalizeFeatureFlags(\n\tinput: Partial<GeneratorFeatureFlags> | undefined,\n): GeneratorFeatureFlags {\n\treturn {\n\t\temitRegistry: normalizeBooleanFlag(\n\t\t\tinput?.emitRegistry,\n\t\t\tDEFAULT_FEATURES.emitRegistry,\n\t\t),\n\t\temitRelations: normalizeBooleanFlag(\n\t\t\tinput?.emitRelations,\n\t\t\tDEFAULT_FEATURES.emitRelations,\n\t\t),\n\t};\n}\n\nfunction normalizeExperimentalFlags(\n\tinput: Partial<GeneratorExperimentalFlags> | undefined,\n): GeneratorExperimentalFlags {\n\treturn {\n\t\tpostgresGatewayIntrospection: normalizeBooleanFlag(\n\t\t\tinput?.postgresGatewayIntrospection,\n\t\t\tDEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection,\n\t\t),\n\t\tscyllaProviderContracts: normalizeBooleanFlag(\n\t\t\tinput?.scyllaProviderContracts,\n\t\t\tDEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts,\n\t\t),\n\t};\n}\n\nfunction normalizeFilterConfig(input: GeneratorFilterConfig | undefined) {\n\treturn {\n\t\texcludeTables: normalizeTableSelection(input?.excludeTables),\n\t\tincludeTables: normalizeTableSelection(input?.includeTables),\n\t};\n}\n\nfunction normalizeArtifactWritePolicy(\n\tvalue: unknown,\n\tfieldName: string,\n): GeneratorArtifactWritePolicy {\n\tif (value === undefined || value === null || value === \"\") {\n\t\treturn DEFAULT_ARTIFACT_WRITE_POLICY;\n\t}\n\tif (\n\t\ttypeof value === \"string\" &&\n\t\tARTIFACT_WRITE_POLICIES.has(value as GeneratorArtifactWritePolicy)\n\t) {\n\t\treturn value as GeneratorArtifactWritePolicy;\n\t}\n\tthrow new Error(\n\t\t`Invalid output.artifactWrite.${fieldName}: expected one of merge | skip | overwrite, received ${JSON.stringify(value)}.`,\n\t);\n}\n\nfunction normalizeArtifactWriteConfig(\n\tinput: GeneratorArtifactWriteConfig | undefined,\n): NormalizedGeneratorOutputConfig[\"artifactWrite\"] {\n\treturn {\n\t\tdatabase: normalizeArtifactWritePolicy(input?.database, \"database\"),\n\t\tregistry: normalizeArtifactWritePolicy(input?.registry, \"registry\"),\n\t};\n}\n\nfunction normalizeOutputConfig(\n\toutput: GeneratorOutputConfig | undefined,\n): NormalizedGeneratorOutputConfig {\n\tconst preset = output?.preset ?? DEFAULT_OUTPUT_PRESET;\n\treturn {\n\t\tartifactWrite: normalizeArtifactWriteConfig(output?.artifactWrite),\n\t\tformat: output?.format ?? DEFAULT_OUTPUT_FORMAT,\n\t\tplaceholderMap: {\n\t\t\t...(output?.placeholderMap ?? {}),\n\t\t},\n\t\tpreset,\n\t\ttargets: {\n\t\t\t...OUTPUT_PRESET_TARGETS[preset],\n\t\t\t...(output?.targets ?? {}),\n\t\t},\n\t};\n}\n\nfunction normalizeProviderConfig(\n\tprovider: GeneratorProviderInputConfig,\n): GeneratorProviderConfig {\n\tif (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n\t\tconst connectionString = normalizeRequiredString(\n\t\t\tprovider.connectionString,\n\t\t\t\"provider.connectionString\",\n\t\t\tDIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t);\n\t\tconst database =\n\t\t\tnormalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n\t\t\tderiveDatabaseNameFromConnectionString(connectionString);\n\n\t\treturn {\n\t\t\t...provider,\n\t\t\tconnectionString: applyPostgresPasswordFallback(connectionString),\n\t\t\tdatabase,\n\t\t\tschemas: normalizeSchemaSelection(provider.schemas),\n\t\t};\n\t}\n\n\tif (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n\t\tconst gatewayUrl = normalizeRequiredString(\n\t\t\tprovider.gatewayUrl,\n\t\t\t\"provider.gatewayUrl\",\n\t\t\tGATEWAY_URL_ENV_KEYS,\n\t\t);\n\t\tconst apiKey = normalizeRequiredString(\n\t\t\tprovider.apiKey,\n\t\t\t\"provider.apiKey\",\n\t\t\tGATEWAY_API_KEY_ENV_KEYS,\n\t\t);\n\t\tconst database =\n\t\t\tnormalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n\t\t\t\"postgres\";\n\t\tconst client = normalizeOptionalString(\n\t\t\tprovider.client,\n\t\t\tGATEWAY_CLIENT_ENV_KEYS,\n\t\t);\n\n\t\treturn {\n\t\t\t...provider,\n\t\t\tapiKey,\n\t\t\tdatabase,\n\t\t\tgatewayUrl,\n\t\t\t...(client ? { client } : {}),\n\t\t\tschemas: normalizeSchemaSelection(provider.schemas),\n\t\t};\n\t}\n\n\tif (provider.kind === \"scylla\" && provider.mode === \"direct\") {\n\t\tif (!provider.contactPoints?.length) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Generator config is missing provider.contactPoints for scylla direct mode.\",\n\t\t\t);\n\t\t}\n\t\tconst keyspace = normalizeOptionalString(provider.keyspace, []);\n\t\tif (!keyspace) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Generator config is missing provider.keyspace for scylla direct mode.\",\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tcontactPoints: provider.contactPoints.slice(),\n\t\t\tdatacenter: normalizeOptionalString(provider.datacenter, []),\n\t\t\tkeyspace,\n\t\t\tkind: \"scylla\",\n\t\t\tmode: \"direct\",\n\t\t};\n\t}\n\n\treturn provider;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isOptionalObjectField(\n\trecord: Record<string, unknown>,\n\tkey: string,\n): boolean {\n\tconst value = record[key];\n\treturn value === undefined || (typeof value === \"object\" && value !== null);\n}\n\nfunction isAthenaConfig(value: unknown): value is AthenaConfig {\n\tif (!isPlainRecord(value)) {\n\t\treturn false;\n\t}\n\tif (\n\t\t!(\n\t\t\tisOptionalObjectField(value, \"provider\") &&\n\t\t\tisOptionalObjectField(value, \"output\") &&\n\t\t\tisOptionalObjectField(value, \"tooling\") &&\n\t\t\tisOptionalObjectField(value, \"models\") &&\n\t\t\tisOptionalObjectField(value, \"policies\") &&\n\t\t\tisOptionalObjectField(value, \"migrations\") &&\n\t\t\tisOptionalObjectField(value, \"modules\") &&\n\t\t\tisOptionalObjectField(value, \"features\") &&\n\t\t\tisOptionalObjectField(value, \"experimental\") &&\n\t\t\tisOptionalObjectField(value, \"filter\") &&\n\t\t\tisOptionalObjectField(value, \"naming\")\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\treturn (\n\t\tvalue.provider !== undefined ||\n\t\tvalue.models !== undefined ||\n\t\tvalue.policies !== undefined ||\n\t\tvalue.tooling !== undefined ||\n\t\tvalue.output !== undefined ||\n\t\tvalue.migrations !== undefined ||\n\t\tvalue.modules !== undefined ||\n\t\tvalue.features !== undefined ||\n\t\tvalue.experimental !== undefined ||\n\t\tvalue.filter !== undefined ||\n\t\tvalue.naming !== undefined\n\t);\n}\n\nfunction isAthenaGeneratorConfig(\n\tvalue: unknown,\n): value is AthenaGeneratorConfig {\n\treturn (\n\t\tisAthenaConfig(value) &&\n\t\tBoolean(value.provider && typeof value.provider === \"object\")\n\t);\n}\n\nconst PROJECT_CONFIG_NESTED_KEYS = new Set([\n\t\"experimental\",\n\t\"features\",\n\t\"filter\",\n\t\"migrations\",\n\t\"models\",\n\t\"modules\",\n\t\"naming\",\n\t\"output\",\n\t\"policies\",\n\t\"provider\",\n\t\"tooling\",\n]);\n\nfunction retainAthenaConfig(input: AthenaConfig): AthenaConfig {\n\tconst retained: AthenaConfig = {};\n\tif (input.experimental !== undefined) {\n\t\tretained.experimental = input.experimental;\n\t}\n\tif (input.features !== undefined) {\n\t\tretained.features = input.features;\n\t}\n\tif (input.filter !== undefined) {\n\t\tretained.filter = input.filter;\n\t}\n\tif (input.migrations !== undefined) {\n\t\tretained.migrations = input.migrations;\n\t}\n\tif (input.modules !== undefined) {\n\t\tretained.modules = input.modules;\n\t}\n\tif (input.models !== undefined) {\n\t\tretained.models = input.models;\n\t}\n\tif (input.naming !== undefined) {\n\t\tretained.naming = input.naming;\n\t}\n\tif (input.output !== undefined) {\n\t\tretained.output = input.output;\n\t}\n\tif (input.policies !== undefined) {\n\t\tretained.policies = input.policies as AthenaPolicyProjectConfig;\n\t}\n\tif (input.provider !== undefined) {\n\t\tretained.provider = input.provider;\n\t}\n\tif (input.tooling !== undefined) {\n\t\tretained.tooling = input.tooling as AthenaToolingEntrypoints;\n\t}\n\treturn retained;\n}\n\nfunction normalizeMigrationsConfig(\n\tinput: AthenaMigrationsConfig | undefined,\n): NormalizedAthenaMigrationsConfig {\n\tconst directory =\n\t\ttypeof input?.directory === \"string\" && input.directory.trim().length > 0\n\t\t\t? input.directory.trim()\n\t\t\t: DEFAULT_MIGRATIONS_DIRECTORY;\n\treturn { directory };\n}\n\nexport function normalizeGeneratorConfig(\n\tinput: AthenaGeneratorConfig,\n): NormalizedAthenaGeneratorConfig {\n\treturn {\n\t\texperimental: normalizeExperimentalFlags(input.experimental),\n\t\tfeatures: normalizeFeatureFlags(input.features),\n\t\tfilter: {\n\t\t\t...DEFAULT_FILTER_CONFIG,\n\t\t\t...normalizeFilterConfig(input.filter),\n\t\t},\n\t\tinternal: {\n\t\t\t...DEFAULT_INTERNAL_CONFIG,\n\t\t},\n\t\tmigrations: normalizeMigrationsConfig(input.migrations),\n\t\t...(input.modules === undefined ? {} : { modules: input.modules }),\n\t\tnaming: {\n\t\t\t...DEFAULT_NAMING,\n\t\t\t...(input.naming ?? {}),\n\t\t},\n\t\toutput: normalizeOutputConfig(input.output),\n\t\tprovider: normalizeProviderConfig(input.provider),\n\t};\n}\n\n/**\n * Typed identity helper for authoring the static project SSOT (`athena.config.ts`).\n * `provider` is optional; generator commands still validate via\n * {@link defineGeneratorConfig} / {@link loadGeneratorConfig}.\n */\nexport function defineAthenaConfig<TConfig extends AthenaConfig>(\n\tconfig: TConfig,\n): TConfig {\n\treturn config;\n}\n\n/**\n * @deprecated Prefer {@link defineAthenaConfig} for project files.\n * Strict generator identity — not an alias of {@link defineAthenaConfig}.\n */\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\n\tconfig: TConfig,\n): TConfig {\n\treturn config;\n}\n\n/**\n * Finds a supported generator config filename in the provided directory.\n */\nexport function findGeneratorConfigPath(\n\tcwd: string = process.cwd(),\n): string | undefined {\n\tfor (const candidate of DEFAULT_CONFIG_CANDIDATES) {\n\t\tconst absolutePath = resolve(cwd, candidate);\n\t\tif (existsSync(absolutePath)) {\n\t\t\treturn absolutePath;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction enqueueConfigExportCandidates(\n\trecord: Record<string, unknown>,\n\tqueue: unknown[],\n): void {\n\tconst defaultExport = record.default;\n\tif (defaultExport && typeof defaultExport === \"object\") {\n\t\tqueue.push(defaultExport);\n\t}\n\n\tconst namedConfigExport = record.config;\n\tif (namedConfigExport && typeof namedConfigExport === \"object\") {\n\t\tqueue.push(namedConfigExport);\n\t}\n\n\tconst moduleExports = record[\"module.exports\"];\n\tif (moduleExports && typeof moduleExports === \"object\") {\n\t\tqueue.push(moduleExports);\n\t}\n\n\tfor (const [key, value] of Object.entries(record)) {\n\t\tif (PROJECT_CONFIG_NESTED_KEYS.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (value && typeof value === \"object\") {\n\t\t\tqueue.push(value);\n\t\t}\n\t}\n}\n\nfunction extractAthenaConfigExport(module: unknown): AthenaConfig {\n\tconst visited = new Set<unknown>();\n\tconst queue: unknown[] = [module];\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift();\n\t\tif (!current || typeof current !== \"object\" || visited.has(current)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvisited.add(current);\n\n\t\tconst record = current as Record<string, unknown>;\n\t\tif (isAthenaConfig(record)) {\n\t\t\treturn record;\n\t\t}\n\n\t\tenqueueConfigExportCandidates(record, queue);\n\t}\n\n\tthrow new Error(\n\t\t\"Athena config file must export a config object as default export or `config`.\",\n\t);\n}\n\nfunction extractGeneratorConfigExport(module: unknown): AthenaGeneratorConfig {\n\tconst visited = new Set<unknown>();\n\tconst queue: unknown[] = [module];\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift();\n\t\tif (!current || typeof current !== \"object\" || visited.has(current)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvisited.add(current);\n\n\t\tconst record = current as Record<string, unknown>;\n\t\tif (isAthenaGeneratorConfig(record)) {\n\t\t\treturn record;\n\t\t}\n\n\t\tenqueueConfigExportCandidates(record, queue);\n\t}\n\n\tthrow new Error(\n\t\t\"Generator config file must export a config object as default export or `config`.\",\n\t);\n}\n\nfunction isTypeScriptConfigPath(filePath: string): boolean {\n\treturn /\\.[cm]?tsx?$/i.test(filePath);\n}\n\nfunction isUnknownTypeScriptModuleError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = \"code\" in error ? String(error.code) : \"\";\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\t((code === \"ERR_UNKNOWN_FILE_EXTENSION\" ||\n\t\t\tcode === \"ERR_UNKNOWN_MODULE_FORMAT\") &&\n\t\t\t/\\.tsx?/i.test(message)) ||\n\t\t/Unknown file extension [\"']\\.tsx?[\"']/i.test(message)\n\t);\n}\n\nfunction isNodeUnsupportedTypescriptSyntax(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst code = \"code\" in error ? error.code : undefined;\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn (\n\t\tcode === \"ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX\" ||\n\t\t/strip-only mode/i.test(message) ||\n\t\t/parameter property is not supported/i.test(message)\n\t);\n}\n\n/**\n * Native `import()` of `athena.config.ts` uses Node type-stripping. Syntax Node\n * cannot strip (constructor parameter properties) fails with a cryptic code.\n * Real evaluation failures are {@link AthenaConfigurationError}\n * `ATHENA_CONFIG_IMPORT_FAILED` — loaders still do not instantiate runtimes.\n */\nexport function explainGeneratorConfigLoadError(\n\terror: unknown,\n\tconfigPath: string,\n): AthenaConfigurationError {\n\tif (error instanceof AthenaConfigurationError) {\n\t\treturn error;\n\t}\n\n\tconst cause = error instanceof Error ? { cause: error } : undefined;\n\tif (isNodeUnsupportedTypescriptSyntax(error)) {\n\t\tconst message = [\n\t\t\t`Cannot load ${configPath}: Node.js type-stripping cannot compile this TypeScript.`,\n\t\t\t\"Constructor parameter properties (`constructor(private foo: T)`) and similar syntax are not supported in strip-only mode.\",\n\t\t\t\"Import `defineAthenaConfig` / `generatorEnv` from `@xylex-group/athena` (the compiled package), not from `./src/...`.\",\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t].join(\"\\n\");\n\t\treturn new AthenaConfigurationError(\n\t\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t\tmessage,\n\t\t\tundefined,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tif (isUnknownTypeScriptModuleError(error)) {\n\t\tconst message = [\n\t\t\t`Cannot load ${configPath}: this Node.js cannot import TypeScript config files.`,\n\t\t\t\"Use Node.js 22.18+ (native type-stripping) or keep `tsx` installed next to the Athena CLI.\",\n\t\t\terror instanceof Error ? error.message : String(error),\n\t\t].join(\"\\n\");\n\t\treturn new AthenaConfigurationError(\n\t\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t\tmessage,\n\t\t\tundefined,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tconst detail = error instanceof Error ? error.message : String(error);\n\treturn new AthenaConfigurationError(\n\t\t\"ATHENA_CONFIG_IMPORT_FAILED\",\n\t\t`Cannot load ${configPath}: ${detail}`,\n\t\tundefined,\n\t\tcause,\n\t);\n}\n\nfunction createRuntimeImport(): (moduleSpecifier: string) => Promise<unknown> {\n\t// Keep this as an indirect import so bundlers do not try to statically resolve\n\t// runtime file-system config paths when athena-js is consumed in Next.js.\n\treturn new Function(\n\t\t\"moduleSpecifier\",\n\t\t\"return import(moduleSpecifier)\",\n\t) as (moduleSpecifier: string) => Promise<unknown>;\n}\n\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\n\treturn createRuntimeImport()(moduleSpecifier);\n}\n\nlet typeScriptConfigLoaderPromise: Promise<boolean> | undefined;\n\nasync function ensureTypeScriptConfigLoader(\n\tanchorPath: string,\n): Promise<boolean> {\n\tif (typeScriptConfigLoaderPromise) {\n\t\treturn typeScriptConfigLoaderPromise;\n\t}\n\ttypeScriptConfigLoaderPromise = (async () => {\n\t\tconst runtimeImport = createRuntimeImport();\n\t\tconst nodeModule = (await runtimeImport(\"node:module\")) as {\n\t\t\tcreateRequire: (filename: string) => {\n\t\t\t\tresolve: (id: string) => string;\n\t\t\t};\n\t\t};\n\t\tconst anchors = [anchorPath, fileURLToPath(import.meta.url)];\n\t\tfor (const anchor of anchors) {\n\t\t\ttry {\n\t\t\t\tconst require = nodeModule.createRequire(anchor);\n\t\t\t\tconst tsxLoader = require.resolve(\"tsx\");\n\t\t\t\tawait runtimeImport(pathToFileURL(tsxLoader).href);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tawait runtimeImport(\"tsx\");\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\treturn typeScriptConfigLoaderPromise;\n}\n\nasync function importConfigFile(resolvedPath: string): Promise<unknown> {\n\tconst moduleUrl = pathToFileURL(resolvedPath);\n\tconst load = () =>\n\t\timportConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`);\n\ttry {\n\t\treturn await load();\n\t} catch (error) {\n\t\tif (\n\t\t\tisTypeScriptConfigPath(resolvedPath) &&\n\t\t\tisUnknownTypeScriptModuleError(error)\n\t\t) {\n\t\t\tconst registered = await ensureTypeScriptConfigLoader(resolvedPath);\n\t\t\tif (registered) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await load();\n\t\t\t\t} catch (retryError) {\n\t\t\t\t\tthrow explainGeneratorConfigLoadError(retryError, resolvedPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthrow explainGeneratorConfigLoadError(error, resolvedPath);\n\t}\n}\n\nfunction buildEnvironmentOutputConfig(): GeneratorOutputConfig | undefined {\n\tconst format = resolveOptionalOneOf(\n\t\tOUTPUT_FORMAT_ENV_KEYS,\n\t\tOUTPUT_FORMAT_VALUES,\n\t);\n\tconst preset = resolveOptionalOneOf(\n\t\tOUTPUT_PRESET_ENV_KEYS,\n\t\tOUTPUT_PRESET_VALUES,\n\t);\n\tconst modelTarget = resolveFallbackValue(MODEL_TARGET_ENV_KEYS);\n\tconst schemaTarget = resolveFallbackValue(SCHEMA_TARGET_ENV_KEYS);\n\tconst databaseTarget = resolveFallbackValue(DATABASE_TARGET_ENV_KEYS);\n\tconst registryTarget = resolveFallbackValue(REGISTRY_TARGET_ENV_KEYS);\n\tconst placeholderMap = resolveOptionalJson<Record<string, string>>(\n\t\tPLACEHOLDER_MAP_ENV_KEYS,\n\t);\n\n\tif (\n\t\tformat === undefined &&\n\t\tpreset === undefined &&\n\t\tmodelTarget === undefined &&\n\t\tschemaTarget === undefined &&\n\t\tdatabaseTarget === undefined &&\n\t\tregistryTarget === undefined &&\n\t\tplaceholderMap === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tformat,\n\t\tplaceholderMap,\n\t\tpreset,\n\t\ttargets: {\n\t\t\t...(modelTarget ? { model: modelTarget } : {}),\n\t\t\t...(schemaTarget ? { schema: schemaTarget } : {}),\n\t\t\t...(databaseTarget ? { database: databaseTarget } : {}),\n\t\t\t...(registryTarget ? { registry: registryTarget } : {}),\n\t\t},\n\t};\n}\n\nfunction buildEnvironmentFilterConfig(): GeneratorFilterConfig | undefined {\n\tconst includeTables = resolveFallbackValue(TABLES_ENV_KEYS);\n\tconst excludeTables = resolveFallbackValue(EXCLUDE_TABLES_ENV_KEYS);\n\n\tif (includeTables === undefined && excludeTables === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(includeTables === undefined ? {} : { includeTables }),\n\t\t...(excludeTables === undefined ? {} : { excludeTables }),\n\t};\n}\n\nfunction buildEnvironmentNamingConfig():\n\t| Partial<GeneratorNamingConfig>\n\t| undefined {\n\tconst modelType = resolveOptionalOneOf(\n\t\tMODEL_TYPE_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst modelConst = resolveOptionalOneOf(\n\t\tMODEL_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst schemaConst = resolveOptionalOneOf(\n\t\tSCHEMA_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst databaseConst = resolveOptionalOneOf(\n\t\tDATABASE_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\tconst registryConst = resolveOptionalOneOf(\n\t\tREGISTRY_CONST_ENV_KEYS,\n\t\tNAMING_STYLE_VALUES,\n\t);\n\n\tif (\n\t\tmodelType === undefined &&\n\t\tmodelConst === undefined &&\n\t\tschemaConst === undefined &&\n\t\tdatabaseConst === undefined &&\n\t\tregistryConst === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(modelType ? { modelType } : {}),\n\t\t...(modelConst ? { modelConst } : {}),\n\t\t...(schemaConst ? { schemaConst } : {}),\n\t\t...(databaseConst ? { databaseConst } : {}),\n\t\t...(registryConst ? { registryConst } : {}),\n\t};\n}\n\nfunction buildEnvironmentFeatureFlags():\n\t| Partial<GeneratorFeatureFlags>\n\t| undefined {\n\tconst emitRelations = resolveOptionalBoolean(EMIT_RELATIONS_ENV_KEYS);\n\tconst emitRegistry = resolveOptionalBoolean(EMIT_REGISTRY_ENV_KEYS);\n\n\tif (emitRelations === undefined && emitRegistry === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(emitRelations === undefined ? {} : { emitRelations }),\n\t\t...(emitRegistry === undefined ? {} : { emitRegistry }),\n\t};\n}\n\nfunction buildEnvironmentExperimentalFlags():\n\t| Partial<GeneratorExperimentalFlags>\n\t| undefined {\n\tconst postgresGatewayIntrospection = resolveOptionalBoolean(\n\t\tGATEWAY_EXPERIMENTAL_ENV_KEYS,\n\t);\n\tconst scyllaProviderContracts = resolveOptionalBoolean(\n\t\tSCYLLA_PROVIDER_CONTRACTS_ENV_KEYS,\n\t);\n\n\tif (\n\t\tpostgresGatewayIntrospection === undefined &&\n\t\tscyllaProviderContracts === undefined\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(postgresGatewayIntrospection === undefined\n\t\t\t? {}\n\t\t\t: { postgresGatewayIntrospection }),\n\t\t...(scyllaProviderContracts === undefined\n\t\t\t? {}\n\t\t\t: { scyllaProviderContracts }),\n\t};\n}\n\nfunction buildEnvironmentProviderConfig():\n\t| GeneratorProviderInputConfig\n\t| undefined {\n\tconst directConnectionString = resolveFallbackValue(\n\t\tDIRECT_CONNECTION_STRING_ENV_KEYS,\n\t);\n\tif (directConnectionString) {\n\t\treturn {\n\t\t\tconnectionString: directConnectionString,\n\t\t\tdatabase: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n\t\t\tkind: \"postgres\",\n\t\t\tmode: \"direct\",\n\t\t\tschemas: normalizeSchemaSelection(\n\t\t\t\tresolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS),\n\t\t\t),\n\t\t};\n\t}\n\n\tconst gatewayUrl = resolveFallbackValue(GATEWAY_URL_ENV_KEYS);\n\tconst apiKey = resolveFallbackValue(GATEWAY_API_KEY_ENV_KEYS);\n\tif (gatewayUrl && apiKey) {\n\t\tconst backend = resolveOptionalOneOf(\n\t\t\tGATEWAY_BACKEND_ENV_KEYS,\n\t\t\tBACKEND_TYPE_VALUES,\n\t\t) as BackendType | undefined;\n\t\tconst client = resolveFallbackValue(GATEWAY_CLIENT_ENV_KEYS);\n\t\treturn {\n\t\t\tapiKey,\n\t\t\tbackend,\n\t\t\tdatabase: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n\t\t\tgatewayUrl,\n\t\t\tkind: \"postgres\",\n\t\t\tmode: \"gateway\",\n\t\t\tschemas: normalizeSchemaSelection(\n\t\t\t\tresolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS),\n\t\t\t),\n\t\t\t...(client ? { client } : {}),\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction createEnvironmentGeneratorConfig(): AthenaGeneratorConfig | undefined {\n\tconst provider = buildEnvironmentProviderConfig();\n\tif (!provider) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\texperimental: buildEnvironmentExperimentalFlags(),\n\t\tfeatures: buildEnvironmentFeatureFlags(),\n\t\tfilter: buildEnvironmentFilterConfig(),\n\t\tnaming: buildEnvironmentNamingConfig(),\n\t\toutput: buildEnvironmentOutputConfig(),\n\t\tprovider,\n\t};\n}\n\n/**\n * Loads the static project SSOT from `athena.config.*`.\n * Retains `models`, `policies`, and `tooling` exactly. Does not instantiate\n * clients, open database connections, or import `tooling.*` paths.\n */\nexport async function loadAthenaConfig(\n\toptions: LoadAthenaConfigOptions = {},\n): Promise<LoadedAthenaConfig> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst restoreProjectEnv = applyProjectEnv(cwd);\n\ttry {\n\t\tconst resolvedPath = options.configPath\n\t\t\t? resolve(cwd, options.configPath)\n\t\t\t: findGeneratorConfigPath(cwd);\n\n\t\tif (!resolvedPath) {\n\t\t\tthrow new Error(\n\t\t\t\t`No Athena config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst module = await importConfigFile(resolvedPath);\n\t\tconst rawConfig = extractAthenaConfigExport(module);\n\t\treturn {\n\t\t\tconfig: retainAthenaConfig(rawConfig),\n\t\t\tconfigPath: resolvedPath,\n\t\t};\n\t} finally {\n\t\trestoreProjectEnv();\n\t}\n}\n\n/**\n * Loads and normalizes `athena.config.*` as a required-provider generator\n * projection. Extra project-only keys (`models`, `policies`, `tooling`) are\n * dropped. Env-only fallback still requires a resolvable provider.\n */\nexport async function loadGeneratorConfig(\n\toptions: LoadGeneratorConfigOptions = {},\n): Promise<LoadedGeneratorConfig> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst restoreAppliedEnv =\n\t\toptions.applyProjectEnv === false ? () => {} : applyProjectEnv(cwd);\n\ttry {\n\t\tconst resolvedPath = options.configPath\n\t\t\t? resolve(cwd, options.configPath)\n\t\t\t: findGeneratorConfigPath(cwd);\n\n\t\tif (!resolvedPath) {\n\t\t\tconst environmentConfig = createEnvironmentGeneratorConfig();\n\t\t\tif (environmentConfig) {\n\t\t\t\treturn {\n\t\t\t\t\tconfig: normalizeGeneratorConfig(environmentConfig),\n\t\t\t\t\tconfigPath: ENV_ONLY_CONFIG_PATH,\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}. To run without a config file, set DATABASE_URL (direct mode) or ATHENA_URL + ATHENA_API_KEY (gateway mode).`,\n\t\t\t);\n\t\t}\n\n\t\tconst module = await importConfigFile(resolvedPath);\n\t\tconst rawConfig = extractGeneratorConfigExport(module);\n\n\t\treturn {\n\t\t\tconfig: normalizeGeneratorConfig(rawConfig),\n\t\t\tconfigPath: resolvedPath,\n\t\t};\n\t} finally {\n\t\tif (options.restoreProjectEnv !== false) {\n\t\t\trestoreAppliedEnv();\n\t\t}\n\t}\n}\n","import {\n\tapplyGeneratorProjectEnv,\n\tnormalizeGeneratorConfig,\n} from \"./config.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratorProviderConfig,\n\tLoadedGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorDatabaseAuthorityMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport type GeneratorDatabaseAuthoritySource =\n\t| \"explicit-provider\"\n\t| \"loaded-config\"\n\t| \"environment-probe\";\n\n/**\n * Where a schema list written into config came from.\n *\n * - `discovered` — live catalog introspection\n * - `configured` — existing loaded/config schemas (no live discovery)\n * - `explicit` — caller-supplied schemas option\n * - `fallback` — `DEFAULT_POSTGRES_SCHEMAS` because discovery was unavailable\n */\nexport type GeneratorSchemaProvenance =\n\t| \"discovered\"\n\t| \"configured\"\n\t| \"explicit\"\n\t| \"fallback\";\n\nexport interface ResolvedGeneratorDatabaseAuthority {\n\tmode: \"direct\" | \"gateway\";\n\tprovider: GeneratorProviderConfig;\n\trestoreEnv: () => void;\n\tsource: GeneratorDatabaseAuthoritySource;\n}\n\nexport interface ResolveGeneratorDatabaseAuthorityOptions {\n\t/**\n\t * When false, skip loading project `.env*` into `process.env`.\n\t * Defaults to true. Pass false when the caller already applied project env\n\t * (for example inside `loadGeneratorConfig`).\n\t */\n\tapplyProjectEnv?: boolean;\n\tcwd?: string;\n\tloaded?: LoadedGeneratorConfig;\n\t/** Preferred provider mode when probing from environment. */\n\tmode?: GeneratorDatabaseAuthorityMode;\n\t/** Pre-resolved provider (skips probe / loaded lookup). */\n\tprovider?: GeneratorProviderConfig;\n}\n\nfunction hasNonEmptyEnv(keys: readonly string[]): boolean {\n\tfor (const key of keys) {\n\t\tconst value = process.env[key];\n\t\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nconst DIRECT_CONNECTION_KEYS = [\n\t\"ATHENA_GENERATOR_PG_URL\",\n\t\"DATABASE_URL\",\n\t\"PG_URL\",\n\t\"POSTGRES_URL\",\n\t\"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_KEYS = [\n\t\"ATHENA_URL\",\n\t\"ATHENA_GATEWAY_URL\",\n\t\"ATHENA_GENERATOR_URL\",\n] as const;\n\nconst GATEWAY_KEY_KEYS = [\n\t\"ATHENA_API_KEY\",\n\t\"ATHENA_GATEWAY_API_KEY\",\n\t\"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Picks direct vs gateway from env after project `.env*` has been applied.\n * Prefers direct when a connection string is present.\n */\nexport function detectAuthorityMode(\n\tpreferred: GeneratorDatabaseAuthorityMode = \"auto\",\n): \"direct\" | \"gateway\" {\n\tif (preferred === \"direct\" || preferred === \"gateway\") {\n\t\treturn preferred;\n\t}\n\n\tconst hasDirect = hasNonEmptyEnv(DIRECT_CONNECTION_KEYS);\n\tconst hasGateway =\n\t\thasNonEmptyEnv(GATEWAY_URL_KEYS) && hasNonEmptyEnv(GATEWAY_KEY_KEYS);\n\n\tif (hasDirect) {\n\t\treturn \"direct\";\n\t}\n\tif (hasGateway) {\n\t\treturn \"gateway\";\n\t}\n\n\treturn \"direct\";\n}\n\nfunction providerModeOf(\n\tprovider: GeneratorProviderConfig | undefined,\n\tpreferred: GeneratorDatabaseAuthorityMode,\n): \"direct\" | \"gateway\" {\n\tif (provider && provider.kind === \"postgres\") {\n\t\tif (provider.mode === \"gateway\") {\n\t\t\treturn \"gateway\";\n\t\t}\n\t\tif (provider.mode === \"direct\") {\n\t\t\treturn \"direct\";\n\t\t}\n\t}\n\treturn detectAuthorityMode(preferred);\n}\n\n/**\n * Resolves the canonical generator database authority used by migrate, init\n * schema discovery, generate, diff, and introspection.\n *\n * Always prefers an explicit provider, then a loaded normalized config, then an\n * environment probe — after optionally applying project `.env*` files the same\n * way `loadGeneratorConfig` / migrate do.\n */\nexport function resolveGeneratorDatabaseAuthority(\n\toptions: ResolveGeneratorDatabaseAuthorityOptions = {},\n): ResolvedGeneratorDatabaseAuthority {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst preferredMode = options.mode ?? \"auto\";\n\tconst restoreEnv =\n\t\toptions.applyProjectEnv === false\n\t\t\t? () => {}\n\t\t\t: applyGeneratorProjectEnv(cwd);\n\n\ttry {\n\t\tif (options.provider) {\n\t\t\treturn {\n\t\t\t\tmode: providerModeOf(options.provider, preferredMode),\n\t\t\t\tprovider: options.provider,\n\t\t\t\trestoreEnv,\n\t\t\t\tsource: \"explicit-provider\",\n\t\t\t};\n\t\t}\n\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tmode: providerModeOf(options.loaded.config.provider, preferredMode),\n\t\t\t\tprovider: options.loaded.config.provider,\n\t\t\t\trestoreEnv,\n\t\t\t\tsource: \"loaded-config\",\n\t\t\t};\n\t\t}\n\n\t\tconst mode = detectAuthorityMode(preferredMode);\n\t\tconst probeConfig: AthenaGeneratorConfig = {\n\t\t\tprovider:\n\t\t\t\tmode === \"gateway\"\n\t\t\t\t\t? { kind: \"postgres\", mode: \"gateway\" }\n\t\t\t\t\t: { kind: \"postgres\", mode: \"direct\" },\n\t\t};\n\t\tconst normalized = normalizeGeneratorConfig(probeConfig);\n\t\treturn {\n\t\t\tmode,\n\t\t\tprovider: normalized.provider,\n\t\t\trestoreEnv,\n\t\t\tsource: \"environment-probe\",\n\t\t};\n\t} catch (error) {\n\t\trestoreEnv();\n\t\tthrow error;\n\t}\n}\n\n/**\n * Human-readable explanation when schema discovery could not run and the CLI\n * fell back to `DEFAULT_POSTGRES_SCHEMAS` (typically `public`).\n */\nexport function formatSchemaFallbackMessages(options: {\n\tdiscoveryError?: string;\n\tschemas: readonly string[];\n\t/** Optional hint of schemas that often exist after migrate (e.g. athena). */\n\texpectedLiveSchemas?: readonly string[];\n}): string[] {\n\tconst reason =\n\t\toptions.discoveryError?.trim() ||\n\t\t\"no PostgreSQL connection could be resolved.\";\n\tconst schemaList = options.schemas.join(\", \") || \"public\";\n\tconst lines = [\n\t\t`Schema discovery unavailable: ${reason}`,\n\t\t`Config created with fallback schemas: ${schemaList}.`,\n\t\t\"These schemas were NOT discovered from the database.\",\n\t\t\"\",\n\t\t\"To discover schemas, provide DATABASE_URL or another supported\",\n\t\t\"connection source and rerun:\",\n\t\t\"\",\n\t\t\"  athena-js init\",\n\t];\n\n\tconst hints = options.expectedLiveSchemas?.filter((value) => value.trim());\n\tif (hints && hints.length > 0) {\n\t\tlines.push(\"\", \"Expected live schemas may include:\");\n\t\tfor (const schema of hints) {\n\t\t\tlines.push(`  ${schema}`);\n\t\t}\n\t}\n\n\treturn lines;\n}\n","import type { NormalizedAthenaGeneratorConfig } from \"../../generator/types.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"../constants.ts\";\nimport { MigrationError } from \"../types.ts\";\nimport { resolve } from \"node:path\";\n\nexport function resolveMigrationsDirectory(\n\tconfig: NormalizedAthenaGeneratorConfig,\n\tcwd: string,\n): string {\n\tconst configured = config.migrations.directory;\n\treturn resolve(cwd, configured || DEFAULT_MIGRATIONS_DIRECTORY);\n}\n\nexport function providerLabel(config: NormalizedAthenaGeneratorConfig): string {\n\tconst { provider } = config;\n\tif (provider.kind === \"postgres\") {\n\t\treturn `postgres/${provider.mode}`;\n\t}\n\treturn `${provider.kind}/${provider.mode}`;\n}\n\nexport function databaseLabel(config: NormalizedAthenaGeneratorConfig): string {\n\tconst { provider } = config;\n\tif (provider.kind === \"postgres\") {\n\t\tif (provider.mode === \"direct\") {\n\t\t\treturn (\n\t\t\t\tprovider.database ??\n\t\t\t\textractDatabaseName(provider.connectionString) ??\n\t\t\t\t\"postgres\"\n\t\t\t);\n\t\t}\n\t\treturn provider.database;\n\t}\n\tif (provider.kind === \"scylla\") {\n\t\treturn provider.keyspace;\n\t}\n\treturn \"unknown\";\n}\n\nexport function extractDatabaseName(connectionString: string): string | undefined {\n\ttry {\n\t\tconst normalized = connectionString.replace(/^postgresql:/i, \"postgres:\");\n\t\tconst url = new URL(normalized);\n\t\tconst name = url.pathname.replace(/^\\//, \"\");\n\t\treturn name.length > 0 ? decodeURIComponent(name) : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function relativeDirectoryDisplay(\n\tcwd: string,\n\tabsoluteDirectory: string,\n): string {\n\tconst normalizedCwd = cwd.replace(/\\\\/g, \"/\");\n\tconst normalizedDir = absoluteDirectory.replace(/\\\\/g, \"/\");\n\tif (normalizedDir.startsWith(`${normalizedCwd}/`)) {\n\t\treturn normalizedDir.slice(normalizedCwd.length + 1);\n\t}\n\tif (normalizedDir === normalizedCwd) {\n\t\treturn \".\";\n\t}\n\treturn absoluteDirectory.replace(/\\\\/g, \"/\");\n}\n\nexport function assertDirectPostgres(config: NormalizedAthenaGeneratorConfig): {\n\tconnectionString: string;\n\tdatabase?: string;\n} {\n\tconst { provider } = config;\n\tif (provider.kind !== \"postgres\") {\n\t\tthrow new MigrationError(\n\t\t\t\"PROVIDER\",\n\t\t\t`athena-js migrate currently requires a direct PostgreSQL provider.\\nUnsupported provider: ${provider.kind}/${provider.mode}.`,\n\t\t);\n\t}\n\tif (provider.mode !== \"direct\") {\n\t\tthrow new MigrationError(\n\t\t\t\"PROVIDER\",\n\t\t\t[\n\t\t\t\t\"athena-js migrate currently requires a direct PostgreSQL provider.\",\n\t\t\t\t\"Gateway-backed migration execution is not yet supported.\",\n\t\t\t\t\"Raw DDL needs privileged database access outside the normal query gateway.\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\tif (!provider.connectionString) {\n\t\tthrow new MigrationError(\n\t\t\t\"CONFIG\",\n\t\t\t\"Direct PostgreSQL provider is missing connectionString (set DATABASE_URL / PG_URL or provider.connectionString).\",\n\t\t);\n\t}\n\treturn {\n\t\tconnectionString: provider.connectionString,\n\t\tdatabase: provider.database,\n\t};\n}\n","/**\n * Process-init application identity (origin + hostname).\n *\n * Never derived from Host / x-forwarded-host / Origin request headers.\n * APP_URL (and documented aliases) plus optional createClient({ app })\n * are the only URL sources.\n */\n\nimport { ATHENA_ENV_APP_URL_KEYS } from \"../env/index.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\n\nexport interface AthenaAppIdentityInput {\n\tid?: string | null;\n\tname?: string | null;\n\turl?: string | null;\n}\n\nexport interface AthenaAppIdentity {\n\treadonly hostname: string;\n\treadonly name: string;\n\treadonly origin: string;\n}\n\nexport interface ResolveAthenaAppIdentityOptions {\n\tapp?: AthenaAppIdentityInput;\n\tenv?: Record<string, string | undefined>;\n\tenvironment?: \"development\" | \"production\";\n\t/** When true, production missing URL fails closed. */\n\trequired?: boolean;\n}\n\nconst FORBIDDEN_IDENTITY_ENV_KEYS = new Set([\n\t\"HOST\",\n\t\"HTTP_HOST\",\n\t\"X_FORWARDED_HOST\",\n\t\"x-forwarded-host\",\n]);\n\nfunction originFromConfiguredUrl(value: string): string | undefined {\n\ttry {\n\t\tconst url = new URL(value.trim());\n\t\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn url.origin;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction firstConfiguredOrigin(\n\tenv: Record<string, string | undefined>,\n): string | undefined {\n\tfor (const key of ATHENA_ENV_APP_URL_KEYS) {\n\t\tconst raw = env[key];\n\t\tif (typeof raw !== \"string\" || !raw.trim()) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst origin = originFromConfiguredUrl(raw);\n\t\tif (origin) {\n\t\t\treturn origin;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Resolve one immutable app identity at Auth / client init.\n */\nexport function resolveAthenaAppIdentity(\n\toptions: ResolveAthenaAppIdentityOptions = {},\n): AthenaAppIdentity | null {\n\tconst env = options.env ?? {};\n\tfor (const key of FORBIDDEN_IDENTITY_ENV_KEYS) {\n\t\tvoid env[key];\n\t}\n\n\tconst explicitUrl =\n\t\ttypeof options.app?.url === \"string\" ? options.app.url.trim() : \"\";\n\tlet origin: string | undefined;\n\tif (explicitUrl) {\n\t\torigin = originFromConfiguredUrl(explicitUrl);\n\t\tif (!origin) {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t\t\"createClient({ app: { url } }) must be an absolute http(s) URL.\",\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t} else {\n\t\torigin = firstConfiguredOrigin(env);\n\t}\n\n\tif (!origin) {\n\t\tif (options.required && options.environment === \"production\") {\n\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\",\n\t\t\t\t\"Passkeys require a trusted application origin (createClient app.url or APP_URL). Production does not default to localhost and never reads Host.\",\n\t\t\t\t\"auth\",\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tconst hostname = new URL(origin).hostname;\n\tconst name =\n\t\ttypeof options.app?.name === \"string\" && options.app.name.trim()\n\t\t\t? options.app.name.trim()\n\t\t\t: \"Athena\";\n\treturn Object.freeze({ hostname, name, origin });\n}\n","import { MigrationError } from \"./types.ts\";\n\n/**\n * Transaction-control forms that would terminate the runner's outer transaction\n * if executed inside migration SQL. Plain PL/pgSQL `BEGIN`/`END` blocks are\n * intentionally allowed.\n */\nconst TRANSACTION_CONTROL_RE =\n  /\\b(?:COMMIT(?:\\s+(?:WORK|TRANSACTION))?|ROLLBACK(?:\\s+(?:WORK|TRANSACTION))?|ABORT(?:\\s+(?:WORK|TRANSACTION))?|START\\s+TRANSACTION|BEGIN\\s+(?:WORK|TRANSACTION)|END\\s+TRANSACTION|PREPARE\\s+TRANSACTION)\\b/i;\n\n/**\n * Strips SQL comments and quoted literals so keyword scans avoid false positives\n * inside strings or comments. Not a full SQL parser.\n */\nexport function stripSqlCommentsAndLiterals(sql: string): string {\n  let output = \"\";\n  let index = 0;\n\n  while (index < sql.length) {\n    const ch = sql[index];\n    const next = sql[index + 1];\n\n    // Line comment\n    if (ch === \"-\" && next === \"-\") {\n      index += 2;\n      while (index < sql.length && sql[index] !== \"\\n\") {\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Block comment\n    if (ch === \"/\" && next === \"*\") {\n      index += 2;\n      while (index < sql.length) {\n        if (sql[index] === \"*\" && sql[index + 1] === \"/\") {\n          index += 2;\n          break;\n        }\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Single-quoted string ('' escapes)\n    if (ch === \"'\") {\n      index += 1;\n      while (index < sql.length) {\n        if (sql[index] === \"'\") {\n          if (sql[index + 1] === \"'\") {\n            index += 2;\n            continue;\n          }\n          index += 1;\n          break;\n        }\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Dollar-quoted string: $tag$ ... $tag$\n    if (ch === \"$\") {\n      const rest = sql.slice(index);\n      const tagMatch = rest.match(/^\\$([A-Za-z_][\\w]*)?\\$/);\n      if (tagMatch) {\n        const opener = tagMatch[0];\n        index += opener.length;\n        const closer = opener;\n        const closeAt = sql.indexOf(closer, index);\n        if (closeAt === -1) {\n          // Unterminated: drop remainder\n          break;\n        }\n        index = closeAt + closer.length;\n        output += \" \";\n        continue;\n      }\n    }\n\n    output += ch;\n    index += 1;\n  }\n\n  return output;\n}\n\n/**\n * Returns the matched transaction-control keyword if present in executable SQL.\n */\nexport function findTransactionControlStatement(sql: string): string | undefined {\n  const scanned = stripSqlCommentsAndLiterals(sql);\n  const match = TRANSACTION_CONTROL_RE.exec(scanned);\n  if (!match) {\n    return undefined;\n  }\n  return match[0]?.replace(/\\s+/g, \" \").toUpperCase();\n}\n\n/**\n * Fail closed when migration SQL could end the runner-owned transaction.\n */\nexport function assertMigrationSqlAllowsOuterTransaction(\n  sql: string,\n  filename?: string\n): void {\n  const found = findTransactionControlStatement(sql);\n  if (!found) {\n    return;\n  }\n\n  const where = filename ? ` in ${filename}` : \"\";\n  throw new MigrationError(\n    \"DISCOVERY\",\n    [\n      \"Migration error:\",\n      `Transaction control statement ${found} is not allowed${where}.`,\n      \"\",\n      \"athena-js migrate wraps each migration in its own transaction and writes\",\n      \"the ledger row in that same transaction. COMMIT/ROLLBACK/START TRANSACTION\",\n      \"(and similar) would break that atomicity.\",\n      \"\",\n      \"Remove transaction control from the migration SQL. PL/pgSQL BEGIN/END blocks\",\n      \"inside functions remain allowed.\",\n    ].join(\"\\n\")\n  );\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { checksumMigrationSql } from \"./checksum.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"./constants.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport { MigrationError, type MigrationFile } from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\n/**\n * Canonical filename pattern: `<digits>_<name>.sql`\n * Digits may be any positive length (0001, 01, 10001, …).\n * Gaps in version numbers are allowed; duplicates are not.\n */\nconst MIGRATION_FILENAME_RE = /^(\\d+)_(.+)\\.sql$/i;\n\nconst IGNORED_BASENAMES = new Set([\n  \".ds_store\",\n  \".gitkeep\",\n  \"readme\",\n  \"readme.md\",\n  \"readme.txt\",\n]);\n\nfunction shouldIgnoreEntry(filename: string): boolean {\n  const base = filename.toLowerCase();\n  if (base.startsWith(\".\")) {\n    return true;\n  }\n  if (IGNORED_BASENAMES.has(base)) {\n    return true;\n  }\n  // Non-SQL incidental files (docs, keep files) are ignored.\n  if (!base.endsWith(\".sql\")) {\n    return true;\n  }\n  return false;\n}\n\nfunction formatVersion(version: number, width: number): string {\n  return String(version).padStart(Math.max(width, 4), \"0\");\n}\n\n/**\n * Parses a migration basename into version + name.\n * Returns undefined when the name is not a migration SQL file pattern.\n */\nexport function parseMigrationFilename(\n  filename: string\n): { name: string; version: number } | undefined {\n  const match = MIGRATION_FILENAME_RE.exec(filename);\n  if (!match) {\n    return undefined;\n  }\n  const version = Number.parseInt(match[1] ?? \"\", 10);\n  const name = match[2] ?? \"\";\n  if (!Number.isFinite(version) || version < 0 || name.length === 0) {\n    return undefined;\n  }\n  return { name, version };\n}\n\nexport interface DiscoverMigrationsOptions {\n  /** Absolute or cwd-relative directory path. */\n  directory: string;\n  cwd?: string;\n}\n\n/**\n * Discovers and loads ordered migration files from a directory.\n *\n * Rules:\n * - Ignores incidental non-SQL files (README.md, .gitkeep, dotfiles).\n * - Rejects malformed `*.sql` filenames.\n * - Rejects duplicate versions.\n * - Orders by numeric version ascending (gaps allowed).\n */\nexport async function discoverMigrations(\n  options: DiscoverMigrationsOptions\n): Promise<MigrationFile[]> {\n  const cwd = options.cwd ?? process.cwd();\n  const absoluteDirectory = resolve(cwd, options.directory);\n\n  let directoryStat;\n  try {\n    directoryStat = await stat(absoluteDirectory);\n  } catch (error) {\n    const code =\n      typeof error === \"object\" &&\n      error !== null &&\n      \"code\" in error &&\n      typeof (error as { code?: unknown }).code === \"string\"\n        ? (error as { code: string }).code\n        : undefined;\n    if (code === \"ENOENT\") {\n      return [];\n    }\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Unable to read migration directory \"${options.directory}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n      { cause: error }\n    );\n  }\n\n  if (!directoryStat.isDirectory()) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Migration path \"${options.directory}\" is not a directory.`\n    );\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(absoluteDirectory);\n  } catch (error) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Unable to list migration directory \"${options.directory}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n      { cause: error }\n    );\n  }\n\n  const parsed: Array<{\n    filename: string;\n    name: string;\n    path: string;\n    version: number;\n  }> = [];\n  const malformedSql: string[] = [];\n\n  for (const filename of entries) {\n      // Ignore README/.gitkeep/dotfiles and other non-SQL incidental files.\n      if (shouldIgnoreEntry(filename)) {\n        continue;\n      }\n\n      // Remaining entries are *.sql (shouldIgnore filters non-sql).\n      const identity = parseMigrationFilename(filename);\n      if (!identity) {\n        malformedSql.push(join(options.directory, filename).replace(/\\\\/g, \"/\"));\n        continue;\n      }\n\n      parsed.push({\n        filename,\n        name: identity.name,\n        path: join(absoluteDirectory, filename),\n        version: identity.version,\n      });\n    }\n\n  if (malformedSql.length > 0) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      [\n        \"Migration error:\",\n        \"Malformed migration filename(s). Expected <digits>_<name>.sql:\",\n        ...malformedSql.map((path) => `  ${path}`),\n      ].join(\"\\n\")\n    );\n  }\n\n  const byVersion = new Map<number, string[]>();\n  for (const item of parsed) {\n    const list = byVersion.get(item.version) ?? [];\n    list.push(join(options.directory, item.filename).replace(/\\\\/g, \"/\"));\n    byVersion.set(item.version, list);\n  }\n\n  const duplicates = [...byVersion.entries()].filter(\n    ([, paths]) => paths.length > 1\n  );\n  if (duplicates.length > 0) {\n    const blocks = duplicates.map(([version, paths]) => {\n      const width = Math.max(\n        4,\n        ...paths.map((p) => {\n          const base = p.split(\"/\").pop() ?? \"\";\n          const m = /^(\\d+)_/.exec(base);\n          return m?.[1]?.length ?? 4;\n        })\n      );\n      return [\n        `Duplicate migration version ${formatVersion(version, width)}:`,\n        ...paths.map((path) => `  ${path}`),\n      ].join(\"\\n\");\n    });\n    throw new MigrationError(\n      \"DISCOVERY\",\n      [\"Migration error:\", ...blocks].join(\"\\n\")\n    );\n  }\n\n  parsed.sort((a, b) => a.version - b.version || a.filename.localeCompare(b.filename));\n\n  const migrations: MigrationFile[] = [];\n  for (const item of parsed) {\n    let sql: string;\n    try {\n      sql = await readFile(item.path, \"utf8\");\n    } catch (error) {\n      throw new MigrationError(\n        \"DISCOVERY\",\n        `Unable to read migration file \"${item.filename}\": ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n        { cause: error }\n      );\n    }\n\n    assertMigrationSqlAllowsOuterTransaction(sql, item.filename);\n\n        migrations.push({\n          checksum: checksumMigrationSql(sql),\n          filename: item.filename,\n          name: item.name,\n          path: item.path,\n          sql,\n          version: item.version,\n        });\n      }\n\n  return migrations;\n}\n","import type {\n  AppliedMigration,\n  MigrationConflict,\n  MigrationFile,\n  MigrationPlan,\n  MigrationPlanEntry,\n} from \"./types.ts\";\n\nexport interface PlanMigrationsInput {\n  applied: readonly AppliedMigration[];\n  local: readonly MigrationFile[];\n}\n\n/**\n * Pure planner: compares local migration files with ledger rows.\n *\n * - applied: local files present in ledger with matching checksum\n * - pending: local files not yet in ledger\n * - conflicts: checksum-mismatch or missing-local (DB ahead / deleted file)\n *\n * Duplicate applied rows for the same version are treated as integrity conflicts\n * when checksums disagree with local or with each other.\n */\nexport function planMigrations(input: PlanMigrationsInput): MigrationPlan {\n  const localByVersion = new Map<number, MigrationFile>();\n  for (const file of input.local) {\n    localByVersion.set(file.version, file);\n  }\n\n  const appliedByVersion = new Map<number, AppliedMigration[]>();\n  for (const row of input.applied) {\n    const list = appliedByVersion.get(row.version) ?? [];\n    list.push(row);\n    appliedByVersion.set(row.version, list);\n  }\n\n  const conflicts: MigrationConflict[] = [];\n  const appliedEntries: MigrationPlanEntry[] = [];\n  const pendingEntries: MigrationPlanEntry[] = [];\n\n  const versions = new Set<number>([\n    ...localByVersion.keys(),\n    ...appliedByVersion.keys(),\n  ]);\n  const orderedVersions = [...versions].sort((a, b) => a - b);\n\n  for (const version of orderedVersions) {\n    const local = localByVersion.get(version);\n    const appliedRows = appliedByVersion.get(version) ?? [];\n\n    if (appliedRows.length > 1) {\n      const checksums = new Set(appliedRows.map((row) => row.checksum));\n      if (checksums.size > 1 || (local && !checksums.has(local.checksum))) {\n        conflicts.push({\n          applied: appliedRows[0],\n          kind: \"checksum-mismatch\",\n          local,\n          version,\n        });\n        continue;\n      }\n    }\n\n    const applied = appliedRows[0];\n\n    if (applied && !local) {\n      conflicts.push({\n        applied,\n        kind: \"missing-local\",\n        version,\n      });\n      continue;\n    }\n\n    if (applied && local) {\n      if (applied.checksum !== local.checksum) {\n        conflicts.push({\n          applied,\n          kind: \"checksum-mismatch\",\n          local,\n          version,\n        });\n        continue;\n      }\n      if (applied.name !== local.name) {\n        conflicts.push({\n          applied,\n          kind: \"name-mismatch\",\n          local,\n          version,\n        });\n        continue;\n      }\n      appliedEntries.push({ migration: local, status: \"applied\" });\n      continue;\n    }\n\n    if (local) {\n      pendingEntries.push({ migration: local, status: \"pending\" });\n    }\n  }\n\n  const maxAppliedVersion = Math.max(\n    0,\n    ...input.applied.map((row) => row.version),\n    ...appliedEntries.map((entry) => entry.migration.version)\n  );\n  const historical = pendingEntries.filter(\n    (entry) => entry.migration.version < maxAppliedVersion\n  );\n  if (historical.length > 0 && maxAppliedVersion > 0) {\n    for (const entry of historical) {\n      conflicts.push({\n        kind: \"historical-insertion\",\n        local: entry.migration,\n        version: entry.migration.version,\n      });\n    }\n  }\n\n  const pending = pendingEntries.filter(\n    (entry) =>\n      !conflicts.some(\n        (conflict) =>\n          conflict.kind === \"historical-insertion\" &&\n          conflict.version === entry.migration.version\n      )\n  );\n\n  return {\n    applied: appliedEntries,\n    conflicts,\n    pending,\n  };\n}\n\nexport function planHasBlockingConflicts(plan: MigrationPlan): boolean {\n  return plan.conflicts.length > 0;\n}\n","/** Schema object identities and source locations for migration analysis. */\n\n/** Shape of serialized `MigrationAnalysis` (fields, kinds), not analyzer semantics. */\nexport const ANALYSIS_IR_VERSION = 1;\n/**\n * Name-resolution / dependency-extraction algorithm. Bump when query-deps,\n * CTE scope, function search_path, or equivalent verifier inputs change.\n */\nexport const ANALYZER_SEMANTICS_VERSION = 3;\nexport const ANALYZER_ID = `athena-migration-analyzer@${ANALYZER_SEMANTICS_VERSION}`;\nexport const PARSER_ID = \"pgsql-parser@18.2.6\";\n\nexport interface SqlPosition {\n  column: number;\n  line: number;\n}\n\nexport interface SqlSourceLocation {\n  end: SqlPosition;\n  filename: string;\n  start: SqlPosition;\n}\n\nexport type SchemaObjectKind =\n  | \"schema\"\n  | \"table\"\n  | \"column\"\n  | \"function\"\n  | \"procedure\"\n  | \"type\"\n  | \"view\"\n  | \"materialized_view\"\n  | \"sequence\"\n  | \"constraint\"\n  | \"index\"\n  | \"trigger\"\n  | \"extension\"\n  | \"policy\"\n  | \"domain\"\n  | \"enum\";\n\nexport interface SchemaRef {\n  kind: \"schema\";\n  name: string;\n}\n\nexport interface TableRef {\n  kind: \"table\";\n  name: string;\n  schema: string;\n}\n\nexport interface ColumnRef {\n  kind: \"column\";\n  name: string;\n  schema: string;\n  table: string;\n}\n\nexport interface FunctionRef {\n  identityArguments?: string[];\n  kind: \"function\" | \"procedure\";\n  name: string;\n  schema: string;\n}\n\nexport interface TypeRef {\n  kind: \"type\" | \"domain\" | \"enum\";\n  name: string;\n  schema: string;\n}\n\nexport interface ViewRef {\n  kind: \"view\" | \"materialized_view\";\n  name: string;\n  schema: string;\n}\n\nexport interface SequenceRef {\n  kind: \"sequence\";\n  name: string;\n  schema: string;\n}\n\nexport interface ConstraintRef {\n  kind: \"constraint\";\n  name: string;\n  schema: string;\n  table: string;\n}\n\nexport interface IndexRef {\n  kind: \"index\";\n  name: string;\n  schema: string;\n  table?: string;\n}\n\nexport interface TriggerRef {\n  kind: \"trigger\";\n  name: string;\n  schema: string;\n  table: string;\n}\n\nexport interface ExtensionRef {\n  kind: \"extension\";\n  name: string;\n}\n\nexport interface PolicyRef {\n  kind: \"policy\";\n  name: string;\n  schema: string;\n  table: string;\n}\n\nexport type SchemaObjectRef =\n  | SchemaRef\n  | TableRef\n  | ColumnRef\n  | FunctionRef\n  | TypeRef\n  | ViewRef\n  | SequenceRef\n  | ConstraintRef\n  | IndexRef\n  | TriggerRef\n  | ExtensionRef\n  | PolicyRef;\n\nexport function objectKey(ref: SchemaObjectRef): string {\n  switch (ref.kind) {\n    case \"schema\":\n    case \"extension\":\n      return `${ref.kind}:${ref.name}`;\n    case \"column\":\n    case \"constraint\":\n    case \"trigger\":\n    case \"policy\":\n      return `${ref.kind}:${ref.schema}.${ref.table}.${ref.name}`;\n    case \"index\":\n      return ref.table\n        ? `${ref.kind}:${ref.schema}.${ref.table}.${ref.name}`\n        : `${ref.kind}:${ref.schema}.${ref.name}`;\n    case \"function\":\n    case \"procedure\": {\n      const args = ref.identityArguments?.length\n        ? `(${ref.identityArguments.join(\",\")})`\n        : \"\";\n      if (!ref.schema) {\n        return `${ref.kind}:${ref.name}${args}`;\n      }\n      return `${ref.kind}:${ref.schema}.${ref.name}${args}`;\n    }\n    default:\n      if (!(\"schema\" in ref) || !ref.schema) {\n        return `${ref.kind}:${ref.name}`;\n      }\n      return `${ref.kind}:${ref.schema}.${ref.name}`;\n  }\n}\n\nexport function formatObjectRef(ref: SchemaObjectRef): string {\n  switch (ref.kind) {\n    case \"schema\":\n    case \"extension\":\n      return ref.name;\n    case \"column\":\n      return `${ref.schema}.${ref.table}.${ref.name}`;\n    case \"constraint\":\n    case \"trigger\":\n    case \"policy\":\n      return `${ref.schema}.${ref.table}.${ref.name}`;\n    case \"index\":\n      return ref.table\n        ? `${ref.schema}.${ref.table}.${ref.name}`\n        : `${ref.schema}.${ref.name}`;\n    case \"function\":\n    case \"procedure\": {\n      const args = ref.identityArguments?.length\n        ? `(${ref.identityArguments.join(\",\")})`\n        : \"\";\n      if (!ref.schema) {\n        return `${ref.name}${args}`;\n      }\n      return `${ref.schema}.${ref.name}${args}`;\n    }\n    default:\n      if (!(\"schema\" in ref) || !ref.schema) {\n        return ref.name;\n      }\n      return `${ref.schema}.${ref.name}`;\n  }\n}\n\nexport function offsetToPosition(sql: string, offset: number): SqlPosition {\n  let line = 1;\n  let column = 1;\n  const end = Math.max(0, Math.min(offset, sql.length));\n  for (let index = 0; index < end; index += 1) {\n    if (sql[index] === \"\\n\") {\n      line += 1;\n      column = 1;\n    } else {\n      column += 1;\n    }\n  }\n  return { column, line };\n}\n\nexport function locationFromOffset(\n  filename: string,\n  sql: string,\n  startOffset: number,\n  length = 0\n): SqlSourceLocation {\n  return {\n    filename,\n    start: offsetToPosition(sql, startOffset),\n    end: offsetToPosition(sql, startOffset + Math.max(0, length)),\n  };\n}\n","import { formatObjectRef, objectKey, type SchemaObjectRef } from \"./ast.ts\";\nimport type { MigrationAnalysis } from \"./semantic-ir.ts\";\n\nexport interface ProjectedTable {\n  columns: Set<string>;\n  indexes: Set<string>;\n  name: string;\n  schema: string;\n}\n\nexport interface ProjectedSchema {\n  extensions: Set<string>;\n  functions: Set<string>;\n  schemas: Set<string>;\n  sequences: Set<string>;\n  tables: Map<string, ProjectedTable>;\n  types: Set<string>;\n  views: Set<string>;\n}\n\nexport const PHYSICAL_CATALOG_CAPABILITIES = {\n  columns: true,\n  constraints: false,\n  extensions: true,\n  indexes: false,\n  policies: false,\n  relations: true,\n  routines: true,\n  schemas: true,\n  sequences: true,\n  triggers: false,\n  types: true,\n} as const;\n\nexport function emptyProjectedSchema(): ProjectedSchema {\n  return {\n    extensions: new Set(),\n    functions: new Set(),\n    schemas: new Set([\"public\", \"pg_catalog\"]),\n    sequences: new Set(),\n    tables: new Map(),\n    types: new Set(),\n    views: new Set(),\n  };\n}\n\nexport function mergeProjectedSchemas(\n  base: ProjectedSchema,\n  extra: ProjectedSchema\n): ProjectedSchema {\n  const merged = cloneProjectedSchema(base);\n  for (const name of extra.schemas) {\n    merged.schemas.add(name);\n  }\n  for (const name of extra.extensions) {\n    merged.extensions.add(name);\n  }\n  for (const name of extra.functions) {\n    merged.functions.add(name);\n  }\n  for (const name of extra.sequences) {\n    merged.sequences.add(name);\n  }\n  for (const name of extra.types) {\n    merged.types.add(name);\n  }\n  for (const name of extra.views) {\n    merged.views.add(name);\n  }\n  for (const [key, table] of extra.tables) {\n    const existing = merged.tables.get(key);\n    if (!existing) {\n      merged.tables.set(key, {\n        columns: new Set(table.columns),\n        indexes: new Set(table.indexes),\n        name: table.name,\n        schema: table.schema,\n      });\n      continue;\n    }\n    for (const column of table.columns) {\n      existing.columns.add(column);\n    }\n    for (const index of table.indexes) {\n      existing.indexes.add(index);\n    }\n  }\n  return merged;\n}\n\nexport function cloneProjectedSchema(schema: ProjectedSchema): ProjectedSchema {\n  const tables = new Map<string, ProjectedTable>();\n  for (const [key, table] of schema.tables) {\n    tables.set(key, {\n      columns: new Set(table.columns),\n      indexes: new Set(table.indexes),\n      name: table.name,\n      schema: table.schema,\n    });\n  }\n  return {\n    extensions: new Set(schema.extensions),\n    functions: new Set(schema.functions),\n    schemas: new Set(schema.schemas),\n    sequences: new Set(schema.sequences),\n    tables,\n    types: new Set(schema.types),\n    views: new Set(schema.views),\n  };\n}\n\nfunction tableKey(schema: string, name: string): string {\n  return `${schema}.${name}`;\n}\n\nfunction functionKeys(object: Extract<SchemaObjectRef, { kind: \"function\" | \"procedure\" }>): string[] {\n  const base = object.schema\n    ? `${object.schema}.${object.name}`\n    : object.name;\n  if (object.identityArguments && object.identityArguments.length > 0) {\n    return [`${base}(${object.identityArguments.join(\",\")})`, base];\n  }\n  return [base];\n}\n\nfunction ensureTable(schema: ProjectedSchema, schemaName: string, name: string): ProjectedTable {\n  const key = tableKey(schemaName, name);\n  const existing = schema.tables.get(key);\n  if (existing) {\n    return existing;\n  }\n  const created: ProjectedTable = {\n    columns: new Set(),\n    indexes: new Set(),\n    name,\n    schema: schemaName,\n  };\n  schema.tables.set(key, created);\n  schema.schemas.add(schemaName);\n  return created;\n}\n\nfunction applyCreate(schema: ProjectedSchema, object: SchemaObjectRef): void {\n  switch (object.kind) {\n    case \"schema\":\n      schema.schemas.add(object.name);\n      return;\n    case \"extension\":\n      schema.extensions.add(object.name);\n      return;\n    case \"table\":\n      ensureTable(schema, object.schema, object.name);\n      return;\n    case \"column\":\n      ensureTable(schema, object.schema, object.table).columns.add(object.name);\n      return;\n    case \"index\":\n      if (object.table) {\n        ensureTable(schema, object.schema, object.table).indexes.add(object.name);\n      }\n      return;\n    case \"function\":\n    case \"procedure\": {\n      const keys = functionKeys(object);\n      for (const key of keys) {\n        schema.functions.add(key);\n      }\n      return;\n    }\n    case \"sequence\":\n      schema.sequences.add(tableKey(object.schema, object.name));\n      schema.schemas.add(object.schema);\n      return;\n    case \"type\":\n    case \"domain\":\n    case \"enum\":\n      schema.types.add(`${object.schema}.${object.name}`);\n      return;\n    case \"view\":\n    case \"materialized_view\":\n      schema.views.add(`${object.schema}.${object.name}`);\n      return;\n    default:\n      return;\n  }\n}\n\nfunction applyDrop(schema: ProjectedSchema, object: SchemaObjectRef): void {\n  switch (object.kind) {\n    case \"schema\":\n      schema.schemas.delete(object.name);\n      for (const key of [...schema.tables.keys()]) {\n        if (key.startsWith(`${object.name}.`)) {\n          schema.tables.delete(key);\n        }\n      }\n      return;\n    case \"table\":\n      schema.tables.delete(tableKey(object.schema, object.name));\n      return;\n    case \"column\":\n      schema.tables.get(tableKey(object.schema, object.table))?.columns.delete(object.name);\n      return;\n    case \"index\":\n      if (object.table) {\n        schema.tables.get(tableKey(object.schema, object.table))?.indexes.delete(object.name);\n      }\n      return;\n    case \"function\":\n    case \"procedure\": {\n      for (const key of functionKeys(object)) {\n        schema.functions.delete(key);\n      }\n      return;\n    }\n    case \"sequence\":\n      schema.sequences.delete(tableKey(object.schema, object.name));\n      return;\n    case \"type\":\n    case \"domain\":\n    case \"enum\":\n      schema.types.delete(`${object.schema}.${object.name}`);\n      return;\n    case \"view\":\n    case \"materialized_view\":\n      schema.views.delete(`${object.schema}.${object.name}`);\n      return;\n    default:\n      return;\n  }\n}\n\nexport function applyEffects(\n  schema: ProjectedSchema,\n  effects: MigrationAnalysis[\"effects\"]\n): ProjectedSchema {\n  const next = cloneProjectedSchema(schema);\n  for (const object of effects.creates) {\n    applyCreate(next, object);\n  }\n  for (const mutation of effects.modifies) {\n    if (mutation.kind === \"add_column\") {\n      applyCreate(next, mutation.object);\n    }\n    if (mutation.kind === \"drop_column\") {\n      applyDrop(next, mutation.object);\n    }\n  }\n  for (const object of effects.drops) {\n    applyDrop(next, object);\n  }\n  return next;\n}\n\nexport function applyAnalysis(\n  schema: ProjectedSchema,\n  analysis: MigrationAnalysis\n): ProjectedSchema {\n  return applyEffects(schema, analysis.effects);\n}\n\nexport function schemaHas(schema: ProjectedSchema, object: SchemaObjectRef): boolean {\n  switch (object.kind) {\n    case \"schema\":\n      return schema.schemas.has(object.name);\n    case \"extension\":\n      return schema.extensions.has(object.name);\n    case \"index\": {\n      if (!object.table) {\n        return false;\n      }\n      return Boolean(\n        schema.tables.get(tableKey(object.schema, object.table))?.indexes.has(object.name)\n      );\n    }\n    case \"function\":\n    case \"procedure\": {\n      if (\n        object.schema === \"pg_catalog\" ||\n        object.schema === \"information_schema\"\n      ) {\n        return true;\n      }\n      if (!object.schema) {\n        const suffix = `.${object.name}`;\n        for (const key of schema.functions) {\n          if (key === object.name || key.endsWith(suffix) || key.startsWith(`${object.name}(`)) {\n            return true;\n          }\n        }\n        return true;\n      }\n      return functionKeys(object).some((key) => schema.functions.has(key));\n    }\n    case \"sequence\":\n      if (!object.schema) {\n        const suffix = `.${object.name}`;\n        for (const key of schema.sequences) {\n          if (key === object.name || key.endsWith(suffix)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      return schema.sequences.has(tableKey(object.schema, object.name));\n    case \"table\":\n      if (!object.schema) {\n        for (const table of schema.tables.values()) {\n          if (table.name === object.name) {\n            return true;\n          }\n        }\n        return false;\n      }\n      return schema.tables.has(tableKey(object.schema, object.name));\n    case \"column\": {\n      if (!object.schema) {\n        for (const table of schema.tables.values()) {\n          if (table.name === object.table && table.columns.has(object.name)) {\n            return true;\n          }\n        }\n        return false;\n      }\n      const table = schema.tables.get(tableKey(object.schema, object.table));\n      return Boolean(table?.columns.has(object.name));\n    }\n    case \"type\":\n    case \"domain\":\n    case \"enum\":\n      return schema.types.has(`${object.schema}.${object.name}`);\n    case \"view\":\n    case \"materialized_view\":\n      return schema.views.has(`${object.schema}.${object.name}`) ||\n        schema.tables.has(tableKey(object.schema, object.name));\n    default:\n      return true;\n  }\n}\n\nexport function fingerprintProjectedSchema(schema: ProjectedSchema): string {\n  const tables = [...schema.tables.values()]\n    .map((table) => {\n      const columns = [...table.columns].sort().join(\",\");\n      const indexes = [...table.indexes].sort().join(\",\");\n      return `${table.schema}.${table.name}{${columns}}[${indexes}]`;\n    })\n    .sort();\n  return [\n    `schemas:${[...schema.schemas].sort().join(\",\")}`,\n    `tables:${tables.join(\";\")}`,\n    `sequences:${[...schema.sequences].sort().join(\",\")}`,\n    `functions:${[...schema.functions].sort().join(\",\")}`,\n    `views:${[...schema.views].sort().join(\",\")}`,\n  ].join(\"|\");\n}\n\nexport function catalogToProjected(objects: readonly SchemaObjectRef[]): ProjectedSchema {\n  const schema = emptyProjectedSchema();\n  for (const object of objects) {\n    applyCreate(schema, object);\n  }\n  return schema;\n}\n\nexport function missingObjects(\n  expected: ProjectedSchema,\n  actual: ProjectedSchema\n): SchemaObjectRef[] {\n  const missing: SchemaObjectRef[] = [];\n  for (const name of expected.schemas) {\n    if (!actual.schemas.has(name) && name !== \"pg_catalog\") {\n      missing.push({ kind: \"schema\", name });\n    }\n  }\n  for (const table of expected.tables.values()) {\n    const key = tableKey(table.schema, table.name);\n    const live = actual.tables.get(key);\n    if (!live) {\n      missing.push({ kind: \"table\", name: table.name, schema: table.schema });\n      continue;\n    }\n    for (const column of table.columns) {\n      if (!live.columns.has(column)) {\n        missing.push({\n          kind: \"column\",\n          name: column,\n          schema: table.schema,\n          table: table.name,\n        });\n      }\n    }\n  }\n  for (const fn of expected.functions) {\n    if (!actual.functions.has(fn)) {\n      const [schema, name] = fn.split(\".\");\n      missing.push({ kind: \"function\", name, schema });\n    }\n  }\n  return missing;\n}\n\nexport { formatObjectRef, objectKey };\n","import type { QueryResultRow } from \"pg\";\nimport type { AthenaPostgresClient } from \"../../postgres/driver.ts\";\nimport type { SchemaObjectRef } from \"./ast.ts\";\nimport { catalogToProjected, type ProjectedSchema } from \"./projected-schema.ts\";\n\nexport interface PhysicalCatalog {\n  objects: SchemaObjectRef[];\n  schema: ProjectedSchema;\n}\n\ninterface RelRow extends QueryResultRow {\n  nspname: string;\n  relkind: string;\n  relname: string;\n}\n\ninterface ColRow extends QueryResultRow {\n  attname: string;\n  nspname: string;\n  relname: string;\n}\n\ninterface FnRow extends QueryResultRow {\n  identity_args: string | null;\n  nspname: string;\n  proname: string;\n}\n\ninterface TypeRow extends QueryResultRow {\n  nspname: string;\n  typname: string;\n}\n\ninterface ExtRow extends QueryResultRow {\n  extname: string;\n}\n\nconst CATALOG_SQL = `\nSELECT n.nspname, c.relname, c.relkind\nFROM pg_class c\nJOIN pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')\n  AND c.relkind IN ('r', 'v', 'm', 'S')\n`.trim();\n\nconst COLUMN_SQL = `\nSELECT n.nspname, c.relname, a.attname\nFROM pg_attribute a\nJOIN pg_class c ON c.oid = a.attrelid\nJOIN pg_namespace n ON n.oid = c.relnamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')\n  AND c.relkind IN ('r', 'v', 'm')\n  AND a.attnum > 0\n  AND NOT a.attisdropped\n`.trim();\n\nconst FUNCTION_SQL = `\nSELECT n.nspname, p.proname, pg_get_function_identity_arguments(p.oid) AS identity_args\nFROM pg_proc p\nJOIN pg_namespace n ON n.oid = p.pronamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema')\n`.trim();\n\nconst TYPE_SQL = `\nSELECT n.nspname, t.typname\nFROM pg_type t\nJOIN pg_namespace n ON n.oid = t.typnamespace\nWHERE n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')\n  AND t.typtype IN ('e', 'd', 'c')\n`.trim();\n\nconst EXTENSION_SQL = `\nSELECT extname\nFROM pg_extension\n`.trim();\n\nconst SCHEMA_SQL = `\nSELECT nspname\nFROM pg_namespace\nWHERE nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')\n  AND nspname NOT LIKE 'pg_toast%'\n  AND nspname NOT LIKE 'pg_temp%'\n`.trim();\n\nexport async function inspectPhysicalCatalog(\n  client: AthenaPostgresClient\n): Promise<PhysicalCatalog> {\n  const objects: SchemaObjectRef[] = [];\n  const schemas = await client.query<{ nspname: string } & QueryResultRow>(SCHEMA_SQL);\n  for (const row of schemas.rows) {\n    objects.push({ kind: \"schema\", name: row.nspname });\n  }\n  const rels = await client.query<RelRow>(CATALOG_SQL);\n  for (const row of rels.rows) {\n    if (row.relkind === \"S\") {\n      objects.push({ kind: \"sequence\", name: row.relname, schema: row.nspname });\n      continue;\n    }\n    if (row.relkind === \"v\") {\n      objects.push({ kind: \"view\", name: row.relname, schema: row.nspname });\n      continue;\n    }\n    if (row.relkind === \"m\") {\n      objects.push({\n        kind: \"materialized_view\",\n        name: row.relname,\n        schema: row.nspname,\n      });\n      continue;\n    }\n    objects.push({ kind: \"table\", name: row.relname, schema: row.nspname });\n  }\n  const columns = await client.query<ColRow>(COLUMN_SQL);\n  for (const row of columns.rows) {\n    objects.push({\n      kind: \"column\",\n      name: row.attname,\n      schema: row.nspname,\n      table: row.relname,\n    });\n  }\n  const functions = await client.query<FnRow>(FUNCTION_SQL);\n  for (const row of functions.rows) {\n    const identityArguments = row.identity_args\n      ? row.identity_args\n          .split(\",\")\n          .map((part) => part.trim())\n          .filter((part) => part.length > 0)\n      : undefined;\n    objects.push({\n      kind: \"function\",\n      name: row.proname,\n      schema: row.nspname,\n      ...(identityArguments && identityArguments.length > 0\n        ? { identityArguments }\n        : {}),\n    });\n  }\n  const types = await client.query<TypeRow>(TYPE_SQL);\n  for (const row of types.rows) {\n    objects.push({ kind: \"type\", name: row.typname, schema: row.nspname });\n  }\n  const extensions = await client.query<ExtRow>(EXTENSION_SQL);\n  for (const row of extensions.rows) {\n    objects.push({ kind: \"extension\", name: row.extname });\n  }\n  return { objects, schema: catalogToProjected(objects) };\n}\n\nexport function emptyPhysicalCatalog(): PhysicalCatalog {\n  return { objects: [], schema: catalogToProjected([]) };\n}\n","import {\n  type AthenaPostgresClient,\n  type AthenaPostgresPool,\n  createPostgresPool,\n} from \"../postgres/driver.ts\";\nimport type { MigrationBackend } from \"./backend.ts\";\nimport {\n  type PhysicalCatalog,\n  inspectPhysicalCatalog,\n} from \"./analysis/catalog.ts\";\nimport { fingerprintProjectedSchema } from \"./analysis/projected-schema.ts\";\nimport { sha256HexUtf8 } from \"../node-crypto.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport type { ArchivedMigrationSource } from \"./reconciliation/types.ts\";\nimport {\n  type AppliedMigration,\n  type AppliedMigrationResult,\n  type MigrationBackendContext,\n  MigrationError,\n  type MigrationFile,\n} from \"./types.ts\";\n\n/**\n * Stable session advisory-lock key pair for Athena JS **application** migrations.\n * Derived from ASCII \"ATHA\" / \"MIGS\" — not a secret; must remain fixed.\n * Does not serialize Embedded Auth migrations; those use\n * `ATHENA_AUTH_MIGRATION_ADVISORY_LOCK` on the Auth database connection.\n */\nexport const ATHENA_MIGRATION_LOCK_KEY1 = 0x41_54_48_41; // ATHA\nexport const ATHENA_MIGRATION_LOCK_KEY2 = 0x4d_49_47_53; // MIGS\n\nconst LEDGER_BOOTSTRAP_SQL = `\nCREATE SCHEMA IF NOT EXISTS athena;\n\nCREATE TABLE IF NOT EXISTS athena.schema_migrations (\n  version BIGINT PRIMARY KEY,\n  name TEXT NOT NULL,\n  checksum TEXT NOT NULL,\n  applied_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n  execution_ms BIGINT NOT NULL\n);\n\nALTER TABLE athena.schema_migrations\n  ADD COLUMN IF NOT EXISTS source_commit text,\n  ADD COLUMN IF NOT EXISTS source_path text,\n  ADD COLUMN IF NOT EXISTS source_blob_sha text,\n  ADD COLUMN IF NOT EXISTS source_branch text,\n  ADD COLUMN IF NOT EXISTS source_repository text,\n  ADD COLUMN IF NOT EXISTS runner_version text,\n  ADD COLUMN IF NOT EXISTS runner_package_version text,\n  ADD COLUMN IF NOT EXISTS execution_id uuid,\n  ADD COLUMN IF NOT EXISTS source_dirty boolean,\n  ADD COLUMN IF NOT EXISTS pre_schema_fingerprint text,\n  ADD COLUMN IF NOT EXISTS post_schema_fingerprint text;\n\nCREATE TABLE IF NOT EXISTS athena.schema_migration_sources (\n  version BIGINT NOT NULL,\n  checksum TEXT NOT NULL,\n  sql TEXT NOT NULL,\n  source_commit text,\n  source_blob_sha text,\n  source_path text,\n  execution_id uuid,\n  archived_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n  PRIMARY KEY (version, checksum)\n);\n\nCREATE TABLE IF NOT EXISTS athena.schema_migration_reconciliations (\n  id uuid PRIMARY KEY,\n  version BIGINT NOT NULL,\n  classification text NOT NULL,\n  confidence text NOT NULL,\n  old_checksum text,\n  new_checksum text,\n  action text NOT NULL,\n  evidence jsonb NOT NULL DEFAULT '{}'::jsonb,\n  repository_commit text,\n  physical_fingerprint text,\n  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n  runner_version text\n);\n`.trim();\n\nconst LIST_APPLIED_SQL = `\nSELECT version, name, checksum, applied_at, execution_ms\nFROM athena.schema_migrations\nORDER BY version ASC\n`.trim();\n\nconst LIST_APPLIED_SQL_RICH = `\nSELECT version, name, checksum, applied_at, execution_ms,\n  source_commit, source_blob_sha, source_dirty, post_schema_fingerprint, execution_id\nFROM athena.schema_migrations\nORDER BY version ASC\n`.trim();\n\ninterface LedgerRow {\n  applied_at: Date | string;\n  checksum: string;\n  execution_id?: string | null;\n  execution_ms: string | number | bigint;\n  name: string;\n  post_schema_fingerprint?: string | null;\n  source_blob_sha?: string | null;\n  source_commit?: string | null;\n  source_dirty?: boolean | null;\n  version: string | number | bigint;\n}\n\nfunction toNumber(value: string | number | bigint): number {\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    return Number(value);\n  }\n  return Number.parseInt(value, 10);\n}\n\nfunction toDate(value: Date | string): Date {\n  if (value instanceof Date) {\n    return value;\n  }\n  return new Date(value);\n}\n\nfunction mapLedgerRow(row: LedgerRow): AppliedMigration {\n  return {\n    appliedAt: toDate(row.applied_at),\n    checksum: row.checksum,\n    executionId: row.execution_id ?? undefined,\n    executionMs: toNumber(row.execution_ms),\n    name: row.name,\n    sourceBlobSha: row.source_blob_sha ?? undefined,\n    sourceCommit: row.source_commit ?? undefined,\n    sourceDirty: row.source_dirty ?? undefined,\n    version: toNumber(row.version),\n  };\n}\n\nfunction isUndefinedColumnError(error: unknown): boolean {\n  if (error && typeof error === \"object\" && \"code\" in error) {\n    return String((error as { code?: unknown }).code) === \"42703\";\n  }\n  return /column .* does not exist/i.test(\n    error instanceof Error ? error.message : String(error)\n  );\n}\n\nfunction catalogFingerprint(catalog: PhysicalCatalog): string {\n  return sha256HexUtf8(fingerprintProjectedSchema(catalog.schema));\n}\n\nfunction sanitizePgMessage(message: string): string {\n  // Strip common connection-string shapes if a driver ever embeds them.\n  return message\n    .replace(/postgres(?:ql)?:\\/\\/[^\\s'\"]+/gi, \"[redacted-connection]\")\n    .replace(/password\\s*=\\s*[^;\\s]+/gi, \"password=[redacted]\");\n}\n\n/** True when athena.schema_migrations (or schema athena) is not present yet. */\nfunction isMissingLedgerError(error: unknown): boolean {\n  if (error && typeof error === \"object\") {\n    const code =\n      \"code\" in error && (error as { code?: unknown }).code != null\n        ? String((error as { code?: unknown }).code)\n        : \"\";\n    // 42P01 undefined_table, 3F000 invalid_schema_name\n    if (code === \"42P01\" || code === \"3F000\") {\n      return true;\n    }\n  }\n\n  const message = error instanceof Error ? error.message : String(error);\n  return (\n    /relation [\"']?athena\\.schema_migrations[\"']? does not exist/i.test(\n      message\n    ) ||\n    /relation [\"']?schema_migrations[\"']? does not exist/i.test(message) ||\n    /schema [\"']?athena[\"']? does not exist/i.test(message)\n  );\n}\n\nexport interface PostgresMigrationBackendOptions extends MigrationBackendContext {\n  pool?: AthenaPostgresPool;\n}\n\n/**\n * Applies `provider.database` (or PGDATABASE fallback) onto the connection URL\n * path so the pool targets the configured database even when the URL omits it\n * or names a different database.\n *\n * Does not log or return secrets beyond rewriting the pathname.\n */\nexport function applyDatabaseToConnectionString(\n  connectionString: string,\n  database?: string\n): string {\n  const trimmed = typeof database === \"string\" ? database.trim() : \"\";\n  if (trimmed.length === 0) {\n    return connectionString;\n  }\n\n  try {\n    const usesPostgresql = /^postgresql:/i.test(connectionString);\n    const normalized = connectionString.replace(/^postgresql:/i, \"postgres:\");\n    const url = new URL(normalized);\n    if (url.protocol !== \"postgres:\") {\n      return connectionString;\n    }\n\n    const current = decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n    if (current === trimmed) {\n      return connectionString;\n    }\n\n    url.pathname = `/${encodeURIComponent(trimmed)}`;\n    const rewritten = url.toString();\n    return usesPostgresql\n      ? rewritten.replace(/^postgres:/i, \"postgresql:\")\n      : rewritten;\n  } catch {\n    return connectionString;\n  }\n}\n\n/**\n * Pool options for migration backends: connection string plus explicit database\n * override so node-pg cannot silently ignore a configured database name.\n */\nexport function buildPostgresMigrationPoolOptions(\n  connectionString: string,\n  database?: string\n): {\n  connectionString: string;\n  poolConfig: { database?: string };\n} {\n  const trimmed = typeof database === \"string\" ? database.trim() : \"\";\n  const resolvedConnectionString = applyDatabaseToConnectionString(\n    connectionString,\n    trimmed || undefined\n  );\n  return {\n    connectionString: resolvedConnectionString,\n    poolConfig: trimmed.length > 0 ? { database: trimmed } : {},\n  };\n}\n\n/**\n * PostgreSQL direct-mode migration backend.\n *\n * - Idempotent ledger bootstrap under schema `athena`\n * - Session advisory lock held for the full run\n * - One transaction per migration (SQL + ledger insert)\n */\nexport class PostgresMigrationBackend implements MigrationBackend {\n  readonly kind = \"postgres\";\n\n  private readonly connectionString: string;\n  private readonly database?: string;\n  private pool: AthenaPostgresPool | undefined;\n  private ownsPool: boolean;\n  private client: AthenaPostgresClient | undefined;\n  private lockHeld = false;\n\n  constructor(options: PostgresMigrationBackendOptions) {\n    this.connectionString = options.connectionString;\n    this.database =\n      typeof options.database === \"string\" && options.database.trim().length > 0\n        ? options.database.trim()\n        : undefined;\n    this.pool = options.pool;\n    this.ownsPool = !options.pool;\n  }\n\n  private async ensureClient(): Promise<AthenaPostgresClient> {\n    if (this.client) {\n      return this.client;\n    }\n    if (!this.pool) {\n      const { connectionString, poolConfig } = buildPostgresMigrationPoolOptions(\n        this.connectionString,\n        this.database\n      );\n      this.pool = await createPostgresPool(connectionString, poolConfig);\n      this.ownsPool = true;\n    }\n    this.client = await this.pool.connect();\n    return this.client;\n  }\n\n  async acquireLock(): Promise<void> {\n    const client = await this.ensureClient();\n    try {\n      await client.query(\"SELECT pg_advisory_lock($1, $2)\", [\n        ATHENA_MIGRATION_LOCK_KEY1,\n        ATHENA_MIGRATION_LOCK_KEY2,\n      ]);\n      this.lockHeld = true;\n    } catch (error) {\n      throw new MigrationError(\n        \"LOCK\",\n        `Unable to acquire migration advisory lock: ${sanitizePgMessage(\n          error instanceof Error ? error.message : String(error)\n        )}`,\n        { cause: error }\n      );\n    }\n  }\n\n  async releaseLock(): Promise<void> {\n    if (!(this.client && this.lockHeld)) {\n      return;\n    }\n    try {\n      await this.client.query(\"SELECT pg_advisory_unlock($1, $2)\", [\n        ATHENA_MIGRATION_LOCK_KEY1,\n        ATHENA_MIGRATION_LOCK_KEY2,\n      ]);\n    } catch {\n      // Session end / pool release will drop session-level locks.\n    } finally {\n      this.lockHeld = false;\n    }\n  }\n\n  async ensureLedger(): Promise<void> {\n    const client = await this.ensureClient();\n    try {\n      await client.query(LEDGER_BOOTSTRAP_SQL);\n    } catch (error) {\n      throw new MigrationError(\n        \"LEDGER\",\n        `Unable to create migration ledger (athena.schema_migrations): ${sanitizePgMessage(\n          error instanceof Error ? error.message : String(error)\n        )}`,\n        { cause: error }\n      );\n    }\n  }\n\n  async listAppliedMigrations(): Promise<AppliedMigration[]> {\n    const client = await this.ensureClient();\n    try {\n      try {\n        const result = await client.query<LedgerRow>(LIST_APPLIED_SQL_RICH);\n        return result.rows.map(mapLedgerRow);\n      } catch (error) {\n        if (!isUndefinedColumnError(error)) {\n          throw error;\n        }\n        const result = await client.query<LedgerRow>(LIST_APPLIED_SQL);\n        return result.rows.map(mapLedgerRow);\n      }\n    } catch (error) {\n        // status / plan / dry-run may run before the ledger exists; treat as empty.\n        if (isMissingLedgerError(error)) {\n          return [];\n        }\n        throw new MigrationError(\n          \"LEDGER\",\n          `Unable to read migration ledger: ${sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          )}`,\n          { cause: error }\n        );\n      }\n    }\n\n  async inspectCatalog(): Promise<PhysicalCatalog> {\n    const client = await this.ensureClient();\n    return inspectPhysicalCatalog(client);\n  }\n\n  async applyMigration(\n    migration: MigrationFile\n  ): Promise<AppliedMigrationResult> {\n      // Fail closed before opening a transaction if SQL could terminate it.\n      assertMigrationSqlAllowsOuterTransaction(migration.sql, migration.filename);\n\n      const client = await this.ensureClient();\n      const started = Date.now();\n\n      try {\n        await client.query(\"BEGIN\");\n      } catch (error) {\n        throw new MigrationError(\n          \"EXECUTION\",\n          `Failed to begin transaction for ${migration.filename}: ${sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          )}`,\n          { cause: error }\n        );\n      }\n\n      try {\n        let preFingerprint: string | null = null;\n        try {\n          preFingerprint = catalogFingerprint(await inspectPhysicalCatalog(client));\n        } catch {\n          preFingerprint = null;\n        }\n\n        // Execute the full SQL file as authored (no semicolon splitting).\n        await client.query(migration.sql);\n\n      const executionMs = Math.max(0, Date.now() - started);\n      let postFingerprint: string | null = null;\n      try {\n        postFingerprint = catalogFingerprint(await inspectPhysicalCatalog(client));\n      } catch {\n        postFingerprint = null;\n      }\n      const provenance = migration.provenance;\n      const executionId = migration.executionId ?? randomUUID();\n      await client.query(\n        `\nINSERT INTO athena.schema_migrations (\n  version, name, checksum, execution_ms,\n  source_commit, source_path, source_blob_sha, source_branch, source_repository,\n  runner_version, runner_package_version, execution_id, source_dirty,\n  pre_schema_fingerprint, post_schema_fingerprint\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12::uuid, $13, $14, $15)\n`.trim(),\n        [\n          migration.version,\n          migration.name,\n          migration.checksum,\n          executionMs,\n          provenance?.headCommit ?? null,\n          provenance?.relativePath ?? migration.filename,\n          provenance?.gitBlobSha ?? null,\n          provenance?.branch ?? null,\n          provenance?.repositoryRoot ?? null,\n          PACKAGE_VERSION,\n          PACKAGE_VERSION,\n          executionId,\n          Boolean(migration.sourceDirty ?? provenance?.dirty),\n          preFingerprint,\n          postFingerprint,\n        ]\n      );\n      await client.query(\n        `\nINSERT INTO athena.schema_migration_sources (\n  version, checksum, sql, source_commit, source_blob_sha, source_path, execution_id\n) VALUES ($1, $2, $3, $4, $5, $6, $7::uuid)\nON CONFLICT (version, checksum) DO NOTHING\n`.trim(),\n        [\n          migration.version,\n          migration.checksum,\n          migration.sql,\n          provenance?.headCommit ?? null,\n          provenance?.gitBlobSha ?? null,\n          provenance?.relativePath ?? migration.filename,\n          executionId,\n        ]\n      );\n\n      await client.query(\"COMMIT\");\n\n      return {\n        appliedAt: new Date(),\n        checksum: migration.checksum,\n        executionMs,\n        filename: migration.filename,\n        name: migration.name,\n        version: migration.version,\n      };\n    } catch (error) {\n      try {\n        await client.query(\"ROLLBACK\");\n      } catch {\n        // ignore rollback errors; surface original failure\n      }\n\n      throw new MigrationError(\n        \"EXECUTION\",\n        [\n          \"Migration failed\",\n          \"\",\n          migration.filename,\n          \"\",\n          \"PostgreSQL:\",\n          sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          ),\n          \"\",\n          \"The migration was rolled back.\",\n          \"No later migrations were attempted.\",\n        ].join(\"\\n\"),\n        { cause: error }\n      );\n    }\n  }\n\n  async listArchivedSources(): Promise<ArchivedMigrationSource[]> {\n    const client = await this.ensureClient();\n    try {\n      const result = await client.query<{\n        checksum: string;\n        execution_id: string | null;\n        source_blob_sha: string | null;\n        source_commit: string | null;\n        source_path: string | null;\n        sql: string;\n        version: string | number | bigint;\n      }>(\n        `\nSELECT version, checksum, sql, source_commit, source_blob_sha, source_path, execution_id\nFROM athena.schema_migration_sources\nORDER BY version ASC\n`.trim()\n      );\n      return result.rows.map((row) => ({\n        checksum: row.checksum,\n        executionId: row.execution_id ?? undefined,\n        sourceBlobSha: row.source_blob_sha ?? undefined,\n        sourceCommit: row.source_commit ?? undefined,\n        sourcePath: row.source_path ?? undefined,\n        sql: row.sql,\n        version: toNumber(row.version),\n      }));\n    } catch (error) {\n      if (isMissingLedgerError(error)) {\n        return [];\n      }\n      throw error;\n    }\n  }\n\n  async repairLedgerChecksum(version: number, checksum: string): Promise<void> {\n    const client = await this.ensureClient();\n    await client.query(\n      `UPDATE athena.schema_migrations SET checksum = $2 WHERE version = $1`,\n      [version, checksum]\n    );\n  }\n\n  async insertReconciliation(row: {\n    action: string;\n    classification: string;\n    confidence: string;\n    evidence: unknown;\n    newChecksum?: string;\n    oldChecksum?: string;\n    physicalFingerprint?: string;\n    repositoryCommit?: string;\n    version: number;\n  }): Promise<void> {\n    const client = await this.ensureClient();\n    await client.query(\n      `\nINSERT INTO athena.schema_migration_reconciliations (\n  id, version, classification, confidence, old_checksum, new_checksum,\n  action, evidence, repository_commit, physical_fingerprint, runner_version\n) VALUES ($1::uuid, $2, $3, $4, $5, $6, $7, $8::jsonb, $9, $10, $11)\n`.trim(),\n      [\n        randomUUID(),\n        row.version,\n        row.classification,\n        row.confidence,\n        row.oldChecksum ?? null,\n        row.newChecksum ?? null,\n        row.action,\n        JSON.stringify(row.evidence ?? {}),\n        row.repositoryCommit ?? null,\n        row.physicalFingerprint ?? null,\n        PACKAGE_VERSION,\n      ]\n    );\n  }\n\n  async close(): Promise<void> {\n    try {\n      await this.releaseLock();\n    } finally {\n      if (this.client) {\n        try {\n          this.client.release();\n        } catch {\n          // ignore\n        }\n        this.client = undefined;\n      }\n      if (this.pool && this.ownsPool) {\n        try {\n          await this.pool.end();\n        } catch {\n          // ignore\n        }\n      }\n      this.pool = undefined;\n    }\n  }\n}\n\nexport async function createPostgresMigrationBackend(\n  context: MigrationBackendContext\n): Promise<MigrationBackend> {\n  return new PostgresMigrationBackend(context);\n}\n","import type { BillingMoney } from \"../types.ts\";\n\nconst MONEY_PATTERN = /^-?[0-9]+(\\.[0-9]+)?$/;\nconst CURRENCY_PATTERN = /^[A-Z]{3}$/;\n/** Integer digits after leading-zero strip; Mollie string amounts stay bounded. */\nconst MAX_MONEY_INTEGER_DIGITS = 12;\n\n/** ISO-4217 minor units for codes whose exponent is not 2. */\nconst ISO_4217_MINOR_UNITS: Record<string, number> = {\n\tBHD: 3,\n\tBIF: 0,\n\tCLF: 4,\n\tCLP: 0,\n\tDJF: 0,\n\tGNF: 0,\n\tIQD: 3,\n\tISK: 0,\n\tJOD: 3,\n\tJPY: 0,\n\tKMF: 0,\n\tKRW: 0,\n\tKWD: 3,\n\tLYD: 3,\n\tOMR: 3,\n\tPYG: 0,\n\tRWF: 0,\n\tTND: 3,\n\tUGX: 0,\n\tUYI: 0,\n\tUYW: 4,\n\tVND: 0,\n\tVUV: 0,\n\tXAF: 0,\n\tXOF: 0,\n\tXPF: 0,\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction exponentForCurrency(currency: string): number {\n\treturn ISO_4217_MINOR_UNITS[currency] ?? 2;\n}\n\nfunction digitsAreZero(digits: string): boolean {\n\tfor (const ch of digits) {\n\t\tif (ch !== \"0\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function parseBillingMoney(value: unknown): BillingMoney {\n\tif (!isRecord(value)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n\t}\n\tconst currency = value.currency.trim().toUpperCase();\n\tif (!CURRENCY_PATTERN.test(currency)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_CURRENCY_INVALID\");\n\t}\n\tconst raw = value.value.trim();\n\tif (!MONEY_PATTERN.test(raw)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n\t}\n\treturn { currency, value: raw };\n}\n\nfunction stripLeadingZeros(digits: string): string {\n\tlet index = 0;\n\twhile (index < digits.length - 1 && digits[index] === \"0\") {\n\t\tindex += 1;\n\t}\n\treturn digits.slice(index);\n}\n\nfunction scaledValue(raw: string, exponent: number): string {\n\tconst negative = raw.startsWith(\"-\");\n\tconst unsigned = negative ? raw.slice(1) : raw;\n\tconst dot = unsigned.indexOf(\".\");\n\tconst intDigits = stripLeadingZeros(dot < 0 ? unsigned : unsigned.slice(0, dot));\n\tconst fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n\tif (intDigits.length > MAX_MONEY_INTEGER_DIGITS) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n\t}\n\tif (fracDigits.length > exponent) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_SCALE_INVALID\");\n\t}\n\tconst paddedFrac = fracDigits.padEnd(exponent, \"0\");\n\tconst body =\n\t\texponent === 0 ? intDigits : `${intDigits}.${paddedFrac}`;\n\treturn negative ? `-${body}` : body;\n}\n\nexport function normalizeBillingMoney(value: unknown): BillingMoney {\n\tconst parsed = parseBillingMoney(value);\n\tconst exponent = exponentForCurrency(parsed.currency);\n\treturn {\n\t\tcurrency: parsed.currency,\n\t\tvalue: scaledValue(parsed.value, exponent),\n\t};\n}\n\nexport function assertBillingMoney(value: unknown): BillingMoney {\n\tconst normalized = normalizeBillingMoney(value);\n\tconst unsigned = normalized.value.startsWith(\"-\")\n\t\t? normalized.value.slice(1)\n\t\t: normalized.value;\n\tconst dot = unsigned.indexOf(\".\");\n\tconst intDigits = dot < 0 ? unsigned : unsigned.slice(0, dot);\n\tconst fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n\tif (normalized.value.startsWith(\"-\") || digitsAreZero(intDigits + fracDigits)) {\n\t\tthrow new Error(\"ATHENA_BILLING_MONEY_NON_POSITIVE\");\n\t}\n\treturn normalized;\n}\n","CREATE SCHEMA IF NOT EXISTS billing;\n\nCREATE TABLE IF NOT EXISTS athena_billing_migrations (\n  version integer PRIMARY KEY,\n  name text NOT NULL,\n  checksum text NOT NULL,\n  applied_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE IF NOT EXISTS billing.billing_payments (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_payment_id text NOT NULL,\n    provider_customer_id text,\n    provider_profile_id text,\n    provider_subscription_id text,\n    provider_payment_link_id text,\n    status text NOT NULL,\n    amount_currency text NOT NULL,\n    amount_value numeric(18, 6) NOT NULL,\n    amount_refunded_currency text,\n    amount_refunded_value numeric(18, 6),\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    paid_at timestamptz,\n    created_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_payments_provider_check CHECK (provider IN ('mollie', 'stripe')),\n    CONSTRAINT billing_payments_status_check CHECK (\n        status IN ('pending', 'authorized', 'paid', 'failed', 'canceled', 'refunded')\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_payments_provider_payment_id\n    ON billing.billing_payments (provider, provider_payment_id);\n\nCREATE TABLE IF NOT EXISTS billing.billing_subscriptions (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_subscription_id text NOT NULL,\n    provider_customer_id text NOT NULL,\n    provider_profile_id text,\n    status text NOT NULL,\n    amount_currency text,\n    amount_value numeric(18, 6),\n    interval text,\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    next_payment_date text,\n    created_at timestamptz,\n    canceled_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_subscriptions_provider_check CHECK (provider IN ('mollie', 'stripe'))\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subscriptions_provider_subscription_id\n    ON billing.billing_subscriptions (provider, provider_subscription_id);\n\nCREATE TABLE IF NOT EXISTS billing.billing_invoices (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_invoice_id text NOT NULL,\n    provider_profile_id text,\n    provider_customer_id text,\n    status text NOT NULL,\n    amount_currency text,\n    amount_value numeric(18, 6),\n    amount_paid_currency text,\n    amount_paid_value numeric(18, 6),\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    issued_at timestamptz,\n    paid_at timestamptz,\n    created_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_invoices_provider_check CHECK (provider IN ('mollie', 'stripe'))\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_invoices_provider_invoice_id\n    ON billing.billing_invoices (provider, provider_invoice_id);\n","-- Canonical Athena subject ↔ provider locator bindings.\n-- Email is contact snapshot only. Provider IDs are never Athena identity.\n-- Self-contained: this file may run before 0001 on a database that has\n-- never applied embedded Billing (no `billing` schema yet).\n\nCREATE SCHEMA IF NOT EXISTS billing;\n\nCREATE TABLE IF NOT EXISTS billing.billing_payments (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_payment_id text NOT NULL,\n    provider_customer_id text,\n    provider_profile_id text,\n    provider_subscription_id text,\n    provider_payment_link_id text,\n    status text NOT NULL,\n    amount_currency text NOT NULL,\n    amount_value numeric(18, 6) NOT NULL,\n    amount_refunded_currency text,\n    amount_refunded_value numeric(18, 6),\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    paid_at timestamptz,\n    created_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_payments_provider_check CHECK (provider IN ('mollie', 'stripe')),\n    CONSTRAINT billing_payments_status_check CHECK (\n        status IN ('pending', 'authorized', 'paid', 'failed', 'canceled', 'refunded')\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_payments_provider_payment_id ON billing.billing_payments (provider, provider_payment_id);\n\nCREATE TABLE IF NOT EXISTS billing.billing_subscriptions (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_subscription_id text NOT NULL,\n    provider_customer_id text NOT NULL,\n    provider_profile_id text,\n    status text NOT NULL,\n    amount_currency text,\n    amount_value numeric(18, 6),\n    interval text,\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    next_payment_date text,\n    created_at timestamptz,\n    canceled_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_subscriptions_provider_check CHECK (provider IN ('mollie', 'stripe'))\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subscriptions_provider_subscription_id ON billing.billing_subscriptions (\n    provider,\n    provider_subscription_id\n);\n\nCREATE TABLE IF NOT EXISTS billing.billing_invoices (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    provider text NOT NULL,\n    provider_invoice_id text NOT NULL,\n    provider_profile_id text,\n    provider_customer_id text,\n    status text NOT NULL,\n    amount_currency text,\n    amount_value numeric(18, 6),\n    amount_paid_currency text,\n    amount_paid_value numeric(18, 6),\n    description text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    raw jsonb NOT NULL DEFAULT '{}'::jsonb,\n    issued_at timestamptz,\n    paid_at timestamptz,\n    created_at timestamptz,\n    ingested_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_invoices_provider_check CHECK (provider IN ('mollie', 'stripe'))\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_invoices_provider_invoice_id ON billing.billing_invoices (provider, provider_invoice_id);\n\nCREATE TABLE IF NOT EXISTS billing.billing_subject_bindings (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id text NOT NULL,\n    subject_kind text NOT NULL,\n    subject_id text NOT NULL,\n    provider_subject_kind text NOT NULL,\n    provider_subject_id text NOT NULL,\n    status text NOT NULL DEFAULT 'pending',\n    source text NOT NULL,\n    is_primary boolean NOT NULL DEFAULT false,\n    email_snapshot text,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    CONSTRAINT billing_subject_bindings_subject_kind_check CHECK (\n        subject_kind IN ('user', 'organization')\n    ),\n    CONSTRAINT billing_subject_bindings_provider_subject_kind_check CHECK (\n        provider_subject_kind IN ('customer', 'recipient')\n    ),\n    CONSTRAINT billing_subject_bindings_status_check CHECK (\n        status IN (\n            'pending',\n            'active',\n            'conflict',\n            'revoked'\n        )\n    ),\n    CONSTRAINT billing_subject_bindings_source_check CHECK (\n        source IN (\n            'created',\n            'imported',\n            'reconciled'\n        )\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_provider_locator ON billing.billing_subject_bindings (\n    connection_id,\n    provider_subject_kind,\n    provider_subject_id\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_one_primary ON billing.billing_subject_bindings (\n    connection_id,\n    subject_kind,\n    subject_id,\n    provider_subject_kind\n)\nWHERE\n    status = 'active'\n    AND is_primary;\n\nCREATE INDEX IF NOT EXISTS idx_billing_subject_bindings_subject ON billing.billing_subject_bindings (\n    subject_kind,\n    subject_id,\n    connection_id\n);\n\nALTER TABLE billing.billing_payments\nADD COLUMN IF NOT EXISTS connection_id text,\nADD COLUMN IF NOT EXISTS subject_kind text,\nADD COLUMN IF NOT EXISTS subject_id text,\nADD COLUMN IF NOT EXISTS ownership_status text NOT NULL DEFAULT 'unresolved';\n\nALTER TABLE billing.billing_subscriptions\nADD COLUMN IF NOT EXISTS connection_id text,\nADD COLUMN IF NOT EXISTS subject_kind text,\nADD COLUMN IF NOT EXISTS subject_id text,\nADD COLUMN IF NOT EXISTS ownership_status text NOT NULL DEFAULT 'unresolved';\n\nALTER TABLE billing.billing_invoices\nADD COLUMN IF NOT EXISTS connection_id text,\nADD COLUMN IF NOT EXISTS subject_kind text,\nADD COLUMN IF NOT EXISTS subject_id text,\nADD COLUMN IF NOT EXISTS ownership_status text NOT NULL DEFAULT 'unresolved';\n\nALTER TABLE billing.billing_payments\nDROP CONSTRAINT IF EXISTS billing_payments_ownership_status_check;\n\nALTER TABLE billing.billing_payments\nADD CONSTRAINT billing_payments_ownership_status_check CHECK (\n    ownership_status IN (\n        'resolved',\n        'unresolved',\n        'conflict'\n    )\n);\n\nALTER TABLE billing.billing_subscriptions\nDROP CONSTRAINT IF EXISTS billing_subscriptions_ownership_status_check;\n\nALTER TABLE billing.billing_subscriptions\nADD CONSTRAINT billing_subscriptions_ownership_status_check CHECK (\n    ownership_status IN (\n        'resolved',\n        'unresolved',\n        'conflict'\n    )\n);\n\nALTER TABLE billing.billing_invoices\nDROP CONSTRAINT IF EXISTS billing_invoices_ownership_status_check;\n\nALTER TABLE billing.billing_invoices\nADD CONSTRAINT billing_invoices_ownership_status_check CHECK (\n    ownership_status IN (\n        'resolved',\n        'unresolved',\n        'conflict'\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_payments_connection_provider_payment ON billing.billing_payments (\n    connection_id,\n    provider_payment_id\n)\nWHERE\n    connection_id IS NOT NULL;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subscriptions_connection_provider_subscription ON billing.billing_subscriptions (\n    connection_id,\n    provider_subscription_id\n)\nWHERE\n    connection_id IS NOT NULL;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_invoices_connection_provider_invoice ON billing.billing_invoices (\n    connection_id,\n    provider_invoice_id\n)\nWHERE\n    connection_id IS NOT NULL;","-- Billing subject isolation finality.\n-- Idempotent on databases that already applied 0001/0002 (tables exist, ledger empty).\n-- Canonical owner mapping is billing.billing_subject_bindings, not connection owner_*.\n\nCREATE SCHEMA IF NOT EXISTS billing;\n\nCREATE TABLE IF NOT EXISTS athena_billing_migrations (\n  version integer PRIMARY KEY,\n  name text NOT NULL,\n  checksum text NOT NULL,\n  applied_at timestamptz NOT NULL DEFAULT now()\n);\n\n-- Reconcile ledger when physical 0001/0002 objects exist without rows.\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 1, 'billing_canonical', 'billing-canonical-v1'\nWHERE EXISTS (\n    SELECT 1\n    FROM information_schema.tables\n    WHERE table_schema = 'billing'\n      AND table_name = 'billing_payments'\n)\n  AND NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 1\n);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 2, 'billing_subject_bindings', 'billing-subject-bindings-v1'\nWHERE EXISTS (\n    SELECT 1\n    FROM information_schema.tables\n    WHERE table_schema = 'billing'\n      AND table_name = 'billing_subject_bindings'\n)\n  AND NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 2\n);\n\nCREATE TABLE IF NOT EXISTS billing.billing_provider_connections (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    owner_kind text NOT NULL,\n    owner_id text NOT NULL,\n    provider text NOT NULL,\n    mode text NOT NULL DEFAULT 'live',\n    environment text NOT NULL DEFAULT 'live',\n    status text NOT NULL DEFAULT 'pending',\n    credential_kind text NOT NULL DEFAULT 'api_key',\n    provider_account_id text NOT NULL,\n    account_reference text NOT NULL,\n    provider_profile_id text,\n    scopes jsonb NOT NULL DEFAULT '[]'::jsonb,\n    config jsonb NOT NULL DEFAULT '{}'::jsonb,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    updated_at timestamptz NOT NULL DEFAULT now(),\n    deleted_at timestamptz,\n    CONSTRAINT billing_provider_connections_owner_kind_check CHECK (\n        owner_kind IN ('user', 'organization', 'org', 'workspace', 'tenant')\n    ),\n    CONSTRAINT billing_provider_connections_provider_check CHECK (\n        btrim(provider) <> ''\n    ),\n    CONSTRAINT billing_provider_connections_mode_check CHECK (\n        mode IN ('live', 'test')\n    ),\n    CONSTRAINT billing_provider_connections_environment_check CHECK (\n        environment IN ('live', 'test')\n    ),\n    CONSTRAINT billing_provider_connections_status_check CHECK (\n        status IN ('pending', 'active', 'disabled', 'error')\n    ),\n    CONSTRAINT billing_provider_connections_credential_kind_check CHECK (\n        credential_kind IN (\n            'api_key',\n            'advanced_access_token',\n            'organization_access_token',\n            'oauth_access_token',\n            'secret_key',\n            'restricted_key'\n        )\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_provider_connections_identity\n    ON billing.billing_provider_connections (provider, account_reference, environment)\n    WHERE deleted_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_events (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections(id) ON DELETE CASCADE,\n    provider text NOT NULL,\n    envelope_kind text NOT NULL DEFAULT 'classic',\n    verification_mode text NOT NULL DEFAULT 'signature',\n    signature_header_name text,\n    event_id text,\n    event_type text,\n    resource text,\n    entity_id text,\n    document_kind text NOT NULL,\n    provider_ref text NOT NULL,\n    signature_headers jsonb NOT NULL DEFAULT '[]'::jsonb,\n    payload jsonb NOT NULL DEFAULT '{}'::jsonb,\n    summary jsonb NOT NULL DEFAULT '{}'::jsonb,\n    received_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_webhook_events_provider_check CHECK (btrim(provider) <> ''),\n    CONSTRAINT billing_webhook_events_document_kind_check CHECK (\n        document_kind IN ('payment', 'subscription', 'invoice')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_webhook_events_connection_received_at\n    ON billing.billing_webhook_events (connection_id, received_at DESC);\n\nCREATE TABLE IF NOT EXISTS billing.billing_projection_events (\n    billing_projection_event_id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    webhook_sink_event_id uuid,\n    connection_id uuid REFERENCES billing.billing_provider_connections(id) ON DELETE SET NULL,\n    provider text NOT NULL,\n    event_type text,\n    verification_status text NOT NULL DEFAULT 'verification_pending',\n    projection_status text NOT NULL DEFAULT 'received',\n    canonical_document_kind text,\n    canonical_document_id uuid,\n    adapter_name text NOT NULL DEFAULT 'embedded',\n    attempt_count integer NOT NULL DEFAULT 0,\n    received_at timestamptz NOT NULL DEFAULT now(),\n    projected_at timestamptz,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    last_error jsonb,\n    CONSTRAINT billing_projection_events_provider_nonempty CHECK (btrim(provider) <> ''),\n    CONSTRAINT billing_projection_events_verification_status_valid CHECK (\n        verification_status IN ('received', 'verification_pending', 'verified', 'rejected')\n    ),\n    CONSTRAINT billing_projection_events_projection_status_valid CHECK (\n        projection_status IN ('received', 'decoded', 'projected', 'ignored', 'failed')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_projection_events_received\n    ON billing.billing_projection_events (received_at DESC);\n\n-- Existing 0003 installs may still have the closed provider CHECK.\nALTER TABLE billing.billing_provider_connections\n    DROP CONSTRAINT IF EXISTS billing_provider_connections_provider_check;\nALTER TABLE billing.billing_provider_connections\n    ADD CONSTRAINT billing_provider_connections_provider_check CHECK (btrim(provider) <> '');\n\nALTER TABLE billing.billing_webhook_events\n    DROP CONSTRAINT IF EXISTS billing_webhook_events_provider_check;\nALTER TABLE billing.billing_webhook_events\n    ADD CONSTRAINT billing_webhook_events_provider_check CHECK (btrim(provider) <> '');\n\nALTER TABLE billing.billing_payments\n    DROP CONSTRAINT IF EXISTS billing_payments_provider_check;\nALTER TABLE billing.billing_payments\n    DROP CONSTRAINT IF EXISTS billing_payments_provider_nonempty;\nALTER TABLE billing.billing_payments\n    ADD CONSTRAINT billing_payments_provider_nonempty CHECK (btrim(provider) <> '');\n\nALTER TABLE billing.billing_subscriptions\n    DROP CONSTRAINT IF EXISTS billing_subscriptions_provider_check;\nALTER TABLE billing.billing_subscriptions\n    DROP CONSTRAINT IF EXISTS billing_subscriptions_provider_nonempty;\nALTER TABLE billing.billing_subscriptions\n    ADD CONSTRAINT billing_subscriptions_provider_nonempty CHECK (btrim(provider) <> '');\n\nALTER TABLE billing.billing_invoices\n    DROP CONSTRAINT IF EXISTS billing_invoices_provider_check;\nALTER TABLE billing.billing_invoices\n    DROP CONSTRAINT IF EXISTS billing_invoices_provider_nonempty;\nALTER TABLE billing.billing_invoices\n    ADD CONSTRAINT billing_invoices_provider_nonempty CHECK (btrim(provider) <> '');\n\n-- Map logical connection ids (default, mollie-live, …) to UUIDs before the type change.\n-- Never CAST text connection_id to uuid. Ambiguous collisions fail closed.\nDROP INDEX IF EXISTS billing.idx_billing_payments_connection_provider_payment;\nDROP INDEX IF EXISTS billing.idx_billing_subscriptions_connection_provider_subscription;\nDROP INDEX IF EXISTS billing.idx_billing_invoices_connection_provider_invoice;\n\nDO $$\nDECLARE\n    bindings_type text;\n    hashed_uuid uuid;\n    legacy text;\nBEGIN\n    SELECT c.data_type\n    INTO bindings_type\n    FROM information_schema.columns c\n    WHERE c.table_schema = 'billing'\n      AND c.table_name = 'billing_subject_bindings'\n      AND c.column_name = 'connection_id';\n\n    IF bindings_type IS NULL THEN\n        RAISE EXCEPTION 'billing 0003: billing_subject_bindings.connection_id is missing';\n    END IF;\n\n    IF bindings_type = 'uuid' THEN\n        RETURN;\n    END IF;\n\n    CREATE TEMP TABLE billing_connection_upgrade (\n        legacy_id text PRIMARY KEY,\n        connection_uuid uuid NOT NULL\n    ) ON COMMIT DROP;\n\n    INSERT INTO billing_connection_upgrade (legacy_id, connection_uuid)\n    SELECT DISTINCT src.legacy_id, src.legacy_id::uuid\n    FROM (\n        SELECT connection_id AS legacy_id FROM billing.billing_subject_bindings\n        UNION\n        SELECT connection_id FROM billing.billing_payments WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n        UNION\n        SELECT connection_id FROM billing.billing_subscriptions WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n        UNION\n        SELECT connection_id FROM billing.billing_invoices WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n    ) src\n    WHERE src.legacy_id IS NOT NULL\n      AND src.legacy_id ~ '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';\n\n    FOR legacy IN\n        SELECT DISTINCT src.legacy_id\n        FROM (\n            SELECT connection_id AS legacy_id FROM billing.billing_subject_bindings\n            UNION\n            SELECT connection_id FROM billing.billing_payments WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n            UNION\n            SELECT connection_id FROM billing.billing_subscriptions WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n            UNION\n            SELECT connection_id FROM billing.billing_invoices WHERE connection_id IS NOT NULL AND btrim(connection_id) <> ''\n        ) src\n        WHERE src.legacy_id IS NOT NULL\n          AND btrim(src.legacy_id) <> ''\n          AND src.legacy_id !~ '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$'\n    LOOP\n        hashed_uuid := (\n            'x' || substr(md5('athena.billing.connection:' || legacy), 1, 32)\n        )::uuid;\n        IF EXISTS (\n            SELECT 1 FROM billing_connection_upgrade u\n            WHERE u.connection_uuid = hashed_uuid\n        ) THEN\n            RAISE EXCEPTION 'billing 0003: connection_id mapping is ambiguous for %', legacy;\n        END IF;\n        INSERT INTO billing_connection_upgrade (legacy_id, connection_uuid)\n        VALUES (legacy, hashed_uuid);\n    END LOOP;\n\n    IF EXISTS (\n        SELECT 1\n        FROM billing_connection_upgrade\n        GROUP BY connection_uuid\n        HAVING COUNT(*) > 1\n    ) THEN\n        RAISE EXCEPTION 'billing 0003: connection_id mapping is ambiguous';\n    END IF;\n\n    INSERT INTO billing.billing_provider_connections (\n        id,\n        owner_kind,\n        owner_id,\n        provider,\n        mode,\n        environment,\n        status,\n        credential_kind,\n        provider_account_id,\n        account_reference,\n        scopes,\n        config,\n        metadata\n    )\n    SELECT\n        u.connection_uuid,\n        'tenant',\n        'legacy-upgrade',\n        'legacy',\n        'live',\n        'live',\n        'pending',\n        'api_key',\n        u.legacy_id,\n        u.legacy_id,\n        '[]'::jsonb,\n        '{}'::jsonb,\n        jsonb_build_object('legacyConnectionId', u.legacy_id)\n    FROM billing_connection_upgrade u\n    ON CONFLICT (id) DO NOTHING;\n\n    ALTER TABLE billing.billing_subject_bindings\n        ADD COLUMN IF NOT EXISTS connection_id_uuid uuid;\n    ALTER TABLE billing.billing_payments\n        ADD COLUMN IF NOT EXISTS connection_id_uuid uuid;\n    ALTER TABLE billing.billing_subscriptions\n        ADD COLUMN IF NOT EXISTS connection_id_uuid uuid;\n    ALTER TABLE billing.billing_invoices\n        ADD COLUMN IF NOT EXISTS connection_id_uuid uuid;\n\n    UPDATE billing.billing_subject_bindings b\n    SET connection_id_uuid = u.connection_uuid\n    FROM billing_connection_upgrade u\n    WHERE b.connection_id = u.legacy_id;\n\n    UPDATE billing.billing_payments p\n    SET connection_id_uuid = u.connection_uuid\n    FROM billing_connection_upgrade u\n    WHERE p.connection_id = u.legacy_id;\n\n    UPDATE billing.billing_subscriptions s\n    SET connection_id_uuid = u.connection_uuid\n    FROM billing_connection_upgrade u\n    WHERE s.connection_id = u.legacy_id;\n\n    UPDATE billing.billing_invoices i\n    SET connection_id_uuid = u.connection_uuid\n    FROM billing_connection_upgrade u\n    WHERE i.connection_id = u.legacy_id;\n\n    IF EXISTS (\n        SELECT 1 FROM billing.billing_subject_bindings\n        WHERE connection_id_uuid IS NULL\n    ) THEN\n        RAISE EXCEPTION 'billing 0003: unresolved subject binding connection_id';\n    END IF;\n\n    ALTER TABLE billing.billing_subject_bindings DROP COLUMN connection_id;\n    ALTER TABLE billing.billing_subject_bindings RENAME COLUMN connection_id_uuid TO connection_id;\n    ALTER TABLE billing.billing_subject_bindings ALTER COLUMN connection_id SET NOT NULL;\n\n    ALTER TABLE billing.billing_payments DROP COLUMN connection_id;\n    ALTER TABLE billing.billing_payments RENAME COLUMN connection_id_uuid TO connection_id;\n\n    ALTER TABLE billing.billing_subscriptions DROP COLUMN connection_id;\n    ALTER TABLE billing.billing_subscriptions RENAME COLUMN connection_id_uuid TO connection_id;\n\n    ALTER TABLE billing.billing_invoices DROP COLUMN connection_id;\n    ALTER TABLE billing.billing_invoices RENAME COLUMN connection_id_uuid TO connection_id;\nEND $$;\n\nALTER TABLE billing.billing_subject_bindings\n    DROP CONSTRAINT IF EXISTS billing_subject_bindings_connection_id_fkey;\n\nALTER TABLE billing.billing_subject_bindings\n    ADD CONSTRAINT billing_subject_bindings_connection_id_fkey\n    FOREIGN KEY (connection_id) REFERENCES billing.billing_provider_connections(id)\n    ON DELETE CASCADE;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_provider_locator\n    ON billing.billing_subject_bindings (\n        connection_id,\n        provider_subject_kind,\n        provider_subject_id\n    );\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_one_primary\n    ON billing.billing_subject_bindings (\n        connection_id,\n        subject_kind,\n        subject_id,\n        provider_subject_kind\n    )\n    WHERE status = 'active' AND is_primary;\n\nCREATE INDEX IF NOT EXISTS idx_billing_subject_bindings_subject\n    ON billing.billing_subject_bindings (\n        subject_kind,\n        subject_id,\n        connection_id\n    );\n\n-- Resolved ownership requires a connection and Athena subject.\nALTER TABLE billing.billing_payments\n    DROP CONSTRAINT IF EXISTS billing_payments_resolved_ownership_check;\n\nALTER TABLE billing.billing_payments\n    ADD CONSTRAINT billing_payments_resolved_ownership_check CHECK (\n        ownership_status <> 'resolved'\n        OR (\n            connection_id IS NOT NULL\n            AND subject_kind IS NOT NULL\n            AND subject_id IS NOT NULL\n        )\n    );\n\nALTER TABLE billing.billing_subscriptions\n    DROP CONSTRAINT IF EXISTS billing_subscriptions_resolved_ownership_check;\n\nALTER TABLE billing.billing_subscriptions\n    ADD CONSTRAINT billing_subscriptions_resolved_ownership_check CHECK (\n        ownership_status <> 'resolved'\n        OR (\n            connection_id IS NOT NULL\n            AND subject_kind IS NOT NULL\n            AND subject_id IS NOT NULL\n        )\n    );\n\nALTER TABLE billing.billing_invoices\n    DROP CONSTRAINT IF EXISTS billing_invoices_resolved_ownership_check;\n\nALTER TABLE billing.billing_invoices\n    ADD CONSTRAINT billing_invoices_resolved_ownership_check CHECK (\n        ownership_status <> 'resolved'\n        OR (\n            connection_id IS NOT NULL\n            AND subject_kind IS NOT NULL\n            AND subject_id IS NOT NULL\n        )\n    );\n\nCREATE INDEX IF NOT EXISTS idx_billing_payments_subject_resolved\n    ON billing.billing_payments (subject_kind, subject_id)\n    WHERE ownership_status = 'resolved';\n\nCREATE INDEX IF NOT EXISTS idx_billing_subscriptions_subject_resolved\n    ON billing.billing_subscriptions (subject_kind, subject_id)\n    WHERE ownership_status = 'resolved';\n\nCREATE INDEX IF NOT EXISTS idx_billing_invoices_subject_resolved\n    ON billing.billing_invoices (subject_kind, subject_id)\n    WHERE ownership_status = 'resolved';\n\n-- Connection-scoped uniqueness (replaces provider-global indexes).\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_payments_connection_provider_payment\n    ON billing.billing_payments (connection_id, provider_payment_id)\n    WHERE connection_id IS NOT NULL;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subscriptions_connection_provider_subscription\n    ON billing.billing_subscriptions (connection_id, provider_subscription_id)\n    WHERE connection_id IS NOT NULL;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_invoices_connection_provider_invoice\n    ON billing.billing_invoices (connection_id, provider_invoice_id)\n    WHERE connection_id IS NOT NULL;\n\n-- Supersede provider-global uniqueness from 0001/0002.\nDROP INDEX IF EXISTS billing.idx_billing_payments_provider_payment_id;\nDROP INDEX IF EXISTS billing.idx_billing_subscriptions_provider_subscription_id;\nDROP INDEX IF EXISTS billing.idx_billing_invoices_provider_invoice_id;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 3, 'billing_subject_finality', 'billing-subject-finality-v2'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 3\n);\n","-- Billing customer importer state, runs, and candidate audit.\n-- Email is never an ownership key. Apply after 0003 (uuid connection_id).\n\nCREATE TABLE IF NOT EXISTS billing.billing_import_state (\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    resource_kind text NOT NULL,\n    cursor text,\n    last_started_at timestamptz,\n    last_completed_at timestamptz,\n    last_success_at timestamptz,\n    last_error text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    PRIMARY KEY (connection_id, resource_kind),\n    CONSTRAINT billing_import_state_resource_kind_check CHECK (\n        resource_kind IN ('customers')\n    )\n);\n\nCREATE TABLE IF NOT EXISTS billing.billing_import_runs (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    provider text NOT NULL,\n    started_at timestamptz NOT NULL DEFAULT now(),\n    completed_at timestamptz,\n    status text NOT NULL,\n    customers_scanned integer NOT NULL DEFAULT 0,\n    bindings_created integer NOT NULL DEFAULT 0,\n    bindings_activated integer NOT NULL DEFAULT 0,\n    conflicts integer NOT NULL DEFAULT 0,\n    skipped integer NOT NULL DEFAULT 0,\n    errors integer NOT NULL DEFAULT 0,\n    cursor_before text,\n    cursor_after text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    CONSTRAINT billing_import_runs_status_check CHECK (\n        status IN ('running', 'completed', 'failed', 'dry_run')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_import_runs_connection ON billing.billing_import_runs (connection_id, started_at DESC);\n\nCREATE TABLE IF NOT EXISTS billing.billing_import_candidates (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    import_run_id uuid NOT NULL REFERENCES billing.billing_import_runs (id),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    provider_customer_id text NOT NULL,\n    subject_kind text,\n    subject_id text,\n    confidence text NOT NULL,\n    decision text NOT NULL,\n    evidence jsonb NOT NULL DEFAULT '[]'::jsonb,\n    reason text,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    resolved_at timestamptz,\n    CONSTRAINT billing_import_candidates_confidence_check CHECK (\n        confidence IN ('exact', 'strong', 'ambiguous', 'none')\n    ),\n    CONSTRAINT billing_import_candidates_decision_check CHECK (\n        decision IN ('bind', 'skip', 'conflict', 'manual_review')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_import_candidates_run ON billing.billing_import_candidates (import_run_id);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 4, 'billing_customer_import', 'billing-customer-import-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 4\n);\n","-- Billing reconciliation observability: traces, semantic audit, leases, run causality.\n-- Apply after 0004.\n\nCREATE SCHEMA IF NOT EXISTS athena;\n\nCREATE TABLE IF NOT EXISTS athena.traces_billing (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    trace_id text NOT NULL,\n    correlation_id text,\n    causation_id text,\n    operation text NOT NULL,\n    trigger text NOT NULL,\n    connection_id uuid,\n    provider text,\n    outcome text NOT NULL,\n    error_code text,\n    error_phase text,\n    lease_ms double precision,\n    provider_ms double precision,\n    resolve_ms double precision,\n    transaction_ms double precision,\n    projection_ms double precision,\n    checkpoint_ms double precision,\n    total_ms double precision NOT NULL,\n    pages_processed integer NOT NULL DEFAULT 0,\n    customers_scanned integer NOT NULL DEFAULT 0,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    started_at timestamptz NOT NULL,\n    completed_at timestamptz NOT NULL,\n    CONSTRAINT traces_billing_outcome_check CHECK (outcome IN ('success', 'failure')),\n    CONSTRAINT traces_billing_trigger_check CHECK (\n        trigger IN ('bootstrap', 'scheduled', 'manual', 'webhook')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS traces_billing_trace_id_idx\n    ON athena.traces_billing (trace_id);\n\nCREATE INDEX IF NOT EXISTS traces_billing_correlation_id_idx\n    ON athena.traces_billing (correlation_id);\n\nCREATE INDEX IF NOT EXISTS traces_billing_connection_started_at_idx\n    ON athena.traces_billing (connection_id, started_at DESC);\n\nCREATE TABLE IF NOT EXISTS athena.audit_log_billing (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    event_id text NOT NULL,\n    trace_id text NOT NULL,\n    correlation_id text,\n    causation_id text,\n    event text NOT NULL,\n    actor_kind text NOT NULL,\n    actor_user_id text,\n    connection_id uuid,\n    provider text,\n    subject_kind text,\n    subject_id text,\n    provider_subject_kind text,\n    provider_subject_id text,\n    previous jsonb,\n    result jsonb,\n    outcome text NOT NULL DEFAULT 'success',\n    created_at timestamptz NOT NULL DEFAULT now (),\n    CONSTRAINT audit_log_billing_outcome_check CHECK (outcome = 'success'),\n    CONSTRAINT audit_log_billing_actor_kind_check CHECK (\n        actor_kind IN ('system', 'user', 'service')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS audit_log_billing_trace_id_idx\n    ON athena.audit_log_billing (trace_id);\n\nCREATE INDEX IF NOT EXISTS audit_log_billing_connection_created_at_idx\n    ON athena.audit_log_billing (connection_id, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS billing.billing_reconciliation_leases (\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    resource_kind text NOT NULL,\n    owner_id text NOT NULL,\n    acquired_at timestamptz NOT NULL,\n    heartbeat_at timestamptz NOT NULL,\n    expires_at timestamptz NOT NULL,\n    PRIMARY KEY (connection_id, resource_kind),\n    CONSTRAINT billing_reconciliation_leases_resource_kind_check CHECK (\n        resource_kind IN ('customers')\n    )\n);\n\nALTER TABLE billing.billing_import_runs\n    ADD COLUMN IF NOT EXISTS trace_id text,\n    ADD COLUMN IF NOT EXISTS correlation_id text,\n    ADD COLUMN IF NOT EXISTS causation_id text,\n    ADD COLUMN IF NOT EXISTS trigger text,\n    ADD COLUMN IF NOT EXISTS resource_kind text NOT NULL DEFAULT 'customers',\n    ADD COLUMN IF NOT EXISTS pages_processed integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS has_more boolean NOT NULL DEFAULT false,\n    ADD COLUMN IF NOT EXISTS attempt integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS heartbeat_at timestamptz,\n    ADD COLUMN IF NOT EXISTS error_code text,\n    ADD COLUMN IF NOT EXISTS error_phase text;\n\nALTER TABLE billing.billing_import_runs\n    DROP CONSTRAINT IF EXISTS billing_import_runs_status_check;\n\nALTER TABLE billing.billing_import_runs\n    ADD CONSTRAINT billing_import_runs_status_check CHECK (\n        status IN (\n            'queued',\n            'running',\n            'checkpointed',\n            'completed',\n            'completed_with_conflicts',\n            'failed',\n            'cancelled',\n            'dry_run'\n        )\n    );\n\nALTER TABLE billing.billing_import_candidates\n    ADD COLUMN IF NOT EXISTS trace_id text,\n    ADD COLUMN IF NOT EXISTS correlation_id text,\n    ADD COLUMN IF NOT EXISTS binding_id uuid;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 5, 'billing_reconciliation_observability', 'billing-reconciliation-observability-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 5\n);\n","-- Billing webhook management: owned provider registrations + lease kind.\n-- Apply after 0005. Do not store signing secrets.\n\nALTER TABLE billing.billing_reconciliation_leases\n    DROP CONSTRAINT IF EXISTS billing_reconciliation_leases_resource_kind_check;\n\nALTER TABLE billing.billing_reconciliation_leases\n    ADD CONSTRAINT billing_reconciliation_leases_resource_kind_check CHECK (\n        resource_kind IN ('customers', 'webhook_registrations')\n    );\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_registrations (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    provider text NOT NULL,\n    provider_webhook_id text,\n    kind text NOT NULL,\n    environment text NOT NULL,\n    name text NOT NULL,\n    url text NOT NULL,\n    event_types jsonb NOT NULL DEFAULT '[]'::jsonb,\n    status text NOT NULL,\n    config_hash text NOT NULL,\n    secret_version integer,\n    secret_fingerprint text,\n    last_reconciled_at timestamptz,\n    last_verified_at timestamptz,\n    last_delivery_at timestamptz,\n    last_error jsonb,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    CONSTRAINT billing_webhook_registrations_kind_check CHECK (\n        kind IN ('classic', 'next_gen')\n    ),\n    CONSTRAINT billing_webhook_registrations_environment_check CHECK (\n        environment IN ('test', 'live')\n    ),\n    CONSTRAINT billing_webhook_registrations_status_check CHECK (\n        status IN (\n            'pending',\n            'active',\n            'drifted',\n            'degraded',\n            'disabled',\n            'error'\n        )\n    ),\n    CONSTRAINT billing_webhook_registrations_connection_kind_key UNIQUE (connection_id, kind)\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS billing_webhook_registrations_provider_webhook_id_uidx\n    ON billing.billing_webhook_registrations (provider_webhook_id)\n    WHERE provider_webhook_id IS NOT NULL;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 6, 'billing_webhook_management', 'billing-webhook-management-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 6\n);\n","-- Per-connection credential authority. Secrets stay in process config;\n-- connections store a durable reference only.\n\nALTER TABLE billing.billing_provider_connections\n    ADD COLUMN IF NOT EXISTS credential_reference text;\n\nUPDATE billing.billing_provider_connections\nSET credential_reference = 'providers.' || lower(btrim(provider))\nWHERE credential_reference IS NULL\n   OR btrim(credential_reference) = '';\n\nALTER TABLE billing.billing_provider_connections\n    ALTER COLUMN credential_reference SET DEFAULT 'providers.mollie';\n\nALTER TABLE billing.billing_provider_connections\n    ALTER COLUMN credential_reference SET NOT NULL;\n\nALTER TABLE billing.billing_provider_connections\n    DROP CONSTRAINT IF EXISTS billing_provider_connections_credential_reference_check;\n\nALTER TABLE billing.billing_provider_connections\n    ADD CONSTRAINT billing_provider_connections_credential_reference_check CHECK (\n        btrim(credential_reference) <> ''\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 7, 'billing_connection_credential_reference', 'billing-connection-credential-reference-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 7\n);\n","-- Webhook operator health: accepted/rejected delivery + bounded stage ledger.\n-- Do not store signing secrets or webhook payloads.\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS last_accepted_at timestamptz;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS last_rejected_at timestamptz;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS last_rejection_code text;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS last_reconciliation_outcome text;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS last_ingress_stage text;\n\nALTER TABLE billing.billing_webhook_registrations\n    DROP CONSTRAINT IF EXISTS billing_webhook_registrations_reconciliation_outcome_check;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD CONSTRAINT billing_webhook_registrations_reconciliation_outcome_check CHECK (\n        last_reconciliation_outcome IS NULL\n        OR last_reconciliation_outcome IN ('completed', 'failed', 'skipped')\n    );\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_ingress_stages (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid REFERENCES billing.billing_provider_connections (id),\n    ingress_id uuid,\n    kind text NOT NULL,\n    stage text NOT NULL,\n    rejection_code text,\n    correlation_id text,\n    trace_id text,\n    occurred_at timestamptz NOT NULL DEFAULT now (),\n    CONSTRAINT billing_webhook_ingress_stages_kind_check CHECK (\n        kind IN ('classic', 'next_gen')\n    ),\n    CONSTRAINT billing_webhook_ingress_stages_stage_check CHECK (\n        stage IN (\n            'received',\n            'parsed',\n            'verified',\n            'authoritative_refetch_started',\n            'authoritative_refetch_completed',\n            'canonicalized',\n            'persisted',\n            'reconciliation_started',\n            'reconciliation_completed',\n            'duplicate',\n            'failed'\n        )\n    )\n);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_stages_connection_occurred_idx\n    ON billing.billing_webhook_ingress_stages (connection_id, occurred_at DESC);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 8, 'billing_webhook_ingress_observability', 'billing-webhook-ingress-observability-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 8\n);\n","-- Delivery-health current-state rows (not registration config).\n-- Stage-event columns for operator lifecycle traces. No signing secrets or payloads.\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_delivery_health (\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    kind text NOT NULL,\n    last_received_at timestamptz,\n    last_accepted_at timestamptz,\n    last_rejected_at timestamptz,\n    last_rejection_code text,\n    last_rejection_message text,\n    accepted_count bigint NOT NULL DEFAULT 0,\n    rejected_count bigint NOT NULL DEFAULT 0,\n    duplicate_count bigint NOT NULL DEFAULT 0,\n    last_reconciliation_started_at timestamptz,\n    last_reconciliation_completed_at timestamptz,\n    last_reconciliation_failed_at timestamptz,\n    last_reconciliation_outcome text,\n    last_reconciliation_error text,\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    PRIMARY KEY (connection_id, kind),\n    CONSTRAINT billing_webhook_delivery_health_kind_check CHECK (\n        kind IN ('classic', 'next_gen')\n    ),\n    CONSTRAINT billing_webhook_delivery_health_recon_outcome_check CHECK (\n        last_reconciliation_outcome IS NULL\n        OR last_reconciliation_outcome IN ('completed', 'failed', 'skipped')\n    )\n);\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD COLUMN IF NOT EXISTS provider text;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD COLUMN IF NOT EXISTS operation text;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD COLUMN IF NOT EXISTS status text;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD COLUMN IF NOT EXISTS error_message text;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD COLUMN IF NOT EXISTS metadata jsonb NOT NULL DEFAULT '{}'::jsonb;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    DROP CONSTRAINT IF EXISTS billing_webhook_ingress_stages_stage_check;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD CONSTRAINT billing_webhook_ingress_stages_stage_check CHECK (\n        stage IN (\n            'received',\n            'parsed',\n            'verified',\n            'authoritative_refetch_started',\n            'authoritative_refetch_completed',\n            'canonicalized',\n            'persisted',\n            'reconciliation_started',\n            'reconciliation_completed',\n            'reconciliation_failed',\n            'duplicate',\n            'rejected',\n            'failed'\n        )\n    );\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_stages_ingress_idx\n    ON billing.billing_webhook_ingress_stages (ingress_id);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_stages_trace_idx\n    ON billing.billing_webhook_ingress_stages (trace_id);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_stages_stage_occurred_idx\n    ON billing.billing_webhook_ingress_stages (stage, occurred_at DESC);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 9, 'billing_webhook_delivery_health', 'billing-webhook-delivery-health-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 9\n);\n","-- Durable self-service checkout / enrollment sessions.\n-- Redirect completion is not billing finality; webhook advances the session.\n\nCREATE TABLE IF NOT EXISTS billing.billing_checkout_sessions (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    idempotency_key text NOT NULL,\n    subject_kind text NOT NULL,\n    subject_id text NOT NULL,\n    price_id text NOT NULL,\n    provider text NOT NULL,\n    provider_customer_id text,\n    provider_payment_id text,\n    provider_subscription_id text,\n    status text NOT NULL,\n    checkout_url text,\n    metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    updated_at timestamptz NOT NULL DEFAULT now(),\n    CONSTRAINT billing_checkout_sessions_provider_check CHECK (\n        provider IN ('mollie', 'stripe')\n    ),\n    CONSTRAINT billing_checkout_sessions_subject_kind_check CHECK (\n        subject_kind IN ('user', 'organization')\n    ),\n    CONSTRAINT billing_checkout_sessions_status_check CHECK (\n        status IN (\n            'first_payment_required',\n            'first_payment_paid',\n            'first_payment_failed',\n            'first_payment_canceled',\n            'enrolled'\n        )\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_checkout_sessions_idempotency\n    ON billing.billing_checkout_sessions (\n        subject_kind,\n        subject_id,\n        idempotency_key\n    );\n\nCREATE INDEX IF NOT EXISTS idx_billing_checkout_sessions_payment\n    ON billing.billing_checkout_sessions (provider, provider_payment_id)\n    WHERE provider_payment_id IS NOT NULL;\n","-- At most one live (pending or active) provider subject per Athena subject\n-- on a connection. Stops concurrent ensure/import from inserting a second\n-- pending row after the first activates (which used to free the placeholder\n-- locator and allow a second Mollie customer).\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_one_live\n    ON billing.billing_subject_bindings (\n        connection_id,\n        subject_kind,\n        subject_id,\n        provider_subject_kind\n    )\n    WHERE status IN ('pending', 'active');\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_subject_bindings_one_active\n    ON billing.billing_subject_bindings (\n        connection_id,\n        subject_kind,\n        subject_id,\n        provider_subject_kind\n    )\n    WHERE status = 'active';\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 11, 'billing_subject_binding_uniqueness', 'billing-subject-binding-uniqueness-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 11\n);\n","ALTER TABLE billing.billing_reconciliation_leases\n    ADD COLUMN IF NOT EXISTS epoch bigint NOT NULL DEFAULT 0;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 12, 'billing_reconciliation_lease_epoch', 'billing-reconciliation-lease-epoch-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 12\n);\n","ALTER TABLE athena.audit_log_billing\n    DROP CONSTRAINT IF EXISTS audit_log_billing_outcome_check;\n\nALTER TABLE athena.audit_log_billing\n    ADD CONSTRAINT audit_log_billing_outcome_check\n    CHECK (outcome IN ('success', 'failure'));\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 13, 'billing_audit_failure_outcome', 'billing-audit-failure-outcome-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 13\n);\n","-- Declared connection identity: one non-deleted row per\n-- (owner_id, provider, environment, credential_reference).\n-- Historical leftovers in another environment stay stored as independent\n-- (disabled) rows; they must not share this unique slot.\n\nWITH\n    ranked AS (\n        SELECT id, row_number() OVER (\n                PARTITION BY owner_id, provider, environment, credential_reference\n                ORDER BY\n                    CASE\n                        WHEN status = 'active' THEN 0\n                        ELSE 1\n                    END, updated_at DESC, created_at DESC\n            ) AS rn\n        FROM billing.billing_provider_connections\n        WHERE\n            deleted_at IS NULL\n    )\nUPDATE billing.billing_provider_connections AS connections\nSET\n    deleted_at = now(),\n    status = 'disabled',\n    updated_at = now()\nFROM ranked\nWHERE\n    connections.id = ranked.id\n    AND ranked.rn > 1;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_provider_connections_declared_slot ON billing.billing_provider_connections (\n    owner_id,\n    provider,\n    environment,\n    credential_reference\n)\nWHERE\n    deleted_at IS NULL;\n\nINSERT INTO\n    athena_billing_migrations (version, name, checksum)\nSELECT 14, 'billing_connection_declared_slot', 'billing-connection-declared-slot-v1'\nWHERE\n    NOT EXISTS (\n        SELECT 1\n        FROM athena_billing_migrations\n        WHERE\n            version = 14\n    );","-- Encrypted webhook signing secrets. Plaintext must never enter\n-- billing.billing_webhook_registrations.metadata or generated registries.\n-- Schema athena_internal is excluded from application Data HTTP models.\n\nCREATE SCHEMA IF NOT EXISTS athena_internal;\n\nCREATE TABLE IF NOT EXISTS athena_internal.billing_webhook_signing_secrets (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    key_version integer NOT NULL DEFAULT 1,\n    fingerprint text NOT NULL,\n    ciphertext text NOT NULL,\n    status text NOT NULL,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    retired_at timestamptz,\n    CONSTRAINT billing_webhook_signing_secrets_status_check CHECK (\n        status IN ('current', 'previous', 'retired')\n    ),\n    CONSTRAINT billing_webhook_signing_secrets_connection_fingerprint_key UNIQUE (connection_id, fingerprint)\n);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_signing_secrets_connection_status_idx\n    ON athena_internal.billing_webhook_signing_secrets (connection_id, status);\n\nUPDATE billing.billing_webhook_registrations\nSET\n    metadata = metadata - 'providerSigningSecret'\nWHERE\n    metadata ? 'providerSigningSecret';\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 15, 'billing_webhook_signing_secrets', 'billing-webhook-signing-secrets-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 15\n);\n","-- Durable checkout return correlation: opaque token hash, attempt kind, expiry.\n-- Do not store the plaintext return token or provider secrets.\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD COLUMN IF NOT EXISTS kind text NOT NULL DEFAULT 'subscription_enrollment';\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD COLUMN IF NOT EXISTS connection_id text;\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD COLUMN IF NOT EXISTS return_nonce_hash text;\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD COLUMN IF NOT EXISTS expires_at timestamptz;\n\nALTER TABLE billing.billing_checkout_sessions\n    DROP CONSTRAINT IF EXISTS billing_checkout_sessions_kind_check;\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD CONSTRAINT billing_checkout_sessions_kind_check CHECK (\n        kind IN ('one_off', 'subscription_enrollment')\n    );\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_checkout_sessions_return_nonce\n    ON billing.billing_checkout_sessions (return_nonce_hash)\n    WHERE return_nonce_hash IS NOT NULL;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 16, 'billing_checkout_return_finality', 'billing-checkout-return-finality-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 16\n);\n","-- Align ingress stage CHECK with the TypeScript stage catalog.\n-- v8 allowed `failed` only; handlers and TS use `rejected` / `reconciliation_failed`.\n-- Keep `failed` for existing rows.\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    DROP CONSTRAINT IF EXISTS billing_webhook_ingress_stages_stage_check;\n\nALTER TABLE billing.billing_webhook_ingress_stages\n    ADD CONSTRAINT billing_webhook_ingress_stages_stage_check CHECK (\n        stage IN (\n            'received',\n            'parsed',\n            'verified',\n            'authoritative_refetch_started',\n            'authoritative_refetch_completed',\n            'canonicalized',\n            'persisted',\n            'reconciliation_started',\n            'reconciliation_completed',\n            'reconciliation_failed',\n            'duplicate',\n            'rejected',\n            'failed'\n        )\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 17, 'billing_webhook_ingress_stage_catalog', 'billing-webhook-ingress-stage-catalog-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 17\n);\n","-- account_reference = declared/local connection identity (upsert key).\n-- provider_account_id = provider-confirmed remote identity; null until\n-- discovery/verification. Do not invent Mollie organization ids.\n\nALTER TABLE billing.billing_provider_connections\n    ALTER COLUMN provider_account_id DROP NOT NULL;\n\nALTER TABLE billing.billing_provider_connections\n    DROP CONSTRAINT IF EXISTS billing_provider_connections_provider_account_id_check;\n\nALTER TABLE billing.billing_provider_connections\n    ADD CONSTRAINT billing_provider_connections_provider_account_id_check CHECK (\n        provider_account_id IS NULL OR btrim(provider_account_id) <> ''\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 18, 'billing_provider_account_id_nullable', 'billing-provider-account-id-nullable-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 18\n);\n","import billingCanonicalSql from \"./sql/0001_billing_canonical.sql\";\nimport billingSubjectBindingsSql from \"./sql/0002_billing_subject_bindings.sql\";\nimport billingSubjectFinalitySql from \"./sql/0003_billing_subject_finality.sql\";\nimport billingCustomerImportSql from \"./sql/0004_billing_customer_import.sql\";\nimport billingReconciliationObservabilitySql from \"./sql/0005_billing_reconciliation_observability.sql\";\nimport billingWebhookManagementSql from \"./sql/0006_billing_webhook_management.sql\";\nimport billingConnectionCredentialReferenceSql from \"./sql/0007_billing_connection_credential_reference.sql\";\nimport billingWebhookIngressObservabilitySql from \"./sql/0008_billing_webhook_ingress_observability.sql\";\nimport billingWebhookDeliveryHealthSql from \"./sql/0009_billing_webhook_delivery_health.sql\";\nimport billingCheckoutSessionsSql from \"./sql/0010_billing_checkout_sessions.sql\";\nimport billingSubjectBindingUniquenessSql from \"./sql/0011_billing_subject_binding_uniqueness.sql\";\nimport billingReconciliationLeaseEpochSql from \"./sql/0012_billing_reconciliation_lease_epoch.sql\";\nimport billingAuditFailureOutcomeSql from \"./sql/0013_billing_audit_failure_outcome.sql\";\nimport billingConnectionDeclaredSlotSql from \"./sql/0014_billing_connection_declared_slot.sql\";\nimport billingWebhookSigningSecretsSql from \"./sql/0015_billing_webhook_signing_secrets.sql\";\nimport billingCheckoutReturnFinalitySql from \"./sql/0016_billing_checkout_return_finality.sql\";\nimport billingWebhookIngressStageCatalogSql from \"./sql/0017_billing_webhook_ingress_stage_catalog.sql\";\nimport billingProviderAccountIdNullableSql from \"./sql/0018_billing_provider_account_id_nullable.sql\";\n\nexport const EMBEDDED_BILLING_LEDGER = \"athena_billing_migrations\";\n\nexport const EMBEDDED_BILLING_MIGRATIONS = [\n\t{\n\t\tchecksum: \"billing-canonical-v1\",\n\t\tfilename: \"0001_billing_canonical.sql\",\n\t\tname: \"billing_canonical\",\n\t\tsql: billingCanonicalSql,\n\t\tversion: 1,\n\t},\n\t{\n\t\tchecksum: \"billing-subject-bindings-v1\",\n\t\tfilename: \"0002_billing_subject_bindings.sql\",\n\t\tname: \"billing_subject_bindings\",\n\t\tsql: billingSubjectBindingsSql,\n\t\tversion: 2,\n\t},\n\t{\n\t\tchecksum: \"billing-subject-finality-v2\",\n\t\tfilename: \"0003_billing_subject_finality.sql\",\n\t\tname: \"billing_subject_finality\",\n\t\tsql: billingSubjectFinalitySql,\n\t\tversion: 3,\n\t},\n\t{\n\t\tchecksum: \"billing-customer-import-v1\",\n\t\tfilename: \"0004_billing_customer_import.sql\",\n\t\tname: \"billing_customer_import\",\n\t\tsql: billingCustomerImportSql,\n\t\tversion: 4,\n\t},\n\t{\n\t\tchecksum: \"billing-reconciliation-observability-v1\",\n\t\tfilename: \"0005_billing_reconciliation_observability.sql\",\n\t\tname: \"billing_reconciliation_observability\",\n\t\tsql: billingReconciliationObservabilitySql,\n\t\tversion: 5,\n\t},\n\t{\n\t\tchecksum: \"billing-webhook-management-v1\",\n\t\tfilename: \"0006_billing_webhook_management.sql\",\n\t\tname: \"billing_webhook_management\",\n\t\tsql: billingWebhookManagementSql,\n\t\tversion: 6,\n\t},\n\t{\n\t\tchecksum: \"billing-connection-credential-reference-v1\",\n\t\tfilename: \"0007_billing_connection_credential_reference.sql\",\n\t\tname: \"billing_connection_credential_reference\",\n\t\tsql: billingConnectionCredentialReferenceSql,\n\t\tversion: 7,\n\t},\n\t{\n\t\tchecksum: \"billing-webhook-ingress-observability-v1\",\n\t\tfilename: \"0008_billing_webhook_ingress_observability.sql\",\n\t\tname: \"billing_webhook_ingress_observability\",\n\t\tsql: billingWebhookIngressObservabilitySql,\n\t\tversion: 8,\n\t},\n\t{\n\t\tchecksum: \"billing-webhook-delivery-health-v1\",\n\t\tfilename: \"0009_billing_webhook_delivery_health.sql\",\n\t\tname: \"billing_webhook_delivery_health\",\n\t\tsql: billingWebhookDeliveryHealthSql,\n\t\tversion: 9,\n\t},\n\t{\n\t\tchecksum: \"billing-checkout-sessions-v1\",\n\t\tfilename: \"0010_billing_checkout_sessions.sql\",\n\t\tname: \"billing_checkout_sessions\",\n\t\tsql: billingCheckoutSessionsSql,\n\t\tversion: 10,\n\t},\n\t{\n\t\tchecksum: \"billing-subject-binding-uniqueness-v1\",\n\t\tfilename: \"0011_billing_subject_binding_uniqueness.sql\",\n\t\tname: \"billing_subject_binding_uniqueness\",\n\t\tsql: billingSubjectBindingUniquenessSql,\n\t\tversion: 11,\n\t},\n\t{\n\t\tchecksum: \"billing-reconciliation-lease-epoch-v1\",\n\t\tfilename: \"0012_billing_reconciliation_lease_epoch.sql\",\n\t\tname: \"billing_reconciliation_lease_epoch\",\n\t\tsql: billingReconciliationLeaseEpochSql,\n\t\tversion: 12,\n\t},\n\t{\n\t\tchecksum: \"billing-audit-failure-outcome-v1\",\n\t\tfilename: \"0013_billing_audit_failure_outcome.sql\",\n\t\tname: \"billing_audit_failure_outcome\",\n\t\tsql: billingAuditFailureOutcomeSql,\n\t\tversion: 13,\n\t},\n\t{\n\t\tchecksum: \"billing-connection-declared-slot-v1\",\n\t\tfilename: \"0014_billing_connection_declared_slot.sql\",\n\t\tname: \"billing_connection_declared_slot\",\n\t\tsql: billingConnectionDeclaredSlotSql,\n\t\tversion: 14,\n\t},\n\t{\n\t\tchecksum: \"billing-webhook-signing-secrets-v1\",\n\t\tfilename: \"0015_billing_webhook_signing_secrets.sql\",\n\t\tname: \"billing_webhook_signing_secrets\",\n\t\tsql: billingWebhookSigningSecretsSql,\n\t\tversion: 15,\n\t},\n\t{\n\t\tchecksum: \"billing-checkout-return-finality-v1\",\n\t\tfilename: \"0016_billing_checkout_return_finality.sql\",\n\t\tname: \"billing_checkout_return_finality\",\n\t\tsql: billingCheckoutReturnFinalitySql,\n\t\tversion: 16,\n\t},\n\t{\n\t\tchecksum: \"billing-webhook-ingress-stage-catalog-v1\",\n\t\tfilename: \"0017_billing_webhook_ingress_stage_catalog.sql\",\n\t\tname: \"billing_webhook_ingress_stage_catalog\",\n\t\tsql: billingWebhookIngressStageCatalogSql,\n\t\tversion: 17,\n\t},\n\t{\n\t\tchecksum: \"billing-provider-account-id-nullable-v1\",\n\t\tfilename: \"0018_billing_provider_account_id_nullable.sql\",\n\t\tname: \"billing_provider_account_id_nullable\",\n\t\tsql: billingProviderAccountIdNullableSql,\n\t\tversion: 18,\n\t},\n] as const;\n\nexport const EMBEDDED_BILLING_REQUIRED_TABLES = [\n\t\"billing_payments\",\n\t\"billing_subscriptions\",\n\t\"billing_invoices\",\n\t\"billing_subject_bindings\",\n\t\"billing_provider_connections\",\n\t\"billing_webhook_events\",\n\t\"billing_projection_events\",\n\t\"billing_import_state\",\n\t\"billing_import_runs\",\n\t\"billing_import_candidates\",\n\t\"billing_reconciliation_leases\",\n\t\"billing_webhook_registrations\",\n\t\"billing_webhook_ingress_stages\",\n\t\"billing_webhook_delivery_health\",\n\t\"billing_checkout_sessions\",\n] as const;\n\nexport const AUTH_UI_BILLING_PRESET_TABLES = [\n\t\"billing_provider_connections\",\n\t\"billing_webhook_events\",\n\t\"billing_projection_events\",\n\t\"billing_import_runs\",\n\t\"billing_import_candidates\",\n\t\"billing_webhook_registrations\",\n] as const;\n","/**\n * Canonical Chat runtime schema version.\n * Must match `crates/athena-chat` `CHAT_RUNTIME_SCHEMA_VERSION`\n * and the `athena.runtime_schema_versions` row for `chat_runtime`.\n */\nexport const ATHENA_CHAT_RUNTIME_SCHEMA_VERSION = 4;\n\nexport const ATHENA_CHAT_RUNTIME_SCHEMA_COMPONENT = \"chat_runtime\";\n","CREATE TABLE IF NOT EXISTS athena_chat_schema_migrations (\n\tversion INTEGER PRIMARY KEY,\n\tname TEXT NOT NULL,\n\tchecksum TEXT NOT NULL,\n\tapplied_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\nCREATE SCHEMA IF NOT EXISTS athena;\nCREATE EXTENSION IF NOT EXISTS pgcrypto;\n\nCREATE TABLE IF NOT EXISTS athena.files (\n    id text PRIMARY KEY,\n    file_name text,\n    original_name text,\n    content_type text,\n    mime_type text,\n    extension text,\n    size_bytes bigint,\n    status text,\n    visibility text,\n    url text,\n    bucket text,\n    storage_key text\n);\n\n-- Prior chat self-heal may have created athena.files with only `id`.\n-- CREATE TABLE IF NOT EXISTS does not add missing columns; upgrade in place\n-- before recording durable schema version 4 (attachment list JOINs need these).\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS file_name text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS original_name text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS content_type text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS mime_type text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS extension text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS size_bytes bigint;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS status text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS visibility text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS url text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS bucket text;\nALTER TABLE athena.files ADD COLUMN IF NOT EXISTS storage_key text;\n\nCREATE TABLE IF NOT EXISTS athena.chat_rooms (\n    id uuid PRIMARY KEY,\n    organization_id text NOT NULL,\n    kind text NOT NULL CHECK (kind IN ('dm', 'group', 'channel')),\n    title text,\n    created_by text NOT NULL,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    updated_at timestamptz NOT NULL DEFAULT now(),\n    archived_at timestamptz,\n    last_message_id uuid,\n    last_message_seq bigint NOT NULL DEFAULT 0,\n    last_message_at timestamptz,\n    version bigint NOT NULL DEFAULT 1\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_rooms_org_recent_active\n    ON athena.chat_rooms (organization_id, updated_at DESC)\n    WHERE archived_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS athena.chat_direct_rooms (\n    organization_id text NOT NULL,\n    participant_one_id text COLLATE \"C\" NOT NULL,\n    participant_two_id text COLLATE \"C\" NOT NULL,\n    room_id uuid NOT NULL UNIQUE REFERENCES athena.chat_rooms(id) ON DELETE CASCADE,\n    PRIMARY KEY (organization_id, participant_one_id, participant_two_id),\n    CONSTRAINT chat_direct_rooms_canonical_participants\n        CHECK (participant_one_id < participant_two_id)\n);\n\nCREATE TABLE IF NOT EXISTS athena.chat_room_members (\n    room_id uuid NOT NULL REFERENCES athena.chat_rooms(id) ON DELETE CASCADE,\n    user_id text NOT NULL,\n    role text NOT NULL CHECK (role IN ('owner', 'admin', 'member')),\n    joined_at timestamptz NOT NULL DEFAULT now(),\n    last_read_seq bigint NOT NULL DEFAULT 0,\n    last_read_message_id uuid,\n    muted boolean NOT NULL DEFAULT false,\n    notification_mode text,\n    hidden_at timestamptz,\n    PRIMARY KEY (room_id, user_id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_room_members_user_room\n    ON athena.chat_room_members (user_id, room_id);\n\nCREATE TABLE IF NOT EXISTS athena.chat_messages (\n    id uuid PRIMARY KEY,\n    room_id uuid NOT NULL REFERENCES athena.chat_rooms(id) ON DELETE CASCADE,\n    room_seq bigint NOT NULL,\n    sender_id text NOT NULL,\n    client_message_id text,\n    body_text text,\n    body_json jsonb,\n    reply_to_message_id uuid,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    edited_at timestamptz,\n    deleted_at timestamptz,\n    metadata_json jsonb,\n    CONSTRAINT chat_messages_room_seq_unique UNIQUE (room_id, room_seq),\n    CONSTRAINT chat_messages_idempotency_unique UNIQUE (room_id, sender_id, client_message_id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_messages_room_seq_desc\n    ON athena.chat_messages (room_id, room_seq DESC);\n\nCREATE INDEX IF NOT EXISTS idx_chat_messages_room_created_desc\n    ON athena.chat_messages (room_id, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS athena.chat_message_attachments (\n    message_id uuid NOT NULL REFERENCES athena.chat_messages(id) ON DELETE CASCADE,\n    file_id text NOT NULL REFERENCES athena.files(id) ON DELETE RESTRICT,\n    ordinal integer NOT NULL,\n    PRIMARY KEY (message_id, ordinal)\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_message_attachments_file\n    ON athena.chat_message_attachments (file_id);\n\nCREATE TABLE IF NOT EXISTS athena.chat_message_reactions (\n    message_id uuid NOT NULL REFERENCES athena.chat_messages(id) ON DELETE CASCADE,\n    user_id text NOT NULL,\n    emoji text NOT NULL,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    PRIMARY KEY (message_id, user_id, emoji)\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_message_reactions_lookup\n    ON athena.chat_message_reactions (message_id, emoji);\n\nCREATE TABLE IF NOT EXISTS athena.chat_outbox (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    aggregate_type text NOT NULL CHECK (aggregate_type IN ('chat_message', 'chat_room', 'read_cursor')),\n    aggregate_id text NOT NULL,\n    room_id uuid NOT NULL REFERENCES athena.chat_rooms(id) ON DELETE CASCADE,\n    room_seq bigint,\n    event_type text NOT NULL,\n    payload_json jsonb NOT NULL,\n    created_at timestamptz NOT NULL DEFAULT now(),\n    published_at timestamptz,\n    publish_attempts integer NOT NULL DEFAULT 0,\n    event_version integer NOT NULL DEFAULT 1,\n    delivery_destination_id text,\n    delivery_body bytea,\n    delivery_status text NOT NULL DEFAULT 'not_required'\n        CHECK (delivery_status IN ('not_required', 'pending', 'delivered', 'dead_lettered')),\n    delivery_attempts integer NOT NULL DEFAULT 0,\n    delivery_available_at timestamptz,\n    delivery_last_error_code text,\n    delivery_last_http_status integer,\n    delivery_delivered_at timestamptz,\n    delivery_failed_at timestamptz,\n    delivery_lease_token uuid,\n    delivery_lease_expires_at timestamptz\n);\n\nCREATE INDEX IF NOT EXISTS idx_chat_outbox_unpublished\n    ON athena.chat_outbox (published_at, created_at)\n    WHERE published_at IS NULL;\n\nCREATE INDEX IF NOT EXISTS idx_chat_outbox_room_seq\n    ON athena.chat_outbox (room_id, room_seq);\n\nCREATE INDEX IF NOT EXISTS idx_chat_outbox_http_delivery_pending\n    ON athena.chat_outbox (delivery_available_at, created_at)\n    WHERE delivery_status = 'pending';\n\nCREATE TABLE IF NOT EXISTS athena.runtime_schema_versions (\n    component text PRIMARY KEY,\n    version integer NOT NULL,\n    updated_at timestamptz NOT NULL DEFAULT now()\n);\n\nINSERT INTO athena.runtime_schema_versions (component, version, updated_at)\nVALUES ('chat_runtime', 4, now())\nON CONFLICT (component) DO UPDATE\nSET version = GREATEST(athena.runtime_schema_versions.version, EXCLUDED.version),\n    updated_at = now();\n","import {\n\tATHENA_CHAT_RUNTIME_SCHEMA_VERSION,\n} from \"../../chat/schema-version.ts\";\nimport { checksumMigrationSql } from \"../checksum.ts\";\nimport chatRuntimeV4Sql from \"./sql/0001_chat_runtime_v4.sql\";\n\nexport const EMBEDDED_CHAT_LEDGER = \"athena_chat_schema_migrations\";\n\nexport const EMBEDDED_CHAT_REQUIRED_TABLES = [\n\t\"files\",\n\t\"chat_rooms\",\n\t\"chat_direct_rooms\",\n\t\"chat_room_members\",\n\t\"chat_messages\",\n\t\"chat_message_attachments\",\n\t\"chat_message_reactions\",\n\t\"chat_outbox\",\n\t\"runtime_schema_versions\",\n] as const;\n\nexport const EMBEDDED_CHAT_REQUIRED_RELATIONS = EMBEDDED_CHAT_REQUIRED_TABLES.map(\n\t(table) => ({ schema: \"athena\", table }),\n);\n\nexport const EMBEDDED_CHAT_LEGACY_CHECKSUMS_V1 = [\"chat-runtime-v4\"] as const;\n\nexport const EMBEDDED_CHAT_MIGRATIONS = [\n\t{\n\t\tchecksum: checksumMigrationSql(chatRuntimeV4Sql),\n\t\tfilename: \"0001_chat_runtime_v4.sql\",\n\t\tlegacyChecksums: EMBEDDED_CHAT_LEGACY_CHECKSUMS_V1,\n\t\tname: \"chat_runtime_v4\",\n\t\trequiredRelations: EMBEDDED_CHAT_REQUIRED_RELATIONS,\n\t\tschemaVersion: ATHENA_CHAT_RUNTIME_SCHEMA_VERSION,\n\t\tsql: chatRuntimeV4Sql,\n\t\tversion: 1,\n\t},\n] as const;\n","CREATE SCHEMA IF NOT EXISTS athena;\n\nCREATE TABLE IF NOT EXISTS athena_event_ingress_migrations (\n  version integer PRIMARY KEY,\n  name text NOT NULL,\n  checksum text NOT NULL,\n  applied_at timestamptz NOT NULL DEFAULT now()\n);\n\nCREATE TABLE IF NOT EXISTS athena.event_ingress (\n  id uuid PRIMARY KEY,\n  domain text NOT NULL,\n  provider text,\n  provider_event_id text,\n  connection_id text,\n  received_at timestamptz NOT NULL,\n  body bytea NOT NULL,\n  headers jsonb NOT NULL,\n  status text NOT NULL,\n  correlation_id text,\n  trace_id text,\n  attempt_count integer NOT NULL DEFAULT 0,\n  processed_at timestamptz,\n  failed_at timestamptz,\n  error jsonb\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_event_ingress_provider_event\n  ON athena.event_ingress (domain, provider, provider_event_id)\n  WHERE provider_event_id IS NOT NULL;\n\nCREATE TABLE IF NOT EXISTS athena.event_ledger (\n  id uuid PRIMARY KEY,\n  name text NOT NULL,\n  domain text NOT NULL,\n  provider text,\n  subject_type text NOT NULL,\n  subject_id text NOT NULL,\n  ingress_id uuid,\n  payload jsonb NOT NULL DEFAULT '{}'::jsonb,\n  occurred_at timestamptz NOT NULL,\n  observed_at timestamptz NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS athena.event_outbox (\n  id uuid PRIMARY KEY,\n  event_id uuid NOT NULL,\n  name text NOT NULL,\n  payload jsonb NOT NULL DEFAULT '{}'::jsonb,\n  created_at timestamptz NOT NULL DEFAULT now(),\n  published_at timestamptz\n);\n","-- Durable ingress failure machine: retryable vs terminal, lease, next attempt.\n-- Do not store webhook payloads or signing secrets in error jsonb.\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS failure_stage text;\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS next_attempt_at timestamptz;\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS lease_owner text;\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS lease_expires_at timestamptz;\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS first_failed_at timestamptz;\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS last_failed_at timestamptz;\n\nALTER TABLE athena.event_ingress\n    DROP CONSTRAINT IF EXISTS event_ingress_status_check;\n\nALTER TABLE athena.event_ingress\n    ADD CONSTRAINT event_ingress_status_check CHECK (\n        status IN (\n            'received',\n            'resolving',\n            'processed',\n            'ignored',\n            'retryable_failure',\n            'terminal_failure'\n        )\n    );\n\nCREATE INDEX IF NOT EXISTS idx_event_ingress_retryable\n    ON athena.event_ingress (next_attempt_at)\n    WHERE status = 'retryable_failure';\n\nCREATE INDEX IF NOT EXISTS idx_event_ingress_stuck_resolving\n    ON athena.event_ingress (received_at)\n    WHERE status = 'resolving';\n\nINSERT INTO athena_event_ingress_migrations (version, name, checksum)\nSELECT 2, 'event_ingress_failure_machine', 'event-ingress-failure-machine-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_event_ingress_migrations WHERE version = 2\n);\n","import eventIngressSql from \"./sql/0001_event_ingress.sql\";\nimport eventIngressFailureMachineSql from \"./sql/0002_event_ingress_failure_machine.sql\";\n\nexport const EMBEDDED_EVENT_INGRESS_LEDGER = \"athena_event_ingress_migrations\";\n\nexport const EMBEDDED_EVENT_INGRESS_REQUIRED_TABLES = [\n\t\"event_ingress\",\n\t\"event_ledger\",\n\t\"event_outbox\",\n] as const;\n\nexport const EMBEDDED_EVENT_INGRESS_MIGRATIONS = [\n\t{\n\t\tchecksum: \"event-ingress-v1\",\n\t\tfilename: \"0001_event_ingress.sql\",\n\t\tname: \"event_ingress\",\n\t\tsql: eventIngressSql,\n\t\tversion: 1,\n\t},\n\t{\n\t\tchecksum: \"event-ingress-failure-machine-v1\",\n\t\tfilename: \"0002_event_ingress_failure_machine.sql\",\n\t\tname: \"event_ingress_failure_machine\",\n\t\tsql: eventIngressFailureMachineSql,\n\t\tversion: 2,\n\t},\n] as const;\n","import { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface EnsureApplicationMigrationsDirectoryOptions {\n\t/** Absolute migrations directory path. */\n\tdirectory: string;\n\t/** When true, report would-be creation without writing. */\n\tdryRun?: boolean;\n\t/** Write `.gitkeep` so an empty folder is committable. Defaults to true. */\n\tkeepFile?: boolean;\n}\n\nexport interface EnsureApplicationMigrationsDirectoryResult {\n\tcreated: boolean;\n\tdirectory: string;\n\tkeepFileWritten: boolean;\n}\n\n/**\n * Creates the application SQL migrations directory when missing.\n *\n * Migrate used to print `Directory athena/migrations` even when the folder\n * did not exist. Init and migrate both call this so the advertised layout\n * is a real path (`athena/migrations/.gitkeep`).\n */\nexport async function ensureApplicationMigrationsDirectory(\n\toptions: EnsureApplicationMigrationsDirectoryOptions,\n): Promise<EnsureApplicationMigrationsDirectoryResult> {\n\tconst keepFile = options.keepFile !== false;\n\tconst keepPath = join(options.directory, \".gitkeep\");\n\tconst directoryMissing = !existsSync(options.directory);\n\tconst keepMissing = keepFile && !existsSync(keepPath);\n\n\tif (!directoryMissing && !keepMissing) {\n\t\treturn {\n\t\t\tcreated: false,\n\t\t\tdirectory: options.directory,\n\t\t\tkeepFileWritten: false,\n\t\t};\n\t}\n\n\tif (options.dryRun) {\n\t\treturn {\n\t\t\tcreated: directoryMissing,\n\t\t\tdirectory: options.directory,\n\t\t\tkeepFileWritten: keepMissing,\n\t\t};\n\t}\n\n\tif (directoryMissing) {\n\t\tawait mkdir(options.directory, { recursive: true });\n\t}\n\tif (keepMissing) {\n\t\tawait writeFile(keepPath, \"\", \"utf8\");\n\t}\n\n\treturn {\n\t\tcreated: directoryMissing,\n\t\tdirectory: options.directory,\n\t\tkeepFileWritten: keepMissing,\n\t};\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { listAthenaAuthCanonicalMigrations } from \"../auth/local/schema.ts\";\nimport {\n\tDEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY,\n\tDEFAULT_MIGRATIONS_DIRECTORY,\n} from \"./constants.ts\";\nimport { ensureApplicationMigrationsDirectory } from \"./ensure-directory.ts\";\n\nexport const MANAGED_AUTH_MIGRATION_HEADER = [\n\t\"-- AUTO-GENERATED BY @xylex-group/athena\",\n\t\"-- Embedded Athena Auth managed migration.\",\n\t\"-- Do not edit. The package-owned migration definition is authoritative.\",\n].join(\"\\n\");\n\nexport type ManagedAuthFileStatus =\n\t| \"ok\"\n\t| \"missing\"\n\t| \"modified\"\n\t| \"unexpected\";\n\nexport interface ManagedAuthMigrationArtifact {\n\tcontents: string;\n\tfilename: string;\n\tname: string;\n\tversion: number;\n}\n\nexport interface ManagedAuthFileInspection {\n\tfilename: string;\n\tstatus: ManagedAuthFileStatus;\n}\n\nexport interface ManagedAuthInspection {\n\tdirectory: string;\n\tdrifted: boolean;\n\tfiles: ManagedAuthFileInspection[];\n}\n\nexport interface MaterializeManagedAuthMigrationsOptions {\n\tcwd?: string;\n\tdirectory?: string;\n\tdryRun?: boolean;\n\t/** When true, overwrite locally edited managed files. Default true. */\n\toverwrite?: boolean;\n}\n\nexport interface MaterializeManagedAuthMigrationsResult {\n\tdirectory: string;\n\trestored: string[];\n\tunchanged: string[];\n\tunexpected: string[];\n\twritten: string[];\n}\n\nexport interface EnsureAthenaProjectLayoutOptions {\n\tapplicationDirectory?: string;\n\tcwd?: string;\n\tdryRun?: boolean;\n\tmanagedDirectory?: string;\n}\n\nexport interface EnsureAthenaProjectLayoutResult {\n\tapplicationDirectory: string;\n\tcreatedApplicationMigrations: boolean;\n\tcreatedManagedAuthMigrations: boolean;\n\tmanagedDirectory: string;\n}\n\nexport function managedAuthMigrationFilename(name: string): string {\n\treturn name.endsWith(\".sql\") ? name : `${name}.sql`;\n}\n\nexport function renderManagedAuthMigrationFile(sql: string): string {\n\tconst body = sql.trim();\n\treturn `${MANAGED_AUTH_MIGRATION_HEADER}\\n\\n${body}\\n`;\n}\n\nexport function listManagedAuthMigrationArtifacts(): ManagedAuthMigrationArtifact[] {\n\treturn listAthenaAuthCanonicalMigrations().map((entry) => ({\n\t\tcontents: renderManagedAuthMigrationFile(entry.sql),\n\t\tfilename: managedAuthMigrationFilename(entry.name),\n\t\tname: entry.name,\n\t\tversion: entry.version,\n\t}));\n}\n\nexport function resolveManagedAuthMigrationsDirectory(\n\tcwd: string,\n\tdirectory = DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY,\n): string {\n\treturn resolve(cwd, directory);\n}\n\nexport async function ensureAthenaProjectLayout(\n\toptions: EnsureAthenaProjectLayoutOptions = {},\n): Promise<EnsureAthenaProjectLayoutResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst applicationDirectory = resolve(\n\t\tcwd,\n\t\toptions.applicationDirectory ?? DEFAULT_MIGRATIONS_DIRECTORY,\n\t);\n\tconst managedDirectory = resolveManagedAuthMigrationsDirectory(\n\t\tcwd,\n\t\toptions.managedDirectory,\n\t);\n\tconst application = await ensureApplicationMigrationsDirectory({\n\t\tdirectory: applicationDirectory,\n\t\tdryRun: options.dryRun,\n\t});\n\tconst managedMissing = !existsSync(managedDirectory);\n\tif (managedMissing && !options.dryRun) {\n\t\tawait mkdir(managedDirectory, { recursive: true });\n\t}\n\treturn {\n\t\tapplicationDirectory,\n\t\tcreatedApplicationMigrations: application.created,\n\t\tcreatedManagedAuthMigrations: managedMissing,\n\t\tmanagedDirectory,\n\t};\n}\n\nfunction ignoreManagedName(name: string): boolean {\n\treturn name.startsWith(\".\") || name === \"README.md\";\n}\n\nexport async function inspectManagedAuthMigrations(\n\toptions: MaterializeManagedAuthMigrationsOptions = {},\n): Promise<ManagedAuthInspection> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst directory = resolveManagedAuthMigrationsDirectory(cwd, options.directory);\n\tconst expected = listManagedAuthMigrationArtifacts();\n\tconst expectedByName = new Map(\n\t\texpected.map((item) => [item.filename, item.contents]),\n\t);\n\tconst files: ManagedAuthFileInspection[] = [];\n\n\tif (!existsSync(directory)) {\n\t\tfor (const artifact of expected) {\n\t\t\tfiles.push({ filename: artifact.filename, status: \"missing\" });\n\t\t}\n\t\treturn { directory, drifted: files.length > 0, files };\n\t}\n\n\tconst listed = await readdir(directory);\n\tconst seen = new Set<string>();\n\tfor (const name of listed) {\n\t\tif (ignoreManagedName(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(name);\n\t\tconst expectedContents = expectedByName.get(name);\n\t\tif (expectedContents === undefined) {\n\t\t\tfiles.push({ filename: name, status: \"unexpected\" });\n\t\t\tcontinue;\n\t\t}\n\t\tconst actual = await readFile(join(directory, name), \"utf8\");\n\t\tfiles.push({\n\t\t\tfilename: name,\n\t\t\tstatus: actual === expectedContents ? \"ok\" : \"modified\",\n\t\t});\n\t}\n\tfor (const artifact of expected) {\n\t\tif (!seen.has(artifact.filename)) {\n\t\t\tfiles.push({ filename: artifact.filename, status: \"missing\" });\n\t\t}\n\t}\n\tfiles.sort((left, right) => left.filename.localeCompare(right.filename));\n\tconst drifted = files.some((file) => file.status !== \"ok\");\n\treturn { directory, drifted, files };\n}\n\nexport function formatManagedAuthDrift(inspection: ManagedAuthInspection): string {\n\tconst drifted = inspection.files.filter((file) => file.status !== \"ok\");\n\tif (drifted.length === 0) {\n\t\treturn \"\";\n\t}\n\tconst lines = [\n\t\t\"Managed Embedded Auth migration files drifted from the package-owned definitions.\",\n\t\t\"Local files are a read-only view. Athena will not execute edited copies.\",\n\t\t\"\",\n\t\t...drifted.map((file) => `  ${file.status}: ${file.filename}`),\n\t\t\"\",\n\t\t\"Restore with:\",\n\t\t\"\",\n\t\t\"  athena-js migrate auth sync\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nexport async function materializeManagedAuthMigrations(\n\toptions: MaterializeManagedAuthMigrationsOptions = {},\n): Promise<MaterializeManagedAuthMigrationsResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst overwrite = options.overwrite !== false;\n\tconst directory = resolveManagedAuthMigrationsDirectory(cwd, options.directory);\n\tconst expected = listManagedAuthMigrationArtifacts();\n\tconst written: string[] = [];\n\tconst unchanged: string[] = [];\n\tconst restored: string[] = [];\n\tconst unexpected: string[] = [];\n\n\tif (!options.dryRun) {\n\t\tawait mkdir(directory, { recursive: true });\n\t}\n\n\tconst existing = existsSync(directory) ? await readdir(directory) : [];\n\tconst existingSet = new Set(\n\t\texisting.filter((name) => !ignoreManagedName(name)),\n\t);\n\tconst expectedNames = new Set(expected.map((item) => item.filename));\n\tfor (const name of existingSet) {\n\t\tif (!expectedNames.has(name)) {\n\t\t\tunexpected.push(name);\n\t\t}\n\t}\n\n\tfor (const artifact of expected) {\n\t\tconst path = join(directory, artifact.filename);\n\t\tconst present = existingSet.has(artifact.filename);\n\t\tif (!present) {\n\t\t\tif (!options.dryRun) {\n\t\t\t\tawait writeFile(path, artifact.contents, \"utf8\");\n\t\t\t}\n\t\t\twritten.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t\tconst actual = await readFile(path, \"utf8\");\n\t\tif (actual === artifact.contents) {\n\t\t\tunchanged.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t\tif (overwrite) {\n\t\t\tif (!options.dryRun) {\n\t\t\t\tawait writeFile(path, artifact.contents, \"utf8\");\n\t\t\t}\n\t\t\trestored.push(artifact.filename);\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn { directory, restored, unchanged, unexpected, written };\n}\n","import type { ParsedAuthBridgeCode } from \"./types.ts\";\n\nexport const AUTH_BRIDGE_CODE_PREFIX = \"ath_brc_\";\nexport const AUTH_BRIDGE_CODE_ENTROPY_BYTES = 32;\nexport const AUTH_BRIDGE_CODE_HASH_PREFIX = \"athena:auth:bridge:v1:\";\n\nfunction toBase64Url(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/g, \"\");\n}\n\nfunction fromBase64Url(value: string): Uint8Array {\n\tconst padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\tconst padLength = (4 - (padded.length % 4)) % 4;\n\tconst binary = atob(`${padded}${\"=\".repeat(padLength)}`);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index += 1) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\treturn bytes;\n}\n\nfunction toHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (const byte of bytes) {\n\t\thex += byte.toString(16).padStart(2, \"0\");\n\t}\n\treturn hex;\n}\n\nfunction isLoopbackHost(hostname: string): boolean {\n\tconst host = hostname.toLowerCase();\n\treturn host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\" || host === \"[::1]\";\n}\n\nexport function generateAuthBridgeCode(): string {\n\tconst bytes = new Uint8Array(AUTH_BRIDGE_CODE_ENTROPY_BYTES);\n\tcrypto.getRandomValues(bytes);\n\treturn `${AUTH_BRIDGE_CODE_PREFIX}${toBase64Url(bytes)}`;\n}\n\nexport function parseAuthBridgeCode(code: string): ParsedAuthBridgeCode {\n\tif (!code.startsWith(AUTH_BRIDGE_CODE_PREFIX)) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\tconst payload = code.slice(AUTH_BRIDGE_CODE_PREFIX.length);\n\tif (!/^[A-Za-z0-9_-]+$/.test(payload)) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\tconst bytes = fromBase64Url(payload);\n\tif (bytes.byteLength !== AUTH_BRIDGE_CODE_ENTROPY_BYTES) {\n\t\tthrow new Error(\"Invalid auth bridge code\");\n\t}\n\treturn {\n\t\tbytes,\n\t\tentropyBits: bytes.byteLength * 8,\n\t};\n}\n\nexport async function hashAuthBridgeCode(code: string): Promise<string> {\n\tconst encoded = new TextEncoder().encode(`${AUTH_BRIDGE_CODE_HASH_PREFIX}${code}`);\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", encoded);\n\treturn toHex(new Uint8Array(digest));\n}\n\nexport function normalizeAuthBridgeDestinationOrigin(input: string): string {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(input);\n\t} catch {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.username || url.password) {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.search !== \"\" || url.hash !== \"\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.pathname !== \"/\" && url.pathname !== \"\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\tif (url.protocol === \"http:\") {\n\t\tif (!isLoopbackHost(url.hostname)) {\n\t\t\tthrow new Error(\"Invalid destination origin\");\n\t\t}\n\t} else if (url.protocol !== \"https:\") {\n\t\tthrow new Error(\"Invalid destination origin\");\n\t}\n\treturn url.origin;\n}\n\nexport function normalizeAuthBridgeRedirectPath(input: string): string {\n\tif (typeof input !== \"string\" || input.length === 0 || !input.startsWith(\"/\")) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\tif (input.startsWith(\"//\") || input.includes(\"\\\\\") || input.includes(\"://\")) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\tif (/%5c/i.test(input) || /javascript:/i.test(input)) {\n\t\tthrow new Error(\"Invalid redirect path\");\n\t}\n\treturn input;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n\tAthenaAuthObservabilityConfig,\n\tNormalizedAthenaAuthObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaAuthObservability(\n\tinput?: AthenaAuthObservabilityConfig,\n): NormalizedAthenaAuthObservability {\n\tconst tracesInput = input?.traces;\n\tconst tracesEnabled =\n\t\ttracesInput === undefined\n\t\t\t? true\n\t\t\t: typeof tracesInput === \"boolean\"\n\t\t\t\t? tracesInput\n\t\t\t\t: tracesInput.sampleRate !== 0;\n\tconst sampleRate =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.sampleRate === \"number\" &&\n\t\tNumber.isFinite(tracesInput.sampleRate)\n\t\t\t? Math.min(1, Math.max(0, tracesInput.sampleRate))\n\t\t\t: 1;\n\tconst retentionDays =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.retentionDays === \"number\" &&\n\t\tNumber.isFinite(tracesInput.retentionDays)\n\t\t\t? Math.max(1, Math.trunc(tracesInput.retentionDays))\n\t\t\t: undefined;\n\treturn {\n\t\tauditLog: input?.auditLog !== false,\n\t\ttraces: {\n\t\t\tenabled: tracesEnabled,\n\t\t\tretentionDays,\n\t\t\tsampleRate: tracesEnabled ? sampleRate : 0,\n\t\t},\n\t};\n}\n\nexport function assertLocalAuthObservability(auth: unknown): void {\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = auth as Record<string, unknown>;\n\tif (!(\"observability\" in raw) || raw.observability === undefined) {\n\t\treturn;\n\t}\n\tconst mode = (auth as { mode?: unknown }).mode;\n\tif (mode !== \"local\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t'auth.observability is an embedded-auth capability. Set auth.mode to \"local\" or omit observability for remote Auth.',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n","/**\n * Operator WebAuthn policy + supported extension allow-list.\n * Unspecified passwordless registration defaults to residentKey required\n * and credProps requested (SimpleWebAuthn passkeys). Operator overrides win.\n */\n\nexport type AthenaPasskeyUserVerification =\n\t| \"discouraged\"\n\t| \"preferred\"\n\t| \"required\";\n\nexport type AthenaPasskeyResidentKey = \"discouraged\" | \"preferred\" | \"required\";\n\nexport type AthenaPasskeyAuthenticatorAttachment = \"cross-platform\" | \"platform\";\n\nexport interface AthenaPasskeyRegistrationExtensions {\n\tcredProps?: boolean;\n}\n\n/** Intentionally empty until Athena defines an authentication-extension contract. */\nexport type AthenaPasskeyAuthenticationExtensions = Record<string, never>;\n\nexport interface AthenaPasskeyRegistrationPolicy {\n\tauthenticatorAttachment: AthenaPasskeyAuthenticatorAttachment | null;\n\textensions: AthenaPasskeyRegistrationExtensions;\n\tresidentKey: AthenaPasskeyResidentKey | null;\n\tuserVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticationPolicy {\n\textensions: AthenaPasskeyAuthenticationExtensions;\n\tuserVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticatorSelection {\n\tauthenticatorAttachment?: AthenaPasskeyAuthenticatorAttachment;\n\trequireResidentKey?: boolean;\n\tresidentKey?: AthenaPasskeyResidentKey;\n\tuserVerification?: AthenaPasskeyUserVerification;\n}\n\nconst USER_VERIFICATION = new Set<AthenaPasskeyUserVerification>([\n\t\"discouraged\",\n\t\"preferred\",\n\t\"required\",\n]);\nconst RESIDENT_KEY = new Set<AthenaPasskeyResidentKey>([\n\t\"discouraged\",\n\t\"preferred\",\n\t\"required\",\n]);\nconst ATTACHMENT = new Set<AthenaPasskeyAuthenticatorAttachment>([\n\t\"cross-platform\",\n\t\"platform\",\n]);\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction pickEnum<T extends string>(\n\tvalue: unknown,\n\tallowed: ReadonlySet<T>,\n): T | null {\n\treturn typeof value === \"string\" && allowed.has(value as T)\n\t\t? (value as T)\n\t\t: null;\n}\n\nexport function normalizePasskeyRegistrationPolicy(\n\traw: unknown,\n): AthenaPasskeyRegistrationPolicy {\n\tconst record = asRecord(raw);\n\tconst extensionsRaw = asRecord(record?.extensions);\n\treturn {\n\t\tauthenticatorAttachment: pickEnum(record?.authenticatorAttachment, ATTACHMENT),\n\t\textensions: {\n\t\t\t...(extensionsRaw?.credProps === true ? { credProps: true } : {}),\n\t\t\t...(extensionsRaw?.credProps === false ? { credProps: false } : {}),\n\t\t},\n\t\tresidentKey: pickEnum(record?.residentKey, RESIDENT_KEY),\n\t\tuserVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n\t};\n}\n\nexport function normalizePasskeyAuthenticationPolicy(\n\traw: unknown,\n): AthenaPasskeyAuthenticationPolicy {\n\tconst record = asRecord(raw);\n\treturn {\n\t\textensions: {},\n\t\tuserVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n\t};\n}\n\nexport function requireUserVerificationFromPolicy(\n\tuserVerification: AthenaPasskeyUserVerification | null,\n): boolean {\n\treturn userVerification === \"required\";\n}\n\nexport function registrationAuthenticatorSelection(input: {\n\tattachmentOverride?: AthenaPasskeyAuthenticatorAttachment | null;\n\tpolicy: AthenaPasskeyRegistrationPolicy;\n}): AthenaPasskeyAuthenticatorSelection | undefined {\n\tconst attachment =\n\t\tinput.attachmentOverride ?? input.policy.authenticatorAttachment;\n\tconst selection: AthenaPasskeyAuthenticatorSelection = {};\n\tif (attachment) {\n\t\tselection.authenticatorAttachment = attachment;\n\t}\n\tconst residentKey = input.policy.residentKey ?? \"required\";\n\tselection.residentKey = residentKey;\n\tselection.requireResidentKey = residentKey === \"required\";\n\tif (input.policy.userVerification) {\n\t\tselection.userVerification = input.policy.userVerification;\n\t}\n\treturn selection;\n}\n\nexport function supportedRegistrationExtensions(\n\tpolicy: AthenaPasskeyRegistrationPolicy,\n): AthenaPasskeyRegistrationExtensions | undefined {\n\tif (policy.extensions.credProps === false) {\n\t\treturn undefined;\n\t}\n\treturn { credProps: true };\n}\n\n/**\n * Persist only Athena-normalized extension meaning. Never store raw\n * `clientExtensionResults`.\n */\nexport function normalizeCredPropsResidentKey(\n\tclientExtensionResults: unknown,\n): boolean | null {\n\tconst record = asRecord(clientExtensionResults);\n\tconst credProps = asRecord(record?.credProps);\n\tif (typeof credProps?.rk === \"boolean\") {\n\t\treturn credProps.rk;\n\t}\n\treturn null;\n}\n","/**\n * Normalized Athena Auth execution + HTTP routing.\n *\n * Execution (`disabled` | `local` | `remote`) is distinct from HTTP routing\n * (`same-origin` | `direct` | `custom`). `auth: false` is disabled. Legacy\n * object configs without `mode` normalize to `remote`.\n */\n\nimport {\n  type AthenaAppIdentity,\n  type AthenaAppIdentityInput,\n  resolveAthenaAppIdentity,\n} from \"./app-identity.ts\";\nimport { normalizeAuthBridgeDestinationOrigin } from \"./bridge/code.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"./contract/index.ts\";\nimport type { AthenaAuthHooks } from \"./hooks/types.ts\";\nimport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/server/social-config.ts\";\nimport type { AthenaAuthObservabilityConfig } from \"./observability/types.ts\";\nimport { normalizeAthenaAuthObservability } from \"./observability/config.ts\";\nimport type { NormalizedAthenaAuthObservability } from \"./observability/types.ts\";\n\nexport type {\n  AthenaAppIdentity,\n  AthenaAppIdentityInput,\n} from \"./app-identity.ts\";\nexport { resolveAthenaAppIdentity } from \"./app-identity.ts\";\nimport {\n  type AthenaPasskeyAuthenticationPolicy,\n  type AthenaPasskeyRegistrationPolicy,\n  normalizePasskeyAuthenticationPolicy,\n  normalizePasskeyRegistrationPolicy,\n} from \"./passkey/policy.ts\";\nexport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/server/social-config.ts\";\nexport type {\n  AthenaPasskeyAuthenticatorAttachment,\n  AthenaPasskeyAuthenticationExtensions,\n  AthenaPasskeyAuthenticationPolicy,\n  AthenaPasskeyRegistrationExtensions,\n  AthenaPasskeyRegistrationPolicy,\n  AthenaPasskeyResidentKey,\n  AthenaPasskeyUserVerification,\n} from \"./passkey/policy.ts\";\n\nexport type AthenaPasskeyOnboardingResolution =\n  | { create: { email: string; name?: string } }\n  | { existingUserId: string };\n\n/** Ceremony fields forwarded by PasskeyButton / generate-register-options. */\nexport interface AthenaPasskeyCeremonyContext {\n  email?: string;\n  name?: string;\n}\n\nexport interface AthenaPasskeyOnboardingOptions {\n  createSession?: boolean;\n  enabled?: boolean;\n  resolveUser?: (\n    context: AthenaPasskeyCeremonyContext,\n  ) =>\n    | AthenaPasskeyOnboardingResolution\n    | Promise<AthenaPasskeyOnboardingResolution>;\n}\n\n/**\n * Default passkey-first onboarding map (T-ONB-01/02).\n * Apps omit `resolveUser` when `onboarding: true`.\n */\nexport function resolveAthenaPasskeyOnboardingUser(\n  context: AthenaPasskeyCeremonyContext | unknown,\n): AthenaPasskeyOnboardingResolution {\n  const record = asRecord(context);\n  const email = asString(record?.email);\n  if (!email) {\n    throw new Error(\"email is required to complete passkey onboarding\");\n  }\n  const name = asString(record?.name);\n  return name ? { create: { email, name } } : { create: { email } };\n}\n\nexport type AthenaAuthExecutionMode = \"disabled\" | \"local\" | \"remote\";\nexport type AthenaAuthHttpRouting = \"same-origin\" | \"direct\" | \"custom\";\n\nexport interface AthenaAuthEmailAndPasswordOptions {\n  autoSignIn?: boolean;\n  enabled?: boolean;\n  maxPasswordLength?: number;\n  minPasswordLength?: number;\n  requireEmailVerification?: boolean;\n}\n\nexport interface AthenaAuthSessionOptions {\n  cookieName?: string;\n  disableSessionRefresh?: boolean;\n  expiresInSeconds?: number;\n  updateAgeSeconds?: number;\n}\n\nexport interface AthenaAuthSecurityOptions {\n  bodyLimitBytes?: number;\n  cookieSecure?: boolean | \"auto\";\n  trustedOrigins?: string[];\n  trustedProxy?: boolean;\n}\n\nexport interface AthenaAuthBridgeOptions {\n  allowedOrigins?: string[];\n  codeTtlSeconds?: number;\n  enabled?: boolean;\n}\n\nexport interface NormalizedAthenaAuthBridgeConfig {\n  allowedOrigins: string[];\n  codeTtlSeconds: number;\n  enabled: boolean;\n}\n\nexport interface AthenaAuthPasskeyOptions {\n  authentication?: {\n    extensions?: Record<string, never>;\n    userVerification?: \"discouraged\" | \"preferred\" | \"required\";\n  };\n  challengeTtlSeconds?: number;\n  enabled?: boolean;\n  onboarding?: boolean | AthenaPasskeyOnboardingOptions;\n  origins?: readonly string[];\n  relatedOrigins?: readonly string[];\n  registration?: {\n    authenticatorAttachment?: \"cross-platform\" | \"platform\";\n    extensions?: { credProps?: boolean };\n    residentKey?: \"discouraged\" | \"preferred\" | \"required\";\n    userVerification?: \"discouraged\" | \"preferred\" | \"required\";\n  };\n  rpId?: string;\n  rpName?: string;\n}\n\nexport interface AthenaAuthLocalConfig {\n  /**\n   * Explicit opt-in only. `createClient()` never auto-migrates production\n   * Auth schema unless this is `true`.\n   */\n  autoMigrate?: boolean;\n  basePath?: string;\n  bridge?: AthenaAuthBridgeOptions;\n  emailAndPassword?: AthenaAuthEmailAndPasswordOptions;\n  mode: \"local\";\n  oauth?: Record<string, AthenaAuthSocialProviderOptions>;\n  organizations?: { enabled?: boolean };\n  passkey?: AthenaAuthPasskeyOptions;\n  secret?: string;\n  security?: AthenaAuthSecurityOptions;\n  session?: AthenaAuthSessionOptions;\n  social?: AthenaAuthSocialOptions;\n  socialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n  /**\n   * Embedded-only domain lifecycle hooks. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  hooks?: AthenaAuthHooks;\n  /**\n   * Embedded-only audit/trace tables. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  observability?: AthenaAuthObservabilityConfig;\n}\n\nexport interface AthenaAuthRemoteConfig {\n  credentials?: RequestCredentials;\n  mode?: \"remote\";\n  oauth?: Record<string, AthenaAuthSocialProviderOptions>;\n  routing?: AthenaAuthHttpRouting;\n  secret?: string;\n  social?: AthenaAuthSocialOptions;\n  socialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n  upstreamUrl?: string | null;\n  url?: string | null;\n}\n\nexport type AthenaAuthPublicConfig =\n  | AthenaAuthLocalConfig\n  | AthenaAuthRemoteConfig\n  | (Omit<AthenaAuthRemoteConfig, \"mode\"> & { mode?: undefined });\n\nexport type AthenaAuthInput =\n  | false\n  | AthenaAuthPublicConfig\n  | Record<string, unknown>\n  | null\n  | undefined;\n\nexport interface NormalizedAthenaAuthConfig {\n  appIdentity: AthenaAppIdentity | null;\n  autoMigrate: boolean;\n  basePath: string;\n  bridge: NormalizedAthenaAuthBridgeConfig;\n  emailAndPassword: Required<AthenaAuthEmailAndPasswordOptions>;\n  execution: AthenaAuthExecutionMode;\n  organizationsEnabled: boolean;\n  passkey: {\n    authentication: AthenaPasskeyAuthenticationPolicy;\n    challengeTtlSeconds: number;\n    enabled: boolean;\n    onboardingCreateSession: boolean;\n    onboardingEnabled: boolean;\n    origins: string[];\n    registration: AthenaPasskeyRegistrationPolicy;\n    relatedOrigins: string[];\n    rpId: string | null;\n    rpName: string | null;\n  };\n  /**\n   * True when the operator supplied a `passkey` key (including `{}`).\n   * Snapshot factory is the RP ID authority — this flag only gates production init.\n   */\n  passkeyConfigured: boolean;\n  routing?: AthenaAuthHttpRouting;\n  social: NormalizedSocialAuthConfig;\n  secret?: string;\n  security: {\n    bodyLimitBytes: number;\n    cookieSecure: boolean | \"auto\";\n    trustedOrigins: string[];\n    trustedProxy: boolean;\n  };\n  session: Required<AthenaAuthSessionOptions>;\n  upstreamUrl?: string;\n  url?: string;\n  observability: NormalizedAthenaAuthObservability;\n  warnings: string[];\n}\n\nconst DEFAULT_EMAIL_PASSWORD: Required<AthenaAuthEmailAndPasswordOptions> = {\n  autoSignIn: true,\n  enabled: true,\n  maxPasswordLength: 128,\n  minPasswordLength: 8,\n  requireEmailVerification: false,\n};\n\nconst DEFAULT_SESSION: Required<AthenaAuthSessionOptions> = {\n  cookieName: \"athena-auth.session-token\",\n  disableSessionRefresh: false,\n  expiresInSeconds: 7 * 24 * 60 * 60,\n  updateAgeSeconds: 24 * 60 * 60,\n};\n\nconst DEFAULT_BRIDGE: NormalizedAthenaAuthBridgeConfig = {\n  allowedOrigins: [],\n  codeTtlSeconds: 30,\n  enabled: false,\n};\n\nconst BRIDGE_TTL_MIN = 5;\nconst BRIDGE_TTL_MAX = 300;\n\nconst DEFAULT_PASSKEY: NormalizedAthenaAuthConfig[\"passkey\"] = {\n  authentication: normalizePasskeyAuthenticationPolicy(undefined),\n  challengeTtlSeconds: 60,\n  enabled: false,\n  onboardingCreateSession: true,\n  onboardingEnabled: false,\n  origins: [],\n  registration: normalizePasskeyRegistrationPolicy(undefined),\n  relatedOrigins: [],\n  rpId: null,\n  rpName: null,\n};\n\nconst PASSKEY_CHALLENGE_TTL_MIN = 1;\nconst PASSKEY_CHALLENGE_TTL_MAX = 600;\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return undefined;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction asString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction asStringList(value: unknown): string[] {\n  return Array.isArray(value)\n    ? value.filter((entry): entry is string => typeof entry === \"string\")\n    : [];\n}\n\nfunction originFromConfiguredUrl(value: string): string | undefined {\n  try {\n    const url = new URL(value.trim());\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return undefined;\n    }\n    return url.origin;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction mergeTrustedOrigins(\n  explicit: readonly string[],\n  passkeyOrigins: readonly string[],\n  envOrigins: readonly string[],\n): string[] {\n  const unique = new Set<string>();\n  for (const entry of [...explicit, ...passkeyOrigins, ...envOrigins]) {\n    const trimmed = entry.trim().replace(/\\/+$/, \"\");\n    if (!trimmed) {\n      continue;\n    }\n    unique.add(originFromConfiguredUrl(trimmed) ?? trimmed);\n  }\n  return [...unique];\n}\n\nfunction clampBridgeCodeTtl(value: unknown): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return DEFAULT_BRIDGE.codeTtlSeconds;\n  }\n  const truncated = Math.trunc(value);\n  if (truncated < BRIDGE_TTL_MIN) {\n    return BRIDGE_TTL_MIN;\n  }\n  if (truncated > BRIDGE_TTL_MAX) {\n    return BRIDGE_TTL_MAX;\n  }\n  return truncated;\n}\n\nfunction normalizeAllowedBridgeOrigins(value: unknown): string[] {\n  const unique = new Set<string>();\n  for (const entry of asStringList(value)) {\n    try {\n      unique.add(normalizeAuthBridgeDestinationOrigin(entry));\n    } catch {\n      // Fail closed: drop unparseable origins instead of enabling them.\n    }\n  }\n  return [...unique];\n}\n\nfunction normalizeBridgeConfig(\n  rawBridge: unknown\n): NormalizedAthenaAuthBridgeConfig {\n  const record = asRecord(rawBridge);\n  if (!record) {\n    return { ...DEFAULT_BRIDGE };\n  }\n  const allowedOrigins = normalizeAllowedBridgeOrigins(record.allowedOrigins);\n  const explicitEnabled = record.enabled;\n  const enabled =\n    explicitEnabled === false\n      ? false\n      : explicitEnabled === true || allowedOrigins.length > 0;\n  return {\n    allowedOrigins,\n    codeTtlSeconds: clampBridgeCodeTtl(record.codeTtlSeconds),\n    enabled,\n  };\n}\n\nfunction clampPasskeyChallengeTtl(value: unknown): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return DEFAULT_PASSKEY.challengeTtlSeconds;\n  }\n  const truncated = Math.trunc(value);\n  if (truncated < PASSKEY_CHALLENGE_TTL_MIN) {\n    return PASSKEY_CHALLENGE_TTL_MIN;\n  }\n  if (truncated > PASSKEY_CHALLENGE_TTL_MAX) {\n    return PASSKEY_CHALLENGE_TTL_MAX;\n  }\n  return truncated;\n}\n\nfunction normalizeOnboardingFlag(raw: unknown): {\n  createSession: boolean;\n  enabled: boolean;\n} {\n  if (raw === true) {\n    return { createSession: true, enabled: true };\n  }\n  const onboarding = asRecord(raw);\n  return {\n    createSession: onboarding?.createSession !== false,\n    enabled: onboarding?.enabled === true,\n  };\n}\n\nfunction assertSocialConfigObject(key: string, value: unknown): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `auth.${key} must be an object provider map`,\n      \"auth\",\n    );\n  }\n}\n\nfunction extractSocialProviderMap(value: unknown): unknown {\n  const record = asRecord(value);\n  if (!record) {\n    return undefined;\n  }\n  const nested = asRecord(record.providers);\n  return nested ?? record;\n}\n\nfunction normalizeSocialProviderBag(\n  value: unknown,\n): AthenaAuthSocialProviderOptions | undefined {\n  const record = asRecord(value);\n  if (!record) {\n    return undefined;\n  }\n  return {\n    ...record,\n    clientId: asString(record.clientId) ?? \"\",\n    clientSecret: asString(record[\"clientSecret\"]) ?? \"\",\n  };\n}\n\nfunction normalizeSocialFromRaw(\n  raw: Record<string, unknown>,\n): NormalizedSocialAuthConfig {\n  const source =\n    extractSocialProviderMap(raw.social) ?? raw.oauth ?? raw.socialProviders;\n  const record = asRecord(source);\n  if (!record) {\n    return { providers: {} };\n  }\n  const providers: Record<string, AthenaAuthSocialProviderOptions> = {};\n  for (const [id, bag] of Object.entries(record)) {\n    const normalized = normalizeSocialProviderBag(bag);\n    if (!normalized) {\n      continue;\n    }\n    providers[id] = normalized;\n  }\n  return { providers };\n}\n\nfunction normalizePasskeyConfig(\n  rawPasskey: unknown\n): NormalizedAthenaAuthConfig[\"passkey\"] {\n  if (rawPasskey === true) {\n    return {\n      ...DEFAULT_PASSKEY,\n      enabled: true,\n      origins: [],\n      relatedOrigins: [],\n    };\n  }\n  const record = asRecord(rawPasskey);\n  if (!record) {\n    return { ...DEFAULT_PASSKEY, origins: [], relatedOrigins: [] };\n  }\n  const onboarding = normalizeOnboardingFlag(record.onboarding);\n  const impliedEnabled = onboarding.enabled || record.enabled === true;\n  return {\n    authentication: normalizePasskeyAuthenticationPolicy(record.authentication),\n    challengeTtlSeconds: clampPasskeyChallengeTtl(record.challengeTtlSeconds),\n    enabled: impliedEnabled,\n    onboardingCreateSession: onboarding.createSession,\n    onboardingEnabled: onboarding.enabled,\n    origins: mergeTrustedOrigins(asStringList(record.origins), [], []),\n    registration: normalizePasskeyRegistrationPolicy(record.registration),\n    relatedOrigins: mergeTrustedOrigins(asStringList(record.relatedOrigins), [], []),\n    rpId: asString(record.rpId) ?? null,\n    rpName: asString(record.rpName) ?? null,\n  };\n}\n\n/** `createClient({ auth: false })` — Athena DB without Athena Auth. */\nexport function isAthenaAuthDisabled(input: unknown): input is false {\n  return input === false;\n}\n\n/**\n * Object auth config only. `false` / non-objects normalize to `undefined`.\n */\nexport function athenaAuthConfig<T extends object>(\n  input: false | T | null | undefined\n): T | undefined {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return undefined;\n  }\n  return input;\n}\n\nfunction disabledAuthConfig(): NormalizedAthenaAuthConfig {\n  return {\n    appIdentity: null,\n    autoMigrate: false,\n    basePath: ATHENA_AUTH_DEFAULT_BASE_PATH,\n    bridge: { ...DEFAULT_BRIDGE },\n    emailAndPassword: { ...DEFAULT_EMAIL_PASSWORD, enabled: false },\n    execution: \"disabled\",\n    organizationsEnabled: false,\n    passkey: { ...DEFAULT_PASSKEY, origins: [], relatedOrigins: [] },\n    passkeyConfigured: false,\n    social: { providers: {} },\n    security: {\n      bodyLimitBytes: 1_048_576,\n      cookieSecure: \"auto\",\n      trustedOrigins: [],\n      trustedProxy: false,\n    },\n    observability: normalizeAthenaAuthObservability(),\n    session: { ...DEFAULT_SESSION },\n    warnings: [],\n  };\n}\n\n/**\n * Collapse public / legacy auth config into one internal representation.\n * Call this once at the SDK boundary — do not re-branch on raw `auth.mode`.\n *\n * Precedence: `auth === false` → disabled. Explicit `mode` wins next.\n */\nexport interface NormalizeAthenaAuthConfigOptions {\n  app?: AthenaAppIdentityInput;\n  env?: Record<string, string | undefined>;\n  identity?: AthenaAppIdentity | null;\n}\n\nexport function normalizeAthenaAuthConfig(\n  input?: unknown,\n  options: NormalizeAthenaAuthConfigOptions = {},\n): NormalizedAthenaAuthConfig {\n  if (isAthenaAuthDisabled(input)) {\n    return disabledAuthConfig();\n  }\n  const raw = asRecord(input) ?? {};\n  const warnings: string[] = [];\n  const explicitMode = asString(raw.mode);\n  const execution: AthenaAuthExecutionMode =\n    explicitMode === \"local\" ? \"local\" : \"remote\";\n\n  if (\n    execution === \"remote\" &&\n    explicitMode === undefined &&\n    (raw.routing !== undefined || raw.url !== undefined || raw.upstreamUrl !== undefined)\n  ) {\n    warnings.push(\n      'Athena auth config without mode is treated as mode: \"remote\". ' +\n        'Set auth.mode explicitly (\"local\" | \"remote\") when you can.'\n    );\n  }\n\n  if (execution === \"local\" && (raw.url || raw.upstreamUrl || raw.routing)) {\n    warnings.push(\n      'auth.mode \"local\" ignores remote url / upstreamUrl / routing. ' +\n        \"Local requests terminate inside the application process.\"\n    );\n  }\n\n  const emailAndPassword = {\n    ...DEFAULT_EMAIL_PASSWORD,\n    ...(asRecord(raw.emailAndPassword) as AthenaAuthEmailAndPasswordOptions | undefined),\n  };\n  const session = {\n    ...DEFAULT_SESSION,\n    ...(asRecord(raw.session) as AthenaAuthSessionOptions | undefined),\n  };\n  const securityRaw = asRecord(raw.security) ?? {};\n  const organizations = asRecord(raw.organizations);\n  const passkeyConfigured = Object.hasOwn(raw, \"passkey\");\n  const passkey = normalizePasskeyConfig(raw.passkey);\n  assertSocialConfigObject(\"social\", raw.social);\n  assertSocialConfigObject(\"oauth\", raw.oauth);\n  assertSocialConfigObject(\"socialProviders\", raw.socialProviders);\n  const social = normalizeSocialFromRaw(raw);\n  const envForIdentity = options.env ?? process.env;\n  const appIdentity =\n    options.identity !== undefined\n      ? options.identity\n      : resolveAthenaAppIdentity({\n          app: options.app,\n          env: envForIdentity,\n          required: false,\n        });\n  const identityOrigins = appIdentity ? [appIdentity.origin] : [];\n  const explicitTrustedOrigins = Array.isArray(securityRaw.trustedOrigins)\n    ? securityRaw.trustedOrigins.filter(\n        (value): value is string => typeof value === \"string\",\n      )\n    : [];\n\n  return {\n    appIdentity,\n    autoMigrate: raw.autoMigrate === true,\n    basePath: asString(raw.basePath) ?? ATHENA_AUTH_DEFAULT_BASE_PATH,\n    bridge: normalizeBridgeConfig(raw.bridge),\n    emailAndPassword: {\n      autoSignIn: emailAndPassword.autoSignIn !== false,\n      enabled: emailAndPassword.enabled !== false,\n      maxPasswordLength: emailAndPassword.maxPasswordLength ?? 128,\n      minPasswordLength: emailAndPassword.minPasswordLength ?? 8,\n      requireEmailVerification:\n        emailAndPassword.requireEmailVerification === true,\n    },\n    execution,\n    organizationsEnabled: organizations?.enabled !== false,\n    passkey,\n    passkeyConfigured,\n    social,\n    routing:\n      execution === \"local\"\n        ? \"same-origin\"\n        : (asString(raw.routing) as AthenaAuthHttpRouting | undefined),\n    secret: asString(raw.secret),\n    security: {\n      bodyLimitBytes:\n        typeof securityRaw.bodyLimitBytes === \"number\"\n          ? securityRaw.bodyLimitBytes\n          : 1_048_576,\n      cookieSecure:\n        securityRaw.cookieSecure === false ||\n        securityRaw.cookieSecure === true ||\n        securityRaw.cookieSecure === \"auto\"\n          ? securityRaw.cookieSecure\n          : \"auto\",\n      trustedOrigins: mergeTrustedOrigins(\n        explicitTrustedOrigins,\n        passkey.origins,\n        identityOrigins,\n      ),\n      trustedProxy: securityRaw.trustedProxy === true,\n    },\n    session: {\n      cookieName: session.cookieName || DEFAULT_SESSION.cookieName,\n      disableSessionRefresh: session.disableSessionRefresh === true,\n      expiresInSeconds:\n        session.expiresInSeconds ?? DEFAULT_SESSION.expiresInSeconds,\n      updateAgeSeconds:\n        session.updateAgeSeconds ?? DEFAULT_SESSION.updateAgeSeconds,\n    },\n    observability: normalizeAthenaAuthObservability(\n      asRecord(raw.observability) as AthenaAuthObservabilityConfig | undefined,\n    ),\n    upstreamUrl: asString(raw.upstreamUrl),\n    url: asString(raw.url),\n    warnings,\n  };\n}\n\nexport function isLocalAthenaAuthConfig(input?: unknown): boolean {\n  return normalizeAthenaAuthConfig(input).execution === \"local\";\n}\n\nexport function isDisabledAthenaAuthConfig(input?: unknown): boolean {\n  return normalizeAthenaAuthConfig(input).execution === \"disabled\";\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n\tisDisabledAthenaAuthConfig,\n\tisLocalAthenaAuthConfig,\n} from \"../config.ts\";\n\nexport function assertLocalAuthHooks(auth: unknown): void {\n\tif (!auth || typeof auth !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = auth as Record<string, unknown>;\n\tif (!(\"hooks\" in raw) || raw.hooks === undefined) {\n\t\treturn;\n\t}\n\tif (isDisabledAthenaAuthConfig(auth) || !isLocalAthenaAuthConfig(auth)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME\",\n\t\t\t'auth.hooks is an embedded-auth capability. Set auth.mode to \"local\" or omit hooks for remote Auth.',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n","/**\n * Access Node env without referencing the bare `process` global name.\n * Keeps DTS/tsup builds green when `@types/node` is not on the type path\n * (Cloudflare Workers Builds for consumers that compile monorepo athena-js).\n */\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcess(): { env?: ProcessEnvLike } | undefined {\n  return (globalThis as { process?: { env?: ProcessEnvLike } }).process;\n}\n\nexport function getProcessEnv(): ProcessEnvLike | undefined {\n  return getProcess()?.env;\n}\n\nexport function getNodeEnv(): string | undefined {\n  return getProcessEnv()?.NODE_ENV;\n}\n\nexport function isNodeProductionEnv(): boolean {\n  return getNodeEnv() === \"production\";\n}\n\nexport function getProcessEnvVar(key: string): string | undefined {\n  return getProcessEnv()?.[key];\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\t\"ATHENA_AUTH_UPSTREAM_URL\",\n\t\"ATHENA_AUTH_URL\",\n\t\"NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL\",\n\t\"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\t(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\tRecord<AthenaAuthUpstreamEnvKey, string | undefined>\n> &\n\tEnvLike;\n\nexport interface AthenaAuthClientBaseUrlOptions {\n\t/**\n\t * When `true` (default), ensure the client base ends with `/api/auth`.\n\t * Set `false` when the auth server is mounted at a custom path or root.\n\t */\n\tappendAuthPath?: boolean;\n}\n\nconst LEADING_SLASHES_REGEX = /^\\/+/;\n\nfunction stripTrailingSlashes(value: string): string {\n\treturn value.replace(/\\/+$/g, \"\");\n}\n\nfunction ensureLeadingSlash(value: string): string {\n\treturn value.startsWith(\"/\") ? value : `/${value}`;\n}\n\nfunction ensureAthenaAuthPath(pathname: string): string {\n\tconst normalizedPath = stripTrailingSlashes(\n\t\tensureLeadingSlash(pathname.trim()),\n\t);\n\n\tif (!normalizedPath || normalizedPath === \"/\") {\n\t\treturn ATHENA_AUTH_PATH;\n\t}\n\n\tif (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n\t\treturn normalizedPath;\n\t}\n\n\treturn `${normalizedPath}${ATHENA_AUTH_PATH}`;\n}\n\nfunction stripAthenaAuthPath(pathname: string): string {\n\tconst normalizedPath = stripTrailingSlashes(\n\t\tensureLeadingSlash(pathname.trim()),\n\t);\n\n\tif (!normalizedPath || normalizedPath === \"/\") {\n\t\treturn \"/\";\n\t}\n\n\tif (normalizedPath === ATHENA_AUTH_PATH) {\n\t\treturn \"/\";\n\t}\n\n\tif (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n\t\tconst withoutAuthPath = normalizedPath.slice(0, -ATHENA_AUTH_PATH.length);\n\t\treturn withoutAuthPath ? ensureLeadingSlash(withoutAuthPath) : \"/\";\n\t}\n\n\treturn normalizedPath;\n}\n\nfunction readProcessEnv(): EnvLike | undefined {\n\ttry {\n\t\tconst maybeProcess = (globalThis as { process?: { env?: EnvLike } })\n\t\t\t.process;\n\t\treturn maybeProcess?.env;\n\t} catch {\n\t\t// Restricted runtimes may throw when reading process.\n\t}\n\treturn undefined;\n}\n\nfunction getBrowserOrigin(): string | undefined {\n\ttry {\n\t\tconst origin = (\n\t\t\tglobalThis as { window?: { location?: { origin?: string } } }\n\t\t).window?.location?.origin;\n\t\treturn typeof origin === \"string\" && origin.length > 0 ? origin : undefined;\n\t} catch {\n\t\t// Non-browser or restricted runtimes may throw on window access.\n\t}\n\treturn undefined;\n}\n\n/**\n * Returns `true` when the value is an absolute `http://` or `https://` URL.\n */\nexport function isAbsoluteUrl(value: string): boolean {\n\tconst trimmed = value.trim();\n\treturn 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\tenv: EnvLike,\n): string | undefined {\n\tfor (const key of ATHENA_AUTH_UPSTREAM_ENV_KEYS) {\n\t\tconst value = env[key]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveConfiguredAthenaAuthUpstreamUrl(\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string | undefined {\n\tif (typeof rawUpstreamUrl === \"string\") {\n\t\tconst trimmed = rawUpstreamUrl.trim();\n\t\treturn trimmed || undefined;\n\t}\n\n\tif (rawUpstreamUrl) {\n\t\treturn readAthenaAuthUpstreamUrlFromEnv(rawUpstreamUrl);\n\t}\n\n\tconst processEnv = readProcessEnv();\n\treturn 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\tconst trimmed = urlOrPath.trim();\n\n\tif (!trimmed) {\n\t\treturn ATHENA_AUTH_PATH;\n\t}\n\n\tif (isAbsoluteUrl(trimmed)) {\n\t\tconst url = new URL(trimmed);\n\t\turl.pathname = ensureAthenaAuthPath(url.pathname);\n\t\turl.search = \"\";\n\t\turl.hash = \"\";\n\t\treturn stripTrailingSlashes(url.toString());\n\t}\n\n\treturn 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\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tconst configuredUpstream =\n\t\tresolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl) ||\n\t\tDEFAULT_ATHENA_AUTH_ORIGIN;\n\n\tif (isAbsoluteUrl(configuredUpstream)) {\n\t\tconst upstreamUrl = new URL(configuredUpstream);\n\t\tupstreamUrl.pathname = stripAthenaAuthPath(upstreamUrl.pathname);\n\t\tupstreamUrl.search = \"\";\n\t\tupstreamUrl.hash = \"\";\n\t\treturn stripTrailingSlashes(upstreamUrl.toString());\n\t}\n\n\tconst normalizedPath = stripAthenaAuthPath(configuredUpstream);\n\treturn stripTrailingSlashes(\n\t\tnew URL(normalizedPath, LOCAL_DEV_ORIGIN).toString(),\n\t);\n}\n\nfunction resolveBrowserFacingOrigin(\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tif (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n\t\treturn `${resolveAthenaAuthUpstreamUrl(rawUpstreamUrl)}/`;\n\t}\n\n\tconst browserOrigin = getBrowserOrigin();\n\tif (browserOrigin) {\n\t\treturn `${browserOrigin}/`;\n\t}\n\n\treturn `${LOCAL_DEV_ORIGIN}/`;\n}\n\nfunction resolvePreservedAthenaAuthBaseUrl(\n\tconfiguredAuthBaseUrl: string,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n\tconst trimmed = configuredAuthBaseUrl.trim();\n\tconst preservedConfiguredBaseUrl = trimmed || ATHENA_AUTH_PATH;\n\n\tif (isAbsoluteUrl(preservedConfiguredBaseUrl)) {\n\t\treturn stripTrailingSlashes(preservedConfiguredBaseUrl);\n\t}\n\n\treturn stripTrailingSlashes(\n\t\tnew URL(\n\t\t\tensureLeadingSlash(preservedConfiguredBaseUrl),\n\t\t\tresolveBrowserFacingOrigin(rawUpstreamUrl),\n\t\t).toString(),\n\t);\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\tconfiguredAuthBaseUrl?: string | EnvLike,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions?: AthenaAuthClientBaseUrlOptions,\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n\tconfiguredAuthBaseUrl: string,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions?: AthenaAuthClientBaseUrlOptions,\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n\tconfiguredAuthBaseUrl?: string | EnvLike,\n\trawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n\toptions: AthenaAuthClientBaseUrlOptions = {},\n): string {\n\tlet baseInput: string;\n\n\tif (typeof configuredAuthBaseUrl === \"string\") {\n\t\tbaseInput = configuredAuthBaseUrl;\n\t} else if (configuredAuthBaseUrl) {\n\t\tbaseInput =\n\t\t\treadAthenaAuthUpstreamUrlFromEnv(configuredAuthBaseUrl) ??\n\t\t\tATHENA_AUTH_PATH;\n\t} else {\n\t\tconst fromEnv = resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl);\n\t\tbaseInput = fromEnv ?? ATHENA_AUTH_PATH;\n\t}\n\n\tif (options.appendAuthPath === false) {\n\t\treturn resolvePreservedAthenaAuthBaseUrl(baseInput, rawUpstreamUrl);\n\t}\n\n\tconst normalizedConfiguredBaseUrl = normalizeAthenaAuthBaseUrl(baseInput);\n\n\tif (isAbsoluteUrl(normalizedConfiguredBaseUrl)) {\n\t\treturn normalizedConfiguredBaseUrl;\n\t}\n\n\tconst browserOrigin = getBrowserOrigin();\n\tif (browserOrigin) {\n\t\treturn stripTrailingSlashes(\n\t\t\tnew URL(normalizedConfiguredBaseUrl, browserOrigin).toString(),\n\t\t);\n\t}\n\n\tif (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n\t\t// Direct upstream without proxy path: origin only (no /api/auth) when\n\t\t// the configured base was relative — server-side absolute upstream.\n\t\tconst upstream = resolveAthenaAuthUpstreamUrl(rawUpstreamUrl);\n\t\treturn stripTrailingSlashes(\n\t\t\tnew URL(ATHENA_AUTH_PATH, `${upstream}/`).toString(),\n\t\t);\n\t}\n\n\treturn stripTrailingSlashes(\n\t\tnew URL(normalizedConfiguredBaseUrl, LOCAL_DEV_ORIGIN).toString(),\n\t);\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\tpath: string,\n\trawBaseUrl?: string | EnvLike,\n): string {\n\tconst normalizedPath = path.replace(LEADING_SLASHES_REGEX, \"\");\n\tconst base = resolveAthenaAuthClientBaseUrl(rawBaseUrl);\n\treturn 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 =\n\t\"disableCookieCache\";\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_PARAM =\n\tATHENA_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\tATHENA_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\trawBaseUrl?: string | EnvLike,\n): string {\n\treturn 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\tconst url = new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, baseUrl);\n\turl.searchParams.set(\n\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n\t);\n\treturn url;\n}\n","/**\n * Athena Auth routing policy (single authority).\n *\n * Dependency direction (do not invert):\n *   primitive URL helpers (athena-auth-url.ts)\n *           ↓\n *   this module (mode / upstream / browser base policy)\n *           ↓\n *   createClient / Next proxy / inspectAuth\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { isNodeProductionEnv } from \"../node-env.ts\";\nimport {\n  ATHENA_AUTH_PATH,\n  DEFAULT_ATHENA_AUTH_ORIGIN,\n  type EnvLike,\n  isAbsoluteUrl,\n  normalizeAthenaAuthBaseUrl,\n  readAthenaAuthUpstreamUrlFromEnv,\n} from \"../utils/athena-auth-url.ts\";\nimport type { AthenaAuthCredentials } from \"./types.ts\";\n\nexport type AthenaAuthRoutingMode =\n  | \"same-origin\"\n  | \"direct\"\n  | \"custom\"\n  | \"legacy\";\n\nexport type AthenaAuthRoutingIntent = \"same-origin\" | \"direct\" | \"custom\";\n\n/**\n * Normalized auth routing for one createClient config.\n * Names are consumer-oriented to avoid \"client\" ambiguity.\n */\nexport interface ResolvedAthenaAuthRouting {\n  mode: AthenaAuthRoutingMode;\n  /** Browser auth module base (e.g. `/api/auth` or absolute direct host). */\n  browserRequestBaseUrl: string;\n  /** Absolute app-origin auth base when request origin is known. */\n  serverRequestBaseUrl?: string;\n  /** Upstream origin for the same-origin proxy (no trailing slash). */\n  proxyUpstreamBaseUrl?: string;\n  credentials: AthenaAuthCredentials;\n  warnings: string[];\n}\n\nexport interface ResolveAthenaAuthRoutingInput {\n  /** Execution runtime. Local mode is same-origin without a remote upstream. */\n  execution?: \"local\" | \"remote\";\n  /** Explicit auth.url from createClient config. */\n  url?: string | null;\n  /** Explicit same-origin proxy upstream. */\n  upstreamUrl?: string | null;\n  routing?: AthenaAuthRoutingIntent;\n  credentials?: AthenaAuthCredentials;\n  env?: EnvLike;\n  /**\n   * Unified gateway root used by legacy resolveService path\n   * (`${root}/auth` when no explicit auth url/env).\n   */\n  rootUrl?: string | null;\n  /**\n   * When true, explicit absolute root wins over env service URLs\n   * (matches createClient resolveCore).\n   */\n  explicitRootWinsOverEnvServices?: boolean;\n  /** Public app origin for serverRequestBaseUrl (e.g. https://app.example.com). */\n  requestOrigin?: string | null;\n  /** Emit console warnings for deprecations (default: non-production). */\n  emitWarnings?: boolean;\n}\n\nconst DUPLICATE_AUTH_PATH = /(?:\\/api\\/auth){2,}|\\/auth\\/auth(?:\\/|$)/i;\nconst LEADING_SLASHES = /^\\/+/;\n\nfunction stripTrailingSlashes(value: string): string {\n  return value.replace(/\\/+$/g, \"\");\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined,\n): string | undefined {\n  const normalized = value?.trim();\n  return normalized || undefined;\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return url.protocol === \"http:\" || url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction readFirstEnvHttpUrl(\n  env: EnvLike | undefined,\n  keys: readonly string[],\n): string | undefined {\n  if (!env) {\n    return undefined;\n  }\n  for (const key of keys) {\n    const value = env[key]?.trim();\n    if (value && isAbsoluteHttpUrl(value)) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\n/** createClient legacy auth env keys (absolute only). */\nexport const LEGACY_CREATE_CLIENT_AUTH_ENV_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\n\n/**\n * Detect doubled auth path segments that would produce `/api/auth/api/auth`.\n */\nexport function hasDuplicateAthenaAuthPath(urlOrPath: string): boolean {\n  const trimmed = urlOrPath.trim();\n  if (!trimmed) {\n    return false;\n  }\n  if (DUPLICATE_AUTH_PATH.test(trimmed)) {\n    return true;\n  }\n  try {\n    if (isAbsoluteUrl(trimmed)) {\n      const path = new URL(trimmed).pathname;\n      return (\n        DUPLICATE_AUTH_PATH.test(path) || /(?:\\/api\\/auth){2,}/i.test(path)\n      );\n    }\n  } catch {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Assert a user-supplied auth URL/path is structurally valid.\n * Throws {@link AthenaConfigurationError} with ATHENA_AUTH_INVALID_URL or DUPLICATE_PATH.\n */\nexport function assertValidAthenaAuthUrlShape(\n  value: string,\n  label = \"Athena auth URL\",\n): void {\n  const trimmed = value.trim();\n  if (!trimmed || trimmed === \"undefined\" || trimmed === \"null\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} is empty or invalid. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (\n    trimmed === \"http://\" ||\n    trimmed === \"https://\" ||\n    trimmed.startsWith(\"undefined/\") ||\n    trimmed.startsWith(\"null/\")\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} is not a usable URL. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (hasDuplicateAthenaAuthPath(trimmed)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_DUPLICATE_PATH\",\n      `${label} contains a duplicated auth path segment (e.g. /api/auth/api/auth). Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (isAbsoluteUrl(trimmed) && !isAbsoluteHttpUrl(trimmed)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_INVALID_URL\",\n      `${label} must use http or https. Received ${JSON.stringify(value)}.`,\n      \"auth\",\n    );\n  }\n  if (isAbsoluteUrl(trimmed)) {\n    try {\n      // eslint-disable-next-line no-new\n      new URL(trimmed);\n    } catch {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        `${label} is not a valid absolute URL. Received ${JSON.stringify(value)}.`,\n        \"auth\",\n      );\n    }\n  }\n}\n\n/**\n * Strip trailing `/api/auth` from an absolute upstream URL → origin (+ optional base path).\n * Relative paths return as-is after slash normalize.\n */\nexport function toProxyUpstreamBaseUrl(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return DEFAULT_ATHENA_AUTH_ORIGIN;\n  }\n  if (isAbsoluteHttpUrl(trimmed)) {\n    const url = new URL(trimmed);\n    const path = stripTrailingSlashes(url.pathname || \"/\");\n    if (path === ATHENA_AUTH_PATH || path.endsWith(ATHENA_AUTH_PATH)) {\n      url.pathname =\n        path === ATHENA_AUTH_PATH\n          ? \"/\"\n          : path.slice(0, -ATHENA_AUTH_PATH.length) || \"/\";\n    }\n    url.search = \"\";\n    url.hash = \"\";\n    return stripTrailingSlashes(url.toString());\n  }\n  return stripTrailingSlashes(\n    trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`,\n  );\n}\n\n/**\n * Legacy createClient auth base (matches resolveService before routing modes).\n *\n * Precedence:\n * 1. explicit `auth.url` (any non-empty string, including relative — historically\n *    only absolute survived gateway normalize; relative now rejected later or accepted for same-origin)\n * 2. when explicit absolute root wins: `${root}/auth`\n * 3. env `ATHENA_AUTH_URL` | `NEXT_PUBLIC_ATHENA_AUTH_URL` (absolute http(s) only)\n * 4. `${root}/auth` when root is set\n */\nexport function resolveLegacyCreateClientAuthUrl(input: {\n  explicitUrl?: string | null;\n  env?: EnvLike;\n  rootUrl?: string | null;\n  explicitRootWinsOverEnvServices?: boolean;\n}): string | undefined {\n  const explicit = normalizeOptional(input.explicitUrl);\n  if (explicit) {\n    return explicit;\n  }\n  const root = normalizeOptional(input.rootUrl);\n  if (\n    input.explicitRootWinsOverEnvServices &&\n    root &&\n    isAbsoluteHttpUrl(root)\n  ) {\n    return appendPath(root, \"auth\");\n  }\n  const fromEnv = readFirstEnvHttpUrl(\n    input.env,\n    LEGACY_CREATE_CLIENT_AUTH_ENV_KEYS,\n  );\n  if (fromEnv) {\n    return fromEnv;\n  }\n  if (root && isAbsoluteHttpUrl(root)) {\n    return appendPath(root, \"auth\");\n  }\n  return undefined;\n}\n\nfunction resolveUpstreamCandidate(input: ResolveAthenaAuthRoutingInput): {\n  value?: string;\n  source: \"upstreamUrl\" | \"url-compat\" | \"env\" | \"default\" | \"none\";\n} {\n  const explicitUpstream = normalizeOptional(input.upstreamUrl);\n  if (explicitUpstream) {\n    return { source: \"upstreamUrl\", value: explicitUpstream };\n  }\n\n  const explicitUrl = normalizeOptional(input.url);\n  if (explicitUrl && isAbsoluteHttpUrl(explicitUrl)) {\n    return { source: \"url-compat\", value: explicitUrl };\n  }\n\n  if (input.env) {\n    const fromEnv = readAthenaAuthUpstreamUrlFromEnv(input.env);\n    if (fromEnv) {\n      return { source: \"env\", value: fromEnv };\n    }\n  }\n\n  return { source: \"none\" };\n}\n\nfunction buildServerRequestBaseUrl(\n  browserRequestBaseUrl: string,\n  requestOrigin?: string | null,\n): string | undefined {\n  const origin = normalizeOptional(requestOrigin);\n  if (!origin) {\n    return undefined;\n  }\n  if (isAbsoluteHttpUrl(browserRequestBaseUrl)) {\n    return stripTrailingSlashes(browserRequestBaseUrl);\n  }\n  const path = browserRequestBaseUrl.startsWith(\"/\")\n    ? browserRequestBaseUrl\n    : `/${browserRequestBaseUrl}`;\n  return stripTrailingSlashes(new URL(path, `${origin}/`).toString());\n}\n\nfunction defaultCredentials(\n  explicit?: AthenaAuthCredentials,\n): AthenaAuthCredentials {\n  // Cookie sessions are the default for all routing modes (matches callAuthEndpoint).\n  // Mode-specific defaults can be layered here later if needed.\n  return explicit ?? \"include\";\n}\n\nfunction emitWarning(message: string, enabled: boolean): void {\n  if (!enabled) {\n    return;\n  }\n  console.warn(`[athena] ${message}`);\n}\n\n/**\n * Resolve auth routing policy for createClient and Next adapters.\n *\n * Policy lives only here — URL string helpers remain policy-free.\n */\nexport function resolveAthenaAuthRouting(\n  input: ResolveAthenaAuthRoutingInput = {},\n): ResolvedAthenaAuthRouting {\n  const warnings: string[] = [];\n  const emit = input.emitWarnings ?? !isNodeProductionEnv();\n  const credentials = defaultCredentials(input.credentials);\n\n  if (input.execution === \"local\") {\n    const browserRequestBaseUrl = ATHENA_AUTH_PATH;\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"same-origin\",\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  const routing = input.routing;\n  const mode: AthenaAuthRoutingMode = routing ?? \"legacy\";\n\n  if (mode === \"same-origin\") {\n    const browserRequestBaseUrl = ATHENA_AUTH_PATH;\n    assertValidAthenaAuthUrlShape(\n      browserRequestBaseUrl,\n      \"Same-origin auth base\",\n    );\n\n    const upstream = resolveUpstreamCandidate(input);\n    let proxyUpstreamBaseUrl: string | undefined;\n\n    if (upstream.value) {\n      assertValidAthenaAuthUrlShape(upstream.value, \"Athena auth upstream URL\");\n      proxyUpstreamBaseUrl = toProxyUpstreamBaseUrl(upstream.value);\n\n      if (upstream.source === \"url-compat\") {\n        const message =\n          \"Deprecated interpretation: auth.url is being treated as auth.upstreamUrl under same-origin routing. \" +\n          'Use auth: { routing: \"same-origin\", upstreamUrl: \"https://auth.example.com\" } instead.';\n        warnings.push(message);\n        emitWarning(message, emit);\n      }\n    } else {\n      // Same-origin `/api/auth` is valid without a remote proxy (embedded Auth /\n      // Next discovery). Keep the gap on `warnings` for inspectAuth; do not\n      // console.warn on every createClient — proxy handlers fail closed with\n      // ATHENA_AUTH_UPSTREAM_REQUIRED if they are actually mounted.\n      warnings.push(\n        'auth.routing \"same-origin\" has no proxy upstream. Set auth.upstreamUrl ' +\n          \"or ATHENA_AUTH_UPSTREAM_URL (or aliases) before mounting createAthenaAuthProxyHandlers.\",\n      );\n    }\n\n    const serverRequestBaseUrl = buildServerRequestBaseUrl(\n      browserRequestBaseUrl,\n      input.requestOrigin,\n    );\n\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"same-origin\",\n      proxyUpstreamBaseUrl,\n      serverRequestBaseUrl,\n      warnings,\n    };\n  }\n\n  if (mode === \"direct\") {\n    const explicitUrl = normalizeOptional(input.url);\n    if (!explicitUrl) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        'auth.routing \"direct\" requires auth.url (absolute Athena Auth base).',\n        \"auth\",\n      );\n    }\n    assertValidAthenaAuthUrlShape(explicitUrl, \"auth.url\");\n    // Guaranteed by policy (not only by normalize): direct never accepts relative bases.\n    if (!isAbsoluteHttpUrl(explicitUrl)) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_AUTH_INVALID_URL\",\n        'auth.routing \"direct\" requires an absolute http(s) auth.url. ' +\n        `Received ${JSON.stringify(explicitUrl)}. Use routing: \"same-origin\" for relative /api/auth.`,\n        \"auth\",\n      );\n    }\n    const browserRequestBaseUrl = normalizeAthenaAuthBaseUrl(explicitUrl);\n    assertValidAthenaAuthUrlShape(\n      browserRequestBaseUrl,\n      \"Resolved direct auth base\",\n    );\n\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"direct\",\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  if (mode === \"custom\") {\n    const explicitUrl = normalizeOptional(input.url);\n    const browserRequestBaseUrl = explicitUrl\n      ? explicitUrl.replace(/\\/+$/, \"\") || ATHENA_AUTH_PATH\n      : ATHENA_AUTH_PATH;\n    if (explicitUrl) {\n      assertValidAthenaAuthUrlShape(explicitUrl, \"auth.url\");\n    }\n    const upstream = normalizeOptional(input.upstreamUrl);\n    return {\n      browserRequestBaseUrl,\n      credentials,\n      mode: \"custom\",\n      proxyUpstreamBaseUrl: upstream\n        ? toProxyUpstreamBaseUrl(upstream)\n        : undefined,\n      serverRequestBaseUrl: buildServerRequestBaseUrl(\n        browserRequestBaseUrl,\n        input.requestOrigin,\n      ),\n      warnings,\n    };\n  }\n\n  // --- legacy (routing omitted) ---\n  const legacyUrl = resolveLegacyCreateClientAuthUrl({\n    env: input.env,\n    explicitRootWinsOverEnvServices: input.explicitRootWinsOverEnvServices,\n    explicitUrl: input.url,\n    rootUrl: input.rootUrl,\n  });\n\n  if (!legacyUrl) {\n    // No auth configured — callers decide whether auth is required.\n    return {\n      browserRequestBaseUrl: \"\",\n      credentials,\n      mode: \"legacy\",\n      warnings,\n    };\n  }\n\n  if (legacyUrl && (legacyUrl.includes(\"undefined\") || legacyUrl === \"null\")) {\n    assertValidAthenaAuthUrlShape(legacyUrl, \"auth.url\");\n  }\n  // Relative legacy bases were historically rejected later by gateway normalize;\n  // still validate absolute shapes and duplicate paths when absolute.\n  if (isAbsoluteUrl(legacyUrl) || legacyUrl.startsWith(\"/\")) {\n    try {\n      assertValidAthenaAuthUrlShape(legacyUrl, \"auth.url\");\n    } catch (error) {\n      // Preserve legacy: empty/invalid relative strings that never reached auth\n      // still throw on use; only hard-fail clear absolute garbage.\n      if (\n        error instanceof AthenaConfigurationError &&\n        (error.code === \"ATHENA_AUTH_DUPLICATE_PATH\" ||\n          (isAbsoluteUrl(legacyUrl) &&\n            error.code === \"ATHENA_AUTH_INVALID_URL\"))\n      ) {\n        throw error;\n      }\n    }\n  }\n\n  return {\n    browserRequestBaseUrl: legacyUrl,\n    credentials,\n    mode: \"legacy\",\n    serverRequestBaseUrl: buildServerRequestBaseUrl(\n      legacyUrl,\n      input.requestOrigin,\n    ),\n    warnings,\n  };\n}\n\n/** WeakMap so request views / proxies can read routing without public config leaks. */\nconst authRoutingByClient = new WeakMap<object, ResolvedAthenaAuthRouting>();\n\n/** Survives duplicate `@xylex-group/athena` copies (root vs `next/server` webpack graphs). */\nconst AUTH_ROUTING = Symbol.for(\"@xylex-group/athena.authRouting\");\n\ntype ClientWithRouting = object & {\n  [AUTH_ROUTING]?: ResolvedAthenaAuthRouting;\n};\n\nexport function attachAthenaAuthRouting(\n  client: object,\n  routing: ResolvedAthenaAuthRouting,\n): void {\n  authRoutingByClient.set(client, routing);\n  try {\n    Object.defineProperty(client, AUTH_ROUTING, {\n      configurable: true,\n      enumerable: false,\n      value: routing,\n      writable: true,\n    });\n  } catch {\n    // Frozen withContext() views still keep routing on the WeakMap.\n  }\n}\n\nexport function getAttachedAthenaAuthRouting(\n  client: object,\n): ResolvedAthenaAuthRouting | undefined {\n  return (\n    authRoutingByClient.get(client) ??\n    (client as ClientWithRouting)[AUTH_ROUTING]\n  );\n}\n\n/**\n * Safe public diagnostics snapshot (no secrets).\n */\nexport interface AthenaAuthDiagnostics {\n  authConfigured: boolean;\n  browserRequestBaseUrl: string | null;\n  credentials: AthenaAuthCredentials | null;\n  mode: AthenaAuthRoutingMode | null;\n  proxyUpstreamBaseUrl: string | null;\n  requestOrigin: string | null;\n  serverRequestBaseUrl: string | null;\n  bearerDetected: boolean;\n  cookieDetected: boolean;\n  sessionTokenDetected: boolean;\n  warnings: string[];\n}\n\nexport function toAthenaAuthDiagnostics(\n  routing: ResolvedAthenaAuthRouting | undefined,\n  context?: {\n    requestOrigin?: string | null;\n    cookie?: string | null;\n    bearerToken?: string | null;\n    sessionToken?: string | null;\n  },\n): AthenaAuthDiagnostics {\n  const requestOrigin = normalizeOptional(context?.requestOrigin) ?? null;\n  const browser = routing?.browserRequestBaseUrl\n    ? routing.browserRequestBaseUrl\n    : null;\n  const server =\n    routing && requestOrigin\n      ? (buildServerRequestBaseUrl(\n        routing.browserRequestBaseUrl,\n        requestOrigin,\n      ) ??\n        routing.serverRequestBaseUrl ??\n        null)\n      : (routing?.serverRequestBaseUrl ?? null);\n\n  return {\n    authConfigured: Boolean(browser),\n    bearerDetected: Boolean(normalizeOptional(context?.bearerToken)),\n    browserRequestBaseUrl: browser,\n    cookieDetected: Boolean(normalizeOptional(context?.cookie)),\n    credentials: routing?.credentials ?? null,\n    mode: routing?.mode ?? null,\n    proxyUpstreamBaseUrl: routing?.proxyUpstreamBaseUrl ?? null,\n    requestOrigin,\n    serverRequestBaseUrl: server,\n    sessionTokenDetected: Boolean(normalizeOptional(context?.sessionToken)),\n    warnings: routing?.warnings ? [...routing.warnings] : [],\n  };\n}\n\n/**\n * Thin extract of explicit `auth.routing` / `auth.url` / `auth: false`.\n * Does not infer embedded Auth or invent Next discovery endpoints.\n */\nexport function resolveExplicitAuthRouting(\n  auth?:\n    | false\n    | {\n      credentials?: AthenaAuthCredentials;\n      routing?: AthenaAuthRoutingIntent;\n      upstreamUrl?: string | null;\n      url?: string | null;\n    }\n    | null,\n): ResolvedAthenaAuthRouting | undefined {\n  if (auth === false || auth == null || typeof auth !== \"object\") {\n    return undefined;\n  }\n  if (\n    auth.routing === \"same-origin\" ||\n    auth.routing === \"direct\" ||\n    auth.routing === \"custom\"\n  ) {\n    return resolveAthenaAuthRouting({\n      credentials: auth.credentials,\n      emitWarnings: false,\n      routing: auth.routing,\n      upstreamUrl: auth.upstreamUrl,\n      url: auth.url,\n    });\n  }\n  const explicitUrl = normalizeOptional(auth.url);\n  if (!explicitUrl) {\n    return undefined;\n  }\n  return resolveAthenaAuthRouting({\n    credentials: auth.credentials,\n    emitWarnings: false,\n    routing: \"custom\",\n    upstreamUrl: auth.upstreamUrl,\n    url: explicitUrl,\n  });\n}\n\n/** @internal re-export helper for path joins without policy */\nexport function joinAuthPath(base: string, segment: string): string {\n  const path = segment.replace(LEADING_SLASHES, \"\");\n  if (isAbsoluteHttpUrl(base) || base.startsWith(\"http\")) {\n    return new URL(path, `${stripTrailingSlashes(base)}/`).toString();\n  }\n  const root = base.startsWith(\"/\") ? base : `/${base}`;\n  return `${stripTrailingSlashes(root)}/${path}`;\n}\n","import type {\n\tBillingCapabilities,\n\tBillingOperation,\n\tBillingOperationCapability,\n\tBillingOperationCapabilityReason,\n\tBillingPortName,\n} from \"../capabilities.ts\";\n\nconst PORTS: readonly BillingPortName[] = [\n\t\"payments\",\n\t\"customers\",\n\t\"refunds\",\n\t\"paymentLinks\",\n\t\"subscriptions\",\n\t\"invoices\",\n\t\"webhooks\",\n\t\"products\",\n\t\"prices\",\n\t\"checkout\",\n\t\"self\",\n];\n\nconst SNAKE_TO_OPERATION: Record<string, BillingOperation> = {\n\tcancel_payment: \"payments.cancel\",\n\tcancel_refund: \"refunds.cancel\",\n\tcancel_subscription: \"subscriptions.cancel\",\n\tcreate_customer: \"customers.create\",\n\tcreate_payment: \"payments.create\",\n\tcreate_payment_link: \"paymentLinks.create\",\n\tcreate_refund: \"refunds.create\",\n\tcreate_subscription: \"subscriptions.create\",\n\tcreate_webhook: \"webhooks.create\",\n\tdelete_customer: \"customers.delete\",\n\tdelete_payment_link: \"paymentLinks.delete\",\n\tdelete_webhook: \"webhooks.delete\",\n\tget_customer: \"customers.get\",\n\tget_invoice: \"invoices.get\",\n\tget_payment: \"payments.get\",\n\tget_payment_link: \"paymentLinks.get\",\n\tget_refund: \"refunds.get\",\n\tget_subscription: \"subscriptions.get\",\n\tget_webhook: \"webhooks.get\",\n\tlist_customers: \"customers.list\",\n\tlist_invoices: \"invoices.list\",\n\tlist_payment_links: \"paymentLinks.list\",\n\tlist_payments: \"payments.list\",\n\tlist_refunds: \"refunds.list\",\n\tlist_subscriptions: \"subscriptions.list\",\n\tlist_webhooks: \"webhooks.list\",\n\tlist_products: \"products.list\",\n\tlist_prices: \"prices.list\",\n\tcreate_checkout: \"checkout.create\",\n\ttest_webhook: \"webhooks.test\",\n\tupdate_customer: \"customers.update\",\n\tupdate_payment_link: \"paymentLinks.update\",\n\tupdate_subscription: \"subscriptions.update\",\n\tupdate_webhook: \"webhooks.update\",\n};\n\nconst KEY_TO_OPERATION: Record<string, BillingOperation> = {\n\t\"billing.customers.create\": \"customers.create\",\n\t\"billing.customers.delete\": \"customers.delete\",\n\t\"billing.customers.get\": \"customers.get\",\n\t\"billing.customers.list\": \"customers.list\",\n\t\"billing.customers.update\": \"customers.update\",\n\t\"billing.invoices.get\": \"invoices.get\",\n\t\"billing.invoices.list\": \"invoices.list\",\n\t\"billing.payment_links.create\": \"paymentLinks.create\",\n\t\"billing.payment_links.delete\": \"paymentLinks.delete\",\n\t\"billing.payment_links.get\": \"paymentLinks.get\",\n\t\"billing.payment_links.list\": \"paymentLinks.list\",\n\t\"billing.payment_links.update\": \"paymentLinks.update\",\n\t\"billing.payments.cancel\": \"payments.cancel\",\n\t\"billing.payments.create\": \"payments.create\",\n\t\"billing.payments.get\": \"payments.get\",\n\t\"billing.payments.list\": \"payments.list\",\n\t\"billing.refunds.cancel\": \"refunds.cancel\",\n\t\"billing.refunds.create\": \"refunds.create\",\n\t\"billing.refunds.get\": \"refunds.get\",\n\t\"billing.refunds.list\": \"refunds.list\",\n\t\"billing.subscriptions.cancel\": \"subscriptions.cancel\",\n\t\"billing.subscriptions.create\": \"subscriptions.create\",\n\t\"billing.subscriptions.get\": \"subscriptions.get\",\n\t\"billing.subscriptions.list\": \"subscriptions.list\",\n\t\"billing.subscriptions.update\": \"subscriptions.update\",\n\t\"billing.webhooks.create\": \"webhooks.create\",\n\t\"billing.webhooks.delete\": \"webhooks.delete\",\n\t\"billing.webhooks.get\": \"webhooks.get\",\n\t\"billing.webhooks.list\": \"webhooks.list\",\n\t\"billing.webhooks.test\": \"webhooks.test\",\n\t\"billing.webhooks.update\": \"webhooks.update\",\n\t\"billing.products.list\": \"products.list\",\n\t\"billing.prices.list\": \"prices.list\",\n\t\"billing.checkout.create\": \"checkout.create\",\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\tif (value && typeof value === \"object\") {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn {};\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction asStringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction resolveOperation(entry: Record<string, unknown>): BillingOperation | undefined {\n\tconst operation = asString(entry.operation);\n\tif (operation && operation in SNAKE_TO_OPERATION) {\n\t\treturn SNAKE_TO_OPERATION[operation];\n\t}\n\tif (operation && operation in KEY_TO_OPERATION) {\n\t\treturn KEY_TO_OPERATION[operation];\n\t}\n\tif (\n\t\toperation &&\n\t\t(operation.startsWith(\"payments.\") ||\n\t\t\toperation.startsWith(\"customers.\") ||\n\t\t\toperation.startsWith(\"refunds.\") ||\n\t\t\toperation.startsWith(\"paymentLinks.\") ||\n\t\t\toperation.startsWith(\"subscriptions.\") ||\n\t\t\toperation.startsWith(\"invoices.\") ||\n\t\t\toperation.startsWith(\"webhooks.\") ||\n\t\t\toperation.startsWith(\"products.\") ||\n\t\t\toperation.startsWith(\"prices.\") ||\n\t\t\toperation.startsWith(\"checkout.\") ||\n\t\t\toperation.startsWith(\"self.\"))\n\t) {\n\t\treturn operation as BillingOperation;\n\t}\n\tconst key = asString(entry.key);\n\tif (key && key in KEY_TO_OPERATION) {\n\t\treturn KEY_TO_OPERATION[key];\n\t}\n\treturn undefined;\n}\n\nfunction denialReason(entry: Record<string, unknown>): BillingOperationCapabilityReason {\n\tif (asStringList(entry.missingAthenaRights).length > 0) {\n\t\treturn \"missing_permission\";\n\t}\n\tif (asStringList(entry.missingProviderRequirements).length > 0) {\n\t\treturn \"missing_provider_scope\";\n\t}\n\tif (entry.portAvailable === false) {\n\t\treturn \"unsupported_operation\";\n\t}\n\treturn \"unsupported_operation\";\n}\n\nfunction projectPorts(raw: unknown): BillingCapabilities[\"ports\"] {\n\tconst record = asRecord(raw);\n\tconst ports = {} as BillingCapabilities[\"ports\"];\n\tfor (const name of PORTS) {\n\t\tports[name] = record[name] === true;\n\t}\n\treturn ports;\n}\n\n/**\n * Project GET /billing/v1/capabilities onto BillingCapabilities.\n * Never synthesize all-available; missing operations stay fail-closed.\n */\nexport function projectRemoteBillingCapabilities(\n\tdata: unknown,\n\tconnectionId: string,\n): BillingCapabilities {\n\tconst envelope = asRecord(data);\n\tconst nested = asRecord(envelope.capabilities);\n\tconst status = asString(nested.status);\n\tconst connected =\n\t\tnested.connected === true || status === \"active\";\n\tconst operations: Partial<\n\t\tRecord<BillingOperation, BillingOperationCapability>\n\t> = {};\n\tconst actions = Array.isArray(envelope.actionCapabilities)\n\t\t? envelope.actionCapabilities\n\t\t: [];\n\tfor (const raw of actions) {\n\t\tconst entry = asRecord(raw);\n\t\tconst operation = resolveOperation(entry);\n\t\tif (!operation) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.available === true) {\n\t\t\toperations[operation] = { available: true };\n\t\t\tcontinue;\n\t\t}\n\t\toperations[operation] = {\n\t\t\tavailable: false,\n\t\t\treason: denialReason(entry),\n\t\t};\n\t}\n\tconst provider =\n\t\tasString(nested.provider) ?? asString(envelope.provider) ?? \"remote\";\n\treturn {\n\t\tconnected,\n\t\tconnectionId,\n\t\toperations,\n\t\tports: projectPorts(envelope.ports),\n\t\tprovider,\n\t\truntime: \"remote\",\n\t\ttarget: {\n\t\t\tconnectionId,\n\t\t\tkind: \"connection\",\n\t\t\tprovider,\n\t\t},\n\t};\n}\n","export type BillingEnvironmentName = \"test\" | \"live\";\n\nexport interface BillingEnvironment {\n\treadonly testMode: boolean;\n\treadonly name: BillingEnvironmentName;\n}\n\n/** Named live-selection invariant (see billing/safety/environment.ts). */\nexport type BillingLiveCredentialSelection = BillingEnvironment;\n\nexport function billingEnvironmentName(\n\ttestMode: boolean,\n): BillingEnvironmentName {\n\treturn testMode ? \"test\" : \"live\";\n}\n\n/**\n * Canonical Billing environment. Local provider execution defaults to test\n * so a live credential never becomes active merely by existing.\n */\nexport function resolveBillingEnvironment(input?: {\n\ttestMode?: boolean;\n}): BillingEnvironment {\n\tconst testMode = input?.testMode !== false;\n\treturn {\n\t\ttestMode,\n\t\tname: billingEnvironmentName(testMode),\n\t};\n}\n","import {\n\tresolveBillingEnvironment as resolveRuntimeBillingEnvironment,\n\ttype BillingEnvironment,\n} from \"../runtime/environment.ts\";\n\n/**\n * Named live/test invariant: live credentials are never selected because\n * they merely exist. Omitted `testMode` stays test.\n */\nexport type BillingLiveCredentialSelection = BillingEnvironment;\n\nexport type BillingLiveSelectionInvariant = BillingLiveCredentialSelection;\n\nexport function resolveBillingEnvironment(input?: {\n\tcredentials?: { live?: unknown; test?: unknown };\n\ttestMode?: boolean;\n}): BillingLiveCredentialSelection {\n\treturn resolveRuntimeBillingEnvironment({\n\t\ttestMode: input?.testMode,\n\t});\n}\n\nexport function assertBillingLiveCredentialSelection(input?: {\n\tcredentials?: { live?: unknown; test?: unknown };\n\ttestMode?: boolean;\n}): BillingLiveCredentialSelection {\n\treturn resolveBillingEnvironment(input);\n}\n","import type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\n\nfunction row(\n\toperation: BillingOperation,\n\tmutationClass: BillingOperationSafetyProfile[\"mutationClass\"],\n\tidempotency: BillingOperationSafetyProfile[\"idempotency\"],\n\treplayGuarantee: BillingOperationSafetyProfile[\"replayGuarantee\"],\n\tmoney: BillingOperationSafetyProfile[\"money\"],\n\tauthorityMode: BillingOperationSafetyProfile[\"authorityMode\"],\n): BillingOperationSafetyProfile {\n\treturn {\n\t\tauthorityMode,\n\t\tidempotency,\n\t\tmoney,\n\t\tmutationClass,\n\t\toperation,\n\t\tpreflightIsConcurrencyGuarantee: false,\n\t\treplayGuarantee,\n\t};\n}\n\nconst readTrust = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(operation, \"read\", \"not_applicable\", \"none\", \"not_applicable\", \"provider-trust\");\n\nconst financialCreate = (\n\toperation: BillingOperation,\n\tmoney: BillingOperationSafetyProfile[\"money\"],\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"financial_create\",\n\t\t\"required_caller_owned\",\n\t\t\"provider_same_key\",\n\t\tmoney,\n\t\t\"declared-required\",\n\t);\n\nconst financialCancel = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"financial_cancel\",\n\t\t\"not_applicable\",\n\t\t\"none\",\n\t\t\"not_applicable\",\n\t\t\"declared-required\",\n\t);\n\nconst nonFinancialWrite = (\n\toperation: BillingOperation,\n): BillingOperationSafetyProfile =>\n\trow(\n\t\toperation,\n\t\t\"non_financial_write\",\n\t\t\"not_applicable\",\n\t\t\"none\",\n\t\t\"not_applicable\",\n\t\t\"declared-required\",\n\t);\n\nexport const BILLING_OPERATION_SAFETY = {\n\t\"customers.create\": financialCreate(\"customers.create\", \"not_applicable\"),\n\t\"customers.delete\": nonFinancialWrite(\"customers.delete\"),\n\t\"customers.get\": readTrust(\"customers.get\"),\n\t\"customers.list\": readTrust(\"customers.list\"),\n\t\"customers.update\": nonFinancialWrite(\"customers.update\"),\n\t\"invoices.get\": readTrust(\"invoices.get\"),\n\t\"invoices.list\": readTrust(\"invoices.list\"),\n\t\"paymentLinks.create\": financialCreate(\"paymentLinks.create\", \"required\"),\n\t\"paymentLinks.delete\": nonFinancialWrite(\"paymentLinks.delete\"),\n\t\"paymentLinks.get\": readTrust(\"paymentLinks.get\"),\n\t\"paymentLinks.list\": readTrust(\"paymentLinks.list\"),\n\t\"paymentLinks.update\": nonFinancialWrite(\"paymentLinks.update\"),\n\t\"payments.cancel\": financialCancel(\"payments.cancel\"),\n\t\"payments.create\": financialCreate(\"payments.create\", \"required\"),\n\t\"payments.get\": readTrust(\"payments.get\"),\n\t\"payments.list\": readTrust(\"payments.list\"),\n\t\"refunds.cancel\": financialCancel(\"refunds.cancel\"),\n\t\"refunds.create\": financialCreate(\"refunds.create\", \"required\"),\n\t\"refunds.get\": readTrust(\"refunds.get\"),\n\t\"refunds.list\": readTrust(\"refunds.list\"),\n\t\"subscriptions.cancel\": financialCancel(\"subscriptions.cancel\"),\n\t\"subscriptions.create\": financialCreate(\"subscriptions.create\", \"required\"),\n\t\"subscriptions.get\": readTrust(\"subscriptions.get\"),\n\t\"subscriptions.list\": readTrust(\"subscriptions.list\"),\n\t\"subscriptions.update\": nonFinancialWrite(\"subscriptions.update\"),\n\t\"webhooks.create\": nonFinancialWrite(\"webhooks.create\"),\n\t\"webhooks.delete\": nonFinancialWrite(\"webhooks.delete\"),\n\t\"webhooks.get\": readTrust(\"webhooks.get\"),\n\t\"webhooks.list\": readTrust(\"webhooks.list\"),\n\t\"webhooks.test\": nonFinancialWrite(\"webhooks.test\"),\n\t\"webhooks.update\": nonFinancialWrite(\"webhooks.update\"),\n\t\"products.list\": readTrust(\"products.list\"),\n\t\"prices.list\": readTrust(\"prices.list\"),\n\t\"checkout.create\": financialCreate(\"checkout.create\", \"not_applicable\"),\n\t\"self.invoices.list\": readTrust(\"self.invoices.list\"),\n\t\"self.invoices.get\": readTrust(\"self.invoices.get\"),\n\t\"self.payments.list\": readTrust(\"self.payments.list\"),\n\t\"self.payments.get\": readTrust(\"self.payments.get\"),\n\t\"self.subscription.get\": readTrust(\"self.subscription.get\"),\n\t\"self.subscription.cancel\": financialCancel(\"self.subscription.cancel\"),\n\t\"self.subscription.enroll\": financialCreate(\n\t\t\"self.subscription.enroll\",\n\t\t\"not_applicable\",\n\t),\n\t\"self.checkout.create\": financialCreate(\n\t\t\"self.checkout.create\",\n\t\t\"not_applicable\",\n\t),\n\t\"self.checkout.resume\": nonFinancialWrite(\"self.checkout.resume\"),\n\t\"admin.connections.materialize\": nonFinancialWrite(\n\t\t\"admin.connections.materialize\",\n\t),\n\t\"admin.conflicts.resolve\": nonFinancialWrite(\"admin.conflicts.resolve\"),\n\t\"admin.ingestion.health\": readTrust(\"admin.ingestion.health\"),\n\t\"admin.reconciliation.retry\": nonFinancialWrite(\"admin.reconciliation.retry\"),\n\t\"admin.reconciliation.run\": nonFinancialWrite(\"admin.reconciliation.run\"),\n\t\"admin.webhooks.reconcile\": nonFinancialWrite(\"admin.webhooks.reconcile\"),\n\t\"admin.webhooks.status\": readTrust(\"admin.webhooks.status\"),\n\t\"admin.webhooks.verify\": readTrust(\"admin.webhooks.verify\"),\n} as const satisfies Record<BillingOperation, BillingOperationSafetyProfile>;\n","const MAX_IDEMPOTENCY_KEY_LENGTH = 64;\nconst FORBIDDEN_IDEMPOTENCY_CHARS = /[\\u0000-\\u001F\\u007F\\s]/;\n\nexport function assertBillingIdempotencyKey(\n\tkey: unknown,\n): asserts key is string {\n\tif (typeof key !== \"string\" || key.trim() === \"\") {\n\t\tthrow new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_REQUIRED\");\n\t}\n\tconst normalized = key.trim();\n\tif (\n\t\tnormalized.length > MAX_IDEMPOTENCY_KEY_LENGTH ||\n\t\tFORBIDDEN_IDEMPOTENCY_CHARS.test(normalized)\n\t) {\n\t\tthrow new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_INVALID\");\n\t}\n}\n","import { assertBillingIdempotencyKey } from \"./idempotency.ts\";\nimport { assertBillingMoney, normalizeBillingMoney } from \"./money.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\nimport type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport type { BillingMoney } from \"../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requiredNonEmptyString(value: unknown, field: string): string {\n\tif (typeof value !== \"string\" || value.trim() === \"\") {\n\t\tthrow new Error(`ATHENA_BILLING_FIELD_REQUIRED:${field}`);\n\t}\n\treturn value;\n}\n\nfunction requiredMoney(value: unknown): BillingMoney {\n\treturn assertBillingMoney(value);\n}\n\nexport function validateBillingOperationPayload(input: {\n\tdeferIdempotency?: boolean;\n\toperation: BillingOperation;\n\tpayload: unknown;\n\tprofile: BillingOperationSafetyProfile;\n}): Record<string, unknown> {\n\tif (!isRecord(input.payload)) {\n\t\tthrow new Error(\"ATHENA_BILLING_PAYLOAD_INVALID\");\n\t}\n\tconst next: Record<string, unknown> = { ...input.payload };\n\tif (input.profile.money === \"required\") {\n\t\tnext.amount = requiredMoney(next.amount);\n\t} else if (next.amount != null) {\n\t\tnext.amount = normalizeBillingMoney(next.amount);\n\t}\n\tswitch (input.operation) {\n\t\tcase \"refunds.create\":\n\t\t\trequiredNonEmptyString(next.paymentId, \"paymentId\");\n\t\t\tbreak;\n\t\tcase \"paymentLinks.create\":\n\t\t\trequiredNonEmptyString(next.description, \"description\");\n\t\t\tbreak;\n\t\tcase \"subscriptions.create\":\n\t\t\trequiredNonEmptyString(next.customerId, \"customerId\");\n\t\t\trequiredNonEmptyString(next.interval, \"interval\");\n\t\t\trequiredNonEmptyString(next.description, \"description\");\n\t\t\tbreak;\n\t\tcase \"checkout.create\":\n\t\t\trequiredNonEmptyString(next.successUrl, \"successUrl\");\n\t\t\tbreak;\n\t\tcase \"self.checkout.create\":\n\t\t\trequiredNonEmptyString(next.priceId, \"priceId\");\n\t\t\trequiredNonEmptyString(next.successUrl, \"successUrl\");\n\t\t\tbreak;\n\t\tcase \"self.checkout.resume\":\n\t\t\trequiredNonEmptyString(next.returnToken, \"returnToken\");\n\t\t\tbreak;\n\t\tcase \"self.subscription.enroll\":\n\t\t\trequiredNonEmptyString(next.priceId, \"priceId\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (\n\t\tinput.profile.idempotency === \"required_caller_owned\" &&\n\t\tinput.deferIdempotency !== true\n\t) {\n\t\tassertBillingIdempotencyKey(next.idempotencyKey);\n\t}\n\treturn next;\n}\n","import type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport { resolveBillingEnvironment } from \"./environment.ts\";\nimport { BILLING_OPERATION_SAFETY } from \"./registry.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\nimport { validateBillingOperationPayload } from \"./validators.ts\";\n\nexport interface PrepareBillingCommandInput {\n\toperation: BillingOperation;\n\tpayload: unknown;\n\ttestMode?: boolean;\n\t/** Defer caller-owned idempotency until after capability gating. */\n\tidempotency?: \"enforce\" | \"defer\";\n}\n\nexport interface BillingPreparedCommand {\n\treadonly environment: {\n\t\treadonly name: \"test\" | \"live\";\n\t\treadonly testMode: boolean;\n\t};\n\treadonly operation: BillingOperation;\n\treadonly payload: Readonly<Record<string, unknown>>;\n\treadonly profile: BillingOperationSafetyProfile;\n}\n\nexport function prepareBillingCommand(\n\tinput: PrepareBillingCommandInput,\n): BillingPreparedCommand {\n\tconst profile = BILLING_OPERATION_SAFETY[input.operation];\n\tif (profile == null) {\n\t\tthrow new Error(`ATHENA_BILLING_OPERATION_UNKNOWN:${input.operation}`);\n\t}\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst payload = validateBillingOperationPayload({\n\t\tdeferIdempotency: input.idempotency === \"defer\",\n\t\toperation: input.operation,\n\t\tpayload: input.payload,\n\t\tprofile,\n\t});\n\treturn Object.freeze({\n\t\tenvironment: Object.freeze({\n\t\t\tname: environment.name,\n\t\t\ttestMode: environment.testMode,\n\t\t}),\n\t\toperation: input.operation,\n\t\tpayload: Object.freeze(payload),\n\t\tprofile,\n\t});\n}\n\n/** Enforce deferred idempotency after capability and authority have been resolved. */\nexport function finalizeBillingCommand(\n\tinput: Omit<PrepareBillingCommandInput, \"idempotency\">,\n): BillingPreparedCommand {\n\treturn prepareBillingCommand({\n\t\t...input,\n\t\tidempotency: \"enforce\",\n\t});\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingAdminPort } from \"./types.ts\";\n\nexport function createUnavailableBillingAdminPort(): BillingAdminPort {\n\tconst fail = (operation: string) => (): Promise<never> => {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t};\n\treturn {\n\t\tconflicts: { resolve: fail(\"admin.conflicts.resolve\") },\n\t\tconnections: { materialize: fail(\"admin.connections.materialize\") },\n\t\tingestion: { health: fail(\"admin.ingestion.health\") },\n\t\treconciliation: {\n\t\t\tretry: fail(\"admin.reconciliation.retry\"),\n\t\t\trun: fail(\"admin.reconciliation.run\"),\n\t\t},\n\t\twebhooks: {\n\t\t\treconcile: fail(\"admin.webhooks.reconcile\"),\n\t\t\tstatus: fail(\"admin.webhooks.status\"),\n\t\t\tverify: fail(\"admin.webhooks.verify\"),\n\t\t},\n\t};\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingExecutionTarget } from \"../types.ts\";\nimport type { BillingAdminPort } from \"./admin/types.ts\";\nimport type {\n\tAthenaBillingRuntime,\n\tBillingRuntimeDispatchOperation,\n} from \"./types.ts\";\n\nexport type { BillingRuntimeDispatchOperation };\n\nexport interface AthenaBillingRuntimeDispatch extends AthenaBillingRuntime {\n\treadonly admin: BillingAdminPort;\n\texecute(\n\t\toperation: BillingRuntimeDispatchOperation,\n\t\tpayload: unknown,\n\t\tprincipal: AthenaPrincipal,\n\t): Promise<unknown>;\n}\n\ntype BillingRuntimeDispatchHandler = (\n\truntime: AthenaBillingRuntime,\n\tpayload: unknown,\n) => Promise<unknown>;\n\nfunction body(payload: unknown): never {\n\treturn (\n\t\tpayload != null && typeof payload === \"object\" ? payload : {}\n\t) as never;\n}\n\nconst BILLING_RUNTIME_DISPATCH = {\n\tgetCapabilities: (runtime, payload) =>\n\t\truntime.getCapabilities(body(payload) as BillingExecutionTarget),\n\t\"payments.list\": (runtime, payload) => runtime.payments.list(body(payload)),\n\t\"payments.create\": (runtime, payload) => runtime.payments.create(body(payload)),\n\t\"payments.get\": (runtime, payload) => runtime.payments.get(body(payload)),\n\t\"payments.cancel\": (runtime, payload) => runtime.payments.cancel(body(payload)),\n\t\"customers.list\": (runtime, payload) => runtime.customers.list(body(payload)),\n\t\"customers.create\": (runtime, payload) =>\n\t\truntime.customers.create(body(payload)),\n\t\"customers.get\": (runtime, payload) => runtime.customers.get(body(payload)),\n\t\"customers.update\": (runtime, payload) =>\n\t\truntime.customers.update(body(payload)),\n\t\"customers.delete\": (runtime, payload) =>\n\t\truntime.customers.delete(body(payload)),\n\t\"refunds.list\": (runtime, payload) => runtime.refunds.list(body(payload)),\n\t\"refunds.create\": (runtime, payload) => runtime.refunds.create(body(payload)),\n\t\"refunds.get\": (runtime, payload) => runtime.refunds.get(body(payload)),\n\t\"refunds.cancel\": (runtime, payload) => runtime.refunds.cancel(body(payload)),\n\t\"paymentLinks.list\": (runtime, payload) =>\n\t\truntime.paymentLinks.list(body(payload)),\n\t\"paymentLinks.create\": (runtime, payload) =>\n\t\truntime.paymentLinks.create(body(payload)),\n\t\"paymentLinks.get\": (runtime, payload) =>\n\t\truntime.paymentLinks.get(body(payload)),\n\t\"paymentLinks.update\": (runtime, payload) =>\n\t\truntime.paymentLinks.update(body(payload)),\n\t\"paymentLinks.delete\": (runtime, payload) =>\n\t\truntime.paymentLinks.delete(body(payload)),\n\t\"subscriptions.list\": (runtime, payload) =>\n\t\truntime.subscriptions.list(body(payload)),\n\t\"subscriptions.create\": (runtime, payload) =>\n\t\truntime.subscriptions.create(body(payload)),\n\t\"subscriptions.get\": (runtime, payload) =>\n\t\truntime.subscriptions.get(body(payload)),\n\t\"subscriptions.update\": (runtime, payload) =>\n\t\truntime.subscriptions.update(body(payload)),\n\t\"subscriptions.cancel\": (runtime, payload) =>\n\t\truntime.subscriptions.cancel(body(payload)),\n\t\"invoices.list\": (runtime, payload) => runtime.invoices.list(body(payload)),\n\t\"invoices.get\": (runtime, payload) => runtime.invoices.get(body(payload)),\n\t\"webhooks.list\": (runtime, payload) => runtime.webhooks.list(body(payload)),\n\t\"webhooks.create\": (runtime, payload) => runtime.webhooks.create(body(payload)),\n\t\"webhooks.get\": (runtime, payload) => runtime.webhooks.get(body(payload)),\n\t\"webhooks.update\": (runtime, payload) => runtime.webhooks.update(body(payload)),\n\t\"webhooks.delete\": (runtime, payload) => runtime.webhooks.delete(body(payload)),\n\t\"webhooks.test\": (runtime, payload) => runtime.webhooks.test(body(payload)),\n\t\"products.list\": (runtime, payload) => runtime.products.list(body(payload)),\n\t\"prices.list\": (runtime, payload) => runtime.prices.list(body(payload)),\n\t\"checkout.create\": (runtime, payload) => runtime.checkout.create(body(payload)),\n\t\"self.invoices.list\": (runtime, payload) =>\n\t\truntime.self.invoices.list(body(payload)),\n\t\"self.invoices.get\": (runtime, payload) =>\n\t\truntime.self.invoices.get(body(payload)),\n\t\"self.payments.list\": (runtime, payload) =>\n\t\truntime.self.payments.list(body(payload)),\n\t\"self.payments.get\": (runtime, payload) =>\n\t\truntime.self.payments.get(body(payload)),\n\t\"self.subscription.get\": (runtime, payload) =>\n\t\truntime.self.subscription.get(body(payload)),\n\t\"self.subscription.cancel\": (runtime, payload) =>\n\t\truntime.self.subscription.cancel(body(payload)),\n\t\"self.subscription.enroll\": (runtime, payload) =>\n\t\truntime.self.subscription.enroll(body(payload)),\n\t\"self.checkout.create\": (runtime, payload) =>\n\t\truntime.self.checkout.create(body(payload)),\n\t\"self.checkout.resume\": (runtime, payload) =>\n\t\truntime.self.checkout.resume(body(payload)),\n\t\"admin.connections.materialize\": (runtime, payload) =>\n\t\truntime.admin.connections.materialize(body(payload)),\n\t\"admin.reconciliation.run\": (runtime, payload) =>\n\t\truntime.admin.reconciliation.run(body(payload)),\n\t\"admin.reconciliation.retry\": (runtime, payload) =>\n\t\truntime.admin.reconciliation.retry(body(payload)),\n\t\"admin.webhooks.reconcile\": (runtime, payload) =>\n\t\truntime.admin.webhooks.reconcile(body(payload)),\n\t\"admin.webhooks.verify\": (runtime, payload) =>\n\t\truntime.admin.webhooks.verify(body(payload)),\n\t\"admin.webhooks.status\": (runtime, payload) =>\n\t\truntime.admin.webhooks.status(body(payload)),\n\t\"admin.ingestion.health\": (runtime, payload) =>\n\t\truntime.admin.ingestion.health(body(payload)),\n\t\"admin.conflicts.resolve\": (runtime, payload) =>\n\t\truntime.admin.conflicts.resolve(body(payload)),\n} as const satisfies Record<\n\tBillingRuntimeDispatchOperation,\n\tBillingRuntimeDispatchHandler\n>;\n\nexport async function invokeBillingRuntimePort(\n\truntime: AthenaBillingRuntime,\n\toperation: BillingRuntimeDispatchOperation,\n\tpayload: unknown,\n): Promise<unknown> {\n\tconst handler: BillingRuntimeDispatchHandler | undefined =\n\t\tBILLING_RUNTIME_DISPATCH[operation];\n\tif (handler == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn handler(runtime, payload);\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\n\nexport function createUnavailableBillingSelfPort(): BillingSelfPort {\n\tconst fail = (operation: string) => (): Promise<never> => {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t};\n\treturn {\n\t\tcheckout: {\n\t\t\tcreate: fail(\"self.checkout.create\"),\n\t\t\tresume: fail(\"self.checkout.resume\"),\n\t\t},\n\t\tinvoices: {\n\t\t\tget: fail(\"self.invoices.get\"),\n\t\t\tlist: fail(\"self.invoices.list\"),\n\t\t},\n\t\tpayments: {\n\t\t\tget: fail(\"self.payments.get\"),\n\t\t\tlist: fail(\"self.payments.list\"),\n\t\t},\n\t\tsubscription: {\n\t\t\tcancel: fail(\"self.subscription.cancel\"),\n\t\t\tenroll: fail(\"self.subscription.enroll\"),\n\t\t\tget: fail(\"self.subscription.get\"),\n\t\t},\n\t};\n}\n","import type { AthenaCookieOptions } from \"./types.ts\";\n\nfunction tryDecode(str: string): string {\n  if (str.indexOf(\"%\") === -1) {\n    return str;\n  }\n  try {\n    return decodeURIComponent(str);\n  } catch {\n    return str;\n  }\n}\n\nexport interface CookieAttributes {\n  domain?: string;\n  expires?: Date;\n  httponly?: boolean;\n  \"max-age\"?: number;\n  partitioned?: boolean;\n  path?: string;\n  samesite?: \"strict\" | \"lax\" | \"none\";\n  secure?: boolean;\n  value: string;\n  [key: string]: unknown;\n}\n\nexport const SECURE_COOKIE_PREFIX = \"__Secure-\";\nexport const HOST_COOKIE_PREFIX = \"__Host-\";\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n  if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n    return cookieName.slice(SECURE_COOKIE_PREFIX.length);\n  }\n  if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n    return cookieName.slice(HOST_COOKIE_PREFIX.length);\n  }\n  return cookieName;\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n  if (!setCookie) {\n    return [];\n  }\n\n  const result: string[] = [];\n  let start = 0;\n  let i = 0;\n\n  while (i < setCookie.length) {\n    if (setCookie[i] === \",\") {\n      let j = i + 1;\n      while (j < setCookie.length && setCookie[j] === \" \") {\n        j++;\n      }\n      while (\n        j < setCookie.length &&\n        setCookie[j] !== \"=\" &&\n        setCookie[j] !== \";\" &&\n        setCookie[j] !== \",\"\n      ) {\n        j++;\n      }\n\n      if (j < setCookie.length && setCookie[j] === \"=\") {\n        const part = setCookie.slice(start, i).trim();\n        if (part) {\n          result.push(part);\n        }\n        start = i + 1;\n        while (start < setCookie.length && setCookie[start] === \" \") {\n          start++;\n        }\n        i = start;\n        continue;\n      }\n    }\n    i++;\n  }\n\n  const last = setCookie.slice(start).trim();\n  if (last) {\n    result.push(last);\n  }\n\n  return result;\n}\n\nexport function parseSetCookieHeader(\n  setCookie: string\n): Map<string, CookieAttributes> {\n  const cookies = new Map<string, CookieAttributes>();\n  const cookieArray = splitSetCookieHeader(setCookie);\n\n  for (const cookieString of cookieArray) {\n    const parts = cookieString.split(\";\").map((part) => part.trim());\n    const [nameValue, ...attributes] = parts;\n    const [name, ...valueParts] = (nameValue || \"\").split(\"=\");\n    if (!name) {\n      continue;\n    }\n\n    const value = unquoteCookieValue(valueParts.join(\"=\"));\n    const decodedValue = tryDecode(value);\n    const attrObj: CookieAttributes = { value: decodedValue };\n\n    for (const attribute of attributes) {\n      const [attrName, ...attrValueParts] = attribute.split(\"=\");\n      const attrValue = attrValueParts.join(\"=\");\n      const normalizedAttrName = attrName.trim().toLowerCase();\n      switch (normalizedAttrName) {\n        case \"max-age\":\n          attrObj[\"max-age\"] = attrValue\n            ? Number.parseInt(attrValue.trim(), 10)\n            : undefined;\n          break;\n        case \"expires\":\n          attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined;\n          break;\n        case \"domain\":\n          attrObj.domain = attrValue ? attrValue.trim() : undefined;\n          break;\n        case \"path\":\n          attrObj.path = attrValue ? attrValue.trim() : undefined;\n          break;\n        case \"secure\":\n          attrObj.secure = true;\n          break;\n        case \"httponly\":\n          attrObj.httponly = true;\n          break;\n        case \"samesite\":\n          attrObj.samesite = attrValue\n            ? (attrValue.trim().toLowerCase() as \"strict\" | \"lax\" | \"none\")\n            : undefined;\n          break;\n        case \"partitioned\":\n          attrObj.partitioned = true;\n          break;\n        default:\n          attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true;\n          break;\n      }\n    }\n\n    cookies.set(name, attrObj);\n  }\n\n  return cookies;\n}\n\nexport function toCookieOptions(\n  attributes: CookieAttributes\n): AthenaCookieOptions {\n  return {\n    domain: attributes.domain,\n    expires: attributes.expires,\n    httpOnly: attributes.httponly,\n    maxAge: attributes[\"max-age\"],\n    partitioned: attributes.partitioned,\n    path: attributes.path,\n    sameSite: attributes.samesite,\n    secure: attributes.secure,\n  };\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/;\n\nfunction unquoteCookieValue(value: string): string {\n  if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n    return value;\n  }\n  return value.slice(1, -1);\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n  const cookies = cookieHeader.split(\"; \");\n  const cookieMap = new Map<string, string>();\n  cookies.forEach((cookie) => {\n    const [name, value] = cookie.split(/[=](.*)/s);\n    cookieMap.set(name as string, value as string);\n  });\n  return cookieMap;\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(\n  headers: Headers,\n  name: string,\n  value: string\n): void {\n  const cookieMap = parseCookies(headers.get(\"cookie\") || \"\");\n  if (cookieNameRegex.test(name)) {\n    cookieMap.set(name, value);\n  }\n  headers.set(\n    \"cookie\",\n    Array.from(\n      cookieMap,\n      ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`\n    ).join(\"; \")\n  );\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(\n  target: Headers,\n  setCookieValues: Iterable<string>\n): void {\n  const cookieMap = parseCookies(target.get(\"cookie\") || \"\");\n  for (const setCookie of setCookieValues) {\n    for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n      if (cookieNameRegex.test(name)) {\n        cookieMap.set(name, attr.value);\n      }\n    }\n  }\n  target.set(\n    \"cookie\",\n    Array.from(\n      cookieMap,\n      ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`\n    ).join(\"; \")\n  );\n}\n\nexport function setCookieToHeader(headers: Headers) {\n  return (context: { response: Response }) => {\n    const setCookieHeader = context.response.headers.get(\"set-cookie\");\n    if (!setCookieHeader) {\n      return;\n    }\n    applySetCookies(headers, [setCookieHeader]);\n  };\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from \"./base64.ts\";\nimport {\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n} from \"./cookie-utils.ts\";\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from \"./crypto.ts\";\nimport {\n  createAccountStore,\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n} from \"./session-store.ts\";\nimport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaCookieVersionResolver,\n  AthenaGetCookieCacheConfig,\n  AthenaSessionPair,\n} from \"./types.ts\";\n\nconst DEFAULT_COOKIE_PREFIX = \"athena-auth\";\nconst LEGACY_COOKIE_PREFIX = \"better-auth\";\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60;\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5;\n\nfunction isProductionRuntime(): boolean {\n  return (\n    (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n      ?.NODE_ENV === \"production\"\n  );\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n  const env = (\n    globalThis as {\n      process?: {\n        env?: {\n          ATHENA_AUTH_SECRET?: string;\n          BETTER_AUTH_SECRET?: string;\n          AUTH_SECRET?: string;\n        };\n      };\n    }\n  ).process?.env;\n  if (!env) {\n    return;\n  }\n  return env.ATHENA_AUTH_SECRET || env.BETTER_AUTH_SECRET || env.AUTH_SECRET;\n}\n\nfunction isDynamicBaseURLConfig(\n  baseURL: AthenaCookiesOptions[\"baseURL\"]\n): boolean {\n  return (\n    typeof baseURL === \"object\" &&\n    baseURL !== null &&\n    \"allowedHosts\" in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  );\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n  const prefixes = [primaryPrefix];\n  if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n    prefixes.push(DEFAULT_COOKIE_PREFIX);\n  }\n  if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n    prefixes.push(LEGACY_COOKIE_PREFIX);\n  }\n  return prefixes;\n}\n\nfunction createError(message: string): Error {\n  return new Error(`@xylex-group/athena/cookies: ${message}`);\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n  const resolved = secret || getEnvironmentSecret();\n  if (!resolved) {\n    throw createError(\n      \"getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.\"\n    );\n  }\n  return resolved;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== \"object\") {\n    return null;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n  const token = session.session?.token;\n  if (typeof token !== \"string\" || token.length === 0) {\n    throw createError(\n      \"setSessionCookie requires `session.session.token` to be a non-empty string.\"\n    );\n  }\n  return token;\n}\n\nasync function resolveCookieVersion(\n  versionConfig: AthenaCookieVersionResolver | undefined,\n  session: Record<string, unknown>,\n  user: Record<string, unknown>\n): Promise<string> {\n  if (!versionConfig) {\n    return \"1\";\n  }\n  if (typeof versionConfig === \"string\") {\n    return versionConfig;\n  }\n  return versionConfig(session, user);\n}\n\nfunction getSessionCookieCacheName(\n  cookiePrefix: string,\n  cookieName: string,\n  isSecure: boolean\n): string {\n  return isSecure\n    ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}`\n    : `${cookiePrefix}.${cookieName}`;\n}\n\nasync function setCookieValue(\n  ctx: AthenaCookieContextRuntime,\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions\n): Promise<void> {\n  const secret = ctx.context.secret;\n  if (secret && typeof ctx.setSignedCookie === \"function\") {\n    await ctx.setSignedCookie(name, value, secret, attributes);\n    return;\n  }\n  ctx.setCookie(name, value, attributes);\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n  try {\n    return JSON.parse(value) as T;\n  } catch {\n    return null;\n  }\n}\n\nfunction getIsSecureCookie(\n  config: { isSecure?: boolean } | undefined\n): boolean {\n  if (config?.isSecure !== undefined) {\n    return config.isSecure;\n  }\n  return isProductionRuntime();\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n  const baseURLString =\n    typeof options.baseURL === \"string\" ? options.baseURL : undefined;\n  const dynamicProtocol =\n    typeof options.baseURL === \"object\" && options.baseURL !== null\n      ? options.baseURL.protocol\n      : undefined;\n\n  const secure =\n    options.advanced?.useSecureCookies === undefined\n      ? dynamicProtocol === \"https\"\n        ? true\n        : dynamicProtocol === \"http\"\n          ? false\n          : baseURLString\n            ? baseURLString.startsWith(\"https://\")\n            : isProductionRuntime()\n      : options.advanced.useSecureCookies;\n\n  const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : \"\";\n  const crossSubdomainEnabled =\n    !!options.advanced?.crossSubDomainCookies?.enabled;\n  const domain = crossSubdomainEnabled\n    ? options.advanced?.crossSubDomainCookies?.domain ||\n      (baseURLString ? new URL(baseURLString).hostname : undefined)\n    : undefined;\n\n  if (\n    crossSubdomainEnabled &&\n    !domain &&\n    !isDynamicBaseURLConfig(options.baseURL)\n  ) {\n    throw createError(\n      \"baseURL is required when `crossSubDomainCookies.enabled` is true.\"\n    );\n  }\n\n  function createCookie(\n    cookieName: string,\n    overrideAttributes: Partial<AthenaCookieOptions> = {}\n  ): AthenaAuthCookie {\n    const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n    const name =\n      options.advanced?.cookies?.[cookieName]?.name ||\n      `${prefix}.${cookieName}`;\n    const attributes =\n      options.advanced?.cookies?.[cookieName]?.attributes || {};\n\n    return {\n      attributes: {\n        httpOnly: true,\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: !!secureCookiePrefix,\n        ...(crossSubdomainEnabled ? { domain } : {}),\n        ...options.advanced?.defaultCookieAttributes,\n        ...overrideAttributes,\n        ...attributes,\n      },\n      name: `${secureCookiePrefix}${name}`,\n    };\n  }\n\n  return createCookie;\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n  const createCookie = createCookieGetter(options);\n  const sessionToken = createCookie(\"session_token\", {\n    maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE,\n  });\n  const sessionData = createCookie(\"session_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const accountData = createCookie(\"account_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const dontRememberToken = createCookie(\"dont_remember\");\n\n  return {\n    accountData: {\n      attributes: accountData.attributes,\n      name: accountData.name,\n    },\n    dontRememberToken: {\n      attributes: dontRememberToken.attributes,\n      name: dontRememberToken.name,\n    },\n    sessionData: {\n      attributes: sessionData.attributes,\n      name: sessionData.name,\n    },\n    sessionToken: {\n      attributes: sessionToken.attributes,\n      name: sessionToken.name,\n    },\n  };\n}\n\nexport async function setCookieCache(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe: boolean\n): Promise<void> {\n  const cookieCacheConfig = ctx.context.options?.session?.cookieCache;\n  if (!cookieCacheConfig?.enabled) {\n    return;\n  }\n\n  const version = await resolveCookieVersion(\n    cookieCacheConfig.version,\n    session.session as Record<string, unknown>,\n    session.user as Record<string, unknown>\n  );\n\n  const sessionData = {\n    session: session.session,\n    updatedAt: Date.now(),\n    user: session.user,\n    version,\n  };\n\n  const baseAttributes = ctx.context.authCookies.sessionData.attributes;\n  const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge;\n  const options: AthenaCookieOptions = {\n    ...baseAttributes,\n    maxAge,\n  };\n  const expiresAt = Date.now() + (options.maxAge || 60) * 1000;\n  const strategy = cookieCacheConfig.strategy || \"compact\";\n  const secret = getSecretOrThrow(ctx.context.secret);\n\n  let encoded: string;\n  if (strategy === \"jwt\") {\n    encoded = await signJwtHS256(\n      sessionData,\n      secret,\n      options.maxAge || DEFAULT_CACHE_MAX_AGE\n    );\n  } else if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper.\"\n    );\n  } else {\n    const signature = await signHmacBase64Url(\n      secret,\n      JSON.stringify({\n        ...sessionData,\n        expiresAt,\n      })\n    );\n    encoded = encodeStringToBase64Url(\n      JSON.stringify({\n        expiresAt,\n        session: sessionData,\n        signature,\n      })\n    );\n  }\n\n  if (encoded.length > 4093) {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    const cookies = store.chunk(encoded, options);\n    store.setCookies(cookies);\n  } else {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    if (store.hasChunks()) {\n      store.setCookies(store.clean());\n    }\n    ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options);\n  }\n}\n\nexport async function setSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe?: boolean,\n  overrides?: Partial<AthenaCookieOptions>\n): Promise<void> {\n  let resolvedDontRememberMe = dontRememberMe ?? false;\n  if (\n    dontRememberMe === undefined &&\n    typeof ctx.getSignedCookie === \"function\" &&\n    ctx.context.secret\n  ) {\n    const existingFlag = await ctx.getSignedCookie(\n      ctx.context.authCookies.dontRememberToken.name,\n      ctx.context.secret\n    );\n    resolvedDontRememberMe = Boolean(existingFlag);\n  }\n  const token = getSessionTokenFromPair(session);\n  const options = ctx.context.authCookies.sessionToken.attributes;\n  const maxAge = resolvedDontRememberMe\n    ? undefined\n    : ctx.context.sessionConfig?.expiresIn;\n  await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n    ...options,\n    maxAge,\n    ...overrides,\n  });\n\n  if (resolvedDontRememberMe) {\n    await setCookieValue(\n      ctx,\n      ctx.context.authCookies.dontRememberToken.name,\n      \"true\",\n      ctx.context.authCookies.dontRememberToken.attributes\n    );\n  }\n\n  await setCookieCache(ctx, session, resolvedDontRememberMe);\n  ctx.context.setNewSession?.(session);\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookie: AthenaAuthCookie\n): void {\n  ctx.setCookie(cookie.name, \"\", {\n    ...cookie.attributes,\n    maxAge: 0,\n  });\n}\n\nexport function deleteSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  skipDontRememberMe?: boolean\n): void {\n  expireCookie(ctx, ctx.context.authCookies.sessionToken);\n  expireCookie(ctx, ctx.context.authCookies.sessionData);\n\n  if (ctx.context.options?.account?.storeAccountCookie) {\n    expireCookie(ctx, ctx.context.authCookies.accountData);\n    const accountStore = createAccountStore(\n      ctx.context.authCookies.accountData.name,\n      ctx.context.authCookies.accountData.attributes,\n      ctx\n    );\n    accountStore.setCookies(accountStore.clean());\n  }\n\n  const sessionStore = createSessionStore(\n    ctx.context.authCookies.sessionData.name,\n    ctx.context.authCookies.sessionData.attributes,\n    ctx\n  );\n  sessionStore.setCookies(sessionStore.clean());\n\n  if (!skipDontRememberMe) {\n    expireCookie(ctx, ctx.context.authCookies.dontRememberToken);\n  }\n}\n\nexport const getSessionCookie = (\n  request: Request | Headers,\n  config?:\n    | {\n        cookiePrefix?: string;\n        cookieName?: string;\n        path?: string;\n      }\n    | undefined\n): string | null => {\n  const cookies = (\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers\n  ).get(\"cookie\");\n  if (!cookies) {\n    return null;\n  }\n\n  const { cookieName = \"session_token\", cookiePrefix = \"athena-auth\" } =\n    config || {};\n  const parsedCookie = parseCookies(cookies);\n  const getCookie = (name: string): string | undefined =>\n    parsedCookie.get(name) ||\n    parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`);\n  const candidateCookieNames = Array.from(\n    new Set([\n      cookieName,\n      cookieName.replace(/_/g, \"-\"),\n      cookieName.replace(/-/g, \"_\"),\n    ])\n  ).filter(Boolean);\n  for (const candidateName of candidateCookieNames) {\n    const sessionToken =\n      getCookie(`${cookiePrefix}.${candidateName}`) ||\n      getCookie(`${cookiePrefix}-${candidateName}`);\n    if (sessionToken) {\n      return sessionToken;\n    }\n  }\n  return null;\n};\n\nexport const getCookieCache = async <\n  SessionShape extends Record<string, unknown> = Record<string, unknown>,\n  UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n  request: Request | Headers,\n  config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>\n): Promise<{\n  session: SessionShape;\n  user: UserShape;\n  updatedAt: number;\n  version?: string;\n} | null> => {\n  const headers =\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers;\n  const cookieHeader = headers.get(\"cookie\");\n  if (!cookieHeader) {\n    return null;\n  }\n\n  const parsedCookie = parseCookies(cookieHeader);\n  const cookieName = config?.cookieName || \"session_data\";\n  const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n  const strategy = config?.strategy || \"compact\";\n  const cookiePrefixes = resolveCookiePrefixes(requestedPrefix);\n  const isSecure = getIsSecureCookie(config);\n  const secret = getSecretOrThrow(config?.secret);\n\n  let sessionData: string | undefined;\n\n  for (const prefix of cookiePrefixes) {\n    const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n    const cookieValue = parsedCookie.get(candidate);\n    if (cookieValue) {\n      sessionData = cookieValue;\n      break;\n    }\n  }\n\n  if (!sessionData) {\n    const reconstructedChunks: Array<{ index: number; value: string }> = [];\n    for (const prefix of cookiePrefixes) {\n      const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n      for (const [name, value] of parsedCookie.entries()) {\n        if (!name.startsWith(`${candidate}.`)) {\n          continue;\n        }\n        const parts = name.split(\".\");\n        const indexStr = parts.at(-1);\n        const index = Number.parseInt(indexStr || \"0\", 10);\n        if (!Number.isNaN(index)) {\n          reconstructedChunks.push({ index, value });\n        }\n      }\n      if (reconstructedChunks.length > 0) {\n        break;\n      }\n    }\n\n    if (reconstructedChunks.length > 0) {\n      reconstructedChunks.sort((left, right) => left.index - right.index);\n      sessionData = reconstructedChunks.map((chunk) => chunk.value).join(\"\");\n    }\n  }\n\n  if (!sessionData) {\n    return null;\n  }\n\n  if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.\"\n    );\n  }\n\n  if (strategy === \"jwt\") {\n    const payload = await verifyJwtHS256<Record<string, unknown>>(\n      sessionData,\n      secret\n    );\n    if (!payload) {\n      return null;\n    }\n    const sessionRecord = asObject(payload.session);\n    const userRecord = asObject(payload.user);\n    const updatedAt = payload.updatedAt;\n    if (!(sessionRecord && userRecord) || typeof updatedAt !== \"number\") {\n      return null;\n    }\n\n    if (config?.version) {\n      const cookieVersion =\n        typeof payload.version === \"string\" ? payload.version : \"1\";\n      const expectedVersion =\n        typeof config.version === \"string\"\n          ? config.version\n          : await config.version(\n              sessionRecord as SessionShape,\n              userRecord as UserShape\n            );\n      if (cookieVersion !== expectedVersion) {\n        return null;\n      }\n    }\n\n    return {\n      session: sessionRecord as SessionShape,\n      updatedAt,\n      user: userRecord as UserShape,\n      version:\n        typeof payload.version === \"string\" ? payload.version : undefined,\n    };\n  }\n\n  const compactPayload = parseJsonSafely<{\n    session: {\n      session: SessionShape;\n      user: UserShape;\n      updatedAt: number;\n      version?: string;\n    };\n    expiresAt: number;\n    signature: string;\n  }>(decodeBase64UrlToString(sessionData));\n\n  if (!compactPayload) {\n    return null;\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    JSON.stringify({\n      ...compactPayload.session,\n      expiresAt: compactPayload.expiresAt,\n    })\n  );\n\n  if (expectedSignature !== compactPayload.signature) {\n    return null;\n  }\n\n  if (compactPayload.expiresAt <= Date.now()) {\n    return null;\n  }\n\n  const resolvedSession = compactPayload.session;\n  if (config?.version) {\n    const cookieVersion = resolvedSession.version || \"1\";\n    const expectedVersion =\n      typeof config.version === \"string\"\n        ? config.version\n        : await config.version(resolvedSession.session, resolvedSession.user);\n    if (cookieVersion !== expectedVersion) {\n      return null;\n    }\n  }\n\n  const sessionObject = asObject(resolvedSession.session);\n  const userObject = asObject(resolvedSession.user);\n  if (!(sessionObject && userObject)) {\n    return null;\n  }\n\n  return {\n    session: sessionObject as SessionShape,\n    updatedAt: resolvedSession.updatedAt,\n    user: userObject as UserShape,\n    version: resolvedSession.version,\n  };\n};\n\nexport {\n  hasAuthSessionCookie,\n  SESSION_COOKIE_PATTERNS,\n} from \"./session-cookie-detection.ts\";\nexport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaGetCookieCacheConfig,\n};\nexport {\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n};\n","import { getSessionCookie } from \"../cookies/index.ts\";\nimport type { BackendOption } from \"../gateway/types.ts\";\n\nexport type AthenaRequestHeaderProfile =\n  | \"gateway\"\n  | \"auth\"\n  | \"chat\"\n  | \"storage\"\n  | \"minimal\";\n\nconst NO_CACHE_HEADER_VALUE = \"no-cache\";\n\nconst API_KEY_HEADER_CANDIDATES = [\n  \"X-Athena-Key\",\n  \"x-athena-key\",\n  \"X-Api-Key\",\n  \"x-api-key\",\n  \"apikey\",\n] as const;\nconst ATHENA_KEY_HEADER_CANDIDATES = [\"X-Athena-Key\", \"x-athena-key\"] as const;\nconst SESSION_TOKEN_HEADER_CANDIDATES = [\n  \"X-Athena-Auth-Session-Token\",\n] as const;\nconst BEARER_MIRROR_HEADER_CANDIDATES = [\"X-Athena-Auth-Bearer-Token\"] as const;\nconst CLIENT_HEADER_CANDIDATES = [\n  \"X-Athena-Client\",\n  \"x-athena-client\",\n] as const;\nconst PG_URI_HEADER_CANDIDATES = [\"x-pg-uri\"] as const;\nconst JDBC_URI_HEADER_CANDIDATES = [\"x-athena-jdbc-url\", \"x-jdbc-url\"] as const;\n\ninterface AthenaRequestHeaderProfileRules {\n  accept?: boolean;\n  apiKeys: boolean;\n  authBearer: boolean;\n  authMirror: boolean;\n  contentType?: boolean;\n  routing: boolean;\n  stripNullsDefault?: boolean;\n}\n\nconst PROFILE_RULES: Record<\n  AthenaRequestHeaderProfile,\n  AthenaRequestHeaderProfileRules\n> = {\n  auth: {\n    apiKeys: true,\n    authBearer: true,\n    authMirror: false,\n    contentType: true,\n    routing: true,\n  },\n  chat: {\n    accept: true,\n    apiKeys: true,\n    authBearer: true,\n    authMirror: true,\n    routing: true,\n  },\n  gateway: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n    stripNullsDefault: true,\n  },\n  minimal: {\n    apiKeys: false,\n    authBearer: false,\n    authMirror: false,\n    routing: false,\n  },\n  storage: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n  },\n};\n\nexport interface BuildAthenaRequestHeadersInput {\n  accept?: string | null;\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  callHeaders?: Record<string, string>;\n  client?: string | null;\n  configHeaders?: Record<string, string>;\n  contentType?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  profile: AthenaRequestHeaderProfile;\n  publishEvent?: string | null;\n  sdkHeaderValue: string;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  client?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  publishEvent?: string | null;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n  BuildAthenaRequestHeadersInput,\n  \"profile\" | \"sdkHeaderValue\" | \"contentType\" | \"accept\"\n>;\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n  return value ? value : undefined;\n}\n\nfunction mergeExtraHeaders(\n  configHeaders?: Record<string, string>,\n  callHeaders?: Record<string, string>\n): Record<string, string> {\n  return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) };\n}\n\nexport function hasHeaderIgnoreCase(\n  headers: Record<string, string>,\n  targetKey: string\n): boolean {\n  const normalizedTargetKey = targetKey.toLowerCase();\n  return Object.keys(headers).some(\n    (key) => key.toLowerCase() === normalizedTargetKey\n  );\n}\n\nexport function resolveHeaderValue(\n  headers: Record<string, string>,\n  candidates: readonly string[]\n): string | undefined {\n  for (const candidate of candidates) {\n    const direct = normalizeHeaderValue(headers[candidate]);\n    if (direct) {\n      return direct;\n    }\n  }\n\n  const loweredCandidates = new Set(\n    candidates.map((candidate) => candidate.toLowerCase())\n  );\n  for (const [key, value] of Object.entries(headers)) {\n    if (!loweredCandidates.has(key.toLowerCase())) {\n      continue;\n    }\n    const normalized = normalizeHeaderValue(value);\n    if (normalized) {\n      return normalized;\n    }\n  }\n  return undefined;\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n  return name.toLowerCase() === \"cache-control\";\n}\n\nfunction normalizeBearerToken(value: string): string {\n  const trimmed = value.trim();\n  const match = trimmed.match(/^Bearer\\s+(.+)$/i);\n  return match?.[1]?.trim() ?? trimmed;\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const authorization = resolveHeaderValue(headers, [\"Authorization\"]);\n  if (!authorization) {\n    return undefined;\n  }\n\n  const token = normalizeBearerToken(authorization);\n  return token ? token : undefined;\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const cookie = resolveHeaderValue(headers, [\"Cookie\"]);\n  if (!cookie) {\n    return undefined;\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined;\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return undefined;\n  }\n  return typeof backend === \"string\" ? backend : backend.type;\n}\n\nexport function resolveRequestHeaderOverrides(\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  defaults?: Pick<AthenaRequestHeaderOverrideFields, \"client\" | \"stripNulls\">\n): ResolvedRequestHeaderOverrides {\n  return {\n    apiKey: options?.apiKey ?? config.apiKey,\n    backend: options?.backend ?? config.backend,\n    bearerToken: options?.bearerToken ?? config.bearerToken,\n    callHeaders: options?.headers,\n    client: options?.client ?? config.client ?? defaults?.client,\n    configHeaders: config.headers,\n    cookie: options?.cookie ?? config.cookie,\n    forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n    jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n    organizationId: options?.organizationId ?? config.organizationId,\n    pgUri: options?.pgUri ?? config.pgUri,\n    publishEvent: options?.publishEvent ?? config.publishEvent,\n    sessionToken: options?.sessionToken ?? config.sessionToken,\n    stripNulls:\n      options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n    userId: options?.userId ?? config.userId,\n  };\n}\n\nexport function buildServiceRequestHeaders(\n  profile: Exclude<AthenaRequestHeaderProfile, \"minimal\">,\n  sdkHeaderValue: string,\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  extras?: Pick<BuildAthenaRequestHeadersInput, \"contentType\" | \"accept\"> & {\n    client?: string | null;\n    stripNulls?: boolean;\n  }\n): Record<string, string> {\n  const rules = PROFILE_RULES[profile];\n  return buildAthenaRequestHeaders({\n    profile,\n    sdkHeaderValue,\n    ...resolveRequestHeaderOverrides(config, options, {\n      client: extras?.client ?? undefined,\n      stripNulls:\n        extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n    }),\n    accept: extras?.accept ?? (rules.accept ? \"application/json\" : undefined),\n    contentType:\n      extras?.contentType ??\n      (rules.contentType ? \"application/json\" : undefined),\n  });\n}\n\nexport function applyAthenaApiKeyHeaders(\n  headers: Record<string, string>,\n  apiKey?: string | null\n): void {\n  const resolvedApiKey = normalizeHeaderValue(apiKey);\n  if (resolvedApiKey && !hasHeaderIgnoreCase(headers, \"X-Athena-Key\")) {\n    headers[\"X-Athena-Key\"] = resolvedApiKey;\n  }\n}\n\nexport function applyAthenaAuthContextHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    | \"bearerToken\"\n    | \"cookie\"\n    | \"sessionToken\"\n    | \"profile\"\n    | \"configHeaders\"\n    | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n  const explicitCookie = normalizeHeaderValue(input.cookie);\n  if (explicitCookie) {\n    mergedExtraHeaders.Cookie = explicitCookie;\n  }\n\n  const explicitSessionToken =\n    normalizeHeaderValue(input.sessionToken) ??\n    resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES);\n  const derivedSessionToken =\n    explicitSessionToken ??\n    resolveSessionTokenFromCookieHeader(mergedExtraHeaders);\n  const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, [\"Cookie\"]);\n\n  if (explicitCookie && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = explicitCookie;\n  } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = cookieFromHeaders;\n  }\n\n  const explicitBearerToken = (() => {\n    const configured = normalizeHeaderValue(input.bearerToken);\n    if (configured) {\n      return normalizeBearerToken(configured);\n    }\n    const mirrored = resolveHeaderValue(\n      mergedExtraHeaders,\n      BEARER_MIRROR_HEADER_CANDIDATES\n    );\n    return mirrored ? normalizeBearerToken(mirrored) : undefined;\n  })();\n  const derivedBearerToken =\n    explicitBearerToken ??\n    resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders);\n\n  if (\n    rules.authBearer &&\n    derivedBearerToken &&\n    !hasHeaderIgnoreCase(headers, \"Authorization\")\n  ) {\n    headers.Authorization = `Bearer ${derivedBearerToken}`;\n  }\n\n  if (rules.authMirror) {\n    if (\n      derivedSessionToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n    }\n    if (\n      derivedBearerToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Bearer-Token\"] = derivedBearerToken;\n    }\n  } else if (\n    derivedSessionToken &&\n    !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n  ) {\n    headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n  }\n}\n\nexport function applyAthenaPgUriHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    \"pgUri\" | \"jdbcUrl\" | \"configHeaders\" | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n\n  const pgUri =\n    normalizeHeaderValue(input.pgUri) ??\n    resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES);\n  if (pgUri && !hasHeaderIgnoreCase(headers, \"x-pg-uri\")) {\n    headers[\"x-pg-uri\"] = pgUri;\n  }\n\n  const jdbcUrl =\n    normalizeHeaderValue(input.jdbcUrl) ??\n    resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES);\n  if (jdbcUrl) {\n    if (!hasHeaderIgnoreCase(headers, \"x-athena-jdbc-url\")) {\n      headers[\"x-athena-jdbc-url\"] = jdbcUrl;\n    }\n    if (!hasHeaderIgnoreCase(headers, \"x-jdbc-url\")) {\n      headers[\"x-jdbc-url\"] = jdbcUrl;\n    }\n  }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n  clientName?: string | null;\n  gatewayKey?: string | null;\n  headers?: Record<string, string | null | undefined>;\n}): Record<string, string> {\n  const trimmedClientName = input.clientName?.trim();\n  const trimmedGatewayKey = input.gatewayKey?.trim();\n  const merged: Record<string, string | null | undefined> = {\n    ...(trimmedClientName\n      ? {\n          \"X-Athena-Client\": trimmedClientName,\n        }\n      : {}),\n    ...(trimmedGatewayKey\n      ? {\n          \"X-Api-Key\": trimmedGatewayKey,\n          \"X-Athena-Key\": trimmedGatewayKey,\n        }\n      : {}),\n    ...input.headers,\n  };\n\n  return Object.fromEntries(\n    Object.entries(merged).flatMap(([key, value]) =>\n      typeof value === \"string\" && value.trim()\n        ? ([[key, value.trim()]] as const)\n        : []\n    )\n  );\n}\n\nexport function buildAthenaRequestHeaders(\n  input: BuildAthenaRequestHeadersInput\n): Record<string, string> {\n  const forceNoCache = Boolean(input.forceNoCache);\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n\n  const headerClient = resolveHeaderValue(\n    mergedExtraHeaders,\n    CLIENT_HEADER_CANDIDATES\n  );\n  const finalClient = normalizeHeaderValue(input.client) ?? headerClient;\n  const finalApiKey =\n    normalizeHeaderValue(input.apiKey) ??\n    resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES);\n  const finalAthenaKey =\n    resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ??\n    finalApiKey;\n\n  const headers: Record<string, string> = {\n    \"X-Athena-Sdk\": input.sdkHeaderValue,\n  };\n\n  if (rules.contentType) {\n    headers[\"Content-Type\"] = input.contentType ?? \"application/json\";\n  }\n\n  if (input.accept ?? rules.accept) {\n    headers.Accept = input.accept ?? \"application/json\";\n  }\n\n  if (rules.routing) {\n    if (normalizeHeaderValue(input.userId)) {\n      headers[\"X-User-Id\"] = input.userId ?? \"\";\n    }\n    if (normalizeHeaderValue(input.organizationId)) {\n      headers[\"X-Organization-Id\"] = input.organizationId ?? \"\";\n    }\n    if (finalClient) {\n      headers[\"X-Athena-Client\"] = finalClient;\n    }\n\n    const backendType = resolveBackendType(input.backend);\n    if (backendType) {\n      headers[\"X-Backend-Type\"] = backendType;\n    }\n\n    if (typeof input.stripNulls === \"boolean\") {\n      headers[\"X-Strip-Nulls\"] = input.stripNulls ? \"true\" : \"false\";\n    } else if (rules.stripNullsDefault) {\n      headers[\"X-Strip-Nulls\"] = \"true\";\n    }\n\n    if (normalizeHeaderValue(input.publishEvent)) {\n      headers[\"X-Publish-Event\"] = input.publishEvent ?? \"\";\n    }\n  }\n\n  if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n    applyAthenaApiKeyHeaders(headers, finalAthenaKey);\n  }\n\n  applyAthenaAuthContextHeaders(headers, input);\n  applyAthenaPgUriHeaders(headers, input);\n\n  const reservedClientHeaderKeys = new Set(\n    CLIENT_HEADER_CANDIDATES.map((key) => key.toLowerCase())\n  );\n  for (const [key, value] of Object.entries(mergedExtraHeaders)) {\n    if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n      continue;\n    }\n    if (forceNoCache && isCacheControlHeaderName(key)) {\n      continue;\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 { normalizeAthenaGatewayBaseUrl } from \"../../../gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"../../../sdk-version.ts\";\nimport {\n\tbuildAthenaRequestHeaders,\n\thasHeaderIgnoreCase,\n} from \"../../../utils/athena-request-headers.ts\";\nimport { AthenaBillingError } from \"../../errors.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\t| null\n\t| boolean\n\t| number\n\t| string\n\t| AthenaBillingJson[]\n\t| { [key: string]: AthenaBillingJson };\n\nexport interface AthenaBillingCallOptions {\n\tapiKey?: string | null;\n\theaders?: Record<string, string>;\n\tsignal?: AbortSignal;\n}\n\nexport interface AthenaBillingClientConfig {\n\tapiKey: string;\n\tbaseUrl: string;\n\tclient?: string | null;\n\tfetchImpl?: typeof fetch;\n\theaders?: Record<string, string>;\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n\tdata: T;\n\tmessage?: string;\n\tstatus?: string;\n}\n\nexport function withPathParam(\n\tpath: string,\n\tname: string,\n\tvalue: string,\n): string {\n\treturn path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nexport function appendQuery(\n\tpath: string,\n\tquery?: Record<string, string | number | boolean | null | undefined>,\n): string {\n\tif (!query) {\n\t\treturn path;\n\t}\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tparams.set(key, String(value));\n\t}\n\tconst serialized = params.toString();\n\treturn serialized ? `${path}?${serialized}` : path;\n}\n\nexport function parseEnvelopeData<T>(body: unknown): T {\n\tif (body && typeof body === \"object\" && \"data\" in body) {\n\t\treturn (body as AthenaBillingEnvelope<T>).data;\n\t}\n\treturn undefined as T;\n}\n\nexport interface BillingHttpTransport {\n\tcall<T>(\n\t\tmethod: AthenaBillingHttpMethod,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\toptions?: AthenaBillingCallOptions,\n\t\tresponseType?: \"json\" | \"text\",\n\t): Promise<T>;\n}\n\nexport function createBillingHttpTransport(\n\tconfig: AthenaBillingClientConfig,\n): BillingHttpTransport {\n\tconst baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n\t\tlabel: \"Athena billing base URL\",\n\t});\n\tconst fetchImpl =\n\t\tconfig.fetchImpl ??\n\t\t((input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) =>\n\t\t\tglobalThis.fetch(input, init));\n\n\tasync function call<T>(\n\t\tmethod: AthenaBillingHttpMethod,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\toptions?: AthenaBillingCallOptions,\n\t\tresponseType: \"json\" | \"text\" = \"json\",\n\t): Promise<T> {\n\t\tconst headers = buildAthenaRequestHeaders({\n\t\t\tapiKey: options?.apiKey ?? config.apiKey,\n\t\t\tcallHeaders: options?.headers,\n\t\t\tclient: config.client,\n\t\t\tconfigHeaders: {\n\t\t\t\t...(config.headers ?? {}),\n\t\t\t},\n\t\t\tcontentType: \"application/json\",\n\t\t\tprofile: \"gateway\",\n\t\t\tsdkHeaderValue: SDK_HEADER_VALUE,\n\t\t});\n\n\t\tlet requestBody: BodyInit | undefined;\n\t\tif (body !== undefined && body !== null) {\n\t\t\tif (\n\t\t\t\ttypeof body === \"string\" ||\n\t\t\t\tbody instanceof Blob ||\n\t\t\t\tbody instanceof ArrayBuffer ||\n\t\t\t\tArrayBuffer.isView(body) ||\n\t\t\t\tbody instanceof FormData ||\n\t\t\t\tbody instanceof URLSearchParams\n\t\t\t) {\n\t\t\t\trequestBody = body as BodyInit;\n\t\t\t} else {\n\t\t\t\trequestBody = JSON.stringify(body);\n\t\t\t\tif (!hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n\t\t\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst targetUrl = `${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n\t\tconst response = await fetchImpl(targetUrl, {\n\t\t\tbody: requestBody,\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\tif (responseType === \"text\") {\n\t\t\tconst text = await response.text();\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new AthenaBillingError({\n\t\t\t\t\tbody: text,\n\t\t\t\t\tendpoint: path,\n\t\t\t\t\tmessage: `Billing request failed (${response.status})`,\n\t\t\t\t\tmethod,\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn text as T;\n\t\t}\n\n\t\tconst rawText = await response.text();\n\t\tlet parsed: unknown = rawText;\n\t\tif (rawText) {\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(rawText);\n\t\t\t} catch {\n\t\t\t\tparsed = rawText;\n\t\t\t}\n\t\t} else {\n\t\t\tparsed = null;\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tconst message =\n\t\t\t\tparsed &&\n\t\t\t\ttypeof parsed === \"object\" &&\n\t\t\t\t\"message\" in parsed &&\n\t\t\t\ttypeof (parsed as { message: unknown }).message === \"string\"\n\t\t\t\t\t? (parsed as { message: string }).message\n\t\t\t\t\t: `Billing request failed (${response.status})`;\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: parsed,\n\t\t\t\tendpoint: path,\n\t\t\t\tmessage,\n\t\t\t\tmethod,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\n\t\treturn parseEnvelopeData<T>(parsed);\n\t}\n\n\treturn { call };\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\"; // src/billing/safety\nimport type {\n\tBillingCancelPaymentInput,\n\tBillingCancelRefundInput,\n\tBillingCancelSubscriptionInput,\n\tBillingCheckout,\n\tBillingCreateCheckoutInput,\n\tBillingCreateCustomerInput,\n\tBillingCreatePaymentInput,\n\tBillingCreatePaymentLinkInput,\n\tBillingCreateRefundInput,\n\tBillingCreateSubscriptionInput,\n\tBillingCreateWebhookInput,\n\tBillingCustomer,\n\tBillingDeleteCustomerInput,\n\tBillingDeletePaymentLinkInput,\n\tBillingDeleteWebhookInput,\n\tBillingExecutionTarget,\n\tBillingGetCustomerInput,\n\tBillingGetInvoiceInput,\n\tBillingGetPaymentInput,\n\tBillingGetPaymentLinkInput,\n\tBillingGetRefundInput,\n\tBillingGetSubscriptionInput,\n\tBillingGetWebhookInput,\n\tBillingInvoice,\n\tBillingListCustomersInput,\n\tBillingListInvoicesInput,\n\tBillingListPaymentLinksInput,\n\tBillingListPaymentsInput,\n\tBillingListPricesInput,\n\tBillingListProductsInput,\n\tBillingListRefundsInput,\n\tBillingListSubscriptionsInput,\n\tBillingListWebhooksInput,\n\tBillingPayment,\n\tBillingPaymentLink,\n\tBillingPrice,\n\tBillingProduct,\n\tBillingRefund,\n\tBillingSubscription,\n\tBillingTestWebhookInput,\n\tBillingUpdateCustomerInput,\n\tBillingUpdatePaymentLinkInput,\n\tBillingUpdateSubscriptionInput,\n\tBillingUpdateWebhookInput,\n\tBillingWebhook,\n} from \"../../types.ts\";\nimport { createUnavailableBillingAdminPort } from \"../admin/unavailable.ts\";\nimport type { BillingCapabilities } from \"../capabilities.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../dispatch.ts\";\nimport { invokeBillingRuntimePort } from \"../dispatch.ts\";\nimport { createUnavailableBillingSelfPort } from \"../self/unavailable.ts\";\nimport type { BillingPage } from \"../types.ts\";\nimport { projectRemoteBillingCapabilities } from \"./project-capabilities.ts\";\nimport {\n\ttype AthenaBillingClientConfig,\n\tappendQuery,\n\tcreateBillingHttpTransport,\n\twithPathParam,\n} from \"./transport.ts\";\n\n/**\n * GET /billing/v1/payments honors cursor (provider) or a hardcoded\n * persistence page (limit 50, offset 0). Remote callers must not\n * pretend limit/offset were applied.\n */\nexport function rejectUnsupportedRemotePaymentListPaging(input: {\n\tlimit?: number;\n\toffset?: number;\n}): void {\n\tif (input.offset == null && input.limit == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: \"payments.list\",\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\n/**\n * Remote /billing/v1 ConnectionQuery has no profileId. Adapters use the\n * connection's stored provider_profile_id, so a requested profile must\n * fail closed instead of silently targeting another profile.\n */\nexport function rejectUnenforcedRemoteProfileTarget(\n\tinput: { profileId?: string | null },\n\toperation: string,\n): void {\n\tif (input.profileId == null || input.profileId === \"\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\n/**\n * Remote /billing/v1 ConnectionQuery requires connection_id. Local\n * getCapabilities may target a configured provider without one.\n */\nexport function rejectMissingRemoteConnectionId(\n\tinput: { connectionId?: string | null },\n\toperation: string,\n): void {\n\tif (input.connectionId != null && input.connectionId !== \"\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"missing_connection\",\n\t});\n}\n\nfunction connectionQuery(\n\tinput: BillingExecutionTarget & {\n\t\tcursor?: string;\n\t\tcustomerId?: string;\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\tpaymentId?: string;\n\t\tproductId?: string;\n\t\tsource?: string;\n\t},\n): Record<string, string> {\n\tconst query: Record<string, string> = {};\n\tif (input.connectionId) {\n\t\tquery.connectionId = input.connectionId;\n\t}\n\tif (input.clientName) {\n\t\tquery.clientName = input.clientName;\n\t}\n\tif (input.cursor) {\n\t\tquery.cursor = input.cursor;\n\t}\n\tif (input.customerId) {\n\t\tquery.customerId = input.customerId;\n\t}\n\tif (input.paymentId) {\n\t\tquery.paymentId = input.paymentId;\n\t}\n\tif (input.productId) {\n\t\tquery.productId = input.productId;\n\t}\n\tif (input.source) {\n\t\tquery.source = input.source;\n\t}\n\tif (input.limit !== undefined) {\n\t\tquery.limit = String(input.limit);\n\t}\n\tif (input.offset !== undefined) {\n\t\tquery.offset = String(input.offset);\n\t}\n\treturn query;\n}\n\nfunction asPage<T>(data: unknown): BillingPage<T> {\n\tif (Array.isArray(data)) {\n\t\treturn { items: data as T[] };\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst record = data as Record<string, unknown>;\n\t\tif (Array.isArray(record.items)) {\n\t\t\treturn {\n\t\t\t\titems: record.items as T[],\n\t\t\t\tnextCursor: (record.nextCursor as string | null | undefined) ?? null,\n\t\t\t\tpreviousCursor:\n\t\t\t\t\t(record.previousCursor as string | null | undefined) ?? null,\n\t\t\t};\n\t\t}\n\t}\n\treturn { items: [] };\n}\n\n/**\n * HTTP implementation of AthenaBillingRuntime. Does not change the public\n * createBillingModule method bag; that façade still maps 1:1 to /billing/v1.\n */\nexport function createRemoteBillingRuntime(\n\tconfig: AthenaBillingClientConfig,\n): AthenaBillingRuntimeDispatch {\n\tconst { call } = createBillingHttpTransport(config);\n\n\treturn {\n\t\tmode: \"remote\",\n\t\tadmin: createUnavailableBillingAdminPort(),\n\t\texecute(operation, payload, _principal) {\n\t\t\treturn invokeBillingRuntimePort(this, operation, payload);\n\t\t},\n\t\tself: createUnavailableBillingSelfPort(),\n\t\tcustomers: {\n\t\t\tcreate(input: BillingCreateCustomerInput): Promise<BillingCustomer> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"customers.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/customers\", prepared.payload);\n\t\t\t},\n\t\t\tdelete(input: BillingDeleteCustomerInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetCustomerInput): Promise<BillingCustomer> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListCustomersInput,\n\t\t\t): Promise<BillingPage<BillingCustomer>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(input: BillingUpdateCustomerInput): Promise<BillingCustomer> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tinvoices: {\n\t\t\tget(input: BillingGetInvoiceInput): Promise<BillingInvoice> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/invoices/{id}\", \"id\", input.invoiceId),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListInvoicesInput,\n\t\t\t): Promise<BillingPage<BillingInvoice>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tpaymentLinks: {\n\t\t\tcreate(\n\t\t\t\tinput: BillingCreatePaymentLinkInput,\n\t\t\t): Promise<BillingPaymentLink> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"paymentLinks.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/payment-links\", prepared.payload);\n\t\t\t},\n\t\t\tdelete(input: BillingDeletePaymentLinkInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetPaymentLinkInput): Promise<BillingPaymentLink> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPaymentLinksInput,\n\t\t\t): Promise<BillingPage<BillingPaymentLink>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\tinput: BillingUpdatePaymentLinkInput,\n\t\t\t): Promise<BillingPaymentLink> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tpayments: {\n\t\t\tcancel(input: BillingCancelPaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.cancel\");\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(input: BillingCreatePaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.create\");\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"payments.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/payments\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetPaymentInput): Promise<BillingPayment> {\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.get\");\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPaymentsInput,\n\t\t\t): Promise<BillingPage<BillingPayment>> {\n\t\t\t\trejectUnsupportedRemotePaymentListPaging(input);\n\t\t\t\trejectUnenforcedRemoteProfileTarget(input, \"payments.list\");\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\trefunds: {\n\t\t\tcancel(input: BillingCancelRefundInput): Promise<BillingRefund> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/refunds/{id}/cancel\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.refundId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(input: BillingCreateRefundInput): Promise<BillingRefund> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"refunds.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/refunds\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetRefundInput): Promise<BillingRefund> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}\", \"id\", input.refundId),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListRefundsInput,\n\t\t\t): Promise<BillingPage<BillingRefund>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tsubscriptions: {\n\t\t\tcancel(\n\t\t\t\tinput: BillingCancelSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}/cancel\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(\n\t\t\t\tinput: BillingCreateSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"subscriptions.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/subscriptions\", prepared.payload);\n\t\t\t},\n\t\t\tget(input: BillingGetSubscriptionInput): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListSubscriptionsInput,\n\t\t\t): Promise<BillingPage<BillingSubscription>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\tinput: BillingUpdateSubscriptionInput,\n\t\t\t): Promise<BillingSubscription> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\t\"/billing/v1/subscriptions/{id}\",\n\t\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\tinput.subscriptionId,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\twebhooks: {\n\t\t\tcreate(input: BillingCreateWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tdelete(input: BillingDeleteWebhookInput): Promise<void> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(input: BillingGetWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(\n\t\t\t\tinput: BillingListWebhooksInput,\n\t\t\t): Promise<BillingPage<BillingWebhook>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t\ttest(input: BillingTestWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t},\n\t\t\tupdate(input: BillingUpdateWebhookInput): Promise<BillingWebhook> {\n\t\t\t\treturn call(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\tappendQuery(\n\t\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n\t\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t\t),\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tproducts: {\n\t\t\tasync list(\n\t\t\t\tinput: BillingListProductsInput,\n\t\t\t): Promise<BillingPage<BillingProduct>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/products\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tprices: {\n\t\t\tasync list(\n\t\t\t\tinput: BillingListPricesInput,\n\t\t\t): Promise<BillingPage<BillingPrice>> {\n\t\t\t\treturn asPage(\n\t\t\t\t\tawait call(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\tappendQuery(\"/billing/v1/prices\", connectionQuery(input)),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcheckout: {\n\t\t\tcreate(input: BillingCreateCheckoutInput): Promise<BillingCheckout> {\n\t\t\t\tconst prepared = prepareBillingCommand({\n\t\t\t\t\toperation: \"checkout.create\",\n\t\t\t\t\tpayload: input,\n\t\t\t\t});\n\t\t\t\treturn call(\"POST\", \"/billing/v1/checkouts\", prepared.payload);\n\t\t\t},\n\t\t},\n\t\tasync getCapabilities(\n\t\t\tinput: BillingExecutionTarget,\n\t\t): Promise<BillingCapabilities> {\n\t\t\trejectMissingRemoteConnectionId(input, \"getCapabilities\");\n\t\t\tconst query = connectionQuery(input);\n\t\t\tif (input.profileId) {\n\t\t\t\tquery.profileId = input.profileId;\n\t\t\t}\n\t\t\tconst data = await call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/capabilities\", query),\n\t\t\t);\n\t\t\treturn projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n\t\t},\n\t};\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 type { BillingCapabilities } from \"./runtime/capabilities.ts\";\nimport { projectRemoteBillingCapabilities } from \"./runtime/remote/project-capabilities.ts\";\nimport {\n\tcreateRemoteBillingRuntime,\n\trejectMissingRemoteConnectionId,\n\trejectUnenforcedRemoteProfileTarget,\n\trejectUnsupportedRemotePaymentListPaging,\n} from \"./runtime/remote/runtime.ts\";\nimport {\n\ttype AthenaBillingCallOptions,\n\ttype AthenaBillingClientConfig,\n\ttype AthenaBillingJson,\n\tappendQuery,\n\tcreateBillingHttpTransport,\n\twithPathParam,\n} from \"./runtime/remote/transport.ts\";\nimport type {\n\tBillingAdminPort,\n\tBillingCatalogPort,\n\tBillingCheckoutPort,\n\tBillingCustomerPort,\n\tBillingInvoicePort,\n\tBillingPaymentLinkPort,\n\tBillingPaymentPort,\n\tBillingRefundPort,\n\tBillingSelfPort,\n\tBillingSubscriptionPort,\n\tBillingWebhookPort,\n} from \"./runtime/types.ts\";\nimport type { BillingExecutionTarget } from \"./types.ts\";\n\nexport { AthenaBillingError } from \"./errors.ts\";\nexport type {\n\tAthenaBillingCallOptions,\n\tAthenaBillingClientConfig,\n\tAthenaBillingEnvelope,\n\tAthenaBillingHttpMethod,\n\tAthenaBillingJson,\n} from \"./runtime/remote/transport.ts\";\n\nexport interface BillingConnectionRefInput {\n\tclientName?: string;\n\tconnectionId: string;\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n\tcursor?: string;\n\tlimit?: number;\n\toffset?: number;\n\tsource?: \"provider\" | \"persistence\" | string;\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n\temail?: string | null;\n\tidempotencyKey: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tname?: string | null;\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n\temail?: string | null;\n\tname?: string | null;\n}\n\nexport interface BillingCreateConnectionInput {\n\tconfig?: Record<string, AthenaBillingJson>;\n\tcredentialKind?: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tmode?: string;\n\townerId: string;\n\townerKind: string;\n\tprovider: string;\n\tproviderAccountId: string;\n\tproviderProfileId?: string | null;\n\tscopes?: string[];\n\tstatus?: string;\n}\n\nexport interface BillingUpdateConnectionInput {\n\tconfig?: Record<string, AthenaBillingJson>;\n\tcredentialKind?: string;\n\tmetadata?: Record<string, AthenaBillingJson>;\n\tmode?: string;\n\tproviderAccountId?: string;\n\tproviderProfileId?: string | null;\n\tscopes?: string[];\n\tstatus?: string;\n}\n\nexport interface BillingReconcileInput {\n\tcustomerId?: string | null;\n\tresourceId: string;\n\tresourceKind: string;\n}\n\nexport interface BillingProvisionSinksInput {\n\tinstance?: string;\n\ttargetSchema?: string;\n}\n\nexport const billingSdkManifest = {\n\tenvelopeKind: \"athena\",\n\tmethods: [\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getCapabilities\",\n\t\t\tpath: \"/billing/v1/capabilities\",\n\t\t},\n\t\t{ method: \"POST\", name: \"createCheckout\", path: \"/billing/v1/checkouts\" },\n\t\t{ method: \"GET\", name: \"listProducts\", path: \"/billing/v1/products\" },\n\t\t{ method: \"GET\", name: \"listPrices\", path: \"/billing/v1/prices\" },\n\t\t{ method: \"GET\", name: \"listCustomers\", path: \"/billing/v1/customers\" },\n\t\t{ method: \"POST\", name: \"createCustomer\", path: \"/billing/v1/customers\" },\n\t\t{ method: \"GET\", name: \"getCustomer\", path: \"/billing/v1/customers/{id}\" },\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateCustomer\",\n\t\t\tpath: \"/billing/v1/customers/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteCustomer\",\n\t\t\tpath: \"/billing/v1/customers/{id}\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listPayments\", path: \"/billing/v1/payments\" },\n\t\t{ method: \"POST\", name: \"createPayment\", path: \"/billing/v1/payments\" },\n\t\t{ method: \"GET\", name: \"getPayment\", path: \"/billing/v1/payments/{id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelPayment\",\n\t\t\tpath: \"/billing/v1/payments/{id}/cancel\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listPaymentLinks\",\n\t\t\tpath: \"/billing/v1/payment-links\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createPaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getPaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updatePaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deletePaymentLink\",\n\t\t\tpath: \"/billing/v1/payment-links/{id}\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listRefunds\", path: \"/billing/v1/refunds\" },\n\t\t{ method: \"POST\", name: \"createRefund\", path: \"/billing/v1/refunds\" },\n\t\t{ method: \"GET\", name: \"getRefund\", path: \"/billing/v1/refunds/{id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelRefund\",\n\t\t\tpath: \"/billing/v1/refunds/{id}/cancel\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listSubscriptions\",\n\t\t\tpath: \"/billing/v1/subscriptions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"cancelSubscription\",\n\t\t\tpath: \"/billing/v1/subscriptions/{id}/cancel\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listInvoices\", path: \"/billing/v1/invoices\" },\n\t\t{ method: \"GET\", name: \"getInvoice\", path: \"/billing/v1/invoices/{id}\" },\n\t\t{ method: \"GET\", name: \"listWebhooks\", path: \"/billing/v1/webhooks\" },\n\t\t{ method: \"POST\", name: \"createWebhook\", path: \"/billing/v1/webhooks\" },\n\t\t{ method: \"GET\", name: \"getWebhook\", path: \"/billing/v1/webhooks/{id}\" },\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"testWebhook\",\n\t\t\tpath: \"/billing/v1/webhooks/{id}/test\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listConnections\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"createConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"getConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteConnection\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"reconcileDocument\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listWebhookEvents\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/webhook-events\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"provisionWebhookSinks\",\n\t\t\tpath: \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n\t\t},\n\t\t{ method: \"GET\", name: \"listGrants\", path: \"/admin/billing/grants\" },\n\t\t{ method: \"GET\", name: \"listProviders\", path: \"/admin/billing/providers\" },\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listSinkHelpers\",\n\t\t\tpath: \"/admin/webhook-sinks/helpers/billing\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"ingestProviderWebhook\",\n\t\t\tpath: \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n\t\t},\n\t\t{ method: \"GET\", name: \"getDebugBilling\", path: \"/debug/billing\" },\n\t],\n\tnamespace: \"billing\",\n} as const;\n\nfunction connectionQuery(\n\tinput: BillingListQuery | BillingConnectionRefInput,\n): Record<string, string> {\n\tconst query: Record<string, string> = {\n\t\tconnectionId: input.connectionId,\n\t};\n\tif (input.clientName) {\n\t\tquery.clientName = input.clientName;\n\t}\n\tif (\"cursor\" in input && input.cursor) {\n\t\tquery.cursor = input.cursor;\n\t}\n\tif (\"source\" in input && input.source) {\n\t\tquery.source = input.source;\n\t}\n\tif (\"limit\" in input && input.limit !== undefined) {\n\t\tquery.limit = String(input.limit);\n\t}\n\tif (\"offset\" in input && input.offset !== undefined) {\n\t\tquery.offset = String(input.offset);\n\t}\n\treturn query;\n}\n\nexport interface AthenaBillingModule {\n\tcancelPayment: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcancelRefund: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcancelSubscription: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateCheckout: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateConnection: (\n\t\tclientName: string,\n\t\tinput: BillingCreateConnectionInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateCustomer: (\n\t\tinput: BillingEnsureCustomerInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreatePayment: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tpayments: BillingPaymentPort;\n\tcustomers: BillingCustomerPort;\n\trefunds: BillingRefundPort;\n\tpaymentLinks: BillingPaymentLinkPort;\n\tsubscriptions: BillingSubscriptionPort;\n\tinvoices: BillingInvoicePort;\n\twebhooks: BillingWebhookPort;\n\tcatalog: BillingCatalogPort;\n\tcheckout: BillingCheckoutPort;\n\tself: BillingSelfPort;\n\tadmin: BillingAdminPort;\n\tcreatePaymentLink: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateRefund: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateSubscription: (\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tcreateWebhook: (\n\t\tinput: BillingConnectionRefInput,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteCustomer: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeletePaymentLink: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tdeleteWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetCapabilities: (\n\t\tinput: BillingExecutionTarget,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<BillingCapabilities>;\n\tgetConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetCustomer: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetDebugBilling: (\n\t\tjwtSecret: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<string>;\n\tgetInvoice: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetPayment: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetPaymentLink: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetRefund: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetSubscription: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tgetWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tingestProviderWebhook: (\n\t\tinput: {\n\t\t\tprovider: string;\n\t\t\tclientName: string;\n\t\t\tconnectionId: string;\n\t\t\tbody: BodyInit | Record<string, unknown> | string;\n\t\t\tsignatureHeaders?: Record<string, string>;\n\t\t},\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistConnections: (\n\t\tclientName: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistCustomers: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistGrants: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n\tlistInvoices: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPaymentLinks: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPayments: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistPrices: (\n\t\tinput: BillingConnectionRefInput & { productId?: string },\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistProducts: (\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistProviders: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n\tlistRefunds: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistSinkHelpers: (\n\t\tquery?: { targetSchema?: string; instance?: string },\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistSubscriptions: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistWebhookEvents: (\n\t\tclientName: string,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tlistWebhooks: (\n\t\tinput: BillingListQuery,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tprovisionWebhookSinks: (\n\t\tclientName: string,\n\t\tinput?: BillingProvisionSinksInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\treconcileDocument: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\tinput: BillingReconcileInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\ttestWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateConnection: (\n\t\tclientName: string,\n\t\tconnectionId: string,\n\t\tinput: BillingUpdateConnectionInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateCustomer: (\n\t\tid: string,\n\t\tinput: BillingUpdateCustomerInput,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdatePaymentLink: (\n\t\tid: string,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateSubscription: (\n\t\tid: string,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n\tupdateWebhook: (\n\t\tid: string,\n\t\tinput: BillingConnectionRefInput,\n\t\tbody: Record<string, unknown>,\n\t\toptions?: AthenaBillingCallOptions,\n\t) => Promise<unknown>;\n}\n\n/**\n * @deprecated Prefer `createClient().billing` (root Athena client).\n * This factory remains for internal composition and Node/gateway call sites.\n * It sends the static Athena API key (`X-Athena-Key`). Do not import it from\n * `@xylex-group/athena/browser` or instantiate it in a browser bundle.\n */\nexport function createBillingModule(\n\tconfig: AthenaBillingClientConfig,\n): AthenaBillingModule {\n\tconst { call } = createBillingHttpTransport(config);\n\tconst remoteRuntime = createRemoteBillingRuntime(config);\n\n\treturn {\n\t\tcancelPayment(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcancelRefund(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcancelSubscription(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}/cancel\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreateCheckout(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/checkouts\", body, options);\n\t\t},\n\t\tcreateConnection(clientName, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tconfig: input.config,\n\t\t\t\t\tcredentialKind: input.credentialKind,\n\t\t\t\t\tmetadata: input.metadata,\n\t\t\t\t\tmode: input.mode,\n\t\t\t\t\townerId: input.ownerId,\n\t\t\t\t\townerKind: input.ownerKind,\n\t\t\t\t\tprovider: input.provider,\n\t\t\t\t\tproviderAccountId: input.providerAccountId,\n\t\t\t\t\tproviderProfileId: input.providerProfileId,\n\t\t\t\t\tscopes: input.scopes,\n\t\t\t\t\tstatus: input.status,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreateCustomer(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\t\"/billing/v1/customers\",\n\t\t\t\t{\n\t\t\t\t\tclientName: input.clientName,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\temail: input.email,\n\t\t\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\t\t\tmetadata: input.metadata ?? {},\n\t\t\t\t\tname: input.name,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tcreatePayment(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/payments\", body, options);\n\t\t},\n\t\tpayments: remoteRuntime.payments,\n\t\tcustomers: remoteRuntime.customers,\n\t\trefunds: remoteRuntime.refunds,\n\t\tpaymentLinks: remoteRuntime.paymentLinks,\n\t\tsubscriptions: remoteRuntime.subscriptions,\n\t\tinvoices: remoteRuntime.invoices,\n\t\twebhooks: remoteRuntime.webhooks,\n\t\tcatalog: {\n\t\t\tprices: remoteRuntime.prices,\n\t\t\tproducts: remoteRuntime.products,\n\t\t},\n\t\tcheckout: remoteRuntime.checkout,\n\t\tself: remoteRuntime.self,\n\t\tadmin: remoteRuntime.admin,\n\t\tcreatePaymentLink(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/payment-links\", body, options);\n\t\t},\n\t\tcreateRefund(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/refunds\", body, options);\n\t\t},\n\t\tcreateSubscription(body, options) {\n\t\t\treturn call(\"POST\", \"/billing/v1/subscriptions\", body, options);\n\t\t},\n\t\tcreateWebhook(input, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteConnection(clientName, connectionId, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeletePaymentLink(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tdeleteWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"DELETE\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync getCapabilities(input, options) {\n\t\t\trejectUnenforcedRemoteProfileTarget(input, \"getCapabilities\");\n\t\t\trejectMissingRemoteConnectionId(input, \"getCapabilities\");\n\t\t\tconst query: Record<string, string> = {};\n\t\t\tif (input.connectionId != null) {\n\t\t\t\tquery.connectionId = input.connectionId;\n\t\t\t}\n\t\t\tif (input.clientName != null) {\n\t\t\t\tquery.clientName = input.clientName;\n\t\t\t}\n\t\t\tif (input.provider != null) {\n\t\t\t\tquery.provider = String(input.provider);\n\t\t\t}\n\t\t\tconst data = await call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/capabilities\", query),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\treturn projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n\t\t},\n\t\tgetConnection(clientName, connectionId, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetDebugBilling(jwtSecret, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/debug/billing\", { jwt_secret: jwtSecret }),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t\t\"text\",\n\t\t\t);\n\t\t},\n\t\tgetInvoice(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/invoices/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetPayment(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payments/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetPaymentLink(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetRefund(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/refunds/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetSubscription(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tgetWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tingestProviderWebhook(input, options) {\n\t\t\tconst path = withPathParam(\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n\t\t\t\t\t\t\"provider\",\n\t\t\t\t\t\tinput.provider,\n\t\t\t\t\t),\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tinput.clientName,\n\t\t\t\t),\n\t\t\t\t\"connection_id\",\n\t\t\t\tinput.connectionId,\n\t\t\t);\n\t\t\treturn call(\"POST\", path, input.body, {\n\t\t\t\t...options,\n\t\t\t\theaders: {\n\t\t\t\t\t...(options?.headers ?? {}),\n\t\t\t\t\t...(input.signatureHeaders ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tlistConnections(clientName, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistCustomers(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistGrants(options) {\n\t\t\treturn call(\"GET\", \"/admin/billing/grants\", undefined, options);\n\t\t},\n\t\tlistInvoices(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistPaymentLinks(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync listPayments(input, options) {\n\t\t\trejectUnsupportedRemotePaymentListPaging(input);\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistPrices(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/prices\", {\n\t\t\t\t\t...connectionQuery(input),\n\t\t\t\t\t...(input.productId ? { productId: input.productId } : {}),\n\t\t\t\t}),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistProducts(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/products\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistProviders(options) {\n\t\t\treturn call(\"GET\", \"/admin/billing/providers\", undefined, options);\n\t\t},\n\t\tlistRefunds(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistSinkHelpers(query, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/admin/webhook-sinks/helpers/billing\", {\n\t\t\t\t\tinstance: query?.instance,\n\t\t\t\t\ttargetSchema: query?.targetSchema,\n\t\t\t\t}),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistSubscriptions(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistWebhookEvents(clientName, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\twithPathParam(\n\t\t\t\t\t\"/admin/billing/clients/{client_name}/webhook-events\",\n\t\t\t\t\t\"client_name\",\n\t\t\t\t\tclientName,\n\t\t\t\t),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tlistWebhooks(input, options) {\n\t\t\treturn call(\n\t\t\t\t\"GET\",\n\t\t\t\tappendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n\t\t\t\tundefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tprovisionWebhookSinks(clientName, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tinstance: input?.instance,\n\t\t\t\t\t\ttargetSchema: input?.targetSchema,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\treconcileDocument(clientName, connectionId, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\tresourceId: input.resourceId,\n\t\t\t\t\tresourceKind: input.resourceKind,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\ttestWebhook(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"POST\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\t{},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateConnection(clientName, connectionId, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\n\t\t\t\t\twithPathParam(\n\t\t\t\t\t\t\"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n\t\t\t\t\t\t\"client_name\",\n\t\t\t\t\t\tclientName,\n\t\t\t\t\t),\n\t\t\t\t\t\"connection_id\",\n\t\t\t\t\tconnectionId,\n\t\t\t\t),\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateCustomer(id, input, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n\t\t\t\t{\n\t\t\t\t\tclientName: input.clientName,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\temail: input.email,\n\t\t\t\t\tname: input.name,\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdatePaymentLink(id, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateSubscription(id, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\twithPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateWebhook(id, input, body, options) {\n\t\t\treturn call(\n\t\t\t\t\"PATCH\",\n\t\t\t\tappendQuery(\n\t\t\t\t\twithPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n\t\t\t\t\tconnectionQuery(input),\n\t\t\t\t),\n\t\t\t\tbody,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n}\n","import type {\n  AthenaRuntimeDiscoveryAuthAvailability,\n  AthenaRuntimeDiscoveryDocument,\n} from \"../../gateway/discovery-types.ts\";\nimport {\n  ATHENA_NEXT_RUNTIME_PROTOCOL,\n  ATHENA_RUNTIME_PROTOCOL,\n} from \"../../gateway/protocol.ts\";\nimport type { AthenaServerRuntime } from \"./types.ts\";\n\nexport function serializeAthenaRuntimeDiscoveryDocument(\n  runtime: AthenaServerRuntime,\n): AthenaRuntimeDiscoveryDocument {\n  const caps = runtime.capabilities;\n  return {\n    athena: true,\n    capabilities: {\n      auth: caps.auth,\n      delete: true,\n      fetch: true,\n      insert: true,\n      models: caps.modelEnforcement,\n      nestedRelations: caps.nestedRelations,\n      policy: caps.policies,\n      rawSql: caps.rawSql,\n      rpc: caps.rpc,\n      update: true,\n    },\n    protocol: {\n      major: ATHENA_RUNTIME_PROTOCOL.major,\n      minor: ATHENA_RUNTIME_PROTOCOL.minor,\n    },\n    runtime: \"local\",\n    runtimeImplementation: \"athena-js\",\n  };\n}\n\n/** The default Athena Next data endpoint. */\nexport const DEFAULT_ATHENA_NEXT_DATA_ENDPOINT = \"/api/athena\";\n\n/** The default Athena Next auth endpoint. */\nexport const DEFAULT_ATHENA_NEXT_AUTH_ENDPOINT = \"/api/auth\";\n\n/** The default Athena Next storage endpoint. */\nexport const DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT = \"/api/athena/storage\";\n\n/** The default Athena Next billing endpoint. */\nexport const DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT = \"/api/athena/billing\";\nexport const DEFAULT_ATHENA_NEXT_BILLING_WEBHOOK_ENDPOINT =\n  \"/api/athena/billing/webhook\";\n\nfunction advertiseHttpTransport(\n  path: string,\n  origin?: \"same-origin\" | \"remote\",\n): {\n  credentials: \"none\" | \"same-origin\";\n  kind: \"http\";\n  origin: \"same-origin\" | \"remote\";\n  path: string;\n} {\n  const resolvedOrigin =\n    origin ?? (/^https?:\\/\\//i.test(path) ? \"remote\" : \"same-origin\");\n  return {\n    credentials: resolvedOrigin === \"remote\" ? \"none\" : \"same-origin\",\n    kind: \"http\",\n    origin: resolvedOrigin,\n    path,\n  };\n}\n\nexport function serializeAthenaNextRuntimeDiscoveryDocument(input: {\n  auth: AthenaRuntimeDiscoveryAuthAvailability;\n  dataRuntime: AthenaServerRuntime;\n  endpoints: {\n    auth?: string;\n    billing?: string;\n    data?: string;\n    storage?: string;\n  };\n}): AthenaRuntimeDiscoveryDocument {\n  const base = serializeAthenaRuntimeDiscoveryDocument(input.dataRuntime);\n  const dataPath = input.endpoints.data ?? DEFAULT_ATHENA_NEXT_DATA_ENDPOINT;\n  const authPath =\n    input.auth.available && input.endpoints.auth\n      ? input.endpoints.auth\n      : undefined;\n  return {\n    ...base,\n    capabilities: {\n      ...base.capabilities,\n      auth: input.auth.available\n        ? {\n          available: true,\n          ...(input.auth.transport\n            ? { transport: input.auth.transport }\n            : {}),\n        }\n        : { available: false },\n      billing: Boolean(input.endpoints.billing),\n      billingIngress: input.endpoints.billing ? { webhook: true } : undefined,\n      data: true,\n      storage: Boolean(input.endpoints.storage),\n    },\n    endpoints: {\n      data: dataPath,\n      ...(input.endpoints.storage ? { storage: input.endpoints.storage } : {}),\n      ...(input.endpoints.billing ? { billing: input.endpoints.billing } : {}),\n      ...(authPath ? { auth: authPath } : {}),\n    },\n    protocol: {\n      major: ATHENA_NEXT_RUNTIME_PROTOCOL.major,\n      minor: ATHENA_NEXT_RUNTIME_PROTOCOL.minor,\n    },\n    runtime: \"next-local\",\n    transports: {\n      data: advertiseHttpTransport(dataPath),\n      ...(authPath\n        ? {\n          auth: advertiseHttpTransport(authPath, input.auth.transport),\n        }\n        : {}),\n      ...(input.endpoints.storage\n        ? { storage: advertiseHttpTransport(input.endpoints.storage) }\n        : {}),\n      ...(input.endpoints.billing\n        ? { billing: advertiseHttpTransport(input.endpoints.billing) }\n        : {}),\n    },\n  };\n}\n","export function resolveAthenaHttpUrl(input: {\n\tbasePath: string;\n\troot?: string;\n}): string {\n\tconst value = input.basePath.trim();\n\tif (/^https?:\\/\\//i.test(value)) {\n\t\treturn value;\n\t}\n\tconst prefixed = value.startsWith(\"/\") ? value : `/${value}`;\n\tconst root = input.root?.replace(/\\/+$/, \"\") ?? \"\";\n\tif (root) {\n\t\tif (/^https?:\\/\\//i.test(root)) {\n\t\t\treturn `${root}${prefixed}`;\n\t\t}\n\t\treturn `${root}${prefixed}`;\n\t}\n\tconst origin =\n\t\t(globalThis as { location?: { origin?: string } }).location?.origin ??\n\t\t(globalThis as { window?: { location?: { origin?: string } } }).window\n\t\t\t?.location?.origin;\n\tif (origin) {\n\t\treturn `${origin.replace(/\\/+$/, \"\")}${prefixed}`;\n\t}\n\treturn `http://localhost${prefixed}`;\n}\n","import type { AthenaTransportInvocationIR } from \"../invocation.ts\";\nimport type { AthenaHttpRequestIR, AthenaHttpTransportIR } from \"./ir.ts\";\nimport { resolveAthenaHttpUrl } from \"./url.ts\";\n\n/** Storage/Billing RPC envelope. Auth and Data keep domain HTTP compilers. */\nexport function compileAthenaRpcHttpRequest(input: {\n\theaders?: Record<string, string>;\n\tinvocation: AthenaTransportInvocationIR;\n\troot?: string;\n\ttransport: AthenaHttpTransportIR;\n}): AthenaHttpRequestIR {\n\tconst url = resolveAthenaHttpUrl({\n\t\tbasePath: input.transport.basePath,\n\t\troot: input.root,\n\t});\n\tconst credentials: RequestCredentials =\n\t\tinput.transport.credentials === \"same-origin\" ? \"same-origin\" : \"omit\";\n\treturn {\n\t\tbody: JSON.stringify({\n\t\t\toperation: input.invocation.operation,\n\t\t\tpayload: input.invocation.payload,\n\t\t}),\n\t\tcredentials,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...input.headers,\n\t\t},\n\t\tmethod: \"POST\",\n\t\turl,\n\t};\n}\n\nexport function compileAthenaHttpRequest(\n\tinput: Parameters<typeof compileAthenaRpcHttpRequest>[0],\n): AthenaHttpRequestIR {\n\treturn compileAthenaRpcHttpRequest(input);\n}\n","import type {\n\tAthenaTransportErrorEnvelope,\n\tAthenaTransportResult,\n} from \"../error-envelope.ts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (value && typeof value === \"object\") {\n\t\treturn value as Record<string, unknown>;\n\t}\n\treturn undefined;\n}\n\nfunction unwrapSuccessData<T>(\n\trecord: Record<string, unknown> | undefined,\n\tjson: unknown,\n): T {\n\tif (record && typeof record.ok === \"boolean\") {\n\t\treturn record.data as T;\n\t}\n\treturn json as T;\n}\n\nfunction readHeader(\n\theaders: Headers | undefined,\n\tname: string,\n): string | undefined {\n\tconst value = headers?.get(name)?.trim();\n\treturn value ? value : undefined;\n}\n\nexport function parseAthenaHttpTransportResponse<T>(input: {\n\theaders?: Headers;\n\tjson: unknown;\n\tstatus: number;\n\tstatusText: string;\n}): AthenaTransportResult<T> {\n\tconst record = asRecord(input.json);\n\tconst errorRecord = asRecord(record?.error);\n\tconst ok = record?.ok !== false && input.status >= 200 && input.status < 300;\n\tif (ok) {\n\t\tconst enveloped = typeof record?.ok === \"boolean\";\n\t\treturn {\n\t\t\tdata: unwrapSuccessData<T>(record, input.json),\n\t\t\tenveloped,\n\t\t\tok: true,\n\t\t};\n\t}\n\tconst status =\n\t\ttypeof record?.status === \"number\"\n\t\t\t? record.status\n\t\t\t: typeof errorRecord?.status === \"number\"\n\t\t\t\t? errorRecord.status\n\t\t\t\t: input.status;\n\tconst code =\n\t\ttypeof errorRecord?.code === \"string\" && errorRecord.code.trim()\n\t\t\t? errorRecord.code\n\t\t\t: `ATHENA_TRANSPORT_HTTP_${status}`;\n\tconst message =\n\t\ttypeof errorRecord?.message === \"string\" && errorRecord.message.trim()\n\t\t\t? errorRecord.message\n\t\t\t: input.statusText || `transport request failed (${status})`;\n\tconst errorNumber =\n\t\ttypeof errorRecord?.errorNumber === \"number\"\n\t\t\t? errorRecord.errorNumber\n\t\t\t: undefined;\n\tconst requestId =\n\t\t(typeof errorRecord?.requestId === \"string\" && errorRecord.requestId.trim()\n\t\t\t? errorRecord.requestId.trim()\n\t\t\t: undefined) ?? readHeader(input.headers, \"x-athena-request-id\");\n\tconst retryable =\n\t\ttypeof errorRecord?.retryable === \"boolean\"\n\t\t\t? errorRecord.retryable\n\t\t\t: undefined;\n\tconst envelope: AthenaTransportErrorEnvelope = {\n\t\tcode,\n\t\tdetails: errorRecord ?? record ?? input.json,\n\t\t...(errorNumber !== undefined ? { errorNumber } : {}),\n\t\tmessage,\n\t\t...(requestId !== undefined ? { requestId } : {}),\n\t\t...(retryable !== undefined ? { retryable } : {}),\n\t\tstatus,\n\t};\n\treturn { error: envelope, ok: false };\n}\n","import type { AthenaTransportResult } from \"../error-envelope.ts\";\nimport type { AthenaTransportInvocationIR } from \"../invocation.ts\";\nimport type { AthenaHttpTransportIR } from \"./ir.ts\";\nimport { compileAthenaRpcHttpRequest } from \"./request-compiler.ts\";\nimport { parseAthenaHttpTransportResponse } from \"./response-parser.ts\";\n\nexport async function executeAthenaHttpTransport<T>(input: {\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tinvocation: AthenaTransportInvocationIR;\n\troot?: string;\n\ttransport: AthenaHttpTransportIR;\n}): Promise<AthenaTransportResult<T>> {\n\tconst fetchImpl = input.fetch ?? fetch;\n\tconst request = compileAthenaRpcHttpRequest({\n\t\theaders: input.headers,\n\t\tinvocation: input.invocation,\n\t\troot: input.root,\n\t\ttransport: input.transport,\n\t});\n\tconst response = await fetchImpl(request.url, {\n\t\tbody: request.body,\n\t\tcredentials: request.credentials,\n\t\theaders: request.headers,\n\t\tmethod: request.method,\n\t});\n\tconst json = await response.json().catch(() => undefined);\n\treturn parseAthenaHttpTransportResponse<T>({\n\t\theaders: response.headers,\n\t\tjson,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t});\n}\n\nexport function createAthenaHttpTransportExecutor(options?: {\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\troot?: string;\n}): {\n\texecute<T>(input: {\n\t\tinvocation: AthenaTransportInvocationIR;\n\t\ttransport: AthenaHttpTransportIR;\n\t}): Promise<AthenaTransportResult<T>>;\n} {\n\treturn {\n\t\texecute<T>(input: {\n\t\t\tinvocation: AthenaTransportInvocationIR;\n\t\t\ttransport: AthenaHttpTransportIR;\n\t\t}) {\n\t\t\treturn executeAthenaHttpTransport<T>({\n\t\t\t\tfetch: options?.fetch,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tinvocation: input.invocation,\n\t\t\t\troot: options?.root,\n\t\t\t\ttransport: input.transport,\n\t\t\t});\n\t\t},\n\t};\n}\n","export type AthenaHttpTransportDomain = \"storage\" | \"billing\" | \"data\" | \"auth\";\n\nexport type AthenaHttpTransportOrigin = \"same-origin\" | \"remote\" | \"absolute\";\n\nexport type AthenaHttpTransportCredentials = \"same-origin\" | \"none\";\n\nexport interface AthenaHttpTransportIR {\n\tbasePath: string;\n\tcredentials: AthenaHttpTransportCredentials;\n\tdomain: AthenaHttpTransportDomain;\n\tencoding: \"json\";\n\tkind: \"http\";\n\torigin: AthenaHttpTransportOrigin;\n\tversion: 1;\n}\n\nconst HTTP_TRANSPORT_DOMAINS: readonly AthenaHttpTransportDomain[] = [\n\t\"storage\",\n\t\"billing\",\n\t\"data\",\n\t\"auth\",\n];\n\nconst TOPOLOGY_SLOTS: readonly AthenaHttpTransportDomain[] = [\n\t\"data\",\n\t\"auth\",\n\t\"storage\",\n\t\"billing\",\n];\n\nexport function isAthenaHttpTransportDomain(\n\tvalue: string,\n): value is AthenaHttpTransportDomain {\n\treturn (HTTP_TRANSPORT_DOMAINS as readonly string[]).includes(value);\n}\n\nexport function createAthenaHttpTransportIR(input: {\n\tbasePath: string;\n\tcredentials?: AthenaHttpTransportCredentials;\n\tdomain: string;\n\torigin?: string;\n}): AthenaHttpTransportIR {\n\tif (typeof input.basePath !== \"string\" || !input.basePath.trim()) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is required\");\n\t}\n\tif (!isAthenaHttpTransportDomain(input.domain)) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.domain is invalid\");\n\t}\n\tconst scheme = schemeOf(input.basePath);\n\tif (scheme && scheme !== \"http\" && scheme !== \"https\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath scheme is unsupported\");\n\t}\n\tif (isMalformedHttpUrl(input.basePath)) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is not a valid HTTP URL\");\n\t}\n\tconst origin = originClass(input.origin, input.basePath);\n\tif (\n\t\torigin === \"same-origin\" &&\n\t\tisAbsoluteHttpUrl(input.basePath) &&\n\t\tisMalformedHttpUrl(input.basePath)\n\t) {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\",\n\t\t);\n\t}\n\tconst credentials = credentialsFor(input.credentials, origin);\n\treturn {\n\t\tbasePath: input.basePath,\n\t\tcredentials,\n\t\tdomain: input.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin,\n\t\tversion: 1,\n\t};\n}\n\nexport function validateAthenaTransportIR(ir: unknown): AthenaHttpTransportIR {\n\tif (!ir || typeof ir !== \"object\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR is required\");\n\t}\n\tconst record = ir as Record<string, unknown>;\n\tif (record.kind !== \"http\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.kind must be http\");\n\t}\n\tif (record.version !== 1) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.version must be 1\");\n\t}\n\tif (\n\t\ttypeof record.domain !== \"string\" ||\n\t\t!isAthenaHttpTransportDomain(record.domain)\n\t) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.domain is invalid\");\n\t}\n\tif (typeof record.basePath !== \"string\" || !record.basePath) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.basePath is required\");\n\t}\n\tif (\n\t\trecord.origin !== \"same-origin\" &&\n\t\trecord.origin !== \"remote\" &&\n\t\trecord.origin !== \"absolute\"\n\t) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.origin is invalid\");\n\t}\n\tif (record.credentials !== \"same-origin\" && record.credentials !== \"none\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n\t}\n\tif (record.encoding !== \"json\") {\n\t\tthrow new Error(\"AthenaHttpTransportIR.encoding is invalid\");\n\t}\n\tif (record.origin !== \"same-origin\" && record.credentials === \"same-origin\") {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.credentials same-origin requires same-origin\",\n\t\t);\n\t}\n\tconst slot = slotFromBasePath(record.basePath);\n\tif (slot && slot !== record.domain) {\n\t\tthrow new Error(\n\t\t\t\"AthenaHttpTransportIR.domain does not match topology slot\",\n\t\t);\n\t}\n\treturn record as unknown as AthenaHttpTransportIR;\n}\n\nexport function validateAthenaRuntimeTopologyIR(value: unknown): void {\n\tif (value == null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(\"AthenaRuntimeTopologyIR is invalid\");\n\t}\n\tconst transports = (value as { transports?: unknown }).transports;\n\tif (transports == null) {\n\t\treturn;\n\t}\n\tif (typeof transports !== \"object\" || Array.isArray(transports)) {\n\t\tthrow new Error(\"AthenaRuntimeTopologyIR.transports is invalid\");\n\t}\n\tconst slots = transports as Record<string, unknown>;\n\tfor (const slot of TOPOLOGY_SLOTS) {\n\t\tconst entry = slots[slot];\n\t\tif (entry == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof entry !== \"object\" || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${slot} transport descriptor is invalid`);\n\t\t}\n\t\tconst domain = (entry as { domain?: unknown }).domain;\n\t\tif (typeof domain === \"string\" && domain !== slot) {\n\t\t\tthrow new Error(`${slot} transport domain does not match topology slot`);\n\t\t}\n\t}\n}\n\nexport {\n\ttype AthenaHttpExecutorOptions,\n\tcreateAthenaHttpExecutor,\n} from \"../execution/http-executor.ts\";\nexport { joinAthenaHttpPath } from \"./join-path.ts\";\n\nfunction originClass(\n\torigin: string | undefined,\n\tbasePath: string,\n): AthenaHttpTransportOrigin {\n\tif (origin === \"same-origin\") {\n\t\tif (isMalformedHttpUrl(basePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t\"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\",\n\t\t\t);\n\t\t}\n\t\treturn \"same-origin\";\n\t}\n\tif (origin === \"remote\" || origin === \"absolute\") {\n\t\treturn origin;\n\t}\n\tif (isAbsoluteHttpUrl(basePath)) {\n\t\treturn \"remote\";\n\t}\n\tif (origin && /^https?:\\/\\//i.test(origin)) {\n\t\treturn \"absolute\";\n\t}\n\treturn \"same-origin\";\n}\n\nfunction credentialsFor(\n\tcredentials: AthenaHttpTransportCredentials | undefined,\n\torigin: AthenaHttpTransportOrigin,\n): AthenaHttpTransportCredentials {\n\tif (credentials === \"same-origin\" || credentials === \"none\") {\n\t\tif (origin !== \"same-origin\" && credentials === \"same-origin\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"AthenaHttpTransportIR.credentials same-origin requires same-origin\",\n\t\t\t);\n\t\t}\n\t\treturn credentials;\n\t}\n\tif (credentials != null) {\n\t\tthrow new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n\t}\n\treturn origin === \"same-origin\" ? \"same-origin\" : \"none\";\n}\n\nfunction schemeOf(basePath: string): string | undefined {\n\tconst match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(basePath);\n\treturn match?.[1]?.toLowerCase();\n}\n\nfunction isAbsoluteHttpUrl(basePath: string): boolean {\n\treturn /^https?:\\/\\//i.test(basePath);\n}\n\nfunction isMalformedHttpUrl(basePath: string): boolean {\n\tif (!isAbsoluteHttpUrl(basePath)) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst url = new URL(basePath);\n\t\treturn !url.hostname;\n\t} catch {\n\t\treturn true;\n\t}\n}\n\nfunction slotFromBasePath(\n\tbasePath: string,\n): AthenaHttpTransportDomain | undefined {\n\tlet path = basePath;\n\tif (isAbsoluteHttpUrl(basePath)) {\n\t\ttry {\n\t\t\tpath = new URL(basePath).pathname;\n\t\t} catch {\n\t\t\tpath = basePath;\n\t\t}\n\t}\n\tif (path.includes(\"/storage\")) {\n\t\treturn \"storage\";\n\t}\n\tif (path.includes(\"/billing\")) {\n\t\treturn \"billing\";\n\t}\n\tif (path.includes(\"/auth\")) {\n\t\treturn \"auth\";\n\t}\n\treturn undefined;\n}\n","export class AthenaBillingSubjectError extends Error {\n\treadonly code: string;\n\treadonly status: number;\n\n\tconstructor(input: { code: string; message: string; status: number }) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingSubjectError\";\n\t\tthis.code = input.code;\n\t\tthis.status = input.status;\n\t}\n}\n\nexport function billingSubjectNotFound(message = \"Billing document not found.\"): AthenaBillingSubjectError {\n\treturn new AthenaBillingSubjectError({\n\t\tcode: \"ATHENA_BILLING_NOT_FOUND\",\n\t\tmessage,\n\t\tstatus: 404,\n\t});\n}\n\nexport function isAthenaBillingSubjectError(\n\terror: unknown,\n): error is AthenaBillingSubjectError {\n\tif (error instanceof AthenaBillingSubjectError) {\n\t\treturn true;\n\t}\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; name?: unknown; status?: unknown };\n\treturn (\n\t\trecord.code === \"ATHENA_BILLING_NOT_FOUND\" ||\n\t\trecord.name === \"AthenaBillingSubjectError\" ||\n\t\t(typeof record.code === \"string\" &&\n\t\t\trecord.code.startsWith(\"ATHENA_BILLING_SUBJECT_\") &&\n\t\t\ttypeof record.status === \"number\")\n\t);\n}\n\nexport function billingSubjectConflict(\n\tmessage = \"Billing subject binding is in conflict.\",\n): AthenaBillingSubjectError {\n\treturn new AthenaBillingSubjectError({\n\t\tcode: \"ATHENA_BILLING_SUBJECT_CONFLICT\",\n\t\tmessage,\n\t\tstatus: 409,\n\t});\n}\n","import {\n\tATHENA_BILLING_AUTHORIZATION_DENIED,\n\tATHENA_BILLING_OPERATION_UNAVAILABLE,\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingAuthorizationError,\n\tAthenaBillingCapabilityError,\n\tAthenaBillingError,\n\tAthenaBillingProviderError,\n\tAthenaBillingProviderRequestError,\n\ttype BillingProviderErrorKind,\n\ttype BillingRetryDisposition,\n} from \"../errors.ts\";\nimport { AthenaBillingSubjectError } from \"../subject/errors.ts\";\n\nexport interface AthenaTransportErrorEnvelope {\n\tcode?: string;\n\terrorNumber?: number;\n\tkind?: string;\n\tmessage?: string;\n\tmissing?: readonly unknown[];\n\toperation?: string;\n\tprovider?: string;\n\treason?: string;\n\tretry?: string;\n\tstatus?: number;\n}\n\nconst PROVIDER_KINDS = new Set<BillingProviderErrorKind>([\n\t\"authentication\",\n\t\"authorization\",\n\t\"invalid_request\",\n\t\"not_found\",\n\t\"conflict\",\n\t\"idempotency_conflict\",\n\t\"rate_limited\",\n\t\"provider_unavailable\",\n\t\"network\",\n\t\"timeout\",\n\t\"signature_invalid\",\n\t\"unsupported_operation\",\n\t\"unsupported_currency\",\n\t\"unsupported_payment_method\",\n\t\"customer_action_required\",\n\t\"payment_declined\",\n\t\"resource_state_conflict\",\n\t\"serialization\",\n\t\"unknown\",\n]);\n\nexport function billingErrorFromTransport(\n\tenvelope: AthenaTransportErrorEnvelope | Record<string, unknown>,\n): Error {\n\tconst record = envelope as AthenaTransportErrorEnvelope;\n\tconst code = typeof record.code === \"string\" ? record.code : undefined;\n\tconst message =\n\t\ttypeof record.message === \"string\" && record.message\n\t\t\t? record.message\n\t\t\t: \"billing request failed\";\n\tconst operation =\n\t\ttypeof record.operation === \"string\" && record.operation\n\t\t\t? record.operation\n\t\t\t: \"billing\";\n\tconst status = typeof record.status === \"number\" ? record.status : undefined;\n\tconst kind = asProviderKind(record.kind);\n\n\tif (code === \"ATHENA_BILLING_NOT_FOUND\") {\n\t\treturn new AthenaBillingSubjectError({\n\t\t\tcode: \"ATHENA_BILLING_NOT_FOUND\",\n\t\t\tmessage,\n\t\t\tstatus: status ?? 404,\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_AUTHORIZATION_DENIED) {\n\t\tconst missing = Array.isArray(record.missing)\n\t\t\t? record.missing.map((entry) => String(entry))\n\t\t\t: [];\n\t\treturn new AthenaBillingAuthorizationError({\n\t\t\tmissing,\n\t\t\toperation,\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_OPERATION_UNAVAILABLE) {\n\t\treturn new AthenaBillingCapabilityError({\n\t\t\tmessage,\n\t\t\toperation,\n\t\t\treason:\n\t\t\t\ttypeof record.reason === \"string\" && record.reason\n\t\t\t\t\t? record.reason\n\t\t\t\t\t: \"unsupported_operation\",\n\t\t});\n\t}\n\n\tif (code === ATHENA_BILLING_PROVIDER_NOT_CONFIGURED) {\n\t\treturn new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage,\n\t\t});\n\t}\n\n\tif (\n\t\tcode === \"ATHENA_BILLING_WEBHOOK_SIGNATURE_INVALID\" ||\n\t\tkind === \"signature_invalid\"\n\t) {\n\t\treturn new AthenaBillingProviderRequestError({\n\t\t\tkind: \"signature_invalid\",\n\t\t\tmessage,\n\t\t\tprovider: typeof record.provider === \"string\" ? record.provider : \"mollie\",\n\t\t\tretry: asRetry(record.retry) ?? \"never\",\n\t\t\tstatus: status ?? 400,\n\t\t});\n\t}\n\n\tif (code === \"ATHENA_BILLING_PROVIDER_REQUEST\" || kind) {\n\t\treturn new AthenaBillingProviderRequestError({\n\t\t\tkind: kind ?? \"unknown\",\n\t\t\tmessage,\n\t\t\tprovider: typeof record.provider === \"string\" ? record.provider : \"mollie\",\n\t\t\tretry: asRetry(record.retry) ?? \"never\",\n\t\t\tstatus: status ?? defaultProviderRequestStatus(kind ?? \"unknown\"),\n\t\t});\n\t}\n\n\tif (\n\t\tcode === \"ATHENA_BILLING_INVALID_REQUEST\" ||\n\t\t(code && /ATHENA_BILLING_MONEY_|ATHENA_BILLING_IDEMPOTENCY/.test(code))\n\t) {\n\t\tconst error = new AthenaBillingError({\n\t\t\tbody: record,\n\t\t\tendpoint: \"\",\n\t\t\tmessage,\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: status ?? 400,\n\t\t});\n\t\tObject.assign(error, { code, errorNumber: record.errorNumber });\n\t\treturn error;\n\t}\n\n\tif (!code && status === undefined) {\n\t\treturn new Error(message);\n\t}\n\n\tconst error = new AthenaBillingError({\n\t\tbody: record,\n\t\tendpoint: \"\",\n\t\tmessage,\n\t\tmethod: \"POST\",\n\t\tstatus: status ?? 500,\n\t});\n\tObject.assign(error, { code, errorNumber: record.errorNumber });\n\treturn error;\n}\n\nfunction defaultProviderRequestStatus(\n\tkind: BillingProviderErrorKind,\n): number {\n\tswitch (kind) {\n\t\tcase \"not_found\":\n\t\t\treturn 404;\n\t\tcase \"rate_limited\":\n\t\t\treturn 429;\n\t\tcase \"provider_unavailable\":\n\t\tcase \"network\":\n\t\tcase \"timeout\":\n\t\t\treturn 503;\n\t\tcase \"unknown\":\n\t\t\treturn 500;\n\t\tdefault:\n\t\t\treturn 400;\n\t}\n}\n\nfunction asProviderKind(value: unknown): BillingProviderErrorKind | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\treturn PROVIDER_KINDS.has(value as BillingProviderErrorKind)\n\t\t? (value as BillingProviderErrorKind)\n\t\t: undefined;\n}\n\nfunction asRetry(value: unknown): BillingRetryDisposition | undefined {\n\tif (\n\t\tvalue === \"never\" ||\n\t\tvalue === \"safe\" ||\n\t\tvalue === \"reconcile_first\" ||\n\t\tvalue === \"customer_action_required\"\n\t) {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n","import { DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nimport { executeAthenaHttpTransport } from \"../../runtime/transport/http/client.ts\";\nimport type { AthenaHttpTransportIR } from \"../../runtime/transport/http/ir.ts\";\nimport { createAthenaHttpTransportIR } from \"../../runtime/transport/http.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"../../runtime/transport/topology.ts\";\nimport { AthenaBillingError } from \"../errors.ts\";\nimport type { BillingExecutionTarget } from \"../types.ts\";\nimport type { BillingCapabilities } from \"./capabilities.ts\";\nimport { billingErrorFromTransport } from \"./http-error.ts\";\nimport type {\n\tBillingCatalogPort,\n\tBillingPricePort,\n\tBillingProductPort,\n\tBillingSelfPort,\n} from \"./types.ts\";\n\nexport function resolveBrowserBillingEndpoint(endpoints?: {\n\tbilling?: string;\n}): string {\n\tconst advertised = endpoints?.billing?.trim();\n\tif (!advertised) {\n\t\treturn DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n\t}\n\tif (/^https?:\\/\\//i.test(advertised)) {\n\t\treturn DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n\t}\n\treturn advertised.startsWith(\"/\")\n\t\t? advertised\n\t\t: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n}\n\nfunction billingHttpSuccessData(\n\tbody: unknown,\n\tenveloped: boolean | undefined,\n): unknown {\n\tif (enveloped === false) {\n\t\treturn undefined;\n\t}\n\tif (body === null || Array.isArray(body)) {\n\t\treturn body;\n\t}\n\tif (body && typeof body === \"object\") {\n\t\tconst leftover = body as { data?: unknown; ok?: unknown };\n\t\tif (typeof leftover.ok === \"boolean\") {\n\t\t\treturn \"data\" in leftover ? leftover.data : undefined;\n\t\t}\n\t}\n\treturn body;\n}\n\nfunction asExecutorTransport(\n\tir: ReturnType<typeof createAthenaHttpTransportIR>,\n): AthenaHttpTransportIR {\n\treturn {\n\t\tbasePath: ir.basePath,\n\t\tcredentials: ir.credentials,\n\t\tdomain: ir.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n\t};\n}\n\nfunction sameOriginBillingTransport(\n\tadvertised: AthenaHttpTransportIR,\n): AthenaHttpTransportIR | undefined {\n\tif (advertised.origin !== \"same-origin\") {\n\t\treturn undefined;\n\t}\n\tif (/^https?:\\/\\//i.test(advertised.basePath)) {\n\t\treturn undefined;\n\t}\n\treturn advertised;\n}\n\ntype BrowserBillingTransportOptions = {\n\tendpoints?: { billing?: string };\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n};\n\nasync function resolveBillingTransport(\n\toptions?: BrowserBillingTransportOptions,\n): Promise<AthenaHttpTransportIR | undefined> {\n\tconst explicit = options?.endpoints?.billing?.trim();\n\tif (explicit) {\n\t\treturn asExecutorTransport(\n\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\tbasePath: resolveBrowserBillingEndpoint({ billing: explicit }),\n\t\t\t\tdomain: \"billing\",\n\t\t\t\torigin: \"same-origin\",\n\t\t\t}),\n\t\t);\n\t}\n\tconst topology =\n\t\toptions?.topology ??\n\t\t(options?.resolveTopology ? await options.resolveTopology() : undefined);\n\tif (topology) {\n\t\tconst advertised = topology.transports.billing;\n\t\tif (advertised?.kind === \"http\") {\n\t\t\treturn (\n\t\t\t\tsameOriginBillingTransport(advertised) ??\n\t\t\t\tasExecutorTransport(\n\t\t\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\t\t\tbasePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\torigin: \"same-origin\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\treturn asExecutorTransport(\n\t\tcreateAthenaHttpTransportIR({\n\t\t\tbasePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n\t\t\tdomain: \"billing\",\n\t\t\torigin: \"same-origin\",\n\t\t}),\n\t);\n}\n\n/** Browser billing client: catalog, subject-self, and capability probe only. */\nexport type AthenaBrowserBillingTransport = {\n\tcatalog: BillingCatalogPort;\n\tgetCapabilities: (\n\t\tinput: BillingExecutionTarget,\n\t) => Promise<BillingCapabilities>;\n\tself: BillingSelfPort;\n};\n\nexport function createBrowserBillingTransport(options?: {\n\tbaseUrl?: string;\n\tendpoints?: { billing?: string };\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n}): AthenaBrowserBillingTransport {\n\tlet pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n\tconst loadTransport = () => {\n\t\tpending ??= resolveBillingTransport(options);\n\t\treturn pending;\n\t};\n\n\tasync function call(operation: string, payload: unknown): Promise<unknown> {\n\t\tconst transport = await loadTransport();\n\t\tif (!transport) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: undefined,\n\t\t\t\tcode: \"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage: \"billing runtime is not configured\",\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 503,\n\t\t\t});\n\t\t}\n\t\tconst result = await executeAthenaHttpTransport({\n\t\t\tfetch: options?.fetch ?? fetch,\n\t\t\theaders: options?.headers,\n\t\t\tinvocation: {\n\t\t\t\tdomain: \"billing\",\n\t\t\t\toperation,\n\t\t\t\tpayload,\n\t\t\t},\n\t\t\troot: options?.baseUrl,\n\t\t\ttransport,\n\t\t});\n\t\tif (!result.ok) {\n\t\t\tconst details = result.error.details;\n\t\t\tconst envelope =\n\t\t\t\tdetails && typeof details === \"object\"\n\t\t\t\t\t? (details as Record<string, unknown>)\n\t\t\t\t\t: {};\n\t\t\tconst envelopeStatus =\n\t\t\t\ttypeof envelope.status === \"number\" ? envelope.status : undefined;\n\t\t\tconst nested =\n\t\t\t\tenvelope.error && typeof envelope.error === \"object\"\n\t\t\t\t\t? (envelope.error as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\t\t\tconst rawWire =\n\t\t\t\ttypeof envelope.code === \"string\"\n\t\t\t\t\t? envelope.code\n\t\t\t\t\t: typeof nested?.code === \"string\"\n\t\t\t\t\t\t? nested.code\n\t\t\t\t\t\t: undefined;\n\t\t\tconst wireCode =\n\t\t\t\trawWire && !rawWire.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n\t\t\t\t\t? rawWire\n\t\t\t\t\t: undefined;\n\t\t\tconst transportCode = result.error.code;\n\t\t\tconst code =\n\t\t\t\twireCode ??\n\t\t\t\t(typeof transportCode === \"string\" &&\n\t\t\t\t\t!transportCode.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n\t\t\t\t\t? transportCode\n\t\t\t\t\t: undefined);\n\t\t\tthrow billingErrorFromTransport({\n\t\t\t\t...envelope,\n\t\t\t\t...(nested ?? {}),\n\t\t\t\t...(code !== undefined ? { code } : {}),\n\t\t\t\terrorNumber:\n\t\t\t\t\ttypeof nested?.errorNumber === \"number\"\n\t\t\t\t\t\t? nested.errorNumber\n\t\t\t\t\t\t: result.error.errorNumber,\n\t\t\t\tmessage: result.error.message,\n\t\t\t\tmissing: nested?.missing ?? envelope.missing,\n\t\t\t\toperation:\n\t\t\t\t\ttypeof nested?.operation === \"string\"\n\t\t\t\t\t\t? nested.operation\n\t\t\t\t\t\t: envelope.operation,\n\t\t\t\t...(envelopeStatus !== undefined ? { status: envelopeStatus } : {}),\n\t\t\t});\n\t\t}\n\t\treturn billingHttpSuccessData(result.data, result.enveloped);\n\t}\n\n\tconst self: BillingSelfPort = {\n\t\tcheckout: {\n\t\t\tcreate: (input) => call(\"self.checkout.create\", input) as never,\n\t\t\tresume: (input) => call(\"self.checkout.resume\", input) as never,\n\t\t},\n\t\tinvoices: {\n\t\t\tget: (input) => call(\"self.invoices.get\", input) as never,\n\t\t\tlist: (input) => call(\"self.invoices.list\", input) as never,\n\t\t},\n\t\tpayments: {\n\t\t\tget: (input) => call(\"self.payments.get\", input) as never,\n\t\t\tlist: (input) => call(\"self.payments.list\", input) as never,\n\t\t},\n\t\tsubscription: {\n\t\t\tcancel: (input) => call(\"self.subscription.cancel\", input) as never,\n\t\t\tenroll: (input) => call(\"self.subscription.enroll\", input) as never,\n\t\t\tget: (input) => call(\"self.subscription.get\", input) as never,\n\t\t},\n\t};\n\tconst products: BillingProductPort = {\n\t\tlist: (input) => call(\"products.list\", input) as never,\n\t};\n\tconst prices: BillingPricePort = {\n\t\tlist: (input) => call(\"prices.list\", input) as never,\n\t};\n\n\treturn {\n\t\tcatalog: { prices, products },\n\t\tgetCapabilities: (input) =>\n\t\t\tcall(\"getCapabilities\", input) as Promise<BillingCapabilities>,\n\t\tself,\n\t};\n}\n","/**\n * Internal Athena runtime plan.\n *\n * One pipeline owns environment + bindings + explicit intent + defaults.\n * `createClient` materializes from this plan; the snapshot is not a public\n * config surface.\n */\n\nimport { athenaAuthConfig } from \"../auth/config.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\ninterface ResolveAuthInput {\n  mode?: string;\n  url?: string | null;\n}\n\nexport interface ResolveConfigInput {\n  auth?: false | ResolveAuthInput | null;\n  databaseUrl?: string | null;\n  db?: { d1?: unknown; pgUri?: string | null; pool?: unknown };\n  env?: Record<string, string | undefined>;\n  mode?: string | null;\n  storage?: {\n    bucket?: string | null;\n    prefix?: string | null;\n    provider?: string | null;\n    r2?: unknown;\n    root?: string | null;\n    s3?: unknown;\n    url?: string | null;\n  };\n  url?: string | null;\n}\n\nexport type AthenaRuntimeEnvironment =\n  | \"node\"\n  | \"browser\"\n  | \"react-native\"\n  | \"cloudflare\";\n\nexport type AthenaDbTransport = \"postgres\" | \"gateway\" | \"d1\";\nexport type AthenaAuthRuntime = \"embedded\" | \"remote\" | \"disabled\";\nexport type AthenaStorageTransport = \"http\" | \"r2\" | \"local\" | \"s3\" | \"none\";\n\nexport interface ResolvedAthenaRuntime {\n  auth: { runtime: AthenaAuthRuntime };\n  db: { transport: AthenaDbTransport };\n  runtime: { environment: AthenaRuntimeEnvironment };\n  storage: { transport: AthenaStorageTransport };\n}\n\n/** Redacted public snapshot. Not a config surface. */\nexport interface AthenaRuntimeDiagnostics {\n  auth: AthenaAuthRuntime;\n  database: \"postgres-direct\" | \"gateway\" | \"d1\";\n  runtime: AthenaRuntimeEnvironment;\n  storage: AthenaStorageTransport;\n}\n\nexport function toAthenaRuntimeDiagnostics(\n  plan: ResolvedAthenaRuntime\n): AthenaRuntimeDiagnostics {\n  return {\n    auth: plan.auth.runtime,\n    database: plan.db.transport === \"postgres\" ? \"postgres-direct\" : plan.db.transport,\n    runtime: plan.runtime.environment,\n    storage: plan.storage.transport,\n  };\n}\n\nexport interface ResolveAthenaRuntimeOptions {\n  environment?: AthenaRuntimeEnvironment;\n  trustedNode?: boolean;\n}\n\nfunction hasBinding(value: unknown): boolean {\n  return value !== undefined && value !== null;\n}\n\n/** Same URI inputs as folding: nested pgUri, then databaseUrl, then DATABASE_URL. */\nexport function resolveDatabaseUri(\n  config: ResolveConfigInput\n): string | undefined {\n  return (\n    normalizeOptional(config.db?.pgUri) ??\n    normalizeOptional(config.databaseUrl) ??\n    normalizeOptional(config.env?.DATABASE_URL)\n  );\n}\n\nfunction isExplicitGatewayMode(\n  mode: unknown,\n  env?: Record<string, string | undefined>\n): boolean {\n  const raw =\n    (typeof mode === \"string\" ? mode : undefined) ?? env?.ATHENA_EXECUTION_MODE;\n  const key = raw?.trim().toLowerCase();\n  return (\n    key === \"gateway\" ||\n    key === \"http\" ||\n    key === \"remote\" ||\n    key === \"server\"\n  );\n}\n\nexport function detectAthenaRuntimeEnvironment(): AthenaRuntimeEnvironment {\n  const nav = (globalThis as { navigator?: { product?: string; userAgent?: string } })\n    .navigator;\n  if (nav?.product === \"ReactNative\") {\n    return \"react-native\";\n  }\n  if (typeof nav?.userAgent === \"string\" && /Cloudflare-Workers/i.test(nav.userAgent)) {\n    return \"cloudflare\";\n  }\n  if (typeof (globalThis as { window?: unknown }).window !== \"undefined\") {\n    return \"browser\";\n  }\n  return \"node\";\n}\n\n/**\n * Trusted Node/server only: omitted auth.mode + database URI (`db.pgUri`,\n * `databaseUrl`, or `env.DATABASE_URL`) + no auth.url means embedded Auth.\n * Explicit mode and auth.url always win. `auth: false` stays disabled.\n */\nexport function inferEmbeddedAuthMode<T extends ResolveConfigInput>(\n  config: T\n): T {\n  if (config.auth === false) {\n    return { ...config, auth: false };\n  }\n  const authObject = athenaAuthConfig(\n    config.auth as false | Record<string, unknown> | null | undefined\n  );\n  const explicit = authObject?.mode;\n  if (explicit === \"local\" || explicit === \"remote\") {\n    return config;\n  }\n  if (normalizeOptional(authObject?.url as string | null | undefined)) {\n    return config;\n  }\n  if (!resolveDatabaseUri(config)) {\n    return config;\n  }\n  return {\n    ...config,\n    auth: {\n      ...authObject,\n      mode: \"local\",\n    },\n  };\n}\n\nexport function resolveAthenaRuntime(\n  config: ResolveConfigInput,\n  options: ResolveAthenaRuntimeOptions = {}\n): ResolvedAthenaRuntime {\n  const environment =\n    options.environment ?? detectAthenaRuntimeEnvironment();\n  const trustedNode = options.trustedNode ?? environment === \"node\";\n  const pgUri = resolveDatabaseUri(config);\n  const hasD1 = hasBinding(config.db?.d1);\n  const hasR2 = hasBinding(config.storage?.r2);\n  const hasStorageUrl = Boolean(normalizeOptional(config.storage?.url));\n  const gatewayForced = isExplicitGatewayMode(config.mode, config.env);\n\n  let dbTransport: AthenaDbTransport = \"gateway\";\n  if (hasD1 && !gatewayForced) {\n    dbTransport = \"d1\";\n  } else if (pgUri && trustedNode && !gatewayForced) {\n    dbTransport = \"postgres\";\n  }\n\n  let authRuntime: AthenaAuthRuntime = \"remote\";\n  if (config.auth === false) {\n    authRuntime = \"disabled\";\n  } else {\n    const authObject = athenaAuthConfig(\n      config.auth as false | Record<string, unknown> | null | undefined\n    );\n    const explicit = authObject?.mode;\n    const authUrl =\n      typeof authObject?.url === \"string\" ? authObject.url : undefined;\n    if (explicit === \"local\") {\n      if (!trustedNode) {\n        throw new AthenaConfigurationError(\n          \"ATHENA_AUTH_LOCAL_NODE_REQUIRED\",\n          'auth.mode \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use auth.mode \"remote\".',\n          \"auth\"\n        );\n      }\n      authRuntime = \"embedded\";\n    } else if (explicit === \"remote\" || normalizeOptional(authUrl)) {\n      authRuntime = \"remote\";\n    } else if (pgUri && trustedNode) {\n      authRuntime = \"embedded\";\n    }\n  }\n\n  const wantsLocalStorage = config.storage?.provider === \"local\";\n  if (wantsLocalStorage && !trustedNode) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\",\n      'storage.provider \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n      \"storage\"\n    );\n  }\n  const wantsS3Storage = config.storage?.provider === \"s3\";\n  if (wantsS3Storage && !trustedNode) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_STORAGE_S3_NODE_REQUIRED\",\n      'storage.provider \"s3\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n      \"storage\"\n    );\n  }\n\n  let storageTransport: AthenaStorageTransport = \"none\";\n  if (wantsLocalStorage) {\n    storageTransport = \"local\";\n  } else if (hasR2) {\n    storageTransport = \"r2\";\n  } else if (wantsS3Storage) {\n    storageTransport = \"s3\";\n  } else if (hasStorageUrl) {\n    storageTransport = \"http\";\n  }\n\n  return {\n    auth: { runtime: authRuntime },\n    db: { transport: dbTransport },\n    runtime: { environment },\n    storage: { transport: storageTransport },\n  };\n}\n","import {\n\tATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n\tAthenaBillingCredentialError,\n} from \"../errors.ts\";\nimport type { BillingProviderName } from \"../types.ts\";\nimport type { BillingEnvironmentName } from \"./environment.ts\";\nimport { billingEnvironmentName } from \"./environment.ts\";\n\nexport type BillingCredentialEnvironment = BillingEnvironmentName;\n\nexport type BillingCredentialClass = \"api_key\" | \"access_token\";\n\nexport type BillingCredentialKind =\n\t| \"api_key\"\n\t| \"secret_key\"\n\t| \"restricted_key\"\n\t| \"advanced_access_token\"\n\t| \"organization_access_token\"\n\t| \"oauth_access_token\";\n\nconst REDACTED = \"[REDACTED]\";\n\nexport class BillingSecret {\n\treadonly #value: string;\n\n\tconstructor(value: string) {\n\t\tthis.#value = value;\n\t}\n\n\trevealForProviderRuntime(): string {\n\t\treturn this.#value;\n\t}\n\n\ttoJSON(): string {\n\t\treturn REDACTED;\n\t}\n\n\ttoString(): string {\n\t\treturn REDACTED;\n\t}\n\n\tvalueOf(): string {\n\t\treturn REDACTED;\n\t}\n\n\t[Symbol.for(\"nodejs.util.inspect.custom\")](): string {\n\t\treturn REDACTED;\n\t}\n}\n\nexport interface BillingStoredCredential {\n\treadonly kind: BillingCredentialKind;\n\treadonly secret: BillingSecret;\n}\n\nexport interface BillingEnvironmentCredentials<TCredential> {\n\treadonly test?: TCredential;\n\treadonly live?: TCredential;\n}\n\nexport interface BillingProviderBindingCredentials {\n\treadonly test?: BillingStoredCredential;\n\treadonly live?: BillingStoredCredential;\n}\n\nexport interface BillingCredentialBinding {\n\treadonly kind: \"configured\" | \"connection\";\n\treadonly provider: BillingProviderName;\n\treadonly credentials: BillingProviderBindingCredentials;\n}\n\nexport interface BillingResolvedCredential {\n\treadonly provider: BillingProviderName;\n\treadonly environment: BillingCredentialEnvironment;\n\treadonly kind: BillingCredentialKind;\n\trevealForProviderRuntime(): string;\n}\n\nexport interface BillingCredentialSelection {\n\treadonly provider: BillingProviderName;\n\treadonly environment: BillingCredentialEnvironment;\n\treadonly testMode: boolean;\n\treadonly credentialKind: BillingCredentialKind;\n\treadonly credential: BillingResolvedCredential;\n}\n\nexport type BillingCredentialEnvironmentInference = \"test\" | \"live\" | \"unknown\";\n\nexport function credentialClassForKind(\n\tkind: BillingCredentialKind,\n): BillingCredentialClass {\n\treturn kind === \"advanced_access_token\" ||\n\t\tkind === \"organization_access_token\" ||\n\t\tkind === \"oauth_access_token\"\n\t\t? \"access_token\"\n\t\t: \"api_key\";\n}\n\nexport function availableBillingCredentialEnvironments(\n\tcredentials: BillingProviderBindingCredentials,\n): BillingCredentialEnvironment[] {\n\tconst available: BillingCredentialEnvironment[] = [];\n\tif (credentials.test != null) {\n\t\tavailable.push(\"test\");\n\t}\n\tif (credentials.live != null) {\n\t\tavailable.push(\"live\");\n\t}\n\treturn available;\n}\n\nexport function resolveBillingCredential(input: {\n\tprovider: BillingProviderName;\n\ttestMode: boolean;\n\tbinding: BillingCredentialBinding;\n}): BillingCredentialSelection {\n\tconst environment = billingEnvironmentName(input.testMode);\n\tconst stored = input.binding.credentials[environment];\n\tif (stored == null) {\n\t\tconst available = availableBillingCredentialEnvironments(\n\t\t\tinput.binding.credentials,\n\t\t);\n\t\tthrow new AthenaBillingCredentialError({\n\t\t\tcode: ATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n\t\t\tprovider: input.provider,\n\t\t\tenvironment,\n\t\t\tmessage: `${formatProviderLabel(input.provider)} ${environment} billing credential is unavailable. Configured environments: ${available.length > 0 ? available.join(\", \") : \"none\"}.`,\n\t\t});\n\t}\n\tconst credential: BillingResolvedCredential = {\n\t\tprovider: input.provider,\n\t\tenvironment,\n\t\tkind: stored.kind,\n\t\trevealForProviderRuntime: () => stored.secret.revealForProviderRuntime(),\n\t};\n\treturn {\n\t\tprovider: input.provider,\n\t\tenvironment,\n\t\ttestMode: input.testMode,\n\t\tcredentialKind: stored.kind,\n\t\tcredential,\n\t};\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n\tif (provider.length === 0) {\n\t\treturn \"Billing\";\n\t}\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import {\n\tATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\tAthenaBillingCredentialError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type {\n\tBillingCredentialEnvironment,\n\tBillingCredentialEnvironmentInference,\n} from \"../../credentials.ts\";\n\nexport function assertCredentialSlotEnvironment(input: {\n\tprovider: BillingProviderName;\n\tenvironment: BillingCredentialEnvironment;\n\tinferred: BillingCredentialEnvironmentInference;\n}): void {\n\tif (input.inferred === \"unknown\" || input.inferred === input.environment) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCredentialError({\n\t\tcode: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\t\tprovider: input.provider,\n\t\tenvironment: input.environment,\n\t\tmessage: `${formatProviderLabel(input.provider)} ${input.environment} billing credential does not match the ${input.inferred} environment encoded in the secret.`,\n\t});\n}\n\nexport type MollieCredentialPrefixClass = \"api_key\" | \"access_token\" | \"unknown\";\n\nexport function classifyMollieCredentialPrefix(\n\tsecret: string,\n): MollieCredentialPrefixClass {\n\tif (secret.startsWith(\"test_\") || secret.startsWith(\"live_\")) {\n\t\treturn \"api_key\";\n\t}\n\tif (secret.startsWith(\"access_\")) {\n\t\treturn \"access_token\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function inferMollieCredentialEnvironment(\n\tsecret: string,\n): BillingCredentialEnvironmentInference {\n\tif (secret.startsWith(\"test_\")) {\n\t\treturn \"test\";\n\t}\n\tif (secret.startsWith(\"live_\")) {\n\t\treturn \"live\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function inferStripeCredentialEnvironment(\n\tsecret: string,\n): BillingCredentialEnvironmentInference {\n\tif (\n\t\tsecret.includes(\"_test_\") ||\n\t\tsecret.startsWith(\"sk_test\") ||\n\t\tsecret.startsWith(\"rk_test\") ||\n\t\tsecret.startsWith(\"pk_test\")\n\t) {\n\t\treturn \"test\";\n\t}\n\tif (\n\t\tsecret.includes(\"_live_\") ||\n\t\tsecret.startsWith(\"sk_live\") ||\n\t\tsecret.startsWith(\"rk_live\") ||\n\t\tsecret.startsWith(\"pk_live\")\n\t) {\n\t\treturn \"live\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n\tif (provider.length === 0) {\n\t\treturn \"Billing\";\n\t}\n\treturn provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import type { BillingCredentialAuthority } from \"../../authority.ts\";\nimport type { MollieBillingApiMode } from \"../../../providers/types.ts\";\n\nexport const STANDARD_MOLLIE_API_KEY_PERMISSIONS = {\n\t\"customers.read\": true,\n\t\"customers.write\": true,\n\t\"mandates.read\": true,\n\t\"mandates.write\": true,\n\t\"orders.read\": true,\n\t\"orders.write\": true,\n\t\"payment-links.read\": true,\n\t\"payment-links.write\": true,\n\t\"payments.read\": true,\n\t\"payments.write\": true,\n\t\"refunds.read\": true,\n\t\"refunds.write\": true,\n\t\"sales-invoices.read\": true,\n\t\"shipments.read\": true,\n\t\"shipments.write\": true,\n\t\"subscriptions.read\": true,\n\t\"subscriptions.write\": true,\n} as const;\n\nexport type MollieDeclaredPermissionInput = Record<\n\tstring,\n\tboolean | Record<string, boolean | undefined>\n>;\n\nexport function normalizeMollieDeclaredPermissions(\n\tinput: MollieDeclaredPermissionInput | undefined,\n): Record<string, boolean> {\n\tif (input == null) {\n\t\treturn {};\n\t}\n\tconst permissions: Record<string, boolean> = {};\n\tfor (const [key, value] of Object.entries(input)) {\n\t\tif (typeof value === \"boolean\") {\n\t\t\tpermissions[key] = value;\n\t\t\tcontinue;\n\t\t}\n\t\tif (value == null || typeof value !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const [action, allowed] of Object.entries(value)) {\n\t\t\tif (typeof allowed !== \"boolean\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpermissions[`${key}.${action}`] = allowed;\n\t\t}\n\t}\n\treturn permissions;\n}\n\nexport function resolveMollieApiKeyAuthority(input: {\n\tprofileId?: string | null;\n\tmodes: { test: boolean; live: boolean };\n}): BillingCredentialAuthority {\n\treturn {\n\t\tmodes: input.modes,\n\t\tpermissions: { ...STANDARD_MOLLIE_API_KEY_PERMISSIONS },\n\t\tscope: {\n\t\t\tkind: \"profile\",\n\t\t\t...(input.profileId != null && input.profileId.length > 0\n\t\t\t\t? { profileId: input.profileId }\n\t\t\t\t: {}),\n\t\t},\n\t\tsource: \"derived\",\n\t};\n}\n\nexport function resolveMollieAdvancedTokenAuthority(input: {\n\tapiMode: MollieBillingApiMode;\n\tdeclaredPermissions?: MollieDeclaredPermissionInput;\n\tscope:\n\t\t| { kind: \"organization\" }\n\t\t| { kind: \"profile\"; profileId?: string };\n}): BillingCredentialAuthority {\n\treturn {\n\t\tmodes: modesForApiMode(input.apiMode),\n\t\tpermissions: normalizeMollieDeclaredPermissions(input.declaredPermissions),\n\t\tscope: input.scope,\n\t\tsource: \"declared\",\n\t};\n}\n\nexport function resolveMollieCompatibleTokenAuthority(input: {\n\tmodes: { test: boolean; live: boolean };\n\tdeclaredPermissions?: MollieDeclaredPermissionInput;\n\tprofileId?: string | null;\n}): BillingCredentialAuthority {\n\tconst declared = normalizeMollieDeclaredPermissions(input.declaredPermissions);\n\treturn {\n\t\tmodes: input.modes,\n\t\tpermissions: declared,\n\t\tscope: {\n\t\t\tkind: \"profile\",\n\t\t\t...(input.profileId != null && input.profileId.length > 0\n\t\t\t\t? { profileId: input.profileId }\n\t\t\t\t: {}),\n\t\t},\n\t\tsource: \"declared\",\n\t};\n}\n\nexport function modesForApiMode(apiMode: MollieBillingApiMode): {\n\ttest: boolean;\n\tlive: boolean;\n} {\n\tif (apiMode === \"both\") {\n\t\treturn { live: true, test: true };\n\t}\n\tif (apiMode === \"live\") {\n\t\treturn { live: true, test: false };\n\t}\n\treturn { live: false, test: true };\n}\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../../../../errors.ts\";\nimport type {\n\tNormalizedStripeBillingProviderConfig,\n\tStripeBillingCredentialKind,\n\tStripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport {\n\tBillingSecret,\n\ttype BillingProviderBindingCredentials,\n\ttype BillingStoredCredential,\n} from \"../../../credentials.ts\";\nimport {\n\tassertCredentialSlotEnvironment,\n\tinferStripeCredentialEnvironment,\n} from \"../inspect.ts\";\n\nconst DEFAULT_STRIPE_API_BASE_URL = \"https://api.stripe.com\";\n\nfunction nonEmpty(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction storeStripeCredential(\n\tsecret: string,\n\tenvironment: \"test\" | \"live\",\n\tkind: StripeBillingCredentialKind,\n): BillingStoredCredential {\n\tassertCredentialSlotEnvironment({\n\t\tprovider: \"stripe\",\n\t\tenvironment,\n\t\tinferred: inferStripeCredentialEnvironment(secret),\n\t});\n\treturn {\n\t\tkind,\n\t\tsecret: new BillingSecret(secret),\n\t};\n}\n\nexport function normalizeStripeBillingProviderConfig(\n\tconfig: StripeBillingProviderConfig,\n): NormalizedStripeBillingProviderConfig {\n\tconst credentialKind: StripeBillingCredentialKind =\n\t\tconfig.credentialKind ?? \"secret_key\";\n\tconst testSecret =\n\t\tcredentialKind === \"oauth_access_token\"\n\t\t\t? nonEmpty(\"testToken\" in config ? config.testToken : undefined)\n\t\t\t: nonEmpty(\"testKey\" in config ? config.testKey : undefined);\n\tconst liveSecret =\n\t\tcredentialKind === \"oauth_access_token\"\n\t\t\t? nonEmpty(\"liveToken\" in config ? config.liveToken : undefined)\n\t\t\t: nonEmpty(\"liveKey\" in config ? config.liveKey : undefined);\n\tconst credentials: BillingProviderBindingCredentials = {\n\t\t...(testSecret\n\t\t\t? { test: storeStripeCredential(testSecret, \"test\", credentialKind) }\n\t\t\t: {}),\n\t\t...(liveSecret\n\t\t\t? { live: storeStripeCredential(liveSecret, \"live\", credentialKind) }\n\t\t\t: {}),\n\t};\n\tif (credentials.test == null && credentials.live == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.stripe requires a test or live credential.\",\n\t\t});\n\t}\n\tconst accountId = nonEmpty(\n\t\t\"accountId\" in config ? config.accountId : undefined,\n\t);\n\treturn {\n\t\tprovider: \"stripe\",\n\t\tcredentials,\n\t\taccountId: accountId ?? null,\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_STRIPE_API_BASE_URL,\n\t\tcredentialKind,\n\t};\n}\n\nfunction isNormalizedStripeConfig(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): config is NormalizedStripeBillingProviderConfig {\n\treturn \"provider\" in config && config.provider === \"stripe\";\n}\n\nexport function normalizeStripeRuntimeConfig(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): NormalizedStripeBillingProviderConfig {\n\tif (isNormalizedStripeConfig(config)) {\n\t\treturn config;\n\t}\n\treturn normalizeStripeBillingProviderConfig(config);\n}\n","import {\n\tdetectAthenaRuntimeEnvironment,\n\ttype AthenaRuntimeEnvironment,\n} from \"../../../../runtime/resolve.ts\";\nimport {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n\tATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n\tBillingProviderConfigMap,\n\tBillingProviderDiagnostics,\n\tMollieBillingApiMode,\n\tMollieBillingCredentialKind,\n\tMollieBillingProviderConfig,\n\tMollieSdkAdapterFactory,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tNormalizedBillingProviderConfigs,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { BillingCredentialAuthority } from \"../../authority.ts\";\nimport {\n\tavailableBillingCredentialEnvironments,\n\tBillingSecret,\n\ttype BillingProviderBindingCredentials,\n\ttype BillingStoredCredential,\n} from \"../../credentials.ts\";\nimport {\n\tassertCredentialSlotEnvironment,\n\tclassifyMollieCredentialPrefix,\n\tinferMollieCredentialEnvironment,\n} from \"./inspect.ts\";\nimport {\n\tresolveMollieAdvancedTokenAuthority,\n\tresolveMollieApiKeyAuthority,\n\tresolveMollieCompatibleTokenAuthority,\n} from \"./token-authority.ts\";\nimport { normalizeStripeBillingProviderConfig } from \"./stripe/config.ts\";\n\nconst DEFAULT_MOLLIE_API_BASE_URL = \"https://api.mollie.com\";\n\nfunction configuredProviderNames(\n\tconfigured: BillingProviderConfigMap | undefined,\n): string[] {\n\tif (configured == null) {\n\t\treturn [];\n\t}\n\treturn Object.keys(configured).filter((name) => configured[name] != null);\n}\n\nexport function assertBillingProviderRuntimeEnvironment(\n\tconfigured?: BillingProviderConfigMap,\n\toptions?: { environment?: AthenaRuntimeEnvironment },\n): void {\n\tif (configuredProviderNames(configured).length === 0) {\n\t\treturn;\n\t}\n\tconst environment =\n\t\toptions?.environment ?? detectAthenaRuntimeEnvironment();\n\tif (environment === \"browser\" || environment === \"react-native\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers requires a trusted server runtime and cannot be configured in the browser or React Native.\",\n\t\t});\n\t}\n}\n\nfunction nonEmpty(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction defaultProfileIdFrom(config: {\n\tdefaultProfileId?: string | null;\n\tprofileId?: string | null;\n}): string | undefined {\n\treturn nonEmpty(config.defaultProfileId) ?? nonEmpty(config.profileId);\n}\n\nfunction storeMollieCredential(\n\tsecret: string,\n\tenvironment: \"test\" | \"live\",\n\tkind: MollieBillingCredentialKind,\n): BillingStoredCredential {\n\tassertCredentialSlotEnvironment({\n\t\tprovider: \"mollie\",\n\t\tenvironment,\n\t\tinferred: inferMollieCredentialEnvironment(secret),\n\t});\n\treturn {\n\t\tkind,\n\t\tsecret: new BillingSecret(secret),\n\t};\n}\n\nfunction assertMollieSecretKind(\n\tsecret: string,\n\tkind: MollieBillingCredentialKind,\n): void {\n\tconst prefix = classifyMollieCredentialPrefix(secret);\n\tif (kind === \"api_key\" && prefix === \"access_token\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie API keys cannot use an Advanced Access Token secret.\",\n\t\t});\n\t}\n\tif (kind === \"advanced_access_token\" && prefix !== \"access_token\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\tprefix === \"api_key\"\n\t\t\t\t\t? \"billing.providers.mollie advanced_access_token cannot use a test_ or live_ API key.\"\n\t\t\t\t\t: \"billing.providers.mollie advanced_access_token requires an access_ token prefix.\",\n\t\t});\n\t}\n}\n\nfunction pairCredentials(\n\ttestSecret: string | undefined,\n\tliveSecret: string | undefined,\n\tkind: MollieBillingCredentialKind,\n): BillingProviderBindingCredentials {\n\tif (testSecret) {\n\t\tassertMollieSecretKind(testSecret, kind);\n\t}\n\tif (liveSecret) {\n\t\tassertMollieSecretKind(liveSecret, kind);\n\t}\n\tconst credentials: BillingProviderBindingCredentials = {\n\t\t...(testSecret\n\t\t\t? { test: storeMollieCredential(testSecret, \"test\", kind) }\n\t\t\t: {}),\n\t\t...(liveSecret\n\t\t\t? { live: storeMollieCredential(liveSecret, \"live\", kind) }\n\t\t\t: {}),\n\t};\n\tif (credentials.test == null && credentials.live == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie requires a test or live credential.\",\n\t\t});\n\t}\n\treturn credentials;\n}\n\nfunction modesFromCredentials(\n\tcredentials: BillingProviderBindingCredentials,\n): { test: boolean; live: boolean } {\n\treturn {\n\t\tlive: credentials.live != null,\n\t\ttest: credentials.test != null,\n\t};\n}\n\nfunction adapterBackedSdk(\n\tadapter: MollieSdkAdapterFactory,\n): MollieSdkConstructor {\n\treturn class AdapterBackedMollieSdk {\n\t\tconstructor(options?: MollieSdkClientOptions) {\n\t\t\treturn adapter(options);\n\t\t}\n\t} as MollieSdkConstructor;\n}\n\nfunction requireMollieSdkBinding(config: MollieBillingProviderConfig): {\n\tadapter?: MollieSdkAdapterFactory;\n\tsdk: MollieSdkConstructor;\n} {\n\tif (config.adapter != null) {\n\t\treturn {\n\t\t\tadapter: config.adapter,\n\t\t\tsdk: config.sdk ?? adapterBackedSdk(config.adapter),\n\t\t};\n\t}\n\tif (config.sdk == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.sdk or adapter is required. Inject the official mollie-api-typescript Client constructor.\",\n\t\t});\n\t}\n\treturn { sdk: config.sdk };\n}\n\nfunction declaredPermissionsFrom(\n\tconfig: {\n\t\tauthority?: { permissions?: Record<string, unknown> };\n\t\tpermissions?: Record<string, unknown>;\n\t},\n): Record<string, boolean | Record<string, boolean | undefined>> | undefined {\n\treturn (\n\t\t(config.permissions as\n\t\t\t| Record<string, boolean | Record<string, boolean | undefined>>\n\t\t\t| undefined) ??\n\t\t(config.authority?.permissions as\n\t\t\t| Record<string, boolean | Record<string, boolean | undefined>>\n\t\t\t| undefined)\n\t);\n}\n\nfunction normalizeAdvancedMollieConfig(\n\tconfig: Extract<\n\t\tMollieBillingProviderConfig,\n\t\t{ accessToken: string }\n\t>,\n): NormalizedMollieBillingProviderConfig {\n\tconst accessToken = nonEmpty(config.accessToken);\n\tif (accessToken == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.accessToken is required for advanced_access_token.\",\n\t\t});\n\t}\n\tassertMollieSecretKind(accessToken, \"advanced_access_token\");\n\tconst apiMode: MollieBillingApiMode = config.apiMode ?? \"test\";\n\tconst credentials = pairCredentials(\n\t\tapiMode === \"live\" ? undefined : accessToken,\n\t\tapiMode === \"test\" ? undefined : accessToken,\n\t\t\"advanced_access_token\",\n\t);\n\tconst inferredProfileId = nonEmpty(config.profileId);\n\tconst configuredScopeProfileId =\n\t\tconfig.scope?.kind === \"profile\"\n\t\t\t? nonEmpty(config.scope.profileId)\n\t\t\t: undefined;\n\tif (config.scope?.kind === \"profile\" && configuredScopeProfileId == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.scope.profileId is required when scope.kind is profile.\",\n\t\t});\n\t}\n\tconst scope =\n\t\tconfig.scope == null\n\t\t\t? inferredProfileId != null\n\t\t\t\t? { kind: \"profile\" as const, profileId: inferredProfileId }\n\t\t\t\t: { kind: \"organization\" as const }\n\t\t\t: config.scope.kind === \"profile\" && configuredScopeProfileId != null\n\t\t\t\t? { kind: \"profile\" as const, profileId: configuredScopeProfileId }\n\t\t\t\t: config.scope;\n\tconst profileId =\n\t\tscope.kind === \"profile\"\n\t\t\t? scope.profileId\n\t\t\t: defaultProfileIdFrom(config);\n\tconst authority: BillingCredentialAuthority =\n\t\tresolveMollieAdvancedTokenAuthority({\n\t\t\tapiMode,\n\t\t\tdeclaredPermissions: declaredPermissionsFrom(config),\n\t\t\tscope,\n\t\t});\n\tconst defaultProfileId = defaultProfileIdFrom(config);\n\treturn {\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n\t\tauthority,\n\t\tcredentialKind: \"advanced_access_token\",\n\t\tcredentials,\n\t\tdefaultProfileId: defaultProfileId ?? null,\n\t\tprofileId: profileId ?? defaultProfileId ?? null,\n\t\tprovider: \"mollie\",\n\t\t...requireMollieSdkBinding(config),\n\t};\n}\n\nexport function normalizeMollieBillingProviderConfig(\n\tconfig: MollieBillingProviderConfig,\n): NormalizedMollieBillingProviderConfig {\n\tconst credentialKind: MollieBillingCredentialKind =\n\t\tconfig.credentialKind ??\n\t\t(\"accessToken\" in config && nonEmpty(config.accessToken) != null\n\t\t\t? \"advanced_access_token\"\n\t\t\t: \"api_key\");\n\tif (credentialKind === \"advanced_access_token\") {\n\t\tif (!(\"accessToken\" in config)) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\tmessage:\n\t\t\t\t\t\"billing.providers.mollie advanced_access_token configuration is invalid.\",\n\t\t\t});\n\t\t}\n\t\treturn normalizeAdvancedMollieConfig(config);\n\t}\n\tconst testSecret =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"testKey\" in config ? config.testKey : undefined)\n\t\t\t: nonEmpty(\"testToken\" in config ? config.testToken : undefined);\n\tconst liveSecret =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"liveKey\" in config ? config.liveKey : undefined)\n\t\t\t: nonEmpty(\"liveToken\" in config ? config.liveToken : undefined);\n\tconst credentials = pairCredentials(testSecret, liveSecret, credentialKind);\n\tconst profileId =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? nonEmpty(\"profileId\" in config ? config.profileId : undefined)\n\t\t\t: defaultProfileIdFrom({\n\t\t\t\t\tdefaultProfileId:\n\t\t\t\t\t\t\"defaultProfileId\" in config ? config.defaultProfileId : undefined,\n\t\t\t\t\tprofileId: \"profileId\" in config ? config.profileId : undefined,\n\t\t\t\t});\n\tif (\n\t\t(credentialKind === \"organization_access_token\" ||\n\t\t\tcredentialKind === \"oauth_access_token\") &&\n\t\tprofileId == null\n\t) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage:\n\t\t\t\t\"billing.providers.mollie.defaultProfileId or profileId is required for organization_access_token and oauth_access_token.\",\n\t\t});\n\t}\n\tconst declaredPermissions =\n\t\t\"permissions\" in config || \"authority\" in config\n\t\t\t? declaredPermissionsFrom(config)\n\t\t\t: undefined;\n\tconst authority =\n\t\tcredentialKind === \"api_key\"\n\t\t\t? resolveMollieApiKeyAuthority({\n\t\t\t\t\tmodes: modesFromCredentials(credentials),\n\t\t\t\t\tprofileId,\n\t\t\t\t})\n\t\t\t: resolveMollieCompatibleTokenAuthority({\n\t\t\t\t\tdeclaredPermissions,\n\t\t\t\t\tmodes: modesFromCredentials(credentials),\n\t\t\t\t\tprofileId,\n\t\t\t\t});\n\treturn {\n\t\tapiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n\t\tauthority,\n\t\tcredentialKind,\n\t\tcredentials,\n\t\tdefaultProfileId: profileId ?? null,\n\t\tprofileId: profileId ?? null,\n\t\tprovider: \"mollie\",\n\t\t...requireMollieSdkBinding(config),\n\t};\n}\n\nexport function normalizeBillingProviderConfig(\n\tconfigured?: BillingProviderConfigMap,\n): NormalizedBillingProviderConfigs {\n\tassertBillingProviderRuntimeEnvironment(configured);\n\tconst next: NormalizedBillingProviderConfigs = {};\n\tif (configured?.mollie != null) {\n\t\tnext.mollie = normalizeMollieBillingProviderConfig(configured.mollie);\n\t}\n\tif (configured?.stripe != null) {\n\t\tnext.stripe = normalizeStripeBillingProviderConfig(configured.stripe);\n\t}\n\treturn next;\n}\n\nexport function toBillingProviderDiagnostics(\n\tnormalized: NormalizedBillingProviderConfigs,\n): BillingProviderDiagnostics {\n\tif (normalized.mollie != null) {\n\t\treturn {\n\t\t\tprovider: \"mollie\",\n\t\t\tconfigured: true,\n\t\t\tprofileId: normalized.mollie.profileId ?? undefined,\n\t\t\tavailableEnvironments: availableBillingCredentialEnvironments(\n\t\t\t\tnormalized.mollie.credentials,\n\t\t\t),\n\t\t\tcredentialKind: normalized.mollie.credentialKind,\n\t\t};\n\t}\n\tif (normalized.stripe != null) {\n\t\treturn {\n\t\t\tprovider: \"stripe\",\n\t\t\tconfigured: true,\n\t\t\tavailableEnvironments: availableBillingCredentialEnvironments(\n\t\t\t\tnormalized.stripe.credentials,\n\t\t\t),\n\t\t\tcredentialKind: normalized.stripe.credentialKind,\n\t\t};\n\t}\n\treturn { configured: false };\n}\n","import {\n\tATHENA_BILLING_CONFIG_CONFLICT,\n\tATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\tAthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport type { BillingRuntimeMode } from \"../types.ts\";\nimport {\n\tdetectAthenaRuntimeEnvironment,\n\ttype AthenaRuntimeEnvironment,\n} from \"../../runtime/resolve.ts\";\n\nexport type BillingRuntimeModePreference = \"auto\" | \"local\" | \"remote\";\n\nfunction configuredProviderCount(\n\tconfigured?: BillingProviderConfigMap,\n): number {\n\tif (configured == null) {\n\t\treturn 0;\n\t}\n\treturn Object.keys(configured).filter((name) => configured[name] != null)\n\t\t.length;\n}\n\n/**\n * Auto + a configured provider selects local, even when a billing URL exists.\n * Explicit local never remotes. Explicit remote + providers is invalid.\n */\nexport function resolveBillingRuntimeMode(input: {\n\tmode?: BillingRuntimeModePreference;\n\tconfiguredProviders?: BillingProviderConfigMap;\n}): BillingRuntimeMode {\nconst hasProviders = configuredProviderCount(input.configuredProviders) > 0;\nif (input.mode === \"remote\" && hasProviders) {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_CONFIG_CONFLICT,\n\t\tmessage:\n\t\t\t'billing.mode=\"remote\" cannot be combined with billing.providers. Provider bindings belong to the runtime executing Billing locally.',\n\t});\n}\nif (input.mode === \"local\") {\n\treturn \"local\";\n}\nif (input.mode === \"remote\") {\n\treturn \"remote\";\n}\nreturn hasProviders ? \"local\" : \"remote\";\n}\n\nexport function assertLocalBillingRuntimeEnvironment(input?: {\nmode?: BillingRuntimeModePreference;\nconfiguredProviders?: BillingProviderConfigMap;\nenvironment?: AthenaRuntimeEnvironment;\nlocalMaterialized?: boolean;\n}): void {\nconst environment =\n\tinput?.environment ?? detectAthenaRuntimeEnvironment();\nconst resolved = resolveBillingRuntimeMode({\n\tconfiguredProviders: input?.configuredProviders,\n\tmode: input?.mode,\n});\nif (resolved !== \"local\") {\n\treturn;\n}\nif (environment === \"browser\" || environment === \"react-native\") {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\t\tmessage:\n\t\t\t\"Local Billing requires a trusted server runtime and cannot run in the browser or React Native.\",\n\t});\n}\nif (!input?.localMaterialized) {\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n\t\tmessage:\n\t\t\t\"Local Billing requires a trusted server runtime that materializes provider execution. This createClient path cannot retain remote ports.\",\n\t});\n}\n}\n","/**\n * Canonical Athena gateway route descriptors for SDK route selection.\n *\n * Classifications mirror `docs/release/athena-5-route-manifest.json`.\n * Do not invent a second handwritten sunset policy — keep this table aligned\n * with the monorepo manifest when either changes.\n */\n\nexport type AthenaRouteClassification =\n  | \"Retain\"\n  | \"Migrate\"\n  | \"Deprecate\"\n  | \"Remove\"\n  | \"Internalize\"\n  | \"Replace\";\n\nexport type AthenaRouteStatus = \"retained\" | \"deprecated\" | \"removed\";\n\nexport interface AthenaRouteDescriptor {\n  classification: AthenaRouteClassification;\n  methods: readonly string[];\n  path: string;\n  protocol: number;\n  reason: string;\n  replacement: string | null;\n  status: AthenaRouteStatus;\n}\n\nfunction classificationToStatus(\n  classification: AthenaRouteClassification\n): AthenaRouteStatus {\n  if (classification === \"Deprecate\" || classification === \"Migrate\") {\n    return \"deprecated\";\n  }\n  if (classification === \"Remove\") {\n    return \"removed\";\n  }\n  return \"retained\";\n}\n\n/** Structured CRUD + raw query paths used by the JS SDK. */\nexport const ATHENA_GATEWAY_ROUTES = {\n  delete: \"/gateway/delete\",\n  health: \"/health\",\n  insert: \"/gateway/insert\",\n  rawQuery: \"/gateway/query\",\n  root: \"/\",\n  rpc: \"/gateway/rpc\",\n  select: \"/gateway/fetch\",\n  update: \"/gateway/update\",\n} as const;\n\nexport type AthenaGatewayRouteKey = keyof typeof ATHENA_GATEWAY_ROUTES;\n\n/**\n * Inventory sourced from docs/release/athena-5-route-manifest.json (gateway + health).\n * Keep in sync when the monorepo manifest changes.\n */\nexport const ATHENA_ROUTE_MANIFEST: readonly AthenaRouteDescriptor[] = [\n  {\n    classification: \"Retain\",\n    methods: [\"POST\", \"GET\"],\n    path: \"/gateway/fetch\",\n    protocol: 1,\n    reason: \"Canonical structured read API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/insert\",\n    protocol: 1,\n    reason: \"Canonical write API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/update\",\n    protocol: 1,\n    reason: \"Canonical update API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/delete\",\n    protocol: 1,\n    reason: \"Canonical delete API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Deprecate\",\n    methods: [\"POST\"],\n    path: \"/gateway/query\",\n    protocol: 1,\n    reason:\n      \"Raw SQL is harder to secure and bypasses structured metadata ownership\",\n    replacement:\n      \"Structured /gateway/fetch|insert|update|delete with compiled statements\",\n    status: classificationToStatus(\"Deprecate\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"GET\"],\n    path: \"/health\",\n    protocol: 1,\n    reason: \"Diagnostics surface; Athena 5 adds release identity\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n] as const;\n\nexport function getAthenaRouteDescriptor(\n  path: string\n): AthenaRouteDescriptor | undefined {\n  return ATHENA_ROUTE_MANIFEST.find((route) => route.path === path);\n}\n\nexport function isDeprecatedAthenaRoute(path: string): boolean {\n  return getAthenaRouteDescriptor(path)?.status === \"deprecated\";\n}\n","/**\n * Backend-neutral mutation row-count extraction.\n *\n * Public field: AthenaResult.affectedRows\n * Transports feed this helper; fluent builders stay backend-neutral.\n */\n\nconst MUTATION_ENDPOINTS = new Set([\n  \"/gateway/insert\",\n  \"/gateway/update\",\n  \"/gateway/delete\",\n]);\n\nconst PRIMARY_ALIAS_KEYS = [\n  \"affectedRows\",\n  \"affected_rows\",\n  \"row_count\",\n  \"rows_affected\",\n  \"rowCount\",\n  \"rows_written\",\n  \"changes\",\n] as const;\n\nconst FALLBACK_COUNT_KEYS = [\"count\"] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asFiniteNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readKeys(\n  raw: Record<string, unknown>,\n  keys: readonly string[]\n): number | undefined {\n  for (const key of keys) {\n    const direct = asFiniteNumber(raw[key]);\n    if (direct !== undefined) {\n      return direct;\n    }\n  }\n  return undefined;\n}\n\nfunction readAlias(\n  raw: unknown,\n  keys: readonly string[] = PRIMARY_ALIAS_KEYS\n): number | undefined {\n  if (!isRecord(raw)) {\n    return undefined;\n  }\n  const direct = readKeys(raw, keys);\n  if (direct !== undefined) {\n    return direct;\n  }\n  if (isRecord(raw.meta)) {\n    const changes = asFiniteNumber(raw.meta.changes);\n    if (changes !== undefined) {\n      return changes;\n    }\n  }\n  if (isRecord(raw.data)) {\n    const nested = readAlias(raw.data, keys);\n    if (nested !== undefined) {\n      return nested;\n    }\n  }\n  return undefined;\n}\n\nexport function isMutationGatewayEndpoint(\n  endpoint: string | undefined\n): boolean {\n  if (!endpoint) {\n    return false;\n  }\n  return MUTATION_ENDPOINTS.has(endpoint);\n}\n\n/**\n * Resolve affected-row metadata for a mutation transport response.\n *\n * - `undefined` — not a mutation (e.g. fetch / select). Callers must omit the field.\n * - `null` — mutation, but no honest count is available. Never fabricate 0.\n * - `number` — known affected-row count from the backend.\n */\nexport function resolveMutationAffectedRows(input: {\n  count?: number | null;\n  endpoint?: string;\n  operation?: string;\n  raw?: unknown;\n}): number | null | undefined {\n  const operation = input.operation?.toLowerCase();\n  const isMutationOperation =\n    operation === \"insert\" ||\n    operation === \"update\" ||\n    operation === \"delete\" ||\n    operation === \"upsert\";\n  const isMutation =\n    isMutationOperation || isMutationGatewayEndpoint(input.endpoint);\n\n  if (!isMutation) {\n    return undefined;\n  }\n\n  const fromPrimary = readAlias(input.raw, PRIMARY_ALIAS_KEYS);\n  if (fromPrimary !== undefined) {\n    return fromPrimary;\n  }\n\n  const fromCount = asFiniteNumber(input.count);\n  if (fromCount !== undefined) {\n    return fromCount;\n  }\n\n  const fromRawCount = readAlias(input.raw, FALLBACK_COUNT_KEYS);\n  if (fromRawCount !== undefined) {\n    return fromRawCount;\n  }\n\n  return null;\n}\n","/**\n * Explicit administrative raw SQL surface for Athena-JS 3.7 (Dragunov-compatible).\n *\n * Prefer this over root `athena.query()` which remains a deprecated compatibility alias.\n */\n\nimport type { AthenaResult, AthenaResultFormatter } from \"../client-result.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type {\n\tAthenaGatewayCallOptions,\n\tAthenaQueryPayload,\n} from \"../gateway/types.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\n\nexport type AthenaRawQueryOperation =\n\t| \"select\"\n\t| \"insert\"\n\t| \"update\"\n\t| \"delete\"\n\t| \"ddl\"\n\t| \"transaction\"\n\t| \"unknown\";\n\nexport type AthenaExpectedQueryShape =\n\t| \"rows\"\n\t| \"single\"\n\t| \"maybe-single\"\n\t| \"affected-only\"\n\t| \"none\";\n\nexport interface AthenaAdminQueryInput<\n\tTParams extends readonly unknown[] = readonly unknown[],\n> {\n\texpectedShape: AthenaExpectedQueryShape;\n\theaders?: Record<string, string>;\n\toperation: AthenaRawQueryOperation;\n\tparams?: TParams;\n\tsignal?: AbortSignal;\n\tsql: string;\n}\n\nexport interface AthenaAdminQueryExecutionMetadata {\n\t/** null means unknown — never fabricate 0 when meta is absent. */\n\taffectedRows: number | null;\n\tbackend: \"postgres\" | \"d1\" | \"scylla\" | \"supabase\" | \"unknown\";\n\tdeprecated: boolean;\n\texpectedShape: AthenaExpectedQueryShape;\n\tlastInsertId: string | number | null;\n\toperation: AthenaRawQueryOperation;\n\troute: string;\n\ttransport: \"gateway\" | \"d1-binding\" | \"d1-http-proxy\" | \"direct\" | \"unknown\";\n}\n\nexport interface AthenaAdminQueryResult<T = unknown> extends AthenaResult<T> {\n\tmetadata: AthenaAdminQueryExecutionMetadata;\n}\n\nexport const ATHENA_RAW_SQL_COMPAT_DEPRECATED =\n\t\"ATHENA_RAW_SQL_COMPAT_DEPRECATED\" as const;\n\nexport const ATHENA_ADMIN_QUERY_EMPTY_SQL =\n\t\"ATHENA_ADMIN_QUERY_EMPTY_SQL\" as const;\n\nexport const ATHENA_ADMIN_QUERY_MULTI_STATEMENT =\n\t\"ATHENA_ADMIN_QUERY_MULTI_STATEMENT\" as const;\n\nexport const ATHENA_ADMIN_QUERY_INVALID_SHAPE =\n\t\"ATHENA_ADMIN_QUERY_INVALID_SHAPE\" as const;\n\nconst ROW_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n\t\"rows\",\n\t\"single\",\n\t\"maybe-single\",\n]);\n\nconst AFFECTED_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n\t\"affected-only\",\n\t\"none\",\n]);\n\n/** Reject empty SQL. */\nexport function assertNonEmptySql(sql: string): string {\n\tconst normalized = sql.trim();\n\tif (!normalized) {\n\t\tconst error = new Error(\"admin.query requires a non-empty sql string\");\n\t\t(error as Error & { code?: string }).code = ATHENA_ADMIN_QUERY_EMPTY_SQL;\n\t\tthrow error;\n\t}\n\treturn normalized;\n}\n\n/**\n * Conservative multi-statement detection (semicolon outside simple quotes).\n * Does not attempt a full SQL parser.\n */\nexport function sqlLooksLikeMultipleStatements(sql: string): boolean {\n\tlet inSingle = false;\n\tlet inDouble = false;\n\tlet inLineComment = false;\n\tlet inBlockComment = false;\n\tfor (let i = 0; i < sql.length; i += 1) {\n\t\tconst ch = sql[i];\n\t\tconst next = sql[i + 1];\n\t\tif (inLineComment) {\n\t\t\tif (ch === \"\\n\") {\n\t\t\t\tinLineComment = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (inBlockComment) {\n\t\t\tif (ch === \"*\" && next === \"/\") {\n\t\t\t\tinBlockComment = false;\n\t\t\t\ti += 1;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(inSingle || inDouble)) {\n\t\t\tif (ch === \"-\" && next === \"-\") {\n\t\t\t\tinLineComment = true;\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"/\" && next === \"*\") {\n\t\t\t\tinBlockComment = true;\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (ch === \"'\" && !inDouble) {\n\t\t\tif (inSingle && next === \"'\") {\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tinSingle = !inSingle;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' && !inSingle) {\n\t\t\tinDouble = !inDouble;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(inSingle || inDouble) && ch === \";\") {\n\t\t\tconst rest = sql.slice(i + 1).trim();\n\t\t\tif (rest.length > 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Validate operation / expectedShape combinations fail-closed. */\nexport function assertValidAdminQueryShape(\n\toperation: AthenaRawQueryOperation,\n\texpectedShape: AthenaExpectedQueryShape,\n): void {\n\tif (operation === \"select\" && AFFECTED_SHAPES.has(expectedShape)) {\n\t\tconst error = new Error(\n\t\t\t`admin.query: operation \"select\" is incompatible with expectedShape \"${expectedShape}\"`,\n\t\t);\n\t\t(error as Error & { code?: string }).code =\n\t\t\tATHENA_ADMIN_QUERY_INVALID_SHAPE;\n\t\tthrow error;\n\t}\n\tif (\n\t\t(operation === \"insert\" ||\n\t\t\toperation === \"update\" ||\n\t\t\toperation === \"delete\") &&\n\t\texpectedShape === \"none\"\n\t) {\n\t\t// allowed (caller ignores rows)\n\t\treturn;\n\t}\n\tif (\n\t\t(operation === \"insert\" ||\n\t\t\toperation === \"update\" ||\n\t\t\toperation === \"delete\") &&\n\t\tROW_SHAPES.has(expectedShape) === false &&\n\t\texpectedShape !== \"affected-only\"\n\t) {\n\t\t// ddl/transaction/unknown may use any shape\n\t}\n}\n\n/**\n * Conservative SQL classification for legacy root query().\n * Prefer explicit operation on admin.query().\n */\nexport function classifyRawSqlOperation(sql: string): AthenaRawQueryOperation {\n\tconst head = sql.trim().replace(/^\\(+/, \"\").slice(0, 32).toLowerCase();\n\tif (head.startsWith(\"select\") || head.startsWith(\"with\")) {\n\t\treturn \"select\";\n\t}\n\tif (head.startsWith(\"insert\")) {\n\t\treturn \"insert\";\n\t}\n\tif (head.startsWith(\"update\")) {\n\t\treturn \"update\";\n\t}\n\tif (head.startsWith(\"delete\")) {\n\t\treturn \"delete\";\n\t}\n\tif (\n\t\thead.startsWith(\"create\") ||\n\t\thead.startsWith(\"alter\") ||\n\t\thead.startsWith(\"drop\") ||\n\t\thead.startsWith(\"truncate\")\n\t) {\n\t\treturn \"ddl\";\n\t}\n\tif (\n\t\thead.startsWith(\"begin\") ||\n\t\thead.startsWith(\"commit\") ||\n\t\thead.startsWith(\"rollback\")\n\t) {\n\t\treturn \"transaction\";\n\t}\n\treturn \"unknown\";\n}\n\nexport function defaultExpectedShapeForOperation(\n\toperation: AthenaRawQueryOperation,\n): AthenaExpectedQueryShape {\n\tif (operation === \"select\") {\n\t\treturn \"rows\";\n\t}\n\tif (\n\t\toperation === \"insert\" ||\n\t\toperation === \"update\" ||\n\t\toperation === \"delete\"\n\t) {\n\t\treturn \"affected-only\";\n\t}\n\treturn \"rows\";\n}\n\nfunction extractAffectedRows(\n\traw: unknown,\n\tcount: number | null | undefined,\n\toperation: AthenaRawQueryOperation,\n\texpectedShape: AthenaExpectedQueryShape,\n): number | null {\n\t// Honest mutation metadata: never treat SELECT (read) row-counts as affected rows.\n\tconst isMutation =\n\t\toperation === \"insert\" || operation === \"update\" || operation === \"delete\";\n\tif (!isMutation && expectedShape !== \"affected-only\") {\n\t\treturn null;\n\t}\n\tconst resolved = resolveMutationAffectedRows({\n\t\tcount,\n\t\toperation:\n\t\t\tisMutation || expectedShape === \"affected-only\" ? \"update\" : \"select\",\n\t\traw,\n\t});\n\treturn resolved === undefined ? null : resolved;\n}\n\nfunction extractLastInsertId(raw: unknown): string | number | null {\n\tif (!raw || typeof raw !== \"object\") {\n\t\treturn null;\n\t}\n\tconst record = raw as Record<string, unknown>;\n\tconst candidates = [\n\t\trecord.last_insert_id,\n\t\trecord.lastInsertId,\n\t\trecord.last_row_id,\n\t\trecord.lastRowId,\n\t];\n\tfor (const candidate of candidates) {\n\t\tif (\n\t\t\t(typeof candidate === \"string\" && candidate.length > 0) ||\n\t\t\t(typeof candidate === \"number\" && Number.isFinite(candidate))\n\t\t) {\n\t\t\treturn candidate as string | number;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction shapeResultData<T>(\n\tdata: T | null,\n\texpectedShape: AthenaExpectedQueryShape,\n): T | null {\n\tif (data === null) {\n\t\treturn data;\n\t}\n\tif (\n\t\texpectedShape === \"rows\" ||\n\t\texpectedShape === \"affected-only\" ||\n\t\texpectedShape === \"none\"\n\t) {\n\t\treturn data;\n\t}\n\tif (!Array.isArray(data)) {\n\t\treturn data;\n\t}\n\tif (expectedShape === \"single\") {\n\t\treturn (data[0] ?? null) as T;\n\t}\n\tif (expectedShape === \"maybe-single\") {\n\t\treturn (data[0] ?? null) as T;\n\t}\n\treturn data;\n}\n\nexport interface CreateAdminQueryOptions {\n\t/**\n\t * When true, multi-statement SQL is forwarded to the gateway instead of\n\t * throwing `ATHENA_ADMIN_QUERY_MULTI_STATEMENT`.\n\t *\n\t * Used only by the legacy root `query()` compatibility alias so migration /\n\t * seed scripts keep working. Explicit `admin.query()` keeps the default\n\t * reject (allowMultiStatement omitted / false).\n\t */\n\tallowMultiStatement?: boolean;\n\tbackend?: AthenaAdminQueryExecutionMetadata[\"backend\"];\n\tclient: Pick<AthenaGatewayClient, \"queryGateway\">;\n\tformatGatewayResult: AthenaResultFormatter;\n\t/** Transport hint for metadata honesty. */\n\ttransport?: AthenaAdminQueryExecutionMetadata[\"transport\"];\n}\n\nexport function createAdminQuery(\n\toptions: CreateAdminQueryOptions,\n): <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n\tinput: AthenaAdminQueryInput<TParams>,\n\tcallOptions?: AthenaGatewayCallOptions,\n) => Promise<AthenaAdminQueryResult<T>> {\n\tconst {\n\t\tclient,\n\t\tformatGatewayResult,\n\t\ttransport = \"gateway\",\n\t\tbackend = \"unknown\",\n\t\tallowMultiStatement = false,\n\t} = options;\n\n\treturn async function adminQuery<\n\t\tT = unknown,\n\t\tTParams extends readonly unknown[] = readonly unknown[],\n\t>(\n\t\tinput: AthenaAdminQueryInput<TParams>,\n\t\tcallOptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaAdminQueryResult<T>> {\n\t\tconst sql = assertNonEmptySql(input.sql);\n\t\tassertValidAdminQueryShape(input.operation, input.expectedShape);\n\n\t\tif (!allowMultiStatement && sqlLooksLikeMultipleStatements(sql)) {\n\t\t\tconst error = new Error(\n\t\t\t\t\"admin.query rejects multi-statement SQL by default\",\n\t\t\t);\n\t\t\t(error as Error & { code?: string }).code =\n\t\t\t\tATHENA_ADMIN_QUERY_MULTI_STATEMENT;\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst params = input.params ?? callOptions?.params;\n\t\tconst payload: AthenaQueryPayload = {\n\t\t\tquery: sql,\n\t\t\t...(Array.isArray(params) ? { params: [...params] } : {}),\n\t\t\texpectedShape: input.expectedShape,\n\t\t\toperation: input.operation,\n\t\t};\n\n\t\tconst mergedOptions: AthenaGatewayCallOptions | undefined = {\n\t\t\t...callOptions,\n\t\t\t...(input.headers\n\t\t\t\t? {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...(callOptions?.headers ?? {}),\n\t\t\t\t\t\t...input.headers,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(input.signal ? { signal: input.signal } : {}),\n\t\t};\n\n\t\tconst response = await client.queryGateway<T>(payload, mergedOptions);\n\t\tconst formatted = formatGatewayResult(response, {\n\t\t\toperation: input.operation,\n\t\t});\n\t\tconst shapedData = shapeResultData(formatted.data, input.expectedShape);\n\t\tconst affectedRows = extractAffectedRows(\n\t\t\tformatted.raw,\n\t\t\tformatted.count,\n\t\t\tinput.operation,\n\t\t\tinput.expectedShape,\n\t\t);\n\t\tconst lastInsertId = extractLastInsertId(formatted.raw);\n\n\t\treturn {\n\t\t\t...formatted,\n\t\t\tdata: shapedData,\n\t\t\tmetadata: {\n\t\t\t\taffectedRows,\n\t\t\t\tbackend,\n\t\t\t\tdeprecated: true,\n\t\t\t\texpectedShape: input.expectedShape,\n\t\t\t\tlastInsertId,\n\t\t\t\toperation: input.operation,\n\t\t\t\troute: ATHENA_GATEWAY_ROUTES.rawQuery,\n\t\t\t\ttransport,\n\t\t\t},\n\t\t};\n\t};\n}\n\n/** Per-client deprecation warning dedupe for root query(). */\nconst deprecationWarnedClients = new WeakSet<object>();\n\nexport type AthenaRawQueryDiagnosticsMode = boolean | \"auto\";\n\nexport function maybeWarnRawQueryDeprecated(\n\towner: object,\n\tdiagnostics: AthenaRawQueryDiagnosticsMode | undefined,\n): void {\n\tif (diagnostics === false) {\n\t\treturn;\n\t}\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n\t\t.process?.env?.NODE_ENV;\n\tconst isDev = nodeEnv !== \"production\";\n\tconst shouldWarn =\n\t\tdiagnostics === true ||\n\t\t(diagnostics === \"auto\" && isDev) ||\n\t\t(diagnostics === undefined && isDev);\n\tif (!shouldWarn) {\n\t\treturn;\n\t}\n\tif (deprecationWarnedClients.has(owner)) {\n\t\treturn;\n\t}\n\tdeprecationWarnedClients.add(owner);\n\tconsole.warn(\n\t\t`[athena] ${ATHENA_RAW_SQL_COMPAT_DEPRECATED}: athena.query() is a compatibility alias. Prefer athena.admin.query({ sql, operation, expectedShape }).`,\n\t);\n}\n","/**\n * Shared HTTP response JSON heuristics used by gateway, storage, auth, and chat.\n */\n\nexport interface ParsedHttpResponseBody {\n  parsed: unknown;\n  parseFailed: boolean;\n}\n\n/**\n * Parse a response body as JSON when content-type or body shape suggests JSON.\n * Non-JSON text is returned as a string with `parseFailed: false`.\n * Empty body → `parsed: null`.\n */\nexport function parseHttpResponseBody(\n  rawText: string,\n  contentType: string | null\n): ParsedHttpResponseBody {\n  if (!rawText) {\n    return { parsed: null, parseFailed: false };\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes(\"application/json\") ?? false;\n  const looksJson =\n    contentTypeSuggestsJson ||\n    rawText.startsWith(\"{\") ||\n    rawText.startsWith(\"[\");\n\n  if (!looksJson) {\n    return { parsed: rawText, parseFailed: false };\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\n  } catch {\n    return { parsed: rawText, parseFailed: true };\n  }\n}\n","/**\n * Detect Cloudflare / HTML error pages that leak through auth proxies.\n * Auth endpoints must return JSON; HTML here is never a valid session payload.\n */\n\nexport const UPSTREAM_UNAVAILABLE_CODE = \"UPSTREAM_UNAVAILABLE\" as const;\n\nexport const UPSTREAM_UNAVAILABLE_MESSAGE =\n  \"Auth service is temporarily unavailable. Please try again.\";\n\nexport const UPSTREAM_UNAVAILABLE_HINT =\n  \"The auth worker returned an HTML error page (often Cloudflare 1101). Retry, then check Workers Logs.\";\n\nexport function isHtmlErrorPage(body: string, contentType?: string | null): boolean {\n  const type = (contentType ?? \"\").toLowerCase();\n  const sample = body.slice(0, 12_000);\n  const lower = sample.toLowerCase();\n\n  if (\n    lower.includes(\"worker threw exception\") ||\n    lower.includes(\"cf-error-code\") ||\n    lower.includes(\"error 1101\") ||\n    (lower.includes(\"cloudflare\") &&\n      (lower.includes(\"cf-error\") || lower.includes(\"ray id\")))\n  ) {\n    return true;\n  }\n\n  if (type.includes(\"text/html\") || type.includes(\"application/xhtml\")) {\n    return true;\n  }\n\n  const trimmed = sample.trimStart().slice(0, 64).toLowerCase();\n  return trimmed.startsWith(\"<!doctype html\") || trimmed.startsWith(\"<html\");\n}\n\nexport function sanitizeAuthErrorMessage(\n  message: string,\n  fallback = UPSTREAM_UNAVAILABLE_MESSAGE\n): string {\n  const trimmed = message.trim();\n  if (!trimmed) {\n    return fallback;\n  }\n\n  if (isHtmlErrorPage(trimmed)) {\n    return fallback;\n  }\n\n  return trimmed;\n}\n","/**\n * Status-aware auth capabilities (INV-P).\n *\n * Lookup failure must never be treated as \"all features disabled\".\n * UI may hide/disable only when `status === \"known\"` and the field is false,\n * or when the app sets an explicit features override.\n */\n\nimport { deriveEmbeddedCapabilityAdvertisement } from \"./contract/operations.ts\";\nimport { ATHENA_AUTH_OPERATIONS } from \"./contract/operations.generated.ts\";\n\nexport type AthenaAuthCapabilitiesStatus = \"known\" | \"partial\" | \"unknown\";\n\nexport type AthenaAuthCapabilitiesSource =\n  | \"bootstrap\"\n  | \"http\"\n  | \"client-config\"\n  | \"fallback\";\n\nexport interface AthenaAuthPasskeyCapabilityDetail {\n  authentication?: boolean | null;\n  conditionalUi?: boolean | null;\n  enabled?: boolean | null;\n  management?: boolean | null;\n  onboarding?: boolean | null;\n  registration?: boolean | null;\n}\n\nexport interface AthenaAuthCapabilitiesFeatures {\n  password?: boolean | null;\n  organizations?: boolean | null;\n  /**\n   * Broad passkey capability. Unknown is not disabled.\n   * Detail flags live on `passkey` and must not replace this boolean.\n   */\n  passkeys?: boolean | null;\n  passkey?: AthenaAuthPasskeyCapabilityDetail | null;\n  sessions?: boolean | null;\n  social?: {\n    providers?: string[] | null;\n  } | null;\n  emailAndPassword?: boolean | null;\n}\n\nexport interface AthenaAuthCapabilitiesResult extends AthenaAuthCapabilitiesFeatures {\n  status: AthenaAuthCapabilitiesStatus;\n  fetchedAt?: number;\n  source: AthenaAuthCapabilitiesSource;\n}\n\nexport interface AthenaAuthCapabilitiesStore {\n  get(): AthenaAuthCapabilitiesResult;\n  /** Alias of `get()` — one snapshot owner (INV-P / R11). */\n  getSnapshot(): AthenaAuthCapabilitiesResult;\n  set(next: AthenaAuthCapabilitiesResult): void;\n  /** Merge fields; elevates/downgrades status conservatively. */\n  merge(\n    patch: Partial<AthenaAuthCapabilitiesFeatures>,\n    meta?: {\n      status?: AthenaAuthCapabilitiesStatus;\n      source?: AthenaAuthCapabilitiesSource;\n    }\n  ): AthenaAuthCapabilitiesResult;\n  /** Mark transport failure without disabling features (INV-P). */\n  markUnknown(source?: AthenaAuthCapabilitiesSource): AthenaAuthCapabilitiesResult;\n  /**\n   * First-paint seed. No-op unless the store is still `unknown`.\n   * Returns whether the snapshot was applied.\n   */\n  hydrate(next: AthenaAuthCapabilitiesResult): boolean;\n  subscribe(listener: (value: AthenaAuthCapabilitiesResult) => void): () => void;\n}\n\nconst EMPTY_UNKNOWN: AthenaAuthCapabilitiesResult = {\n  status: \"unknown\",\n  source: \"fallback\",\n};\n\nexport interface CreateEmbeddedCapabilitySnapshotOptions {\n  /**\n   * Operator intent (`auth.passkey.enabled`). Implementation support is\n   * derived from the operation catalog; this flag is runtime enablement.\n   */\n  passkeyEnabled?: boolean;\n  /** Passkey-first onboarding. Never inferred from `passkeys === true`. */\n  passkeyOnboarding?: boolean;\n  /**\n   * Configured served social provider ids. Advertised only after the\n   * social HTTP operations are catalog `embedded: \"supported\"`.\n   */\n  socialProviders?: readonly string[];\n}\n\n/**\n * Embedded Auth advertisement.\n *\n * `deriveEmbeddedCapabilityAdvertisement` is implementation support (HTTP\n * routes exist). Advertised `passkeys` is support AND this runtime's\n * `auth.passkey.enabled`. Default config is disabled, so the frozen snapshot\n * is `passkeys: false`.\n */\nexport function createEmbeddedCapabilitySnapshot(\n  options: CreateEmbeddedCapabilitySnapshotOptions = {},\n): AthenaAuthCapabilitiesResult {\n  const implementation = deriveEmbeddedCapabilityAdvertisement(\n    ATHENA_AUTH_OPERATIONS,\n  );\n  const enabled = implementation.passkeys && options.passkeyEnabled === true;\n  return {\n    emailAndPassword: true,\n    organizations: true,\n    passkey: {\n      authentication: enabled,\n      conditionalUi: enabled,\n      enabled,\n      management: enabled,\n      onboarding: enabled && options.passkeyOnboarding === true,\n      registration: enabled,\n    },\n    passkeys: enabled,\n    password: true,\n    sessions: true,\n    social: {\n      providers: implementation.socialProvidersAdvertised\n        ? [...(options.socialProviders ?? [])]\n        : [],\n    },\n    source: \"bootstrap\",\n    status: \"known\",\n  };\n}\n\n/** Default advertisement: implementation support, operator passkeys off. */\nexport const ATHENA_AUTH_EMBEDDED_CAPABILITY_SNAPSHOT: AthenaAuthCapabilitiesResult =\n  createEmbeddedCapabilitySnapshot();\n\nfunction pickStatus(\n  current: AthenaAuthCapabilitiesStatus,\n  next?: AthenaAuthCapabilitiesStatus\n): AthenaAuthCapabilitiesStatus {\n  if (!next) return current;\n  if (current === \"unknown\" || next === \"unknown\") {\n    if (current === \"known\" && next === \"unknown\") return \"partial\";\n    if (current === \"unknown\" && next === \"known\") return \"partial\";\n    return next === \"unknown\" ? \"unknown\" : current === \"unknown\" ? next : \"partial\";\n  }\n  if (current === \"partial\" || next === \"partial\") return \"partial\";\n  return \"known\";\n}\n\nexport function createAthenaAuthCapabilitiesStore(\n  initial?: Partial<AthenaAuthCapabilitiesResult>\n): AthenaAuthCapabilitiesStore {\n  let value: AthenaAuthCapabilitiesResult = {\n    ...EMPTY_UNKNOWN,\n    ...initial,\n    status: initial?.status ?? \"unknown\",\n    source: initial?.source ?? \"fallback\",\n  };\n  const listeners = new Set<(v: AthenaAuthCapabilitiesResult) => void>();\n\n  const emit = () => {\n    for (const listener of [...listeners]) {\n      listener(value);\n    }\n  };\n\n  const get = (): AthenaAuthCapabilitiesResult => value;\n\n  return {\n    get,\n    getSnapshot: get,\n\n    set(next) {\n      value = { ...next, fetchedAt: next.fetchedAt ?? Date.now() };\n      emit();\n    },\n\n    merge(patch, meta) {\n      value = {\n        ...value,\n        ...patch,\n        passkey:\n          patch.passkey === undefined\n            ? value.passkey\n            : { ...(value.passkey ?? {}), ...(patch.passkey ?? {}) },\n        social:\n          patch.social === undefined\n            ? value.social\n            : { ...(value.social ?? {}), ...(patch.social ?? {}) },\n        status: pickStatus(value.status, meta?.status),\n        source: meta?.source ?? value.source,\n        fetchedAt: Date.now(),\n      };\n      emit();\n      return value;\n    },\n\n    markUnknown(source = \"http\") {\n      // Keep last known feature hints; only status becomes unknown/partial.\n      value = {\n        ...value,\n        status: value.status === \"known\" ? \"partial\" : \"unknown\",\n        source,\n        fetchedAt: Date.now(),\n      };\n      emit();\n      return value;\n    },\n\n    hydrate(next) {\n      if (value.status !== \"unknown\") {\n        return false;\n      }\n      value = { ...next, fetchedAt: next.fetchedAt ?? Date.now() };\n      emit();\n      return true;\n    },\n\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n\n/** True only when capability is definitively enabled. */\nexport function isCapabilityEnabled(\n  caps: AthenaAuthCapabilitiesResult,\n  key: keyof AthenaAuthCapabilitiesFeatures\n): boolean {\n  if (caps.status === \"unknown\") return false;\n  const v = caps[key];\n  if (v == null) return false;\n  if (typeof v === \"boolean\") return v === true && caps.status === \"known\";\n  return false;\n}\n\n/**\n * Passkey-first onboarding. Never inferred from `passkeys === true`.\n * Unknown is not enabled.\n */\nexport function isPasskeyOnboardingEnabled(\n  caps: AthenaAuthCapabilitiesResult,\n): boolean {\n  if (!isCapabilityEnabled(caps, \"passkeys\")) {\n    return false;\n  }\n  return caps.passkey?.onboarding === true;\n}\n\n/**\n * Social providers to show: only when known (or partial with explicit list).\n * Never invent an empty \"disabled\" list from unknown.\n */\nexport function resolveSocialProvidersForUi(\n  caps: AthenaAuthCapabilitiesResult\n): { providers: string[] | null; hide: boolean } {\n  if (caps.status === \"unknown\") {\n    return { providers: null, hide: false };\n  }\n  const list = caps.social?.providers;\n  if (list == null) {\n    return { providers: null, hide: caps.status === \"known\" };\n  }\n  return { providers: list, hide: false };\n}\n\n/** True only when status is known and at least one social provider is listed. */\nexport function isSocialCapabilityEnabled(\n  caps: AthenaAuthCapabilitiesResult\n): boolean {\n  if (caps.status !== \"known\") {\n    return false;\n  }\n  return (caps.social?.providers?.length ?? 0) > 0;\n}\n","export interface AthenaAuthAdminLimits {\n  maxAdminJsonBytes: number;\n  maxAdminJsonDepth: number;\n  maxTemplateVariableLength: number;\n  maxTemplateVariables: number;\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024;\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128;\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n  maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n  maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n} as const satisfies AthenaAuthAdminLimits;\n\nfunction describeTemplateVariableTarget(target?: string) {\n  const normalized = target?.trim();\n  return normalized && normalized.length > 0\n    ? normalized\n    : \"Athena auth admin email template variables\";\n}\n\nexport function assertAthenaAuthTemplateVariables(\n  variables: unknown,\n  target?: string\n): asserts variables is string[] {\n  const label = describeTemplateVariableTarget(target);\n  if (!Array.isArray(variables)) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n\n  if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n    throw new Error(\n      `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`\n    );\n  }\n\n  variables.forEach((variable, index) => {\n    if (typeof variable !== \"string\") {\n      throw new Error(\n        `${label} must contain only strings. Received ${typeof variable} at index ${index}.`\n      );\n    }\n\n    if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n      throw new Error(\n        `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`\n      );\n    }\n  });\n}\n","/**\n * Sanitized WebAuthn ceremony diagnostics. Never include challenges,\n * credential IDs, attestation, or assertion payloads.\n */\n\nexport const PASSKEY_DISCOVERABILITY_UNKNOWN_DIAGNOSTIC =\n  \"registration: discoverability unknown → authentication: allowCredentials=[] → browser returned no assertion\";\n\nexport type PasskeyCeremonyStage =\n  | \"idle\"\n  | \"generate-register-options\"\n  | \"credentials-create\"\n  | \"verify-registration\"\n  | \"generate-authenticate-options\"\n  | \"credentials-get\"\n  | \"verify-authentication\";\n\nexport interface PasskeyDiscoverabilityDiagnosticInput {\n  allowCredentialsCount: number;\n  assertionPresent: boolean;\n  residentKey: boolean | null | undefined;\n}\n\nexport function formatPasskeyDiscoverabilityDiagnostic(\n  input: PasskeyDiscoverabilityDiagnosticInput\n): string | null {\n  const discoverabilityUnknown =\n    input.residentKey !== true && input.residentKey !== false;\n  if (\n    discoverabilityUnknown &&\n    input.allowCredentialsCount === 0 &&\n    !input.assertionPresent\n  ) {\n    return PASSKEY_DISCOVERABILITY_UNKNOWN_DIAGNOSTIC;\n  }\n  return null;\n}\n","import type { AthenaPasskeyOptionsResponse } from \"../../types.ts\";\n\n/** Internal adapter input: public wire DTO plus optional extra JSON `rpId`. */\nexport type PasskeyBrowserOptionsInput = AthenaPasskeyOptionsResponse & {\n  hints?: string[];\n  rpId?: string;\n};\n\nexport interface PasskeyBrowserRpIdFallback {\n  rpId?: string;\n}\n\ntype RecordLike = Record<string, unknown>;\n\nfunction asRecord(value: unknown): RecordLike | null {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as RecordLike)\n    : null;\n}\n\nfunction fromBase64Url(value: string): Uint8Array {\n  const normalized = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, \"=\");\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let index = 0; index < binary.length; index++) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n  return bytes;\n}\n\nfunction toExactArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n  const buffer = new ArrayBuffer(bytes.byteLength);\n  new Uint8Array(buffer).set(bytes);\n  return buffer;\n}\n\nfunction decodeBufferSource(value: unknown): ArrayBuffer {\n  if (typeof value !== \"string\" || !value.trim()) {\n    return new ArrayBuffer(0);\n  }\n  try {\n    return toExactArrayBuffer(fromBase64Url(value));\n  } catch {\n    return toExactArrayBuffer(new TextEncoder().encode(value));\n  }\n}\n\nfunction trimmedString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\n/**\n * Server RP ID precedence (PASSKEY-I5): options.rpId → options.rp.id → explicit fallback.\n * Never invent `window.location.hostname` as an RP ID.\n */\nexport function resolvePasskeyRpId(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): string | undefined {\n  const topLevel = trimmedString(options.rpId);\n  if (topLevel) {\n    return topLevel;\n  }\n  const rp = asRecord(options.rp);\n  const fromRp = trimmedString(rp?.id);\n  if (fromRp) {\n    return fromRp;\n  }\n  return trimmedString(fallback?.rpId);\n}\n\nfunction fallbackRpDisplayName(): string {\n  if (\n    typeof globalThis !== \"undefined\" &&\n    \"window\" in globalThis &&\n    globalThis.window &&\n    typeof globalThis.window.location?.hostname === \"string\" &&\n    globalThis.window.location.hostname\n  ) {\n    return globalThis.window.location.hostname;\n  }\n  return \"Athena Auth\";\n}\n\nfunction mapDescriptors(\n  value: unknown\n): PublicKeyCredentialDescriptor[] | undefined {\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  return value\n    .map((entry) => asRecord(entry))\n    .filter((entry): entry is RecordLike => !!entry)\n    .map((entry) => ({\n      ...entry,\n      id: decodeBufferSource(entry.id),\n      type:\n        typeof entry.type === \"string\"\n          ? (entry.type as PublicKeyCredentialType)\n          : \"public-key\",\n    })) as PublicKeyCredentialDescriptor[];\n}\n\nexport function toPublicKeyCredentialCreationOptions(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): PublicKeyCredentialCreationOptions {\n  const user = asRecord(options.user);\n  const rpSource = asRecord(options.rp);\n  const userId = decodeBufferSource(user?.id);\n  const challenge = decodeBufferSource(options.challenge);\n  const rpId = resolvePasskeyRpId(options, fallback);\n\n  const mapped: PublicKeyCredentialCreationOptions & { hints?: string[] } = {\n    attestation:\n      typeof options.attestation === \"string\"\n        ? (options.attestation as AttestationConveyancePreference)\n        : undefined,\n    authenticatorSelection: asRecord(options.authenticatorSelection) as\n      | AuthenticatorSelectionCriteria\n      | undefined,\n    challenge,\n    excludeCredentials: mapDescriptors(options.excludeCredentials),\n    extensions: asRecord(options.extensions) as\n      | AuthenticationExtensionsClientInputs\n      | undefined,\n    pubKeyCredParams: Array.isArray(options.pubKeyCredParams)\n      ? (options.pubKeyCredParams as PublicKeyCredentialParameters[])\n      : [],\n    rp: {\n      id: rpId,\n      name: trimmedString(rpSource?.name) ?? fallbackRpDisplayName(),\n    },\n    timeout: typeof options.timeout === \"number\" ? options.timeout : undefined,\n    user: {\n      displayName:\n        trimmedString(user?.displayName) ??\n        trimmedString(user?.name) ??\n        \"User\",\n      id: userId,\n      name: trimmedString(user?.name) ?? \"user\",\n    },\n  };\n  const hints = Array.isArray(options.hints)\n    ? options.hints.filter((entry): entry is string => typeof entry === \"string\")\n    : undefined;\n  if (hints && hints.length > 0) {\n    mapped.hints = hints;\n  }\n  return mapped;\n}\n\nexport function toPublicKeyCredentialRequestOptions(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback\n): PublicKeyCredentialRequestOptions {\n  return {\n    allowCredentials: mapDescriptors(options.allowCredentials),\n    challenge: decodeBufferSource(options.challenge),\n    extensions: asRecord(options.extensions) as\n      | AuthenticationExtensionsClientInputs\n      | undefined,\n    rpId: resolvePasskeyRpId(options, fallback),\n    timeout: typeof options.timeout === \"number\" ? options.timeout : undefined,\n    userVerification:\n      typeof options.userVerification === \"string\"\n        ? (options.userVerification as UserVerificationRequirement)\n        : undefined,\n  };\n}\n","export interface AthenaPasskeyAuthenticationWire {\n  id: string;\n  rawId: string;\n  type: \"public-key\";\n  authenticatorAttachment?: AuthenticatorAttachment;\n  response: {\n    authenticatorData: string;\n    clientDataJSON: string;\n    signature: string;\n    userHandle: string | null;\n  };\n}\n\nexport interface AthenaPasskeyRegistrationWire {\n  id: string;\n  rawId: string;\n  type: \"public-key\";\n  authenticatorAttachment?: AuthenticatorAttachment;\n  response: {\n    attestationObject: string;\n    clientDataJSON: string;\n    transports?: string[];\n  };\n  clientExtensionResults: {\n    credProps?: { rk: boolean };\n  };\n}\n\ntype GlobalWebAuthn = typeof globalThis & {\n  AuthenticatorAssertionResponse?: typeof AuthenticatorAssertionResponse;\n  AuthenticatorAttestationResponse?: typeof AuthenticatorAttestationResponse;\n  PublicKeyCredential?: typeof PublicKeyCredential;\n};\n\nfunction toBase64Url(value: ArrayBuffer | ArrayBufferView): string {\n  const bytes =\n    value instanceof ArrayBuffer\n      ? new Uint8Array(value)\n      : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n\n  return btoa(binary)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=+$/g, \"\");\n}\n\nfunction requirePublicKeyCredential(value: unknown): PublicKeyCredential {\n  const CredentialCtor = (globalThis as GlobalWebAuthn).PublicKeyCredential;\n  if (!CredentialCtor || !(value instanceof CredentialCtor)) {\n    throw new TypeError(\"Expected a PublicKeyCredential returned by WebAuthn\");\n  }\n  return value;\n}\n\nfunction authenticatorAttachmentOf(\n  credential: PublicKeyCredential\n): AuthenticatorAttachment | undefined {\n  const attachment = credential.authenticatorAttachment;\n  if (attachment === \"platform\" || attachment === \"cross-platform\") {\n    return attachment;\n  }\n  return undefined;\n}\n\nfunction registrationExtensionResults(\n  credential: PublicKeyCredential\n): AthenaPasskeyRegistrationWire[\"clientExtensionResults\"] {\n  const results = credential.getClientExtensionResults();\n  const credProps = results.credProps;\n  if (!credProps || typeof credProps !== \"object\") {\n    return {};\n  }\n  const rk = (credProps as { rk?: unknown }).rk;\n  if (typeof rk !== \"boolean\") {\n    return {};\n  }\n  return { credProps: { rk } };\n}\n\nexport function serializeRegistrationCredential(\n  value: unknown\n): AthenaPasskeyRegistrationWire {\n  const credential = requirePublicKeyCredential(value);\n  const AttestationCtor = (globalThis as GlobalWebAuthn)\n    .AuthenticatorAttestationResponse;\n  if (\n    !AttestationCtor ||\n    !(credential.response instanceof AttestationCtor)\n  ) {\n    throw new TypeError(\"Expected AuthenticatorAttestationResponse\");\n  }\n\n  const response = credential.response;\n  const transports =\n    typeof response.getTransports === \"function\"\n      ? response.getTransports()\n      : undefined;\n\n  return {\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\n    type: \"public-key\",\n    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    response: {\n      clientDataJSON: toBase64Url(response.clientDataJSON),\n      attestationObject: toBase64Url(response.attestationObject),\n      ...(Array.isArray(transports) ? { transports } : {}),\n    },\n    clientExtensionResults: registrationExtensionResults(credential),\n  };\n}\n\nexport function serializeAuthenticationCredential(\n  value: unknown\n): AthenaPasskeyAuthenticationWire {\n  const credential = requirePublicKeyCredential(value);\n  const AssertionCtor = (globalThis as GlobalWebAuthn)\n    .AuthenticatorAssertionResponse;\n  if (!AssertionCtor || !(credential.response instanceof AssertionCtor)) {\n    throw new TypeError(\"Expected AuthenticatorAssertionResponse\");\n  }\n\n  const response = credential.response;\n  return {\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\n    type: \"public-key\",\n    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    response: {\n      authenticatorData: toBase64Url(response.authenticatorData),\n      clientDataJSON: toBase64Url(response.clientDataJSON),\n      signature: toBase64Url(response.signature),\n      userHandle: response.userHandle ? toBase64Url(response.userHandle) : null,\n    },\n  };\n}\n\nexport function serializeCreatedPasskey(credential: unknown): string {\n  return JSON.stringify(serializeRegistrationCredential(credential));\n}\n\nexport function serializeAssertedPasskey(credential: unknown): string {\n  return JSON.stringify(serializeAuthenticationCredential(credential));\n}\n","import type { AthenaPasskeyHint } from \"../../types.ts\";\nimport { formatPasskeyDiscoverabilityDiagnostic } from \"./diagnostic.ts\";\nimport {\n  type PasskeyBrowserOptionsInput,\n  type PasskeyBrowserRpIdFallback,\n  toPublicKeyCredentialCreationOptions,\n  toPublicKeyCredentialRequestOptions,\n} from \"./options.ts\";\n\nexport {\n  serializeAssertedPasskey,\n  serializeCreatedPasskey,\n} from \"./serialize.ts\";\n\nexport type PasskeyCreationOptionsWithHints =\n  PublicKeyCredentialCreationOptions & {\n    hints?: string[];\n  };\n\ntype RecordLike = Record<string, unknown>;\n\nfunction asRecord(value: unknown): RecordLike | null {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return null;\n  }\n  return value as RecordLike;\n}\n\nfunction ensureBrowserWebAuthn(flow: string): void {\n  const nav =\n    typeof globalThis === \"object\"\n      ? (globalThis as { navigator?: { credentials?: unknown } }).navigator\n      : undefined;\n  const hasPublicKey =\n    typeof globalThis === \"object\" &&\n    \"PublicKeyCredential\" in globalThis &&\n    typeof (globalThis as { PublicKeyCredential?: unknown })\n      .PublicKeyCredential !== \"undefined\";\n  const hasWindow =\n    typeof globalThis === \"object\" &&\n    \"window\" in globalThis &&\n    (globalThis as { window?: unknown }).window != null;\n  if (!(hasWindow && nav?.credentials && hasPublicKey)) {\n    throw new Error(`${flow} requires a browser with WebAuthn support`);\n  }\n}\n\nfunction asHints(value: unknown): AthenaPasskeyHint[] | undefined {\n  if (!Array.isArray(value)) {\n    return undefined;\n  }\n  const hints = value.filter(\n    (entry): entry is AthenaPasskeyHint =>\n      entry === \"client-device\" ||\n      entry === \"security-key\" ||\n      entry === \"hybrid\",\n  );\n  return hints.length > 0 ? hints : undefined;\n}\n\n/**\n * Apply caller preferences. Hints are a UI steer. authenticatorAttachment is\n * only copied when the caller opted into an eligibility filter.\n */\nexport function applyPasskeyRegistrationOverrides(\n  options: PasskeyCreationOptionsWithHints,\n  payload: RecordLike | undefined,\n): PasskeyCreationOptionsWithHints {\n  if (!payload) {\n    return options;\n  }\n  const authenticatorAttachment = payload.authenticatorAttachment;\n  const hints = asHints(payload.hints);\n  const extensions = asRecord(\n    payload.extensions,\n  ) as AuthenticationExtensionsClientInputs | null;\n  const next: PasskeyCreationOptionsWithHints = {\n    ...options,\n    extensions: extensions\n      ? {\n        ...(options.extensions ?? {}),\n        ...extensions,\n      }\n      : options.extensions,\n  };\n  if (hints) {\n    next.hints = hints;\n  }\n  if (\n    authenticatorAttachment === \"platform\" ||\n    authenticatorAttachment === \"cross-platform\"\n  ) {\n    next.authenticatorSelection = {\n      ...(options.authenticatorSelection ?? {}),\n      authenticatorAttachment,\n    };\n  }\n  return next;\n}\n\nlet activeCredentialRequest:\n  | {\n    controller: AbortController;\n    settled: Promise<void>;\n  }\n  | undefined;\n\nfunction createAbortError(cause?: unknown): Error {\n  const error = new Error(\"The operation was aborted.\");\n  error.name = \"AbortError\";\n  if (cause !== undefined) {\n    Object.assign(error, { cause });\n  }\n  return error;\n}\n\nexport function isAlreadyPendingWebAuthnError(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  const name = \"name\" in error ? String(error.name) : \"\";\n  const message =\n    \"message\" in error ? String(error.message).toLowerCase() : \"\";\n  return (\n    message.includes(\"request is already pending\") ||\n    (name === \"InvalidStateError\" && message.includes(\"pending\"))\n  );\n}\n\nexport function resetWebAuthnCeremonyLockForTests(): void {\n  activeCredentialRequest = undefined;\n}\n\n/**\n * At most one navigator.credentials.create/get may be owned in this browsing\n * context. Aborting the prior signal is not enough; the previous promise must\n * settle before the next native ceremony starts.\n */\nasync function withExclusiveWebAuthnCeremony<T>(\n  callerSignal: AbortSignal | undefined,\n  operate: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n  const previous = activeCredentialRequest;\n  previous?.controller.abort();\n  if (previous) {\n    await previous.settled;\n  }\n\n  if (callerSignal?.aborted) {\n    throw createAbortError();\n  }\n\n  const controller = new AbortController();\n  const onCallerAbort = (): void => {\n    controller.abort();\n  };\n  callerSignal?.addEventListener(\"abort\", onCallerAbort);\n\n  let settle = (): void => undefined;\n  const settled = new Promise<void>((resolve) => {\n    settle = resolve;\n  });\n  const owned = { controller, settled };\n  activeCredentialRequest = owned;\n\n  try {\n    return await operate(controller.signal);\n  } catch (error) {\n    if (isAlreadyPendingWebAuthnError(error)) {\n      throw createAbortError(error);\n    }\n    throw error;\n  } finally {\n    callerSignal?.removeEventListener(\"abort\", onCallerAbort);\n    settle();\n    if (activeCredentialRequest === owned) {\n      activeCredentialRequest = undefined;\n    }\n  }\n}\n\nexport async function createPasskeyCredential(\n  publicKey: PasskeyCreationOptionsWithHints,\n  signal?: AbortSignal,\n): Promise<Credential | null> {\n  ensureBrowserWebAuthn(\"passkey.register\");\n  return withExclusiveWebAuthnCeremony(signal, (ownedSignal) =>\n    navigator.credentials.create({\n      publicKey,\n      signal: ownedSignal,\n    }),\n  );\n}\n\nexport async function getPasskeyCredential(\n  publicKey: PublicKeyCredentialRequestOptions,\n  mediation?: CredentialMediationRequirement,\n  signal?: AbortSignal,\n): Promise<Credential | null> {\n  ensureBrowserWebAuthn(\"passkey.signIn\");\n  return withExclusiveWebAuthnCeremony(signal, (ownedSignal) =>\n    navigator.credentials.get({\n      ...(mediation ? { mediation } : {}),\n      publicKey,\n      signal: ownedSignal,\n    }),\n  );\n}\n\nexport function creationOptionsFromWire(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  payload?: RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback,\n): PasskeyCreationOptionsWithHints {\n  const mapped = toPublicKeyCredentialCreationOptions(\n    options,\n    fallback,\n  ) as PasskeyCreationOptionsWithHints;\n  const hints = asHints((options as RecordLike).hints);\n  if (hints) {\n    mapped.hints = hints;\n  }\n  return applyPasskeyRegistrationOverrides(mapped, payload);\n}\n\nexport function requestOptionsFromWire(\n  options: PasskeyBrowserOptionsInput | RecordLike,\n  fallback?: PasskeyBrowserRpIdFallback,\n): PublicKeyCredentialRequestOptions {\n  return toPublicKeyCredentialRequestOptions(options, fallback);\n}\n\nexport function noAssertionDiagnostic(input: {\n  allowCredentialsCount: number;\n  residentKey: boolean | null | undefined;\n}): string {\n  return (\n    formatPasskeyDiscoverabilityDiagnostic({\n      allowCredentialsCount: input.allowCredentialsCount,\n      assertionPresent: false,\n      residentKey: input.residentKey,\n    }) ?? \"browser returned no assertion\"\n  );\n}\n","import type { AthenaAuthenticatorMetadata } from \"./types.ts\";\n\n/**\n * Bundled, replaceable AAGUID catalog. Not a network Metadata Service client.\n * Keys are canonical lowercase UUID text from `normalizePasskeyAaguid`.\n */\nexport const ATHENA_AUTHENTICATOR_METADATA_CATALOG: readonly AthenaAuthenticatorMetadata[] =\n\t[\n\t\t{\n\t\t\taaguid: \"adce0002-35bc-c60a-648b-0b25b34bb543\",\n\t\t\tdisplayName: \"Chrome on Mac\",\n\t\t\tvendor: \"Google\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4\",\n\t\t\tdisplayName: \"Google Password Manager\",\n\t\t\tvendor: \"Google\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"08987058-cadc-4b81-b6e1-30de50dcbe96\",\n\t\t\tdisplayName: \"Windows Hello\",\n\t\t\tvendor: \"Microsoft\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"9ddd1817-af5a-4672-a2b9-3e3dd95000a9\",\n\t\t\tdisplayName: \"Windows Hello\",\n\t\t\tvendor: \"Microsoft\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"dd4ec289-e01d-41c9-bb89-70fa845d4bf2\",\n\t\t\tdisplayName: \"iCloud Keychain\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"fbfc3007-154e-4ecc-8c0b-6e020557d7bd\",\n\t\t\tdisplayName: \"iCloud Keychain\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"cc4fb84c-2424-4c94-87ba-6767112e9012\",\n\t\t\tdisplayName: \"MacBook Touch ID\",\n\t\t\tmodel: \"Touch ID\",\n\t\t\tvendor: \"Apple\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"002ebc4f-5700-4f6b-b3d1-967ae1d7eab6\",\n\t\t\tdisplayName: \"YubiKey\",\n\t\t\tvendor: \"Yubico\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"2fc0579f-8113-47ea-b116-bb5a8db9202a\",\n\t\t\tdisplayName: \"YubiKey\",\n\t\t\tvendor: \"Yubico\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"bada5566-a7aa-401f-ad96-45686a11f038\",\n\t\t\tdisplayName: \"1Password\",\n\t\t\tvendor: \"1Password\",\n\t\t},\n\t\t{\n\t\t\taaguid: \"d548826e-79b4-db40-a3d8-11116f7e8349\",\n\t\t\tdisplayName: \"Bitwarden\",\n\t\t\tvendor: \"Bitwarden\",\n\t\t},\n\t];\n\nconst BY_AAGUID = new Map(\n\tATHENA_AUTHENTICATOR_METADATA_CATALOG.map((entry) => [entry.aaguid, entry]),\n);\n\nexport function lookupAuthenticatorMetadata(\n\taaguid: string | null | undefined,\n): AthenaAuthenticatorMetadata | undefined {\n\tif (!aaguid) {\n\t\treturn undefined;\n\t}\n\treturn BY_AAGUID.get(aaguid);\n}\n","import { lookupAuthenticatorMetadata } from \"./catalog.ts\";\nimport type {\n\tAthenaPasskeyDisplayName,\n\tAthenaPasskeyDisplayNameInput,\n} from \"./types.ts\";\n\nfunction hasText(value: string | null | undefined): value is string {\n\treturn typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isUuidLike(value: string): boolean {\n\treturn /^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/i.test(\n\t\tvalue.trim(),\n\t);\n}\n\nfunction looksLikeCredentialId(value: string): boolean {\n\tconst trimmed = value.trim();\n\tif (isUuidLike(trimmed) && trimmed.length === 36) {\n\t\treturn true;\n\t}\n\treturn trimmed.length >= 24 && /^[A-Za-z0-9_-]+$/.test(trimmed);\n}\n\nfunction discoverabilityFromResidentKey(\n\tresidentKey: boolean | null | undefined,\n): AthenaPasskeyDisplayName[\"discoverability\"] {\n\tif (residentKey === true) {\n\t\treturn \"discoverable\";\n\t}\n\tif (residentKey === false) {\n\t\treturn \"non-discoverable\";\n\t}\n\treturn \"unknown\";\n}\n\nfunction platformOrSecurityKey(\n\tinput: AthenaPasskeyDisplayNameInput,\n): string {\n\tconst transports = input.transports ?? [];\n\tconst hasInternal = transports.includes(\"internal\");\n\tconst hasHybrid = transports.includes(\"hybrid\");\n\tconst hasUsb = transports.includes(\"usb\") || transports.includes(\"nfc\") || transports.includes(\"ble\");\n\tif (hasInternal && !hasUsb) {\n\t\treturn \"Platform passkey\";\n\t}\n\tif (hasUsb && !hasInternal) {\n\t\treturn \"Security key\";\n\t}\n\tif (hasHybrid) {\n\t\treturn \"Synced passkey\";\n\t}\n\tif (input.deviceType === \"multiDevice\" || input.backedUp) {\n\t\treturn \"Synced passkey\";\n\t}\n\treturn \"Passkey\";\n}\n\n/**\n * Resolve a user-facing passkey title.\n *\n * Order: explicit user name (when it is not a credential/AAGUID/UUID) →\n * known AAGUID friendly name → platform/security-key class → \"Passkey\".\n * Never returns a credential ID, AAGUID, or database id.\n */\nexport function resolvePasskeyAuthenticatorDisplay(\n\tinput: AthenaPasskeyDisplayNameInput,\n): AthenaPasskeyDisplayName {\n\tconst known = lookupAuthenticatorMetadata(input.aaguid ?? null);\n\tconst discoverability = discoverabilityFromResidentKey(input.residentKey);\n\tif (hasText(input.name) && !looksLikeCredentialId(input.name)) {\n\t\treturn {\n\t\t\tdiscoverability,\n\t\t\tdisplayName: input.name.trim(),\n\t\t\tmodel: known?.model,\n\t\t\tvendor: known?.vendor,\n\t\t};\n\t}\n\tif (known?.displayName) {\n\t\treturn {\n\t\t\tdiscoverability,\n\t\t\tdisplayName: known.displayName,\n\t\t\tmodel: known.model,\n\t\t\tvendor: known.vendor,\n\t\t};\n\t}\n\tconst className = platformOrSecurityKey(input);\n\treturn {\n\t\tdiscoverability,\n\t\tdisplayName: className,\n\t\tmodel: known?.model,\n\t\tvendor: known?.vendor,\n\t};\n}\n","export {\n\tATHENA_AUTHENTICATOR_METADATA_CATALOG,\n\tlookupAuthenticatorMetadata,\n} from \"./catalog.ts\";\nexport { resolvePasskeyAuthenticatorDisplay } from \"./resolve.ts\";\nexport type {\n\tAthenaAuthenticatorMetadata,\n\tAthenaPasskeyDiscoverability,\n\tAthenaPasskeyDisplayName,\n\tAthenaPasskeyDisplayNameInput,\n} from \"./types.ts\";\n","import { resolvePasskeyAuthenticatorDisplay } from \"./metadata/index.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n  AthenaPasskeyAuthenticationOptions,\n  AthenaPasskeyDeviceType,\n  AthenaPasskeyRecord,\n  AthenaPasskeyRegistrationOptions,\n} from \"../types.ts\";\n\nexport function extractPasskeyFetchOptions<\n  T extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n  if (!input) {\n    return {\n      fetchOptions: undefined,\n      payload: undefined,\n    };\n  }\n\n  const { fetchOptions, ...rest } = input;\n  const hasPayloadKeys = Object.keys(rest).length > 0;\n  return {\n    fetchOptions,\n    payload: hasPayloadKeys ? rest : undefined,\n  };\n}\n\nexport function extractPasskeyQuery(\n  input?: AthenaAuthFetchCompatibleInput\n): Record<string, AthenaAuthQueryValue> | undefined {\n  const { payload } = extractPasskeyFetchOptions(input);\n  const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)\n    ?.query;\n  if (!query || typeof query !== \"object\") {\n    return undefined;\n  }\n  return query;\n}\n\n/** Wire-shape identity — registration options stay `AthenaPasskeyOptionsResponse`. */\nexport function normalizePasskeyRegistrationOptions(\n  value: AthenaPasskeyRegistrationOptions\n): AthenaPasskeyRegistrationOptions {\n  return value;\n}\n\n/** Wire-shape identity — authentication options share the same DTO. */\nexport function normalizePasskeyAuthenticationOptions(\n  value: AthenaPasskeyAuthenticationOptions\n): AthenaPasskeyAuthenticationOptions {\n  return value;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return undefined;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction asTransportList(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value.filter(\n      (entry): entry is string => typeof entry === \"string\" && entry.length > 0,\n    );\n  }\n  if (typeof value === \"string\" && value.trim()) {\n    try {\n      const parsed: unknown = JSON.parse(value);\n      if (Array.isArray(parsed)) {\n        return parsed.filter(\n          (entry): entry is string =>\n            typeof entry === \"string\" && entry.length > 0,\n        );\n      }\n    } catch {\n      return [value];\n    }\n  }\n  return [];\n}\n\n/**\n * Map embedded or remote wire into the public passkey DTO.\n * Drops publicKey / credentialID / challenge / attestation.\n */\nexport function normalizePasskeyRecord(\n  value: AthenaPasskeyRecord | Record<string, unknown>,\n): AthenaPasskeyRecord {\n  const record = asRecord(value) ?? {};\n  const nested = asRecord(record.authenticator);\n  const deviceType: AthenaPasskeyDeviceType =\n    nested?.deviceType === \"multiDevice\" || record.deviceType === \"multiDevice\"\n      ? \"multiDevice\"\n      : \"singleDevice\";\n  const backedUp = Boolean(nested?.backedUp ?? record.backedUp);\n  const transports = asTransportList(\n    nested?.transports ?? record.transports,\n  );\n  const name =\n    typeof record.name === \"string\" && record.name.trim()\n      ? record.name\n      : record.name === null\n        ? null\n        : null;\n  const residentKey =\n    nested?.residentKey === true\n      ? true\n      : nested?.residentKey === false\n        ? false\n        : null;\n  const resolved = resolvePasskeyAuthenticatorDisplay({\n    aaguid: typeof nested?.aaguid === \"string\" ? nested.aaguid : null,\n    backedUp,\n    deviceType,\n    name,\n    residentKey,\n    transports,\n  });\n  const authenticator: AthenaPasskeyRecord[\"authenticator\"] = {\n    backedUp,\n    deviceType,\n    displayName:\n      typeof nested?.displayName === \"string\"\n        ? nested.displayName\n        : resolved.displayName,\n    residentKey,\n    transports,\n  };\n  if (typeof nested?.vendor === \"string\") {\n    authenticator.vendor = nested.vendor;\n  } else if (resolved.vendor) {\n    authenticator.vendor = resolved.vendor;\n  }\n  if (typeof nested?.model === \"string\") {\n    authenticator.model = nested.model;\n  } else if (resolved.model) {\n    authenticator.model = resolved.model;\n  }\n  const createdAt =\n    typeof record.createdAt === \"string\"\n      ? record.createdAt\n      : new Date().toISOString();\n  const view: AthenaPasskeyRecord = {\n    authenticator,\n    createdAt,\n    id: typeof record.id === \"string\" ? record.id : \"\",\n    name,\n    userId: typeof record.userId === \"string\" ? record.userId : \"\",\n  };\n  if (typeof record.updatedAt === \"string\") {\n    view.updatedAt = record.updatedAt;\n  }\n  return view;\n}\n\nexport function normalizePasskeyResult<T>(\n  result: AthenaAuthResult<T>\n): AthenaAuthResult<T> {\n  return result;\n}\n\nexport function mergePasskeyCallOptions(\n  fetchOptions?: AthenaAuthCallOptions,\n  options?: AthenaAuthCallOptions\n): AthenaAuthCallOptions | undefined {\n  if (!fetchOptions) {\n    return options;\n  }\n  if (!options) {\n    return fetchOptions;\n  }\n  return { ...fetchOptions, ...options };\n}\n","import type { AthenaAuthEndpointPath, AthenaAuthMethod } from \"../types.ts\";\nimport type { CanonicalPasskeyMethod } from \"./contract.ts\";\n\nexport interface PasskeyRequestSpec {\n  gated: boolean;\n  method: AthenaAuthMethod;\n  path: AthenaAuthEndpointPath;\n}\n\n/**\n * HTTP map for `athena.auth.passkey.*`.\n * Seven `/passkey/*` routes are capability-gated; `/.well-known/webauthn` is not.\n */\nexport const PASSKEY_REQUESTS = {\n  deletePasskey: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/delete-passkey\",\n  },\n  generateAuthenticateOptions: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/generate-authenticate-options\",\n  },\n  generateRegisterOptions: {\n    gated: true,\n    method: \"GET\",\n    path: \"/passkey/generate-register-options\",\n  },\n  getRelatedOrigins: {\n    gated: false,\n    method: \"GET\",\n    path: \"/.well-known/webauthn\",\n  },\n  listUserPasskeys: {\n    gated: true,\n    method: \"GET\",\n    path: \"/passkey/list-user-passkeys\",\n  },\n  updatePasskey: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/update-passkey\",\n  },\n  verifyAuthentication: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/verify-authentication\",\n  },\n  verifyRegistration: {\n    gated: true,\n    method: \"POST\",\n    path: \"/passkey/verify-registration\",\n  },\n} as const satisfies Record<CanonicalPasskeyMethod, PasskeyRequestSpec>;\n","import {\n\ttype AthenaAuthCapabilitiesResult,\n\tisCapabilityEnabled,\n} from \"../capabilities.ts\";\nimport type {\n\tAthenaAuthCallOptions,\n\tAthenaAuthEndpointPath,\n\tAthenaAuthFetchCompatibleInput,\n\tAthenaAuthMethod,\n\tAthenaAuthQueryPrimitive,\n\tAthenaAuthQueryValue,\n\tAthenaAuthResult,\n\tAthenaAuthSessionResponse,\n\tAthenaPasskeyOptionsResponse,\n\tAthenaPasskeyRecord,\n\tAthenaPasskeyRegisterRequest,\n\tAthenaPasskeySignInRequest,\n\tAthenaPasskeyVerifyAuthenticationResponse,\n} from \"../types.ts\";\nimport {\n\tcreatePasskeyCredential,\n\tcreationOptionsFromWire,\n\tgetPasskeyCredential,\n\tnoAssertionDiagnostic,\n\trequestOptionsFromWire,\n\tserializeAssertedPasskey,\n\tserializeCreatedPasskey,\n} from \"./browser/ceremony.ts\";\nimport type {\n\tAthenaPasskeyBindings,\n\tCreatePasskeyModuleDeps,\n\tPasskeyModuleCapabilities,\n} from \"./contract.ts\";\nimport {\n\textractPasskeyFetchOptions,\n\textractPasskeyQuery,\n\tmergePasskeyCallOptions,\n\tnormalizePasskeyRecord,\n\tnormalizePasskeyResult,\n} from \"./normalize.ts\";\nimport { PASSKEY_REQUESTS } from \"./requests.ts\";\n\nfunction resolveCapabilitiesSnapshot(\n\tcapabilities: PasskeyModuleCapabilities,\n): AthenaAuthCapabilitiesResult {\n\tif (\"getSnapshot\" in capabilities) {\n\t\treturn capabilities.getSnapshot();\n\t}\n\treturn capabilities;\n}\n\nfunction capabilityDisabled(\n\tfeature: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> {\n\treturn {\n\t\tdata: null,\n\t\terror: `${feature} is not enabled on this Athena Auth runtime`,\n\t\terrorDetails: {\n\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\tendpoint,\n\t\t\thint: feature,\n\t\t\tmessage: `${feature} is not enabled on this Athena Auth runtime`,\n\t\t\tmethod,\n\t\t\tstatus: 501,\n\t\t},\n\t\tok: false,\n\t\traw: {\n\t\t\terror: {\n\t\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\t\tfeature,\n\t\t\t\tstatus: 501,\n\t\t\t},\n\t\t},\n\t\tstatus: 501,\n\t};\n}\n\nfunction denyPasskeys(\n\tcapabilities: PasskeyModuleCapabilities,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> | null {\n\tconst snap = resolveCapabilitiesSnapshot(capabilities);\n\tif (snap.status !== \"known\" || isCapabilityEnabled(snap, \"passkeys\")) {\n\t\treturn null;\n\t}\n\treturn capabilityDisabled(\"passkeys\", endpoint, method);\n}\n\nfunction gateCapability<T>(\n\tdenied: AthenaAuthResult<never> | null,\n\trun: () => Promise<AthenaAuthResult<T>>,\n): Promise<AthenaAuthResult<T>> {\n\treturn denied ? Promise.resolve(denied as AthenaAuthResult<T>) : run();\n}\n\nfunction asSessionResponse(value: unknown): AthenaAuthSessionResponse | null {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn null;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst session = record.session;\n\tconst user = record.user;\n\tif (\n\t\t!(\n\t\t\tsession &&\n\t\t\ttypeof session === \"object\" &&\n\t\t\ttypeof (session as { id?: unknown }).id === \"string\" &&\n\t\t\tuser &&\n\t\t\ttypeof user === \"object\" &&\n\t\t\ttypeof (user as { id?: unknown }).id === \"string\"\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tsession: session as AthenaAuthSessionResponse[\"session\"],\n\t\tuser: user as AthenaAuthSessionResponse[\"user\"],\n\t};\n}\n\nfunction ceremonyFailed(\n\tmessage: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tmethod: AthenaAuthMethod = \"POST\",\n): AthenaAuthResult<never> {\n\treturn {\n\t\tdata: null,\n\t\terror: message,\n\t\terrorDetails: {\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint,\n\t\t\tmessage,\n\t\t\tmethod,\n\t\t\tstatus: 400,\n\t\t},\n\t\tok: false,\n\t\traw: { error: { message, status: 400 } },\n\t\tstatus: 400,\n\t};\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction trimmedField(\n\trecord: Record<string, unknown> | undefined,\n\tkey: string,\n): string | undefined {\n\tconst value = record?.[key];\n\treturn typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isQueryPrimitive(value: unknown): value is AthenaAuthQueryPrimitive {\n\treturn (\n\t\ttypeof value === \"string\" ||\n\t\ttypeof value === \"number\" ||\n\t\ttypeof value === \"boolean\"\n\t);\n}\n\nfunction asQueryRecord(value: unknown): Record<string, AthenaAuthQueryValue> {\n\tconst record = asRecord(value);\n\tif (!record) {\n\t\treturn {};\n\t}\n\tconst query: Record<string, AthenaAuthQueryValue> = {};\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (entry === null || entry === undefined) {\n\t\t\tquery[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (isQueryPrimitive(entry)) {\n\t\t\tquery[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(entry) && entry.every(isQueryPrimitive)) {\n\t\t\tquery[key] = entry;\n\t\t}\n\t}\n\treturn query;\n}\n\n/**\n * Internal passkey bindings (eight HTTP methods + register/signIn ceremony).\n * Successful `verifyAuthentication` accepts into the canonical session store.\n */\nexport function createPasskeyModule(\n\tdeps: CreatePasskeyModuleDeps,\n): AthenaPasskeyBindings {\n\tconst { capabilities, request, sessionController } = deps;\n\n\tconst getPasskey = <T>(\n\t\tpath: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { fetchOptions } = extractPasskeyFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint: path,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: extractPasskeyQuery(input),\n\t\t\t},\n\t\t\toptions,\n\t\t).then(normalizePasskeyResult);\n\t};\n\n\tconst postPasskey = <T>(\n\t\tpath: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & {\n\t\t\tautoFill?: unknown;\n\t\t\temail?: unknown;\n\t\t\tname?: unknown;\n\t\t\tquery?: unknown;\n\t\t\tresponse?: unknown;\n\t\t\tuserId?: unknown;\n\t\t},\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tbody: payload ?? {},\n\t\t\t\tendpoint: path,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"POST\",\n\t\t\t},\n\t\t\tmergePasskeyCallOptions(undefined, options),\n\t\t).then(normalizePasskeyResult);\n\t};\n\n\tconst registerPasskey = async (\n\t\tinput?: AthenaPasskeyRegisterRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaPasskeyRecord>> => {\n\t\tconst denied = denyPasskeys(\n\t\t\tcapabilities,\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.method,\n\t\t);\n\t\tif (denied) {\n\t\t\treturn denied as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\tconst record = asRecord(payload);\n\t\tconst email = trimmedField(record, \"email\");\n\t\tconst name = trimmedField(record, \"name\");\n\t\tconst query: Record<string, AthenaAuthQueryValue> = asQueryRecord(\n\t\t\trecord?.query,\n\t\t);\n\t\tif (email) {\n\t\t\tquery.email = email;\n\t\t}\n\t\tif (name) {\n\t\t\tquery.name = name;\n\t\t}\n\t\tconst optionsResult = await getPasskey<AthenaPasskeyOptionsResponse>(\n\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t{\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(Object.keys(query).length > 0 ? { query } : {}),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (!optionsResult.ok || !optionsResult.data) {\n\t\t\treturn optionsResult as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tlet credential: Credential | null;\n\t\ttry {\n\t\t\tconst publicKey = creationOptionsFromWire(optionsResult.data, record);\n\t\t\tcredential = await createPasskeyCredential(\n\t\t\t\tpublicKey,\n\t\t\t\tfetchOptions?.signal,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: \"browser returned no assertion\";\n\t\t\treturn ceremonyFailed(\n\t\t\t\tmessage,\n\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\tif (!credential) {\n\t\t\treturn ceremonyFailed(\n\t\t\t\t\"browser returned no assertion\",\n\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyRecord>;\n\t\t}\n\t\treturn postPasskey<AthenaPasskeyRecord>(\n\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t{\n\t\t\t\t...(email ? { email } : {}),\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(name ? { name } : {}),\n\t\t\t\tresponse: serializeCreatedPasskey(credential),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst signInPasskey = async (\n\t\tinput?: AthenaPasskeySignInRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>> => {\n\t\tconst denied = denyPasskeys(\n\t\t\tcapabilities,\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.method,\n\t\t);\n\t\tif (denied) {\n\t\t\treturn denied as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n\t\tconst record = asRecord(payload);\n\t\tconst email = trimmedField(record, \"email\");\n\t\tconst userId = trimmedField(record, \"userId\");\n\t\tconst autoFill = record?.autoFill === true;\n\t\tconst optionsResult = await postPasskey<AthenaPasskeyOptionsResponse>(\n\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t{\n\t\t\t\t...(email ? { email } : {}),\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\t...(userId ? { userId } : {}),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (!optionsResult.ok || !optionsResult.data) {\n\t\t\treturn optionsResult as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst allowCredentials = optionsResult.data.allowCredentials ?? [];\n\t\tlet credential: Credential | null;\n\t\ttry {\n\t\t\tcredential = await getPasskeyCredential(\n\t\t\t\trequestOptionsFromWire(optionsResult.data),\n\t\t\t\tautoFill ? \"conditional\" : \"optional\",\n\t\t\t\tfetchOptions?.signal,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: noAssertionDiagnostic({\n\t\t\t\t\t\t\tallowCredentialsCount: allowCredentials.length,\n\t\t\t\t\t\t\tresidentKey: null,\n\t\t\t\t\t\t});\n\t\t\treturn ceremonyFailed(\n\t\t\t\tmessage,\n\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tif (!credential) {\n\t\t\treturn ceremonyFailed(\n\t\t\t\tnoAssertionDiagnostic({\n\t\t\t\t\tallowCredentialsCount: allowCredentials.length,\n\t\t\t\t\tresidentKey: null,\n\t\t\t\t}),\n\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n\t\t}\n\t\tconst result = await postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t{\n\t\t\t\t...(fetchOptions ? { fetchOptions } : {}),\n\t\t\t\tresponse: serializeAssertedPasskey(credential),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t\tif (result.ok) {\n\t\t\tconst session = asSessionResponse(result.data);\n\t\t\tif (session) {\n\t\t\t\tsessionController.accept(session);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t};\n\n\treturn {\n\t\tdeletePasskey: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.deletePasskey.path,\n\t\t\t\t\tPASSKEY_REQUESTS.deletePasskey.method,\n\t\t\t\t),\n\t\t\t\t() => postPasskey(PASSKEY_REQUESTS.deletePasskey.path, input, options),\n\t\t\t),\n\t\tgenerateAuthenticateOptions: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tpostPasskey(\n\t\t\t\t\t\tPASSKEY_REQUESTS.generateAuthenticateOptions.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t),\n\t\tgenerateRegisterOptions: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tgetPasskey(\n\t\t\t\t\t\tPASSKEY_REQUESTS.generateRegisterOptions.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t),\n\t\tgetRelatedOrigins: (input, options) =>\n\t\t\tgetPasskey(PASSKEY_REQUESTS.getRelatedOrigins.path, input, options),\n\t\tregister: (input, options) => registerPasskey(input, options),\n\t\tsignIn: (input, options) => signInPasskey(input, options),\n\t\tlistUserPasskeys: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.path,\n\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tgetPasskey<AthenaPasskeyRecord[]>(\n\t\t\t\t\t\tPASSKEY_REQUESTS.listUserPasskeys.path,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t).then((result) => {\n\t\t\t\t\t\tif (result.ok && Array.isArray(result.data)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t\tdata: result.data.map((row) =>\n\t\t\t\t\t\t\t\t\tnormalizePasskeyRecord(row as AthenaPasskeyRecord),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}),\n\t\t\t),\n\t\tupdatePasskey: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.updatePasskey.path,\n\t\t\t\t\tPASSKEY_REQUESTS.updatePasskey.method,\n\t\t\t\t),\n\t\t\t\t() => postPasskey(PASSKEY_REQUESTS.updatePasskey.path, input, options),\n\t\t\t),\n\t\tverifyAuthentication: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.method,\n\t\t\t\t),\n\t\t\t\tasync () => {\n\t\t\t\t\tconst result =\n\t\t\t\t\t\tawait postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n\t\t\t\t\t\t\tPASSKEY_REQUESTS.verifyAuthentication.path,\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\tconst session = asSessionResponse(result.data);\n\t\t\t\t\t\tif (session) {\n\t\t\t\t\t\t\tsessionController.accept(session);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t),\n\t\tverifyRegistration: (input, options) =>\n\t\t\tgateCapability(\n\t\t\t\tdenyPasskeys(\n\t\t\t\t\tcapabilities,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.path,\n\t\t\t\t\tPASSKEY_REQUESTS.verifyRegistration.method,\n\t\t\t\t),\n\t\t\t\t() =>\n\t\t\t\t\tpostPasskey(PASSKEY_REQUESTS.verifyRegistration.path, input, options),\n\t\t\t),\n\t};\n}\n","import type {\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthLooseRecord,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n} from \"./types.ts\";\n\ninterface ReactEmailRenderModule {\n  pretty?: (html: string) => string | Promise<string>;\n  render: (element: unknown) => string | Promise<string>;\n  toPlainText?: (html: string) => string | Promise<string>;\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n  html: string;\n  text?: string;\n}\n\nexport interface AthenaAuthReactEmailPayload {\n  react?: AthenaAuthReactEmailRenderInput;\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n  defaults?: AthenaAuthReactEmailRenderOptions;\n  observe?: (event: AthenaAuthReactEmailRenderEvent) => void;\n  route?: string;\n}\n\ninterface ResolvePayloadFieldsInput {\n  htmlField: string;\n  textField: string;\n  variablesField?: string;\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined;\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === \"function\";\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  return value;\n}\n\nfunction nowIsoString() {\n  return new Date().toISOString();\n}\n\nfunction emitReactEmailEvent(\n  observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n  phase: AthenaAuthReactEmailEventPhase,\n  input: Omit<AthenaAuthReactEmailRenderEvent, \"phase\" | \"timestamp\"> = {}\n) {\n  if (!observe) {\n    return;\n  }\n  try {\n    observe({\n      phase,\n      timestamp: nowIsoString(),\n      ...input,\n    });\n  } catch {\n    // Observability hooks are non-blocking.\n  }\n}\n\nfunction mergeRenderDefaults(\n  input: AthenaAuthReactEmailRenderInput,\n  defaults?: AthenaAuthReactEmailRenderOptions\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...input,\n    includePlainText: input.includePlainText ?? defaults?.includePlainText,\n    pretty: input.pretty ?? defaults?.pretty,\n  };\n}\n\nfunction mergeRuntimeOptions(\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n  if (!options) {\n    return;\n  }\n  return {\n    defaults: options.defaults,\n    observe: options.observe,\n    route: \"route\" in options ? options.route : undefined,\n  };\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n  if (!reactEmailRenderModulePromise) {\n    reactEmailRenderModulePromise = (async () => {\n      try {\n        const specifier = [\"@react-email\", \"render\"].join(\"/\");\n        const loaded = (await import(\n          /* webpackIgnore: true */\n          /* @vite-ignore */\n          specifier\n        )) as ReactEmailRenderModule & { render?: unknown };\n        if (!isFunction(loaded.render)) {\n          throw new Error(\"missing render(...) export\");\n        }\n        return {\n          pretty: isFunction(loaded.pretty)\n            ? (loaded.pretty as ReactEmailRenderModule[\"pretty\"])\n            : undefined,\n          render: loaded.render as ReactEmailRenderModule[\"render\"],\n          toPlainText: isFunction(loaded.toPlainText)\n            ? (loaded.toPlainText as ReactEmailRenderModule[\"toPlainText\"])\n            : undefined,\n        };\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        throw new Error(\n          `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\n          { cause: error }\n        );\n      }\n    })();\n  }\n\n  if (!reactEmailRenderModulePromise) {\n    throw new Error(\"React Email renderer module failed to initialize\");\n  }\n\n  return reactEmailRenderModulePromise;\n}\n\nasync function resolveReactEmailElement(\n  input: AthenaAuthReactEmailRenderInput\n): Promise<unknown> {\n  // Omitted `element` is undefined; only an explicit element short-circuits.\n  // `undefined !== null` is true and previously rendered an empty element\n  // instead of falling through to `component` + `props`.\n  if (input.element != null) {\n    return input.element;\n  }\n  if (!input.component) {\n    throw new Error(\n      \"react email payload requires either `element` or `component`\"\n    );\n  }\n\n  try {\n    const reactModule = await import(\"react\");\n    if (typeof reactModule.createElement !== \"function\") {\n      throw new Error(\"react createElement(...) export is unavailable\");\n    }\n    return reactModule.createElement(\n      input.component as Parameters<typeof reactModule.createElement>[0],\n      input.props ?? {}\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(\n      `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\n      { cause: error }\n    );\n  }\n}\n\nexport function createAuthReactEmailInput<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  component: AthenaAuthReactEmailComponent<TProps>,\n  props: TProps,\n  overrides: Omit<\n    AthenaAuthReactEmailRenderInput,\n    \"component\" | \"props\" | \"element\"\n  > = {}\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...overrides,\n    component: component as AthenaAuthReactEmailComponent,\n    props,\n  };\n}\n\nexport function defineAuthEmailTemplate<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  definition: AthenaAuthEmailTemplateDefinition<TProps>\n): AthenaAuthEmailTemplateBuilder<TProps> {\n  const react: AthenaAuthEmailTemplateBuilder<TProps>[\"react\"] = (\n    props,\n    overrides\n  ) =>\n    createAuthReactEmailInput(definition.component, props, {\n      ...definition.defaults,\n      ...overrides,\n    });\n\n  return {\n    component: definition.component,\n    react,\n    toTemplateCreate: (\n      input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>\n    ) => {\n      const templateKey = input.templateKey ?? definition.templateKey;\n      const subjectTemplate =\n        input.subjectTemplate ?? definition.subjectTemplate;\n      if (!templateKey) {\n        throw new Error(\n          \"defineAuthEmailTemplate.toTemplateCreate requires templateKey\"\n        );\n      }\n      if (!subjectTemplate) {\n        throw new Error(\n          \"defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate\"\n        );\n      }\n\n      const { props, react: reactOverrides, ...rest } = input;\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n        subject_template: subjectTemplate,\n        template_key: templateKey,\n      };\n    },\n    toTemplateUpdate: (\n      input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>\n    ) => {\n      const { props, react: reactOverrides, ...rest } = input;\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n      };\n    },\n  };\n}\n\nexport async function renderAthenaReactEmail(\n  input: AthenaAuthReactEmailRenderInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): Promise<AthenaAuthRenderedReactEmail> {\n  if (!isRecord(input)) {\n    throw new Error(\"react email payload must be an object\");\n  }\n\n  const runtimeOptions = mergeRuntimeOptions(options);\n  const start = Date.now();\n  emitReactEmailEvent(runtimeOptions?.observe, \"render:start\", {\n    message: \"Rendering react email payload\",\n    route: runtimeOptions?.route,\n  });\n\n  try {\n    const normalizedInput = mergeRenderDefaults(\n      input,\n      runtimeOptions?.defaults\n    );\n    const element = await resolveReactEmailElement(normalizedInput);\n    const renderModule = await resolveReactEmailRenderModule();\n    const htmlValue = await renderModule.render(element);\n    const renderedHtml =\n      typeof htmlValue === \"string\" ? htmlValue : String(htmlValue ?? \"\");\n    if (!renderedHtml.trim()) {\n      throw new Error(\"react email renderer returned an empty HTML string\");\n    }\n\n    let html = renderedHtml;\n    if (normalizedInput.pretty && renderModule.pretty) {\n      const prettyValue = await renderModule.pretty(renderedHtml);\n      if (typeof prettyValue === \"string\" && prettyValue.trim().length > 0) {\n        html = prettyValue;\n      }\n    }\n\n    const explicitText = toStringOrUndefined(normalizedInput.text);\n    if (explicitText !== undefined) {\n      emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n        durationMs: Date.now() - start,\n        message: \"Rendered react email with explicit text\",\n        route: runtimeOptions?.route,\n      });\n      return {\n        html,\n        text: explicitText,\n      };\n    }\n\n    if (\n      normalizedInput.includePlainText === false ||\n      !renderModule.toPlainText\n    ) {\n      emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n        durationMs: Date.now() - start,\n        message: \"Rendered react email without plain-text derivation\",\n        route: runtimeOptions?.route,\n      });\n      return { html };\n    }\n\n    const plainTextValue = await renderModule.toPlainText(html);\n    const plainText = toStringOrUndefined(plainTextValue);\n    emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n      durationMs: Date.now() - start,\n      message: plainText\n        ? \"Rendered react email with derived plain text\"\n        : \"Rendered react email HTML only\",\n      route: runtimeOptions?.route,\n    });\n    if (plainText === undefined) {\n      return { html };\n    }\n\n    return {\n      html,\n      text: plainText,\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    emitReactEmailEvent(runtimeOptions?.observe, \"render:error\", {\n      durationMs: Date.now() - start,\n      error: message,\n      message: \"Failed to render react email payload\",\n      route: runtimeOptions?.route,\n    });\n    throw error;\n  }\n}\n\nexport async function resolveReactEmailPayloadFields<\n  TInput extends AthenaAuthReactEmailPayload,\n>(\n  input: TInput,\n  fields: ResolvePayloadFieldsInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): Promise<Omit<TInput, \"react\">> {\n  const { react, ...payloadWithoutReact } = input;\n  if (!react) {\n    return payloadWithoutReact as Omit<TInput, \"react\">;\n  }\n\n  const rendered = await renderAthenaReactEmail(react, options);\n  const payload: AthenaAuthLooseRecord = {\n    ...(payloadWithoutReact as AthenaAuthLooseRecord),\n  };\n\n  payload[fields.htmlField] = rendered.html;\n\n  const currentTextValue = payload[fields.textField];\n  if (\n    rendered.text !== undefined &&\n    (currentTextValue === undefined ||\n      currentTextValue === null ||\n      currentTextValue === \"\")\n  ) {\n    payload[fields.textField] = rendered.text;\n  }\n\n  if (\n    fields.variablesField &&\n    (payload[fields.variablesField] === undefined ||\n      payload[fields.variablesField] === null) &&\n    isRecord(react.props)\n  ) {\n    const derivedVariables = Object.keys(react.props);\n    if (derivedVariables.length > 0) {\n      payload[fields.variablesField] = derivedVariables;\n    }\n  }\n\n  return payload as Omit<TInput, \"react\">;\n}\n","import type { AthenaAuthErrorDetails } from \"./types.ts\";\n\nexport type AthenaSessionErrorCode =\n\t| \"ATHENA_SESSION_UNAUTHENTICATED\"\n\t| \"ATHENA_SESSION_UPSTREAM\"\n\t| \"ATHENA_SESSION_CONFIGURATION\"\n\t| \"ATHENA_SESSION_PROTOCOL\"\n\t| \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\";\n\nexport interface AthenaSessionErrorContext {\n\tcause?: unknown;\n\tcode?: AthenaSessionErrorCode;\n\tdetails?: AthenaAuthErrorDetails | null;\n\tmessage?: string;\n\trequestId?: string;\n\tretryable?: boolean;\n\tstatus?: number;\n}\n\n/**\n * Base error for Next/server session helpers (`require*`, `OrNull` throws).\n */\nexport abstract class AthenaSessionError extends Error {\n\treadonly code: AthenaSessionErrorCode | string;\n\treadonly details?: AthenaAuthErrorDetails | null;\n\treadonly requestId?: string;\n\treadonly retryable: boolean;\n\treadonly status?: number;\n\n\tconstructor(message: string, context: AthenaSessionErrorContext = {}) {\n\t\tsuper(\n\t\t\tmessage,\n\t\t\tcontext.cause !== undefined ? { cause: context.cause } : undefined,\n\t\t);\n\t\tthis.name = new.target.name;\n\t\tthis.code = context.code ?? \"ATHENA_SESSION_UPSTREAM\";\n\t\tthis.status = context.status ?? context.details?.status;\n\t\tthis.requestId = context.requestId ?? context.details?.requestId;\n\t\tthis.details = context.details ?? null;\n\t\tthis.retryable = context.retryable ?? false;\n\t}\n}\n\nexport class AthenaUnauthenticatedError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Not authenticated\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_UNAUTHENTICATED\",\n\t\t\tretryable: false,\n\t\t\tstatus: context.status ?? 401,\n\t\t});\n\t\tthis.name = \"AthenaUnauthenticatedError\";\n\t}\n}\n\nexport class AthenaAuthUpstreamError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Auth upstream failure\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tconst status = context.status ?? context.details?.status;\n\t\tconst retryable =\n\t\t\tcontext.retryable ??\n\t\t\t(status === undefined || status === 0 || status >= 500 || status === 429);\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: context.code ?? \"ATHENA_SESSION_UPSTREAM\",\n\t\t\tretryable,\n\t\t\tstatus,\n\t\t});\n\t\tthis.name = \"AthenaAuthUpstreamError\";\n\t}\n}\n\nexport class AthenaAuthConfigurationError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Session configuration error\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_CONFIGURATION\",\n\t\t\tretryable: false,\n\t\t});\n\t\tthis.name = \"AthenaAuthConfigurationError\";\n\t}\n}\n\nexport class AthenaAuthProtocolError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"Malformed session payload\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_PROTOCOL\",\n\t\t\tretryable: false,\n\t\t\tstatus: context.status ?? context.details?.status ?? 502,\n\t\t});\n\t\tthis.name = \"AthenaAuthProtocolError\";\n\t}\n}\n\nexport class AthenaSessionOrganizationError extends AthenaSessionError {\n\tconstructor(\n\t\tmessage = \"No accessible organization\",\n\t\tcontext: AthenaSessionErrorContext = {},\n\t) {\n\t\tsuper(message, {\n\t\t\t...context,\n\t\t\tcode: \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\",\n\t\t\tretryable: false,\n\t\t});\n\t\tthis.name = \"AthenaSessionOrganizationError\";\n\t}\n}\n\nexport type ToAthenaSessionErrorKind =\n\t| \"unauthenticated\"\n\t| \"upstream\"\n\t| \"configuration\"\n\t| \"protocol\"\n\t| \"no_organization\";\n\n/**\n * Single conversion path from auth error details / context into thrown session errors.\n */\nexport function toAthenaSessionError(\n\tkind: ToAthenaSessionErrorKind,\n\tcontext: AthenaSessionErrorContext = {},\n): AthenaSessionError {\n\tconst message =\n\t\tcontext.message ??\n\t\tcontext.details?.message ??\n\t\t(kind === \"unauthenticated\"\n\t\t\t? \"Not authenticated\"\n\t\t\t: kind === \"configuration\"\n\t\t\t\t? \"Session configuration error\"\n\t\t\t\t: kind === \"protocol\"\n\t\t\t\t\t? \"Malformed session payload\"\n\t\t\t\t\t: kind === \"no_organization\"\n\t\t\t\t\t\t? \"No accessible organization\"\n\t\t\t\t\t\t: \"Auth upstream failure\");\n\n\tswitch (kind) {\n\t\tcase \"unauthenticated\":\n\t\t\treturn new AthenaUnauthenticatedError(message, context);\n\t\tcase \"configuration\":\n\t\t\treturn new AthenaAuthConfigurationError(message, context);\n\t\tcase \"protocol\":\n\t\t\treturn new AthenaAuthProtocolError(message, context);\n\t\tcase \"no_organization\":\n\t\t\treturn new AthenaSessionOrganizationError(message, context);\n\t\tdefault:\n\t\t\treturn new AthenaAuthUpstreamError(message, context);\n\t}\n}\n\nconst ABORT_MESSAGE = /signal is aborted|the operation was aborted/i;\n\n/** True when the value is a browser/Node abort signal rejection. */\nexport function isAbortError(error: unknown): boolean {\n\tif (error == null) {\n\t\treturn false;\n\t}\n\tif (typeof error === \"string\") {\n\t\treturn ABORT_MESSAGE.test(error);\n\t}\n\tif (typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst name = (error as { name?: string }).name;\n\tif (name === \"AbortError\" || name === \"TimeoutError\") {\n\t\treturn true;\n\t}\n\tconst message = (error as { message?: string }).message ?? \"\";\n\treturn ABORT_MESSAGE.test(message);\n}\n","/**\n * Framework-independent auth session snapshot store.\n *\n * Owned by {@link createAthenaAuthSessionController}. Do not treat this store\n * as a second application API.\n *\n * Invariants:\n * - SESSION-INV-01 single-flight refresh\n * - SESSION-INV-02/03/04 last-authoritative wins (monotonic epoch)\n * - SESSION-INV-05 transport error does not clear a valid session\n * - SESSION-INV-06 definitive 401/invalid clears when completeRefresh clearSession\n * - SESSION-INV-07 ordered subscriber notifications\n */\n\nimport { isAbortError } from \"./session-errors.ts\";\n\nexport type AthenaAuthSessionStatus =\n  | \"unknown\"\n  | \"loading\"\n  | \"authenticated\"\n  | \"unauthenticated\"\n  | \"error\";\n\nexport interface AthenaAuthSessionSnapshot<TSession = unknown> {\n  epoch: number;\n  error: unknown | null;\n  session: TSession | null;\n  status: AthenaAuthSessionStatus;\n}\n\nexport type AthenaAuthSessionListener<TSession = unknown> = (\n  snapshot: AthenaAuthSessionSnapshot<TSession>\n) => void;\n\nexport type AthenaInitialAuthState<TSession = unknown> =\n  | { status: \"authenticated\"; session: TSession }\n  | { status: \"unauthenticated\"; session: null };\n\nexport interface AthenaAuthSessionStore<TSession = unknown> {\n  getSnapshot(): AthenaAuthSessionSnapshot<TSession>;\n  /**\n   * Cold-start seed only. No-ops unless status is `unknown`.\n   * Does not start a refresh or merge into a newer mutation.\n   */\n  hydrate(state: AthenaInitialAuthState<TSession>): boolean;\n  invalidate(reason?: \"signOut\" | \"revoke\" | \"manual\"): void;\n  setSession(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  setError(error: unknown): void;\n  beginRefresh(): { epoch: number; skipped: boolean };\n  completeRefresh(\n    epoch: number,\n    result:\n      | { ok: true; session: TSession | null }\n      | { ok: false; error: unknown; clearSession?: boolean }\n  ): void;\n  subscribe(listener: AthenaAuthSessionListener<TSession>): () => void;\n}\n\nexport function createAthenaAuthSessionStore<\n  TSession = unknown,\n>(): AthenaAuthSessionStore<TSession> {\n  let epoch = 0;\n  let inFlightEpoch: number | null = null;\n  let snapshot: AthenaAuthSessionSnapshot<TSession> = {\n    epoch: 0,\n    error: null,\n    session: null,\n    status: \"unknown\",\n  };\n  const listeners = new Set<AthenaAuthSessionListener<TSession>>();\n\n  const emit = () => {\n    for (const listener of [...listeners]) {\n      listener(snapshot);\n    }\n  };\n\n  const commit = (next: AthenaAuthSessionSnapshot<TSession>) => {\n    snapshot = next;\n    emit();\n  };\n\n  return {\n    getSnapshot() {\n      return snapshot;\n    },\n\n    hydrate(state) {\n      if (snapshot.status !== \"unknown\") {\n        return false;\n      }\n      if (state.status === \"authenticated\") {\n        if (state.session == null) {\n          return false;\n        }\n        epoch += 1;\n        commit({\n          epoch,\n          error: null,\n          session: state.session,\n          status: \"authenticated\",\n        });\n        return true;\n      }\n      epoch += 1;\n      commit({\n        epoch,\n        error: null,\n        session: null,\n        status: \"unauthenticated\",\n      });\n      return true;\n    },\n\n    invalidate(reason = \"manual\") {\n      epoch += 1;\n      inFlightEpoch = null;\n      commit({\n        epoch,\n        error: null,\n        session: null,\n        status: reason === \"signOut\" || reason === \"revoke\"\n          ? \"unauthenticated\"\n          : \"unauthenticated\",\n      });\n    },\n\n    setSession(session, status) {\n          // Authoritative mutation cancels in-flight refresh (INV-Q: setActive wins).\n          epoch += 1;\n          inFlightEpoch = null;\n          const nextStatus =\n            status ?? (session == null ? \"unauthenticated\" : \"authenticated\");\n          commit({\n            epoch,\n            error: null,\n            session,\n            status: nextStatus,\n          });\n        },\n\n        setError(error) {\n          if (isAbortError(error)) {\n            if (inFlightEpoch != null) {\n              inFlightEpoch = null;\n              epoch += 1;\n              commit({\n                epoch,\n                error: null,\n                session: snapshot.session,\n                status:\n                  snapshot.session == null ? \"unauthenticated\" : \"authenticated\",\n              });\n            }\n            return;\n          }\n          epoch += 1;\n          // Transport/infrastructure errors must not clear a still-valid session\n          // and must not cancel an in-flight refresh.\n          commit({\n            epoch,\n            error,\n            session: snapshot.session,\n            status: snapshot.session == null ? \"error\" : snapshot.status,\n          });\n        },\n\n        beginRefresh() {\n          if (inFlightEpoch != null) {\n            return { epoch: inFlightEpoch, skipped: true };\n          }\n          epoch += 1;\n          inFlightEpoch = epoch;\n          commit({\n            epoch,\n            error: null,\n            session: snapshot.session,\n            status: \"loading\",\n          });\n          return { epoch, skipped: false };\n        },\n\n        completeRefresh(requestEpoch, result) {\n          // Stale, superseded by mutation, or cancelled refresh — ignore.\n          if (inFlightEpoch !== requestEpoch) {\n            return;\n          }\n          inFlightEpoch = null;\n          epoch += 1;\n          if (result.ok) {\n            commit({\n              epoch,\n              error: null,\n              session: result.session,\n              status: result.session == null ? \"unauthenticated\" : \"authenticated\",\n            });\n            return;\n          }\n          if (isAbortError(result.error)) {\n            commit({\n              epoch,\n              error: null,\n              session: snapshot.session,\n              status:\n                snapshot.session == null ? \"unauthenticated\" : \"authenticated\",\n            });\n            return;\n          }\n          const clear = result.clearSession === true;\n          commit({\n            epoch,\n            error: result.error,\n            session: clear ? null : snapshot.session,\n            status: clear\n              ? \"unauthenticated\"\n              : snapshot.session == null\n                ? \"error\"\n                : snapshot.status,\n          });\n        },\n\n    subscribe(listener) {\n      listeners.add(listener);\n      return () => {\n        listeners.delete(listener);\n      };\n    },\n  };\n}\n","/**\n * Canonical Auth session owner.\n *\n * AthenaAuthClient → AthenaAuthSessionController → SessionStore\n *\n * Mutations (accept / invalidate / refresh completion) go through this\n * controller. React and Auth UI project snapshots only.\n */\n\nimport {\n  type AthenaAuthSessionSnapshot,\n  type AthenaAuthSessionStatus,\n  type AthenaAuthSessionStore,\n  type AthenaInitialAuthState,\n  createAthenaAuthSessionStore,\n} from \"./session-store.ts\";\n\nexport type { AthenaInitialAuthState } from \"./session-store.ts\";\n\nexport type AthenaAuthSessionInvalidateReason = \"signOut\" | \"revoke\" | \"manual\";\n\nexport interface AthenaAuthSessionController<TSession = unknown> {\n  accept(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  beginRefresh(): { epoch: number; skipped: boolean };\n  completeRefresh(\n    epoch: number,\n    result:\n      | { ok: true; session: TSession | null }\n      | { ok: false; error: unknown; clearSession?: boolean }\n  ): void;\n  get(): TSession | null;\n  getSnapshot(): AthenaAuthSessionSnapshot<TSession>;\n  hydrate(state: AthenaInitialAuthState<TSession>): boolean;\n  invalidate(reason?: AthenaAuthSessionInvalidateReason): void;\n  setError(error: unknown): void;\n  /**\n   * Advanced local write. Prefer {@link accept} after transport mutations.\n   * Kept so existing adapters that call `auth.session.setSession` keep working.\n   */\n  setSession(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\n  ): void;\n  shouldInvalidateForRevokedTokens(tokens: readonly string[]): boolean;\n  subscribe(\n    listener: (snapshot: AthenaAuthSessionSnapshot<TSession>) => void\n  ): () => void;\n  /** Underlying store — tests / advanced adapters only. */\n  readonly store: AthenaAuthSessionStore<TSession>;\n}\n\nfunction readSessionToken(session: unknown): string | null {\n  if (!session || typeof session !== \"object\") {\n    return null;\n  }\n  const inner = (session as { session?: { id?: unknown; token?: unknown } })\n    .session;\n  if (!inner || typeof inner !== \"object\") {\n    return null;\n  }\n  if (typeof inner.token === \"string\" && inner.token.trim().length > 0) {\n    return inner.token;\n  }\n  if (typeof inner.id === \"string\" && inner.id.trim().length > 0) {\n    return inner.id;\n  }\n  return null;\n}\n\nexport function createAthenaAuthSessionController<\n  TSession = unknown,\n>(): AthenaAuthSessionController<TSession> {\n  const store = createAthenaAuthSessionStore<TSession>();\n\n  return {\n    store,\n    getSnapshot: () => store.getSnapshot(),\n    get: () => store.getSnapshot().session,\n    subscribe: (listener) => store.subscribe(listener),\n    accept(session, status) {\n      store.setSession(session, status);\n    },\n    hydrate(state) {\n      return store.hydrate(state);\n    },\n    setSession(session, status) {\n      store.setSession(session, status);\n    },\n    invalidate(reason) {\n      store.invalidate(reason);\n    },\n    setError(error) {\n      store.setError(error);\n    },\n    beginRefresh() {\n      return store.beginRefresh();\n    },\n    completeRefresh(epoch, result) {\n      store.completeRefresh(epoch, result);\n    },\n    shouldInvalidateForRevokedTokens(tokens) {\n      const current = readSessionToken(store.getSnapshot().session);\n      if (!current) {\n        return false;\n      }\n      return tokens.some((token) => token === current);\n    },\n  };\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthGetTokenRequest,\n  AthenaAuthResult,\n  AthenaAuthToken,\n} from \"./types.ts\";\n\nexport type { AthenaAuthGetTokenRequest, AthenaAuthToken };\n\nexport type AthenaAuthGetTokenInput = AthenaAuthGetTokenRequest;\n\nexport interface AthenaAuthTokenProviderOptions {\n  audience?: string | string[];\n  /** Refresh this many seconds before `exp`. Default 60. */\n  refreshSkewSeconds?: number;\n}\n\nexport interface AthenaAuthTokenProvider {\n  getToken: (\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<AthenaAuthToken>>;\n  invalidate: () => void;\n}\n\nconst DEFAULT_REFRESH_SKEW_SECONDS = 60;\n\nexport function normalizeTokenAudiences(\n  audience: string | string[] | undefined\n): string[] {\n  if (audience == null) {\n    return [];\n  }\n  return (Array.isArray(audience) ? audience : [audience])\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nexport function tokenNeedsRefresh(\n  token: AthenaAuthToken,\n  nowMs = Date.now(),\n  refreshSkewSeconds = DEFAULT_REFRESH_SKEW_SECONDS\n): boolean {\n  const expiresAt = Date.parse(token.expiresAt);\n  if (!Number.isFinite(expiresAt)) {\n    const exp = decodeJwtExpSeconds(token.token);\n    if (exp == null) {\n      return true;\n    }\n    return exp * 1000 <= nowMs + refreshSkewSeconds * 1000;\n  }\n  return expiresAt <= nowMs + refreshSkewSeconds * 1000;\n}\n\nexport function decodeJwtExpSeconds(token: string): number | null {\n  const parts = token.split(\".\");\n  if (parts.length < 2) {\n    return null;\n  }\n  try {\n    const payload = JSON.parse(\n      decodeJwtSegment(parts[1] ?? \"\")\n    ) as { exp?: unknown };\n    return typeof payload.exp === \"number\" ? payload.exp : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction decodeJwtSegment(segment: string): string {\n  const padded = segment.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const pad = padded.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (padded.length % 4));\n  if (typeof atob === \"function\") {\n    return atob(`${padded}${pad}`);\n  }\n  return Buffer.from(`${padded}${pad}`, \"base64\").toString(\"utf8\");\n}\n\nexport function createAthenaAuthTokenProvider(\n  issue: (\n    input: AthenaAuthGetTokenInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<AthenaAuthToken>>,\n  providerOptions: AthenaAuthTokenProviderOptions = {}\n): AthenaAuthTokenProvider {\n  let cached: AthenaAuthToken | null = null;\n  let inflight: Promise<AthenaAuthResult<AthenaAuthToken>> | null = null;\n  const refreshSkewSeconds =\n    providerOptions.refreshSkewSeconds ?? DEFAULT_REFRESH_SKEW_SECONDS;\n\n  const getToken = async (\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<AthenaAuthToken>> => {\n    if (cached && !tokenNeedsRefresh(cached, Date.now(), refreshSkewSeconds)) {\n      return {\n        data: cached,\n        error: null,\n        ok: true,\n        raw: cached,\n        status: 200,\n      };\n    }\n    if (inflight) {\n      return inflight;\n    }\n    inflight = issue(\n      { audience: providerOptions.audience },\n      options\n    )\n      .then((result) => {\n        cached = result.ok ? result.data : null;\n        return result;\n      })\n      .finally(() => {\n        inflight = null;\n      });\n    return inflight;\n  };\n\n  return {\n    getToken,\n    invalidate() {\n      cached = null;\n      inflight = null;\n    },\n  };\n}","import { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport {\n\tisHtmlErrorPage,\n\tsanitizeAuthErrorMessage,\n\tUPSTREAM_UNAVAILABLE_CODE,\n\tUPSTREAM_UNAVAILABLE_HINT,\n\tUPSTREAM_UNAVAILABLE_MESSAGE,\n} from \"../http/upstream-html-error.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport {\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n} from \"../utils/athena-auth-url.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport {\n\tcreateAthenaAuthCapabilitiesStore,\n\tisSocialCapabilityEnabled,\n} from \"./capabilities.ts\";\nimport { assertAthenaAuthTemplateVariables } from \"./limits.ts\";\nimport { createPasskeyModule } from \"./passkey/client-module.ts\";\nimport { resolveReactEmailPayloadFields } from \"./react-email.ts\";\nimport { createAthenaAuthSessionController } from \"./session-controller.ts\";\nimport { createAthenaAuthTokenProvider } from \"./token-provider.ts\";\nimport type {\n\tAthenaAdminHasPermissionRequest,\n\tAthenaAdminHasPermissionResponse,\n\tAthenaAdminRevokeUserSessionRequest,\n\tAthenaAdminRevokeUserSessionsRequest,\n\tAthenaAdminSuccessResponse,\n\tAthenaApiKeyDeleteAllExpiredResponse,\n\tAthenaAuthBindings,\n\tAthenaAuthCallOptions,\n\tAthenaAuthClientConfig,\n\tAthenaAuthEmailListQuery,\n\tAthenaAuthEmailListResponse,\n\tAthenaAuthEndpointPath,\n\tAthenaAuthErrorCode,\n\tAthenaAuthErrorDetails,\n\tAthenaAuthFetchCompatibleInput,\n\tAthenaAuthGenericInput,\n\tAthenaAuthGenericQueryInput,\n\tAthenaAuthGetTokenRequest,\n\tAthenaAuthGetUserResponse,\n\tAthenaAuthGuardResult,\n\tAthenaAuthHealthResponse,\n\tAthenaAuthLinkedAccount,\n\tAthenaAuthMethod,\n\tAthenaAuthOkResponse,\n\tAthenaAuthOrganization,\n\tAthenaAuthOrganizationBindings,\n\tAthenaAuthOrganizationCheckSlugRequest,\n\tAthenaAuthOrganizationCreateRequest,\n\tAthenaAuthOrganizationDeleteRequest,\n\tAthenaAuthOrganizationGetFullQuery,\n\tAthenaAuthOrganizationGetInvitationQuery,\n\tAthenaAuthOrganizationInvitation,\n\tAthenaAuthOrganizationInvitationActionRequest,\n\tAthenaAuthOrganizationInviteMemberRequest,\n\tAthenaAuthOrganizationLeaveRequest,\n\tAthenaAuthOrganizationListInvitationsQuery,\n\tAthenaAuthOrganizationListMembersQuery,\n\tAthenaAuthOrganizationListUserInvitationsQuery,\n\tAthenaAuthOrganizationMember,\n\tAthenaAuthOrganizationRemoveMemberRequest,\n\tAthenaAuthOrganizationSetActiveRequest,\n\tAthenaAuthOrganizationUpdateMemberRoleRequest,\n\tAthenaAuthOrganizationUpdateRequest,\n\tAthenaAuthQueryValue,\n\tAthenaAuthReactEmailRenderInput,\n\tAthenaAuthRequestInput,\n\tAthenaAuthResult,\n\tAthenaAuthSession,\n\tAthenaAuthSessionResponse,\n\tAthenaAuthSignInResponse,\n\tAthenaAuthSignOutResponse,\n\tAthenaAuthSocialRedirectResponse,\n\tAthenaAuthStatusResponse,\n\tAthenaAuthToken,\n\tAthenaAuthUser,\n\tAthenaChangeEmailRequest,\n\tAthenaChangePasswordRequest,\n\tAthenaDeleteUserCallbackRequest,\n\tAthenaDeleteUserRequest,\n\tAthenaDeleteUserResponse,\n\tAthenaEmailSignInRequest,\n\tAthenaEmailSignUpRequest,\n\tAthenaForgetPasswordRequest,\n\tAthenaLinkSocialRequest,\n\tAthenaOAuthAccountTokenRequest,\n\tAthenaOAuthTokenBundle,\n\tAthenaResetPasswordRequest,\n\tAthenaSendVerificationEmailRequest,\n\tAthenaSocialSignInRequest,\n\tAthenaTwoFactorGenerateBackupCodesRequest,\n\tAthenaTwoFactorGenerateBackupCodesResponse,\n\tAthenaUnlinkAccountRequest,\n\tAthenaUpdateUserRequest,\n\tAthenaUsernameSignInRequest,\n\tAthenaVerifyEmailRequest,\n\tInternalAthenaAuthModule,\n} from \"./types.ts\";\n\nconst DEFAULT_AUTH_BASE_URL = \"http://localhost:3001/api/auth\";\nconst SDK_NAME = \"@xylex-group/athena-auth\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\ninterface AuthRequestContext {\n\tendpoint: AthenaAuthEndpointPath;\n\tmethod: AthenaAuthMethod;\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n\tresolveCallOptions?: () =>\n\t\t| AthenaAuthCallOptions\n\t\t| undefined\n\t\t| Promise<AthenaAuthCallOptions | undefined>;\n}\n\nconst ATHENA_AUTH_BIND_BASE_URL = Symbol.for(\n\t\"@xylex-group/athena.auth.bindBaseUrl\",\n);\n\ntype AuthClientWithBindableBaseUrl = {\n\t[ATHENA_AUTH_BIND_BASE_URL]?: (baseUrl: string) => void;\n};\n\n/**\n * Update the Auth module request base after Next discovery resolves.\n * No-ops when the surface was not created by {@link createAuthModule}.\n */\nexport function bindAthenaAuthClientBaseUrl(\n\tauth: object,\n\tbaseUrl: string,\n): void {\n\tconst bind = (auth as AuthClientWithBindableBaseUrl)[\n\t\tATHENA_AUTH_BIND_BASE_URL\n\t];\n\tbind?.(baseUrl);\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n\tcode: AthenaAuthErrorCode;\n\tstatus: number;\n\tmessage: string;\n\trequestId?: string;\n\thint?: string;\n\tcause?: string;\n};\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n\treturn (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction looksLikeUnsafeAuthTransportBody(value: string): boolean {\n\tconst trimmed = value.trimStart();\n\treturn (\n\t\t/^<!doctype\\s+html/i.test(trimmed) ||\n\t\t/^<\\?xml/i.test(trimmed) ||\n\t\t/^<html(?:\\s|>)/i.test(trimmed) ||\n\t\t/<(?:head|body|script|style)(?:\\s|>)/i.test(value) ||\n\t\tvalue.length > 2000\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n\tif (isRecord(payload)) {\n\t\tconst messageCandidates = [payload.error, payload.message, payload.details];\n\t\tfor (const candidate of messageCandidates) {\n\t\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\t\tconst text = candidate.trim();\n\t\t\t\tif (!looksLikeUnsafeAuthTransportBody(text)) {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof payload === \"string\" && payload.trim().length > 0) {\n\t\tconst text = payload.trim();\n\t\tif (looksLikeUnsafeAuthTransportBody(text)) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn sanitizeAuthErrorMessage(text, fallback);\n\t}\n\n\treturn fallback;\n}\n\nfunction resolveErrorCode(payload: unknown): AthenaAuthErrorCode {\n\tif (!isRecord(payload)) {\n\t\treturn \"HTTP_ERROR\";\n\t}\n\tif (typeof payload.code === \"string\" && payload.code.trim()) {\n\t\treturn payload.code.trim();\n\t}\n\tconst nested = isRecord(payload.error) ? payload.error : undefined;\n\tif (nested && typeof nested.code === \"string\" && nested.code.trim()) {\n\t\treturn nested.code.trim();\n\t}\n\treturn \"HTTP_ERROR\";\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n\treturn {\n\t\tcause: input.cause,\n\t\tcode: input.code,\n\t\tendpoint: input.endpoint,\n\t\thint: input.hint,\n\t\tmessage: input.message,\n\t\tmethod: input.method,\n\t\trequestId: input.requestId,\n\t\tstatus: input.status,\n\t};\n}\n\nfunction mergeCallOptions(\n\tbase?: AthenaAuthCallOptions,\n\toverride?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n\tif (!(base || override)) {\n\t\treturn;\n\t}\n\treturn {\n\t\t...base,\n\t\t...override,\n\t\theaders: {\n\t\t\t...(base?.headers ?? {}),\n\t\t\t...(override?.headers ?? {}),\n\t\t},\n\t};\n}\n\nfunction copyDefinedField(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n\ttargetKey: string,\n\tsourceKey: string,\n): void {\n\tif (!(sourceKey in source)) {\n\t\treturn;\n\t}\n\tconst value = source[sourceKey];\n\tif (value !== undefined) {\n\t\ttarget[targetKey] = value;\n\t}\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n\tif (typeof value === \"string\" || value === null) {\n\t\treturn value;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalizeEmailTemplateAttachmentsValue(item));\n\t}\n\n\tif (typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\n\tconst attachment = { ...(value as Record<string, unknown>) };\n\tcopyDefinedField(attachment, attachment, \"file_url\", \"fileUrl\");\n\tattachment.fileUrl = undefined;\n\treturn attachment;\n}\n\nfunction normalizeAdminEmailTemplatePayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized = { ...payload };\n\n\tcopyDefinedField(normalized, payload, \"template_key\", \"templateKey\");\n\tcopyDefinedField(normalized, payload, \"event_type\", \"eventType\");\n\tcopyDefinedField(normalized, payload, \"subject_template\", \"subjectTemplate\");\n\tcopyDefinedField(normalized, payload, \"text_template\", \"textTemplate\");\n\tcopyDefinedField(normalized, payload, \"html_template\", \"htmlTemplate\");\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"variable_bindings\",\n\t\t\"variableBindings\",\n\t);\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"attachment_failure_mode\",\n\t\t\"attachmentFailureMode\",\n\t);\n\tcopyDefinedField(normalized, payload, \"is_active\", \"isActive\");\n\n\tif (Object.hasOwn(payload, \"attachments\")) {\n\t\tnormalized.attachments = normalizeEmailTemplateAttachmentsValue(\n\t\t\tpayload.attachments,\n\t\t);\n\t}\n\n\tnormalized.templateKey = undefined;\n\tnormalized.eventType = undefined;\n\tnormalized.subjectTemplate = undefined;\n\tnormalized.textTemplate = undefined;\n\tnormalized.htmlTemplate = undefined;\n\tnormalized.variableBindings = undefined;\n\tnormalized.attachmentFailureMode = undefined;\n\tnormalized.isActive = undefined;\n\n\treturn normalized;\n}\n\nfunction toReactEmailTemplateCompatibilityInput<\n\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\treact?: AthenaAuthReactEmailRenderInput;\n\t},\n>(input: TInput): TInput {\n\tconst payload = input as Record<string, unknown>;\n\tconst compatibility = { ...payload };\n\n\tcopyDefinedField(compatibility, payload, \"templateKey\", \"template_key\");\n\tcopyDefinedField(compatibility, payload, \"eventType\", \"event_type\");\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"subjectTemplate\",\n\t\t\"subject_template\",\n\t);\n\tcopyDefinedField(compatibility, payload, \"textTemplate\", \"text_template\");\n\tcopyDefinedField(compatibility, payload, \"htmlTemplate\", \"html_template\");\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"variableBindings\",\n\t\t\"variable_bindings\",\n\t);\n\tcopyDefinedField(\n\t\tcompatibility,\n\t\tpayload,\n\t\t\"attachmentFailureMode\",\n\t\t\"attachment_failure_mode\",\n\t);\n\tcopyDefinedField(compatibility, payload, \"isActive\", \"is_active\");\n\n\treturn compatibility as unknown as TInput;\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst normalized = { ...payload };\n\n\tcopyDefinedField(normalized, payload, \"template_id\", \"templateId\");\n\tcopyDefinedField(normalized, payload, \"recipient_email\", \"recipientEmail\");\n\tcopyDefinedField(normalized, payload, \"render_variables\", \"renderVariables\");\n\tcopyDefinedField(normalized, payload, \"user_id\", \"userId\");\n\tcopyDefinedField(normalized, payload, \"organization_id\", \"organizationId\");\n\tcopyDefinedField(normalized, payload, \"session_token\", \"sessionToken\");\n\tcopyDefinedField(\n\t\tnormalized,\n\t\tpayload,\n\t\t\"attachment_failure_mode\",\n\t\t\"attachmentFailureMode\",\n\t);\n\n\tif (Object.hasOwn(payload, \"attachments\")) {\n\t\tnormalized.attachments = normalizeEmailTemplateAttachmentsValue(\n\t\t\tpayload.attachments,\n\t\t);\n\t}\n\n\tnormalized.templateId = undefined;\n\tnormalized.recipientEmail = undefined;\n\tnormalized.renderVariables = undefined;\n\tnormalized.userId = undefined;\n\tnormalized.organizationId = undefined;\n\tnormalized.sessionToken = undefined;\n\tnormalized.attachmentFailureMode = undefined;\n\n\treturn normalized;\n}\n\nfunction toSessionGuardFailure(\n\tsessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n\tif (sessionResult.status === 401 || sessionResult.data === null) {\n\t\treturn {\n\t\t\terror: sessionResult.error ?? \"Unauthorized\",\n\t\t\tok: false,\n\t\t\treason: \"unauthorized\",\n\t\t\tsessionResult,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: sessionResult.error ?? \"Failed to resolve current session\",\n\t\tok: false,\n\t\treason: \"upstream_error\",\n\t\tsessionResult,\n\t\tstatus: sessionResult.status,\n\t};\n}\n\nfunction toPermissionGuardFailure(\n\tpermissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n\tsessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n\tif (permissionResult.status === 401) {\n\t\treturn {\n\t\t\terror: permissionResult.error ?? \"Unauthorized\",\n\t\t\tok: false,\n\t\t\tpermissionResult,\n\t\t\treason: \"unauthorized\",\n\t\t\tsessionResult,\n\t\t\tstatus: 401,\n\t\t};\n\t}\n\n\tif (permissionResult.status === 403) {\n\t\treturn {\n\t\t\terror: permissionResult.error ?? \"Forbidden\",\n\t\t\tok: false,\n\t\t\tpermissionResult,\n\t\t\treason: \"forbidden\",\n\t\t\tsessionResult,\n\t\t\tstatus: 403,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: permissionResult.error ?? \"Failed to resolve permission check\",\n\t\tok: false,\n\t\tpermissionResult,\n\t\treason: \"upstream_error\",\n\t\tsessionResult,\n\t\tstatus: permissionResult.status,\n\t};\n}\n\nfunction extractQueryFromInput(\n\tinput?: AthenaAuthFetchCompatibleInput,\n): Record<string, AthenaAuthQueryValue> | undefined {\n\tconst { payload } = extractFetchOptions(input);\n\tconst query = (\n\t\tpayload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n\t)?.query;\n\tif (!query || typeof query !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn query;\n}\n\nfunction withFreshSessionLookupQuery(\n\tinput?: AthenaAuthFetchCompatibleInput,\n): Record<string, AthenaAuthQueryValue> {\n\tconst query = extractQueryFromInput(input) ?? {};\n\tconst explicit = query[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n\tif (explicit === false || explicit === \"false\") {\n\t\tconst next = { ...query };\n\t\tdelete next[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n\t\treturn next;\n\t}\n\treturn {\n\t\t...query,\n\t\t[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM]:\n\t\t\tATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n\t};\n}\n\nfunction extractFetchOptions<\n\tT extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n\tif (!input) {\n\t\treturn {\n\t\t\tfetchOptions: undefined,\n\t\t\tpayload: undefined,\n\t\t};\n\t}\n\n\tconst { fetchOptions, ...rest } = input;\n\tconst hasPayloadKeys = Object.keys(rest).length > 0;\n\treturn {\n\t\tfetchOptions,\n\t\tpayload: hasPayloadKeys ? rest : undefined,\n\t};\n}\n\nfunction buildHeaders(\n\tconfig: AthenaAuthClientConfig,\n\toptions?: AthenaAuthCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\"auth\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction appendQueryParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: AthenaAuthQueryValue,\n) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (Array.isArray(value)) {\n\t\tvalue.forEach((item) => {\n\t\t\tsearchParams.append(key, String(item));\n\t\t});\n\t\treturn;\n\t}\n\tsearchParams.append(key, String(value));\n}\n\nfunction buildRequestUrl(\n\tbaseUrl: string,\n\tendpoint: AthenaAuthEndpointPath,\n\tquery?: Record<string, AthenaAuthQueryValue>,\n) {\n\tconst url = `${baseUrl}${endpoint}`;\n\tif (!query || Object.keys(query).length === 0) {\n\t\treturn url;\n\t}\n\tconst searchParams = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tappendQueryParam(searchParams, key, value);\n\t}\n\tconst queryText = searchParams.toString();\n\treturn queryText ? `${url}?${queryText}` : url;\n}\n\nfunction inferDefaultMethod(\n\tendpoint: AthenaAuthEndpointPath,\n): AthenaAuthMethod {\n\tif (endpoint.startsWith(\"/reset-password/\")) {\n\t\treturn \"GET\";\n\t}\n\tif (\n\t\tendpoint.startsWith(\"/authorization/roles/\") &&\n\t\t!endpoint.endsWith(\"/clone\") &&\n\t\t!endpoint.endsWith(\"/rights\")\n\t) {\n\t\treturn \"GET\";\n\t}\n\n\tswitch (endpoint) {\n\t\tcase \"/get-session\":\n\t\tcase \"/admin/get-user\":\n\t\tcase \"/list-sessions\":\n\t\tcase \"/verify-email\":\n\t\tcase \"/change-email/verify\":\n\t\tcase \"/delete-user/verify\":\n\t\tcase \"/email-list\":\n\t\tcase \"/email/list\":\n\t\tcase \"/delete-user/callback\":\n\t\tcase \"/list-accounts\":\n\t\tcase \"/passkey/generate-register-options\":\n\t\tcase \"/passkey/list-user-passkeys\":\n\t\tcase \"/.well-known/webauthn\":\n\t\tcase \"/.well-known/jwks.json\":\n\t\tcase \"/.well-known/openid-configuration\":\n\t\tcase \"/admin/list-users\":\n\t\tcase \"/admin/athena-client/list\":\n\t\tcase \"/admin/audit-log/list\":\n\t\tcase \"/admin/email/get\":\n\t\tcase \"/admin/email-failure/list\":\n\t\tcase \"/admin/email-failure/get\":\n\t\tcase \"/admin/email-template/get\":\n\t\tcase \"/admin/email-template/list\":\n\t\tcase \"/admin/email/list\":\n\t\tcase \"/api-key/get\":\n\t\tcase \"/api-key/list\":\n\t\tcase \"/organization/get-full-organization\":\n\t\tcase \"/organization/list\":\n\t\tcase \"/organization/get-invitation\":\n\t\tcase \"/organization/list-invitations\":\n\t\tcase \"/organization/list-user-invitations\":\n\t\tcase \"/organization/list-members\":\n\t\tcase \"/organization/get-active-member\":\n\t\tcase \"/authorization/snapshot\":\n\t\tcase \"/authorization/rights\":\n\t\tcase \"/authorization/roles\":\n\t\tcase \"/authorization/audit\":\n\t\tcase \"/health\":\n\t\tcase \"/ok\":\n\t\tcase \"/error\":\n\t\t\treturn \"GET\";\n\t\tdefault:\n\t\t\treturn \"POST\";\n\t}\n}\n\nasync function callAuthEndpoint<T>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tbody?: unknown,\n\tquery?: Record<string, AthenaAuthQueryValue>,\n\toptions?: AthenaAuthCallOptions,\n): Promise<AthenaAuthResult<T>> {\n\tconst baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl);\n\tconst url = buildRequestUrl(baseUrl, context.endpoint, query);\n\tconst headers = buildHeaders(config, options);\n\tconst credentials = options?.credentials ?? config.credentials ?? \"include\";\n\tconst requestInit: RequestInit = {\n\t\tcache: \"no-store\",\n\t\tcredentials,\n\t\theaders,\n\t\tmethod: context.method,\n\t\tsignal: options?.signal,\n\t};\n\n\tif (context.method !== \"GET\") {\n\t\trequestInit.body = JSON.stringify(body ?? {});\n\t}\n\n\tconst fetcher = config.fetch ?? globalThis.fetch;\n\tif (!fetcher) {\n\t\tconst details = toErrorDetails({\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint: context.endpoint,\n\t\t\thint: \"Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })\",\n\t\t\tmessage: \"No fetch implementation available for auth client\",\n\t\t\tmethod: context.method,\n\t\t\tstatus: 0,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: details.message,\n\t\t\terrorDetails: details,\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t};\n\t}\n\n\ttry {\n\t\tconst response = await fetcher(url, requestInit);\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (isHtmlErrorPage(rawText ?? \"\", response.headers.get(\"content-type\"))) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcause: (rawText ?? \"\").slice(0, 200),\n\t\t\t\tcode: UPSTREAM_UNAVAILABLE_CODE,\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\thint: UPSTREAM_UNAVAILABLE_HINT,\n\t\t\t\tmessage: UPSTREAM_UNAVAILABLE_MESSAGE,\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status || 503,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: null,\n\t\t\t\tstatus: details.status,\n\t\t\t};\n\t\t}\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\thint: \"Verify the auth endpoint response body is valid JSON.\",\n\t\t\t\tmessage: \"Auth server returned malformed JSON\",\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\n\t\tif (!response.ok) {\n\t\t\tconst details = toErrorDetails({\n\t\t\t\tcode: resolveErrorCode(parsed),\n\t\t\t\tendpoint: context.endpoint,\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod: context.method,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: details.message,\n\t\t\t\terrorDetails: details,\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tdata: (parsed as T) ?? null,\n\t\t\terror: null,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\tstatus: response.status,\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst details = toErrorDetails({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\tendpoint: context.endpoint,\n\t\t\thint: \"Check auth server URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n\t\t\tmethod: context.method,\n\t\t\tstatus: 0,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: details.message,\n\t\t\terrorDetails: details,\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t};\n\t}\n}\n\nfunction executePostWithCompatibleInput<\n\tTPayload extends AthenaAuthFetchCompatibleInput,\n\tTResult,\n>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput: TPayload,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tpayload ?? {},\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executePostWithOptionalInput<TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\t{},\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tundefined,\n\t\tundefined,\n\t\tmergedOptions,\n\t);\n}\n\nfunction executeGetWithQueryCompatibleInput<TQuery extends object, TResult>(\n\tconfig: AthenaAuthClientConfig,\n\tcontext: AuthRequestContext,\n\tinput?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n\toptions?: AthenaAuthCallOptions,\n) {\n\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\tconst query = (\n\t\tpayload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n\t)?.query;\n\treturn callAuthEndpoint<TResult>(\n\t\tconfig,\n\t\tcontext,\n\t\tundefined,\n\t\tquery,\n\t\tmergedOptions,\n\t);\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n\tconfig: AthenaAuthClientConfig = {},\n\truntimeOptions: InternalAuthModuleRuntimeOptions = {},\n): InternalAthenaAuthModule {\n\tconst normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);\n\tconst resolvedConfig: AthenaAuthClientConfig = {\n\t\t...config,\n\t\tbaseUrl: normalizedBaseUrl,\n\t};\n\n\tconst request = async <T = unknown>(\n\t\tinput: AthenaAuthRequestInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<T>> => {\n\t\tconst method =\n\t\t\tinput.method ??\n\t\t\t(input.body === undefined ? inferDefaultMethod(input.endpoint) : \"POST\");\n\t\tconst contextOptions = await runtimeOptions.resolveCallOptions?.();\n\t\tconst mergedOptions = mergeCallOptions(\n\t\t\tmergeCallOptions(contextOptions, input.fetchOptions),\n\t\t\toptions,\n\t\t);\n\t\treturn await callAuthEndpoint<T>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: input.endpoint, method },\n\t\t\tinput.body,\n\t\t\tinput.query,\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst postGeneric = <T = unknown>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & object,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tbody: payload ?? {},\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"POST\",\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst getGeneric = <T = unknown>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { fetchOptions } = extractFetchOptions(input);\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery:\n\t\t\t\t\tendpoint === \"/get-session\"\n\t\t\t\t\t\t? withFreshSessionLookupQuery(input)\n\t\t\t\t\t\t: extractQueryFromInput(input),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst getWithQuery = <\n\t\tT = unknown,\n\t\tTQuery extends object = Record<string, AthenaAuthQueryValue>,\n\t>(\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tinput?: AthenaAuthFetchCompatibleInput & {\n\t\t\tquery?: TQuery;\n\t\t},\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst query = (payload as { query?: TQuery } | undefined)?.query as\n\t\t\t| Record<string, AthenaAuthQueryValue>\n\t\t\t| undefined;\n\t\treturn request<T>(\n\t\t\t{\n\t\t\t\tendpoint,\n\t\t\t\tfetchOptions,\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery,\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n\t\t...resolvedConfig.reactEmail,\n\t\troute,\n\t});\n\n\tconst resolveAdminEmailPayload = <\n\t\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\t\treact?: AthenaAuthReactEmailRenderInput;\n\t\t},\n\t>(\n\t\troute: \"/admin/email/create\" | \"/admin/email/update\",\n\t\tinput: TInput,\n\t) =>\n\t\tresolveReactEmailPayloadFields(\n\t\t\tinput,\n\t\t\t{\n\t\t\t\thtmlField: \"htmlBody\",\n\t\t\t\ttextField: \"textBody\",\n\t\t\t},\n\t\t\twithReactEmailRoute(route),\n\t\t);\n\n\tconst resolveAdminEmailTemplatePayload = <\n\t\tTInput extends AthenaAuthFetchCompatibleInput & {\n\t\t\treact?: AthenaAuthReactEmailRenderInput;\n\t\t},\n\t>(\n\t\troute: \"/admin/email-template/create\" | \"/admin/email-template/update\",\n\t\tinput: TInput,\n\t) =>\n\t\tresolveReactEmailPayloadFields(\n\t\t\ttoReactEmailTemplateCompatibilityInput(input),\n\t\t\t{\n\t\t\t\thtmlField: \"htmlTemplate\",\n\t\t\t\ttextField: \"textTemplate\",\n\t\t\t\tvariablesField: \"variables\",\n\t\t\t},\n\t\t\twithReactEmailRoute(route),\n\t\t).then((payload) => {\n\t\t\tconst normalizedPayload = normalizeAdminEmailTemplatePayload(\n\t\t\t\tpayload as Record<string, unknown>,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t\"variables\" in payload &&\n\t\t\t\tpayload.variables !== undefined &&\n\t\t\t\tpayload.variables !== null\n\t\t\t) {\n\t\t\t\tassertAthenaAuthTemplateVariables(\n\t\t\t\t\tpayload.variables,\n\t\t\t\t\t`${route} variables`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn normalizedPayload;\n\t\t});\n\n\tconst requireSession: AthenaAuthBindings[\"requireSession\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst sessionInput = input?.fetchOptions\n\t\t\t? { fetchOptions: input.fetchOptions }\n\t\t\t: undefined;\n\t\tconst sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n\t\t\t\"/get-session\",\n\t\t\tsessionInput,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionResult.ok || sessionResult.data === null) {\n\t\t\treturn toSessionGuardFailure(sessionResult);\n\t\t}\n\n\t\treturn {\n\t\t\tok: true,\n\t\t\tsession: sessionResult.data,\n\t\t};\n\t};\n\n\tconst getUser: AthenaAuthBindings[\"getUser\"] = async (input, options) => {\n\t\tconst sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n\t\t\t\"/get-session\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionResult.ok) {\n\t\t\treturn {\n\t\t\t\t...sessionResult,\n\t\t\t\tdata: null,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t...sessionResult,\n\t\t\tdata: {\n\t\t\t\tuser: sessionResult.data?.user ?? null,\n\t\t\t} satisfies AthenaAuthGetUserResponse,\n\t\t};\n\t};\n\n\tconst requirePermission = async (\n\t\tendpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n\t\tinput: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthGuardResult> => {\n\t\tconst sessionGuard = await requireSession(\n\t\t\tinput?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n\t\t\toptions,\n\t\t);\n\n\t\tif (!sessionGuard.ok) {\n\t\t\treturn sessionGuard;\n\t\t}\n\n\t\tconst permissionResult =\n\t\t\tawait postGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\tendpoint,\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\n\t\tif (!permissionResult.ok) {\n\t\t\treturn toPermissionGuardFailure(permissionResult, {\n\t\t\t\tdata: sessionGuard.session,\n\t\t\t\terror: null,\n\t\t\t\terrorDetails: null,\n\t\t\t\tok: true,\n\t\t\t\traw: sessionGuard.session,\n\t\t\t\tstatus: 200,\n\t\t\t});\n\t\t}\n\n\t\tif (!permissionResult.data?.success) {\n\t\t\treturn {\n\t\t\t\terror: permissionResult.data?.error ?? \"Forbidden\",\n\t\t\t\tok: false,\n\t\t\t\tpermissionResult,\n\t\t\t\treason: \"forbidden\",\n\t\t\t\tsessionResult: {\n\t\t\t\t\tdata: sessionGuard.session,\n\t\t\t\t\terror: null,\n\t\t\t\t\terrorDetails: null,\n\t\t\t\t\tok: true,\n\t\t\t\t\traw: sessionGuard.session,\n\t\t\t\t\tstatus: 200,\n\t\t\t\t},\n\t\t\t\tstatus: 403,\n\t\t\t};\n\t\t}\n\n\t\treturn sessionGuard;\n\t};\n\n\tconst listUserEmailsWithFallback: AthenaAuthBindings[\"user\"][\"email\"][\"list\"] =\n\t\tasync (input, options) => {\n\t\t\tconst primary = await getWithQuery<\n\t\t\t\tAthenaAuthEmailListResponse,\n\t\t\t\tAthenaAuthEmailListQuery\n\t\t\t>(\"/email/list\", input, options);\n\t\t\tif (\n\t\t\t\tprimary.ok ||\n\t\t\t\tprimary.status !== 404 ||\n\t\t\t\tprimary.errorDetails?.code !== \"HTTP_ERROR\"\n\t\t\t) {\n\t\t\t\treturn primary;\n\t\t\t}\n\t\t\treturn getWithQuery<\n\t\t\t\tAthenaAuthEmailListResponse,\n\t\t\t\tAthenaAuthEmailListQuery\n\t\t\t>(\"/email-list\", input, options);\n\t\t};\n\n\tconst healthWithFallback: AthenaAuthBindings[\"health\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst primary = await getGeneric<AthenaAuthHealthResponse>(\n\t\t\t\"/health\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t\tif (\n\t\t\tprimary.ok ||\n\t\t\tprimary.status !== 404 ||\n\t\t\tprimary.errorDetails?.code !== \"HTTP_ERROR\"\n\t\t) {\n\t\t\treturn primary;\n\t\t}\n\n\t\tconst fallback = await getGeneric<AthenaAuthOkResponse>(\n\t\t\t\"/ok\",\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t\tif (!fallback.ok) {\n\t\t\treturn {\n\t\t\t\t...fallback,\n\t\t\t\tdata: null,\n\t\t\t};\n\t\t}\n\n\t\tconst fallbackStatus =\n\t\t\tisRecord(fallback.data) && typeof fallback.data.ok === \"boolean\"\n\t\t\t\t? fallback.data.ok\n\t\t\t\t\t? \"ok\"\n\t\t\t\t\t: \"error\"\n\t\t\t\t: \"ok\";\n\n\t\treturn {\n\t\t\t...fallback,\n\t\t\tdata: {\n\t\t\t\tstatus: fallbackStatus,\n\t\t\t},\n\t\t};\n\t};\n\n\tconst sessionStore =\n\t\tcreateAthenaAuthSessionController<AthenaAuthSessionResponse>();\n\tconst capabilitiesStore = createAthenaAuthCapabilitiesStore(\n\t\tconfig.capabilities,\n\t);\n\n\tconst capabilityDisabled = (\n\t\tfeature: string,\n\t\tendpoint: AthenaAuthEndpointPath,\n\t\tmethod: AthenaAuthMethod = \"POST\",\n\t): AthenaAuthResult<never> => ({\n\t\tdata: null,\n\t\terror: `${feature} is not enabled on this Athena Auth runtime`,\n\t\terrorDetails: {\n\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\tendpoint,\n\t\t\thint: feature,\n\t\t\tmessage: `${feature} is not enabled on this Athena Auth runtime`,\n\t\t\tmethod,\n\t\t\tstatus: 501,\n\t\t},\n\t\tok: false,\n\t\traw: {\n\t\t\terror: {\n\t\t\t\tcode: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n\t\t\t\tfeature,\n\t\t\t\tstatus: 501,\n\t\t\t},\n\t\t},\n\t\tstatus: 501,\n\t});\n\n\tconst denySocial = (\n\t\tendpoint: AthenaAuthEndpointPath,\n\t): AthenaAuthResult<never> | null => {\n\t\tif (isSocialCapabilityEnabled(capabilitiesStore.getSnapshot())) {\n\t\t\treturn null;\n\t\t}\n\t\tif (capabilitiesStore.getSnapshot().status !== \"known\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn capabilityDisabled(\"social\", endpoint);\n\t};\n\n\tconst gateCapability = <T>(\n\t\tdenied: AthenaAuthResult<never> | null,\n\t\trun: () => Promise<AthenaAuthResult<T>>,\n\t): Promise<AthenaAuthResult<T>> =>\n\t\tdenied ? Promise.resolve(denied as AthenaAuthResult<T>) : run();\n\n\tconst isSessionResponse = (\n\t\tvalue: unknown,\n\t): value is AthenaAuthSessionResponse => {\n\t\tif (!value || typeof value !== \"object\") {\n\t\t\treturn false;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\tconst session = record.session;\n\t\tconst user = record.user;\n\t\treturn (\n\t\t\t!!session &&\n\t\t\ttypeof session === \"object\" &&\n\t\t\ttypeof (session as { id?: unknown }).id === \"string\" &&\n\t\t\t!!user &&\n\t\t\ttypeof user === \"object\" &&\n\t\t\ttypeof (user as { id?: unknown }).id === \"string\"\n\t\t);\n\t};\n\n\tconst sessionFromSignIn = (\n\t\tvalue: unknown,\n\t): AthenaAuthSessionResponse | null => {\n\t\tif (!value || typeof value !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst record = value as Record<string, unknown>;\n\t\tif (record.redirect === true) {\n\t\t\treturn null;\n\t\t}\n\t\tconst user = record.user;\n\t\tconst token = record.token;\n\t\tif (\n\t\t\t!user ||\n\t\t\ttypeof user !== \"object\" ||\n\t\t\ttypeof (user as { id?: unknown }).id !== \"string\"\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst userId = (user as { id: string }).id;\n\t\tconst sessionToken = typeof token === \"string\" ? token : undefined;\n\t\treturn {\n\t\t\tuser: user as AthenaAuthUser,\n\t\t\tsession: {\n\t\t\t\tid: sessionToken ?? `local:${userId}`,\n\t\t\t\ttoken: sessionToken,\n\t\t\t\tuserId,\n\t\t\t},\n\t\t};\n\t};\n\n\tconst fetchSessionResult = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => getGeneric<AthenaAuthSessionResponse>(\"/get-session\", input, options);\n\n\tconst refreshSessionStore = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { epoch, skipped } = sessionStore.beginRefresh();\n\t\tif (skipped) {\n\t\t\treturn sessionStore.getSnapshot();\n\t\t}\n\t\ttry {\n\t\t\tconst result = await fetchSessionResult(input, options);\n\t\t\tif (result.ok) {\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: true,\n\t\t\t\t\tsession: result.data ?? null,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst status = typeof result.status === \"number\" ? result.status : 0;\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: result.error ?? result,\n\t\t\t\t\tclearSession: status === 401,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\tok: false,\n\t\t\t\terror,\n\t\t\t\tclearSession: false,\n\t\t\t});\n\t\t}\n\t\treturn sessionStore.getSnapshot();\n\t};\n\n\t/**\n\t * After auth mutations, keep SSOT store current without bespoke app bridges.\n\t * Prefer embedded session payloads; otherwise refresh once.\n\t */\n\tconst applyAuthMutationToSessionStore = async <T>(\n\t\tresult: AthenaAuthResult<T>,\n\t\toptions?: { refreshIfMissing?: boolean },\n\t): Promise<AthenaAuthResult<T>> => {\n\t\tif (!result.ok) {\n\t\t\treturn result;\n\t\t}\n\t\tif (isSessionResponse(result.data)) {\n\t\t\tsessionStore.accept(result.data);\n\t\t\treturn result;\n\t\t}\n\t\tconst fromSignIn = sessionFromSignIn(result.data);\n\t\tif (fromSignIn) {\n\t\t\tsessionStore.accept(fromSignIn);\n\t\t\treturn result;\n\t\t}\n\t\tif (options?.refreshIfMissing !== false) {\n\t\t\tawait refreshSessionStore();\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst patchActiveOrganization = (\n\t\torganizationId: string | null | undefined,\n\t) => {\n\t\tconst current = sessionStore.getSnapshot().session;\n\t\tif (!current?.session) {\n\t\t\treturn false;\n\t\t}\n\t\tsessionStore.accept({\n\t\t\t...current,\n\t\t\tsession: {\n\t\t\t\t...current.session,\n\t\t\t\tactiveOrganizationId:\n\t\t\t\t\torganizationId === undefined ? null : organizationId,\n\t\t\t},\n\t\t});\n\t\treturn true;\n\t};\n\n\tconst signOut = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\t// Cancel in-flight refresh immediately (INV-Q).\n\t\tsessionStore.invalidate(\"signOut\");\n\t\treturn executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/sign-out\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst snapshotToGetSessionResult = (\n\t\tsnap: ReturnType<typeof sessionStore.getSnapshot>,\n\t): AthenaAuthResult<AthenaAuthSessionResponse> => {\n\t\tif (snap.status === \"error\") {\n\t\t\treturn {\n\t\t\t\tdata: snap.session,\n\t\t\t\terror: String(\n\t\t\t\t\tsnap.error instanceof Error ? snap.error.message : snap.error,\n\t\t\t\t),\n\t\t\t\tok: false,\n\t\t\t\traw: snap.session,\n\t\t\t\tstatus: 502,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tdata: snap.session,\n\t\t\terror: null,\n\t\t\tok: true,\n\t\t\traw: snap.session,\n\t\t\tstatus: 200,\n\t\t};\n\t};\n\n\tconst waitForInFlightSession = () =>\n\t\tnew Promise<AthenaAuthResult<AthenaAuthSessionResponse>>((resolve) => {\n\t\t\tconst current = sessionStore.getSnapshot();\n\t\t\tif (current.status !== \"loading\" && current.status !== \"unknown\") {\n\t\t\t\tresolve(snapshotToGetSessionResult(current));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst unsub = sessionStore.subscribe((next) => {\n\t\t\t\tif (next.status !== \"loading\" && next.status !== \"unknown\") {\n\t\t\t\t\tunsub();\n\t\t\t\t\tresolve(snapshotToGetSessionResult(next));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\tconst getSession = async (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t): Promise<AthenaAuthResult<AthenaAuthSessionResponse>> => {\n\t\t// Epoch-gated via beginRefresh so setActive/signOut win over stale reads.\n\t\tconst { epoch, skipped } = sessionStore.beginRefresh();\n\t\tif (skipped) {\n\t\t\tconst snap = sessionStore.getSnapshot();\n\t\t\tif (snap.status === \"loading\" || snap.status === \"unknown\") {\n\t\t\t\t// Wait for the in-flight refresh. Returning ok:true + data:null\n\t\t\t\t// made Better Auth UI cache an empty session and skipToken\n\t\t\t\t// list-sessions / api-key/list forever.\n\t\t\t\treturn waitForInFlightSession();\n\t\t\t}\n\t\t\treturn snapshotToGetSessionResult(snap);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await fetchSessionResult(input, options);\n\t\t\tif (result.ok) {\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: true,\n\t\t\t\t\tsession: result.data ?? null,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst status = typeof result.status === \"number\" ? result.status : 0;\n\t\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\t\tok: false,\n\t\t\t\t\terror: result.error ?? result,\n\t\t\t\t\tclearSession: status === 401,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tsessionStore.completeRefresh(epoch, {\n\t\t\t\tok: false,\n\t\t\t\terror,\n\t\t\t\tclearSession: false,\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t};\n\tconst revokeSessions = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithOptionalInput<AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-sessions\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst revokeOtherSessions = (\n\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithOptionalInput<AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-other-sessions\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst revokeSession = (\n\t\tinput: { token: string } & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) =>\n\t\texecutePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/revoke-session\", method: \"POST\" },\n\t\t\tinput,\n\t\t\toptions,\n\t\t);\n\n\tconst deleteUser = async (\n\t\tinput?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst result = await callAuthEndpoint<AthenaDeleteUserResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/delete-user\", method: \"POST\" },\n\t\t\tpayload ?? {},\n\t\t\tundefined,\n\t\t\tmergedOptions,\n\t\t);\n\t\tif (result.ok) {\n\t\t\tsessionStore.invalidate(\"revoke\");\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst deleteUserCallback = (\n\t\tinput?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst query = (payload ?? {}) as AthenaDeleteUserCallbackRequest;\n\t\treturn callAuthEndpoint<AthenaDeleteUserResponse>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint: \"/delete-user/callback\", method: \"GET\" },\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\tcallbackURL: query.callbackURL,\n\t\t\t\ttoken: query.token,\n\t\t\t},\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst resolveResetPasswordToken = (\n\t\tinput: {\n\t\t\ttoken: string;\n\t\t\tcallbackURL?: string;\n\t\t} & AthenaAuthFetchCompatibleInput,\n\t\toptions?: AthenaAuthCallOptions,\n\t) => {\n\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\tconst query = payload as\n\t\t\t| { token?: string; callbackURL?: string }\n\t\t\t| undefined;\n\t\tconst token = query?.token?.trim();\n\t\tif (!token) {\n\t\t\tthrow new Error(\"resolveResetPasswordToken requires a non-empty token\");\n\t\t}\n\t\tconst endpoint =\n\t\t\t`/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath;\n\t\treturn callAuthEndpoint<{ token?: string }>(\n\t\t\tresolvedConfig,\n\t\t\t{ endpoint, method: \"GET\" },\n\t\t\tundefined,\n\t\t\tquery?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n\t\t\tmergedOptions,\n\t\t);\n\t};\n\n\tconst organization: AthenaAuthOrganizationBindings = {\n\t\tcheckSlug: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ available: boolean }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/check-slug\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tcreate: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthOrganization\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/create\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tdelete: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/delete\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetFull: (input, options) =>\n\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationGetFullQuery,\n\t\t\t\t{\n\t\t\t\t\torganization: AthenaAuthOrganization;\n\t\t\t\t\tmembers?: AthenaAuthOrganizationMember[];\n\t\t\t\t\tinvitations?: AthenaAuthOrganizationInvitation[];\n\t\t\t\t}\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/get-full-organization\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\thasPermission: (input, options) =>\n\t\t\tpostGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\t\"/organization/has-permission\",\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tinvitation: {\n\t\t\taccept: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/accept-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tcancel: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/cancel-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tget: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationGetInvitationQuery,\n\t\t\t\t\tAthenaAuthOrganizationInvitation\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/get-invitation\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tlist: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationListInvitationsQuery,\n\t\t\t\t\tAthenaAuthOrganizationInvitation[]\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/list-invitations\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\treject: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInvitationActionRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/reject-invitation\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tleave: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/leave\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlist: (input, options) =>\n\t\t\tgetGeneric<AthenaAuthOrganization[]>(\n\t\t\t\t\"/organization/list\",\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlistUserInvitations: (input, options) =>\n\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationListUserInvitationsQuery,\n\t\t\t\tAthenaAuthOrganizationInvitation[]\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/list-user-invitations\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tmember: {\n\t\t\tgetActive: (input, options) =>\n\t\t\t\texecuteGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/get-active-member\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tinvite: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationInviteMemberRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthOrganizationInvitation\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/invite-member\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tlist: (input, options) =>\n\t\t\t\texecuteGetWithQueryCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationListMembersQuery,\n\t\t\t\t\tAthenaAuthOrganizationMember[]\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/list-members\", method: \"GET\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tremove: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationRemoveMemberRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/remove-member\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tupdateRole: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaAuthOrganizationUpdateMemberRoleRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/organization/update-member-role\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\trequirePermission: (input, options) =>\n\t\t\trequirePermission(\"/organization/has-permission\", input, options),\n\t\tsetActive: async (input, options) => {\n\t\t\tconst result = await executePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/set-active\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\tif (!result.ok) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tconst organizationId =\n\t\t\t\tinput && typeof input === \"object\" && \"organizationId\" in input\n\t\t\t\t\t? (input as AthenaAuthOrganizationSetActiveRequest).organizationId\n\t\t\t\t\t: undefined;\n\t\t\tif (isSessionResponse(result.data)) {\n\t\t\t\tsessionStore.accept(result.data);\n\t\t\t}\n\t\t\t// Optimistic patch cancels in-flight getSession (INV-Q stale org).\n\t\t\tpatchActiveOrganization(organizationId ?? null);\n\t\t\t// Always re-read live session. Cookie-cache get-session would snap\n\t\t\t// the store back to the previous organization.\n\t\t\tawait refreshSessionStore();\n\t\t\treturn result;\n\t\t},\n\t\tupdate: (input, options) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthOrganization\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/organization/update\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t};\n\n\tconst authResetPassword = Object.assign(\n\t\t(\n\t\t\tinput: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/reset-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\t{\n\t\t\ttoken: resolveResetPasswordToken,\n\t\t},\n\t);\n\n\tconst collectRevokeTokens = (\n\t\tinput: Parameters<AthenaAuthBindings[\"session\"][\"revoke\"]>[0],\n\t): string[] => {\n\t\tif (Array.isArray(input)) {\n\t\t\treturn input\n\t\t\t\t.map((item) =>\n\t\t\t\t\ttypeof item === \"string\"\n\t\t\t\t\t\t? item\n\t\t\t\t\t\t: typeof (item as { token?: string })?.token === \"string\"\n\t\t\t\t\t\t\t? (item as { token: string }).token\n\t\t\t\t\t\t\t: \"\",\n\t\t\t\t)\n\t\t\t\t.filter((token) => token.trim().length > 0);\n\t\t}\n\t\tif (!input || typeof input !== \"object\") {\n\t\t\treturn [];\n\t\t}\n\t\tconst parsed = input as { token?: string; tokens?: string[] };\n\t\tif (Array.isArray(parsed.tokens)) {\n\t\t\treturn parsed.tokens.filter((token) => token.trim().length > 0);\n\t\t}\n\t\tif (typeof parsed.token === \"string\" && parsed.token.trim().length > 0) {\n\t\t\treturn [parsed.token];\n\t\t}\n\t\treturn [];\n\t};\n\n\tconst executeSessionRevoke: AthenaAuthBindings[\"session\"][\"revoke\"] = (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tif (Array.isArray(input)) {\n\t\t\tif (input.length === 0) {\n\t\t\t\tthrow new Error(\"session.revoke requires at least one session token\");\n\t\t\t}\n\t\t\tif (input.length === 1) {\n\t\t\t\treturn revokeSession(input[0], options);\n\t\t\t}\n\t\t\treturn revokeSessions(undefined, options);\n\t\t}\n\n\t\tconst parsed = input as AthenaAuthGenericInput & {\n\t\t\ttoken?: string;\n\t\t\ttokens?: string[];\n\t\t};\n\t\tconst tokens = Array.isArray(parsed.tokens)\n\t\t\t? parsed.tokens.filter((token) => token.trim().length > 0)\n\t\t\t: undefined;\n\n\t\tif (tokens && tokens.length > 1) {\n\t\t\treturn revokeSessions(\n\t\t\t\tparsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n\t\t\t\toptions,\n\t\t\t);\n\t\t}\n\n\t\tif (tokens && tokens.length === 1) {\n\t\t\treturn revokeSession(\n\t\t\t\t{ fetchOptions: parsed.fetchOptions, token: tokens[0] },\n\t\t\t\toptions,\n\t\t\t);\n\t\t}\n\n\t\tconst token = parsed.token?.trim();\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t\"session.revoke requires a non-empty token or a non-empty token list\",\n\t\t\t);\n\t\t}\n\n\t\treturn revokeSession(\n\t\t\t{\n\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\ttoken,\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t};\n\n\tconst sessionRevokeBinding: AthenaAuthBindings[\"session\"][\"revoke\"] = async (\n\t\tinput,\n\t\toptions,\n\t) => {\n\t\tconst tokens = collectRevokeTokens(input);\n\t\tconst result = await executeSessionRevoke(input, options);\n\t\tconst revokedAll =\n\t\t\t(Array.isArray(input) && input.length > 1) || tokens.length > 1;\n\t\tif (\n\t\t\tresult.ok &&\n\t\t\t(revokedAll || sessionStore.shouldInvalidateForRevokedTokens(tokens))\n\t\t) {\n\t\t\tsessionStore.invalidate(\"revoke\");\n\t\t}\n\t\treturn result;\n\t};\n\n\tconst adminUserSessionRevokeBinding: AthenaAuthBindings[\"admin\"][\"user\"][\"session\"][\"revoke\"] =\n\t\t(input, options) => {\n\t\t\tconst requireUserId = (userId: string | undefined): string => {\n\t\t\t\tconst trimmed = String(userId ?? \"\").trim();\n\t\t\t\tif (!trimmed) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires a non-empty userId\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn trimmed;\n\t\t\t};\n\n\t\t\tconst requireSinglePluralUserId = (\n\t\t\t\tsessions: AthenaAdminRevokeUserSessionRequest[],\n\t\t\t): AthenaAdminRevokeUserSessionsRequest => {\n\t\t\t\tconst uniqueUserIds = [\n\t\t\t\t\t...new Set(sessions.map((session) => requireUserId(session.userId))),\n\t\t\t\t];\n\t\t\t\tif (uniqueUserIds.length !== 1) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires the same userId across plural payloads\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn { userId: uniqueUserIds[0] };\n\t\t\t};\n\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tif (input.length === 0) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"admin.user.session.revoke requires at least one payload item\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...input[0],\n\t\t\t\t\t\t\tuserId: requireUserId(input[0].userId),\n\t\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\trequireSinglePluralUserId(input),\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst parsed = input as AthenaAuthGenericInput & {\n\t\t\t\tsessions?: AthenaAdminRevokeUserSessionRequest[];\n\t\t\t\tsessionToken?: string;\n\t\t\t\tuserId?: string;\n\t\t\t};\n\t\t\tconst sessions = parsed.sessions;\n\n\t\t\tif (sessions && sessions.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"admin.user.session.revoke requires at least one payload item\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (sessions && sessions.length === 1) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t\t{\n\t\t\t\t\t\t...sessions[0],\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t\tuserId: requireUserId(sessions[0].userId),\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (sessions && sessions.length > 1) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\t{\n\t\t\t\t\t\t...requireSinglePluralUserId(sessions),\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst normalizedUserId = requireUserId(parsed.userId);\n\n\t\t\tif (!parsed.sessionToken) {\n\t\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\t\"/admin/revoke-user-sessions\",\n\t\t\t\t\t{\n\t\t\t\t\t\tfetchOptions: parsed.fetchOptions,\n\t\t\t\t\t\tuserId: normalizedUserId,\n\t\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn postGeneric<AthenaAdminSuccessResponse>(\n\t\t\t\t\"/admin/revoke-user-session\",\n\t\t\t\t{\n\t\t\t\t\t...parsed,\n\t\t\t\t\tuserId: normalizedUserId,\n\t\t\t\t} as AthenaAuthGenericInput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t};\n\n\tconst auth: AthenaAuthBindings = {\n\t\taccount: {\n\t\t\tlist: (input, options) => getGeneric(\"/list-accounts\", input, options),\n\t\t\tunlink: (input, options) =>\n\t\t\t\tpostGeneric(\"/unlink-account\", input, options),\n\t\t},\n\t\tadmin: {\n\t\t\tapiKey: {\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/api-key/create\", input, options),\n\t\t\t},\n\t\t\tathenaClient: {\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/athena-client/create\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/athena-client/list\", input, options),\n\t\t\t},\n\t\t\tauditLog: {\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/audit-log/list\", input, options),\n\t\t\t},\n\t\t\temail: {\n\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email/create\",\n\t\t\t\t\t\tawait resolveAdminEmailPayload(\"/admin/email/create\", input),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/email/delete\", input, options),\n\t\t\t\teventType: {\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-event-type/list\", input, options),\n\t\t\t\t},\n\t\t\t\tfailure: {\n\t\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/create\", input, options),\n\t\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/delete\", input, options),\n\t\t\t\t\tget: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-failure/get\", input, options),\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-failure/list\", input, options),\n\t\t\t\t\tupdate: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-failure/update\", input, options),\n\t\t\t\t},\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email/get\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email/list\", input, options),\n\t\t\t\ttemplate: {\n\t\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/email-template/delete\", input, options),\n\t\t\t\t\tget: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-template/get\", input, options),\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tgetWithQuery(\"/admin/email-template/list\", input, options),\n\t\t\t\t\tsend: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/send\",\n\t\t\t\t\t\t\tnormalizeAdminEmailTemplateSendPayload(\n\t\t\t\t\t\t\t\textractFetchOptions(input).payload as Record<string, unknown>,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email/update\",\n\t\t\t\t\t\tawait resolveAdminEmailPayload(\"/admin/email/update\", input),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t},\n\t\t\temailEventType: {\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-event-type/list\", input, options),\n\t\t\t},\n\t\t\temailTemplate: {\n\t\t\t\tcreate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\"/admin/email-template/create\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tdelete: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/email-template/delete\", input, options),\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-template/get\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/email-template/list\", input, options),\n\t\t\t\tsend: (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/send\",\n\t\t\t\t\t\tnormalizeAdminEmailTemplateSendPayload(\n\t\t\t\t\t\t\textractFetchOptions(input).payload as Record<string, unknown>,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t\tupdate: async (input, options) =>\n\t\t\t\t\tpostGeneric(\n\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\tawait resolveAdminEmailTemplatePayload(\n\t\t\t\t\t\t\t\"/admin/email-template/update\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t),\n\t\t\t\t\t\toptions,\n\t\t\t\t\t),\n\t\t\t},\n\t\t\thasPermission: (input, options) =>\n\t\t\t\tpostGeneric<AthenaAdminHasPermissionResponse>(\n\t\t\t\t\t\"/admin/has-permission\",\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\trequirePermission: (input, options) =>\n\t\t\t\trequirePermission(\"/admin/has-permission\", input, options),\n\t\t\tlistUsers: (input, options) =>\n\t\t\t\tgetWithQuery(\"/admin/list-users\", input, options),\n\t\t\tgetUser: (input, options) =>\n\t\t\t\tgetWithQuery(\"/admin/get-user\", input, options),\n\t\t\tcreateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/create-user\", input, options),\n\t\t\tupdateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/update-user\", input, options),\n\t\t\tsetRole: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/set-role\", input, options),\n\t\t\tbanUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/ban-user\", input, options),\n\t\t\tunbanUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/unban-user\", input, options),\n\t\t\trevokeUserSessions: adminUserSessionRevokeBinding,\n\t\t\tremoveUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/remove-user\", input, options),\n\t\t\timpersonateUser: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/impersonate-user\", input, options),\n\t\t\tstopImpersonating: (input, options) =>\n\t\t\t\tpostGeneric(\"/admin/stop-impersonating\", input, options),\n\t\t\trole: {\n\t\t\t\tset: (input, options) => postGeneric(\"/admin/set-role\", input, options),\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\tget: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/get-user\", input, options),\n\t\t\t\tupdate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/update-user\", input, options),\n\t\t\t\tban: (input, options) => postGeneric(\"/admin/ban-user\", input, options),\n\t\t\t\tcreate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/create-user\", input, options),\n\t\t\t\timpersonate: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/impersonate-user\", input, options),\n\t\t\t\tlist: (input, options) =>\n\t\t\t\t\tgetWithQuery(\"/admin/list-users\", input, options),\n\t\t\t\tremove: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/remove-user\", input, options),\n\t\t\t\tsession: {\n\t\t\t\t\tlist: (input, options) =>\n\t\t\t\t\t\tpostGeneric(\"/admin/list-user-sessions\", input, options),\n\t\t\t\t\trevoke: adminUserSessionRevokeBinding,\n\t\t\t\t},\n\t\t\t\tsetPassword: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/set-user-password\", input, options),\n\t\t\t\tstopImpersonating: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/stop-impersonating\", input, options),\n\t\t\t\tunban: (input, options) =>\n\t\t\t\t\tpostGeneric(\"/admin/unban-user\", input, options),\n\t\t\t},\n\t\t},\n\t\tapiKey: {\n\t\t\tcreate: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/create\", input, options),\n\t\t\tdelete: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/delete\", input, options),\n\t\t\tdeleteAllExpired: (input, options) =>\n\t\t\t\texecutePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/api-key/delete-all-expired-api-keys\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tget: (input, options) => getWithQuery(\"/api-key/get\", input, options),\n\t\t\tlist: (input, options) => getWithQuery(\"/api-key/list\", input, options),\n\t\t\tupdate: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/update\", input, options),\n\t\t\tverify: (input, options) =>\n\t\t\t\tpostGeneric(\"/api-key/verify\", input, options),\n\t\t},\n\t\tcallback: {\n\t\t\tprovider: (input, options) => {\n\t\t\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\t\t\tconst parsed = payload as\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tprovider?: string;\n\t\t\t\t\t\t\tcode?: string;\n\t\t\t\t\t\t\tstate?: string;\n\t\t\t\t\t\t}\n\t\t\t\t\t| undefined;\n\t\t\t\tconst provider = String(parsed?.provider ?? \"\").trim();\n\t\t\t\tif (!provider) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"callback.provider requires a non-empty provider value\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst code = String(parsed?.code ?? \"\").trim();\n\t\t\t\tconst state = String(parsed?.state ?? \"\").trim();\n\t\t\t\tif (!(code && state)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"callback.provider requires non-empty code and state values\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst endpoint =\n\t\t\t\t\t`/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath;\n\t\t\t\treturn request(\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint,\n\t\t\t\t\t\tfetchOptions,\n\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tchangeEmail: (input, options) =>\n\t\t\tpostGeneric(\"/change-email\", input, options),\n\t\tchangeEmailVerify: (input, options) =>\n\t\t\tgetWithQuery(\"/change-email/verify\", input, options),\n\t\tchangePassword: (input, options) =>\n\t\t\tpostGeneric(\"/change-password\", input, options),\n\t\tdeleteUser: {\n\t\t\tcallback: deleteUserCallback,\n\t\t},\n\t\tdeleteUserVerify: (input, options) =>\n\t\t\tgetWithQuery(\"/delete-user/verify\", input, options),\n\t\terror: (input, options) => getGeneric(\"/error\", input, options),\n\t\tforgetPassword: (input, options) =>\n\t\t\tpostGeneric(\"/forget-password\", input, options),\n\t\tgetAccessToken: (input, options) =>\n\t\t\tpostGeneric(\"/get-access-token\", input, options),\n\t\tgetToken: (input, options) => postGeneric(\"/token\", input, options),\n\t\ttokenProvider: (options) =>\n\t\t\tcreateAthenaAuthTokenProvider(\n\t\t\t\t(input, callOptions) => postGeneric(\"/token\", input, callOptions),\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetSession,\n\t\tgetUser,\n\t\thealth: healthWithFallback,\n\t\tlinkSocial: (input, options) =>\n\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\tpostGeneric(\"/link-social\", input, options),\n\t\t\t),\n\t\tlistAccounts: (input, options) =>\n\t\t\tgetGeneric(\"/list-accounts\", input, options),\n\t\t// Better Auth UI flat method aliases (also nested under session/account/social/user).\n\t\tlistSessions: (input, options) =>\n\t\t\tgetGeneric(\"/list-sessions\", input, options),\n\t\tok: (input, options) => getGeneric(\"/ok\", input, options),\n\t\torganization,\n\t\tpasskey: createPasskeyModule({\n\t\t\tcapabilities: capabilitiesStore,\n\t\t\trequest,\n\t\t\tsessionController: sessionStore,\n\t\t}),\n\t\trefreshToken: (input, options) =>\n\t\t\tpostGeneric(\"/refresh-token\", input, options),\n\t\trequireSession,\n\t\tresetPassword: authResetPassword,\n\t\trevokeOtherSessions,\n\t\trevokeSession: sessionRevokeBinding,\n\t\tsendVerificationEmail: (input, options) =>\n\t\t\tpostGeneric(\"/send-verification-email\", input, options),\n\t\tsession: {\n\t\t\tlist: (input, options) => getGeneric(\"/list-sessions\", input, options),\n\t\t\trevoke: sessionRevokeBinding,\n\t\t\trevokeOther: revokeOtherSessions,\n\t\t\t// SSOT snapshot store (H7)\n\t\t\tgetSnapshot: () => sessionStore.getSnapshot(),\n\t\t\tget: () => sessionStore.getSnapshot().session,\n\t\t\t/**\n\t\t\t * Authoritative local write (org switch, sign-in payload apply).\n\t\t\t * Cancels in-flight refresh (INV-Q). Prefer mutation helpers that\n\t\t\t * already call this; advanced UI adapters may use it directly.\n\t\t\t */\n\t\t\tsetSession: (\n\t\t\t\tsession: Parameters<typeof sessionStore.setSession>[0],\n\t\t\t\tstatus?: Parameters<typeof sessionStore.setSession>[1],\n\t\t\t) => sessionStore.setSession(session, status),\n\t\t\t/**\n\t\t\t * Cold-start seed only. No-ops unless status is `unknown`.\n\t\t\t * Does not start a refresh or override a newer client mutation.\n\t\t\t */\n\t\t\thydrate: (state: Parameters<typeof sessionStore.hydrate>[0]) =>\n\t\t\t\tsessionStore.hydrate(state),\n\t\t\tinvalidate: (reason?: \"signOut\" | \"revoke\" | \"manual\") =>\n\t\t\t\tsessionStore.invalidate(reason),\n\t\t\trefresh: refreshSessionStore,\n\t\t\tsubscribe: (\n\t\t\t\tlistener: (\n\t\t\t\t\tsnapshot: ReturnType<typeof sessionStore.getSnapshot>,\n\t\t\t\t) => void,\n\t\t\t) => sessionStore.subscribe(listener),\n\t\t},\n\t\tcapabilities: {\n\t\t\tget: capabilitiesStore.get,\n\t\t\tgetSnapshot: capabilitiesStore.getSnapshot,\n\t\t\tset: (next: Parameters<typeof capabilitiesStore.set>[0]) =>\n\t\t\t\tcapabilitiesStore.set(next),\n\t\t\tmerge: (\n\t\t\t\tpatch: Parameters<typeof capabilitiesStore.merge>[0],\n\t\t\t\tmeta?: Parameters<typeof capabilitiesStore.merge>[1],\n\t\t\t) => capabilitiesStore.merge(patch, meta),\n\t\t\tmarkUnknown: (\n\t\t\t\tsource?: Parameters<typeof capabilitiesStore.markUnknown>[0],\n\t\t\t) => capabilitiesStore.markUnknown(source),\n\t\t\tsubscribe: (\n\t\t\t\tlistener: (value: ReturnType<typeof capabilitiesStore.get>) => void,\n\t\t\t) => capabilitiesStore.subscribe(listener),\n\t\t},\n\t\tsetPassword: (input, options) =>\n\t\t\tpostGeneric(\"/set-password\", input, options),\n\t\tsignIn: {\n\t\t\temail: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-in/email\", input, options),\n\t\t\t\t),\n\t\t\tsocial: (input, options) =>\n\t\t\t\tgateCapability(denySocial(\"/sign-in/social\"), async () =>\n\t\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\t\tawait postGeneric(\"/sign-in/social\", input, options),\n\t\t\t\t\t\t// Redirect-only social starts leave session unchanged.\n\t\t\t\t\t\t{ refreshIfMissing: false },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tusername: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-in/username\", input, options),\n\t\t\t\t),\n\t\t},\n\t\tsignOut,\n\t\tsignUp: {\n\t\t\temail: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/sign-up/email\", input, options),\n\t\t\t\t),\n\t\t},\n\t\tsocial: {\n\t\t\tlink: (input, options) =>\n\t\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\t\tpostGeneric(\"/link-social\", input, options),\n\t\t\t\t),\n\t\t\tsignIn: (\n\t\t\t\tinput: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\tgateCapability(denySocial(\"/sign-in/social\"), async () =>\n\t\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\t\tawait postGeneric(\"/sign-in/social\", input, options),\n\t\t\t\t\t\t{ refreshIfMissing: false },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t},\n\t\ttwoFactor: {\n\t\t\tdisable: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/disable\", input, options),\n\t\t\tenable: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/enable\", input, options),\n\t\t\tgenerateBackupCodes: (input, options) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaTwoFactorGenerateBackupCodesRequest &\n\t\t\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaTwoFactorGenerateBackupCodesResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/two-factor/generate-backup-codes\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tgetTotpUri: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/get-totp-uri\", input, options),\n\t\t\tsendOtp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/send-otp\", input, options),\n\t\t\tverifyBackupCode: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-backup-code\", input, options),\n\t\t\tverifyOtp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-otp\", input, options),\n\t\t\tverifyTotp: (input, options) =>\n\t\t\t\tpostGeneric(\"/two-factor/verify-totp\", input, options),\n\t\t},\n\t\tunlinkAccount: (input, options) =>\n\t\t\tgateCapability(denySocial(\"/unlink-account\"), () =>\n\t\t\t\tpostGeneric(\"/unlink-account\", input, options),\n\t\t\t),\n\t\tupdateUser: async (input, options) =>\n\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\tawait postGeneric(\"/update-user\", input, options),\n\t\t\t\t{ refreshIfMissing: true },\n\t\t\t),\n\t\tuser: {\n\t\t\tdelete: deleteUser,\n\t\t\temail: {\n\t\t\t\tlist: listUserEmailsWithFallback,\n\t\t\t},\n\t\t\tupdate: async (input, options) =>\n\t\t\t\tapplyAuthMutationToSessionStore(\n\t\t\t\t\tawait postGeneric(\"/update-user\", input, options),\n\t\t\t\t\t{ refreshIfMissing: true },\n\t\t\t\t),\n\t\t},\n\t\tverifyEmail: (input, options) => {\n\t\t\tconst queryInput: AthenaAuthGenericQueryInput = {\n\t\t\t\tfetchOptions: input.fetchOptions,\n\t\t\t\tquery: {\n\t\t\t\t\tcallbackURL: input.callbackURL,\n\t\t\t\t\ttoken: input.token,\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n\t\t\t\t\"/verify-email\",\n\t\t\t\tqueryInput,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n\n\tObject.defineProperty(auth, ATHENA_AUTH_BIND_BASE_URL, {\n\t\tconfigurable: true,\n\t\tenumerable: false,\n\t\tvalue: (baseUrl: string) => {\n\t\t\tresolvedConfig.baseUrl = normalizeBaseUrl(baseUrl);\n\t\t},\n\t});\n\n\treturn {\n\t\tauth,\n\t\tbaseUrl: normalizedBaseUrl,\n\t\tchangeEmail: (\n\t\t\tinput: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ status: boolean; message?: string | null }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/change-email\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tchangePassword: (\n\t\t\tinput: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t{ token?: string | null; user: AthenaAuthUser }\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/change-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tclearOtherSessions: revokeOtherSessions,\n\t\tclearSession: revokeSession,\n\t\tclearSessions: revokeSessions,\n\t\tdeleteUser,\n\t\tdeleteUserCallback,\n\t\tforgetPassword: (\n\t\t\tinput: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/forget-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetAccessToken: (\n\t\t\tinput: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaOAuthTokenBundle\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/get-access-token\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetToken: (\n\t\t\tinput?: AthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthToken\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/token\", method: \"POST\" },\n\t\t\t\tinput ??\n\t\t\t\t\t({} as AthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput),\n\t\t\t\toptions,\n\t\t\t),\n\t\ttokenProvider: (options) =>\n\t\t\tcreateAthenaAuthTokenProvider(\n\t\t\t\t(input, callOptions) =>\n\t\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\t\tAthenaAuthGetTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\t\tAthenaAuthToken\n\t\t\t\t\t>(\n\t\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t\t{ endpoint: \"/token\", method: \"POST\" },\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tcallOptions,\n\t\t\t\t\t),\n\t\t\t\toptions,\n\t\t\t),\n\t\tgetSession,\n\t\tgetUser,\n\t\tlinkSocial: (\n\t\t\tinput: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\tgateCapability(denySocial(\"/link-social\"), () =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSocialRedirectResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/link-social\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t),\n\t\tlistAccounts: (\n\t\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecuteGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/list-accounts\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlistSessions: (\n\t\t\tinput?: AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecuteGetWithCompatibleInput<AthenaAuthSession[]>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/list-sessions\", method: \"GET\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tlogout: signOut,\n\t\torganization,\n\t\trefreshToken: (\n\t\t\tinput: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaOAuthTokenBundle\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/refresh-token\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\trequest,\n\t\trequireSession,\n\t\tresetPassword: (\n\t\t\tinput: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/reset-password\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tresolveResetPasswordToken,\n\t\trevokeOtherSessions,\n\t\trevokeSession,\n\t\trevokeSessions,\n\t\tsendVerificationEmail: (\n\t\t\tinput: AthenaSendVerificationEmailRequest &\n\t\t\t\tAthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/send-verification-email\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tsignIn: {\n\t\t\temail: (\n\t\t\t\tinput: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/email\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tsocial: (\n\t\t\t\tinput: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/social\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\tusername: (\n\t\t\t\tinput: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-in/username\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tsignOut,\n\t\tsignUp: {\n\t\t\temail: (\n\t\t\t\tinput: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\toptions?: AthenaAuthCallOptions,\n\t\t\t) =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthSignInResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/sign-up/email\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t},\n\t\tunlinkAccount: (\n\t\t\tinput: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\tgateCapability(denySocial(\"/unlink-account\"), () =>\n\t\t\t\texecutePostWithCompatibleInput<\n\t\t\t\t\tAthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\t\tAthenaAuthStatusResponse\n\t\t\t\t>(\n\t\t\t\t\tresolvedConfig,\n\t\t\t\t\t{ endpoint: \"/unlink-account\", method: \"POST\" },\n\t\t\t\t\tinput,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t),\n\t\tupdateUser: (\n\t\t\tinput: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) =>\n\t\t\texecutePostWithCompatibleInput<\n\t\t\t\tAthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n\t\t\t\tAthenaAuthStatusResponse\n\t\t\t>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/update-user\", method: \"POST\" },\n\t\t\t\tinput,\n\t\t\t\toptions,\n\t\t\t),\n\t\tverifyEmail: (\n\t\t\tinput: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n\t\t\toptions?: AthenaAuthCallOptions,\n\t\t) => {\n\t\t\tconst { payload, fetchOptions } = extractFetchOptions(input);\n\t\t\tconst mergedOptions = mergeCallOptions(fetchOptions, options);\n\t\t\tconst query = payload as AthenaVerifyEmailRequest | undefined;\n\t\t\treturn callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n\t\t\t\tresolvedConfig,\n\t\t\t\t{ endpoint: \"/verify-email\", method: \"GET\" },\n\t\t\t\tundefined,\n\t\t\t\tquery\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcallbackURL: query.callbackURL,\n\t\t\t\t\t\t\ttoken: query.token,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\tmergedOptions,\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { AthenaChatCapabilities } from \"./types.ts\";\n\n/** P0 local Chat: in-process created/updated only. Not interchangeable with remote WSS. */\nexport const LOCAL_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n\trealtime: Object.freeze({\n\t\tcrossProcess: false,\n\t\tmessageDeletes: false,\n\t\tmessageUpdates: true,\n\t\tmessages: true,\n\t\tpresence: false,\n\t\treactions: false,\n\t\treplayPersisted: false,\n\t\tresumable: true,\n\t\ttyping: false,\n\t\twebsocket: false,\n\t}),\n\ttransport: \"local\",\n});\n\nexport const REMOTE_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n\trealtime: Object.freeze({\n\t\tcrossProcess: true,\n\t\tmessageDeletes: true,\n\t\tmessageUpdates: true,\n\t\tmessages: true,\n\t\tpresence: true,\n\t\treactions: true,\n\t\treplayPersisted: true,\n\t\tresumable: true,\n\t\ttyping: true,\n\t\twebsocket: true,\n\t}),\n\ttransport: \"remote\",\n});\n","import { parseHttpResponseBody as parseResponseBody } from \"../../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../../utils/athena-request-headers.ts\";\nimport { REMOTE_CHAT_CAPABILITIES } from \"../capabilities.ts\";\nimport type {\n\tAthenaChatAddMembersRequest,\n\tAthenaChatAddReactionRequest,\n\tAthenaChatCallOptions,\n\tAthenaChatConnectOptions,\n\tAthenaChatCreateRoomRequest,\n\tAthenaChatDeleteResult,\n\tAthenaChatEditMessageRequest,\n\tAthenaChatListMessagesQuery,\n\tAthenaChatListRoomsQuery,\n\tAthenaChatMarkReadUpToRequest,\n\tAthenaChatMember,\n\tAthenaChatMessage,\n\tAthenaChatMessageCreatedResponse,\n\tAthenaChatMessagePage,\n\tAthenaChatModule,\n\tAthenaChatReactionSummary,\n\tAthenaChatReadCursor,\n\tAthenaChatRealtimeConnection,\n\tAthenaChatRealtimeInfoResponse,\n\tAthenaChatRealtimeModule,\n\tAthenaChatRemoveResult,\n\tAthenaChatResolveDirectRoomRequest,\n\tAthenaChatResumeRoomCursor,\n\tAthenaChatRoom,\n\tAthenaChatRoomCreatedResponse,\n\tAthenaChatRoomPage,\n\tAthenaChatSearchMessagesRequest,\n\tAthenaChatSearchPage,\n\tAthenaChatSendMessageRequest,\n\tAthenaChatUpdateRoomRequest,\n\tAthenaChatWebSocketFactory,\n\tAthenaChatWebSocketLike,\n\tAthenaChatWsClientCommand,\n\tAthenaChatWsServerEvent,\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\tstatus: number;\n\tendpoint: string;\n\tmethod: string;\n\trequestId?: string;\n\tbody: unknown;\n\n\tconstructor(input: {\n\t\tmessage: string;\n\t\tstatus: number;\n\t\tendpoint: string;\n\t\tmethod: string;\n\t\trequestId?: string;\n\t\tbody: unknown;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaChatError\";\n\t\tthis.status = input.status;\n\t\tthis.endpoint = input.endpoint;\n\t\tthis.method = input.method;\n\t\tthis.requestId = input.requestId;\n\t\tthis.body = input.body;\n\t}\n}\n\nexport interface AthenaChatClientConfig {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tbearerToken?: string;\n\tclient?: string;\n\tcookie?: string;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\trealtimeInfoUrl?: string;\n\tsessionToken?: string;\n\twebSocketFactory?: AthenaChatWebSocketFactory;\n\twsUrl?: string;\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n\tresolveCallOptions?: () =>\n\t\t| AthenaChatCallOptions\n\t\t| undefined\n\t\t| Promise<AthenaChatCallOptions | undefined>;\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n\tif (!wsUrl) {\n\t\treturn;\n\t}\n\n\tconst parsed = new URL(normalizeWsUrl(wsUrl, \"Athena chat WebSocket URL\"));\n\tparsed.protocol = parsed.protocol === \"wss:\" ? \"https:\" : \"http:\";\n\tparsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, \"/wss/info\");\n\treturn parsed.toString();\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n\tconst normalized = value.trim();\n\tif (!normalized) {\n\t\tthrow new Error(`${label} is required.`);\n\t}\n\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(normalized);\n\t} catch (error) {\n\t\tthrow new Error(`${label} must be a valid absolute ws(s) URL.`, {\n\t\t\tcause: error,\n\t\t});\n\t}\n\n\tif (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n\t\tthrow new Error(`${label} must use ws or wss.`);\n\t}\n\n\tparsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n\treturn parsed.toString().replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n\tif (isRecord(payload)) {\n\t\tfor (const candidate of [payload.error, payload.message, payload.details]) {\n\t\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\t\treturn candidate.trim();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof payload === \"string\" && payload.trim().length > 0) {\n\t\treturn payload.trim();\n\t}\n\n\treturn fallback;\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n\tconst normalized = value.trim();\n\tif (!normalized) {\n\t\tthrow new Error(`${label} is required.`);\n\t}\n\treturn encodeURIComponent(normalized);\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n\tif (!query) {\n\t\treturn \"\";\n\t}\n\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value === undefined || value === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tif (item !== undefined && item !== null) {\n\t\t\t\t\tparams.append(key, String(item));\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tparams.set(key, String(value));\n\t}\n\n\tconst encoded = params.toString();\n\treturn encoded ? `?${encoded}` : \"\";\n}\n\nfunction createSocket(\n\tfactory: AthenaChatWebSocketFactory,\n\turl: string,\n\tprotocols?: string | string[],\n): AthenaChatWebSocketLike {\n\ttry {\n\t\treturn new (\n\t\t\tfactory as new (\n\t\t\t\tsocketUrl: string,\n\t\t\t\tsocketProtocols?: string | string[],\n\t\t\t) => AthenaChatWebSocketLike\n\t\t)(url, protocols);\n\t} catch (error) {\n\t\tif (error instanceof TypeError) {\n\t\t\treturn (\n\t\t\t\tfactory as (\n\t\t\t\t\tsocketUrl: string,\n\t\t\t\t\tsocketProtocols?: string | string[],\n\t\t\t\t) => AthenaChatWebSocketLike\n\t\t\t)(url, protocols);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction buildHeaders(\n\tconfig: AthenaChatClientConfig,\n\toptions?: AthenaChatCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\"chat\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n\treturn {\n\t\t...init,\n\t\tbody: body === undefined ? undefined : JSON.stringify(body),\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(init.headers as Record<string, string>),\n\t\t},\n\t};\n}\n\n/** Coalesce concurrent identical GET chat reads (method+url+auth scope). */\nconst inflightGetRequests = new Map<string, Promise<unknown>>();\n\nfunction headerIgnoreCase(\n\theaders: Record<string, string>,\n\tname: string,\n): string {\n\tconst target = name.toLowerCase();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (key.toLowerCase() === target && value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction chatGetInflightKey(\n\tmethod: string,\n\turl: string,\n\theaders: Record<string, string>,\n): string {\n\t// Include every response-scoping credential so concurrent session-token\n\t// callers on a shared SDK never share one in-flight GET promise.\n\tconst auth =\n\t\theaderIgnoreCase(headers, \"Authorization\") ||\n\t\theaderIgnoreCase(headers, \"Cookie\") ||\n\t\t\"\";\n\tconst sessionToken =\n\t\theaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\") || \"\";\n\tconst bearerMirror =\n\t\theaderIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\") || \"\";\n\tconst apiKey =\n\t\theaderIgnoreCase(headers, \"x-api-key\") ||\n\t\theaderIgnoreCase(headers, \"X-Api-Key\") ||\n\t\theaderIgnoreCase(headers, \"x-athena-api-key\") ||\n\t\theaderIgnoreCase(headers, \"X-Athena-Key\") ||\n\t\t\"\";\n\tconst client =\n\t\theaderIgnoreCase(headers, \"x-athena-client\") ||\n\t\theaderIgnoreCase(headers, \"X-Athena-Client\") ||\n\t\theaderIgnoreCase(headers, \"x-client\") ||\n\t\t\"\";\n\treturn `${method}\\n${url}\\n${auth}\\n${sessionToken}\\n${bearerMirror}\\n${apiKey}\\n${client}`;\n}\n\nasync function request<T>(\n\tconfig: AthenaChatClientConfig,\n\truntimeOptions: InternalChatModuleRuntimeOptions,\n\tmethod: string,\n\tendpoint: string,\n\toptions?: AthenaChatCallOptions,\n\tbody?: unknown,\n): Promise<T> {\n\tif (!config.baseUrl) {\n\t\tthrow new Error(\n\t\t\t\"Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.\",\n\t\t);\n\t}\n\t// Deterministic single URL — never progressive path probing.\n\tconst url = `${config.baseUrl}${endpoint}`;\n\tconst contextOptions = await runtimeOptions.resolveCallOptions?.();\n\tconst resolvedOptions = {\n\t\t...contextOptions,\n\t\t...options,\n\t\theaders:\n\t\t\tcontextOptions?.headers || options?.headers\n\t\t\t\t? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n\t\t\t\t: undefined,\n\t};\n\tconst headers = buildHeaders(config, resolvedOptions);\n\tconst init: RequestInit = {\n\t\theaders,\n\t\tmethod,\n\t\tsignal: resolvedOptions.signal,\n\t};\n\tconst finalInit =\n\t\tbody === undefined || method === \"GET\" ? init : withJsonBody(init, body);\n\n\tconst execute = async (): Promise<T> => {\n\t\tconst response = await fetch(url, finalInit);\n\t\tconst rawText = await response.text();\n\t\tconst { parsed } = parseResponseBody(\n\t\t\trawText,\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tthrow new AthenaChatError({\n\t\t\t\tbody: parsed,\n\t\t\t\tendpoint,\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena chat ${method} ${endpoint} failed with ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod,\n\t\t\t\trequestId: resolveRequestId(response.headers),\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\n\t\treturn parsed as T;\n\t};\n\n\tif (method === \"GET\" && body === undefined) {\n\t\t// Per-call AbortSignal must keep independent cancellation semantics —\n\t\t// do not coalesce signaled requests onto another caller's promise.\n\t\tif (resolvedOptions.signal) {\n\t\t\treturn execute();\n\t\t}\n\t\tconst key = chatGetInflightKey(method, url, headers);\n\t\tconst existing = inflightGetRequests.get(key);\n\t\tif (existing) {\n\t\t\treturn existing as Promise<T>;\n\t\t}\n\t\tconst pending = execute().finally(() => {\n\t\t\tif (inflightGetRequests.get(key) === pending) {\n\t\t\t\tinflightGetRequests.delete(key);\n\t\t\t}\n\t\t});\n\t\tinflightGetRequests.set(key, pending);\n\t\treturn pending;\n\t}\n\n\treturn execute();\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(\n\tpayload: T,\n): T[\"data\"] {\n\treturn payload.data;\n}\n\nfunction createRealtimeConnection(\n\tconfig: AthenaChatClientConfig,\n\toptions?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n\tif (!config.wsUrl) {\n\t\tthrow new Error(\n\t\t\t\"Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\",\n\t\t);\n\t}\n\n\tconst wsFactory =\n\t\tconfig.webSocketFactory ??\n\t\t(globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory })\n\t\t\t.WebSocket;\n\n\tif (!wsFactory) {\n\t\tthrow new Error(\n\t\t\t\"No WebSocket implementation is available. Provide chat.webSocketFactory in createClient() or run in a runtime with global WebSocket support.\",\n\t\t);\n\t}\n\n\tconst socket = createSocket(wsFactory, config.wsUrl, options?.protocols);\n\n\tconst send = (command: AthenaChatWsClientCommand) => {\n\t\tsocket.send(JSON.stringify(command));\n\t};\n\n\tif (options?.onMessage) {\n\t\tconst listener = (event: unknown) => {\n\t\t\tconst messageEvent = event as { data?: unknown };\n\t\t\tconst raw = messageEvent?.data;\n\t\t\tif (typeof raw !== \"string\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\toptions.onMessage?.(\n\t\t\t\t\tJSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>,\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\toptions.onMessage?.({\n\t\t\t\t\terror: \"Invalid JSON message from Athena chat realtime gateway.\",\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tif (typeof socket.addEventListener === \"function\") {\n\t\t\tsocket.addEventListener(\"message\", listener);\n\t\t} else {\n\t\t\tsocket.onmessage = listener as AthenaChatWebSocketLike[\"onmessage\"];\n\t\t}\n\t}\n\n\tconst hello = (command?: {\n\t\ttoken?: string | null;\n\t\troom_subscriptions?: string[] | null;\n\t}) => {\n\t\tsend({\n\t\t\troom_subscriptions: command?.room_subscriptions,\n\t\t\ttoken: command?.token,\n\t\t\ttype: \"auth.hello\",\n\t\t});\n\t};\n\n\tif (options?.hello) {\n\t\tconst onOpen = () =>\n\t\t\thello({\n\t\t\t\troom_subscriptions: options.hello?.room_subscriptions ?? undefined,\n\t\t\t\ttoken: options.hello?.token ?? undefined,\n\t\t\t});\n\t\tif (typeof socket.addEventListener === \"function\") {\n\t\t\tsocket.addEventListener(\"open\", onOpen);\n\t\t} else {\n\t\t\tsocket.onopen = onOpen;\n\t\t}\n\t}\n\n\treturn {\n\t\tclose(code, reason) {\n\t\t\tsocket.close(code, reason);\n\t\t},\n\t\thello,\n\t\tping(at = new Date().toISOString()) {\n\t\t\tsend({\n\t\t\t\tat,\n\t\t\t\ttype: \"ping\",\n\t\t\t});\n\t\t},\n\t\tpresenceHeartbeat(activeRoomId) {\n\t\t\tsend({\n\t\t\t\tactive_room_id: activeRoomId ?? undefined,\n\t\t\t\ttype: \"chat.presence.heartbeat\",\n\t\t\t});\n\t\t},\n\t\treadUpTo(roomId, input) {\n\t\t\tsend({\n\t\t\t\tmessage_id: input?.message_id ?? undefined,\n\t\t\t\troom_id: roomId,\n\t\t\t\tseq: input?.seq ?? undefined,\n\t\t\t\ttype: \"chat.read.up_to\",\n\t\t\t});\n\t\t},\n\t\tresume(rooms: AthenaChatResumeRoomCursor[]) {\n\t\t\tsend({\n\t\t\t\trooms,\n\t\t\t\ttype: \"chat.resume\",\n\t\t\t});\n\t\t},\n\t\tsend,\n\t\tsocket,\n\t\tsubscribe(roomId, fromSeq) {\n\t\t\tsend({\n\t\t\t\tfrom_seq: fromSeq ?? undefined,\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.subscribe\",\n\t\t\t});\n\t\t},\n\t\ttypingStart(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.typing.start\",\n\t\t\t});\n\t\t},\n\t\ttypingStop(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.typing.stop\",\n\t\t\t});\n\t\t},\n\t\tunsubscribe(roomId) {\n\t\t\tsend({\n\t\t\t\troom_id: roomId,\n\t\t\t\ttype: \"chat.unsubscribe\",\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createRemoteChatRuntime(\n\tconfig: AthenaChatClientConfig,\n\truntimeOptions: InternalChatModuleRuntimeOptions = {},\n): AthenaChatModule {\n\tconst call = <T>(\n\t\tmethod: string,\n\t\tendpoint: string,\n\t\toptions?: AthenaChatCallOptions,\n\t\tbody?: unknown,\n\t): Promise<T> =>\n\t\trequest<T>(config, runtimeOptions, method, endpoint, options, body);\n\n\tconst realtime: AthenaChatRealtimeModule = {\n\t\tconnect(options) {\n\t\t\treturn createRealtimeConnection(config, options);\n\t\t},\n\t\tinfo(options) {\n\t\t\tconst realtimeInfoUrl =\n\t\t\t\tconfig.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl);\n\t\t\tif (!realtimeInfoUrl) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn request<AthenaChatRealtimeInfoResponse>(\n\t\t\t\t{\n\t\t\t\t\t...config,\n\t\t\t\t\tbaseUrl: realtimeInfoUrl,\n\t\t\t\t},\n\t\t\t\truntimeOptions,\n\t\t\t\t\"GET\",\n\t\t\t\t\"\",\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn {\n\t\tcapabilities: REMOTE_CHAT_CAPABILITIES,\n\t\tmessage: {\n\t\t\treaction: {\n\t\t\t\tadd(\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\tinput: AthenaChatAddReactionRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReactionSummary>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tremove(\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\temoji: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReactionSummary>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions/${encodePathSegment(emoji, \"reaction emoji\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tsearch(\n\t\t\t\tinput: AthenaChatSearchMessagesRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatSearchPage>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/messages/search\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\trealtime,\n\t\troom: {\n\t\t\tarchive(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/archive`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tcreate(\n\t\t\t\tinput: AthenaChatCreateRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoomCreatedResponse>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/rooms\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tresolveDirect(\n\t\t\t\tinput: AthenaChatResolveDirectRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/rooms/direct/resolve\",\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t\tget(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tlist(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n\t\t\t\treturn call<AthenaChatRoomPage>(\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t`/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t\tmember: {\n\t\t\t\tadd(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput: AthenaChatAddMembersRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMember[]>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlist(roomId: string, options?: AthenaChatCallOptions) {\n\t\t\t\t\treturn call<AthenaChatMember[]>(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tremove(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tuserId: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatRemoveResult>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members/${encodePathSegment(userId, \"chat user ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tdelete(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatDeleteResult>(\n\t\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tlist(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tquery?: AthenaChatListMessagesQuery,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessagePage>(\n\t\t\t\t\t\t\"GET\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsend(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput: AthenaChatSendMessageRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessageCreatedResponse>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tupdate(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tmessageId: string,\n\t\t\t\t\tinput: AthenaChatEditMessageRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatMessage>(\n\t\t\t\t\t\t\"PATCH\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\treadCursor: {\n\t\t\t\tupTo(\n\t\t\t\t\troomId: string,\n\t\t\t\t\tinput?: AthenaChatMarkReadUpToRequest,\n\t\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t\t) {\n\t\t\t\t\treturn call<AthenaChatReadCursor>(\n\t\t\t\t\t\t\"POST\",\n\t\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}/read-cursor`,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tinput ?? {},\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t\tupdate(\n\t\t\t\troomId: string,\n\t\t\t\tinput: AthenaChatUpdateRoomRequest,\n\t\t\t\toptions?: AthenaChatCallOptions,\n\t\t\t) {\n\t\t\t\treturn call<AthenaChatRoom>(\n\t\t\t\t\t\"PATCH\",\n\t\t\t\t\t`/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n\t\t\t\t\toptions,\n\t\t\t\t\tinput,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport const createChatModule = createRemoteChatRuntime;\n\nexport const chatSdkManifest = {\n\tbasePath: \"/chat\",\n\tmethods: [\n\t\t{ method: \"GET\", name: \"listRooms\", path: \"/chat/rooms\" },\n\t\t{ method: \"POST\", name: \"createRoom\", path: \"/chat/rooms\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"resolveDirectRoom\",\n\t\t\tpath: \"/chat/rooms/direct/resolve\",\n\t\t},\n\t\t{ method: \"GET\", name: \"getRoom\", path: \"/chat/rooms/{room_id}\" },\n\t\t{ method: \"PATCH\", name: \"updateRoom\", path: \"/chat/rooms/{room_id}\" },\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"archiveRoom\",\n\t\t\tpath: \"/chat/rooms/{room_id}/archive\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listRoomMessages\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"sendRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"PATCH\",\n\t\t\tname: \"updateRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages/{message_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"deleteRoomMessage\",\n\t\t\tpath: \"/chat/rooms/{room_id}/messages/{message_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"advanceReadCursor\",\n\t\t\tpath: \"/chat/rooms/{room_id}/read-cursor\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\tname: \"listRoomMembers\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"addRoomMembers\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"removeRoomMember\",\n\t\t\tpath: \"/chat/rooms/{room_id}/members/{user_id}\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tname: \"addReaction\",\n\t\t\tpath: \"/chat/messages/{message_id}/reactions\",\n\t\t},\n\t\t{\n\t\t\tmethod: \"DELETE\",\n\t\t\tname: \"removeReaction\",\n\t\t\tpath: \"/chat/messages/{message_id}/reactions/{emoji}\",\n\t\t},\n\t\t{ method: \"POST\", name: \"searchMessages\", path: \"/chat/messages/search\" },\n\t\t{ method: \"GET\", name: \"getRealtimeInfo\", path: \"/wss/info\" },\n\t\t{ method: \"GET\", name: \"connectRealtime\", path: \"/wss/gateway\" },\n\t],\n\tnamespace: \"chat\",\n} as const;\n\nexport function unwrapChatRoom(\n\tpayload: AthenaChatRoomCreatedResponse,\n): AthenaChatRoom {\n\treturn unwrapEnvelopeData(payload) as AthenaChatRoom;\n}\n\nexport function unwrapChatMessage(\n\tpayload: AthenaChatMessageCreatedResponse,\n): AthenaChatMessage {\n\treturn unwrapEnvelopeData(payload) as AthenaChatMessage;\n}\n","export {\n\tAthenaChatError,\n\tchatSdkManifest,\n\tcreateChatModule,\n\tcreateRemoteChatRuntime,\n\tunwrapChatMessage,\n\tunwrapChatRoom,\n\ttype AthenaChatClientConfig,\n} from \"./remote/runtime.ts\";\n","import type { BackendConfig } from \"./gateway/types.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"./sdk-version.ts\";\nimport {\n\tbuildAthenaRequestHeaders,\n\thasHeaderIgnoreCase,\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\t| \"GET\"\n\t| \"POST\"\n\t| \"PUT\"\n\t| \"PATCH\"\n\t| \"DELETE\"\n\t| \"HEAD\"\n\t| \"OPTIONS\";\n\nexport interface AthenaRequestQueryValueMap {\n\t[key: string]:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| null\n\t\t| undefined\n\t\t| Array<string | number | boolean | null | undefined>;\n}\n\nexport interface AthenaRequestOptions {\n\t/** Per-request override for the canonical `X-Athena-Key` header. */\n\tapiKey?: string | null;\n\tbody?: RequestInit[\"body\"] | Record<string, unknown> | unknown[] | null;\n\tcredentials?: RequestInit[\"credentials\"];\n\theaders?: Record<string, string>;\n\tmethod?: AthenaRequestMethod;\n\tpath?: string;\n\tquery?: AthenaRequestQueryValueMap;\n\tresponseType?: \"json\" | \"text\" | \"response\";\n\tservice?: AthenaRequestService;\n\tsignal?: AbortSignal;\n\turl?: string;\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n\tdata: T | string | null;\n\theaders: Headers;\n\tok: boolean;\n\traw: Response;\n\tstatus: number;\n\tstatusText: string;\n}\n\nexport interface AthenaRawRequestConfig {\n\tapiKey?: string;\n\tauthUrl?: string;\n\tbackend?: BackendConfig;\n\tbaseUrl?: string;\n\tchatUrl?: string;\n\tclient?: string | null;\n\theaders?: Record<string, string>;\n\tjdbcUrl?: string | null;\n\tpgUri?: string | null;\n\tstorageUrl?: string;\n}\n\nexport interface AthenaRawRequestContext {\n\tbearerToken?: string | null;\n\tcookie?: string | null;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\torganizationId?: string | null;\n\tsessionToken?: string | null;\n\tuserId?: string | null;\n}\n\nfunction parseArbitraryResponseBody(\n\trawText: string,\n\tcontentType: string | null,\n): unknown {\n\tif (!rawText) {\n\t\treturn null;\n\t}\n\tif (contentType?.toLowerCase().includes(\"application/json\")) {\n\t\ttry {\n\t\t\treturn JSON.parse(rawText);\n\t\t} catch {\n\t\t\treturn rawText;\n\t\t}\n\t}\n\tconst trimmed = rawText.trim();\n\tif (\n\t\t(trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n\t\t(trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n\t) {\n\t\ttry {\n\t\t\treturn JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn rawText;\n\t\t}\n\t}\n\treturn rawText;\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n\tif (!query) {\n\t\treturn \"\";\n\t}\n\tconst params = new URLSearchParams();\n\tfor (const [key, rawValue] of Object.entries(query)) {\n\t\tconst values = Array.isArray(rawValue) ? rawValue : [rawValue];\n\t\tfor (const value of values) {\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams.append(key, value === null ? \"\" : String(value));\n\t\t}\n\t}\n\tconst serialized = params.toString();\n\treturn serialized ? `?${serialized}` : \"\";\n}\n\nfunction isJsonBody(body: AthenaRequestOptions[\"body\"]): boolean {\n\treturn (\n\t\tbody !== undefined &&\n\t\tbody !== null &&\n\t\t!(body instanceof FormData) &&\n\t\t!(body instanceof Blob) &&\n\t\t!(body instanceof URLSearchParams) &&\n\t\t!(body instanceof ArrayBuffer) &&\n\t\t!ArrayBuffer.isView(body) &&\n\t\ttypeof body !== \"string\"\n\t);\n}\n\nexport function createAthenaRequest(\n\tconfig: AthenaRawRequestConfig,\n\tresolveContext: () =>\n\t\t| AthenaRawRequestContext\n\t\t| undefined\n\t\t| Promise<AthenaRawRequestContext | undefined>,\n): <T = unknown>(\n\toptions: AthenaRequestOptions,\n) => Promise<AthenaRequestResponse<T>> {\n\treturn async <T = unknown>(\n\t\toptions: AthenaRequestOptions,\n\t): Promise<AthenaRequestResponse<T>> => {\n\t\tconst context = await resolveContext();\n\t\tconst method = options.method ?? \"GET\";\n\t\tconst responseType = options.responseType ?? \"json\";\n\t\tconst service = options.service ?? \"db\";\n\t\tconst absoluteUrl = options.url?.trim();\n\t\tconst baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n\t\t\tauth: config.authUrl,\n\t\t\tchat: config.chatUrl,\n\t\t\tdb: config.baseUrl,\n\t\t\tstorage: config.storageUrl,\n\t\t};\n\n\t\tconst queryString = toRequestQueryString(options.query);\n\t\tlet targetUrl: string;\n\t\tif (absoluteUrl) {\n\t\t\t// Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n\t\t\t// and auth-only / storage-only clients can still call arbitrary endpoints.\n\t\t\ttry {\n\t\t\t\tconst parsed = new URL(absoluteUrl);\n\t\t\t\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\t\t\t\tthrow new Error(\"not http(s)\");\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n\t\t\t\t\t{ cause: error },\n\t\t\t\t);\n\t\t\t}\n\t\t\ttargetUrl = `${absoluteUrl}${queryString}`;\n\t\t} else {\n\t\t\tconst resolvedBaseUrl = baseUrlByService[service];\n\t\t\tif (!resolvedBaseUrl) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n\t\t\t\tlabel: `Athena ${service} base URL`,\n\t\t\t});\n\t\t\tconst path = options.path?.trim();\n\t\t\tif (!path) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"client.request(...) requires either an absolute url or a non-empty path.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\t\t\ttargetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`;\n\t\t}\n\n\t\tconst requestProfile =\n\t\t\tservice === \"auth\"\n\t\t\t\t? \"auth\"\n\t\t\t\t: service === \"chat\"\n\t\t\t\t\t? \"chat\"\n\t\t\t\t\t: service === \"storage\"\n\t\t\t\t\t\t? \"storage\"\n\t\t\t\t\t\t: \"gateway\";\n\t\tconst headers = buildAthenaRequestHeaders({\n\t\t\taccept: service === \"chat\" ? \"application/json\" : undefined,\n\t\t\tapiKey: options.apiKey ?? config.apiKey,\n\t\t\tbackend: config.backend,\n\t\t\tbearerToken: context?.bearerToken,\n\t\t\tcallHeaders: options.headers,\n\t\t\tclient: config.client,\n\t\t\tconfigHeaders: {\n\t\t\t\t...(config.headers ?? {}),\n\t\t\t\t...(context?.headers ?? {}),\n\t\t\t},\n\t\t\tcontentType:\n\t\t\t\tservice === \"auth\" || service === \"db\" || service === \"storage\"\n\t\t\t\t\t? \"application/json\"\n\t\t\t\t\t: undefined,\n\t\t\tcookie: context?.cookie,\n\t\t\tforceNoCache: context?.forceNoCache,\n\t\t\tjdbcUrl: config.jdbcUrl,\n\t\t\torganizationId: context?.organizationId,\n\t\t\tpgUri: config.pgUri,\n\t\t\tprofile: requestProfile,\n\t\t\tsdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n\t\t\tsessionToken: context?.sessionToken,\n\t\t\tstripNulls: service === \"db\" ? true : undefined,\n\t\t\tuserId: context?.userId,\n\t\t});\n\n\t\tconst shouldSendJsonBody = isJsonBody(options.body);\n\t\tif (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tconst response = await fetch(targetUrl, {\n\t\t\tbody:\n\t\t\t\toptions.body === undefined || options.body === null\n\t\t\t\t\t? undefined\n\t\t\t\t\t: shouldSendJsonBody\n\t\t\t\t\t\t? JSON.stringify(options.body)\n\t\t\t\t\t\t: (options.body as RequestInit[\"body\"]),\n\t\t\tcredentials: options.credentials,\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tif (responseType === \"response\") {\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\theaders: response.headers,\n\t\t\t\tok: response.ok,\n\t\t\t\traw: response,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: response.statusText,\n\t\t\t};\n\t\t}\n\n\t\tconst rawText = await response.text();\n\t\tconst parsed =\n\t\t\tresponseType === \"text\"\n\t\t\t\t? rawText\n\t\t\t\t: parseArbitraryResponseBody(\n\t\t\t\t\t\trawText,\n\t\t\t\t\t\tresponse.headers.get(\"content-type\"),\n\t\t\t\t\t);\n\n\t\treturn {\n\t\t\tdata: parsed as T | string | null,\n\t\t\theaders: response.headers,\n\t\t\tok: response.ok,\n\t\t\traw: response,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t};\n\t};\n}\n","import type {\n  AthenaOperationContext,\n  NormalizedAthenaError,\n  RetryConfig,\n} from \"./auxiliaries.ts\";\nimport { normalizeAthenaError, withRetry } from \"./auxiliaries.ts\";\nimport type {\n  AthenaGatewayErrorDetails,\n  AthenaGatewayResponse,\n} from \"./gateway/types.ts\";\n\nconst ATHENA_NORMALIZED_ERROR_KEY = \"__athenaNormalizedError\" as const;\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  backoff: \"exponential\",\n  baseDelayMs: 100,\n  jitter: true,\n  maxDelayMs: 1000,\n  retries: 2,\n};\n\nexport interface AthenaResult<T> {\n  /**\n   * Mutation affected-row count (insert/update/delete/upsert).\n   * Omitted on reads. `null` means the backend did not provide honest meta —\n   * never fabricated from returned-row length.\n   */\n  affectedRows?: number | null;\n  count?: number | null;\n  data: T | null;\n  error: AthenaResultError | null;\n  /**\n   * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n   */\n  errorDetails?: AthenaGatewayErrorDetails | null;\n  raw: unknown;\n  status: number;\n  statusText?: string | null;\n}\n\nexport interface AthenaResultError {\n  athenaCode: NormalizedAthenaError[\"code\"];\n  category: NormalizedAthenaError[\"category\"];\n  cause?: string;\n  code: string | null;\n  constraint?: string;\n  details: unknown | null;\n  endpoint?: AthenaGatewayErrorDetails[\"endpoint\"];\n  gatewayCode?: AthenaGatewayErrorDetails[\"code\"] | null;\n  hint: string | null;\n  kind: NormalizedAthenaError[\"kind\"];\n  message: string;\n  method?: AthenaGatewayErrorDetails[\"method\"];\n  operation?: string;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n  statusText: string | null;\n  table?: string;\n}\n\nexport type AthenaResultFormatter = <T>(\n  response: AthenaGatewayResponse<T>,\n  context?: AthenaOperationContext\n) => AthenaResult<T>;\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n  const result: AthenaResult<T> = {\n    data: response.data ?? null,\n    error: null,\n    errorDetails: response.errorDetails ?? null,\n    raw: response.raw,\n    status: response.status,\n    statusText: response.statusText ?? null,\n  };\n  if (response.count !== undefined) {\n    result.count = response.count;\n  }\n  if (response.affectedRows !== undefined) {\n    result.affectedRows = response.affectedRows;\n  }\n  return result;\n}\n\nfunction attachNormalizedError<T>(\n  result: AthenaResult<T>,\n  normalizedError: NormalizedAthenaError\n): void {\n  Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: normalizedError,\n    writable: false,\n  });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n  raw: unknown\n): Record<string, unknown> | null {\n  if (!isRecord(raw)) {\n    return null;\n  }\n  return isRecord(raw.error) ? raw.error : raw;\n}\n\nfunction resolveStructuredErrorDetails(\n  payload: Record<string, unknown> | null,\n  message: string\n): unknown | null {\n  if (!(payload && \"details\" in payload)) {\n    return null;\n  }\n  const details = payload.details;\n  if (details === null) {\n    return null;\n  }\n  if (typeof details === \"string\" && details.trim() === message.trim()) {\n    return null;\n  }\n  return details;\n}\n\nfunction createResultError<T>(\n  response: AthenaGatewayResponse<T>,\n  result: AthenaResult<T>,\n  normalized: NormalizedAthenaError\n): AthenaResultError {\n  const rawRecord = isRecord(response.raw) ? response.raw : null;\n  const payload = resolveStructuredErrorPayload(response.raw);\n  const message =\n    firstNonEmptyString(\n      response.error,\n      payload?.message,\n      payload?.error,\n      payload?.details,\n      response.errorDetails?.message,\n      normalized.message\n    ) ?? normalized.message;\n  const statusText =\n    firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null;\n  const hint =\n    firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null;\n  const code = firstNonEmptyString(payload?.code) ?? normalized.code;\n  const details =\n    resolveStructuredErrorDetails(payload, message) ??\n    response.errorDetails?.cause ??\n    null;\n\n  return {\n    athenaCode: normalized.code,\n    category: normalized.category,\n    cause: response.errorDetails?.cause,\n    code,\n    constraint: normalized.constraint,\n    details,\n    endpoint: response.errorDetails?.endpoint,\n    gatewayCode: response.errorDetails?.code ?? null,\n    hint,\n    kind: normalized.kind,\n    message,\n    method: response.errorDetails?.method,\n    operation: normalized.operation,\n    raw: result.raw,\n    requestId: response.errorDetails?.requestId,\n    retryable: normalized.retryable,\n    status: result.status,\n    statusText,\n    table: normalized.table,\n  };\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n  return <T>(\n    response: AthenaGatewayResponse<T>,\n    context?: AthenaOperationContext\n  ): AthenaResult<T> => {\n    const result = formatResult(response);\n    // D1 and some transports use `error: undefined` on success; only treat\n    // non-nullish error / errorDetails as failures.\n    if (response.error == null && response.errorDetails == null) {\n      return result;\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context\n    );\n    result.error = createResultError(response, result, normalizedError);\n    attachNormalizedError(result, normalizedError);\n    return result;\n  };\n}\n\nexport async function executeRead<T>(\n  behavior: { retryReads?: boolean } | undefined,\n  runner: () => Promise<AthenaResult<T>>\n): Promise<AthenaResult<T>> {\n  if (!behavior?.retryReads) {\n    return runner();\n  }\n\n  let lastRetryableResult: AthenaResult<T> | undefined;\n  let lastRetrySignal: AthenaResultError | null = null;\n  try {\n    return await withRetry(\n      {\n        ...READ_RETRY_CONFIG,\n        shouldRetry: (error) =>\n          error === lastRetrySignal || normalizeAthenaError(error).retryable,\n      },\n      async () => {\n        const result = await runner();\n        if (result.error?.retryable) {\n          lastRetryableResult = result;\n          lastRetrySignal = result.error;\n          throw lastRetrySignal;\n        }\n        return result;\n      }\n    );\n  } catch (error) {\n    if (lastRetryableResult && error === lastRetrySignal) {\n      return lastRetryableResult;\n    }\n    throw error;\n  }\n}\n\nexport function toSingleResult<Result>(\n  response: AthenaResult<Result>\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  const payload = response.data;\n  const singleData = Array.isArray(payload)\n    ? payload.length\n      ? payload[0]\n      : null\n    : (payload ?? null);\n  return {\n    ...response,\n    data: singleData as Result extends Array<infer Item>\n      ? Item | null\n      : Result | null,\n  };\n}\n\nexport type AthenaCardinalityMode = \"single\" | \"maybeSingle\";\n\n/**\n * `.single()` / `.maybeSingle()` projection — same as `toSingleResult`\n * (first row or `null`). Reads and mutations share this contract.\n * Tightening 0 / 2+ into errors is a follow-up ADR, not this surface.\n */\nexport function applyCardinality<Result>(\n  response: AthenaResult<Result>,\n  _mode: AthenaCardinalityMode\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  return toSingleResult(response);\n}\n","import type {\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./types.ts\";\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction isIdentifierPath(value: string): boolean {\n  const segments = value.split(\".\").map((segment) => segment.trim());\n  return (\n    segments.length > 1 &&\n    segments.every((segment) => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n  );\n}\n\nfunction extractRelationHead(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return \"\";\n  }\n\n  const aliasIndex = trimmed.indexOf(\":\");\n  const withoutAlias =\n    aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed;\n  const modifierIndex = withoutAlias.indexOf(\"!\");\n  return (\n    modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias\n  ).trim();\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let tokenStart = 0;\n\n  for (let index = 0; index < select.length; index += 1) {\n    const char = select[index];\n    const next = index + 1 < select.length ? select[index + 1] : \"\";\n\n    if (singleQuoted) {\n      if (char === \"'\" && next === \"'\") {\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      if (char === '\"' && next === '\"') {\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      continue;\n    }\n\n    if (char === '\"') {\n      doubleQuoted = true;\n      continue;\n    }\n\n    if (char === \"(\") {\n      const relationHead = extractRelationHead(select.slice(tokenStart, index));\n      if (isIdentifierPath(relationHead)) {\n        return true;\n      }\n      tokenStart = index + 1;\n      continue;\n    }\n\n    if (char === \",\" || char === \")\") {\n      tokenStart = index + 1;\n    }\n  }\n\n  return false;\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n  return Array.isArray(columns) ? columns.join(\",\") : columns;\n}\n\ntype StructuredWhereOperand =\n  | AthenaJsonValue\n  | AthenaJsonArray\n  | AthenaJsonObject;\n\nfunction buildStructuredWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): AthenaJsonObject | null | undefined {\n  if (!conditions?.length) {\n    return;\n  }\n\n  const where: AthenaJsonObject = {};\n\n  for (const condition of conditions) {\n    if (!condition.column) {\n      return null;\n    }\n    if (condition.value_cast !== undefined) {\n      return null;\n    }\n\n    const operand = condition.value as StructuredWhereOperand | undefined;\n    const operator = condition.operator;\n    if (operator === \"eq\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"neq\" || operator === \"gt\" || operator === \"lt\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"in\") {\n      if (!Array.isArray(operand)) {\n        return null;\n      }\n    } else {\n      return null;\n    }\n\n    const existing = where[condition.column];\n    if (\n      existing !== undefined &&\n      (typeof existing !== \"object\" ||\n        existing === null ||\n        Array.isArray(existing))\n    ) {\n      return null;\n    }\n\n    const next = (existing as AthenaJsonObject | undefined) ?? {};\n    if (Object.hasOwn(next, operator)) {\n      return null;\n    }\n    next[operator] = operand as AthenaJsonValue | AthenaJsonArray;\n    where[condition.column] = next;\n  }\n\n  return where;\n}\n\nfunction buildStructuredOrderBy(\n  order: AthenaSortBy | undefined\n): AthenaJsonObject | undefined {\n  if (!order?.field) {\n    return;\n  }\n  return {\n    [order.field]: order.direction === \"descending\" ? \"desc\" : \"asc\",\n  };\n}\n\nexport interface StructuredSelectTransportInput {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  count?: \"exact\" | \"planned\" | \"estimated\";\n  head?: boolean;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  stripNulls: boolean;\n  tableName: string;\n}\n\nexport interface StructuredSelectTransportResult {\n  payload: AthenaFetchPayload;\n  select: string;\n}\n\nexport function buildStructuredSelectTransport(\n  input: StructuredSelectTransportInput\n): StructuredSelectTransportResult | null | { error: string } {\n  const select = toStructuredSelectString(input.columns).trim();\n  if (!select || select === \"*\") {\n    return null;\n  }\n\n  if (!hasSchemaQualifiedRelationToken(select)) {\n    return null;\n  }\n\n  if (input.count !== undefined || input.head !== undefined) {\n    return {\n      error:\n        \"Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.\",\n    };\n  }\n\n  const where = buildStructuredWhere(input.conditions);\n  if (where === null) {\n    return {\n      error:\n        \"Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.\",\n    };\n  }\n\n  return {\n    payload: {\n      limit: input.limit,\n      offset: input.offset,\n      orderBy: buildStructuredOrderBy(input.order),\n      select,\n      strip_nulls: input.stripNulls,\n      table_name: input.tableName,\n      where,\n    },\n    select,\n  };\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelRelationMetadata,\n  RegistryDef,\n  RowOf,\n  SchemaDef,\n} from \"./schema/types.ts\";\nimport type {\n  AthenaColumnKey,\n  HasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>;\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>;\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : FilterColumnKey<Row>;\ntype KnownSelectColumnKey<Row> = AthenaColumnKey<Row>;\n\nconst UUID_PATTERN =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** findMany AST where operators. Fluent `.match` / `.or` / `.not` are not in this list. */\nexport const ATHENA_FILTER_OPERATORS = [\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] as const;\n\ntype AthenaFilterOperator = (typeof ATHENA_FILTER_OPERATORS)[number];\n\nconst ATHENA_ARRAY_FILTER_OPERATORS = [\n  \"in\",\n  \"contains\",\n  \"containedBy\",\n] as const satisfies readonly AthenaFilterOperator[];\n\ntype AthenaArrayFilterOperator = (typeof ATHENA_ARRAY_FILTER_OPERATORS)[number];\n\ntype AthenaWherePrimitive = AthenaConditionValue;\n\nexport type AthenaWhereOperatorInput = {\n  [K in AthenaFilterOperator]?: K extends AthenaArrayFilterOperator\n    ? AthenaConditionArrayValue\n    : AthenaConditionValue;\n};\n\nexport type AthenaRelationWhereInput<Row = AthenaRowShape> = {\n  every?: AthenaWhere<Row>;\n  exists?: true | Record<string, never>;\n  is?: AthenaWhere<Row> | null;\n  isNot?: AthenaWhere<Row> | null;\n  none?: AthenaWhere<Row>;\n  some?: AthenaWhere<Row>;\n};\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n  Record<\n    ResolvedFilterColumnKey<Row>,\n    AthenaWherePrimitive | AthenaWhereOperatorInput | AthenaRelationWhereInput\n  >\n>;\n\ntype AthenaBooleanSafeOperator = Exclude<\n  AthenaFilterOperator,\n  AthenaArrayFilterOperator\n>;\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n  Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>;\n\ntype AthenaWhereBooleanNotOperatorInput = {\n  [K in AthenaBooleanSafeOperator]: {\n    [P in K]: AthenaConditionValue;\n  } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>;\n}[AthenaBooleanSafeOperator];\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n  [K in Keys]: {\n    [P in K]: Value;\n  } & Partial<Record<Exclude<Keys, K>, never>>;\n}[Keys];\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]];\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n      >;\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n      >;\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n  or?: string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>[]\n    : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>;\n  not?: AthenaWhereNotOperand<Row>;\n};\n\nexport interface AthenaRelationSelectNode<\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  as?: string;\n  limit?: number;\n  offset?: number;\n  orderBy?: AthenaOrderBy;\n  schema?: string;\n  select: TSelect;\n  via?: string;\n  where?: AthenaWhere;\n}\n\nexport type AthenaSelectShape = Record<\n  string,\n  true | AthenaRelationSelectNode<AthenaSelectShape>\n>;\n\ntype AthenaAllowedRelationSelectNodeKey =\n  | \"select\"\n  | \"as\"\n  | \"via\"\n  | \"schema\"\n  | \"where\"\n  | \"orderBy\"\n  | \"limit\"\n  | \"offset\";\n\n/**\n * Structural validation only (relation node shape). Nested relation target rows\n * are not model-checked here unless a richer context path is wired later.\n */\ntype AthenaStructuralValidatedSelectShape<TSelect> = {\n  [K in keyof TSelect]: TSelect[K] extends true\n    ? true\n    : AthenaValidatedRelationSelectNode<TSelect[K]>;\n};\n\ntype AthenaValidatedRelationSelectNode<TNode> = TNode extends {\n  select: infer TChild;\n}\n  ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n    ? TNode extends { schema: string; via: string }\n      ? never\n      : TChild extends Record<string, unknown>\n        ? {\n            [K in keyof TNode]: K extends \"select\"\n              ? AthenaStructuralValidatedSelectShape<TChild>\n              : K extends AthenaAllowedRelationSelectNodeKey\n                ? TNode[K]\n                : never;\n          }\n        : never\n    : never\n  : never;\n\n/**\n * Compile-time validation for `findMany({ select })`.\n *\n * - When `Row` has known model keys: scalar `true` entries must use those keys.\n * - Relation nodes (`{ select: ... }`) keep structural validation and may use\n *   non-row keys (relation names are not row columns).\n * - When `Row` is untyped: free-form keys (same as pre-model behavior).\n */\nexport type AthenaValidatedSelectShape<Row, TSelect> =\n  HasKnownSelectColumns<Row> extends true\n    ? {\n        [K in keyof TSelect]: TSelect[K] extends true\n          ? K extends KnownSelectColumnKey<Row>\n            ? true\n            : never\n          : AthenaValidatedRelationSelectNode<TSelect[K]>;\n      }\n    : AthenaStructuralValidatedSelectShape<TSelect>;\n\ntype GenericRegistryDef = RegistryDef<\n  Record<\n    string,\n    DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>\n  >\n>;\n\ntype AthenaOrderByDirectionInput =\n  | \"asc\"\n  | \"desc\"\n  | \"ascending\"\n  | \"descending\"\n  | boolean\n  | {\n      ascending?: boolean;\n    };\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n  | {\n      column: ResolvedFilterColumnKey<Row>;\n      ascending?: boolean;\n    }\n  | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>;\n\nexport interface AthenaFindManyOptions<\n  Row = AthenaRowShape,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  /**\n   * Object select tree. Callers should pass through `findMany(...)`, which\n   * intersects this with `AthenaValidatedSelectShape<Row, TSelect>` so model\n   * column keys are checked after `TSelect` is inferred from the literal.\n   */\n  select: TSelect;\n  where?: AthenaWhere<Row>;\n}\n\ninterface AthenaModelContext<\n  TRegistry extends GenericRegistryDef = GenericRegistryDef,\n  TDatabase extends string = string,\n  TSchema extends string = string,\n  TModel extends AnyModelDef = AnyModelDef,\n> {\n  database: TDatabase;\n  model: TModel;\n  registry: TRegistry;\n  schema: TSchema;\n}\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K];\n} & {};\n\ntype ContextRegistry<TContext> =\n  TContext extends AthenaModelContext<\n    infer TRegistry,\n    string,\n    string,\n    AnyModelDef\n  >\n    ? TRegistry\n    : never;\n\ntype ContextDatabase<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    infer TDatabase,\n    string,\n    AnyModelDef\n  >\n    ? TDatabase\n    : never;\n\ntype ContextModel<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    string,\n    string,\n    infer TModel\n  >\n    ? TModel\n    : never;\n\ntype ModelMetaOf<TContext> =\n  ContextModel<TContext> extends ModelDef<\n    unknown,\n    unknown,\n    unknown,\n    infer TMeta\n  >\n    ? TMeta\n    : never;\n\ntype ModelRelationsOf<TContext> = NonNullable<\n  ModelMetaOf<TContext>[\"relations\"]\n>;\n\ntype SelectedResultKey<TKey extends string, TValue> = TValue extends {\n  as: infer TAlias extends string;\n}\n  ? TAlias\n  : TKey;\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true\n    ? TKey\n    : never]-?: TKey extends keyof NonNullable<Row>\n    ? NonNullable<Row>[TKey]\n    : unknown;\n};\n\ntype RelationByKey<\n  TContext,\n  TKey extends string,\n> = TKey extends keyof ModelRelationsOf<TContext>\n  ? ModelRelationsOf<TContext>[TKey]\n  : never;\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TVia extends TRelation[\"sourceColumns\"][number]\n        ? TRelation\n        : never\n      : never\n    : never;\n}[keyof ModelRelationsOf<TContext>];\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> =\n  RelationByKey<TContext, TKey> extends never\n    ? TValue extends { via: infer TVia extends string }\n      ? RelationByVia<TContext, TVia>\n      : never\n    : RelationByKey<TContext, TKey>;\n\ntype TargetDatabaseName<\n  TContext,\n  TRelation extends ModelRelationMetadata,\n> = TRelation[\"targetDatabase\"] extends string\n  ? TRelation[\"targetDatabase\"]\n  : ContextDatabase<TContext>;\n\ntype ResolveTargetModel<TContext, TRelation extends ModelRelationMetadata> =\n  ContextRegistry<TContext> extends infer TRegistry\n    ? TRegistry extends GenericRegistryDef\n      ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n        ? TRelation[\"targetSchema\"] extends keyof TRegistry[TargetDatabaseName<\n            TContext,\n            TRelation\n          >][\"schemas\"] &\n            string\n          ? TRelation[\"targetModel\"] extends keyof TRegistry[TargetDatabaseName<\n              TContext,\n              TRelation\n            >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"] &\n              string\n            ? TRegistry[TargetDatabaseName<\n                TContext,\n                TRelation\n              >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"][TRelation[\"targetModel\"]]\n            : never\n          : never\n        : never\n      : never\n    : never;\n\ntype RelationResultValue<\n  TRelation extends ModelRelationMetadata,\n  TValue,\n  TContext,\n> =\n  TValue extends AthenaRelationSelectNode<infer TChildSelect>\n    ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n      ? TTargetModel extends AnyModelDef\n        ? TRelation[\"kind\"] extends \"one-to-many\" | \"many-to-many\"\n          ? AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            >[]\n          : AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            > | null\n        : unknown\n      : unknown\n    : never;\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<\n    keyof TSelect,\n    string\n  > as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n    ? SelectedResultKey<TKey, TSelect[TKey]>\n    : never]-?: ResolvedRelation<\n    TContext,\n    TKey,\n    TSelect[TKey]\n  > extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n      : unknown\n    : unknown;\n};\n\nexport type AthenaFindManyResult<\n  Row,\n  TSelect extends AthenaSelectShape,\n  TContext = unknown,\n> = Simplify<\n  ScalarSelectionResult<Row, TSelect> &\n    RelationSelectionResult<TContext, TSelect>\n>;\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>(ATHENA_FILTER_OPERATORS);\n\nconst ARRAY_FILTER_OPERATORS = new Set<AthenaArrayFilterOperator>(\n  ATHENA_ARRAY_FILTER_OPERATORS\n);\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>(\n  ATHENA_FILTER_OPERATORS.filter(\n    (op): op is AthenaBooleanSafeOperator =>\n      !ATHENA_ARRAY_FILTER_OPERATORS.includes(op as AthenaArrayFilterOperator)\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 isUuidString(value: string): boolean {\n  return UUID_PATTERN.test(value.trim());\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n  return (\n    column === \"id\" ||\n    /(?:^|_)uuid(?:_|$)/i.test(column) ||\n    /_id$/i.test(column)\n  );\n}\n\nexport function shouldUseUuidTextComparison(\n  column: string,\n  value: AthenaConditionValue\n): boolean {\n  return (\n    typeof value === \"string\" &&\n    isUuidString(value) &&\n    isUuidIdentifierColumn(column)\n  );\n}\n\nfunction isRelationSelectNode(\n  value: unknown\n): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} must be a non-empty string`);\n  }\n  return normalized;\n}\n\nfunction stringifyFilterValue(\n  value: AthenaConditionValue | AthenaConditionArrayValue | string\n): string {\n  if (Array.isArray(value)) {\n    return value.join(\",\");\n  }\n  return String(value);\n}\n\nfunction buildGatewayCondition(\n  operator: AthenaConditionOperator,\n  column?: string,\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string\n): AthenaGatewayCondition {\n  const condition: AthenaGatewayCondition = { operator };\n  if (column) {\n    condition.column = column;\n    if (operator === \"eq\") {\n      condition.eq_column = column;\n    }\n  }\n  if (value !== undefined) {\n    condition.value = value;\n    if (operator === \"eq\") {\n      condition.eq_value = value;\n    }\n  }\n  if (\n    operator === \"eq\" &&\n    column &&\n    value !== undefined &&\n    shouldUseUuidTextComparison(column, value as AthenaConditionValue)\n  ) {\n    condition.column_cast = \"text\";\n    condition.eq_column_cast = \"text\";\n  }\n  return condition;\n}\n\nfunction compileRelationToken(\n  key: string,\n  node: AthenaRelationSelectNode\n): string {\n  const nested = compileSelectShape(node.select);\n  const propertyKey = normalizeIdentifier(key, \"select relation key\");\n  if (node.schema && node.via) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`\n    );\n  }\n\n  const relationTokenBase = normalizeIdentifier(\n    node.via ?? propertyKey,\n    \"select relation token\"\n  );\n  if (node.schema && relationTokenBase.includes(\".\")) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`\n    );\n  }\n\n  const relationSchema = node.schema?.trim();\n  const relationToken = relationSchema\n    ? `${normalizeIdentifier(relationSchema, \"select relation schema\")}.${relationTokenBase}`\n    : relationTokenBase;\n  const alias =\n    node.as?.trim() || (relationToken === propertyKey ? \"\" : propertyKey);\n  const prefix = alias ? `${alias}:` : \"\";\n  return `${prefix}${relationToken}(${nested})`;\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n  if (!isRecord(select)) {\n    throw new Error(\"findMany select must be an object\");\n  }\n\n  // Emit scalar columns before relation tokens so gateway select lists stay\n  // stable regardless of object key insertion order (relations often declared first).\n  const columns: string[] = [];\n  const relations: string[] = [];\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawValue === true) {\n      columns.push(normalizeIdentifier(rawKey, \"select column\"));\n      continue;\n    }\n\n    if (isRelationSelectNode(rawValue)) {\n      relations.push(compileRelationToken(rawKey, rawValue));\n      continue;\n    }\n\n    throw new Error(`Unsupported select node for \"${rawKey}\"`);\n  }\n\n  const tokens = [...columns, ...relations];\n  if (tokens.length === 0) {\n    throw new Error(\"findMany select requires at least one field\");\n  }\n\n  return tokens.join(\",\");\n}\n\nexport function selectShapeUsesRelationSchema(\n  select: AthenaSelectShape\n): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (\n      typeof rawValue.schema === \"string\" &&\n      rawValue.schema.trim().length > 0\n    ) {\n      return true;\n    }\n    if (selectShapeUsesRelationSchema(rawValue.select)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function selectShapeHasNestedQueryModifiers(\n  select: AthenaSelectShape\n): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (\n      rawValue.where !== undefined ||\n      rawValue.orderBy !== undefined ||\n      rawValue.limit !== undefined ||\n      rawValue.offset !== undefined\n    ) {\n      return true;\n    }\n    if (selectShapeHasNestedQueryModifiers(rawValue.select)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction compileColumnWhere(\n  column: string,\n  input: AthenaWherePrimitive | AthenaWhereOperatorInput\n): AthenaGatewayCondition[] {\n  const normalizedColumn = normalizeIdentifier(column, \"where column\");\n  if (!isRecord(input)) {\n    return [\n      buildGatewayCondition(\n        \"eq\",\n        normalizedColumn,\n        input as AthenaConditionValue | AthenaConditionArrayValue | undefined\n      ),\n    ];\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawOperator, rawValue] of Object.entries(input)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n    if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n      throw new Error(\n        `Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`\n      );\n    }\n    if (\n      ARRAY_FILTER_OPERATORS.has(rawOperator as AthenaArrayFilterOperator) &&\n      !Array.isArray(rawValue)\n    ) {\n      throw new Error(\n        `where.${normalizedColumn}.${rawOperator} requires an array value`\n      );\n    }\n    conditions.push(\n      buildGatewayCondition(\n        rawOperator as AthenaFilterOperator,\n        normalizedColumn,\n        rawValue as AthenaConditionValue | AthenaConditionArrayValue\n      )\n    );\n  }\n\n  if (conditions.length === 0) {\n    throw new Error(`where.${normalizedColumn} requires at least one operator`);\n  }\n\n  return conditions;\n}\n\nfunction compileBooleanExpressionTerms(\n  clause: AthenaWhereBooleanOperand,\n  label: \"or\" | \"not\"\n): string[] {\n  if (!isRecord(clause)) {\n    throw new Error(`findMany where.${label} clauses must be objects`);\n  }\n\n  const entries = Object.entries(clause).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length !== 1) {\n    throw new Error(\n      `findMany where.${label} clauses must target exactly one column`\n    );\n  }\n\n  const [rawColumn, rawValue] = entries[0];\n  const column = normalizeIdentifier(rawColumn, `where.${label} column`);\n\n  if (!isRecord(rawValue)) {\n    return [\n      `${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`,\n    ];\n  }\n\n  const operatorEntries = Object.entries(rawValue).filter(\n    ([, value]) => value !== undefined\n  );\n  if (operatorEntries.length === 0) {\n    throw new Error(\n      `findMany where.${label}.${column} requires at least one operator`\n    );\n  }\n\n  if (label === \"not\" && operatorEntries.length > 1) {\n    throw new Error(\n      \"findMany where.not only supports a single lossless operator expression\"\n    );\n  }\n\n  return operatorEntries.map(([rawOperator, rawOperand]) => {\n    if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n      throw new Error(\n        `findMany where.${label} only supports lossless scalar operators`\n      );\n    }\n    if (Array.isArray(rawOperand)) {\n      throw new Error(\n        `findMany where.${label} does not support array-valued operators`\n      );\n    }\n    return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`;\n  });\n}\n\nexport function compileWhere(\n  where?: AthenaWhere\n): AthenaGatewayCondition[] | undefined {\n  if (where === undefined) {\n    return;\n  }\n  if (!isRecord(where)) {\n    throw new Error(\"findMany where must be an object\");\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawKey, rawValue] of Object.entries(where)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawKey === \"or\") {\n      if (!Array.isArray(rawValue) || rawValue.length === 0) {\n        throw new Error(\"findMany where.or must be a non-empty array\");\n      }\n      const expressions = rawValue.flatMap((value) =>\n        compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, \"or\")\n      );\n      conditions.push(\n        buildGatewayCondition(\"or\", undefined, expressions.join(\",\"))\n      );\n      continue;\n    }\n\n    if (rawKey === \"not\") {\n      const expressions = compileBooleanExpressionTerms(\n        rawValue as AthenaWhereBooleanOperand,\n        \"not\"\n      );\n      if (expressions.length !== 1) {\n        throw new Error(\n          \"findMany where.not must compile to exactly one lossless expression\"\n        );\n      }\n      conditions.push(buildGatewayCondition(\"not\", undefined, expressions[0]));\n      continue;\n    }\n\n    conditions.push(\n      ...compileColumnWhere(\n        rawKey,\n        rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput\n      )\n    );\n  }\n\n  return conditions.length > 0 ? conditions : undefined;\n}\n\nfunction resolveOrderDirection(\n  input: AthenaOrderByDirectionInput\n): AthenaSortBy[\"direction\"] {\n  if (typeof input === \"boolean\") {\n    return input === false ? \"descending\" : \"ascending\";\n  }\n  if (typeof input === \"string\") {\n    const normalized = input.trim().toLowerCase();\n    if (normalized === \"asc\" || normalized === \"ascending\") {\n      return \"ascending\";\n    }\n    if (normalized === \"desc\" || normalized === \"descending\") {\n      return \"descending\";\n    }\n    throw new Error(`Unsupported orderBy direction \"${input}\"`);\n  }\n  return input.ascending === false ? \"descending\" : \"ascending\";\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(\n  orderBy?: AthenaOrderBy<Row>\n): AthenaSortBy | undefined {\n  if (orderBy === undefined) {\n    return;\n  }\n  if (!isRecord(orderBy)) {\n    throw new Error(\"findMany orderBy must be an object\");\n  }\n\n  if (\"column\" in orderBy) {\n    return {\n      direction: orderBy.ascending === false ? \"descending\" : \"ascending\",\n      field: normalizeIdentifier(String(orderBy.column), \"orderBy column\"),\n    };\n  }\n\n  const entries = Object.entries(orderBy).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length === 0) {\n    return;\n  }\n  if (entries.length > 1) {\n    throw new Error(\"findMany orderBy only supports a single column in v1\");\n  }\n\n  const [column, input] = entries[0];\n  return {\n    direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n    field: normalizeIdentifier(column, \"orderBy column\"),\n  };\n}\n","import type { AthenaSelectShape } from \"../query-ast.ts\";\nimport { compileSelectShape } from \"../query-ast.ts\";\nimport type { AthenaRelationDescriptor } from \"./descriptor.ts\";\n\nfunction relationEmbedToken(relation: AthenaRelationDescriptor): string {\n  const table =\n    relation.via?.trim() || relation.targetModel?.trim() || relation.name;\n  const schema = relation.targetSchema?.trim();\n  return schema ? `${schema}.${table}` : table;\n}\n\nfunction relationSelectShape(\n  relation: AthenaRelationDescriptor,\n): AthenaSelectShape {\n  if (relation.star || !relation.columns?.length) {\n    return { \"*\": true };\n  }\n  return Object.fromEntries(relation.columns.map((column) => [column, true]));\n}\n\n/**\n * Merge root projection + consumed `.include()` relations into a gateway\n * nested-select string (`id,name,organization:public.orgs(id,name)`).\n */\nexport function compileIncludeSelectString(\n  columns: string | string[],\n  relations: readonly AthenaRelationDescriptor[] | undefined,\n): string {\n  if (!relations?.length) {\n    return Array.isArray(columns) ? columns.join(\",\") : columns;\n  }\n\n  const shape: AthenaSelectShape = {};\n  const rawColumns = (Array.isArray(columns) ? columns : [columns])\n    .map((column) => column.trim())\n    .filter(Boolean);\n  const isStar =\n    rawColumns.length === 0 || rawColumns.some((column) => column === \"*\");\n\n  if (isStar) {\n    shape[\"*\"] = true;\n  } else {\n    for (const column of rawColumns) {\n      shape[column] = true;\n    }\n  }\n\n  for (const relation of relations) {\n    const embed = relationEmbedToken(relation);\n    shape[relation.name] = {\n      as: relation.name === embed ? undefined : relation.name,\n      select: relationSelectShape(relation),\n      via: embed,\n    };\n  }\n\n  return compileSelectShape(shape);\n}\n\nexport function selectStringHasRelationEmbed(select: string): boolean {\n  return /[A-Za-z_][\\w.]*\\s*\\([^)]*\\)/.test(select);\n}\n","import { buildStructuredSelectTransport } from \"./gateway/structured-select.ts\";\nimport type { AthenaRelationDescriptor } from \"./query/descriptor.ts\";\nimport { compileIncludeSelectString } from \"./query/include-select.ts\";\nimport type {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from \"./query-ast.ts\";\nimport { shouldUseUuidTextComparison } from \"./query-ast.ts\";\n\ntype AthenaFindManyAstOrderColumn<Row> = [\n  Extract<keyof NonNullable<Row>, string>,\n] extends [never]\n  ? string\n  : Extract<keyof NonNullable<Row>, string>;\n\nexport interface AthenaSelectExecutionState {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  relations?: AthenaRelationDescriptor[];\n  totalPages?: number;\n}\n\nexport interface AthenaFindManyAstPayload<\n  Row,\n  TSelect extends AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  select: TSelect;\n  table_name: string;\n  where?: AthenaWhere<Row>;\n}\n\nexport interface AthenaResolvedPagination {\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaTypedSelectQueryInput {\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  tableName: string;\n}\n\nexport interface AthenaSelectDebugPlan {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n}\n\nexport type AthenaSelectTransportPlan =\n  | {\n      kind: \"query\";\n      query: string;\n      payload: {\n        query: string;\n      };\n    }\n  | {\n      kind: \"fetch\";\n      payload: AthenaFetchPayload;\n      debug: AthenaSelectDebugPlan;\n    };\n\nexport function canUseFindManyAstTransport(\n  state: AthenaSelectExecutionState\n): boolean {\n  return (\n    state.conditions.length === 0 &&\n    state.offset === undefined &&\n    state.currentPage === undefined &&\n    state.pageSize === undefined &&\n    state.totalPages === undefined\n  );\n}\n\nexport function toFindManyAstOrder<Row>(\n  order?: AthenaSortBy\n): AthenaOrderBy<Row> | undefined {\n  if (!order) {\n    return;\n  }\n  return {\n    ascending: order.direction !== \"descending\",\n    column: order.field as AthenaFindManyAstOrderColumn<Row>,\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n  value: unknown\n): AthenaWhereOperatorInput {\n  if (!isRecord(value)) {\n    return {\n      eq: value as AthenaWhereOperatorInput[\"eq\"],\n    };\n  }\n\n  const normalized: AthenaWhereOperatorInput = {};\n  for (const [key, operand] of Object.entries(value)) {\n    if (operand !== undefined) {\n      normalized[key as keyof AthenaWhereOperatorInput] = operand as never;\n    }\n  }\n  return normalized;\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): AthenaWhereBooleanOperand<Row> {\n  const normalized: Record<string, unknown> = {};\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    normalized[column] = normalizeFindManyAstColumnPredicate(value);\n  }\n  return normalized as AthenaWhereBooleanOperand<Row>;\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n  where?: AthenaWhere<Row>\n): AthenaWhere<Row> | undefined {\n  if (!(where && isRecord(where))) {\n    return where;\n  }\n\n  const normalized: AthenaJsonObject = {};\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      normalized.or = value.map((clause) =>\n        normalizeFindManyAstBooleanOperand(\n          clause as AthenaWhereBooleanOperand<Row>\n        )\n      ) as unknown as AthenaJsonObject[\"or\"];\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      normalized.not = normalizeFindManyAstBooleanOperand(\n        value as AthenaWhereBooleanOperand<Row>\n      ) as unknown as AthenaJsonObject[\"not\"];\n      continue;\n    }\n    normalized[key] = normalizeFindManyAstColumnPredicate(\n      value\n    ) as AthenaJsonValue;\n  }\n\n  return normalized as AthenaWhere<Row>;\n}\n\nfunction predicateRequiresUuidQueryFallback(\n  column: string,\n  value: unknown\n): boolean {\n  if (!isRecord(value)) {\n    return shouldUseUuidTextComparison(\n      column,\n      value as Parameters<typeof shouldUseUuidTextComparison>[1]\n    );\n  }\n\n  const eqValue = value.eq;\n  return (\n    eqValue !== undefined &&\n    shouldUseUuidTextComparison(\n      column,\n      eqValue as Parameters<typeof shouldUseUuidTextComparison>[1]\n    )\n  );\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): boolean {\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(column, value)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n  where?: AthenaWhere<Row>\n): boolean {\n  if (!(where && isRecord(where))) {\n    return false;\n  }\n\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      if (\n        value.some((clause) =>\n          booleanOperandRequiresUuidQueryFallback(\n            clause as AthenaWhereBooleanOperand<Row>\n          )\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      if (\n        booleanOperandRequiresUuidQueryFallback(\n          value as AthenaWhereBooleanOperand<Row>\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(key, value)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function resolvePagination(input: {\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n}): AthenaResolvedPagination {\n  let limit = input.limit;\n  let offset = input.offset;\n\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(input.pageSize));\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset =\n      (Math.trunc(input.currentPage) - 1) *\n      Math.max(0, Math.trunc(input.pageSize));\n  }\n\n  return { limit, offset };\n}\n\nfunction hasTypedEqualityComparison(\n  conditions: AthenaGatewayCondition[] | undefined\n): boolean {\n  return (\n    conditions?.some(\n      (condition) =>\n        condition.operator === \"eq\" &&\n        (condition.value_cast !== undefined ||\n          condition.column_cast !== undefined)\n    ) ?? false\n  );\n}\n\nexport function createSelectTransportPlan(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaSelectExecutionState;\n  options?: AthenaGatewayCallOptions;\n  buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null;\n}): AthenaSelectTransportPlan {\n  const conditions = input.state.conditions.length\n    ? input.state.conditions.map((condition) => ({ ...condition }))\n    : undefined;\n\n  const pagination = resolvePagination({\n    currentPage: input.state.currentPage,\n    limit: input.state.limit,\n    offset: input.state.offset,\n    pageSize: input.state.pageSize,\n  });\n  const stripNulls = input.options?.stripNulls ?? true;\n  const includeSelect =\n    input.state.relations && input.state.relations.length > 0\n      ? compileIncludeSelectString(input.columns, input.state.relations)\n      : undefined;\n  if (includeSelect) {\n    const where = conditions\n      ? Object.fromEntries(\n          conditions\n            .filter((condition) => condition.column && condition.operator === \"eq\")\n            .map((condition) => [\n              condition.column as string,\n              { eq: condition.value ?? null },\n            ])\n        )\n      : undefined;\n    return {\n      debug: {\n        columns: includeSelect,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n      kind: \"fetch\",\n      payload: {\n        limit: pagination.limit,\n        offset: pagination.offset,\n        orderBy: input.state.order\n          ? {\n              [input.state.order.field]:\n                input.state.order.direction === \"descending\" ? \"desc\" : \"asc\",\n            }\n          : undefined,\n        select: includeSelect,\n        strip_nulls: stripNulls,\n        table_name: input.tableName,\n        where,\n      },\n    };\n  }\n  const structuredSelectTransport = buildStructuredSelectTransport({\n    columns: input.columns,\n    conditions,\n    count: input.options?.count,\n    head: input.options?.head,\n    limit: pagination.limit,\n    offset: pagination.offset,\n    order: input.state.order,\n    stripNulls,\n    tableName: input.tableName,\n  });\n  if (structuredSelectTransport && \"error\" in structuredSelectTransport) {\n    throw new Error(structuredSelectTransport.error);\n  }\n  if (structuredSelectTransport) {\n    const { payload, select } = structuredSelectTransport;\n    return {\n      debug: {\n        columns: select,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n      kind: \"fetch\",\n      payload,\n    };\n  }\n\n  if (\n    hasTypedEqualityComparison(conditions) &&\n    !input.options?.head &&\n    !input.options?.count &&\n    conditions\n  ) {\n    const query = input.buildTypedSelectQuery({\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n      tableName: input.tableName,\n    });\n    if (query) {\n      return {\n        kind: \"query\",\n        payload: { query },\n        query,\n      };\n    }\n  }\n\n  return {\n    debug: {\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n    },\n    kind: \"fetch\",\n    payload: {\n      columns: input.columns,\n      conditions,\n      count: input.options?.count,\n      current_page: input.state.currentPage,\n      head: input.options?.head,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      page_size: input.state.pageSize,\n      sort_by: input.state.order,\n      strip_nulls: stripNulls,\n      table_name: input.tableName,\n      total_pages: input.state.totalPages,\n    },\n  };\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst COMPOSITE_IDENTIFIER_PATTERN =\n  /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i;\n\nfunction quoteIdentifierSegment(identifier: string): string {\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction parseAliasedIdentifierToken(\n  token: string\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    if (\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    ) {\n      return { aliasIdentifier, baseIdentifier };\n    }\n  }\n\n  const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token);\n  if (!sqlAliasMatch) {\n    return null;\n  }\n\n  const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch;\n  if (\n    !(\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    )\n  ) {\n    return null;\n  }\n\n  return { aliasIdentifier, baseIdentifier };\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n  return identifier\n    .split(\".\")\n    .map((segment) => quoteIdentifierSegment(segment))\n    .join(\".\");\n}\n\nfunction quoteSelectToken(token: string): string {\n  if (token === \"*\") {\n    return token;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return quoteQualifiedIdentifier(token);\n  }\n\n  const aliasedIdentifier = parseAliasedIdentifierToken(token);\n  if (!aliasedIdentifier) {\n    return token;\n  }\n  const { baseIdentifier, aliasIdentifier } = aliasedIdentifier;\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n  }\n\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n  if (token === \"*\") {\n    return true;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return true;\n  }\n  return parseAliasedIdentifierToken(token) !== null;\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n  const parts: string[] = [];\n  let buffer = \"\";\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let depth = 0;\n\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index];\n    const next = index + 1 < input.length ? input[index + 1] : \"\";\n\n    if (singleQuoted) {\n      buffer += char;\n      if (char === \"'\" && next === \"'\") {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      buffer += char;\n      if (char === '\"' && next === '\"') {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      buffer += char;\n      continue;\n    }\n    if (char === '\"') {\n      doubleQuoted = true;\n      buffer += char;\n      continue;\n    }\n\n    if (char === \"(\") {\n      depth += 1;\n      buffer += char;\n      continue;\n    }\n    if (char === \")\") {\n      depth -= 1;\n      if (depth < 0) {\n        return null;\n      }\n      buffer += char;\n      continue;\n    }\n\n    if (char === \",\" && depth === 0) {\n      parts.push(buffer.trim());\n      buffer = \"\";\n      continue;\n    }\n\n    buffer += char;\n  }\n\n  if (singleQuoted || doubleQuoted || depth !== 0) {\n    return null;\n  }\n\n  if (buffer.trim().length > 0) {\n    parts.push(buffer.trim());\n  }\n\n  return parts;\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n  const trimmed = columns.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const tokens = splitTopLevelCommaSeparated(trimmed);\n  if (!tokens || tokens.length === 0) {\n    return trimmed;\n  }\n\n  if (!tokens.every(canAutoQuoteToken)) {\n    return trimmed;\n  }\n\n  return tokens.map(quoteSelectToken).join(\", \");\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n  readonly segments: string[];\n  toSql: () => string;\n  toString: () => string;\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n  readonly segments: string[];\n\n  constructor(segments: string[]) {\n    this.segments = segments;\n  }\n\n  toSql(): string {\n    return this.segments.map(quoteIdentifierSegment).join(\".\");\n  }\n\n  toString(): string {\n    return this.toSql();\n  }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n  const expandedSegments = segments\n    .flatMap((segment) => segment.split(\".\"))\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\n  return new SqlIdentifierPath(expandedSegments);\n}\n","import type {\n\tAthenaConditionCastType,\n\tAthenaConditionValue,\n\tAthenaDeletePayload,\n\tAthenaGatewayCondition,\n\tAthenaInsertPayload,\n\tAthenaJsonValue,\n\tAthenaRpcFilter,\n\tAthenaRpcPayload,\n\tAthenaSortBy,\n\tAthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport { resolvePagination } from \"./query-transport.ts\";\nimport {\n\tquoteQualifiedIdentifier,\n\tquoteSelectColumnsExpression,\n\tquoteSelectColumnToken,\n} from \"./sql-identifiers.ts\";\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i;\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n\tconst normalized = cast.trim().toLowerCase();\n\tif (!SAFE_CAST_PATTERN.test(normalized)) {\n\t\tthrow new Error(`Invalid cast type \"${cast}\"`);\n\t}\n\treturn normalized;\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n\treturn value.replace(/'/g, \"''\");\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n\tif (value === null) {\n\t\treturn \"NULL\";\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? String(value) : \"NULL\";\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn value ? \"TRUE\" : \"FALSE\";\n\t}\n\treturn `'${escapeSqlStringLiteral(value)}'`;\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n\tif (!cast) {\n\t\treturn expression;\n\t}\n\treturn `${expression}::${normalizeCast(cast)}`;\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n\tif (Array.isArray(columns)) {\n\t\treturn columns.map((column) => quoteSelectColumnToken(column)).join(\", \");\n\t}\n\treturn quoteSelectColumnsExpression(columns);\n}\n\ninterface ParsedIdentifierSegment {\n\tnormalizedValue: string;\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n\tconst trimmed = input.trim();\n\tif (!trimmed) {\n\t\treturn null;\n\t}\n\n\tif (!trimmed.startsWith('\"')) {\n\t\treturn {\n\t\t\tnormalizedValue: trimmed.toLowerCase(),\n\t\t};\n\t}\n\n\tlet value = \"\";\n\tlet index = 1;\n\tlet closed = false;\n\twhile (index < trimmed.length) {\n\t\tconst char = trimmed[index];\n\t\tconst next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n\t\tif (char === '\"' && next === '\"') {\n\t\t\tvalue += '\"';\n\t\t\tindex += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === '\"') {\n\t\t\tclosed = true;\n\t\t\tindex += 1;\n\t\t\tbreak;\n\t\t}\n\t\tvalue += char;\n\t\tindex += 1;\n\t}\n\n\tif (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tnormalizedValue: value,\n\t};\n}\n\nfunction splitQualifiedTableName(\n\ttableName: string,\n): { schemaSegment: string } | null {\n\tconst trimmed = tableName.trim();\n\tlet inQuotes = false;\n\tfor (let index = 0; index < trimmed.length; index += 1) {\n\t\tconst char = trimmed[index];\n\t\tconst next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n\t\tif (char === '\"') {\n\t\t\tif (inQuotes && next === '\"') {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tinQuotes = !inQuotes;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \".\" && !inQuotes) {\n\t\t\tconst schemaSegment = trimmed.slice(0, index).trim();\n\t\t\tconst tableSegment = trimmed.slice(index + 1).trim();\n\t\t\tif (!(schemaSegment && tableSegment)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn { schemaSegment };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function resolveTableNameForCall(\n\ttableName: string,\n\tschema: string | undefined,\n): string {\n\tif (!schema) {\n\t\treturn tableName;\n\t}\n\tconst normalizedSchema = schema.trim();\n\tif (!normalizedSchema) {\n\t\tthrow new Error(\"schema option must be a non-empty string\");\n\t}\n\tconst normalizedTableName = tableName.trim();\n\tconst parsedSchema = parseIdentifierSegment(normalizedSchema);\n\tif (!parsedSchema) {\n\t\tthrow new Error(\"schema option must be a non-empty string\");\n\t}\n\tconst qualified = splitQualifiedTableName(normalizedTableName);\n\tif (qualified) {\n\t\tconst parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment);\n\t\tconst sameSchema = parsedTableSchema\n\t\t\t? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n\t\t\t: normalizedTableName.startsWith(`${normalizedSchema}.`);\n\t\tif (sameSchema) {\n\t\t\treturn normalizedTableName;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\n\t\t);\n\t}\n\treturn `${normalizedSchema}.${normalizedTableName}`;\n}\n\nfunction conditionToSqlClause(\n\tcondition: AthenaGatewayCondition,\n): string | null {\n\tif (!condition.column) {\n\t\treturn null;\n\t}\n\tconst column = withCast(\n\t\tquoteQualifiedIdentifier(condition.column),\n\t\tcondition.column_cast,\n\t);\n\tconst value = condition.value;\n\tconst sqlOperator = {\n\t\teq: \"=\",\n\t\tgt: \">\",\n\t\tgte: \">=\",\n\t\tilike: \"ILIKE\",\n\t\tlike: \"LIKE\",\n\t\tlt: \"<\",\n\t\tlte: \"<=\",\n\t\tneq: \"!=\",\n\t} as const;\n\n\tswitch (condition.operator) {\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\": {\n\t\t\tif (Array.isArray(value) || value === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst rhs = withCast(toSqlLiteral(value), condition.value_cast);\n\t\t\treturn `${column} ${sqlOperator[condition.operator]} ${rhs}`;\n\t\t}\n\t\tcase \"is\": {\n\t\t\tif (value === null) {\n\t\t\t\treturn `${column} IS NULL`;\n\t\t\t}\n\t\t\tif (value === true) {\n\t\t\t\treturn `${column} IS TRUE`;\n\t\t\t}\n\t\t\tif (value === false) {\n\t\t\t\treturn `${column} IS FALSE`;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tcase \"in\": {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (value.length === 0) {\n\t\t\t\treturn \"FALSE\";\n\t\t\t}\n\t\t\tconst values = value.map((item) =>\n\t\t\t\twithCast(toSqlLiteral(item), condition.value_cast),\n\t\t\t);\n\t\t\treturn `${column} IN (${values.join(\", \")})`;\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport function buildTypedSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions: AthenaGatewayCondition[];\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\torder?: AthenaSortBy;\n}): string | null {\n\tconst whereClauses: string[] = [];\n\tfor (const condition of input.conditions) {\n\t\tconst clause = conditionToSqlClause(condition);\n\t\tif (!clause) {\n\t\t\treturn null;\n\t\t}\n\t\twhereClauses.push(clause);\n\t}\n\n\tlet limit = input.limit;\n\tlet offset = input.offset;\n\tif (limit === undefined && input.pageSize !== undefined) {\n\t\tlimit = input.pageSize;\n\t}\n\tif (\n\t\toffset === undefined &&\n\t\tinput.pageSize !== undefined &&\n\t\tinput.currentPage !== undefined &&\n\t\tinput.currentPage > 0\n\t) {\n\t\toffset = (input.currentPage - 1) * input.pageSize;\n\t}\n\n\tconst sqlParts = [\n\t\t`SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n\t];\n\n\tif (whereClauses.length > 0) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\n\tif (input.order?.field) {\n\t\tconst direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`,\n\t\t);\n\t}\n\n\tif (limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\n\tif (offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n\t}\n\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildIncludeJoinSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions: AthenaGatewayCondition[];\n\trelations: readonly {\n\t\tcolumns?: readonly string[];\n\t\tname: string;\n\t\tsourceColumns?: readonly string[];\n\t\tstar?: boolean;\n\t\ttargetColumns?: readonly string[];\n\t\ttargetModel?: string;\n\t\ttargetSchema?: string;\n\t\tvia?: string;\n\t}[];\n\tlimit?: number;\n\toffset?: number;\n\torder?: AthenaSortBy;\n}): string | null {\n\tif (input.relations.length === 0) {\n\t\treturn null;\n\t}\n\tconst rootAlias = \"root\";\n\tconst rootTable = quoteQualifiedIdentifier(input.tableName);\n\tconst rawColumns = (\n\t\tArray.isArray(input.columns) ? input.columns : [input.columns]\n\t)\n\t\t.map((column) => column.trim())\n\t\t.filter(Boolean);\n\tconst isStar = rawColumns.length === 0 || rawColumns.includes(\"*\");\n\tconst selectParts = isStar\n\t\t? [`${rootAlias}.*`]\n\t\t: rawColumns.map(\n\t\t\t\t(column) =>\n\t\t\t\t\t`${rootAlias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(column)}`,\n\t\t\t);\n\n\tconst joinParts: string[] = [];\n\tfor (const relation of input.relations) {\n\t\tconst targetTable = [\n\t\t\trelation.targetSchema,\n\t\t\trelation.via ?? relation.targetModel,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\".\");\n\t\tif (!targetTable) {\n\t\t\treturn null;\n\t\t}\n\t\tconst source = relation.sourceColumns ?? [];\n\t\tconst target = relation.targetColumns ?? [];\n\t\tif (source.length === 0 || source.length !== target.length) {\n\t\t\treturn null;\n\t\t}\n\t\tconst alias = quoteQualifiedIdentifier(relation.name);\n\t\tconst ons = source.map(\n\t\t\t(column, index) =>\n\t\t\t\t`${rootAlias}.${quoteQualifiedIdentifier(column)} = ${alias}.${quoteQualifiedIdentifier(target[index] as string)}`,\n\t\t);\n\t\tjoinParts.push(\n\t\t\t`LEFT JOIN ${quoteQualifiedIdentifier(targetTable)} AS ${alias} ON ${ons.join(\" AND \")}`,\n\t\t);\n\t\tif (relation.star || !relation.columns?.length) {\n\t\t\tselectParts.push(`${alias}.*`);\n\t\t} else {\n\t\t\tfor (const column of relation.columns) {\n\t\t\t\tselectParts.push(\n\t\t\t\t\t`${alias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(`${relation.name}.${column}`)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst whereClauses: string[] = [];\n\tfor (const condition of input.conditions) {\n\t\tconst clause = conditionToSqlClause(condition);\n\t\tif (!clause) {\n\t\t\treturn null;\n\t\t}\n\t\twhereClauses.push(clause.replace(/^\"([^\"]+)\"/, `${rootAlias}.\"$1\"`));\n\t}\n\n\tconst sqlParts = [\n\t\t`SELECT ${selectParts.join(\", \")} FROM ${rootTable} AS ${rootAlias}`,\n\t\t...joinParts,\n\t];\n\tif (whereClauses.length > 0) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tif (input.order?.field) {\n\t\tconst direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${rootAlias}.${quoteQualifiedIdentifier(input.order.field)} ${direction}`,\n\t\t);\n\t}\n\tif (input.limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(input.limit))}`);\n\t}\n\tif (input.offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(input.offset))}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n\treturn comment.replace(/\\*\\//g, \"* /\");\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n\tif (value === undefined) {\n\t\treturn \"DEFAULT\";\n\t}\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === \"string\" ||\n\t\ttypeof value === \"number\" ||\n\t\ttypeof value === \"boolean\"\n\t) {\n\t\treturn toSqlLiteral(value);\n\t}\n\treturn `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`;\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n\tconst exact = conditionToSqlClause(condition);\n\tif (exact) {\n\t\treturn exact;\n\t}\n\n\tconst rawCondition = sanitizeSqlComment(JSON.stringify(condition));\n\tif (!condition.column) {\n\t\treturn `TRUE /* unsupported condition: ${rawCondition} */`;\n\t}\n\n\tconst column = withCast(\n\t\tquoteQualifiedIdentifier(condition.column),\n\t\tcondition.column_cast,\n\t);\n\tconst value = condition.value;\n\tconst rhs = withCast(\n\t\ttoSqlJsonLiteral(value as AthenaJsonValue | undefined),\n\t\tcondition.value_cast,\n\t);\n\n\tswitch (condition.operator) {\n\t\tcase \"contains\":\n\t\t\treturn `${column} @> ${rhs}`;\n\t\tcase \"containedBy\":\n\t\t\treturn `${column} <@ ${rhs}`;\n\t\tcase \"not\":\n\t\t\treturn `TRUE /* NOT expression passthrough: ${rawCondition} */`;\n\t\tcase \"or\":\n\t\t\treturn `TRUE /* OR expression passthrough: ${rawCondition} */`;\n\t\tdefault:\n\t\t\treturn `TRUE /* unsupported condition: ${rawCondition} */`;\n\t}\n}\n\nfunction appendOrderLimitOffset(\n\tsqlParts: string[],\n\torder?: AthenaSortBy,\n\tlimit?: number,\n\toffset?: number,\n) {\n\tif (order?.field) {\n\t\tconst direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`,\n\t\t);\n\t}\n\tif (limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n\t}\n\tif (offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n\t}\n}\n\nexport function buildDebugSelectQuery(input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\tconditions?: AthenaGatewayCondition[];\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\torder?: AthenaSortBy;\n}): string {\n\tconst sqlParts = [\n\t\t`SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n\t];\n\tif (input.conditions?.length) {\n\t\tconst whereClauses = input.conditions.map(conditionToDebugSqlClause);\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination(input);\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tinput.order,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n\tif (!tableName?.trim()) {\n\t\treturn '\"__unknown_table__\"';\n\t}\n\treturn quoteQualifiedIdentifier(tableName);\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n\tconst rows = Array.isArray(payload.insert_body)\n\t\t? payload.insert_body\n\t\t: [payload.insert_body];\n\tconst columns: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (const row of rows) {\n\t\tfor (const column of Object.keys(row)) {\n\t\t\tif (seen.has(column)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(column);\n\t\t\tcolumns.push(column);\n\t\t}\n\t}\n\n\tconst sqlParts = [\n\t\t`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`,\n\t];\n\n\tif (rows.length && columns.length) {\n\t\tconst valuesClause = rows\n\t\t\t.map((row) => {\n\t\t\t\tconst values = columns.map((column) => {\n\t\t\t\t\tconst hasColumn = Object.hasOwn(row, column);\n\t\t\t\t\tif (!hasColumn) {\n\t\t\t\t\t\treturn payload.default_to_null ? \"NULL\" : \"DEFAULT\";\n\t\t\t\t\t}\n\t\t\t\t\tconst rowValue = (row as Record<string, AthenaJsonValue | undefined>)[\n\t\t\t\t\t\tcolumn\n\t\t\t\t\t];\n\t\t\t\t\treturn toSqlJsonLiteral(rowValue);\n\t\t\t\t});\n\t\t\t\treturn `(${values.join(\", \")})`;\n\t\t\t})\n\t\t\t.join(\", \");\n\t\tconst columnClause = columns\n\t\t\t.map((column) => quoteQualifiedIdentifier(column))\n\t\t\t.join(\", \");\n\t\tsqlParts.push(`(${columnClause})`);\n\t\tsqlParts.push(`VALUES ${valuesClause}`);\n\t} else {\n\t\tsqlParts.push(\"DEFAULT VALUES\");\n\t\tif (rows.length > 1) {\n\t\t\tsqlParts.push(\n\t\t\t\t`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (payload.on_conflict) {\n\t\tconst conflictColumns = Array.isArray(payload.on_conflict)\n\t\t\t? payload.on_conflict\n\t\t\t\t\t.map((column) => quoteQualifiedIdentifier(column))\n\t\t\t\t\t.join(\", \")\n\t\t\t: payload.on_conflict;\n\t\tif (payload.update_body && Object.keys(payload.update_body).length > 0) {\n\t\t\tconst assignments = Object.entries(payload.update_body).map(\n\t\t\t\t([column, value]) =>\n\t\t\t\t\t`${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t\t\t);\n\t\t\tsqlParts.push(\n\t\t\t\t`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(\", \")}`,\n\t\t\t);\n\t\t} else {\n\t\t\tsqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`);\n\t\t}\n\t}\n\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n\tconst assignments = Object.entries(payload.update_body).map(\n\t\t([column, value]) =>\n\t\t\t`${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t);\n\tconst sqlParts = [\n\t\t`UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(\", \") : \"/* empty set */\"}`,\n\t];\n\tif (payload.conditions?.length) {\n\t\tconst whereClauses = payload.conditions.map(conditionToDebugSqlClause);\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination({\n\t\tcurrentPage: payload.current_page,\n\t\tlimit: payload.limit,\n\t\toffset: payload.offset,\n\t\tpageSize: payload.page_size,\n\t});\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tpayload.sort_by,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n\tconst sqlParts = [\n\t\t`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`,\n\t];\n\tconst whereClauses: string[] = [];\n\tif (payload.resource_id) {\n\t\twhereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`);\n\t}\n\tif (payload.conditions?.length) {\n\t\twhereClauses.push(...payload.conditions.map(conditionToDebugSqlClause));\n\t}\n\tif (whereClauses.length) {\n\t\tsqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n\t}\n\tconst pagination = resolvePagination({\n\t\tcurrentPage: payload.current_page,\n\t\tlimit: payload.limit,\n\t\toffset: payload.offset,\n\t\tpageSize: payload.page_size,\n\t});\n\tappendOrderLimitOffset(\n\t\tsqlParts,\n\t\tpayload.sort_by,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t);\n\tif (payload.columns) {\n\t\tsqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n\tconst column = quoteQualifiedIdentifier(filter.column);\n\tconst value = filter.value;\n\tswitch (filter.operator) {\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\": {\n\t\t\tif (value === undefined || Array.isArray(value)) {\n\t\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\t\t}\n\t\t\tconst operatorMap = {\n\t\t\t\teq: \"=\",\n\t\t\t\tgt: \">\",\n\t\t\t\tgte: \">=\",\n\t\t\t\tilike: \"ILIKE\",\n\t\t\t\tlike: \"LIKE\",\n\t\t\t\tlt: \"<\",\n\t\t\t\tlte: \"<=\",\n\t\t\t\tneq: \"!=\",\n\t\t\t} as const;\n\t\t\treturn `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`;\n\t\t}\n\t\tcase \"is\":\n\t\t\tif (value === null) {\n\t\t\t\treturn `${column} IS NULL`;\n\t\t\t}\n\t\t\tif (value === true) {\n\t\t\t\treturn `${column} IS TRUE`;\n\t\t\t}\n\t\t\tif (value === false) {\n\t\t\t\treturn `${column} IS FALSE`;\n\t\t\t}\n\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\tcase \"in\":\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t\t\t}\n\t\t\tif (value.length === 0) {\n\t\t\t\treturn \"FALSE\";\n\t\t\t}\n\t\t\treturn `${column} IN (${value.map((item) => toSqlLiteral(item)).join(\", \")})`;\n\t\tdefault:\n\t\t\treturn `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n\t}\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n\tconst argsEntries = payload.args ? Object.entries(payload.args) : [];\n\tconst argsClause = argsEntries\n\t\t.map(\n\t\t\t([key, value]) =>\n\t\t\t\t`${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n\t\t)\n\t\t.join(\", \");\n\tconst functionRef = payload.schema\n\t\t? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n\t\t: quoteQualifiedIdentifier(payload.function);\n\tconst sqlParts = [\n\t\t`SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : \"*\"} FROM ${functionRef}(${argsClause})`,\n\t];\n\tif (payload.filters?.length) {\n\t\tsqlParts.push(\n\t\t\t`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(\" AND \")}`,\n\t\t);\n\t}\n\tif (payload.order?.column) {\n\t\tconst direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n\t\tsqlParts.push(\n\t\t\t`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`,\n\t\t);\n\t}\n\tif (payload.limit !== undefined) {\n\t\tsqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n\t}\n\tif (payload.offset !== undefined) {\n\t\tsqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n\t}\n\treturn `${sqlParts.join(\" \")};`;\n}\n","export type AthenaTransactionErrorCode =\n  | \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_NESTING_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_SAVEPOINT_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_EMPTY\"\n  | \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\"\n  | \"ATHENA_TRANSACTION_CONTEXT_OVERRIDE\"\n  | \"ATHENA_TRANSACTION_DOOMED\"\n  | \"ATHENA_TRANSACTION_TIMEOUT\"\n  | \"ATHENA_TRANSACTION_ABORTED\"\n  | \"ATHENA_TRANSACTION_FAILED\";\n\nexport class AthenaTransactionError extends Error {\n  readonly backend?: string;\n  readonly code: AthenaTransactionErrorCode;\n  readonly details: Record<string, unknown>;\n  readonly operationId?: string;\n  readonly operationIndex?: number;\n  readonly requestId?: string;\n  readonly transactionId?: string;\n\n  constructor(\n    code: AthenaTransactionErrorCode,\n    message: string,\n    details: Record<string, unknown> = {}\n  ) {\n    super(message);\n    this.name = \"AthenaTransactionError\";\n    this.code = code;\n    this.details = details;\n    this.backend =\n      typeof details.backend === \"string\" ? details.backend : undefined;\n    this.operationId =\n      typeof details.operationId === \"string\" ? details.operationId : undefined;\n    this.operationIndex =\n      typeof details.operationIndex === \"number\"\n        ? details.operationIndex\n        : undefined;\n    this.requestId =\n      typeof details.requestId === \"string\" ? details.requestId : undefined;\n    this.transactionId =\n      typeof details.transactionId === \"string\"\n        ? details.transactionId\n        : undefined;\n  }\n}\n\nexport function isAthenaTransactionError(\n  value: unknown\n): value is AthenaTransactionError {\n  return value instanceof AthenaTransactionError;\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaTransactionCacheObserver } from \"./types.ts\";\n\nconst observers = new WeakMap<\n  AthenaGatewayClient,\n  AthenaTransactionCacheObserver\n>();\n\nexport function registerTransactionCacheObserver(\n  gateway: AthenaGatewayClient,\n  observer: AthenaTransactionCacheObserver\n): void {\n  observers.set(gateway, observer);\n}\n\nexport function getTransactionCacheObserver(\n  gateway: AthenaGatewayClient\n): AthenaTransactionCacheObserver | undefined {\n  return observers.get(gateway);\n}\n","import { AthenaTransactionError } from \"./errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionIsolationLevel,\n} from \"./types.ts\";\n\nconst ISOLATION_SQL: Record<AthenaTransactionIsolationLevel, string> = {\n  read_committed: \"READ COMMITTED\",\n  repeatable_read: \"REPEATABLE READ\",\n  serializable: \"SERIALIZABLE\",\n};\n\n/**\n * Compile PostgreSQL BEGIN from resolved options.\n * Isolation tokens are mapped exhaustively — never interpolated from caller text.\n */\nexport function buildPostgresBeginStatement(\n  options?: Partial<\n    Pick<\n      AthenaResolvedTransactionOptions,\n      \"deferrable\" | \"isolationLevel\" | \"readOnly\"\n    >\n  >\n): string {\n  const parts = [\"BEGIN\"];\n  if (options?.isolationLevel) {\n    const mapped = ISOLATION_SQL[options.isolationLevel];\n    if (!mapped) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\",\n        `Unsupported PostgreSQL isolation level: ${String(options.isolationLevel)}`,\n        { isolationLevel: options.isolationLevel }\n      );\n    }\n    parts.push(\"ISOLATION LEVEL\", mapped);\n  }\n  if (options?.readOnly) {\n    parts.push(\"READ ONLY\");\n  }\n  if (options?.deferrable) {\n    if (!options.readOnly || options.isolationLevel !== \"serializable\") {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n        \"DEFERRABLE requires READ ONLY SERIALIZABLE\",\n        {\n          deferrable: true,\n          isolationLevel: options.isolationLevel ?? null,\n          readOnly: Boolean(options.readOnly),\n        }\n      );\n    }\n    parts.push(\"DEFERRABLE\");\n  }\n  return parts.join(\" \");\n}\n\nexport function nextInternalSavepointName(index: number): string {\n  if (!Number.isInteger(index) || index < 1) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"Savepoint index must be a positive integer\"\n    );\n  }\n  return `athena_sp_${index}`;\n}\n","import type { AthenaResult } from \"../../client-result.ts\";\nimport type { AthenaExecutable, AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\n\nexport type AthenaTransactionIsolationLevel =\n  | \"read_committed\"\n  | \"repeatable_read\"\n  | \"serializable\";\n\nexport type AthenaTransactionBackend =\n  | \"postgres-direct\"\n  | \"gateway-postgres\"\n  | \"d1-batch\"\n  | \"gateway-d1\"\n  | \"unsupported\";\n\nexport interface AthenaTransactionCapabilities {\n  atomic: boolean;\n  backend: AthenaTransactionBackend;\n  deferrable: boolean;\n  interactive: boolean;\n  isolationLevels: readonly AthenaTransactionIsolationLevel[];\n  readOnly: boolean;\n  savepoints: boolean;\n}\n\nexport interface AthenaTransactionOptions {\n  deferrable?: boolean;\n  idempotencyKey?: string;\n  isolationLevel?: AthenaTransactionIsolationLevel;\n  readOnly?: boolean;\n  signal?: AbortSignal;\n  timeoutMs?: number;\n}\n\nexport interface AthenaResolvedTransactionOptions {\n  callOptions?: AthenaGatewayCallOptions;\n  deferrable: boolean;\n  idempotencyKey?: string;\n  isolationLevel?: AthenaTransactionIsolationLevel;\n  readOnly: boolean;\n  signal?: AbortSignal;\n  timeoutMs?: number;\n}\n\nexport type AthenaTransactionOperationKind = \"fetch\" | \"insert\" | \"update\" | \"delete\";\n\nexport interface AthenaTransactionOperationBase {\n  descriptor: AthenaQueryDescriptor;\n  id: string;\n  index: number;\n}\n\nexport type AthenaTransactionOperation =\n  | (AthenaTransactionOperationBase & {\n      kind: \"fetch\";\n      payload: AthenaFetchPayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"insert\";\n      payload: AthenaInsertPayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"update\";\n      payload: AthenaUpdatePayload;\n    })\n  | (AthenaTransactionOperationBase & {\n      kind: \"delete\";\n      payload: AthenaDeletePayload;\n    });\n\nexport interface AthenaTransactionTransportResult {\n  committed: boolean;\n  results: AthenaGatewayResponse<unknown>[];\n  transactionId?: string;\n}\n\nexport interface AthenaInteractiveTransactionTransport {\n  commit(): Promise<void>;\n  createSavepoint?(name: string): Promise<void>;\n  execute(\n    operation: AthenaTransactionOperation\n  ): Promise<AthenaGatewayResponse<unknown>>;\n  releaseSavepoint?(name: string): Promise<void>;\n  rollback(): Promise<void>;\n  rollbackToSavepoint?(name: string): Promise<void>;\n}\n\nexport interface AthenaTransactionTransport {\n  beginInteractive?(\n    options?: AthenaResolvedTransactionOptions\n  ): Promise<AthenaInteractiveTransactionTransport>;\n  readonly capabilities: AthenaTransactionCapabilities;\n  executeAtomic(\n    operations: readonly AthenaTransactionOperation[],\n    options?: AthenaResolvedTransactionOptions\n  ): Promise<AthenaTransactionTransportResult>;\n}\n\nexport type AthenaExecutableOutput<T> = T extends AthenaExecutable<infer R>\n  ? R\n  : T extends PromiseLike<infer R>\n    ? R\n    : never;\n\nexport type AthenaTransactionResults<\n  T extends readonly AthenaExecutable<unknown>[],\n> = {\n  [K in keyof T]: AthenaExecutableOutput<T[K]>;\n};\n\nexport type AthenaTransactionOperationCompiler = () => AthenaTransactionOperation;\n\nexport interface AthenaTransactionCacheObserver {\n  reconcileCommitted(\n    operations: readonly AthenaTransactionOperation[],\n    results: readonly AthenaResult<unknown>[]\n  ): void;\n}\n\nexport const ATHENA_TRANSACTION_COMPILE = Symbol.for(\n  \"athena.transaction.compile\"\n);\n\nexport const UNSUPPORTED_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: false,\n    backend: \"unsupported\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n\nexport const POSTGRES_DIRECT_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"postgres-direct\",\n    deferrable: true,\n    interactive: true,\n    isolationLevels: [\"read_committed\", \"repeatable_read\", \"serializable\"],\n    readOnly: true,\n    savepoints: true,\n  };\n\nexport const GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"gateway-postgres\",\n    deferrable: true,\n    interactive: false,\n    isolationLevels: [\"read_committed\", \"repeatable_read\", \"serializable\"],\n    readOnly: true,\n    savepoints: false,\n  };\n\nexport const D1_BATCH_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"d1-batch\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n\nexport const GATEWAY_D1_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: false,\n    backend: \"gateway-d1\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n","import type { AthenaExecutable } from \"../../query/descriptor.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport {\n  ATHENA_TRANSACTION_COMPILE,\n  type AthenaTransactionOperation,\n  type AthenaTransactionOperationCompiler,\n} from \"./types.ts\";\n\nlet transactionOperationSeq = 0;\n\nexport function nextTransactionOperationId(): string {\n  transactionOperationSeq += 1;\n  return `txop_${transactionOperationSeq}`;\n}\n\nexport function attachTransactionCompiler(\n  executable: object,\n  compile: AthenaTransactionOperationCompiler\n): void {\n  Object.defineProperty(executable, ATHENA_TRANSACTION_COMPILE, {\n    configurable: true,\n    enumerable: false,\n    value: compile,\n  });\n}\n\nexport function compileTransactionOperation(\n  executable: AthenaExecutable<unknown>,\n  index: number\n): AthenaTransactionOperation {\n  const holder = executable as AthenaExecutable<unknown> & {\n    [ATHENA_TRANSACTION_COMPILE]?: AthenaTransactionOperationCompiler;\n  };\n  const compile = holder[ATHENA_TRANSACTION_COMPILE];\n  if (typeof compile !== \"function\") {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n      \"Executable cannot be compiled into a transaction operation. Pass an unexecuted athena.from(Model) chain (select/insert/update/delete).\",\n      { index }\n    );\n  }\n  const compiled = compile();\n  return {\n    ...compiled,\n    descriptor: compiled.descriptor,\n    id: compiled.id || nextTransactionOperationId(),\n    index,\n  };\n}\n\nexport function compileTransactionOperations(\n  executables: readonly AthenaExecutable<unknown>[]\n): AthenaTransactionOperation[] {\n  if (executables.length === 0) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_EMPTY\",\n      \"db.transaction() requires at least one operation\"\n    );\n  }\n  return executables.map((executable, index) =>\n    compileTransactionOperation(executable, index)\n  );\n}\n","import { AthenaTransactionError } from \"./errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOptions,\n} from \"./types.ts\";\n\nexport function resolveTransactionOptions(\n  capabilities: AthenaTransactionCapabilities,\n  options?: AthenaTransactionOptions,\n  callOptions?: AthenaResolvedTransactionOptions[\"callOptions\"]\n): AthenaResolvedTransactionOptions {\n  if (options?.isolationLevel) {\n    if (!capabilities.isolationLevels.includes(options.isolationLevel)) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_ISOLATION_UNSUPPORTED\",\n        `Isolation level \"${options.isolationLevel}\" is not supported by backend \"${capabilities.backend}\"`,\n        {\n          backend: capabilities.backend,\n          isolationLevel: options.isolationLevel,\n          supported: [...capabilities.isolationLevels],\n        }\n      );\n    }\n  }\n  if (options?.readOnly && !capabilities.readOnly) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      `readOnly transactions are not supported by backend \"${capabilities.backend}\"`,\n      { backend: capabilities.backend, option: \"readOnly\" }\n    );\n  }\n  if (options?.deferrable && !capabilities.deferrable) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      `deferrable transactions are not supported by backend \"${capabilities.backend}\"`,\n      { backend: capabilities.backend, option: \"deferrable\" }\n    );\n  }\n  return {\n    callOptions,\n    deferrable: Boolean(options?.deferrable),\n    idempotencyKey: options?.idempotencyKey,\n    isolationLevel: options?.isolationLevel,\n    readOnly: Boolean(options?.readOnly),\n    signal: options?.signal,\n    timeoutMs: options?.timeoutMs,\n  };\n}\n","import type { AthenaResult, AthenaResultFormatter } from \"../../client-result.ts\";\nimport type { AthenaExecutable } from \"../../query/descriptor.ts\";\nimport type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaGatewayResponse } from \"../../gateway/types.ts\";\nimport { getTransactionCacheObserver } from \"./cache.ts\";\nimport { compileTransactionOperations } from \"./compile.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport { resolveTransactionOptions } from \"./options.ts\";\nimport type {\n  AthenaInteractiveTransactionTransport,\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCacheObserver,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOperation,\n  AthenaTransactionOptions,\n  AthenaTransactionResults,\n} from \"./types.ts\";\nimport { UNSUPPORTED_TRANSACTION_CAPABILITIES } from \"./types.ts\";\n\nexport function getTransactionTransport(\n  gateway: AthenaGatewayClient\n): {\n  capabilities: AthenaTransactionCapabilities;\n  transport: NonNullable<AthenaGatewayClient[\"transactions\"]> | undefined;\n} {\n  const transport = gateway.transactions;\n  return {\n    capabilities: transport?.capabilities ?? UNSUPPORTED_TRANSACTION_CAPABILITIES,\n    transport,\n  };\n}\n\nexport async function pinTransactionCallOptions(\n  gateway: AthenaGatewayClient,\n  signal?: AbortSignal\n) {\n  const resolved = await gateway.resolveCallOptions(\n    signal ? { signal } : undefined\n  );\n  return resolved;\n}\n\n/**\n * The pinned snapshot may include organization/credentials.\n * Per-operation builders must not smuggle a different principal.\n */\nfunction rejectOperationContextOverride(\n  pinned: AthenaResolvedTransactionOptions[\"callOptions\"] | undefined,\n  operationOptions: AthenaResolvedTransactionOptions[\"callOptions\"] | undefined\n): void {\n  if (!operationOptions) {\n    return;\n  }\n  const fields = [\n    \"apiKey\",\n    \"bearerToken\",\n    \"organizationId\",\n    \"sessionToken\",\n    \"userId\",\n    \"client\",\n  ] as const;\n  for (const field of fields) {\n    const next = operationOptions[field];\n    if (next === undefined || next === null) {\n      continue;\n    }\n    const pinnedValue = pinned?.[field];\n    if (pinnedValue !== next) {\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_CONTEXT_OVERRIDE\",\n        \"Transaction operations cannot override client, organization, credentials, or principal\",\n        { field, next, pinned: pinnedValue ?? null }\n      );\n    }\n  }\n}\n\nfunction mapTransportResult(\n  response: AthenaGatewayResponse<unknown>,\n  formatGatewayResult: AthenaResultFormatter,\n  operation: AthenaTransactionOperation\n): AthenaResult<unknown> {\n  return formatGatewayResult(response, {\n    operation: operation.kind,\n    table: operation.descriptor.target.table,\n  });\n}\n\nfunction firstFailedResult(\n  results: readonly AthenaResult<unknown>[]\n): AthenaResult<unknown> | undefined {\n  return results.find((result) => result.error);\n}\n\nexport async function executeAtomicTransaction<\n  T extends readonly AthenaExecutable<unknown>[],\n>(input: {\n  cache?: AthenaTransactionCacheObserver;\n  formatGatewayResult: AthenaResultFormatter;\n  gateway: AthenaGatewayClient;\n  operations: T;\n  options?: AthenaTransactionOptions;\n}): Promise<AthenaTransactionResults<T>> {\n  const { capabilities, transport } = getTransactionTransport(input.gateway);\n  if (!(transport && capabilities.atomic)) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\",\n      `Atomic transactions are not supported by backend \"${capabilities.backend}\"`,\n      {\n        backend: capabilities.backend,\n        requested: \"atomic\",\n        suggestion: \"Use a backend that advertises capabilities.db.transactions.atomic\",\n      }\n    );\n  }\n  const compiled = compileTransactionOperations(input.operations);\n  const pinned = await pinTransactionCallOptions(\n    input.gateway,\n    input.options?.signal\n  );\n  const resolved = resolveTransactionOptions(\n    capabilities,\n    input.options,\n    pinned\n  );\n  const executed = await transport.executeAtomic(compiled, resolved);\n  const results = executed.results.map((response, index) =>\n    mapTransportResult(\n      response,\n      input.formatGatewayResult,\n      compiled[index] ?? compiled[0]!\n    )\n  );\n  const failed = firstFailedResult(results);\n  if (failed?.error || !executed.committed) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_FAILED\",\n      failed?.error?.message ?? \"Atomic transaction failed\",\n      {\n        backend: capabilities.backend,\n        committed: executed.committed,\n        transactionId: executed.transactionId ?? null,\n      }\n    );\n  }\n  const cache =\n    input.cache ?? getTransactionCacheObserver(input.gateway);\n  cache?.reconcileCommitted(compiled, results);\n  return results as AthenaTransactionResults<T>;\n}\n\nexport interface InteractiveTransactionSession {\n  abort(): void;\n  capabilities: AthenaTransactionCapabilities;\n  doomed: boolean;\n  execute(\n    operation: AthenaTransactionOperation\n  ): Promise<AthenaGatewayResponse<unknown>>;\n  failure: AthenaTransactionError | undefined;\n  markFailed(error: AthenaTransactionError): void;\n  savepointIndex: number;\n  transport: AthenaInteractiveTransactionTransport;\n}\n\nexport async function beginInteractiveSession(input: {\n  gateway: AthenaGatewayClient;\n  options?: AthenaTransactionOptions;\n}): Promise<InteractiveTransactionSession> {\n  const { capabilities, transport } = getTransactionTransport(input.gateway);\n  if (!(transport?.beginInteractive && capabilities.interactive)) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\",\n      `Interactive transactions are not supported by backend \"${capabilities.backend}\"`,\n      {\n        backend: capabilities.backend,\n        requested: \"interactive\",\n        suggestion: \"use db.transaction([...])\",\n        supported: capabilities.atomic ? \"atomic\" : \"none\",\n      }\n    );\n  }\n  const pinned = await pinTransactionCallOptions(\n    input.gateway,\n    input.options?.signal\n  );\n  rejectOperationContextOverride(pinned, pinned);\n  const resolved = resolveTransactionOptions(\n    capabilities,\n    input.options,\n    pinned\n  );\n  const interactive = await transport.beginInteractive(resolved);\n  const session: InteractiveTransactionSession = {\n    abort() {\n      session.markFailed(\n        new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_ABORTED\",\n          \"Transaction aborted\",\n          { backend: capabilities.backend }\n        )\n      );\n    },\n    capabilities,\n    doomed: false,\n    async execute(operation) {\n      if (session.doomed) {\n        throw (\n          session.failure ??\n          new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_DOOMED\",\n            \"Transaction is doomed and will roll back\",\n            { backend: capabilities.backend }\n          )\n        );\n      }\n      const response = await interactive.execute(operation);\n      if (!response.ok) {\n        session.markFailed(\n          new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_FAILED\",\n            response.error ?? \"Transaction operation failed\",\n            {\n              backend: capabilities.backend,\n              operationId: operation.id,\n              operationIndex: operation.index,\n            }\n          )\n        );\n      }\n      return response;\n    },\n    failure: undefined,\n    markFailed(error) {\n      session.doomed = true;\n      session.failure ??= error;\n    },\n    savepointIndex: 0,\n    transport: interactive,\n  };\n  return session;\n}\n\nexport async function finishInteractiveSession(input: {\n  cache?: AthenaTransactionCacheObserver;\n  committedOperations: AthenaTransactionOperation[];\n  committedResults: AthenaResult<unknown>[];\n  session: InteractiveTransactionSession;\n}): Promise<void> {\n  const { session } = input;\n  if (session.doomed) {\n    await session.transport.rollback();\n    throw (\n      session.failure ??\n      new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_DOOMED\",\n        \"Transaction rolled back\",\n        { backend: session.capabilities.backend }\n      )\n    );\n  }\n  await session.transport.commit();\n  input.cache?.reconcileCommitted(\n    input.committedOperations,\n    input.committedResults\n  );\n}\n","export {\n  getTransactionCacheObserver,\n  registerTransactionCacheObserver,\n} from \"./cache.ts\";\nexport { buildPostgresBeginStatement, nextInternalSavepointName } from \"./begin-sql.ts\";\nexport {\n  attachTransactionCompiler,\n  compileTransactionOperation,\n  compileTransactionOperations,\n  nextTransactionOperationId,\n} from \"./compile.ts\";\nexport {\n  beginInteractiveSession,\n  executeAtomicTransaction,\n  finishInteractiveSession,\n  getTransactionTransport,\n  pinTransactionCallOptions,\n  type InteractiveTransactionSession,\n} from \"./coordinator.ts\";\nexport {\n  AthenaTransactionError,\n  isAthenaTransactionError,\n  type AthenaTransactionErrorCode,\n} from \"./errors.ts\";\nexport { resolveTransactionOptions } from \"./options.ts\";\nexport type {\n  AthenaExecutableOutput,\n  AthenaInteractiveTransactionTransport,\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionBackend,\n  AthenaTransactionCacheObserver,\n  AthenaTransactionCapabilities,\n  AthenaTransactionIsolationLevel,\n  AthenaTransactionOperation,\n  AthenaTransactionOperationCompiler,\n  AthenaTransactionOptions,\n  AthenaTransactionResults,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"./types.ts\";\nexport {\n  ATHENA_TRANSACTION_COMPILE,\n  D1_BATCH_TRANSACTION_CAPABILITIES,\n  GATEWAY_D1_TRANSACTION_CAPABILITIES,\n  GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES,\n  POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n  UNSUPPORTED_TRANSACTION_CAPABILITIES,\n} from \"./types.ts\";\n","/**\n * Shared physical resource identity for Schema IR, Policy IR, the runtime\n * model index, and Data Nucleus. `model` is Schema IR identity, not a table alias.\n */\n\nexport type AthenaResourceKind =\n  | \"relation\"\n  | \"storage-object\"\n  | \"auth\"\n  | \"service\";\n\nexport type AthenaResourceInput = {\n  table: string;\n  schema?: string;\n  database?: string;\n};\n\nexport type AthenaResourceRef =\n  | { table: string; schema?: never; database?: never }\n  | { schema: string; table: string; database?: string };\n\nexport type AthenaResourceIdentity =\n  | {\n      kind: \"relation\";\n      ref: AthenaResourceRef;\n      canonicalResource: string;\n      model?: string;\n    }\n  | {\n      kind: \"storage-object\";\n      bucket?: string;\n      key: string;\n      canonicalResource: string;\n    }\n  | {\n      kind: \"auth\";\n      resource: string;\n      canonicalResource: string;\n    }\n  | {\n      kind: \"service\";\n      service: string;\n      canonicalResource: string;\n    };\n\nexport interface AthenaResolvedResource {\n  table: string;\n  schema?: string;\n  database?: string;\n  canonicalResource: string;\n  model?: string;\n}\n\nexport type AthenaResourceLookup = {\n  get(resource: string): AthenaResolvedResource | undefined;\n};\n\nfunction trimOptional(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport function parseAthenaResourceRef(value: string): AthenaResourceRef {\n  const parts = value\n    .trim()\n    .split(\".\")\n    .map((part) => part.trim())\n    .filter(Boolean);\n  if (parts.length >= 3) {\n    return {\n      database: parts[0],\n      schema: parts[1],\n      table: parts[parts.length - 1] as string,\n    };\n  }\n  if (parts.length === 2) {\n    return {\n      schema: parts[0],\n      table: parts[1] as string,\n    };\n  }\n  return { table: parts[0] ?? \"\" };\n}\n\nexport function normalizeAthenaResourceRef(\n  ref: AthenaResourceInput,\n): AthenaResourceRef {\n  const table = ref.table.trim();\n  const schema = trimOptional(ref.schema);\n  const database = schema ? trimOptional(ref.database) : undefined;\n  if (schema) {\n    return database ? { database, schema, table } : { schema, table };\n  }\n  return { table };\n}\n\nexport function canonicalAthenaResource(ref: AthenaResourceInput): string {\n  const normalized = normalizeAthenaResourceRef(ref);\n  if (\"schema\" in normalized && normalized.schema) {\n    return normalized.database\n      ? `${normalized.database}.${normalized.schema}.${normalized.table}`\n      : `${normalized.schema}.${normalized.table}`;\n  }\n  return normalized.table;\n}\n\nexport function athenaResourceKeys(ref: AthenaResourceInput): string[] {\n  const normalized = normalizeAthenaResourceRef(ref);\n  const keys = new Set<string>();\n  if (normalized.table) {\n    keys.add(normalized.table);\n  }\n  if (\"schema\" in normalized && normalized.schema && normalized.table) {\n    keys.add(`${normalized.schema}.${normalized.table}`);\n    if (normalized.database) {\n      keys.add(\n        `${normalized.database}.${normalized.schema}.${normalized.table}`,\n      );\n    }\n  }\n  return [...keys];\n}\n\nexport function resolvedAthenaResource(\n  ref: AthenaResourceInput & { model?: string },\n): AthenaResolvedResource {\n  const normalized = normalizeAthenaResourceRef(ref);\n  const model = trimOptional(ref.model);\n  return {\n    ...normalized,\n    canonicalResource: canonicalAthenaResource(normalized),\n    ...(model ? { model } : {}),\n  };\n}\n\nfunction pickResolved(\n  value: AthenaResolvedResource,\n): AthenaResolvedResource {\n  return resolvedAthenaResource(value);\n}\n\nfunction rawResourceToken(payload: unknown): string | undefined {\n  if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n    return undefined;\n  }\n  const record = payload as Record<string, unknown>;\n  const table =\n    typeof record.table_name === \"string\" ? record.table_name.trim() : \"\";\n  const view =\n    typeof record.view_name === \"string\" ? record.view_name.trim() : \"\";\n  return table || view || undefined;\n}\n\nexport function resolveAthenaResourceFromPayload(\n  payload: unknown,\n  modelIndex?: AthenaResourceLookup,\n): AthenaResolvedResource | undefined {\n  const token = rawResourceToken(payload);\n  if (!token) {\n    return undefined;\n  }\n  const parsed = parseAthenaResourceRef(token);\n  const candidates = [\n    token,\n    canonicalAthenaResource(parsed),\n    ...athenaResourceKeys(parsed),\n  ];\n  if (modelIndex) {\n    for (const candidate of candidates) {\n      const found = modelIndex.get(candidate);\n      if (found) {\n        return pickResolved(found);\n      }\n    }\n  }\n  if (!parsed.table) {\n    return undefined;\n  }\n  return resolvedAthenaResource(parsed);\n}\n\nexport function relationResourceIdentity(\n  ref: AthenaResourceInput & { model?: string },\n): AthenaResourceIdentity {\n  const resolved = resolvedAthenaResource(ref);\n  return {\n    kind: \"relation\",\n    ref: normalizeAthenaResourceRef(ref),\n    canonicalResource: resolved.canonicalResource,\n    ...(resolved.model ? { model: resolved.model } : {}),\n  };\n}\n\nexport function storageObjectResourceIdentity(input: {\n  bucket?: string;\n  key: string;\n}): AthenaResourceIdentity {\n  const key = input.key.trim();\n  const bucket = trimOptional(input.bucket);\n  return {\n    kind: \"storage-object\",\n    ...(bucket ? { bucket } : {}),\n    key,\n    canonicalResource: bucket ? `${bucket}/${key}` : key,\n  };\n}\n\nexport function authResourceIdentity(resource: string): AthenaResourceIdentity {\n  const token = resource.trim();\n  return {\n    kind: \"auth\",\n    resource: token,\n    canonicalResource: token,\n  };\n}\n\nexport function serviceResourceIdentity(service: string): AthenaResourceIdentity {\n  const token = service.trim();\n  return {\n    kind: \"service\",\n    service: token,\n    canonicalResource: token,\n  };\n}\n\nexport function canonicalAthenaResourceIdentity(\n  identity: AthenaResourceIdentity,\n): string {\n  return identity.canonicalResource;\n}\n\nexport function matchAthenaResource(\n  scope: AthenaResourceInput | string,\n  resolved: AthenaResolvedResource,\n): boolean {\n  const ref = normalizeAthenaResourceRef(\n    typeof scope === \"string\" ? parseAthenaResourceRef(scope) : scope,\n  );\n  if (!ref.table.trim() || ref.table.trim() !== resolved.table) {\n    return false;\n  }\n  const scopeSchema = ref.schema;\n  if (scopeSchema && scopeSchema !== resolved.schema) {\n    return false;\n  }\n  const scopeDatabase = ref.database;\n  if (scopeDatabase && scopeDatabase !== resolved.database) {\n    return false;\n  }\n  return true;\n}\n","/**\n * Single Athena identity protocol for query keys, entity IDs, fingerprints,\n * mutation keys, SSR snapshots, and MCP descriptors.\n */\n\nconst TYPE_NULL = \"null\";\nconst TYPE_UNDEFINED = \"undefined\";\nconst TYPE_STRING = \"s\";\nconst TYPE_NUMBER = \"n\";\nconst TYPE_BOOLEAN = \"b\";\nconst TYPE_BIGINT = \"bi\";\nconst TYPE_DATE = \"date\";\nconst TYPE_ARRAY = \"array\";\nconst TYPE_OBJECT = \"object\";\nconst TYPE_MAP = \"map\";\nconst TYPE_SET = \"set\";\nconst TYPE_BYTES = \"bytes\";\nconst TYPE_CIRCULAR = \"circular\";\n\nfunction escapeTag(value: string): string {\n  return value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function canonicalizeAthenaValue(\n  value: unknown,\n  seen = new WeakSet<object>(),\n): string {\n  if (value === null) {\n    return TYPE_NULL;\n  }\n  if (value === undefined) {\n    return TYPE_UNDEFINED;\n  }\n\n  const valueType = typeof value;\n  if (valueType === \"string\") {\n    return `${TYPE_STRING}:\"${escapeTag(value as string)}\"`;\n  }\n  if (valueType === \"boolean\") {\n    return `${TYPE_BOOLEAN}:${value ? \"true\" : \"false\"}`;\n  }\n  if (valueType === \"number\") {\n    if (Number.isNaN(value)) {\n      return `${TYPE_NUMBER}:NaN`;\n    }\n    if (value === Number.POSITIVE_INFINITY) {\n      return `${TYPE_NUMBER}:Infinity`;\n    }\n    if (value === Number.NEGATIVE_INFINITY) {\n      return `${TYPE_NUMBER}:-Infinity`;\n    }\n    return `${TYPE_NUMBER}:${value}`;\n  }\n  if (valueType === \"bigint\") {\n    return `${TYPE_BIGINT}:${value.toString()}`;\n  }\n  if (valueType === \"symbol\") {\n    return `symbol:${escapeTag(String((value as symbol).description ?? \"\"))}`;\n  }\n  if (valueType === \"function\") {\n    const named = value as { name?: string };\n    return `function:${escapeTag(named.name || \"anonymous\")}`;\n  }\n\n  if (value instanceof Date) {\n    const time = value.getTime();\n    return Number.isNaN(time)\n      ? `${TYPE_DATE}:Invalid`\n      : `${TYPE_DATE}:${value.toISOString()}`;\n  }\n\n  if (typeof ArrayBuffer !== \"undefined\" && value instanceof ArrayBuffer) {\n    return `${TYPE_BYTES}:${arrayBufferToHex(value)}`;\n  }\n  if (ArrayBuffer.isView(value)) {\n    const view = value as ArrayBufferView;\n    const copy = new Uint8Array(view.byteLength);\n    copy.set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));\n    return `${TYPE_BYTES}:${[...copy].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`;\n  }\n\n  const objectValue = value as object;\n  if (seen.has(objectValue)) {\n    return TYPE_CIRCULAR;\n  }\n  seen.add(objectValue);\n\n  try {\n    if (value instanceof Map) {\n      const entries = [...value.entries()]\n        .map(\n          ([key, item]) =>\n            `[${canonicalizeAthenaValue(key, seen)},${canonicalizeAthenaValue(item, seen)}]`,\n        )\n        .sort((left, right) => left.localeCompare(right));\n      return `${TYPE_MAP}:[${entries.join(\",\")}]`;\n    }\n    if (value instanceof Set) {\n      const items = [...value]\n        .map((item) => canonicalizeAthenaValue(item, seen))\n        .sort((left, right) => left.localeCompare(right));\n      return `${TYPE_SET}:[${items.join(\",\")}]`;\n    }\n    if (Array.isArray(value)) {\n      return `${TYPE_ARRAY}:[${value\n        .map((item) => canonicalizeAthenaValue(item, seen))\n        .join(\",\")}]`;\n    }\n\n    const record = value as Record<string, unknown>;\n    const keys = Object.keys(record).sort((left, right) =>\n      left.localeCompare(right),\n    );\n    const fields = keys.map(\n      (key) =>\n        `${TYPE_STRING}:\"${escapeTag(key)}\":${canonicalizeAthenaValue(record[key], seen)}`,\n    );\n    return `${TYPE_OBJECT}:{${fields.join(\",\")}}`;\n  } finally {\n    seen.delete(objectValue);\n  }\n}\n\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n  return [...new Uint8Array(buffer)]\n    .map((byte) => byte.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n}\n\n/** FNV-1a 32-bit over the canonical form. Deterministic across runtimes. */\nexport function hashAthenaValue(value: unknown): string {\n  const canonical = canonicalizeAthenaValue(value);\n  let hash = 2_166_136_261;\n  for (let index = 0; index < canonical.length; index += 1) {\n    hash ^= canonical.charCodeAt(index);\n    hash = Math.imul(hash, 16_777_619);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n","import type { AthenaGatewayCondition, AthenaSortBy } from \"../gateway/types.ts\";\nimport { parseAthenaResourceRef } from \"../schema/resource.ts\";\nimport type { AthenaModelTarget } from \"../schema/types.ts\";\nimport { hashAthenaValue } from \"./canonicalize.ts\";\n\nexport const ATHENA_EXECUTABLE = Symbol.for(\"@xylex-group/athena/executable\");\n\nexport type AthenaQueryOperation =\n  | \"select\"\n  | \"findMany\"\n  | \"single\"\n  | \"maybeSingle\"\n  | \"count\"\n  | \"insert\"\n  | \"update\"\n  | \"upsert\"\n  | \"delete\";\n\nexport type AthenaProjectionKind =\n  | \"full-model\"\n  | \"partial-model\"\n  | \"aggregate\"\n  | \"expression\"\n  | \"unknown\";\n\nexport type AthenaQueryFieldDependencyKind =\n  | \"filter\"\n  | \"order\"\n  | \"projection\"\n  | \"identity\";\n\nexport interface AthenaQueryTarget {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\n/**\n * Access-envelope identity for cache / entity graph isolation.\n * `accessScope` should be an opaque, non-secret fingerprint from Auth/Gateway.\n */\nexport interface AthenaCacheScope {\n  accessScope?: string;\n  organizationId?: string;\n  policyRevision?: string;\n  userId?: string;\n}\n\n/** @deprecated Use {@link AthenaCacheScope}. */\nexport type AthenaCacheContextDescriptor = AthenaCacheScope;\n\nexport type AthenaPredicateNode =\n  | AthenaComparePredicateNode\n  | AthenaLogicalPredicateNode\n  | AthenaNotPredicateNode;\n\nexport interface AthenaComparePredicateNode {\n  kind: \"compare\";\n  column?: string;\n  operator: string;\n  value?: unknown;\n}\n\nexport interface AthenaLogicalPredicateNode {\n  kind: \"and\" | \"or\";\n  nodes: readonly AthenaPredicateNode[];\n}\n\nexport interface AthenaNotPredicateNode {\n  kind: \"not\";\n  node: AthenaPredicateNode;\n}\n\nexport interface AthenaSelectionNode {\n  columns?: readonly string[];\n  name: string;\n  star?: boolean;\n  targetModel?: string;\n  targetSchema?: string;\n}\n\nexport interface AthenaPagination {\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  pageSize?: number;\n}\n\nexport interface AthenaProjectionDescriptor {\n  columns?: readonly string[];\n  kind: AthenaProjectionKind;\n  star?: boolean;\n}\n\nexport interface AthenaFilterDescriptor {\n  column?: string;\n  operator: string;\n  value?: unknown;\n}\n\nexport interface AthenaOrderDescriptor {\n  ascending: boolean;\n  column: string;\n}\n\nexport interface AthenaRangeDescriptor {\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  pageSize?: number;\n}\n\nexport interface AthenaRelationDescriptor {\n  columns?: readonly string[];\n  name: string;\n  sourceColumns?: readonly string[];\n  star?: boolean;\n  targetColumns?: readonly string[];\n  targetModel?: string;\n  targetSchema?: string;\n  via?: string;\n}\n\nexport interface AthenaModelDependency {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\nexport interface AthenaFieldDependency {\n  column: string;\n  roles: readonly AthenaQueryFieldDependencyKind[];\n  table: string;\n}\n\nexport interface AthenaQueryDependencyDescriptor {\n  fields: readonly AthenaFieldDependency[];\n  models: readonly AthenaModelDependency[];\n  relations: readonly AthenaRelationDependency[];\n}\n\nexport interface AthenaRelationDependency {\n  name: string;\n  targetModel?: string;\n  targetSchema?: string;\n}\n\nexport interface AthenaQueryDescriptor {\n  changedFields?: readonly string[];\n  context?: AthenaCacheScope;\n  dependency: AthenaQueryDependencyDescriptor;\n  filters?: readonly AthenaFilterDescriptor[];\n  modelFingerprint?: string;\n  modelScopeKey: readonly unknown[];\n  operation: AthenaQueryOperation;\n  order?: readonly AthenaOrderDescriptor[];\n  pagination?: AthenaPagination;\n  predicate?: AthenaPredicateNode;\n  projection?: AthenaProjectionDescriptor;\n  queryKey: readonly unknown[];\n  range?: AthenaRangeDescriptor;\n  relations?: readonly AthenaRelationDescriptor[];\n  schemaRevision?: string;\n  scope?: AthenaCacheScope;\n  selection?: readonly AthenaSelectionNode[];\n  target: AthenaQueryTarget;\n  version: 1 | 2;\n}\n\nexport interface AthenaExecuteOptions {\n  signal?: AbortSignal;\n}\n\nexport interface AthenaExecutable<TResult> {\n  capture(): AthenaExecutable<TResult>;\n  execute(options?: AthenaExecuteOptions): Promise<TResult>;\n  getDescriptor(): AthenaQueryDescriptor;\n  readonly model?: AthenaModelTarget;\n}\n\nexport interface AthenaQueryDescriptorCompileInput {\n  changedFields?: readonly string[];\n  conditions?: readonly AthenaGatewayCondition[];\n  context?: AthenaCacheScope;\n  currentPage?: number;\n  limit?: number;\n  model?: AthenaModelTarget;\n  offset?: number;\n  operation: AthenaQueryOperation;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  projection?: string | readonly string[] | null;\n  /** Relations actually consumed by this query — not the model's full graph. */\n  relations?: readonly AthenaRelationDescriptor[];\n  schemaRevision?: string;\n  tableName: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction stableHash(value: unknown): string {\n  return hashAthenaValue(value);\n}\n\nfunction normalizeOptional(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport function resolveAthenaQueryTarget(\n  tableName: string,\n  model?: AthenaModelTarget,\n): AthenaQueryTarget {\n  const parsed = parseAthenaResourceRef(tableName);\n  const meta = model?.meta;\n  const schema = parsed.schema ?? normalizeOptional(meta?.schema);\n  const table =\n    parsed.table ||\n    normalizeOptional(meta?.tableName)?.split(\".\").at(-1) ||\n    \"\";\n  return {\n    database: parsed.database ?? normalizeOptional(meta?.database),\n    model: normalizeOptional(meta?.model),\n    schema,\n    table,\n  };\n}\n\nfunction looksAggregate(column: string): boolean {\n  return /\\b(?:avg|count|max|min|sum)\\s*\\(/i.test(column);\n}\n\nfunction looksExpression(column: string): boolean {\n  return /[(:]| as /i.test(column);\n}\n\nfunction compileProjection(\n  projection: string | readonly string[] | null | undefined,\n  model?: AthenaModelTarget,\n): AthenaProjectionDescriptor {\n  const modelColumns = model?.meta.columns\n    ? Object.keys(model.meta.columns)\n    : [];\n\n  const classifyColumns = (\n    columns: readonly string[],\n  ): AthenaProjectionKind => {\n    if (columns.some((column) => looksAggregate(column))) {\n      return \"aggregate\";\n    }\n    if (columns.some((column) => looksExpression(column))) {\n      return \"expression\";\n    }\n    if (!model) {\n      return \"unknown\";\n    }\n    const known = new Set([...modelColumns, ...(model.meta.primaryKey ?? [])]);\n    if (columns.every((column) => known.has(column))) {\n      return columns.length === modelColumns.length &&\n        modelColumns.every((column) => columns.includes(column))\n        ? \"full-model\"\n        : \"partial-model\";\n    }\n    return \"unknown\";\n  };\n\n  if (projection === undefined || projection === null) {\n    return { kind: model ? \"full-model\" : \"unknown\", star: true };\n  }\n  if (typeof projection === \"string\") {\n    const trimmed = projection.trim();\n    if (!trimmed || trimmed === \"*\") {\n      return { kind: model ? \"full-model\" : \"unknown\", star: true };\n    }\n    return { columns: [trimmed], kind: classifyColumns([trimmed]) };\n  }\n  const columns = projection.map((column) => column.trim()).filter(Boolean);\n  if (columns.length === 0 || columns.includes(\"*\")) {\n    return { kind: model ? \"full-model\" : \"unknown\", star: true };\n  }\n  const sorted = [...columns].sort((left, right) => left.localeCompare(right));\n  return { columns: sorted, kind: classifyColumns(sorted) };\n}\n\nfunction compileFilters(\n  conditions: readonly AthenaGatewayCondition[] | undefined,\n): AthenaFilterDescriptor[] {\n  if (!conditions?.length) {\n    return [];\n  }\n  return conditions\n    .map((condition) => ({\n      column: condition.column ?? condition.eq_column,\n      operator: condition.operator,\n      value: condition.value ?? condition.eq_value,\n    }))\n    .sort((left, right) => {\n      const columnCompare = (left.column ?? \"\").localeCompare(\n        right.column ?? \"\",\n      );\n      if (columnCompare !== 0) {\n        return columnCompare;\n      }\n      const operatorCompare = left.operator.localeCompare(right.operator);\n      if (operatorCompare !== 0) {\n        return operatorCompare;\n      }\n      return stableHash(left.value).localeCompare(stableHash(right.value));\n    });\n}\n\nfunction compileOrder(\n  order: AthenaSortBy | undefined,\n): AthenaOrderDescriptor[] {\n  if (!order?.field) {\n    return [];\n  }\n  return [\n    {\n      ascending: order.direction !== \"descending\",\n      column: order.field,\n    },\n  ];\n}\n\nfunction compileRange(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaRangeDescriptor | undefined {\n  if (\n    input.limit === undefined &&\n    input.offset === undefined &&\n    input.currentPage === undefined &&\n    input.pageSize === undefined\n  ) {\n    return;\n  }\n  return {\n    currentPage: input.currentPage,\n    limit: input.limit,\n    offset: input.offset,\n    pageSize: input.pageSize,\n  };\n}\n\nfunction compileRelations(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaRelationDescriptor[] {\n  const requested = input.relations;\n  if (!requested?.length) {\n    return [];\n  }\n  const modelRelations = input.model?.meta.relations;\n  return [...requested]\n    .map((relation) => {\n      const meta = modelRelations?.[relation.name];\n      return {\n        columns: relation.columns,\n        name: relation.name,\n        sourceColumns: relation.sourceColumns ?? meta?.sourceColumns,\n        star: relation.star ?? !relation.columns?.length,\n        targetColumns: relation.targetColumns ?? meta?.targetColumns,\n        targetModel: relation.targetModel ?? meta?.targetModel,\n        targetSchema: relation.targetSchema ?? meta?.targetSchema,\n        via: relation.via ?? meta?.targetModel,\n      };\n    })\n    .sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction compileContext(\n  context: AthenaCacheScope | undefined,\n): AthenaCacheScope | undefined {\n  if (!context) {\n    return;\n  }\n  const organizationId = normalizeOptional(context.organizationId);\n  const userId = normalizeOptional(context.userId);\n  const accessScope = normalizeOptional(context.accessScope);\n  const policyRevision = normalizeOptional(context.policyRevision);\n  if (!(organizationId || userId || accessScope || policyRevision)) {\n    return;\n  }\n  return {\n    ...(accessScope ? { accessScope } : {}),\n    ...(organizationId ? { organizationId } : {}),\n    ...(policyRevision ? { policyRevision } : {}),\n    ...(userId ? { userId } : {}),\n  };\n}\n\nfunction compilePredicate(\n  filters: readonly AthenaFilterDescriptor[],\n): AthenaPredicateNode | undefined {\n  if (filters.length === 0) {\n    return;\n  }\n  const nodes: AthenaPredicateNode[] = filters.map((filter) => ({\n    column: filter.column,\n    kind: \"compare\",\n    operator: filter.operator,\n    value: filter.value,\n  }));\n  if (nodes.length === 1) {\n    return nodes[0];\n  }\n  return { kind: \"and\", nodes };\n}\n\nfunction compileSelection(\n  target: AthenaQueryTarget,\n  projection: AthenaProjectionDescriptor,\n  relations: readonly AthenaRelationDescriptor[],\n): AthenaSelectionNode[] {\n  const root: AthenaSelectionNode = {\n    columns: projection.columns,\n    name: target.model ?? target.table,\n    star: projection.star,\n    targetModel: target.model,\n    targetSchema: target.schema,\n  };\n  const nested = relations.map((relation) => ({\n    columns: relation.columns,\n    name: relation.name,\n    star: relation.star,\n    targetModel: relation.targetModel,\n    targetSchema: relation.targetSchema,\n  }));\n  return [root, ...nested];\n}\n\nfunction compileDependencies(\n  target: AthenaQueryTarget,\n  filters: readonly AthenaFilterDescriptor[],\n  order: readonly AthenaOrderDescriptor[],\n  projection: AthenaProjectionDescriptor,\n  relations: readonly AthenaRelationDescriptor[],\n  model?: AthenaModelTarget,\n): AthenaQueryDependencyDescriptor {\n  const fields = new Map<string, AthenaFieldDependency>();\n  const addField = (\n    column: string | undefined,\n    role: AthenaQueryFieldDependencyKind,\n  ) => {\n    if (!column) {\n      return;\n    }\n    const key = `${target.table}.${column}`;\n    const existing = fields.get(key);\n    if (existing) {\n      if (!existing.roles.includes(role)) {\n        fields.set(key, {\n          column,\n          roles: [...existing.roles, role],\n          table: target.table,\n        });\n      }\n      return;\n    }\n    fields.set(key, { column, roles: [role], table: target.table });\n  };\n\n  for (const filter of filters) {\n    addField(filter.column, \"filter\");\n  }\n  for (const entry of order) {\n    addField(entry.column, \"order\");\n  }\n  if (!projection.star) {\n    for (const column of projection.columns ?? []) {\n      addField(column, \"projection\");\n    }\n  }\n  for (const column of model?.meta.primaryKey ?? []) {\n    addField(column, \"identity\");\n  }\n\n  const models: AthenaModelDependency[] = [\n    {\n      database: target.database,\n      model: target.model,\n      schema: target.schema,\n      table: target.table,\n    },\n  ];\n  for (const relation of relations) {\n    if (relation.targetModel) {\n      models.push({\n        model: relation.targetModel,\n        schema: relation.targetSchema,\n        table: relation.targetModel,\n      });\n    }\n  }\n\n  return {\n    fields: [...fields.values()].sort((left, right) =>\n      `${left.table}.${left.column}`.localeCompare(\n        `${right.table}.${right.column}`,\n      ),\n    ),\n    models,\n    relations: relations.map((relation) => ({\n      name: relation.name,\n      targetModel: relation.targetModel,\n      targetSchema: relation.targetSchema,\n    })),\n  };\n}\n\nexport function buildAthenaModelScopeKey(\n  target: AthenaQueryTarget,\n  context?: AthenaCacheContextDescriptor,\n): readonly unknown[] {\n  const qualified = target.schema\n    ? `${target.schema}.${target.table}`\n    : target.table;\n  return [\"athena\", \"model\", context ?? null, qualified];\n}\n\nexport function buildAthenaQueryKey(\n  modelScopeKey: readonly unknown[],\n  operation: AthenaQueryOperation,\n  hashes: {\n    filters: string;\n    order: string;\n    projection: string;\n    range: string;\n    relations: string;\n  },\n): readonly unknown[] {\n  return [\n    ...modelScopeKey,\n    operation,\n    hashes.projection,\n    hashes.filters,\n    hashes.relations,\n    hashes.order,\n    hashes.range,\n  ];\n}\n\nexport function compileAthenaQueryDescriptor(\n  input: AthenaQueryDescriptorCompileInput,\n): AthenaQueryDescriptor {\n  const target = resolveAthenaQueryTarget(input.tableName, input.model);\n  const context = compileContext(input.context);\n  const projection = compileProjection(input.projection, input.model);\n  const filters = compileFilters(input.conditions);\n  const order = compileOrder(input.order);\n  const range = compileRange(input);\n  const relations = compileRelations(input);\n  const dependency = compileDependencies(\n    target,\n    filters,\n    order,\n    projection,\n    relations,\n    input.model,\n  );\n  const predicate = compilePredicate(filters);\n  const selection = compileSelection(target, projection, relations);\n  const modelScopeKey = buildAthenaModelScopeKey(target, context);\n  const modelFingerprint = hashAthenaValue({\n    model: target.model ?? null,\n    schema: target.schema ?? null,\n    table: target.table,\n  });\n  const queryKey = buildAthenaQueryKey(modelScopeKey, input.operation, {\n    filters: stableHash(filters),\n    order: stableHash(order),\n    projection: stableHash({\n      columns: projection.columns ?? null,\n      star: Boolean(projection.star),\n    }),\n    range: stableHash(range ?? null),\n    relations: stableHash(relations),\n  });\n\n  return freezeAthenaQueryDescriptor({\n    changedFields: input.changedFields?.length\n      ? [...input.changedFields].sort((left, right) =>\n          left.localeCompare(right),\n        )\n      : undefined,\n    context,\n    dependency,\n    filters: filters.length > 0 ? filters : undefined,\n    modelFingerprint,\n    modelScopeKey,\n    operation: input.operation,\n    order: order.length > 0 ? order : undefined,\n    pagination: range,\n    predicate,\n    projection,\n    queryKey,\n    range,\n    relations: relations.length > 0 ? relations : undefined,\n    schemaRevision: input.schemaRevision,\n    scope: context,\n    selection,\n    target,\n    version: 2,\n  });\n}\n\nfunction freezeAthenaQueryDescriptor(\n  descriptor: AthenaQueryDescriptor,\n): AthenaQueryDescriptor {\n  freezeDeep(descriptor.dependency.fields);\n  freezeDeep(descriptor.dependency.models);\n  freezeDeep(descriptor.dependency.relations);\n  freezeDeep(descriptor.dependency);\n  if (descriptor.filters) {\n    freezeDeep(descriptor.filters);\n  }\n  if (descriptor.order) {\n    freezeDeep(descriptor.order);\n  }\n  if (descriptor.projection) {\n    freezeDeep(descriptor.projection);\n  }\n  if (descriptor.range) {\n    freezeDeep(descriptor.range);\n  }\n  if (descriptor.relations) {\n    freezeDeep(descriptor.relations);\n  }\n  if (descriptor.context) {\n    freezeDeep(descriptor.context);\n  }\n  if (descriptor.scope) {\n    freezeDeep(descriptor.scope);\n  }\n  if (descriptor.selection) {\n    freezeDeep(descriptor.selection);\n  }\n  if (descriptor.predicate) {\n    freezeDeep(descriptor.predicate);\n  }\n  freezeDeep(descriptor.target);\n  freezeDeep(descriptor.modelScopeKey);\n  freezeDeep(descriptor.queryKey);\n  if (descriptor.changedFields) {\n    freezeDeep(descriptor.changedFields);\n  }\n  return Object.freeze(descriptor);\n}\n\nfunction freezeDeep<T>(value: T): T {\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Object.isFrozen(value)) {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      freezeDeep(item);\n    }\n  } else {\n    for (const key of Object.keys(value as object)) {\n      freezeDeep((value as Record<string, unknown>)[key]);\n    }\n  }\n  return Object.freeze(value);\n}\n\nexport function createCapturedAthenaExecutable<TResult>(input: {\n  descriptor: AthenaQueryDescriptor;\n  execute: (options?: AthenaExecuteOptions) => Promise<TResult>;\n  model?: AthenaModelTarget;\n}): AthenaExecutable<TResult> {\n  const captured: AthenaExecutable<TResult> = {\n    capture() {\n      return captured;\n    },\n    execute: (options) => input.execute(options),\n    getDescriptor() {\n      return input.descriptor;\n    },\n    model: input.model,\n  };\n  return captured;\n}\n\nexport function isAthenaExecutable(\n  value: unknown,\n): value is AthenaExecutable<unknown> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  return (\n    typeof value.getDescriptor === \"function\" &&\n    typeof value.execute === \"function\" &&\n    typeof value.capture === \"function\"\n  );\n}\n\nexport function peekSyncCacheContext(\n  resolve:\n    | (() =>\n        | AthenaCacheScope\n        | {\n            accessScope?: string | null;\n            organizationId?: string | null;\n            policyRevision?: string | null;\n            userId?: string | null;\n          }\n        | undefined\n        | Promise<unknown>)\n    | undefined\n): AthenaCacheScope | undefined {\n  if (!resolve) {\n    return;\n  }\n  const resolved = resolve();\n  if (\n    resolved &&\n    typeof resolved === \"object\" &&\n    \"then\" in resolved &&\n    typeof resolved.then === \"function\"\n  ) {\n    return;\n  }\n  if (!resolved || typeof resolved !== \"object\") {\n    return;\n  }\n  const record = resolved as {\n    accessScope?: string | null;\n    organizationId?: string | null;\n    policyRevision?: string | null;\n    userId?: string | null;\n  };\n  return compileContext({\n    accessScope: record.accessScope ?? undefined,\n    organizationId: record.organizationId ?? undefined,\n    policyRevision: record.policyRevision ?? undefined,\n    userId: record.userId ?? undefined,\n  });\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaFindManyOptions,\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n} from \"./query-ast.ts\";\nimport type {\n  AthenaFindManyAstPayload,\n  AthenaSelectTransportPlan,\n} from \"./query-transport.ts\";\n\nconst ATHENA_DEBUG_AST_KEY = \"__athenaDebugAst\" as const;\n\nexport interface AthenaTableBuilderStateAst {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  totalPages?: number;\n}\n\nexport interface AthenaRpcBuilderStateAst {\n  filters: AthenaRpcFilter[];\n  limit?: number;\n  offset?: number;\n  order?: {\n    column: string;\n    ascending?: boolean;\n  };\n}\n\nexport type AthenaDebugQueryEndpoint =\n  | \"/gateway/fetch\"\n  | \"/gateway/insert\"\n  | \"/gateway/update\"\n  | \"/gateway/delete\"\n  | \"/gateway/rpc\"\n  | \"/gateway/query\"\n  | `/rpc/${string}`;\n\ninterface AthenaDebugAstBase<TKind extends string> {\n  kind: TKind;\n  version: 1;\n}\n\nexport type AthenaSelectDebugTransport =\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"typed-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<\"select\"> {\n  input: {\n    columns: string | string[];\n    state: AthenaTableBuilderStateAst;\n  };\n  tableName: string;\n  transport: AthenaSelectDebugTransport;\n}\n\nexport type AthenaFindManyDebugTransport<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n  | {\n      mode: \"direct-ast-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFindManyAstPayload<Row, TSelect>;\n    }\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"compiled-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaFindManyDebugAst<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<\"findMany\"> {\n  compiled: {\n    columns: string;\n    baseState: AthenaTableBuilderStateAst;\n    executionState: AthenaTableBuilderStateAst;\n  };\n  input: {\n    select: TSelect;\n    where?: AthenaWhere<Row>;\n    orderBy?: AthenaOrderBy<Row>;\n    limit?: number;\n  };\n  tableName: string;\n  transport: AthenaFindManyDebugTransport<Row, TSelect>;\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<\"insert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"insert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<\"upsert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    updateBody?: AthenaInsertPayload[\"update_body\"];\n    onConflict?: AthenaInsertPayload[\"on_conflict\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"upsert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<\"update\"> {\n  input: {\n    values: AthenaUpdatePayload[\"update_body\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaUpdatePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"update\";\n    endpoint: \"/gateway/update\";\n    payload: AthenaUpdatePayload;\n  };\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<\"delete\"> {\n  input: {\n    resourceId?: AthenaDeletePayload[\"resource_id\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaDeletePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"delete\";\n    endpoint: \"/gateway/delete\";\n    payload: AthenaDeletePayload;\n  };\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<\"rpc\"> {\n  functionName: string;\n  input: {\n    args?: AthenaJsonObject;\n    select?: string | string[];\n    state: AthenaRpcBuilderStateAst;\n  };\n  transport: {\n    mode: \"rpc-post\" | \"rpc-get\";\n    endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n    payload: AthenaRpcPayload;\n  };\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<\"query\"> {\n  input: {\n    query: string;\n  };\n  transport: {\n    mode: \"raw-query\";\n    endpoint: \"/gateway/query\";\n    payload: {\n      query: string;\n    };\n  };\n}\n\nexport type AthenaQueryDebugAst =\n  | AthenaSelectDebugAst\n  | AthenaFindManyDebugAst\n  | AthenaInsertDebugAst\n  | AthenaUpsertDebugAst\n  | AthenaUpdateDebugAst\n  | AthenaDeleteDebugAst\n  | AthenaRpcDebugAst\n  | AthenaRawQueryDebugAst;\n\nfunction cloneConditions(\n  conditions: AthenaGatewayCondition[]\n): AthenaGatewayCondition[] {\n  return conditions.map((condition) => ({ ...condition }));\n}\n\nexport function cloneTableBuilderStateAst(\n  state: AthenaTableBuilderStateAst\n): AthenaTableBuilderStateAst {\n  return {\n    conditions: cloneConditions(state.conditions),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  };\n}\n\nexport function cloneRpcBuilderStateAst(\n  state: AthenaRpcBuilderStateAst\n): AthenaRpcBuilderStateAst {\n  return {\n    filters: state.filters.map((filter) => ({ ...filter })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n  };\n}\n\nfunction toSelectTransportAst(\n  plan: AthenaSelectTransportPlan\n): AthenaSelectDebugTransport {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"typed-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n  return tableName ?? \"__unknown_table__\";\n}\n\nexport function buildSelectDebugAst(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaSelectDebugAst {\n  return {\n    input: {\n      columns: input.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"select\",\n    tableName: input.tableName,\n    transport: toSelectTransportAst(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyCompiledDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: planToFindManyTransport<Row, TSelect>(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyDirectDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  payload: AthenaFindManyAstPayload<Row, TSelect>;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: {\n      endpoint: \"/gateway/fetch\",\n      mode: \"direct-ast-fetch\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nfunction planToFindManyTransport<Row, TSelect extends AthenaSelectShape>(\n  plan: AthenaSelectTransportPlan\n): AthenaFindManyDebugTransport<Row, TSelect> {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"compiled-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nexport function buildInsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaInsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      returning: payload.columns,\n      values: payload.insert_body,\n    },\n    kind: \"insert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"insert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaUpsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      onConflict: payload.on_conflict,\n      returning: payload.columns,\n      updateBody: payload.update_body,\n      values: payload.insert_body,\n    },\n    kind: \"upsert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"upsert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpdateDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaUpdatePayload;\n}): AthenaUpdateDebugAst {\n  return {\n    input: {\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n      values: input.payload.update_body,\n    },\n    kind: \"update\",\n    tableName: resolveDebugTableName(input.payload.table_name),\n    transport: {\n      endpoint: \"/gateway/update\",\n      mode: \"update\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildDeleteDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaDeletePayload;\n}): AthenaDeleteDebugAst {\n  return {\n    input: {\n      resourceId: input.payload.resource_id,\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"delete\",\n    tableName: input.payload.table_name,\n    transport: {\n      endpoint: \"/gateway/delete\",\n      mode: \"delete\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRpcDebugAst(input: {\n  functionName: string;\n  args?: AthenaJsonObject;\n  selectedColumns?: string | string[];\n  state: AthenaRpcBuilderStateAst;\n  payload: AthenaRpcPayload;\n  endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n}): AthenaRpcDebugAst {\n  return {\n    functionName: input.functionName,\n    input: {\n      args: input.args,\n      select: input.selectedColumns,\n      state: cloneRpcBuilderStateAst(input.state),\n    },\n    kind: \"rpc\",\n    transport: {\n      endpoint: input.endpoint,\n      mode: input.endpoint === \"/gateway/rpc\" ? \"rpc-post\" : \"rpc-get\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n  return {\n    input: {\n      query,\n    },\n    kind: \"query\",\n    transport: {\n      endpoint: \"/gateway/query\",\n      mode: \"raw-query\",\n      payload: {\n        query,\n      },\n    },\n    version: 1,\n  };\n}\n\nexport function attachAthenaDebugAst(\n  target: unknown,\n  ast: AthenaQueryDebugAst | undefined\n): void {\n  if (!ast) {\n    return;\n  }\n  if (!target || (typeof target !== \"object\" && typeof target !== \"function\")) {\n    return;\n  }\n  Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: ast,\n    writable: false,\n  });\n}\n\nexport function getAthenaDebugAst(value: unknown): AthenaQueryDebugAst | null {\n  if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) {\n    return null;\n  }\n  return (\n    ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as\n      | AthenaQueryDebugAst\n      | undefined) ?? null\n  );\n}\n","import type {\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  InternalClientBehaviorOptions,\n} from \"./client-fluent.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaRpcCallOptions,\n} from \"./gateway/types.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport { attachAthenaDebugAst } from \"./query-debug-ast.ts\";\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n  \"src\\\\client.ts\",\n  \"src/client.ts\",\n  \"src\\\\client-fluent.ts\",\n  \"src/client-fluent.ts\",\n  \"src\\\\client\\\\context.ts\",\n  \"src/client/context.ts\",\n  \"src\\\\client\\\\create-client.ts\",\n  \"src/client/create-client.ts\",\n  \"src\\\\query-tracing.ts\",\n  \"src/query-tracing.ts\",\n  \"src\\\\v3-client.ts\",\n  \"src/v3-client.ts\",\n  \"src\\\\v3-client-core.ts\",\n  \"src/v3-client-core.ts\",\n  \"dist\\\\client.\",\n  \"dist/client.\",\n  \"dist\\\\query-tracing.\",\n  \"dist/query-tracing.\",\n  \"dist\\\\v3-client.\",\n  \"dist/v3-client.\",\n  \"node_modules\\\\@xylex-group\\\\athena\",\n  \"node_modules/@xylex-group/athena\",\n  \"node:internal\",\n  \"internal/process\",\n] as const;\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent[\"operation\"];\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent[\"endpoint\"];\n\nexport interface AthenaTraceContext {\n  ast?: AthenaQueryDebugAst;\n  endpoint: AthenaTraceEndpoint;\n  functionName?: string;\n  operation: AthenaTraceOperation;\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n  payload: unknown;\n  /** Non-authoritative intent. Fluent upsert traces this; Policy still sees insert. */\n  semanticOperation?: \"upsert\";\n  sql: string;\n  table?: string;\n}\n\nexport interface AthenaQueryTracer {\n  captureCallsite: () => AthenaQueryTraceCallsite | null;\n  publishFailure: (\n    context: AthenaTraceContext,\n    error: unknown,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n  publishSuccess: <T>(\n    context: AthenaTraceContext,\n    result: AthenaResult<T>,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n}\n\nexport interface AthenaTraceCallsiteStore {\n  resolve: (\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => AthenaQueryTraceCallsite | null;\n}\n\nfunction parseQueryTraceCallsiteFrame(\n  frame: string\n): AthenaQueryTraceCallsite | null {\n  const trimmed = frame.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  let body = trimmed.replace(/^at\\s+/, \"\");\n  if (body.startsWith(\"async \")) {\n    body = body.slice(6);\n  }\n\n  let functionName: string | undefined;\n  let location = body;\n  const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/);\n  if (wrappedMatch) {\n    functionName = wrappedMatch[1].trim() || undefined;\n    location = wrappedMatch[2].trim();\n  }\n\n  const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/);\n  if (!locationMatch) {\n    return null;\n  }\n\n  const filePath = locationMatch[1].replace(/^file:\\/\\//, \"\");\n  const line = Number(locationMatch[2]);\n  const column = Number(locationMatch[3]);\n  if (!(Number.isFinite(line) && Number.isFinite(column))) {\n    return null;\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n  const fileName = normalizedPath.split(\"/\").at(-1) ?? filePath;\n  return {\n    column,\n    fileName,\n    filePath,\n    frame: trimmed,\n    functionName,\n    line,\n  };\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n  const stack = new Error(\"query trace stack capture\").stack;\n  if (!stack) {\n    return null;\n  }\n  const frames = stack\n    .split(\"\\n\")\n    .slice(2)\n    .map((frame) => frame.trim())\n    .filter(Boolean);\n\n  for (const frame of frames) {\n    if (\n      QUERY_TRACE_STACK_SKIP_PATTERNS.some((pattern) => frame.includes(pattern))\n    ) {\n      continue;\n    }\n    const callsite = parseQueryTraceCallsiteFrame(frame);\n    if (callsite) {\n      return callsite;\n    }\n  }\n\n  const fallback = frames.find(\n    (frame) => !frame.includes(\"captureQueryTraceCallsite\")\n  );\n  return fallback ? parseQueryTraceCallsiteFrame(fallback) : null;\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n  const target = event.table ?? event.functionName ?? \"gateway\";\n  const outcomeState = event.outcome?.error ? \"error\" : \"ok\";\n  const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`;\n  console.info(banner, event);\n}\n\nexport function captureTraceCallsite(\n  tracer?: AthenaQueryTracer\n): AthenaQueryTraceCallsite | null {\n  return tracer?.captureCallsite() ?? null;\n}\n\nexport function createTraceCallsiteStore(\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null\n): AthenaTraceCallsiteStore {\n  let storedCallsite = initialCallsite ?? undefined;\n\n  return {\n    resolve(callsite) {\n      if (callsite) {\n        storedCallsite = callsite;\n        return callsite;\n      }\n      if (storedCallsite !== undefined) {\n        return storedCallsite;\n      }\n      const capturedCallsite = captureTraceCallsite(tracer);\n      if (capturedCallsite) {\n        storedCallsite = capturedCallsite;\n      }\n      return capturedCallsite;\n    },\n  };\n}\n\nexport function createQueryTracer(\n  behavior?: InternalClientBehaviorOptions\n): AthenaQueryTracer | undefined {\n  const traceOption = behavior?.traceQueries;\n  if (!traceOption) {\n    return;\n  }\n\n  const logger =\n    typeof traceOption === \"object\" && traceOption.logger\n      ? traceOption.logger\n      : defaultQueryTraceLogger;\n\n  const emit = (event: AthenaQueryTraceEvent) => {\n    try {\n      logger(event);\n    } catch (error) {\n      console.warn(\"[athena-js][trace] logger failed\", error);\n    }\n  };\n\n  return {\n    captureCallsite: captureQueryTraceCallsite,\n    publishFailure(\n      context: AthenaTraceContext,\n      error: unknown,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        thrownError: error,\n        timestamp: new Date().toISOString(),\n      });\n    },\n    publishSuccess<T>(\n      context: AthenaTraceContext,\n      result: AthenaResult<T>,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        outcome: {\n          count: result.count ?? null,\n          data: result.data,\n          error: result.error,\n          errorDetails: result.errorDetails ?? null,\n          raw: result.raw,\n          status: result.status,\n        },\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        timestamp: new Date().toISOString(),\n      });\n    },\n  };\n}\n\nexport async function executeWithQueryTrace<T>(\n  tracer: AthenaQueryTracer | undefined,\n  context: AthenaTraceContext,\n  runner: () => Promise<AthenaResult<T>>,\n  callsiteOverride?: AthenaQueryTraceCallsite | null\n): Promise<AthenaResult<T>> {\n  const callsite = tracer\n    ? (callsiteOverride ?? tracer.captureCallsite())\n    : null;\n  const startedAt = tracer ? Date.now() : 0;\n  try {\n    const result = await runner();\n    attachAthenaDebugAst(result, context.ast);\n    if (tracer) {\n      tracer.publishSuccess(context, result, Date.now() - startedAt, callsite);\n    }\n    return result;\n  } catch (error) {\n    attachAthenaDebugAst(error, context.ast);\n    if (tracer) {\n      tracer.publishFailure(context, error, Date.now() - startedAt, callsite);\n    }\n    throw error;\n  }\n}\n","import type {\n\tAthenaResult,\n\tAthenaResultError,\n\tAthenaResultFormatter,\n} from \"./client-result.ts\";\nimport {\n\tapplyCardinality,\n\texecuteRead,\n\ttoSingleResult,\n} from \"./client-result.ts\";\nimport {\n\tbuildDebugSelectQuery,\n\tbuildDeleteDebugSql,\n\tbuildIncludeJoinSelectQuery,\n\tbuildInsertDebugSql,\n\tbuildRpcDebugSql,\n\tbuildTypedSelectQuery,\n\tbuildUpdateDebugSql,\n\tresolveTableNameForCall,\n} from \"./client-sql.ts\";\nimport type {\n\tAthenaConditionArrayValue,\n\tAthenaConditionCastType,\n\tAthenaConditionOperator,\n\tAthenaConditionValue,\n\tAthenaDeletePayload,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayCondition,\n\tAthenaGatewayErrorDetails,\n\tAthenaInsertPayload,\n\tAthenaJsonObject,\n\tAthenaJsonValue,\n\tAthenaRpcCallOptions,\n\tAthenaRpcFilter,\n\tAthenaRpcFilterOperator,\n\tAthenaRpcPayload,\n\tAthenaSortBy,\n\tAthenaUpdatePayload,\n} from \"./gateway/types.ts\";\n\nexport type {\n\tAthenaRequestMethod,\n\tAthenaRequestOptions,\n\tAthenaRequestQueryValueMap,\n\tAthenaRequestResponse,\n\tAthenaRequestService,\n} from \"./client-request.ts\";\nexport type { AthenaResult, AthenaResultError } from \"./client-result.ts\";\n\nimport {\n\tclassifyRawSqlOperation,\n\tcreateAdminQuery,\n\tdefaultExpectedShapeForOperation,\n\tmaybeWarnRawQueryDeprecated,\n} from \"./admin/query.ts\";\nimport { requireAffected } from \"./auxiliaries.ts\";\nimport { AthenaTransactionError } from \"./db/transaction/errors.ts\";\nimport {\n\tattachTransactionCompiler,\n\tnextTransactionOperationId,\n} from \"./db/transaction/index.ts\";\nimport type { createAthenaGatewayClient } from \"./gateway/client.ts\";\nimport type {\n\tAthenaCacheContextDescriptor,\n\tAthenaExecutable,\n\tAthenaExecuteOptions,\n\tAthenaQueryDescriptor,\n\tAthenaQueryOperation,\n\tAthenaRelationDescriptor,\n} from \"./query/descriptor.ts\";\nimport {\n\tcompileAthenaQueryDescriptor,\n\tcreateCapturedAthenaExecutable,\n} from \"./query/descriptor.ts\";\nimport type {\n\tAthenaFindManyOptions,\n\tAthenaFindManyResult,\n\tAthenaSelectShape,\n\tAthenaValidatedSelectShape,\n} from \"./query-ast.ts\";\nimport {\n\tcompileOrderBy,\n\tcompileSelectShape,\n\tcompileWhere,\n\tselectShapeHasNestedQueryModifiers,\n\tselectShapeUsesRelationSchema,\n\tshouldUseUuidTextComparison,\n} from \"./query-ast.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport {\n\tbuildDeleteDebugAst,\n\tbuildFindManyCompiledDebugAst,\n\tbuildFindManyDirectDebugAst,\n\tbuildInsertDebugAst,\n\tbuildRawQueryDebugAst,\n\tbuildRpcDebugAst,\n\tbuildSelectDebugAst,\n\tbuildUpdateDebugAst,\n\tbuildUpsertDebugAst,\n} from \"./query-debug-ast.ts\";\nimport type { AthenaQueryTracer } from \"./query-tracing.ts\";\nimport {\n\tcaptureTraceCallsite,\n\tcreateTraceCallsiteStore,\n\texecuteWithQueryTrace,\n} from \"./query-tracing.ts\";\nimport type { AthenaFindManyAstPayload } from \"./query-transport.ts\";\nimport {\n\tcanUseFindManyAstTransport,\n\tcreateSelectTransportPlan,\n\tfindManyAstWhereRequiresLegacyTransport,\n\tnormalizeFindManyAstWhere,\n\ttoFindManyAstOrder,\n} from \"./query-transport.ts\";\nimport type {\n\tAthenaSelectInput,\n\tAthenaTypecheckedColumnKey,\n\tAthenaValidatedSelectInput,\n} from \"./select-column-types.ts\";\n\nexport type {\n\tAthenaColumnKey,\n\tAthenaColumnKeyWithAutocomplete,\n\tAthenaResolvedColumnKey,\n\tAthenaSelectArrayElement,\n\tAthenaSelectColumnsFor,\n\tAthenaSelectInput,\n\tAthenaSelectInputHints,\n\tAthenaTypecheckedColumnKey,\n\tAthenaValidatedSelectInput,\n\tHasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\nimport type {\n\tAthenaClientModelForTableName,\n\tAthenaClientTableName,\n\tAthenaModelTarget,\n\tInsertOf,\n\tRowOf,\n\tUpdateOf,\n} from \"./schema/types.ts\";\n\nexport interface InternalClientBehaviorOptions {\n\t/**\n\t * Build and attach a normalized operation AST for runtime debugging.\n\t *\n\t * When enabled, successful Athena results expose a non-enumerable debug AST\n\t * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n\t * the same AST is included on emitted trace events.\n\t */\n\tdebugAst?: boolean;\n\t/**\n\t * Send the original `findMany(...)` AST body for clean object-select reads.\n\t * This requires gateway support and falls back to legacy compiled transport\n\t * when a chain carries filter/pagination state that the AST payload cannot\n\t * represent losslessly yet.\n\t */\n\tfindManyAst?: boolean;\n\t/**\n\t * Allow schema-qualified relation nodes on the findMany AST payload.\n\t * Hosted Gateway still falls back to PostgREST embed strings.\n\t */\n\tfindManyAstRelationSchema?: boolean;\n\t/**\n\t * Control deprecation warnings for root `query()` (ATHENA_RAW_SQL_COMPAT_DEPRECATED).\n\t * - `false`: never warn\n\t * - `true`: always warn (once per client)\n\t * - `auto` / omitted: warn in non-production only (once per client)\n\t */\n\trawQueryDiagnostics?: boolean | \"auto\";\n\t/**\n\t * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n\t *\n\t * Applies two additional attempts with exponential backoff and jitter.\n\t */\n\tretryReads?: boolean;\n\t/**\n\t * Emit execution diagnostics for every query/mutation/RPC invocation.\n\t * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n\t */\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface AthenaQueryTraceOptions {\n\t/**\n\t * When false, tracing is off even if diagnostics mode would enable it.\n\t * When true, tracing stays on even in quiet (`diagnostics: 'auto'`) environments.\n\t * When omitted, quiet environments disable object-form trace options.\n\t */\n\tenabled?: boolean;\n\t/**\n\t * Custom sink for trace events. Defaults to console.info.\n\t */\n\tlogger?: (event: AthenaQueryTraceEvent) => void;\n}\n\nexport interface AthenaQueryTraceCallsite {\n\tcolumn: number;\n\tfileName: string;\n\tfilePath: string;\n\tframe?: string;\n\tfunctionName?: string;\n\tline: number;\n}\n\nexport interface AthenaQueryTraceEvent {\n\tast?: AthenaQueryDebugAst;\n\tcallsite: AthenaQueryTraceCallsite | null;\n\tdurationMs: number;\n\tendpoint:\n\t\t| \"/gateway/fetch\"\n\t\t| \"/gateway/insert\"\n\t\t| \"/gateway/update\"\n\t\t| \"/gateway/delete\"\n\t\t| \"/gateway/rpc\"\n\t\t| \"/gateway/query\"\n\t\t| `/rpc/${string}`;\n\tfunctionName?: string;\n\toperation:\n\t\t| \"select\"\n\t\t| \"insert\"\n\t\t| \"upsert\"\n\t\t| \"update\"\n\t\t| \"delete\"\n\t\t| \"rpc\"\n\t\t| \"query\";\n\toptions?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n\toutcome?: {\n\t\tstatus: number;\n\t\terror: AthenaResultError | null;\n\t\terrorDetails?: AthenaGatewayErrorDetails | null;\n\t\tcount?: number | null;\n\t\tdata: unknown;\n\t\traw: unknown;\n\t};\n\tpayload: unknown;\n\tsql: string;\n\ttable?: string;\n\tthrownError?: unknown;\n\ttimestamp: string;\n}\n\ninterface TableBuilderState {\n\tcacheContext?: AthenaCacheContextDescriptor;\n\tconditions: AthenaGatewayCondition[];\n\tcurrentPage?: number;\n\tlimit?: number;\n\tmodel?: AthenaModelTarget;\n\toffset?: number;\n\torder?: AthenaSortBy;\n\tpageSize?: number;\n\trelations?: AthenaRelationDescriptor[];\n\ttotalPages?: number;\n}\n\ninterface ConditionCastHints {\n\tcolumnCast?: AthenaConditionCastType;\n\tvalueCast?: AthenaConditionCastType;\n}\n\ntype MutationSingleResult<Result> =\n\tResult extends Array<infer Item> ? Item | null : Result | null;\ntype MutationResultRow<Result> =\n\tResult extends Array<infer Item> ? Item : Result;\nexport type 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\t? string\n\t: string extends FilterColumnKey<Row>\n\t\t? string\n\t\t: 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 */\nexport type UntypedTableName<TModels> = [TModels] extends [never]\n\t? string\n\t: [AthenaClientTableName<TModels>] extends [never]\n\t\t? string\n\t\t: AthenaClientTableName<TModels>;\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n\tAthenaClientModelForTableName<TModels, TTableName>,\n\tAthenaModelTarget\n>;\nexport type ClientTableQueryBuilder<\n\tTModels,\n\tTTableName extends string,\n> = TableQueryBuilder<\n\tRowOf<ResolvedClientTableModel<TModels, TTableName>>,\n\tInsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n\tUpdateOf<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\tRow,\n\tTValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>;\nconst DEFAULT_COLUMNS = \"*\";\n\ntype SelectDebugAstFactory = (input: {\n\ttableName: string;\n\tcolumns: string | string[];\n\texecutionState: TableBuilderState;\n\tplan: ReturnType<typeof createSelectTransportPlan>;\n}) => AthenaQueryDebugAst;\n\nexport interface MutationQuery<Result, Row = MutationResultRow<Result>>\n\textends PromiseLike<AthenaResult<Result>>,\n\t\tAthenaExecutable<AthenaResult<Result>> {\n\tcatch: <TResult = never>(\n\t\tonrejected?:\n\t\t\t| ((reason: unknown) => TResult | PromiseLike<TResult>)\n\t\t\t| undefined\n\t\t\t| null,\n\t) => Promise<AthenaResult<Result> | TResult>;\n\tfinally: (\n\t\tonfinally?: (() => void) | undefined | null,\n\t) => Promise<AthenaResult<Result>>;\n\trequireAffected: (options?: {\n\t\tmin?: number;\n\t}) => Promise<AthenaResult<Result>>;\n\tmaybeSingle: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n\treturning: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Result>>;\n\tselect: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Result>>;\n\tsingle: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n\tthen: <TResult1 = AthenaResult<Result>, TResult2 = never>(\n\t\tonfulfilled?:\n\t\t\t| ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>)\n\t\t\t| undefined\n\t\t\t| null,\n\t\tonrejected?:\n\t\t\t| ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n\t\t\t| undefined\n\t\t\t| null,\n\t) => Promise<TResult1 | TResult2>;\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n\t...options: Array<T | undefined>\n): T | undefined {\n\treturn options.reduce<T | undefined>((acc, next) => {\n\t\tif (!next) {\n\t\t\treturn acc;\n\t\t}\n\t\tconst merged = { ...(acc ?? {}), ...next } as T;\n\t\tif (acc?.headers || next.headers) {\n\t\t\tmerged.headers = {\n\t\t\t\t...(acc?.headers ?? {}),\n\t\t\t\t...(next.headers ?? {}),\n\t\t\t};\n\t\t}\n\t\treturn merged;\n\t}, undefined);\n}\n\nfunction collectChangedFields(values: unknown): string[] {\n\tif (Array.isArray(values)) {\n\t\tconst keys = new Set<string>();\n\t\tfor (const value of values) {\n\t\t\tif (value && typeof value === \"object\") {\n\t\t\t\tfor (const key of Object.keys(value as object)) {\n\t\t\t\t\tkeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [...keys];\n\t}\n\tif (values && typeof values === \"object\") {\n\t\treturn Object.keys(values as object);\n\t}\n\treturn [];\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n\treturn value as unknown as AthenaJsonObject;\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n\treturn values as unknown as AthenaJsonObject[];\n}\n\nfunction normalizeSelectColumnsInput(\n\tcolumns?: AthenaSelectInput,\n): string | string[] | undefined {\n\tif (columns === undefined) {\n\t\treturn;\n\t}\n\tif (typeof columns === \"string\") {\n\t\treturn columns;\n\t}\n\treturn [...columns];\n}\n\nfunction createMutationQuery<Result, Row = MutationResultRow<Result>>(\n\texecutor: (\n\t\tcolumns?: string | string[],\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => Promise<AthenaResult<Result>>,\n\tdefaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n\ttracer?: AthenaQueryTracer,\n\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\texecutable?: {\n\t\tgetDescriptor: (\n\t\t\tprojection: AthenaSelectInput | undefined,\n\t\t) => AthenaQueryDescriptor;\n\t\tmodel?: AthenaModelTarget;\n\t},\n\tcompileTransaction?: (\n\t\tcolumns: string | string[] | undefined,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => {\n\t\tkind: \"fetch\" | \"insert\" | \"update\" | \"delete\";\n\t\tpayload:\n\t\t\t| import(\"./gateway/types.ts\").AthenaFetchPayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaInsertPayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaUpdatePayload\n\t\t\t| import(\"./gateway/types.ts\").AthenaDeletePayload;\n\t},\n): MutationQuery<Result, Row> {\n\tlet selectedColumns: AthenaSelectInput | undefined =\n\t\tdefaultColumns === null ? undefined : defaultColumns;\n\tlet selectedOptions: AthenaGatewayCallOptions | undefined;\n\tlet promise: Promise<AthenaResult<Result>> | null = null;\n\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n\tconst run = (\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => {\n\t\tconst payloadColumns = columns ?? selectedColumns;\n\t\tconst payloadOptions = options ?? selectedOptions;\n\t\tif (!promise) {\n\t\t\tpromise = executor(\n\t\t\t\tnormalizeSelectColumnsInput(payloadColumns),\n\t\t\t\tpayloadOptions,\n\t\t\t\tcallsiteStore.resolve(callsite),\n\t\t\t);\n\t\t}\n\t\treturn promise;\n\t};\n\n\tconst mutationQuery: MutationQuery<Result, Row> = {\n\t\tcapture() {\n\t\t\tconst capturedColumns = selectedColumns;\n\t\t\tconst capturedOptions = selectedOptions;\n\t\t\treturn createCapturedAthenaExecutable({\n\t\t\t\tdescriptor: mutationQuery.getDescriptor(),\n\t\t\t\texecute: (executeOptions) =>\n\t\t\t\t\trun(capturedColumns, {\n\t\t\t\t\t\t...capturedOptions,\n\t\t\t\t\t\tsignal: executeOptions?.signal ?? capturedOptions?.signal,\n\t\t\t\t\t}),\n\t\t\t\tmodel: executable?.model,\n\t\t\t});\n\t\t},\n\t\tcatch(onrejected) {\n\t\t\treturn run(selectedColumns, selectedOptions).catch(onrejected);\n\t\t},\n\t\texecute(executeOptions?: AthenaExecuteOptions) {\n\t\t\treturn run(selectedColumns, {\n\t\t\t\t...selectedOptions,\n\t\t\t\tsignal: executeOptions?.signal ?? selectedOptions?.signal,\n\t\t\t});\n\t\t},\n\t\tfinally(onfinally) {\n\t\t\treturn run(selectedColumns, selectedOptions).finally(onfinally);\n\t\t},\n\t\tgetDescriptor() {\n\t\t\tif (!executable) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Mutation query is missing a descriptor compiler. Pass getDescriptor when constructing the mutation.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn executable.getDescriptor(selectedColumns);\n\t\t},\n\t\tasync requireAffected(options?: { min?: number }) {\n\t\t\tconst result = await run(selectedColumns, selectedOptions);\n\t\t\trequireAffected(result, options, {\n\t\t\t\toperation: executable ? \"mutation\" : undefined,\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\tmaybeSingle(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\t// Omit args keep the mutation default projection (\"*\") so PG/D1 emit RETURNING.\n\t\t\tif (columns !== undefined) {\n\t\t\t\tselectedColumns = columns;\n\t\t\t}\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(\n\t\t\t\tcolumns ?? selectedColumns,\n\t\t\t\toptions ?? selectedOptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t).then((result) => applyCardinality(result, \"maybeSingle\"));\n\t\t},\n\t\treturning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\treturn mutationQuery.select(columns, options);\n\t\t},\n\t\tselect(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\tselectedColumns = columns;\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(columns, options, captureTraceCallsite(tracer));\n\t\t},\n\t\tsingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n\t\t\t// Omit args keep the mutation default projection (\"*\") so PG/D1 emit RETURNING.\n\t\t\tif (columns !== undefined) {\n\t\t\t\tselectedColumns = columns;\n\t\t\t}\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(\n\t\t\t\tcolumns ?? selectedColumns,\n\t\t\t\toptions ?? selectedOptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t).then((result) => applyCardinality(result, \"single\"));\n\t\t},\n\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\tthen(onfulfilled, onrejected) {\n\t\t\treturn run(selectedColumns, selectedOptions).then(\n\t\t\t\tonfulfilled,\n\t\t\t\tonrejected,\n\t\t\t);\n\t\t},\n\t};\n\n\tif (executable?.model) {\n\t\tObject.defineProperty(mutationQuery, \"model\", {\n\t\t\tenumerable: true,\n\t\t\tvalue: executable.model,\n\t\t});\n\t}\n\n\tif (compileTransaction) {\n\t\tattachTransactionCompiler(mutationQuery, () => {\n\t\t\tconst compiled = compileTransaction(\n\t\t\t\tnormalizeSelectColumnsInput(selectedColumns),\n\t\t\t\tselectedOptions,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tdescriptor: mutationQuery.getDescriptor(),\n\t\t\t\tid: nextTransactionOperationId(),\n\t\t\t\tindex: 0,\n\t\t\t\tkind: compiled.kind,\n\t\t\t\tpayload: compiled.payload,\n\t\t\t} as import(\"./db/transaction/types.ts\").AthenaTransactionOperation;\n\t\t});\n\t}\n\n\treturn mutationQuery;\n}\n\nexport interface OrderOptions {\n\tascending?: boolean;\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n\tcontainedBy: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tcontains: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tcurrentPage: (value: number) => Self;\n\teq: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\teqCast: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t\tcast: AthenaConditionCastType,\n\t) => Self;\n\teqUuid: (column: ResolvedFilterColumnKey<Row>, value: string) => Self;\n\tgt: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgte: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tilike: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tin: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tis: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlike: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlimit: (count: number) => Self;\n\tlt: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlte: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tmatch: (\n\t\tfilters: Partial<\n\t\t\tRecord<ResolvedFilterColumnKey<Row>, AthenaConditionValue>\n\t\t>,\n\t) => Self;\n\tneq: (\n\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tnot: (\n\t\tcolumnOrExpression: ResolvedFilterColumnKey<Row> | string,\n\t\toperator?: AthenaConditionOperator,\n\t\tvalue?: AthenaConditionValue,\n\t) => Self;\n\toffset: (count: number) => Self;\n\tor: (expression: string) => Self;\n\torder: (column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) => Self;\n\tpageSize: (value: number) => Self;\n\trange: (from: number, to: number) => Self;\n\ttotalPages: (value: number) => Self;\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n\textends FilterChain<SelectChain<Row, SelectedRow>, Row>,\n\t\tPromiseLike<AthenaResult<SelectedRow[]>>,\n\t\tAthenaExecutable<AthenaResult<SelectedRow[]>> {\n\tmaybeSingle: <\n\t\tT = SelectedRow,\n\t\tconst TColumns extends AthenaSelectInput = string,\n\t>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tsingle: <T = SelectedRow, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n\textends FilterChain<UpdateChain<Row>, Row>,\n\t\tMutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n\teq: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgt: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tgte: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tilike: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tin: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalues: AthenaConditionArrayValue,\n\t) => Self;\n\tis: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlike: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlt: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tlte: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n\tneq: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\tvalue: AthenaConditionValue,\n\t) => Self;\n}\n\nexport interface RpcOrderOptions {\n\tascending?: boolean;\n}\n\nexport interface RpcQueryBuilder<Row>\n\textends RpcFilterChain<RpcQueryBuilder<Row>, Row>,\n\t\tPromiseLike<AthenaResult<Row[]>> {\n\tlimit: (count: number) => RpcQueryBuilder<Row>;\n\tmaybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\toffset: (count: number) => RpcQueryBuilder<Row>;\n\torder: (\n\t\tcolumn: AthenaTypecheckedColumnKey<Row>,\n\t\toptions?: RpcOrderOptions,\n\t) => RpcQueryBuilder<Row>;\n\trange: (from: number, to: number) => RpcQueryBuilder<Row>;\n\tselect: <const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<Row[]>>;\n\tsingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n}\n\nexport interface AthenaFromOptions {\n\tschema?: string;\n}\n\nexport interface TableQueryIncludeSpec {\n\tschema?: string;\n\tselect?: readonly string[];\n\ttargetModel?: string;\n}\n\nexport type TableQueryIncludeRelations = Record<\n\tstring,\n\tTableQueryIncludeSpec | true\n>;\n\nexport interface TableQueryBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tTContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n\tdelete: (\n\t\toptions?: AthenaGatewayCallOptions & { resourceId?: string },\n\t) => MutationQuery<Row | null, Row>;\n\tfindMany: <const TSelect extends AthenaSelectShape>(\n\t\toptions: AthenaFindManyOptions<Row, TSelect> & {\n\t\t\tselect: AthenaValidatedSelectShape<Row, TSelect>;\n\t\t},\n\t) => Promise<AthenaResult<AthenaFindManyResult<Row, TSelect, TContext>[]>>;\n\tinsert(\n\t\tvalues: Insert,\n\t\toptions?: AthenaGatewayCallOptions,\n\t): MutationQuery<Row, Row>;\n\tinsert(\n\t\tvalues: Insert[],\n\t\toptions?: AthenaGatewayCallOptions,\n\t): MutationQuery<Row[], Row>;\n\tmaybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tinclude: (\n\t\trelations: TableQueryIncludeRelations,\n\t) => TableQueryBuilder<Row, Insert, Update, TContext>;\n\treadonly model?: AthenaModelTarget;\n\treset: () => TableQueryBuilder<Row, Insert, Update, TContext>;\n\tselect: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => SelectChain<Row, T>;\n\tsingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n\t\tcolumns?: SelectColumnsFor<Row, TColumns>,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<T | null>>;\n\tupdate: (\n\t\tvalues: Update,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => UpdateChain<Row>;\n\tupsert(\n\t\tvalues: Insert,\n\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\tupdateBody?: Update;\n\t\t\tonConflict?:\n\t\t\t\t| ResolvedFilterColumnKey<Row>\n\t\t\t\t| ResolvedFilterColumnKey<Row>[]\n\t\t\t\t| (string & {})\n\t\t\t\t| Array<string & {}>;\n\t\t},\n\t): MutationQuery<Row, Row>;\n\tupsert(\n\t\tvalues: Insert[],\n\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\tupdateBody?: Update;\n\t\t\tonConflict?:\n\t\t\t\t| ResolvedFilterColumnKey<Row>\n\t\t\t\t| ResolvedFilterColumnKey<Row>[]\n\t\t\t\t| (string & {})\n\t\t\t\t| Array<string & {}>;\n\t\t},\n\t): MutationQuery<Row[], Row>;\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n\tconst candidate = state.conditions.find(\n\t\t(condition) =>\n\t\t\tcondition.operator === \"eq\" &&\n\t\t\t(condition.column === \"resource_id\" || condition.column === \"id\"),\n\t);\n\treturn candidate?.value?.toString();\n}\n\nfunction stringifyFilterValue(\n\tvalue: AthenaConditionValue | AthenaConditionArrayValue | string,\n): string {\n\tif (Array.isArray(value)) {\n\t\treturn value.join(\",\");\n\t}\n\treturn String(value);\n}\n\nfunction createFilterMethods<Self, Row>(\n\tstate: TableBuilderState,\n\taddCondition: (\n\t\toperator: AthenaConditionOperator,\n\t\tcolumn?: string,\n\t\tvalue?: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t\thints?: ConditionCastHints,\n\t) => void,\n\tself: Self,\n): FilterChain<Self, Row> {\n\treturn {\n\t\tcontainedBy(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"containedBy\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tcontains(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"contains\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tcurrentPage(value: number) {\n\t\t\tstate.currentPage = value;\n\t\t\treturn self;\n\t\t},\n\t\teq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\tconst columnName = String(column);\n\t\t\tif (shouldUseUuidTextComparison(columnName, value)) {\n\t\t\t\taddCondition(\"eq\", columnName, value, { columnCast: \"text\" });\n\t\t\t} else {\n\t\t\t\taddCondition(\"eq\", columnName, value);\n\t\t\t}\n\t\t\treturn self;\n\t\t},\n\t\teqCast(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalue: AthenaConditionValue,\n\t\t\tcast: AthenaConditionCastType,\n\t\t) {\n\t\t\taddCondition(\"eq\", String(column), value, { valueCast: cast });\n\t\t\treturn self;\n\t\t},\n\t\teqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n\t\t\taddCondition(\"eq\", String(column), value, { valueCast: \"uuid\" });\n\t\t\treturn self;\n\t\t},\n\t\tgt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"gt\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tgte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"gte\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"ilike\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tin(\n\t\t\tcolumn: ResolvedFilterColumnKey<Row>,\n\t\t\tvalues: AthenaConditionArrayValue,\n\t\t) {\n\t\t\taddCondition(\"in\", String(column), values);\n\t\t\treturn self;\n\t\t},\n\t\tis(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"is\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"like\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlimit(count: number) {\n\t\t\tstate.limit = count;\n\t\t\treturn self;\n\t\t},\n\t\tlt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"lt\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tlte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"lte\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tmatch(\n\t\t\tfilters: Partial<\n\t\t\t\tRecord<ResolvedFilterColumnKey<Row>, AthenaConditionValue>\n\t\t\t>,\n\t\t) {\n\t\t\tObject.entries(\n\t\t\t\tfilters as Record<string, AthenaConditionValue | undefined>,\n\t\t\t).forEach(([column, value]) => {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (shouldUseUuidTextComparison(column, value)) {\n\t\t\t\t\taddCondition(\"eq\", column, value, { columnCast: \"text\" });\n\t\t\t\t} else {\n\t\t\t\t\taddCondition(\"eq\", column, value);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn self;\n\t\t},\n\t\tneq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n\t\t\taddCondition(\"neq\", String(column), value);\n\t\t\treturn self;\n\t\t},\n\t\tnot(\n\t\t\tcolumnOrExpression: ResolvedFilterColumnKey<Row> | string,\n\t\t\toperator?: AthenaConditionOperator,\n\t\t\tvalue?: AthenaConditionValue,\n\t\t) {\n\t\t\tconst expression = String(columnOrExpression);\n\t\t\tif (operator !== null && value !== undefined) {\n\t\t\t\taddCondition(\n\t\t\t\t\t\"not\",\n\t\t\t\t\tundefined,\n\t\t\t\t\t`${expression}.${operator}.${stringifyFilterValue(value)}`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\taddCondition(\"not\", undefined, expression);\n\t\t\t}\n\t\t\treturn self;\n\t\t},\n\t\toffset(count: number) {\n\t\t\tstate.offset = count;\n\t\t\treturn self;\n\t\t},\n\t\tor(expression: string) {\n\t\t\taddCondition(\"or\", undefined, expression);\n\t\t\treturn self;\n\t\t},\n\t\torder(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n\t\t\tstate.order = {\n\t\t\t\tdirection: options?.ascending === false ? \"descending\" : \"ascending\",\n\t\t\t\tfield: String(column),\n\t\t\t};\n\t\t\treturn self;\n\t\t},\n\t\tpageSize(value: number) {\n\t\t\tstate.pageSize = value;\n\t\t\treturn self;\n\t\t},\n\t\trange(from: number, to: number) {\n\t\t\tstate.offset = from;\n\t\t\tstate.limit = to - from + 1;\n\t\t\treturn self;\n\t\t},\n\t\ttotalPages(value: number) {\n\t\t\tstate.totalPages = value;\n\t\t\treturn self;\n\t\t},\n\t};\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n\tif (!columns) {\n\t\treturn;\n\t}\n\tif (typeof columns === \"string\") {\n\t\treturn columns;\n\t}\n\treturn columns.join(\",\");\n}\n\nfunction createRpcFilterMethods<Self>(filters: AthenaRpcFilter[], self: Self) {\n\tconst addFilter = (\n\t\toperator: AthenaRpcFilterOperator,\n\t\tcolumn: string,\n\t\tvalue: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t) => {\n\t\tfilters.push({ column, operator, value });\n\t};\n\n\treturn {\n\t\teq(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"eq\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tgt(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"gt\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tgte(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"gte\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tilike(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"ilike\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tin(column: string, values: AthenaConditionArrayValue) {\n\t\t\taddFilter(\"in\", column, values);\n\t\t\treturn self;\n\t\t},\n\t\tis(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"is\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlike(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"like\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlt(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"lt\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tlte(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"lte\", column, value);\n\t\t\treturn self;\n\t\t},\n\t\tneq(column: string, value: AthenaConditionValue) {\n\t\t\taddFilter(\"neq\", column, value);\n\t\t\treturn self;\n\t\t},\n\t};\n}\n\nexport function createRpcBuilder<Row>(\n\tfunctionName: string,\n\targs: AthenaJsonObject | undefined,\n\tbaseOptions: AthenaRpcCallOptions | undefined,\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\ttracer?: AthenaQueryTracer,\n\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\tdebugAstEnabled = false,\n): RpcQueryBuilder<Row> {\n\tconst state: {\n\t\tfilters: AthenaRpcFilter[];\n\t\tlimit?: number;\n\t\toffset?: number;\n\t\torder?: { column: string; ascending?: boolean };\n\t} = {\n\t\tfilters: [],\n\t};\n\n\tlet selectedColumns: AthenaSelectInput | undefined;\n\tlet selectedOptions: AthenaRpcCallOptions | undefined;\n\tlet promise: Promise<AthenaResult<Row[]>> | null = null;\n\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n\tconst executeRpc = async <SelectedRow = Row>(\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaRpcCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t): Promise<AthenaResult<SelectedRow[]>> => {\n\t\tconst mergedOptions = mergeOptions(baseOptions, options);\n\t\tconst normalizedSelectedColumns = normalizeSelectColumnsInput(columns);\n\t\tconst payload: AthenaRpcPayload = {\n\t\t\targs,\n\t\t\tcount: mergedOptions?.count,\n\t\t\tfilters: state.filters.length ? [...state.filters] : undefined,\n\t\t\tfunction: functionName,\n\t\t\thead: mergedOptions?.head,\n\t\t\tlimit: state.limit,\n\t\t\toffset: state.offset,\n\t\t\torder: state.order,\n\t\t\tschema: mergedOptions?.schema,\n\t\t\tselect: toRpcSelect(columns),\n\t\t};\n\t\tconst endpoint: AthenaQueryTraceEvent[\"endpoint\"] = mergedOptions?.get\n\t\t\t? `/rpc/${functionName}`\n\t\t\t: \"/gateway/rpc\";\n\t\tconst sql = buildRpcDebugSql(payload);\n\t\tconst debugAst = debugAstEnabled\n\t\t\t? buildRpcDebugAst({\n\t\t\t\t\targs,\n\t\t\t\t\tendpoint,\n\t\t\t\t\tfunctionName,\n\t\t\t\t\tpayload,\n\t\t\t\t\tselectedColumns: normalizedSelectedColumns,\n\t\t\t\t\tstate,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\treturn executeWithQueryTrace(\n\t\t\ttracer,\n\t\t\t{\n\t\t\t\tast: debugAst,\n\t\t\t\tendpoint,\n\t\t\t\tfunctionName,\n\t\t\t\toperation: \"rpc\",\n\t\t\t\toptions: mergedOptions,\n\t\t\t\tpayload,\n\t\t\t\tsql,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst response = await client.rpcGateway<SelectedRow[]>(\n\t\t\t\t\tpayload,\n\t\t\t\t\tmergedOptions,\n\t\t\t\t);\n\t\t\t\treturn formatGatewayResult(response, { operation: \"rpc\" });\n\t\t\t},\n\t\t\tcallsite,\n\t\t);\n\t};\n\n\tconst run = (\n\t\tcolumns?: AthenaSelectInput,\n\t\toptions?: AthenaRpcCallOptions,\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t) => {\n\t\tconst payloadColumns = columns ?? selectedColumns;\n\t\tconst payloadOptions = options ?? selectedOptions;\n\t\tif (!promise) {\n\t\t\tpromise = executeRpc<Row>(\n\t\t\t\tpayloadColumns,\n\t\t\t\tpayloadOptions,\n\t\t\t\tcallsiteStore.resolve(callsite),\n\t\t\t);\n\t\t}\n\t\treturn promise;\n\t};\n\n\tconst builder = {} as RpcQueryBuilder<Row>;\n\tconst filterMethods = createRpcFilterMethods(state.filters, builder);\n\n\tObject.assign(builder, filterMethods, {\n\t\tcatch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n\t\t\treturn run(selectedColumns, selectedOptions).catch(onrejected);\n\t\t},\n\t\tfinally(onfinally?: () => void) {\n\t\t\treturn run(selectedColumns, selectedOptions).finally(onfinally);\n\t\t},\n\t\tlimit(count: number) {\n\t\t\tstate.limit = count;\n\t\t\treturn builder;\n\t\t},\n\t\tmaybeSingle<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaRpcCallOptions,\n\t\t) {\n\t\t\treturn builder.single<T, AthenaSelectInput>(columns, options);\n\t\t},\n\t\toffset(count: number) {\n\t\t\tstate.offset = count;\n\t\t\treturn builder;\n\t\t},\n\t\torder(column: string, options?: RpcOrderOptions) {\n\t\t\tstate.order = { ascending: options?.ascending ?? true, column };\n\t\t\treturn builder;\n\t\t},\n\t\trange(from: number, to: number) {\n\t\t\tstate.offset = from;\n\t\t\tstate.limit = to - from + 1;\n\t\t\treturn builder;\n\t\t},\n\t\tselect(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n\t\t\tselectedColumns = columns;\n\t\t\tselectedOptions = options ?? selectedOptions;\n\t\t\treturn run(columns, options, captureTraceCallsite(tracer));\n\t\t},\n\t\tasync single<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaRpcCallOptions,\n\t\t) {\n\t\t\tconst result = await run(columns, options, captureTraceCallsite(tracer));\n\t\t\treturn toSingleResult(result) as unknown as AthenaResult<T | null>;\n\t\t},\n\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\tthen<T1 = AthenaResult<Row[]>, T2 = never>(\n\t\t\tonfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n\t\t\tonrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n\t\t) {\n\t\t\treturn run(selectedColumns, selectedOptions).then(\n\t\t\t\tonfulfilled,\n\t\t\t\tonrejected,\n\t\t\t);\n\t\t},\n\t});\n\n\treturn builder;\n}\n\nexport function createTableBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tTContext = unknown,\n>(\n\ttableName: string,\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\ttracer?: AthenaQueryTracer,\n\tbehavior?: InternalClientBehaviorOptions,\n\tbuilderOptions?: {\n\t\tcacheContext?: AthenaCacheContextDescriptor;\n\t\tmodel?: AthenaModelTarget;\n\t},\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n\tconst state: TableBuilderState = {\n\t\tcacheContext: builderOptions?.cacheContext,\n\t\tconditions: [],\n\t\tmodel: builderOptions?.model,\n\t};\n\tconst debugAstEnabled = Boolean(behavior?.debugAst);\n\n\tconst addCondition = (\n\t\toperator: AthenaConditionOperator,\n\t\tcolumn?: string,\n\t\tvalue?: AthenaConditionValue | AthenaConditionArrayValue | string,\n\t\thints?: ConditionCastHints,\n\t) => {\n\t\tconst condition: AthenaGatewayCondition = { operator };\n\t\tif (column) {\n\t\t\tcondition.column = column;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\t// include legacy gateway shape for compatibility\n\t\t\t\tcondition.eq_column = column;\n\t\t\t}\n\t\t}\n\t\tif (value !== undefined) {\n\t\t\tcondition.value = value;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_value = value;\n\t\t\t}\n\t\t}\n\t\tif (hints?.valueCast) {\n\t\t\tcondition.value_cast = hints.valueCast;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_value_cast = hints.valueCast;\n\t\t\t}\n\t\t}\n\t\tif (hints?.columnCast) {\n\t\t\tcondition.column_cast = hints.columnCast;\n\t\t\tif (operator === \"eq\") {\n\t\t\t\tcondition.eq_column_cast = hints.columnCast;\n\t\t\t}\n\t\t}\n\t\tstate.conditions.push(condition);\n\t};\n\n\tconst snapshotState = (): TableBuilderState => ({\n\t\tcacheContext: state.cacheContext,\n\t\tconditions: state.conditions.map((condition) => ({ ...condition })),\n\t\tcurrentPage: state.currentPage,\n\t\tlimit: state.limit,\n\t\tmodel: state.model,\n\t\toffset: state.offset,\n\t\torder: state.order ? { ...state.order } : undefined,\n\t\tpageSize: state.pageSize,\n\t\trelations: state.relations ? [...state.relations] : undefined,\n\t\ttotalPages: state.totalPages,\n\t});\n\n\tconst compileDescriptor = (\n\t\toperation: AthenaQueryOperation,\n\t\tprojection?: AthenaSelectInput | null,\n\t\tchangedFields?: readonly string[],\n\t): AthenaQueryDescriptor =>\n\t\tcompileAthenaQueryDescriptor({\n\t\t\tchangedFields,\n\t\t\tconditions: state.conditions,\n\t\t\tcontext: state.cacheContext,\n\t\t\tcurrentPage: state.currentPage,\n\t\t\tlimit: state.limit,\n\t\t\tmodel: state.model,\n\t\t\toffset: state.offset,\n\t\t\toperation,\n\t\t\torder: state.order,\n\t\t\tpageSize: state.pageSize,\n\t\t\tprojection:\n\t\t\t\tprojection === null\n\t\t\t\t\t? null\n\t\t\t\t\t: (normalizeSelectColumnsInput(projection) ?? \"*\"),\n\t\t\trelations: state.relations,\n\t\t\ttableName,\n\t\t});\n\n\tconst mutationExecutable = (\n\t\toperation: AthenaQueryOperation,\n\t\tchangedFields?: readonly string[],\n\t) => ({\n\t\tgetDescriptor: (projection: AthenaSelectInput | undefined) =>\n\t\t\tcompileDescriptor(operation, projection ?? null, changedFields),\n\t\tmodel: state.model,\n\t});\n\n\tconst builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>;\n\n\tconst filterMethods = createFilterMethods<\n\t\tTableQueryBuilder<Row, Insert, Update, TContext>,\n\t\tRow\n\t>(state, addCondition, builder);\n\n\tconst runSelect = async <T = Row>(\n\t\tcolumns: AthenaSelectInput = DEFAULT_COLUMNS,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\texecutionState: TableBuilderState = snapshotState(),\n\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\tdebugAstFactory?: SelectDebugAstFactory,\n\t) => {\n\t\tconst runtimeColumns =\n\t\t\tnormalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\ttableName,\n\t\t\toptions?.schema,\n\t\t);\n\t\tconst plan = createSelectTransportPlan({\n\t\t\tbuildTypedSelectQuery,\n\t\t\tcolumns: runtimeColumns,\n\t\t\toptions,\n\t\t\tstate: executionState,\n\t\t\ttableName: resolvedTableName,\n\t\t});\n\t\tconst debugAst = debugAstEnabled\n\t\t\t? (debugAstFactory?.({\n\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\texecutionState,\n\t\t\t\t\tplan,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t}) ??\n\t\t\t\tbuildSelectDebugAst({\n\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\tplan,\n\t\t\t\t\tstate: executionState,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t}))\n\t\t\t: undefined;\n\n\t\tconst includeSql =\n\t\t\texecutionState.relations && executionState.relations.length > 0\n\t\t\t\t? buildIncludeJoinSelectQuery({\n\t\t\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\t\t\tconditions: executionState.conditions,\n\t\t\t\t\t\tlimit: executionState.limit,\n\t\t\t\t\t\toffset: executionState.offset,\n\t\t\t\t\t\torder: executionState.order,\n\t\t\t\t\t\trelations: executionState.relations,\n\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t})\n\t\t\t\t: null;\n\n\t\tif (plan.kind === \"query\") {\n\t\t\treturn executeRead(behavior, () =>\n\t\t\t\texecuteWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/query\",\n\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tpayload: plan.payload,\n\t\t\t\t\t\tsql: includeSql ?? plan.query,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst queryResponse = await client.queryGateway<T>(\n\t\t\t\t\t\t\tplan.payload,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(queryResponse, {\n\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst sql =\n\t\t\tincludeSql ??\n\t\t\tbuildDebugSelectQuery({\n\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t...plan.debug,\n\t\t\t});\n\t\treturn executeRead(behavior, () =>\n\t\t\texecuteWithQueryTrace(\n\t\t\t\ttracer,\n\t\t\t\t{\n\t\t\t\t\tast: debugAst,\n\t\t\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\t\t\toperation: \"select\",\n\t\t\t\t\toptions,\n\t\t\t\t\tpayload: plan.payload,\n\t\t\t\t\tsql,\n\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tconst response = await client.fetchGateway<T>(plan.payload, options);\n\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tcallsite,\n\t\t\t),\n\t\t);\n\t};\n\n\tconst createSelectChain = <SelectedRow>(\n\t\tcolumns: AthenaSelectInput,\n\t\toptions?: AthenaGatewayCallOptions,\n\t\tinitialCallsite?: AthenaQueryTraceCallsite | null,\n\t): SelectChain<Row, SelectedRow> => {\n\t\tconst chain = {} as SelectChain<Row, SelectedRow>;\n\t\tconst callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\t\tconst filterMethods = createFilterMethods<\n\t\t\tSelectChain<Row, SelectedRow>,\n\t\t\tRow\n\t\t>(state, addCondition, chain);\n\t\tObject.assign(chain, filterMethods, {\n\t\t\tcapture() {\n\t\t\t\tconst frozenState = snapshotState();\n\t\t\t\treturn createCapturedAthenaExecutable({\n\t\t\t\t\tdescriptor: compileDescriptor(\"select\", columns),\n\t\t\t\t\texecute: (executeOptions) =>\n\t\t\t\t\t\trunSelect<SelectedRow[]>(\n\t\t\t\t\t\t\tcolumns,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\t\tsignal: executeOptions?.signal ?? options?.signal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfrozenState,\n\t\t\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t\t\t),\n\t\t\t\t\tmodel: state.model,\n\t\t\t\t});\n\t\t\t},\n\t\t\tcatch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).catch(onrejected);\n\t\t\t},\n\t\t\texecute(executeOptions?: AthenaExecuteOptions) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\t{\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tsignal: executeOptions?.signal ?? options?.signal,\n\t\t\t\t\t},\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t);\n\t\t\t},\n\t\t\tfinally(onfinally?: () => void) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).finally(onfinally);\n\t\t\t},\n\t\t\tgetDescriptor() {\n\t\t\t\treturn compileDescriptor(\"select\", columns);\n\t\t\t},\n\t\t\tmaybeSingle<T = SelectedRow>(\n\t\t\t\tcols?: AthenaSelectInput,\n\t\t\t\topts?: AthenaGatewayCallOptions,\n\t\t\t) {\n\t\t\t\treturn runSelect<T[]>(\n\t\t\t\t\tcols ?? columns,\n\t\t\t\t\topts ?? options,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(captureTraceCallsite(tracer)),\n\t\t\t\t).then((r) => applyCardinality(r, \"maybeSingle\"));\n\t\t\t},\n\t\t\tmodel: state.model,\n\t\t\tasync single<T = SelectedRow>(\n\t\t\t\tcols?: AthenaSelectInput,\n\t\t\t\topts?: AthenaGatewayCallOptions,\n\t\t\t) {\n\t\t\t\tconst r = await runSelect<T[]>(\n\t\t\t\t\tcols ?? columns,\n\t\t\t\t\topts ?? options,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(captureTraceCallsite(tracer)),\n\t\t\t\t);\n\t\t\t\treturn applyCardinality(r, \"single\");\n\t\t\t},\n\t\t\t// Thenable so `await query` resolves the deferred run without an extra API.\n\t\t\t// biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n\t\t\tthen<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n\t\t\t\tonfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n\t\t\t\tonrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n\t\t\t) {\n\t\t\t\treturn runSelect<SelectedRow[]>(\n\t\t\t\t\tcolumns,\n\t\t\t\t\toptions,\n\t\t\t\t\tsnapshotState(),\n\t\t\t\t\tcallsiteStore.resolve(),\n\t\t\t\t).then(onfulfilled, onrejected);\n\t\t\t},\n\t\t});\n\t\tattachTransactionCompiler(chain, () => {\n\t\t\tconst executionState = snapshotState();\n\t\t\tconst runtimeColumns =\n\t\t\t\tnormalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\ttableName,\n\t\t\t\toptions?.schema,\n\t\t\t);\n\t\t\tconst plan = createSelectTransportPlan({\n\t\t\t\tbuildTypedSelectQuery,\n\t\t\t\tcolumns: runtimeColumns,\n\t\t\t\toptions,\n\t\t\t\tstate: executionState,\n\t\t\t\ttableName: resolvedTableName,\n\t\t\t});\n\t\t\tif (plan.kind !== \"fetch\") {\n\t\t\t\tthrow new AthenaTransactionError(\n\t\t\t\t\t\"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n\t\t\t\t\t\"This select cannot be compiled into a portable transaction fetch (raw SQL fallback is not transaction IR)\",\n\t\t\t\t\t{ table: resolvedTableName },\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdescriptor: compileDescriptor(\"select\", columns),\n\t\t\t\tid: nextTransactionOperationId(),\n\t\t\t\tindex: 0,\n\t\t\t\tkind: \"fetch\",\n\t\t\t\tpayload: plan.payload,\n\t\t\t};\n\t\t});\n\t\treturn chain;\n\t};\n\n\tObject.assign(builder, filterMethods, {\n\t\tinclude(relations: TableQueryIncludeRelations) {\n\t\t\tconst meta = state.model?.meta.relations;\n\t\t\tstate.relations = Object.keys(relations)\n\t\t\t\t.sort((left, right) => left.localeCompare(right))\n\t\t\t\t.map((name) => {\n\t\t\t\t\tconst spec = relations[name];\n\t\t\t\t\tconst relMeta = meta?.[name];\n\t\t\t\t\tconst selected = spec === true ? undefined : spec?.select;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcolumns: selected,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tsourceColumns: relMeta?.sourceColumns,\n\t\t\t\t\t\tstar: spec === true || !selected?.length,\n\t\t\t\t\t\ttargetColumns: relMeta?.targetColumns,\n\t\t\t\t\t\ttargetModel:\n\t\t\t\t\t\t\tspec === true\n\t\t\t\t\t\t\t\t? relMeta?.targetModel\n\t\t\t\t\t\t\t\t: (spec?.targetModel ?? relMeta?.targetModel),\n\t\t\t\t\t\ttargetSchema:\n\t\t\t\t\t\t\tspec === true\n\t\t\t\t\t\t\t\t? relMeta?.targetSchema\n\t\t\t\t\t\t\t\t: (spec?.schema ?? relMeta?.targetSchema),\n\t\t\t\t\t\tvia: relMeta?.targetModel,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\treturn builder;\n\t\t},\n\t\tdelete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n\t\t\tconst filters = state.conditions.length\n\t\t\t\t? [...state.conditions]\n\t\t\t\t: undefined;\n\t\t\tconst resourceId = options?.resourceId ?? getResourceId(state);\n\t\t\tif (!(resourceId || filters?.length)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tconst executeDelete = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst executionState = snapshotState();\n\t\t\t\tconst debugState: TableBuilderState = {\n\t\t\t\t\t...executionState,\n\t\t\t\t\tconditions: filters\n\t\t\t\t\t\t? filters.map((condition) => ({ ...condition }))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaDeletePayload = {\n\t\t\t\t\tconditions: filters,\n\t\t\t\t\tresource_id: resourceId,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (executionState.order) {\n\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t}\n\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t}\n\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t}\n\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t}\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tconst sql = buildDeleteDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildDeleteDebugAst({\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tstate: debugState,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/delete\",\n\t\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.deleteGateway<Row | null>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"delete\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row | null>(\n\t\t\t\texecuteDelete,\n\t\t\t\tnull,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"delete\"),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst executionState = snapshotState();\n\t\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaDeletePayload = {\n\t\t\t\t\t\tconditions: filters,\n\t\t\t\t\t\tresource_id: resourceId,\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (executionState.order) {\n\t\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t\t}\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"delete\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync findMany<const TSelect extends AthenaSelectShape>(\n\t\t\toptions: AthenaFindManyOptions<Row, TSelect> & {\n\t\t\t\tselect: AthenaValidatedSelectShape<Row, TSelect>;\n\t\t\t},\n\t\t) {\n\t\t\tconst columns = compileSelectShape(options.select);\n\t\t\tconst baseState = snapshotState();\n\t\t\tconst executionState = snapshotState();\n\t\t\tconst callsite = captureTraceCallsite(tracer);\n\t\t\tif (options.orderBy !== undefined) {\n\t\t\t\texecutionState.order = compileOrderBy<Row>(options.orderBy);\n\t\t\t}\n\t\t\tif (options.limit !== undefined) {\n\t\t\t\texecutionState.limit = options.limit;\n\t\t\t}\n\t\t\tconst nestedQueryModifiers = selectShapeHasNestedQueryModifiers(\n\t\t\t\toptions.select,\n\t\t\t);\n\t\t\tconst schemaQualifiedRelation = selectShapeUsesRelationSchema(\n\t\t\t\toptions.select,\n\t\t\t);\n\t\t\tconst useFindManyAst =\n\t\t\t\tBoolean(behavior?.findManyAst) &&\n\t\t\t\tcanUseFindManyAstTransport(baseState) &&\n\t\t\t\t!findManyAstWhereRequiresLegacyTransport(options.where) &&\n\t\t\t\t(!schemaQualifiedRelation ||\n\t\t\t\t\tBoolean(behavior?.findManyAstRelationSchema));\n\t\t\tif (!useFindManyAst) {\n\t\t\t\tconst compiledWhere = compileWhere(options.where);\n\t\t\t\tif (compiledWhere?.length) {\n\t\t\t\t\texecutionState.conditions.push(...compiledWhere);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!useFindManyAst && nestedQueryModifiers) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY: nested relation where/order/limit require the findMany AST path\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (useFindManyAst) {\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(tableName, undefined);\n\t\t\t\tconst payload: AthenaFindManyAstPayload<Row, TSelect> = {\n\t\t\t\t\tselect: options.select,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (options.where !== undefined) {\n\t\t\t\t\tpayload.where = normalizeFindManyAstWhere(options.where);\n\t\t\t\t}\n\t\t\t\tconst astOrder = toFindManyAstOrder<Row>(executionState.order);\n\t\t\t\tif (astOrder !== undefined) {\n\t\t\t\t\tpayload.orderBy = astOrder;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tconst sql = buildDebugSelectQuery({\n\t\t\t\t\tcolumns,\n\t\t\t\t\tconditions: executionState.conditions,\n\t\t\t\t\tlimit: executionState.limit,\n\t\t\t\t\torder: executionState.order,\n\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t});\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildFindManyDirectDebugAst({\n\t\t\t\t\t\t\tbaseState,\n\t\t\t\t\t\t\tcompiledColumns: columns,\n\t\t\t\t\t\t\texecutionState,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeRead(behavior, () =>\n\t\t\t\t\texecuteWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/fetch\",\n\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response =\n\t\t\t\t\t\t\t\tawait client.fetchGateway<\n\t\t\t\t\t\t\t\t\tAthenaFindManyResult<Row, TSelect, TContext>[]\n\t\t\t\t\t\t\t\t>(payload);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"select\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn runSelect<AthenaFindManyResult<Row, TSelect, TContext>[]>(\n\t\t\t\tcolumns,\n\t\t\t\tundefined,\n\t\t\t\texecutionState,\n\t\t\t\tcallsite,\n\t\t\t\tdebugAstEnabled\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t\texecutionState: tracedState,\n\t\t\t\t\t\t\tplan,\n\t\t\t\t\t\t}) =>\n\t\t\t\t\t\t\tbuildFindManyCompiledDebugAst({\n\t\t\t\t\t\t\t\tbaseState,\n\t\t\t\t\t\t\t\tcompiledColumns: columns,\n\t\t\t\t\t\t\t\texecutionState: tracedState,\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tplan,\n\t\t\t\t\t\t\t\ttableName: resolvedTableName,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: undefined,\n\t\t\t);\n\t\t},\n\t\tinsert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n\t\t\tconst insertChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tif (Array.isArray(values)) {\n\t\t\t\tconst executeInsertMany = async (\n\t\t\t\t\tcolumns?: string | string[],\n\t\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t\t) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t\t? buildInsertDebugAst(payload)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response = await client.insertGateway<Row[]>(\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn createMutationQuery<Row[]>(\n\t\t\t\t\texecuteInsertMany,\n\t\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\t\ttracer,\n\t\t\t\t\tmutationCallsite,\n\t\t\t\t\tmutationExecutable(\"insert\", insertChangedFields),\n\t\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst payloadColumns = normalizeSelectColumnsInput(columns);\n\t\t\t\t\t\tif (payloadColumns) {\n\t\t\t\t\t\t\tpayload.columns = payloadColumns;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst executeInsertOne = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t};\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t}\n\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildInsertDebugAst(payload)\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.insertGateway<Row>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row>(\n\t\t\t\texecuteInsertOne,\n\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"insert\", insertChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tasync maybeSingle<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\tconst response = await runSelect<T[]>(\n\t\t\t\tcolumns ?? DEFAULT_COLUMNS,\n\t\t\t\toptions,\n\t\t\t\tsnapshotState(),\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t\treturn applyCardinality(response, \"maybeSingle\");\n\t\t},\n\t\tmodel: state.model,\n\t\treset() {\n\t\t\tstate.conditions = [];\n\t\t\tstate.limit = undefined;\n\t\t\tstate.offset = undefined;\n\t\t\tstate.order = undefined;\n\t\t\tstate.currentPage = undefined;\n\t\t\tstate.pageSize = undefined;\n\t\t\tstate.totalPages = undefined;\n\t\t\treturn builder;\n\t\t},\n\t\tselect<T = Row>(\n\t\t\tcolumns: AthenaSelectInput = DEFAULT_COLUMNS,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\treturn createSelectChain<T>(\n\t\t\t\tcolumns,\n\t\t\t\toptions,\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t},\n\t\tasync single<T = Row>(\n\t\t\tcolumns?: AthenaSelectInput,\n\t\t\toptions?: AthenaGatewayCallOptions,\n\t\t) {\n\t\t\tconst response = await runSelect<T[]>(\n\t\t\t\tcolumns ?? DEFAULT_COLUMNS,\n\t\t\t\toptions,\n\t\t\t\tsnapshotState(),\n\t\t\t\tcaptureTraceCallsite(tracer),\n\t\t\t);\n\t\t\treturn applyCardinality(response, \"single\");\n\t\t},\n\t\tupdate(values: Update, options?: AthenaGatewayCallOptions) {\n\t\t\tconst updateChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tconst executeUpdate = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst executionState = snapshotState();\n\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t: undefined;\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaUpdatePayload = {\n\t\t\t\t\tconditions: filters,\n\t\t\t\t\tstrip_nulls: mergedOptions?.stripNulls ?? true,\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\tupdate_body: asAthenaJsonObject(values),\n\t\t\t\t};\n\t\t\t\tif (executionState.order) {\n\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t}\n\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t}\n\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t}\n\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t}\n\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t}\n\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t}\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tconst sql = buildUpdateDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildUpdateDebugAst({\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tstate: executionState,\n\t\t\t\t\t\t})\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/update\",\n\t\t\t\t\t\toperation: \"update\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.updateGateway<Row[]>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"update\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\tconst mutation = createMutationQuery<Row[]>(\n\t\t\t\texecuteUpdate,\n\t\t\t\tnull,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"update\", updateChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst executionState = snapshotState();\n\t\t\t\t\tconst filters = executionState.conditions.length\n\t\t\t\t\t\t? [...executionState.conditions]\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaUpdatePayload = {\n\t\t\t\t\t\tconditions: filters,\n\t\t\t\t\t\tstrip_nulls: mergedOptions?.stripNulls ?? true,\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: asAthenaJsonObject(values),\n\t\t\t\t\t};\n\t\t\t\t\tif (executionState.order) {\n\t\t\t\t\t\tpayload.sort_by = executionState.order;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.limit !== undefined) {\n\t\t\t\t\t\tpayload.limit = executionState.limit;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.offset !== undefined) {\n\t\t\t\t\t\tpayload.offset = executionState.offset;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.currentPage !== undefined) {\n\t\t\t\t\t\tpayload.current_page = executionState.currentPage;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.pageSize !== undefined) {\n\t\t\t\t\t\tpayload.page_size = executionState.pageSize;\n\t\t\t\t\t}\n\t\t\t\t\tif (executionState.totalPages !== undefined) {\n\t\t\t\t\t\tpayload.total_pages = executionState.totalPages;\n\t\t\t\t\t}\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"update\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst updateChain = {} as UpdateChain<Row>;\n\t\t\tconst filterMethods = createFilterMethods<UpdateChain<Row>, Row>(\n\t\t\t\tstate,\n\t\t\t\taddCondition,\n\t\t\t\tupdateChain,\n\t\t\t);\n\t\t\tObject.assign(updateChain, filterMethods, mutation);\n\t\t\treturn updateChain;\n\t\t},\n\t\tupsert(\n\t\t\tvalues: Insert | Insert[],\n\t\t\toptions?: AthenaGatewayCallOptions & {\n\t\t\t\tupdateBody?: Update;\n\t\t\t\tonConflict?: string | string[];\n\t\t\t},\n\t\t) {\n\t\t\tconst upsertChangedFields = collectChangedFields(values);\n\t\t\tconst mutationCallsite = captureTraceCallsite(tracer);\n\t\t\tif (Array.isArray(values)) {\n\t\t\t\tconst executeUpsertMany = async (\n\t\t\t\t\tcolumns?: string | string[],\n\t\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t\t) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t\t}\n\t\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t\t}\n\t\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t\t? buildUpsertDebugAst(payload)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\t\ttracer,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\t\toperation: \"upsert\",\n\t\t\t\t\t\t\tsemanticOperation: \"upsert\",\n\t\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tconst response = await client.insertGateway<Row[]>(\n\t\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcallsite,\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn createMutationQuery<Row[]>(\n\t\t\t\t\texecuteUpsertMany,\n\t\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\t\ttracer,\n\t\t\t\t\tmutationCallsite,\n\t\t\t\t\tmutationExecutable(\"upsert\", upsertChangedFields),\n\t\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\t\tinsert_body: asAthenaJsonObjectArray(values as Insert[]),\n\t\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst payloadColumns = normalizeSelectColumnsInput(columns);\n\t\t\t\t\t\tif (payloadColumns) {\n\t\t\t\t\t\t\tpayload.columns = payloadColumns;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst executeUpsertOne = async (\n\t\t\t\tcolumns?: string | string[],\n\t\t\t\tselectOptions?: AthenaGatewayCallOptions,\n\t\t\t\tcallsite?: AthenaQueryTraceCallsite | null,\n\t\t\t) => {\n\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\ttableName,\n\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t);\n\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t};\n\t\t\t\tif (columns) {\n\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t}\n\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.count) {\n\t\t\t\t\tpayload.count = mergedOptions.count;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.head) {\n\t\t\t\t\tpayload.head = mergedOptions.head;\n\t\t\t\t}\n\t\t\t\tif (mergedOptions?.defaultToNull !== undefined) {\n\t\t\t\t\tpayload.default_to_null = mergedOptions.defaultToNull;\n\t\t\t\t}\n\t\t\t\tconst sql = buildInsertDebugSql(payload);\n\t\t\t\tconst debugAst = debugAstEnabled\n\t\t\t\t\t? buildUpsertDebugAst(payload)\n\t\t\t\t\t: undefined;\n\t\t\t\treturn executeWithQueryTrace(\n\t\t\t\t\ttracer,\n\t\t\t\t\t{\n\t\t\t\t\t\tast: debugAst,\n\t\t\t\t\t\tendpoint: \"/gateway/insert\",\n\t\t\t\t\t\toperation: \"upsert\",\n\t\t\t\t\t\tsemanticOperation: \"upsert\",\n\t\t\t\t\t\toptions: mergedOptions,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t},\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tconst response = await client.insertGateway<Row>(\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\tmergedOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn formatGatewayResult(response, {\n\t\t\t\t\t\t\toperation: \"insert\",\n\t\t\t\t\t\t\ttable: resolvedTableName,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcallsite,\n\t\t\t\t);\n\t\t\t};\n\t\t\treturn createMutationQuery<Row>(\n\t\t\t\texecuteUpsertOne,\n\t\t\t\tDEFAULT_COLUMNS,\n\t\t\t\ttracer,\n\t\t\t\tmutationCallsite,\n\t\t\t\tmutationExecutable(\"upsert\", upsertChangedFields),\n\t\t\t\t(columns, selectOptions) => {\n\t\t\t\t\tconst mergedOptions = mergeOptions(options, selectOptions);\n\t\t\t\t\tconst resolvedTableName = resolveTableNameForCall(\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tmergedOptions?.schema,\n\t\t\t\t\t);\n\t\t\t\t\tconst payload: AthenaInsertPayload = {\n\t\t\t\t\t\tinsert_body: asAthenaJsonObject(values),\n\t\t\t\t\t\ttable_name: resolvedTableName,\n\t\t\t\t\t\tupdate_body: options?.updateBody\n\t\t\t\t\t\t\t? asAthenaJsonObject(options.updateBody)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tif (columns) {\n\t\t\t\t\t\tpayload.columns = columns;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.onConflict) {\n\t\t\t\t\t\tpayload.on_conflict = options.onConflict;\n\t\t\t\t\t}\n\t\t\t\t\treturn { kind: \"insert\", payload };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t});\n\n\treturn builder;\n}\n\nexport function createQueryBuilder(\n\tclient: ReturnType<typeof createAthenaGatewayClient>,\n\tformatGatewayResult: AthenaResultFormatter,\n\tbehavior?: InternalClientBehaviorOptions,\n\ttracer?: AthenaQueryTracer,\n\tdeprecationOwner?: object,\n) {\n\tconst debugAstEnabled = Boolean(behavior?.debugAst);\n\t// Legacy root query() historically forwarded multi-statement scripts to the\n\t// gateway (migration/seed). Keep that behavior; only explicit admin.query rejects.\n\tconst adminQuery = createAdminQuery({\n\t\tallowMultiStatement: true,\n\t\tclient,\n\t\tformatGatewayResult,\n\t});\n\t/**\n\t * Executes raw SQL through Athena's compatibility query surface.\n\t *\n\t * @deprecated Prefer `athena.admin.query()` with explicit `operation`\n\t * and `expectedShape`.\n\t */\n\treturn async function query<Row = unknown>(\n\t\tsql: string,\n\t\toptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaResult<Row[]>> {\n\t\tif (deprecationOwner) {\n\t\t\tmaybeWarnRawQueryDeprecated(\n\t\t\t\tdeprecationOwner,\n\t\t\t\tbehavior?.rawQueryDiagnostics,\n\t\t\t);\n\t\t}\n\t\tconst normalizedQuery = sql.trim();\n\t\tif (!normalizedQuery) {\n\t\t\tthrow new Error(\"query requires a non-empty string\");\n\t\t}\n\t\tconst operation = classifyRawSqlOperation(normalizedQuery);\n\t\tconst expectedShape = defaultExpectedShapeForOperation(operation);\n\t\tconst params = options?.params;\n\t\tconst payload = {\n\t\t\tquery: normalizedQuery,\n\t\t\t...(Array.isArray(params) ? { params } : {}),\n\t\t\texpectedShape,\n\t\t\toperation,\n\t\t};\n\t\tconst callsite = captureTraceCallsite(tracer);\n\t\treturn executeRead(behavior, () =>\n\t\t\texecuteWithQueryTrace(\n\t\t\t\ttracer,\n\t\t\t\t{\n\t\t\t\t\tast: debugAstEnabled\n\t\t\t\t\t\t? buildRawQueryDebugAst(normalizedQuery)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tendpoint: \"/gateway/query\",\n\t\t\t\t\toperation: \"query\",\n\t\t\t\t\toptions,\n\t\t\t\t\tpayload,\n\t\t\t\t\tsql: normalizedQuery,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tconst result = await adminQuery<Row[]>(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsql: normalizedQuery,\n\t\t\t\t\t\t\t...(Array.isArray(params) ? { params } : {}),\n\t\t\t\t\t\t\texpectedShape: \"rows\",\n\t\t\t\t\t\t\toperation,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions,\n\t\t\t\t\t);\n\t\t\t\t\t// Preserve legacy AthenaResult shape (no required metadata on root query).\n\t\t\t\t\tconst { metadata: _metadata, ...legacy } = result;\n\t\t\t\t\tvoid _metadata;\n\t\t\t\t\treturn legacy;\n\t\t\t\t},\n\t\t\t\tcallsite,\n\t\t\t),\n\t\t);\n\t};\n}\n","/**\n * Athena product release identity (server-facing metadata).\n *\n * Codenames are human-facing only. Never branch feature logic on codename —\n * use protocol/capability negotiation instead.\n */\n\nexport type AthenaReleaseChannel =\n  | \"development\"\n  | \"nightly\"\n  | \"alpha\"\n  | \"beta\"\n  | \"rc\"\n  | \"stable\"\n  | (string & {});\n\nexport interface AthenaReleaseIdentity {\n  channel: AthenaReleaseChannel;\n  codename: string | null;\n  displayName: string;\n  product: string;\n  version: string;\n}\n\nexport interface AthenaHealthReleaseWire {\n  channel?: unknown;\n  codename?: unknown;\n  display_name?: unknown;\n  displayName?: unknown;\n  product?: unknown;\n  version?: unknown;\n}\n\nexport interface AthenaNormalizedHealth {\n  message: string | null;\n  /** Raw health body (or null if parse failed). */\n  raw: unknown;\n  /** Normalized release identity (never fails solely because Athena 4 omits release). */\n  release: AthenaReleaseIdentity;\n  status: string | null;\n  /** Product package version from body.version when present. */\n  version: string | null;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value.trim()\n    : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Normalize a server health `release` object (Athena 5) or synthesize\n * conservative Athena 4 identity from a top-level `version` field.\n */\nexport function normalizeAthenaReleaseIdentity(\n  wire: unknown,\n  fallbackVersion?: string | null\n): AthenaReleaseIdentity {\n  const record = isRecord(wire) ? (wire as AthenaHealthReleaseWire) : null;\n  const product = nonEmptyString(record?.product) ?? \"Athena\";\n  const version =\n    nonEmptyString(record?.version) ??\n    nonEmptyString(fallbackVersion) ??\n    \"unknown\";\n  const codename = nonEmptyString(record?.codename) ?? null;\n  const channel = (nonEmptyString(record?.channel) ??\n    \"stable\") as AthenaReleaseChannel;\n  const displayName =\n    nonEmptyString(record?.display_name) ??\n    nonEmptyString(record?.displayName) ??\n    (codename\n      ? `${product} ${version} — ${codename}`\n      : `${product} ${version}`);\n\n  return {\n    channel,\n    codename,\n    displayName,\n    product,\n    version,\n  };\n}\n\n/**\n * Normalize GET / or GET /health response bodies for Athena 4 and Athena 5.\n * Missing `release` is not an error.\n */\nexport function normalizeAthenaHealthPayload(\n  body: unknown\n): AthenaNormalizedHealth {\n  const record = isRecord(body) ? body : null;\n  const version = nonEmptyString(record?.version) ?? null;\n  const release = normalizeAthenaReleaseIdentity(record?.release, version);\n  return {\n    message: nonEmptyString(record?.message) ?? null,\n    raw: body,\n    release,\n    status: nonEmptyString(record?.status) ?? null,\n    version,\n  };\n}\n","/**\n * Athena-JS ↔ Athena server compatibility reporting (3.7 Dragunov program).\n *\n * Discovery is lazy and cached per client. Normal query paths must not hard-fail\n * solely because health is unavailable unless a required protocol is unsafe.\n */\n\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type { AthenaReleaseIdentity } from \"../release/identity.ts\";\nimport {\n  type AthenaNormalizedHealth,\n  normalizeAthenaHealthPayload,\n} from \"../release/identity.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport interface AthenaCompatibilityWarning {\n  code: string;\n  message: string;\n  severity: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface AthenaCompatibilityReport {\n  compatible: boolean;\n  discovered: boolean;\n  protocols: {\n    structuredQuery: number;\n    errors: number;\n    health: number;\n  };\n  release: AthenaReleaseIdentity;\n  sdk: {\n    package: \"@xylex-group/athena\";\n    version: string;\n  };\n  server: {\n    product: string;\n    version: string;\n    codename: string | null;\n    channel: string | null;\n  };\n  warnings: AthenaCompatibilityWarning[];\n}\n\nexport interface AthenaCompatibilityCache {\n  health: AthenaNormalizedHealth | null;\n  inflight: Promise<AthenaCompatibilityReport> | null;\n  report: AthenaCompatibilityReport | null;\n}\n\nexport function createCompatibilityCache(): AthenaCompatibilityCache {\n  return {\n    health: null,\n    inflight: null,\n    report: null,\n  };\n}\n\nfunction parseMajor(version: string | null | undefined): number | null {\n  if (!version) {\n    return null;\n  }\n  const match = version.trim().match(/^(\\d+)/);\n  if (!match) {\n    return null;\n  }\n  return Number(match[1]);\n}\n\n/**\n * Build a report from a health payload without network I/O.\n */\nexport function buildCompatibilityReportFromHealth(\n  healthBody: unknown,\n  options?: { discovered?: boolean }\n): AthenaCompatibilityReport {\n  const health = normalizeAthenaHealthPayload(healthBody);\n  const major = parseMajor(health.release.version);\n  const warnings: AthenaCompatibilityWarning[] = [];\n\n  if (major !== null && major < 4) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_UNSUPPORTED\",\n      message: `Athena server major ${major} is below the supported 4.1.x / 5.0.x range`,\n      severity: \"error\",\n    });\n  }\n  if (major !== null && major > 5) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_NEWER\",\n      message: `Athena server major ${major} is newer than this SDK's validated range (4.1.x–5.0.x); treat as best-effort`,\n      severity: \"warning\",\n    });\n  }\n  if (health.release.codename === null && major === 5) {\n    warnings.push({\n      code: \"ATHENA_RELEASE_CODENAME_MISSING\",\n      message:\n        \"Athena 5 health response is missing release.codename; continuing with SemVer only\",\n      severity: \"info\",\n    });\n  }\n\n  const compatible = !warnings.some((w) => w.severity === \"error\");\n\n  return {\n    compatible,\n    discovered: options?.discovered ?? true,\n    protocols: {\n      errors: 1,\n      health: health.release.codename !== null || major === 5 ? 2 : 1,\n      structuredQuery: 1,\n    },\n    release: health.release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: health.release.channel,\n      codename: health.release.codename,\n      product: health.release.product,\n      version: health.release.version,\n    },\n    warnings,\n  };\n}\n\n/**\n * Conservative offline report when health discovery fails or is skipped.\n */\nexport function buildUndiscoveredCompatibilityReport(): AthenaCompatibilityReport {\n  const release = {\n    channel: \"stable\" as const,\n    codename: null,\n    displayName: \"Athena unknown\",\n    product: \"Athena\",\n    version: \"unknown\",\n  };\n  return {\n    compatible: true,\n    discovered: false,\n    protocols: {\n      errors: 1,\n      health: 1,\n      structuredQuery: 1,\n    },\n    release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: null,\n      codename: null,\n      product: release.product,\n      version: release.version,\n    },\n    warnings: [\n      {\n        code: \"ATHENA_COMPAT_UNDISCOVERED\",\n        message:\n          \"Server compatibility not discovered yet; using conservative protocol defaults\",\n        severity: \"info\",\n      },\n    ],\n  };\n}\n\nexport interface DiscoverCompatibilityOptions {\n  apiKey?: string;\n  baseUrl: string;\n  cache: AthenaCompatibilityCache;\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n}\n\n/**\n * Lazy cached GET /health (falls back to GET /). Does not throw on network failure —\n * returns an undiscovered-compatible report so CRUD can continue on Athena 4/5.\n */\nexport async function discoverCompatibility(\n  options: DiscoverCompatibilityOptions\n): Promise<AthenaCompatibilityReport> {\n  if (options.cache.report?.discovered) {\n    return options.cache.report;\n  }\n  if (options.cache.inflight) {\n    return options.cache.inflight;\n  }\n\n  const run = async (): Promise<AthenaCompatibilityReport> => {\n    const fetchFn = options.fetchImpl ?? globalThis.fetch;\n    if (typeof fetchFn !== \"function\") {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const base = options.baseUrl.replace(/\\/+$/, \"\");\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n      ...(options.headers ?? {}),\n    };\n    if (options.apiKey) {\n      headers[\"X-API-Key\"] = options.apiKey;\n    }\n\n    const tryPath = async (path: string): Promise<unknown | null> => {\n      try {\n        const response = await fetchFn(`${base}${path}`, {\n          headers,\n          method: \"GET\",\n        });\n        if (!response.ok) {\n          return null;\n        }\n        return await response.json();\n      } catch {\n        return null;\n      }\n    };\n\n    const body =\n      (await tryPath(ATHENA_GATEWAY_ROUTES.health)) ??\n      (await tryPath(ATHENA_GATEWAY_ROUTES.root));\n\n    if (body === null) {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const health = normalizeAthenaHealthPayload(body);\n    options.cache.health = health;\n    const report = buildCompatibilityReportFromHealth(body, {\n      discovered: true,\n    });\n    options.cache.report = report;\n    return report;\n  };\n\n  options.cache.inflight = run().finally(() => {\n    options.cache.inflight = null;\n  });\n  return options.cache.inflight;\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport { AthenaTransactionError } from \"./errors.ts\";\nimport { nextTransactionOperationId } from \"./compile.ts\";\nimport type { InteractiveTransactionSession } from \"./coordinator.ts\";\nimport type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport { compileAthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type { AthenaTransactionOperation } from \"./types.ts\";\n\nfunction descriptorFor(\n  operation: \"select\" | \"insert\" | \"update\" | \"delete\",\n  tableName: string\n): AthenaQueryDescriptor {\n  return compileAthenaQueryDescriptor({\n    operation,\n    tableName,\n  });\n}\n\nfunction tableNameOf(payload: { table_name?: string }): string {\n  return payload.table_name?.trim() || \"unknown\";\n}\n\nexport function createInteractiveGatewayClient(\n  base: AthenaGatewayClient,\n  session: InteractiveTransactionSession\n): AthenaGatewayClient {\n  const execute = async (\n    kind: AthenaTransactionOperation[\"kind\"],\n    payload:\n      | AthenaFetchPayload\n      | AthenaInsertPayload\n      | AthenaUpdatePayload\n      | AthenaDeletePayload\n  ): Promise<AthenaGatewayResponse<unknown>> => {\n    const table = tableNameOf(payload);\n    const descriptorKind = kind === \"fetch\" ? \"select\" : kind;\n    const operation: AthenaTransactionOperation = {\n      descriptor: descriptorFor(descriptorKind, table),\n      id: nextTransactionOperationId(),\n      index: 0,\n      kind,\n      payload,\n    } as AthenaTransactionOperation;\n    return session.execute(operation);\n  };\n\n  return {\n    baseUrl: base.baseUrl,\n    buildHeaders(options) {\n      return base.buildHeaders(options);\n    },\n    deleteGateway(payload: AthenaDeletePayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"delete\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    fetchGateway(payload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"fetch\", payload as AthenaFetchPayload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\n    },\n    insertGateway(payload: AthenaInsertPayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"insert\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    async queryGateway(\n      _payload: AthenaQueryPayload,\n      _options?: AthenaGatewayCallOptions\n    ) {\n      void _payload;\n      void _options;\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n        \"Raw SQL is not part of v1 interactive transactions\",\n        { backend: session.capabilities.backend }\n      );\n    },\n    resolveCallOptions(options) {\n      return base.resolveCallOptions(options);\n    },\n    async rpcGateway(\n      _payload: AthenaRpcPayload,\n      _options?: AthenaRpcCallOptions\n    ) {\n      void _payload;\n      void _options;\n      throw new AthenaTransactionError(\n        \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n        \"RPC is not part of v1 interactive transactions\",\n        { backend: session.capabilities.backend }\n      );\n    },\n    updateGateway(payload: AthenaUpdatePayload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"update\", payload) as Promise<AthenaGatewayResponse<never>>;\n    },\n    transactions: base.transactions,\n    verifyConnection(options) {\n      return base.verifyConnection(options);\n    },\n  };\n}\n","/**\n * Transport-independent Athena query semantics.\n * Must not contain SQL placeholders, JOIN text, HTTP paths, or Rust DTOs.\n */\n\nexport type AthenaQueryCardinality = \"many\" | \"first\" | \"unique\";\n\nexport type AthenaCompareOperator =\n\t| \"eq\"\n\t| \"neq\"\n\t| \"gt\"\n\t| \"gte\"\n\t| \"lt\"\n\t| \"lte\"\n\t| \"like\"\n\t| \"ilike\";\n\nexport interface AthenaSourceAst {\n\tkind: \"table\";\n\talias?: string;\n\tmodelId?: string;\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaFieldRefAst {\n\tfield: string;\n\tsource?: string;\n}\n\nexport type AthenaRelationPredicate =\n\t| \"some\"\n\t| \"none\"\n\t| \"every\"\n\t| \"exists\"\n\t| \"is\"\n\t| \"isNot\";\n\nexport interface AthenaRelationConditionAst {\n\tfilter?: AthenaConditionAst;\n\tkind: \"relation\";\n\tpredicate: AthenaRelationPredicate;\n\trelation: string;\n\tvia?: string;\n}\n\nexport interface AthenaResolvedRelationConditionAst {\n\tdescriptor: {\n\t\tcardinality: \"one-to-one\" | \"one-to-many\" | \"many-to-one\" | \"many-to-many\";\n\t\tfrom: { columns: string[]; schema?: string; table: string };\n\t\tid: string;\n\t\tjunction?: {\n\t\t\tfromColumns: string[];\n\t\t\tschema?: string;\n\t\t\ttable: string;\n\t\t\ttoColumns: string[];\n\t\t};\n\t\tname: string;\n\t\tto: { columns: string[]; schema?: string; table: string };\n\t};\n\tfilter?: AthenaConditionAst;\n\tjunctionAlias?: string;\n\tkind: \"resolved-relation\";\n\tpredicate: AthenaRelationPredicate;\n\trelation: string;\n\ttarget: {\n\t\talias: string;\n\t\tmodelId?: string;\n\t\tschema?: string;\n\t\ttable: string;\n\t};\n}\n\nexport interface AthenaColumnSelectionAst {\n\tkind: \"column\";\n\talias?: string;\n\tcolumn: string;\n}\n\nexport interface AthenaRelationSelectionAst {\n\tkind: \"relation\";\n\talias?: string;\n\tquery: AthenaSelectQueryAst;\n\trelation: string;\n\tvia?: string;\n}\n\nexport type AthenaSelectedFieldAst =\n\t| AthenaColumnSelectionAst\n\t| AthenaRelationSelectionAst;\n\nexport interface AthenaSelectionAst {\n\tfields: AthenaSelectedFieldAst[];\n}\n\nexport interface AthenaCompareConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"compare\";\n\toperator: AthenaCompareOperator;\n\tvalue: unknown;\n}\n\nexport interface AthenaInConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"in\";\n\tvalues: unknown[];\n}\n\nexport interface AthenaIsNullConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"is-null\";\n\tnegated?: boolean;\n}\n\nexport interface AthenaBooleanConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"is-true\" | \"is-false\";\n}\n\nexport interface AthenaContainmentConditionAst {\n\tfield: AthenaFieldRefAst;\n\tkind: \"contains\" | \"contained-by\";\n\tvalue: unknown;\n}\n\nexport interface AthenaLogicalConditionAst {\n\tconditions: AthenaConditionAst[];\n\tkind: \"and\" | \"or\";\n}\n\nexport interface AthenaNotConditionAst {\n\tcondition: AthenaConditionAst;\n\tkind: \"not\";\n}\n\nexport type AthenaConditionAst =\n\t| AthenaCompareConditionAst\n\t| AthenaInConditionAst\n\t| AthenaIsNullConditionAst\n\t| AthenaBooleanConditionAst\n\t| AthenaContainmentConditionAst\n\t| AthenaLogicalConditionAst\n\t| AthenaNotConditionAst\n\t| AthenaRelationConditionAst\n\t| AthenaResolvedRelationConditionAst;\n\nexport interface AthenaOrderAst {\n\tdirection: \"asc\" | \"desc\";\n\tfield: AthenaFieldRefAst;\n\tnulls?: \"first\" | \"last\";\n}\n\nexport interface AthenaPaginationAst {\n\tlimit?: number;\n\toffset?: number;\n\tpage?: number;\n\tpageSize?: number;\n}\n\nexport interface AthenaDistinctAst {\n\ton?: AthenaFieldRefAst[];\n}\n\nexport interface AthenaSelectQueryAst {\n\tcardinality: AthenaQueryCardinality;\n\tdistinct?: AthenaDistinctAst;\n\tfilter?: AthenaConditionAst;\n\tkind: \"select\";\n\torderBy?: AthenaOrderAst[];\n\tpagination?: AthenaPaginationAst;\n\tselection: AthenaSelectionAst;\n\tsource: AthenaSourceAst;\n}\n\nexport type AthenaQueryAst = AthenaSelectQueryAst;\n\nexport function isAthenaSelectQueryAst(\n\tvalue: unknown,\n): value is AthenaSelectQueryAst {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst record = value as Record<string, unknown>;\n\treturn (\n\t\trecord.kind === \"select\" &&\n\t\tBoolean(record.source) &&\n\t\ttypeof record.source === \"object\" &&\n\t\tBoolean(record.selection) &&\n\t\ttypeof record.selection === \"object\"\n\t);\n}\n\nfunction collectConditionTables(\n\tcondition?: AthenaConditionAst,\n): AthenaSourceAst[] {\n\tif (!condition) {\n\t\treturn [];\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.flatMap((child) =>\n\t\t\tcollectConditionTables(child),\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn collectConditionTables(condition.condition);\n\t}\n\tif (condition.kind === \"relation\") {\n\t\treturn collectConditionTables(condition.filter);\n\t}\n\tif (condition.kind === \"resolved-relation\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\talias: condition.target.alias,\n\t\t\t\tkind: \"table\",\n\t\t\t\tmodelId: condition.target.modelId,\n\t\t\t\tschema: condition.target.schema,\n\t\t\t\ttable: condition.target.table,\n\t\t\t},\n\t\t\t...collectConditionTables(condition.filter),\n\t\t];\n\t}\n\treturn [];\n}\n\nexport function collectAstTables(ast: AthenaSelectQueryAst): AthenaSourceAst[] {\n\tconst tables: AthenaSourceAst[] = [ast.source];\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\ttables.push(...collectAstTables(field.query));\n\t\t}\n\t}\n\ttables.push(...collectConditionTables(ast.filter));\n\treturn tables;\n}\n\nexport function selectionHasRelations(ast: AthenaSelectQueryAst): boolean {\n\treturn ast.selection.fields.some((field) => field.kind === \"relation\");\n}\n","export type AthenaQueryBackend = \"gateway\" | \"postgresql\" | \"d1\";\n\nexport interface AthenaQueryCapabilityMatrix {\n\tbackend: AthenaQueryBackend;\n\tilike: boolean;\n\tjsonbContainment: boolean;\n\tmanyToManyRelations: boolean;\n\tnestedOrdering: boolean;\n\tnestedPagination: boolean;\n\tnestedRelations: boolean;\n\tnullsOrdering: boolean;\n\trelationalPredicates: boolean;\n}\n\nexport const GATEWAY_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"gateway\",\n\tilike: true,\n\tjsonbContainment: true,\n\tmanyToManyRelations: false,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: true,\n\trelationalPredicates: false,\n};\n\nexport const POSTGRES_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"postgresql\",\n\tilike: true,\n\tjsonbContainment: true,\n\tmanyToManyRelations: true,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: true,\n\trelationalPredicates: true,\n};\n\nexport const D1_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n\tbackend: \"d1\",\n\tilike: false,\n\tjsonbContainment: false,\n\tmanyToManyRelations: true,\n\tnestedOrdering: true,\n\tnestedPagination: true,\n\tnestedRelations: true,\n\tnullsOrdering: false,\n\trelationalPredicates: true,\n};\n","export type AthenaQueryErrorCode =\n\t| \"ATHENA_QUERY_INVALID_SOURCE\"\n\t| \"ATHENA_QUERY_UNKNOWN_FIELD\"\n\t| \"ATHENA_QUERY_UNKNOWN_RELATION\"\n\t| \"ATHENA_QUERY_AMBIGUOUS_RELATION\"\n\t| \"ATHENA_QUERY_INVALID_PAGINATION\"\n\t| \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\"\n\t| \"ATHENA_QUERY_INVALID_NESTING\"\n\t| \"ATHENA_QUERY_INVALID_IDENTIFIER\"\n\t| \"ATHENA_QUERY_INVALID_SELECTION\"\n\t| \"ATHENA_QUERY_INVALID_CONDITION\"\n\t| \"ATHENA_QUERY_INVALID_NORMALIZED_AST\"\n\t| \"ATHENA_QUERY_COMPLEXITY_EXCEEDED\"\n\t| \"ATHENA_QUERY_MAX_DEPTH_EXCEEDED\"\n\t| \"ATHENA_QUERY_CYCLIC_INPUT\"\n\t| \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\"\n\t| \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\";\n\nexport class AthenaQueryError extends Error {\n\treadonly code: AthenaQueryErrorCode;\n\n\tconstructor(code: AthenaQueryErrorCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"AthenaQueryError\";\n\t\tthis.code = code;\n\t}\n}\n","import type {\n\tAthenaGatewayCondition,\n\tAthenaSortBy,\n} from \"../../gateway/types.ts\";\nimport type {\n\tAthenaOrderBy,\n\tAthenaRelationSelectNode,\n\tAthenaSelectShape,\n\tAthenaWhere,\n\tAthenaWhereOperatorInput,\n} from \"../../query-ast.ts\";\nimport type {\n\tAthenaCompareOperator,\n\tAthenaConditionAst,\n\tAthenaFieldRefAst,\n\tAthenaOrderAst,\n\tAthenaPaginationAst,\n\tAthenaQueryCardinality,\n\tAthenaRelationPredicate,\n\tAthenaSelectedFieldAst,\n\tAthenaSelectQueryAst,\n\tAthenaSourceAst,\n} from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst COMPARE_OPERATORS = new Set<AthenaCompareOperator>([\n\t\"eq\",\n\t\"neq\",\n\t\"gt\",\n\t\"gte\",\n\t\"lt\",\n\t\"lte\",\n\t\"like\",\n\t\"ilike\",\n]);\nconst RELATION_PREDICATES = new Set<AthenaRelationPredicate>([\n\t\"some\",\n\t\"none\",\n\t\"every\",\n\t\"exists\",\n\t\"is\",\n\t\"isNot\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertIdentifier(value: string, label: string): string {\n\tconst trimmed = value.trim();\n\tif (!IDENTIFIER.test(trimmed)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_IDENTIFIER\",\n\t\t\t`Invalid ${label}: ${value}`,\n\t\t);\n\t}\n\treturn trimmed;\n}\n\nexport function parseSourceName(raw: string): AthenaSourceAst {\n\tconst trimmed = raw.trim();\n\tif (!trimmed) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"Query source table is required\",\n\t\t);\n\t}\n\tconst segments = trimmed.split(\".\").map((segment) => segment.trim());\n\tif (segments.some((segment) => !IDENTIFIER.test(segment))) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t`Invalid table identifier: ${raw}`,\n\t\t);\n\t}\n\tif (segments.length === 1) {\n\t\treturn { kind: \"table\", table: segments[0] as string };\n\t}\n\tif (segments.length === 2) {\n\t\treturn {\n\t\t\tkind: \"table\",\n\t\t\tschema: segments[0],\n\t\t\ttable: segments[1] as string,\n\t\t};\n\t}\n\tthrow new AthenaQueryError(\n\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t`Table identifier is too deeply qualified: ${raw}`,\n\t);\n}\n\nfunction isRelationSelectNode(\n\tvalue: unknown,\n): value is AthenaRelationSelectNode {\n\treturn isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeSelectShape(\n\tselect: AthenaSelectShape,\n\tparentSource: AthenaSourceAst,\n\tcardinality: AthenaQueryCardinality,\n): AthenaSelectedFieldAst[] {\n\tif (!isRecord(select)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select must be an object\",\n\t\t);\n\t}\n\n\tconst fields: AthenaSelectedFieldAst[] = [];\n\tfor (const [rawKey, rawValue] of Object.entries(select)) {\n\t\tif (rawValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (rawValue === true) {\n\t\t\tfields.push({\n\t\t\t\tkind: \"column\",\n\t\t\t\tcolumn: assertIdentifier(rawKey, \"select column\"),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRelationSelectNode(rawValue)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t\t`Unsupported select node for \"${rawKey}\"`,\n\t\t\t);\n\t\t}\n\t\tconst relationName = assertIdentifier(\n\t\t\trawValue.via?.trim() || rawKey,\n\t\t\t\"select relation\",\n\t\t);\n\t\tconst alias =\n\t\t\trawValue.as?.trim() ||\n\t\t\t(relationName === rawKey\n\t\t\t\t? undefined\n\t\t\t\t: assertIdentifier(rawKey, \"relation alias\"));\n\t\tconst nestedSource = rawValue.schema?.trim()\n\t\t\t? {\n\t\t\t\t\tkind: \"table\" as const,\n\t\t\t\t\tschema: assertIdentifier(rawValue.schema, \"relation schema\"),\n\t\t\t\t\ttable: relationName,\n\t\t\t\t}\n\t\t\t: parseSourceName(\n\t\t\t\t\trelationName.includes(\".\") ? relationName : relationName,\n\t\t\t\t);\n\n\t\tfields.push({\n\t\t\talias,\n\t\t\tkind: \"relation\",\n\t\t\tquery: {\n\t\t\t\tcardinality: \"many\",\n\t\t\t\tfilter: normalizeWhere(rawValue.where),\n\t\t\t\tkind: \"select\",\n\t\t\t\torderBy: normalizeOrderBy(rawValue.orderBy),\n\t\t\t\tpagination: normalizePagination({\n\t\t\t\t\tlimit: rawValue.limit,\n\t\t\t\t\toffset: rawValue.offset,\n\t\t\t\t}),\n\t\t\t\tselection: {\n\t\t\t\t\tfields: normalizeSelectShape(rawValue.select, nestedSource, \"many\"),\n\t\t\t\t},\n\t\t\t\tsource:\n\t\t\t\t\tnestedSource.table === relationName && !rawValue.schema\n\t\t\t\t\t\t? { kind: \"table\", table: relationName }\n\t\t\t\t\t\t: nestedSource,\n\t\t\t},\n\t\t\trelation: relationName,\n\t\t\tvia: rawValue.via?.trim(),\n\t\t});\n\t\tvoid parentSource;\n\t\tvoid cardinality;\n\t}\n\n\tif (fields.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\treturn fields;\n}\n\nfunction splitTopLevel(input: string, separator: string): string[] {\n\tconst parts: string[] = [];\n\tlet depth = 0;\n\tlet start = 0;\n\tfor (let index = 0; index < input.length; index += 1) {\n\t\tconst char = input[index];\n\t\tif (char === \"(\") {\n\t\t\tdepth += 1;\n\t\t} else if (char === \")\") {\n\t\t\tdepth = Math.max(0, depth - 1);\n\t\t} else if (char === separator && depth === 0) {\n\t\t\tparts.push(input.slice(start, index));\n\t\t\tstart = index + 1;\n\t\t}\n\t}\n\tparts.push(input.slice(start));\n\treturn parts.map((part) => part.trim()).filter(Boolean);\n}\n\nexport function parseSelectList(\n\traw: string,\n\tparentSource: AthenaSourceAst,\n): AthenaSelectedFieldAst[] {\n\tconst tokens = splitTopLevel(raw, \",\");\n\tif (tokens.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\n\tconst fields: AthenaSelectedFieldAst[] = [];\n\tfor (const token of tokens) {\n\t\tconst open = token.indexOf(\"(\");\n\t\tif (open < 0) {\n\t\t\tif (token === \"*\") {\n\t\t\t\tfields.push({ kind: \"column\", column: \"*\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst aliasMatch =\n\t\t\t\t/^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/.exec(\n\t\t\t\t\ttoken,\n\t\t\t\t);\n\t\t\tif (aliasMatch) {\n\t\t\t\tfields.push({\n\t\t\t\t\talias: aliasMatch[1],\n\t\t\t\t\tcolumn: aliasMatch[2] as string,\n\t\t\t\t\tkind: \"column\",\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfields.push({\n\t\t\t\tcolumn: assertIdentifier(\n\t\t\t\t\ttoken.split(\".\").pop() ?? token,\n\t\t\t\t\t\"select column\",\n\t\t\t\t),\n\t\t\t\tkind: \"column\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!token.endsWith(\")\")) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t\t`Malformed relation select token: ${token}`,\n\t\t\t);\n\t\t}\n\t\tconst head = token.slice(0, open).trim();\n\t\tconst inner = token.slice(open + 1, -1);\n\t\tconst aliasIndex = head.indexOf(\":\");\n\t\tconst alias =\n\t\t\taliasIndex >= 0 ? head.slice(0, aliasIndex).trim() : undefined;\n\t\tconst relationToken =\n\t\t\taliasIndex >= 0 ? head.slice(aliasIndex + 1).trim() : head;\n\t\tconst bang = relationToken.indexOf(\"!\");\n\t\tconst relationPath =\n\t\t\tbang >= 0 ? relationToken.slice(0, bang).trim() : relationToken;\n\t\tconst nestedSource = parseSourceName(relationPath);\n\t\tfields.push({\n\t\t\talias: alias || undefined,\n\t\t\tkind: \"relation\",\n\t\t\tquery: {\n\t\t\t\tcardinality: \"many\",\n\t\t\t\tkind: \"select\",\n\t\t\t\tselection: { fields: parseSelectList(inner, nestedSource) },\n\t\t\t\tsource: nestedSource,\n\t\t\t},\n\t\t\trelation: nestedSource.table,\n\t\t});\n\t}\n\tvoid parentSource;\n\treturn fields;\n}\n\nfunction fieldRef(field: string): AthenaFieldRefAst {\n\treturn { field: assertIdentifier(field, \"field\") };\n}\n\nfunction isRelationWhereValue(\n\tvalue: unknown,\n): value is Record<string, unknown> {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tconst keys = Object.keys(value).filter((key) => value[key] !== undefined);\n\tif (\n\t\tkeys.some(\n\t\t\t(key) =>\n\t\t\t\tkey !== \"is\" && RELATION_PREDICATES.has(key as AthenaRelationPredicate),\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\treturn keys.includes(\"is\") && isRecord(value.is);\n}\n\nfunction normalizeRelationPredicate(\n\trelation: string,\n\tvalue: Record<string, unknown>,\n\tseen: WeakSet<object>,\n\tpath: string,\n): AthenaConditionAst {\n\tconst keys = Object.keys(value).filter((key) => value[key] !== undefined);\n\tconst predicateKeys = keys.filter((key) =>\n\t\tRELATION_PREDICATES.has(key as AthenaRelationPredicate),\n\t);\n\tif (predicateKeys.length !== 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_CONDITION\",\n\t\t\t`Relation \"${relation}\" at ${path} requires exactly one of some/none/every/exists/is/isNot`,\n\t\t);\n\t}\n\tconst predicate = predicateKeys[0] as AthenaRelationPredicate;\n\tconst operand = value[predicate];\n\tif (predicate === \"exists\") {\n\t\tif (\n\t\t\toperand === true ||\n\t\t\t(isRecord(operand) && Object.keys(operand).length === 0)\n\t\t) {\n\t\t\treturn { kind: \"relation\", predicate, relation };\n\t\t}\n\t\tif (!isRecord(operand)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_CONDITION\",\n\t\t\t\t`exists at ${path}.${relation} must be true or a filter object`,\n\t\t\t);\n\t\t}\n\t}\n\tif (operand === undefined) {\n\t\treturn { kind: \"relation\", predicate, relation };\n\t}\n\tif (isRecord(operand) && Object.keys(operand).length === 0) {\n\t\treturn { kind: \"relation\", predicate, relation };\n\t}\n\treturn {\n\t\tfilter: normalizeWhere(\n\t\t\toperand as AthenaWhere,\n\t\t\tseen,\n\t\t\t`${path}.${relation}.${predicate}`,\n\t\t),\n\t\tkind: \"relation\",\n\t\tpredicate,\n\t\trelation,\n\t};\n}\n\nfunction normalizeColumnPredicate(\n\tcolumn: string,\n\tvalue: unknown,\n): AthenaConditionAst[] {\n\tconst field = fieldRef(column);\n\tif (!isRecord(value)) {\n\t\tif (value === null) {\n\t\t\treturn [{ field, kind: \"is-null\" }];\n\t\t}\n\t\treturn [{ field, kind: \"compare\", operator: \"eq\", value }];\n\t}\n\n\tconst conditions: AthenaConditionAst[] = [];\n\tfor (const [operator, operand] of Object.entries(value)) {\n\t\tif (operand === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"in\") {\n\t\t\tconditions.push({\n\t\t\t\tfield,\n\t\t\t\tkind: \"in\",\n\t\t\t\tvalues: Array.isArray(operand) ? operand : [operand],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"contains\") {\n\t\t\tconditions.push({ field, kind: \"contains\", value: operand });\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"containedBy\") {\n\t\t\tconditions.push({ field, kind: \"contained-by\", value: operand });\n\t\t\tcontinue;\n\t\t}\n\t\tif (operator === \"is\") {\n\t\t\tif (operand === null || operand === \"null\") {\n\t\t\t\tconditions.push({ field, kind: \"is-null\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operand === true || operand === \"true\") {\n\t\t\t\tconditions.push({ field, kind: \"is-true\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operand === false || operand === \"false\") {\n\t\t\t\tconditions.push({ field, kind: \"is-false\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (COMPARE_OPERATORS.has(operator as AthenaCompareOperator)) {\n\t\t\tif (operator === \"eq\" && operand === null) {\n\t\t\t\tconditions.push({ field, kind: \"is-null\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (operator === \"neq\" && operand === null) {\n\t\t\t\tconditions.push({ field, kind: \"is-null\", negated: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconditions.push({\n\t\t\t\tfield,\n\t\t\t\tkind: \"compare\",\n\t\t\t\toperator: operator as AthenaCompareOperator,\n\t\t\t\tvalue: operand,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t`Unsupported where operator \"${operator}\" on \"${column}\"`,\n\t\t);\n\t}\n\tif (conditions.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t`where.${column} requires at least one operator`,\n\t\t);\n\t}\n\treturn conditions;\n}\n\nexport function normalizeWhere(\n\twhere?: AthenaWhere | Record<string, unknown>,\n\tseen: WeakSet<object> = new WeakSet<object>(),\n\tpath = \"where\",\n): AthenaConditionAst | undefined {\n\tif (where === undefined) {\n\t\treturn;\n\t}\n\tif (!isRecord(where)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"where must be an object\",\n\t\t);\n\t}\n\tif (seen.has(where)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_CYCLIC_INPUT\",\n\t\t\t`Cyclic where object at ${path}`,\n\t\t);\n\t}\n\tseen.add(where);\n\n\tconst parts: AthenaConditionAst[] = [];\n\tfor (const [key, value] of Object.entries(where)) {\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"or\") {\n\t\t\tif (!Array.isArray(value) || value.length === 0) {\n\t\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t\t\"where.or must be a non-empty array\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst orParts = value.flatMap((clause) => {\n\t\t\t\tconst normalized = normalizeWhere(\n\t\t\t\t\tclause as AthenaWhere,\n\t\t\t\t\tseen,\n\t\t\t\t\t`${path}.or`,\n\t\t\t\t);\n\t\t\t\treturn normalized ? [normalized] : [];\n\t\t\t});\n\t\t\tif (orParts.length === 1) {\n\t\t\t\tparts.push(orParts[0] as AthenaConditionAst);\n\t\t\t} else if (orParts.length > 1) {\n\t\t\t\tparts.push({ kind: \"or\", conditions: orParts });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"not\") {\n\t\t\tconst negated = normalizeWhere(value as AthenaWhere, seen, `${path}.not`);\n\t\t\tif (negated) {\n\t\t\t\tparts.push({ kind: \"not\", condition: negated });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (isRecord(value) && seen.has(value)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_CYCLIC_INPUT\",\n\t\t\t\t`Cyclic where object at ${path}.${key}`,\n\t\t\t);\n\t\t}\n\t\tif (isRelationWhereValue(value)) {\n\t\t\tparts.push(normalizeRelationPredicate(key, value, seen, path));\n\t\t\tcontinue;\n\t\t}\n\t\tparts.push(\n\t\t\t...normalizeColumnPredicate(\n\t\t\t\tkey,\n\t\t\t\tvalue as AthenaWhereOperatorInput | unknown,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (parts.length === 0) {\n\t\treturn;\n\t}\n\tif (parts.length === 1) {\n\t\treturn parts[0];\n\t}\n\treturn { kind: \"and\", conditions: parts };\n}\n\nexport function normalizeGatewayConditions(\n\tconditions?: AthenaGatewayCondition[],\n): AthenaConditionAst | undefined {\n\tif (!conditions?.length) {\n\t\treturn;\n\t}\n\tconst parts: AthenaConditionAst[] = [];\n\tfor (const condition of conditions) {\n\t\tconst operator = (condition.operator || \"eq\").toLowerCase();\n\t\tconst column = condition.column ?? condition.eq_column;\n\t\tconst value =\n\t\t\tcondition.value === undefined ? condition.eq_value : condition.value;\n\t\tif (operator === \"or\" || operator === \"not\") {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`Raw \"${operator}\" expressions cannot be lifted into the Athena Query AST`,\n\t\t\t);\n\t\t}\n\t\tif (!column) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t\"Condition requires a column\",\n\t\t\t);\n\t\t}\n\t\tparts.push(\n\t\t\t...normalizeColumnPredicate(column, {\n\t\t\t\t[operator === \"containedby\" ? \"containedBy\" : operator]: value,\n\t\t\t}),\n\t\t);\n\t}\n\tif (parts.length === 1) {\n\t\treturn parts[0];\n\t}\n\treturn { kind: \"and\", conditions: parts };\n}\n\nexport function normalizeOrderBy(\n\torderBy?: AthenaOrderBy | AthenaSortBy | Record<string, unknown>,\n): AthenaOrderAst[] | undefined {\n\tif (!orderBy) {\n\t\treturn;\n\t}\n\tif (!isRecord(orderBy)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"orderBy must be an object\",\n\t\t);\n\t}\n\tif (\"field\" in orderBy && typeof orderBy.field === \"string\") {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdirection: orderBy.direction === \"descending\" ? \"desc\" : \"asc\",\n\t\t\t\tfield: fieldRef(orderBy.field),\n\t\t\t},\n\t\t];\n\t}\n\tif (\"column\" in orderBy && orderBy.column !== undefined) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdirection: orderBy.ascending === false ? \"desc\" : \"asc\",\n\t\t\t\tfield: fieldRef(String(orderBy.column)),\n\t\t\t},\n\t\t];\n\t}\n\tconst entries = Object.entries(orderBy).filter(\n\t\t([, value]) => value !== undefined,\n\t);\n\tif (entries.length === 0) {\n\t\treturn;\n\t}\n\tif (entries.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\"orderBy only supports a single column in v1\",\n\t\t);\n\t}\n\tconst [column, input] = entries[0] as [string, unknown];\n\tlet direction: \"asc\" | \"desc\" = \"asc\";\n\tif (input === false || input === \"desc\" || input === \"descending\") {\n\t\tdirection = \"desc\";\n\t} else if (isRecord(input) && input.ascending === false) {\n\t\tdirection = \"desc\";\n\t}\n\treturn [{ direction, field: fieldRef(column) }];\n}\n\nexport function normalizePagination(input: {\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tcurrent_page?: number;\n\tpageSize?: number;\n\tpage_size?: number;\n}): AthenaPaginationAst | undefined {\n\tconst page = input.currentPage ?? input.current_page;\n\tconst pageSize = input.pageSize ?? input.page_size;\n\tif (\n\t\tinput.limit === undefined &&\n\t\tinput.offset === undefined &&\n\t\tpage === undefined &&\n\t\tpageSize === undefined\n\t) {\n\t\treturn;\n\t}\n\tif (page !== undefined && page < 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"current_page must be >= 1\",\n\t\t);\n\t}\n\tif (pageSize !== undefined && pageSize < 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"page_size must be >= 0\",\n\t\t);\n\t}\n\treturn {\n\t\tlimit: input.limit,\n\t\toffset: input.offset,\n\t\tpage,\n\t\tpageSize,\n\t};\n}\n\nexport function canonicalizePagination(pagination?: AthenaPaginationAst): {\n\tlimit?: number;\n\toffset?: number;\n} {\n\tif (!pagination) {\n\t\treturn {};\n\t}\n\tlet { limit, offset } = pagination;\n\tif (limit === undefined && pagination.pageSize !== undefined) {\n\t\tlimit = Math.max(0, Math.trunc(pagination.pageSize));\n\t}\n\tif (\n\t\toffset === undefined &&\n\t\tpagination.page !== undefined &&\n\t\tpagination.pageSize !== undefined\n\t) {\n\t\toffset =\n\t\t\t(Math.trunc(pagination.page) - 1) *\n\t\t\tMath.max(0, Math.trunc(pagination.pageSize));\n\t}\n\treturn { limit, offset };\n}\n\nexport function normalizeFindManyInput(input: {\n\ttable: string;\n\tselect: AthenaSelectShape;\n\twhere?: AthenaWhere | Record<string, unknown>;\n\torderBy?: AthenaOrderBy | Record<string, unknown>;\n\tlimit?: number;\n\toffset?: number;\n\tcurrentPage?: number;\n\tpageSize?: number;\n\tcardinality?: AthenaQueryCardinality;\n\tmodelId?: string;\n}): AthenaSelectQueryAst {\n\tconst source = parseSourceName(input.table);\n\tif (input.modelId) {\n\t\tsource.modelId = input.modelId;\n\t}\n\tconst pagination = normalizePagination({\n\t\tcurrentPage: input.currentPage,\n\t\tlimit: input.limit,\n\t\toffset: input.offset,\n\t\tpageSize: input.pageSize,\n\t});\n\treturn {\n\t\tcardinality: input.cardinality ?? \"many\",\n\t\tfilter: normalizeWhere(input.where),\n\t\tkind: \"select\",\n\t\torderBy: normalizeOrderBy(input.orderBy),\n\t\tpagination,\n\t\tselection: {\n\t\t\tfields: normalizeSelectShape(\n\t\t\t\tinput.select,\n\t\t\t\tsource,\n\t\t\t\tinput.cardinality ?? \"many\",\n\t\t\t),\n\t\t},\n\t\tsource,\n\t};\n}\n\nexport function normalizeFindFirstInput(\n\tinput: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">,\n): AthenaSelectQueryAst {\n\treturn normalizeFindManyInput({ ...input, cardinality: \"first\" });\n}\n\nexport function normalizeFindUniqueInput(\n\tinput: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">,\n): AthenaSelectQueryAst {\n\treturn normalizeFindManyInput({ ...input, cardinality: \"unique\" });\n}\n\nexport function isFindManyAstPayload(value: unknown): value is {\n\tlimit?: number;\n\torderBy?: Record<string, unknown>;\n\tselect: AthenaSelectShape;\n\ttable_name: string;\n\twhere?: Record<string, unknown>;\n} {\n\tif (!isRecord(value) || typeof value.table_name !== \"string\") {\n\t\treturn false;\n\t}\n\tif (!isRecord(value.select)) {\n\t\treturn false;\n\t}\n\treturn Object.values(value.select).some(\n\t\t(entry) => entry === true || isRelationSelectNode(entry),\n\t);\n}\n\nexport function whereHasRelationPredicates(\n\tvalue: unknown,\n\tseen: WeakSet<object> = new WeakSet<object>(),\n): boolean {\n\tconst where = isRecord(value) && \"where\" in value ? value.where : value;\n\tif (!isRecord(where) || seen.has(where)) {\n\t\treturn false;\n\t}\n\tseen.add(where);\n\tfor (const [key, child] of Object.entries(where)) {\n\t\tif (child === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"or\" && Array.isArray(child)) {\n\t\t\tif (child.some((clause) => whereHasRelationPredicates(clause, seen))) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (key === \"not\" && whereHasRelationPredicates(child, seen)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (isRelationWhereValue(child)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function selectPayloadHasRelations(value: unknown): boolean {\n\tif (!isRecord(value)) {\n\t\treturn false;\n\t}\n\tif (whereHasRelationPredicates(value)) {\n\t\treturn true;\n\t}\n\tif (isRecord(value.select)) {\n\t\treturn Object.values(value.select).some((entry) =>\n\t\t\tisRelationSelectNode(entry),\n\t\t);\n\t}\n\tif (typeof value.select === \"string\" && value.select.includes(\"(\")) {\n\t\treturn true;\n\t}\n\tif (typeof value.columns === \"string\" && value.columns.includes(\"(\")) {\n\t\treturn true;\n\t}\n\tif (\n\t\tArray.isArray(value.columns) &&\n\t\tvalue.columns.some((column) => String(column).includes(\"(\"))\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function normalizeTransportPayload(\n\tpayload: unknown,\n): AthenaSelectQueryAst {\n\tif (!isRecord(payload)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"Query payload must be an object\",\n\t\t);\n\t}\n\n\tif (payload.kind === \"select\" && isRecord(payload.source)) {\n\t\treturn payload as unknown as AthenaSelectQueryAst;\n\t}\n\n\tconst table = String(payload.table_name ?? \"\").trim();\n\tif (!table) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t\"table_name is required\",\n\t\t);\n\t}\n\tconst source = parseSourceName(table);\n\n\tlet fields: AthenaSelectedFieldAst[];\n\tif (isRecord(payload.select) && !Array.isArray(payload.select)) {\n\t\tconst asShape = payload.select as AthenaSelectShape;\n\t\tconst hasRelation = Object.values(asShape).some((value) =>\n\t\t\tisRelationSelectNode(value),\n\t\t);\n\t\tif (\n\t\t\thasRelation ||\n\t\t\tObject.values(asShape).every((value) => value === true)\n\t\t) {\n\t\t\tfields = normalizeSelectShape(asShape, source, \"many\");\n\t\t} else {\n\t\t\tfields = normalizeSelectShape(asShape, source, \"many\");\n\t\t}\n\t} else {\n\t\tconst rawColumns =\n\t\t\ttypeof payload.select === \"string\"\n\t\t\t\t? payload.select\n\t\t\t\t: Array.isArray(payload.columns)\n\t\t\t\t\t? payload.columns.join(\",\")\n\t\t\t\t\t: typeof payload.columns === \"string\"\n\t\t\t\t\t\t? payload.columns\n\t\t\t\t\t\t: \"*\";\n\t\tfields =\n\t\t\trawColumns.trim() === \"\" || rawColumns.trim() === \"*\"\n\t\t\t\t? [{ kind: \"column\", column: \"*\" }]\n\t\t\t\t: parseSelectList(rawColumns, source);\n\t}\n\n\treturn {\n\t\tcardinality: \"many\",\n\t\tfilter:\n\t\t\tnormalizeWhere(payload.where as AthenaWhere | undefined) ??\n\t\t\tnormalizeGatewayConditions(\n\t\t\t\tpayload.conditions as AthenaGatewayCondition[] | undefined,\n\t\t\t),\n\t\tkind: \"select\",\n\t\torderBy: normalizeOrderBy(\n\t\t\t(payload.orderBy as AthenaOrderBy | undefined) ??\n\t\t\t\t(payload.sort_by as AthenaSortBy | undefined),\n\t\t),\n\t\tpagination: normalizePagination({\n\t\t\tcurrent_page: payload.current_page as number | undefined,\n\t\t\tlimit: payload.limit as number | undefined,\n\t\t\toffset: payload.offset as number | undefined,\n\t\t\tpage_size: payload.page_size as number | undefined,\n\t\t}),\n\t\tselection: { fields },\n\t\tsource,\n\t};\n}\n","import type { AthenaConditionAst, AthenaSelectQueryAst } from \"./ast.ts\";\nimport type { AthenaQueryCapabilityMatrix } from \"./capabilities.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport type { AthenaQueryPlan } from \"./plan.ts\";\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction walkConditions(\n\tcondition: AthenaConditionAst | undefined,\n\tvisit: (node: AthenaConditionAst) => void,\n): void {\n\tif (!condition) {\n\t\treturn;\n\t}\n\tvisit(condition);\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\tfor (const child of condition.conditions) {\n\t\t\twalkConditions(child, visit);\n\t\t}\n\t}\n\tif (condition.kind === \"not\") {\n\t\twalkConditions(condition.condition, visit);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\twalkConditions(condition.filter, visit);\n\t}\n}\n\nexport const DEFAULT_QUERY_MAX_NESTED_DEPTH = 8;\nexport const DEFAULT_QUERY_MAX_RELATIONS = 32;\n\nfunction countConditionRelations(condition?: AthenaConditionAst): number {\n\tif (!condition) {\n\t\treturn 0;\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.reduce(\n\t\t\t(total, child) => total + countConditionRelations(child),\n\t\t\t0,\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn countConditionRelations(condition.condition);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\treturn 1 + countConditionRelations(condition.filter);\n\t}\n\treturn 0;\n}\n\nfunction measureConditionDepth(condition?: AthenaConditionAst): number {\n\tif (!condition) {\n\t\treturn 0;\n\t}\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn condition.conditions.reduce(\n\t\t\t(depth, child) => Math.max(depth, measureConditionDepth(child)),\n\t\t\t0,\n\t\t);\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn measureConditionDepth(condition.condition);\n\t}\n\tif (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n\t\treturn 1 + measureConditionDepth(condition.filter);\n\t}\n\treturn 0;\n}\n\nexport function countAstRelations(ast: AthenaSelectQueryAst): number {\n\tlet count = countConditionRelations(ast.filter);\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tcount += 1 + countAstRelations(field.query);\n\t\t}\n\t}\n\treturn count;\n}\n\nexport function measureAstDepth(ast: AthenaSelectQueryAst): number {\n\tlet depth = measureConditionDepth(ast.filter);\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tdepth = Math.max(depth, 1 + measureAstDepth(field.query));\n\t\t}\n\t}\n\treturn depth;\n}\n\nexport function validateQueryComplexity(\n\tast: AthenaSelectQueryAst,\n\tlimits?: { maxNestedDepth?: number; maxRelations?: number },\n): void {\n\tconst maxDepth = limits?.maxNestedDepth ?? DEFAULT_QUERY_MAX_NESTED_DEPTH;\n\tconst maxRelations = limits?.maxRelations ?? DEFAULT_QUERY_MAX_RELATIONS;\n\tif (measureAstDepth(ast) > maxDepth) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t`Nested relation depth exceeds ${maxDepth}`,\n\t\t);\n\t}\n\tif (countAstRelations(ast) > maxRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_NESTING\",\n\t\t\t`Relation count exceeds ${maxRelations}`,\n\t\t);\n\t}\n}\n\nexport function validateSelectQueryAst(ast: AthenaSelectQueryAst): void {\n\tif (!IDENTIFIER.test(ast.source.table)) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SOURCE\",\n\t\t\t`Invalid source table: ${ast.source.table}`,\n\t\t);\n\t}\n\tif (ast.selection.fields.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"select requires at least one field\",\n\t\t);\n\t}\n\tif (ast.pagination?.page !== undefined && ast.pagination.page < 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_PAGINATION\",\n\t\t\t\"page must be >= 1\",\n\t\t);\n\t}\n\tvalidateQueryComplexity(ast);\n}\n\nexport function validatePlanAgainstCapabilities(\n\tplan: AthenaQueryPlan,\n\tcapabilities: AthenaQueryCapabilityMatrix,\n): void {\n\tif (planHasUnsupportedNulls(plan) && !capabilities.nullsOrdering) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`NULL ordering is unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\twalkConditions(plan.filter, (node) => {\n\t\tif (\n\t\t\tnode.kind === \"compare\" &&\n\t\t\tnode.operator === \"ilike\" &&\n\t\t\t!capabilities.ilike\n\t\t) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`ilike is unsupported on ${capabilities.backend}`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t(node.kind === \"contains\" || node.kind === \"contained-by\") &&\n\t\t\t!capabilities.jsonbContainment\n\t\t) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n\t\t\t\t`${node.kind} is unsupported on ${capabilities.backend}`,\n\t\t\t);\n\t\t}\n\t});\n\n\tconst hasRelations = plan.selection.some(\n\t\t(field) => field.kind === \"relation\",\n\t);\n\tif (hasRelations && !capabilities.nestedRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Nested relations are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\tlet hasRelationalPredicate = false;\n\tlet hasManyToMany = false;\n\twalkConditions(plan.filter, (node) => {\n\t\tif (node.kind === \"relation\" || node.kind === \"resolved-relation\") {\n\t\t\thasRelationalPredicate = true;\n\t\t\tif (\n\t\t\t\tnode.kind === \"resolved-relation\" &&\n\t\t\t\tnode.descriptor.cardinality === \"many-to-many\"\n\t\t\t) {\n\t\t\t\thasManyToMany = true;\n\t\t\t}\n\t\t}\n\t});\n\tfor (const field of plan.selection) {\n\t\tif (\n\t\t\tfield.kind === \"relation\" &&\n\t\t\tfield.descriptor.cardinality === \"many-to-many\"\n\t\t) {\n\t\t\thasManyToMany = true;\n\t\t}\n\t}\n\tif (hasRelationalPredicate && !capabilities.relationalPredicates) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Relational predicates are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\tif (hasManyToMany && !capabilities.manyToManyRelations) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n\t\t\t`Many-to-many relations are unsupported on ${capabilities.backend}`,\n\t\t);\n\t}\n\n\tfor (const field of plan.selection) {\n\t\tif (field.kind === \"relation\") {\n\t\t\tvalidatePlanAgainstCapabilities(field.plan, capabilities);\n\t\t}\n\t}\n}\n\nfunction planHasUnsupportedNulls(plan: AthenaQueryPlan): boolean {\n\treturn Boolean(plan.orderBy?.some((order) => order.nulls));\n}\n","import { compileSelectShape } from \"../query-ast.ts\";\nimport type { AthenaSelectShape } from \"../query-ast.ts\";\nimport type { AthenaConditionAst, AthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { GATEWAY_QUERY_CAPABILITIES } from \"../query/engine/capabilities.ts\";\nimport { canonicalizePagination } from \"../query/engine/normalize.ts\";\nimport type { AthenaQueryPlan } from \"../query/engine/plan.ts\";\nimport { validatePlanAgainstCapabilities } from \"../query/engine/validate.ts\";\nimport type { AthenaFetchPayload } from \"./types.ts\";\n\nfunction sourceName(ast: AthenaSelectQueryAst): string {\n  return ast.source.schema\n    ? `${ast.source.schema}.${ast.source.table}`\n    : ast.source.table;\n}\n\nfunction selectionToShape(ast: AthenaSelectQueryAst): AthenaSelectShape {\n  const shape: AthenaSelectShape = {};\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"column\") {\n      shape[field.alias ?? field.column] =\n        field.alias && field.alias !== field.column\n          ? true\n          : true;\n      if (field.column !== \"*\") {\n        shape[field.column] = true;\n        if (field.alias && field.alias !== field.column) {\n          delete shape[field.column];\n          shape[field.alias] = true;\n        }\n      } else {\n        shape[\"*\"] = true;\n      }\n      continue;\n    }\n    shape[field.alias ?? field.relation] = {\n      as: field.alias,\n      schema: field.query.source.schema,\n      select: selectionToShape(field.query),\n      via: field.via ?? field.relation,\n    };\n  }\n  return shape;\n}\n\nfunction conditionToWhere(condition: AthenaConditionAst): Record<string, unknown> {\n  switch (condition.kind) {\n    case \"and\":\n      return Object.assign(\n        {},\n        ...condition.conditions.map((child) => conditionToWhere(child))\n      );\n    case \"or\":\n      return { or: condition.conditions.map((child) => conditionToWhere(child)) };\n    case \"not\":\n      return { not: conditionToWhere(condition.condition) };\n    case \"compare\":\n      return { [condition.field.field]: { [condition.operator]: condition.value } };\n    case \"in\":\n      return { [condition.field.field]: { in: condition.values } };\n    case \"is-null\":\n      return {\n        [condition.field.field]: condition.negated ? { neq: null } : { eq: null },\n      };\n    case \"is-true\":\n      return { [condition.field.field]: { is: true } };\n    case \"is-false\":\n      return { [condition.field.field]: { is: false } };\n    case \"contains\":\n      return { [condition.field.field]: { contains: condition.value } };\n    case \"contained-by\":\n      return { [condition.field.field]: { containedBy: condition.value } };\n    case \"relation\":\n    case \"resolved-relation\":\n      return {\n        [condition.relation]: {\n          [condition.predicate]: condition.filter\n            ? conditionToWhere(condition.filter)\n            : {},\n        },\n      };\n    default:\n      return {};\n  }\n}\n\n/**\n * Project a semantic AST onto the existing Gateway `/gateway/fetch` wire.\n * Rust remains a consumer, not the owner, of query semantics.\n */\nexport function serializeGatewayAst(ast: AthenaSelectQueryAst): AthenaFetchPayload {\n  const select = selectionToShape(ast);\n  const page = canonicalizePagination(ast.pagination);\n  const payload: AthenaFetchPayload = {\n    select: compileSelectShape(select),\n    table_name: sourceName(ast),\n  };\n  if (ast.filter) {\n    payload.where = conditionToWhere(ast.filter) as AthenaFetchPayload[\"where\"];\n  }\n  if (ast.orderBy?.[0]) {\n    payload.orderBy = {\n      [ast.orderBy[0].field.field]: ast.orderBy[0].direction,\n    };\n  }\n  if (page.limit !== undefined) {\n    payload.limit = page.limit;\n  }\n  if (page.offset !== undefined) {\n    payload.offset = page.offset;\n  }\n  if (ast.cardinality === \"first\" || ast.cardinality === \"unique\") {\n    payload.limit = 1;\n  }\n  return payload;\n}\n\n/**\n * Serialize a resolved plan onto the existing Gateway fetch wire.\n * Compilers must not re-resolve relations; the plan is the input.\n */\nexport function serializeGatewayPlan(plan: AthenaQueryPlan): AthenaFetchPayload {\n  validatePlanAgainstCapabilities(plan, GATEWAY_QUERY_CAPABILITIES);\n  return serializeGatewayAst(plan.ast);\n}\n\nexport function serializeGatewayFindManyAst(ast: AthenaSelectQueryAst): {\n  limit?: number;\n  orderBy?: Record<string, string>;\n  select: AthenaSelectShape;\n  table_name: string;\n  where?: Record<string, unknown>;\n} {\n  const page = canonicalizePagination(ast.pagination);\n  return {\n    limit:\n      ast.cardinality === \"first\" || ast.cardinality === \"unique\"\n        ? 1\n        : page.limit,\n    orderBy: ast.orderBy?.[0]\n      ? { [ast.orderBy[0].field.field]: ast.orderBy[0].direction }\n      : undefined,\n    select: selectionToShape(ast),\n    table_name: sourceName(ast),\n    where: ast.filter ? conditionToWhere(ast.filter) : undefined,\n  };\n}\n","import type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n} from \"./types.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"../db/transaction/types.ts\";\nimport { GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES } from \"../db/transaction/types.ts\";\n\nexport interface GatewayTransactionHttpCaller {\n  (\n    payload: unknown,\n    options?: AthenaGatewayCallOptions\n  ): Promise<AthenaGatewayResponse<unknown>>;\n}\n\nfunction asResults(\n  raw: unknown\n): AthenaGatewayResponse<unknown>[] | undefined {\n  if (!raw || typeof raw !== \"object\") {\n    return undefined;\n  }\n  const record = raw as Record<string, unknown>;\n  const results = record.results;\n  if (!Array.isArray(results)) {\n    return undefined;\n  }\n  return results.map((item) => {\n    if (item && typeof item === \"object\") {\n      const row = item as Record<string, unknown>;\n      const ok = row.ok !== false && !row.error;\n      return {\n        count: typeof row.count === \"number\" ? row.count : null,\n        data: (row.data ?? null) as unknown,\n        error: typeof row.error === \"string\" ? row.error : undefined,\n        errorDetails: null,\n        ok,\n        raw: item,\n        status: typeof row.status === \"number\" ? row.status : ok ? 200 : 400,\n        statusText: ok ? \"OK\" : null,\n      };\n    }\n    return {\n      count: null,\n      data: item,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: item,\n      status: 200,\n      statusText: \"OK\",\n    };\n  });\n}\n\nexport function createGatewayHttpTransactionTransport(input: {\n  capabilities?: AthenaTransactionCapabilities;\n  postTransaction: GatewayTransactionHttpCaller;\n}): AthenaTransactionTransport {\n  const capabilities =\n    input.capabilities ?? GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES;\n  return {\n    capabilities,\n    async executeAtomic(\n      operations: readonly AthenaTransactionOperation[],\n      options?: AthenaResolvedTransactionOptions\n    ): Promise<AthenaTransactionTransportResult> {\n      if (!capabilities.atomic) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\",\n          `Atomic transactions are not supported by backend \"${capabilities.backend}\"`,\n          { backend: capabilities.backend }\n        );\n      }\n      const response = await input.postTransaction(\n        {\n          idempotency_key: options?.idempotencyKey ?? null,\n          operations: operations.map((operation) => ({\n            id: operation.id,\n            kind: operation.kind,\n            payload: operation.payload,\n          })),\n          options: {\n            deferrable: options?.deferrable ?? false,\n            isolation_level: options?.isolationLevel ?? null,\n            read_only: options?.readOnly ?? false,\n          },\n        },\n        options?.callOptions\n      );\n      if (!response.ok) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_FAILED\",\n          response.error ?? \"Gateway transaction failed\",\n          {\n            backend: capabilities.backend,\n            status: response.status,\n          }\n        );\n      }\n      const results = asResults(response.raw) ?? asResults(response.data);\n      if (!results || results.length !== operations.length) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_FAILED\",\n          \"Gateway transaction response did not include positional results\",\n          { backend: capabilities.backend }\n        );\n      }\n      const committed =\n        response.data &&\n        typeof response.data === \"object\" &&\n        \"committed\" in (response.data as object)\n          ? Boolean((response.data as { committed?: unknown }).committed)\n          : results.every((result) => result.ok);\n      return { committed, results };\n    },\n  };\n}\n","import type { AthenaTransactionTransport } from \"../db/transaction/types.ts\";\nimport { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { isAthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport { serializeGatewayAst } from \"./serialize-ast.ts\";\nimport { createGatewayHttpTransactionTransport } from \"./transaction.ts\";\nimport type {\n\tAthenaDeletePayload,\n\tAthenaFetchPayload,\n\tAthenaGatewayBaseOptions,\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayConnectionOptions,\n\tAthenaGatewayConnectionResult,\n\tAthenaGatewayEndpointPath,\n\tAthenaGatewayErrorDetails,\n\tAthenaGatewayMethod,\n\tAthenaGatewayResponse,\n\tAthenaInsertPayload,\n\tAthenaQueryPayload,\n\tAthenaRpcCallOptions,\n\tAthenaRpcFilter,\n\tAthenaRpcPayload,\n\tAthenaUpdatePayload,\n} from \"./types.js\";\nimport {\n\tATHENA_DEFAULT_BASE_URL,\n\tbuildAthenaGatewayUrl,\n\tnormalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\n\nconst SDK_NAME = \"@xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n\tpayload: unknown,\n): Record<string, unknown> | null {\n\tif (!isRecord(payload)) {\n\t\treturn null;\n\t}\n\treturn isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n\treturn (\n\t\theaders.get(\"x-request-id\") ??\n\t\theaders.get(\"x-correlation-id\") ??\n\t\theaders.get(\"x-athena-request-id\") ??\n\t\tundefined\n\t);\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n\tconst structuredPayload = resolveStructuredErrorPayload(payload);\n\tif (structuredPayload) {\n\t\tconst messageCandidates = [\n\t\t\tstructuredPayload.message,\n\t\t\tstructuredPayload.error,\n\t\t\tstructuredPayload.details,\n\t\t];\n\t\tfor (const candidate of messageCandidates) {\n\t\t\tconst resolved = nonEmptyString(candidate);\n\t\t\tif (resolved) {\n\t\t\t\treturn resolved;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rawMessage = nonEmptyString(payload);\n\tif (rawMessage) {\n\t\treturn rawMessage;\n\t}\n\n\treturn fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n\tconst structuredPayload = resolveStructuredErrorPayload(payload);\n\treturn structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(\n\tresponse: Response,\n\tpayload: unknown,\n): string | null {\n\tconst rawStatusText = nonEmptyString(response.statusText);\n\tif (rawStatusText) {\n\t\treturn rawStatusText;\n\t}\n\tconst payloadRecord = isRecord(payload) ? payload : null;\n\treturn payloadRecord\n\t\t? (nonEmptyString(payloadRecord.statusText) ?? null)\n\t\t: null;\n}\n\nfunction detailsFromError(\n\terror: AthenaGatewayError,\n): AthenaGatewayErrorDetails {\n\treturn error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n\tlimit?: number;\n\torderBy?: Record<string, unknown>;\n\tselect: Record<string, unknown>;\n\ttable_name: string;\n\twhere?: Record<string, unknown>;\n}\n\nfunction toQueryScalar(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn \"null\";\n\t}\n\tif (typeof value === \"boolean\") {\n\t\treturn value ? \"true\" : \"false\";\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn Number.isFinite(value) ? String(value) : \"null\";\n\t}\n\treturn String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n\treturn `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n\tif (Array.isArray(value)) {\n\t\treturn toQueryArray(value);\n\t}\n\tif (value && typeof value === \"object\") {\n\t\treturn JSON.stringify(value);\n\t}\n\treturn toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n\tconst value = filter.value;\n\tswitch (filter.operator) {\n\t\tcase \"in\": {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new AthenaGatewayError({\n\t\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\t\tmessage: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn `in.${toQueryArray(value)}`;\n\t\t}\n\t\tcase \"is\":\n\t\t\treturn `is.${toQueryScalar(value)}`;\n\t\tcase \"eq\":\n\t\tcase \"neq\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"like\":\n\t\tcase \"ilike\":\n\t\t\treturn `${filter.operator}.${toQueryScalar(value)}`;\n\t\tdefault: {\n\t\t\tconst exhaustive: never = filter.operator;\n\t\t\tthrow new AthenaGatewayError({\n\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\tmessage: `Unsupported RPC filter operator: ${String(exhaustive)}`,\n\t\t\t\tstatus: 0,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction buildRpcGetEndpoint(\n\tpayload: AthenaRpcPayload,\n): AthenaGatewayEndpointPath {\n\tconst functionName = (payload.function_name ?? payload.function).trim();\n\tif (!functionName) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\tendpoint: \"/gateway/rpc\",\n\t\t\tmessage: \"rpc requires a function name\",\n\t\t\tmethod: \"GET\",\n\t\t\tstatus: 0,\n\t\t});\n\t}\n\n\tconst query = new URLSearchParams();\n\tif (payload.schema) {\n\t\tquery.set(\"schema\", payload.schema);\n\t}\n\tif (payload.select) {\n\t\tquery.set(\"select\", payload.select);\n\t}\n\tif (payload.count) {\n\t\tquery.set(\"count\", payload.count);\n\t}\n\tif (payload.head) {\n\t\tquery.set(\"head\", \"true\");\n\t}\n\tif (typeof payload.limit === \"number\") {\n\t\tquery.set(\"limit\", String(payload.limit));\n\t}\n\tif (typeof payload.offset === \"number\") {\n\t\tquery.set(\"offset\", String(payload.offset));\n\t}\n\tif (payload.order?.column) {\n\t\tquery.set(\n\t\t\t\"order\",\n\t\t\tpayload.order.ascending === false\n\t\t\t\t? `${payload.order.column}.desc`\n\t\t\t\t: payload.order.column,\n\t\t);\n\t}\n\n\tif (payload.args) {\n\t\tfor (const [key, value] of Object.entries(payload.args)) {\n\t\t\tquery.set(key, toRpcArgumentQueryValue(value));\n\t\t}\n\t}\n\n\tif (payload.filters?.length) {\n\t\tfor (const filter of payload.filters) {\n\t\t\tif (payload.args && Object.hasOwn(payload.args, filter.column)) {\n\t\t\t\tthrow new AthenaGatewayError({\n\t\t\t\t\tcode: \"UNKNOWN_ERROR\",\n\t\t\t\t\tmessage: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\tquery.append(filter.column, toRpcFilterQueryValue(filter));\n\t\t}\n\t}\n\n\tconst endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n\tconst queryText = query.toString();\n\tconst withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n\treturn withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n\tconfig: AthenaGatewayBaseOptions,\n\toptions?: AthenaGatewayCallOptions,\n): Record<string, string> {\n\treturn buildServiceRequestHeaders(\n\t\t\"gateway\",\n\t\tSDK_HEADER_VALUE,\n\t\tconfig,\n\t\toptions,\n\t\t{\n\t\t\tclient: options?.client ?? config.client ?? \"DEFAULT_CLIENT\",\n\t\t\tstripNulls: options?.stripNulls ?? true,\n\t\t},\n\t);\n}\n\nfunction toInvalidUrlResponse<T>(\n\terror: unknown,\n\tendpoint: AthenaGatewayEndpointPath,\n\tmethod: AthenaGatewayMethod,\n): AthenaGatewayResponse<T> {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst gatewayError =\n\t\terror instanceof AthenaGatewayError\n\t\t\t? error\n\t\t\t: new AthenaGatewayError({\n\t\t\t\t\tcause: message,\n\t\t\t\t\tcode: \"INVALID_URL\",\n\t\t\t\t\tendpoint,\n\t\t\t\t\thint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n\t\t\t\t\tmessage,\n\t\t\t\t\tmethod,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t});\n\n\treturn {\n\t\tdata: null,\n\t\terror: gatewayError.message,\n\t\terrorDetails: detailsFromError(\n\t\t\tnew AthenaGatewayError({\n\t\t\t\tcause: gatewayError.causeDetail,\n\t\t\t\tcode: gatewayError.code,\n\t\t\t\tendpoint,\n\t\t\t\thint: gatewayError.hint,\n\t\t\t\tmessage: gatewayError.message,\n\t\t\t\tmethod,\n\t\t\t\trequestId: gatewayError.requestId,\n\t\t\t\tstatus: gatewayError.status,\n\t\t\t}),\n\t\t),\n\t\tok: false,\n\t\traw: null,\n\t\tstatus: 0,\n\t\tstatusText: null,\n\t};\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n\treturn normalizeAthenaGatewayBaseUrl(input, {\n\t\tdefaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n\t});\n}\n\nfunction resolveProbePath(path?: string) {\n\tif (!path) {\n\t\treturn \"/\";\n\t}\n\tif (!path.startsWith(\"/\")) {\n\t\tthrow new AthenaGatewayError({\n\t\t\tcode: \"INVALID_URL\",\n\t\t\thint: 'Use a leading slash such as \"/\" or \"/health\".',\n\t\t\tmessage: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n\t\t\tstatus: 0,\n\t\t});\n\t}\n\treturn path;\n}\n\nfunction mergeConnectionHeaders(\n\tbaseHeaders: Record<string, string>,\n\theaders?: Record<string, string>,\n): Record<string, string> {\n\tconst merged = {\n\t\t...baseHeaders,\n\t\t...(headers ?? {}),\n\t};\n\n\tif (!(merged[\"X-Athena-Sdk\"] || merged[\"x-athena-sdk\"])) {\n\t\tmerged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n\t}\n\n\treturn merged;\n}\n\nasync function performConnectionCheck(\n\tbaseUrl: string,\n\trequestHeaders: Record<string, string>,\n\toptions?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n\tconst path = resolveProbePath(options?.path);\n\tconst url = buildAthenaGatewayUrl(baseUrl, path);\n\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\theaders: mergeConnectionHeaders(requestHeaders, options?.headers),\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: options?.signal,\n\t\t});\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst invalidJsonError = new AthenaGatewayError({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\thint: \"Verify the gateway response body is valid JSON.\",\n\t\t\t\tmessage: \"Gateway probe returned malformed JSON\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tbaseUrl,\n\t\t\t\terror: invalidJsonError.message,\n\t\t\t\terrorDetails: detailsFromError(invalidJsonError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\treachable: true,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsedBody.parsed),\n\t\t\t\turl,\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\t\tif (!response.ok) {\n\t\t\tconst httpError = new AthenaGatewayError({\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\thint: resolveErrorHint(parsed),\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena gateway GET ${path} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod: \"GET\",\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tbaseUrl,\n\t\t\t\terror: httpError.message,\n\t\t\t\terrorDetails: detailsFromError(httpError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\treachable: true,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\t\turl,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbaseUrl,\n\t\t\terror: undefined,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\treachable: true,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\turl,\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst networkError = new AthenaGatewayError({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\thint: \"Check gateway URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while probing Athena gateway ${url}: ${message}`,\n\t\t\tmethod: \"GET\",\n\t\t});\n\t\treturn {\n\t\t\tbaseUrl,\n\t\t\terror: networkError.message,\n\t\t\terrorDetails: detailsFromError(networkError),\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\treachable: false,\n\t\t\tstatus: 0,\n\t\t\tstatusText: null,\n\t\t\turl,\n\t\t};\n\t}\n}\n\nexport async function verifyAthenaGatewayUrl(\n\tbaseUrl: string,\n\toptions?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n\tconst normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n\treturn performConnectionCheck(\n\t\tnormalizedBaseUrl,\n\t\t{ \"X-Athena-Sdk\": SDK_HEADER_VALUE },\n\t\toptions,\n\t);\n}\n\nasync function callAthena<T>(\n\tconfig: AthenaGatewayBaseOptions,\n\tendpoint: AthenaGatewayEndpointPath,\n\tmethod: AthenaGatewayMethod,\n\tpayload: unknown,\n\toptions?: AthenaGatewayCallOptions,\n): Promise<AthenaGatewayResponse<T>> {\n\tlet baseUrl: string;\n\ttry {\n\t\tbaseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n\t} catch (error) {\n\t\treturn toInvalidUrlResponse<T>(error, endpoint, method);\n\t}\n\n\tconst url = buildAthenaGatewayUrl(baseUrl, endpoint);\n\tconst headers = buildHeaders(config, options);\n\n\ttry {\n\t\tconst requestInit: RequestInit = {\n\t\t\theaders,\n\t\t\tmethod,\n\t\t\tsignal: options?.signal,\n\t\t};\n\t\tif (method !== \"GET\") {\n\t\t\trequestInit.body = JSON.stringify(payload);\n\t\t}\n\n\t\tconst response = await fetch(url, requestInit);\n\n\t\tconst rawText = await response.text();\n\t\tconst requestId = resolveRequestId(response.headers);\n\t\tconst parsedBody = parseResponseBody(\n\t\t\trawText ?? \"\",\n\t\t\tresponse.headers.get(\"content-type\"),\n\t\t);\n\n\t\tif (parsedBody.parseFailed) {\n\t\t\tconst invalidJsonError = new AthenaGatewayError({\n\t\t\t\tcause: rawText.slice(0, 300),\n\t\t\t\tcode: \"INVALID_JSON\",\n\t\t\t\tendpoint,\n\t\t\t\thint: \"Verify the gateway response body is valid JSON.\",\n\t\t\t\tmessage: \"Gateway returned malformed JSON\",\n\t\t\t\tmethod,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: invalidJsonError.message,\n\t\t\t\terrorDetails: detailsFromError(invalidJsonError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsedBody.parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsedBody.parsed),\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parsedBody.parsed;\n\t\tconst parsedPayload = isRecord(parsed) ? parsed : null;\n\n\t\tif (!response.ok) {\n\t\t\tconst httpError = new AthenaGatewayError({\n\t\t\t\tcode: \"HTTP_ERROR\",\n\t\t\t\tendpoint,\n\t\t\t\thint: resolveErrorHint(parsed),\n\t\t\t\tmessage: resolveErrorMessage(\n\t\t\t\t\tparsed,\n\t\t\t\t\t`Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\n\t\t\t\t),\n\t\t\t\tmethod,\n\t\t\t\trequestId,\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tdata: null,\n\t\t\t\terror: httpError.message,\n\t\t\t\terrorDetails: detailsFromError(httpError),\n\t\t\t\tok: false,\n\t\t\t\traw: parsed,\n\t\t\t\tstatus: response.status,\n\t\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t\t};\n\t\t}\n\n\t\t// Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n\t\t// vs raw array when uncached. Use inner data when present to avoid double nesting.\n\t\tconst payloadData =\n\t\t\tparsedPayload && \"data\" in parsedPayload\n\t\t\t\t? (parsedPayload.data as T)\n\t\t\t\t: (parsed as T);\n\t\tconst payloadCount =\n\t\t\tparsedPayload && \"count\" in parsedPayload\n\t\t\t\t? typeof parsedPayload.count === \"number\" ||\n\t\t\t\t\tparsedPayload.count === null\n\t\t\t\t\t? (parsedPayload.count as number | null)\n\t\t\t\t\t: undefined\n\t\t\t\t: undefined;\n\n\t\tconst affectedRows = resolveMutationAffectedRows({\n\t\t\tcount: payloadCount,\n\t\t\tendpoint,\n\t\t\traw: parsed,\n\t\t});\n\t\tconst mutationCount =\n\t\t\taffectedRows === undefined\n\t\t\t\t? payloadCount\n\t\t\t\t: (payloadCount ?? affectedRows);\n\n\t\treturn {\n\t\t\t...(affectedRows !== undefined ? { affectedRows } : {}),\n\t\t\tcount: mutationCount,\n\t\t\tdata: payloadData ?? null,\n\t\t\terror: undefined,\n\t\t\terrorDetails: null,\n\t\t\tok: true,\n\t\t\traw: parsed,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: resolveStatusText(response, parsed),\n\t\t};\n\t} catch (callError) {\n\t\tconst message =\n\t\t\tcallError instanceof Error ? callError.message : String(callError);\n\t\tconst networkError = new AthenaGatewayError({\n\t\t\tcause: message,\n\t\t\tcode: \"NETWORK_ERROR\",\n\t\t\tendpoint,\n\t\t\thint: \"Check gateway URL, DNS, and network reachability.\",\n\t\t\tmessage: `Network error while calling ${method} ${endpoint}: ${message}`,\n\t\t\tmethod,\n\t\t});\n\t\treturn {\n\t\t\tdata: null,\n\t\t\terror: networkError.message,\n\t\t\terrorDetails: detailsFromError(networkError),\n\t\t\tok: false,\n\t\t\traw: null,\n\t\t\tstatus: 0,\n\t\t\tstatusText: null,\n\t\t};\n\t}\n}\n\nexport interface AthenaGatewayClient {\n\tbaseUrl: string;\n\tbuildHeaders: (options?: AthenaGatewayCallOptions) => Record<string, string>;\n\tdeleteGateway: <T>(\n\t\tpayload: AthenaDeletePayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tfetchGateway: <T>(\n\t\tpayload: AthenaFetchPayload | AthenaFindManyAstPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tinsertGateway: <T>(\n\t\tpayload: AthenaInsertPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tqueryGateway: <T>(\n\t\tpayload: AthenaQueryPayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tresolveCallOptions: (\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayCallOptions | undefined>;\n\trpcGateway: <T>(\n\t\tpayload: AthenaRpcPayload,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\tupdateGateway: <T>(\n\t\tpayload: AthenaUpdatePayload,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaGatewayResponse<T>>;\n\ttransactions?: AthenaTransactionTransport;\n\tverifyConnection: (\n\t\toptions?: AthenaGatewayConnectionOptions,\n\t) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport function createAthenaGatewayClient(\n\tconfig: AthenaGatewayBaseOptions = {},\n): AthenaGatewayClient {\n\tconst normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n\tconst normalizedConfig: AthenaGatewayBaseOptions = {\n\t\t...config,\n\t\tbaseUrl: normalizedBaseUrl,\n\t};\n\n\treturn {\n\t\tbaseUrl: normalizedBaseUrl,\n\t\tbuildHeaders(options) {\n\t\t\treturn buildHeaders(normalizedConfig, options);\n\t\t},\n\t\tdeleteGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/delete\",\n\t\t\t\t\"DELETE\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tfetchGateway(payload, options) {\n\t\t\tconst wirePayload = isAthenaSelectQueryAst(payload)\n\t\t\t\t? serializeGatewayAst(payload)\n\t\t\t\t: payload;\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/fetch\",\n\t\t\t\t\"POST\",\n\t\t\t\twirePayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tinsertGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/insert\",\n\t\t\t\t\"PUT\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tqueryGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/query\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tasync resolveCallOptions(options) {\n\t\t\treturn options;\n\t\t},\n\t\trpcGateway(payload, options) {\n\t\t\tif (options?.get) {\n\t\t\t\tconst endpoint = buildRpcGetEndpoint(payload);\n\t\t\t\treturn callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n\t\t\t}\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/rpc\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\tupdateGateway(payload, options) {\n\t\t\treturn callAthena(\n\t\t\t\tnormalizedConfig,\n\t\t\t\t\"/gateway/update\",\n\t\t\t\t\"POST\",\n\t\t\t\tpayload,\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t\ttransactions: createGatewayHttpTransactionTransport({\n\t\t\tpostTransaction(payload, options) {\n\t\t\t\treturn callAthena(\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t\t\"/gateway/transaction\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tpayload,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t},\n\t\t}),\n\t\tverifyConnection(options) {\n\t\t\treturn performConnectionCheck(\n\t\t\t\tnormalizedBaseUrl,\n\t\t\t\tbuildHeaders(normalizedConfig),\n\t\t\t\toptions,\n\t\t\t);\n\t\t},\n\t};\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n\t| AthenaGatewayCallOptions\n\t| undefined\n\t| Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n\tbase?: AthenaGatewayCallOptions,\n\toverride?: AthenaGatewayCallOptions,\n): AthenaGatewayCallOptions | undefined {\n\tif (!(base || override)) {\n\t\treturn;\n\t}\n\treturn {\n\t\t...base,\n\t\t...override,\n\t\theaders:\n\t\t\tbase?.headers || override?.headers\n\t\t\t\t? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n\t\t\t\t: undefined,\n\t};\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\ttransport: AthenaGatewayClient,\n\tresolveContext: AthenaGatewayCallOptionsResolver,\n): AthenaGatewayClient {\n\tconst resolveCallOptions = async (\n\t\toptions?: AthenaGatewayCallOptions,\n\t): Promise<AthenaGatewayCallOptions | undefined> =>\n\t\tmergeGatewayCallOptions(await resolveContext(), options);\n\n\treturn {\n\t\tbaseUrl: transport.baseUrl,\n\t\tbuildHeaders(options) {\n\t\t\treturn transport.buildHeaders(options);\n\t\t},\n\t\tasync deleteGateway(payload, options) {\n\t\t\treturn transport.deleteGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\tasync fetchGateway(payload, options) {\n\t\t\treturn transport.fetchGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tasync insertGateway(payload, options) {\n\t\t\treturn transport.insertGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\tasync queryGateway(payload, options) {\n\t\t\treturn transport.queryGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tresolveCallOptions,\n\t\tasync rpcGateway(payload, options) {\n\t\t\treturn transport.rpcGateway(payload, await resolveCallOptions(options));\n\t\t},\n\t\tasync updateGateway(payload, options) {\n\t\t\treturn transport.updateGateway(\n\t\t\t\tpayload,\n\t\t\t\tawait resolveCallOptions(options),\n\t\t\t);\n\t\t},\n\t\ttransactions: transport.transactions,\n\t\tasync verifyConnection(options) {\n\t\t\tconst context = await resolveCallOptions();\n\t\t\tconst contextHeaders = transport.buildHeaders(context);\n\t\t\treturn transport.verifyConnection({\n\t\t\t\t...options,\n\t\t\t\theaders: {\n\t\t\t\t\t...contextHeaders,\n\t\t\t\t\t...(options?.headers ?? {}),\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t};\n}\n","import type { AthenaModelTarget } from \"./types.ts\";\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n  fallbackModel?: string;\n  fallbackSchema?: string;\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n  const normalized = value?.trim();\n  return normalized ? normalized : undefined;\n}\n\nexport function isAthenaModelTarget(\n  value: unknown\n): value is AthenaModelTarget {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as { meta?: { primaryKey?: unknown } };\n  return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey));\n}\n\nexport function resolveAthenaModelTargetTableName(\n  target: AthenaModelTarget,\n  options: ResolveAthenaModelTargetTableNameOptions = {}\n): string {\n  const explicitTableName = normalizeOptionalName(target.meta.tableName);\n  const schemaName = normalizeOptionalName(\n    target.meta.schema ?? options.fallbackSchema\n  );\n  if (explicitTableName) {\n    if (explicitTableName.includes(\".\")) {\n      return explicitTableName;\n    }\n    return schemaName ? `${schemaName}.${explicitTableName}` : explicitTableName;\n  }\n  const modelName = normalizeOptionalName(\n    target.meta.model ?? options.fallbackModel\n  );\n\n  if (!modelName) {\n    throw new Error(\n      \"Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).\"\n    );\n  }\n\n  return schemaName ? `${schemaName}.${modelName}` : modelName;\n}\n","/**\n * Shared query-string builder for path + optional object of primitives.\n */\n\nexport interface AppendHttpQueryOptions {\n  /**\n   * When true, skip empty-string values (admin/backup style).\n   * Default: only skip null/undefined.\n   */\n  skipEmptyString?: boolean;\n}\n\n/**\n * Append `query` object as `?k=v` on `path`. Omits null/undefined (and empty\n * strings when `skipEmptyString` is set).\n */\nexport function appendHttpQuery(\n  path: string,\n  query?: object,\n  options?: AppendHttpQueryOptions\n): string {\n  if (!query) {\n    return path;\n  }\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    if (options?.skipEmptyString && value === \"\") {\n      continue;\n    }\n    params.set(key, String(value));\n  }\n  const text = params.toString();\n  return text ? `${path}?${text}` : path;\n}\n","/**\n * Shared Athena storage error types and factory.\n *\n * Extracted from `module.ts` so `backup.ts` (and other storage submodules) can\n * throw real {@link AthenaStorageError} instances with `onError` observers\n * without a circular import against the storage module surface.\n */\n\nimport type {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  NormalizedAthenaError,\n} from \"../auxiliaries.ts\";\nimport { normalizeAthenaError } from \"../auxiliaries.ts\";\nimport type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\n\nexport type AthenaStorageErrorHandler = (\n  error: AthenaStorageError\n) => void | Promise<void>;\n\n/** Local / adapter capability gap — never silently approximate the missing op. */\nexport const ATHENA_STORAGE_CAPABILITY_UNSUPPORTED =\n  \"ATHENA_STORAGE_CAPABILITY_UNSUPPORTED\" as const;\n\nexport type AthenaStorageCapabilityUnsupportedCode =\n  typeof ATHENA_STORAGE_CAPABILITY_UNSUPPORTED;\n\nexport class AthenaStorageCapabilityError extends Error {\n  readonly code: AthenaStorageCapabilityUnsupportedCode =\n    ATHENA_STORAGE_CAPABILITY_UNSUPPORTED;\n\n  constructor(operation: string) {\n    super(\n      `${ATHENA_STORAGE_CAPABILITY_UNSUPPORTED}: ${operation} is not supported on this storage adapter.`\n    );\n    this.name = \"AthenaStorageCapabilityError\";\n  }\n}\n\nexport type AthenaStorageErrorCode =\n  | \"INVALID_URL\"\n  | \"NETWORK_ERROR\"\n  | \"HTTP_ERROR\"\n  | \"INVALID_JSON\"\n  | \"INVALID_ATHENA_ENVELOPE\"\n  | \"UNKNOWN_ERROR\"\n  | AthenaStorageCapabilityUnsupportedCode;\n\nexport const AthenaStorageErrorCode = {\n  HttpError: \"HTTP_ERROR\",\n  InvalidAthenaEnvelope: \"INVALID_ATHENA_ENVELOPE\",\n  InvalidJson: \"INVALID_JSON\",\n  InvalidUrl: \"INVALID_URL\",\n  NetworkError: \"NETWORK_ERROR\",\n  UnknownError: \"UNKNOWN_ERROR\",\n} as const satisfies Record<string, AthenaStorageErrorCode>;\n\nexport interface AthenaStorageErrorDetails {\n  athenaCode: AthenaErrorCode;\n  category: AthenaErrorCategory;\n  cause?: string;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  kind: AthenaErrorKind;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n}\n\nexport interface AthenaStorageErrorInput {\n  cause?: unknown;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw?: unknown;\n  requestId?: string;\n  status: number;\n}\n\n/** Minimal runtime knobs needed to notify error observers. */\nexport interface AthenaStorageErrorRuntimeOptions {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/** Route row used only for normalized-error `operation` labels. */\nexport interface StorageErrorRouteRef {\n  method: string;\n  name: string;\n  path: string;\n}\n\nlet storageErrorRoutes: readonly StorageErrorRouteRef[] = [];\n\n/**\n * Bind storage SDK route names so normalized errors can resolve\n * `operation` (e.g. `listStorageFiles`). Called once from `module.ts`\n * after `storageSdkManifest` is defined.\n */\nexport function bindStorageErrorRoutes(\n  routes: readonly StorageErrorRouteRef[]\n): void {\n  storageErrorRoutes = routes;\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n  if (cause === undefined || cause === null) {\n    return;\n  }\n  if (typeof cause === \"string\") {\n    return cause;\n  }\n  if (cause instanceof Error && cause.message.trim()) {\n    return cause.message.trim();\n  }\n  try {\n    return JSON.stringify(cause);\n  } catch {\n    return String(cause);\n  }\n}\n\nfunction storageGatewayCode(\n  code: AthenaStorageErrorCode\n): AthenaGatewayErrorCode {\n  if (code === \"INVALID_URL\") {\n    return \"INVALID_URL\";\n  }\n  if (code === \"NETWORK_ERROR\") {\n    return \"NETWORK_ERROR\";\n  }\n  if (code === \"INVALID_JSON\" || code === \"INVALID_ATHENA_ENVELOPE\") {\n    return \"INVALID_JSON\";\n  }\n  if (code === \"HTTP_ERROR\") {\n    return \"HTTP_ERROR\";\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nfunction storageOperationFromEndpoint(\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod\n): string {\n  const endpointPath = String(endpoint).split(\"?\")[0];\n  for (const candidate of storageErrorRoutes) {\n    if (candidate.method !== method) {\n      continue;\n    }\n    const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\\\\\{[^/]+\\\\\\}/g, \"[^/]+\")}$`;\n    if (new RegExp(pattern).test(endpointPath)) {\n      return candidate.name;\n    }\n  }\n  return `storage:${method.toLowerCase()}`;\n}\n\nfunction normalizeStorageErrorInput(\n  input: AthenaStorageErrorInput\n): NormalizedAthenaError {\n  return normalizeAthenaError(\n    {\n      data: null,\n      error: {\n        gatewayCode: storageGatewayCode(input.code),\n        message: input.message,\n        raw: input.raw ?? input.cause ?? null,\n        status: input.status,\n      },\n      errorDetails: {\n        cause: causeToString(input.cause),\n        code: storageGatewayCode(input.code),\n        endpoint: input.endpoint,\n        hint: input.hint,\n        message: input.message,\n        method: input.method,\n        requestId: input.requestId,\n        status: input.status,\n      },\n      raw: input.raw ?? input.cause ?? null,\n      status: input.status,\n    },\n    { operation: storageOperationFromEndpoint(input.endpoint, input.method) }\n  );\n}\n\nexport class AthenaStorageError extends Error {\n  readonly code: AthenaStorageErrorCode;\n  readonly athenaCode: AthenaErrorCode;\n  readonly kind: AthenaErrorKind;\n  readonly category: AthenaErrorCategory;\n  readonly retryable: boolean;\n  readonly status: number;\n  readonly endpoint: AthenaGatewayEndpointPath;\n  readonly method: AthenaGatewayMethod;\n  readonly requestId?: string;\n  readonly hint?: string;\n  readonly causeDetail?: string;\n  readonly raw: unknown;\n  readonly normalized: NormalizedAthenaError;\n  readonly __athenaNormalizedError: NormalizedAthenaError;\n\n  constructor(input: AthenaStorageErrorInput) {\n    super(input.message, { cause: input.cause });\n    this.name = \"AthenaStorageError\";\n    this.code = input.code;\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.hint = input.hint;\n    this.causeDetail = causeToString(input.cause);\n    this.raw = input.raw ?? null;\n    this.normalized = normalizeStorageErrorInput(input);\n    this.__athenaNormalizedError = this.normalized;\n    this.athenaCode = this.normalized.code;\n    this.kind = this.normalized.kind;\n    this.category = this.normalized.category;\n    this.retryable = this.normalized.retryable;\n    Object.defineProperty(this, \"__athenaNormalizedError\", {\n      configurable: false,\n      enumerable: false,\n      value: this.normalized,\n      writable: false,\n    });\n  }\n\n  toDetails(): AthenaStorageErrorDetails {\n    return {\n      athenaCode: this.athenaCode,\n      category: this.category,\n      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      kind: this.kind,\n      message: this.message,\n      method: this.method,\n      raw: this.raw,\n      requestId: this.requestId,\n      retryable: this.retryable,\n      status: this.status,\n    };\n  }\n}\n\nexport function createAthenaStorageError(\n  input: AthenaStorageErrorInput\n): AthenaStorageError {\n  return new AthenaStorageError(input);\n}\n\nfunction readOnErrorHandler(\n  source: unknown\n): AthenaStorageErrorHandler | undefined {\n  if (!source || typeof source !== \"object\") {\n    return;\n  }\n  const handler = (source as { onError?: unknown }).onError;\n  return typeof handler === \"function\"\n    ? (handler as AthenaStorageErrorHandler)\n    : undefined;\n}\n\n/**\n * Notify runtime + per-call `onError` observers.\n * `options` is intentionally wide so gateway-resolved call options\n * (without `onError`) remain assignable at call sites.\n */\nexport async function notifyStorageError(\n  error: AthenaStorageError,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<void> {\n  const handlers = [\n    runtimeOptions?.onError,\n    readOnErrorHandler(options),\n  ].filter(\n    (handler): handler is AthenaStorageErrorHandler =>\n      typeof handler === \"function\"\n  );\n  for (const handler of handlers) {\n    try {\n      await handler(error);\n    } catch {\n      // Error observers must not mask the original storage failure.\n    }\n  }\n}\n\nexport async function rejectStorageError(\n  input: AthenaStorageErrorInput,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<never> {\n  const error = createAthenaStorageError(input);\n  await notifyStorageError(error, options, runtimeOptions);\n  throw error;\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n *\n * HTTP transport is injected from `module.ts` (`callStorageEndpoint`) so backup\n * failures share real {@link AthenaStorageError}, request ids, and `onError`.\n */\n\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaGatewayMethod } from \"../gateway/types.ts\";\nimport { appendHttpQuery } from \"../http/append-query.ts\";\nimport { createAthenaStorageError } from \"./errors.ts\";\nimport type {\n  AthenaStorageCallOptions,\n  AthenaStorageClientConfig,\n} from \"./module.ts\";\n\nexport type BackupRecoveryStrategy = \"none\" | \"repair_missing_role_oids\";\n\nexport interface StorageBackupRecord {\n  client_name: string;\n  completed_at: string;\n  execution_daemon_id?: string | null;\n  job_id: number;\n  /** Alias of s3_key for convenience */\n  key: string;\n  label?: string | null;\n  s3_bucket: string;\n  s3_key: string;\n  size_bytes: number;\n}\n\nexport interface StorageBackupListPage {\n  backups: StorageBackupRecord[];\n  next_cursor: string | null;\n}\n\nexport interface StorageBackupListQuery {\n  client_name?: string;\n  cursor?: string | null;\n  limit?: number;\n}\n\nexport interface StorageBackupCreateRequest {\n  client_name: string;\n  label?: string;\n  pg_uri?: string;\n  recovery_strategy?: BackupRecoveryStrategy;\n}\n\nexport interface StorageBackupQueuedJob {\n  client_name: string;\n  job_id: number;\n  key?: string;\n  status: string;\n}\n\nexport interface StorageBackupRestoreRequest {\n  client_name: string;\n  pg_uri?: string;\n}\n\nexport interface StorageBackupJob {\n  client_name?: string | null;\n  completed_at?: string | null;\n  created_at?: string;\n  error_message?: string | null;\n  id: number;\n  job_type: string;\n  label?: string | null;\n  progress_pct?: number | null;\n  progress_stage?: string | null;\n  s3_bucket?: string | null;\n  s3_key?: string | null;\n  status: string;\n  updated_at?: string;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupSchedule {\n  client_name: string;\n  enabled?: boolean;\n  frequency?: string;\n  id: number;\n  label?: string | null;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n  client_name: string;\n  day_of_month?: number;\n  day_of_week?: number;\n  enabled?: boolean;\n  execution_daemon_id?: string;\n  frequency: string;\n  label?: string;\n  time_of_day?: string;\n  [key: string]: unknown;\n}\n\nexport interface AthenaStorageBackupNamespace {\n  /** `POST /admin/backups` — queue a backup job */\n  create: (\n    input: StorageBackupCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  /** `DELETE /admin/backups/{key}` */\n  delete: (key: string, options?: AthenaStorageCallOptions) => Promise<void>;\n  /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n  downloadUrl: (key: string, options?: { apiKey?: string }) => string;\n  jobs: {\n    list: (\n      query?: { limit?: number; status?: string; client_name?: string },\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob[]>;\n    get: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob>;\n    cancel: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n    /** Presigned/console open link for the job archive object (S3 or R2) */\n    openObjectUrl: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<string>;\n  };\n  /** `GET /admin/backups` */\n  list: (\n    query?: StorageBackupListQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupListPage>;\n  /** `POST /admin/backups/{key}/restore` */\n  restore: (\n    key: string,\n    input: StorageBackupRestoreRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  schedules: {\n    list: (\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule[]>;\n    create: (\n      input: StorageBackupScheduleCreateRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    update: (\n      id: number | string,\n      input: Partial<StorageBackupScheduleCreateRequest>,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    delete: (\n      id: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n  };\n}\n\n/**\n * Shared JSON caller injected by `createStorageModule` — typically\n * `callStorageEndpoint` with envelope `\"raw\"`. Avoids a parallel fetch stack\n * and circular imports with `module.ts`.\n */\nexport type StorageBackupJsonCaller = <T>(\n  path: string,\n  method: AthenaGatewayMethod,\n  payload: unknown | undefined,\n  options: AthenaStorageCallOptions | undefined\n) => Promise<T>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  return appendHttpQuery(path, query, { skipEmptyString: true });\n}\n\n/** Soft-unwrap Athena `{ data }` envelopes while accepting raw admin payloads. */\nfunction unwrapAthenaData<T>(payload: unknown): T {\n  if (isRecord(payload) && \"data\" in payload) {\n    return payload.data as T;\n  }\n  return payload as T;\n}\n\nfunction requireKey(key: string, method: AthenaGatewayMethod): string {\n  const trimmed = key.trim();\n  if (!trimmed || trimmed === \"undefined\" || trimmed === \"null\") {\n    throw createAthenaStorageError({\n      code: \"HTTP_ERROR\",\n      endpoint: \"/admin/backups/{key}\",\n      message: \"Backup object key is required\",\n      method,\n      status: 400,\n    });\n  }\n  return trimmed;\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n *\n * @param callJson - Shared storage JSON transport (from `callStorageEndpoint`).\n */\nexport function createStorageBackupModule(\n  gateway: AthenaGatewayClient,\n  _runtimeOptions: AthenaStorageClientConfig | undefined,\n  callJson: StorageBackupJsonCaller\n): AthenaStorageBackupNamespace {\n  const resolvedBaseUrl = () =>\n    String(gateway.baseUrl ?? \"\").replace(/\\/+$/, \"\");\n\n  /** Product-level unwrap only — HTTP/error path is the injected shared caller. */\n  async function callAdminJson<T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload: unknown | undefined,\n    options: AthenaStorageCallOptions | undefined\n  ): Promise<T> {\n    const parsed = await callJson<unknown>(path, method, payload, options);\n    return unwrapAthenaData<T>(parsed);\n  }\n\n  return {\n    async create(input, options) {\n      const data = await callAdminJson<{\n        job_id?: number;\n        client_name?: string;\n        status?: string;\n      }>(\"/admin/backups\", \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    async delete(key, options) {\n      const backupKey = requireKey(key, \"DELETE\");\n      await callAdminJson(\n        `/admin/backups/${encodeURIComponent(backupKey)}`,\n        \"DELETE\",\n        undefined,\n        options\n      );\n    },\n\n    downloadUrl(key, options) {\n      const backupKey = requireKey(key, \"GET\");\n      const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`;\n      return options?.apiKey\n        ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n        : base;\n    },\n\n    jobs: {\n      async cancel(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n          \"POST\",\n          {},\n          options\n        );\n      },\n      async delete(jobId, options) {\n        await callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async get(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"GET\",\n          undefined,\n          options\n        );\n      },\n      async list(query, options) {\n        const path = appendQuery(\"/admin/backups/jobs\", query ?? {});\n        const data = await callAdminJson<\n          StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n        >(path, \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.jobs)) {\n          return data.jobs;\n        }\n        return [];\n      },\n      async openObjectUrl(jobId, options) {\n        const data = await callAdminJson<{ url?: string }>(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n          \"GET\",\n          undefined,\n          options\n        );\n        return String(data?.url ?? \"\");\n      },\n    },\n    async list(query, options) {\n      const path = appendQuery(\"/admin/backups\", {\n        client_name: query?.client_name,\n        cursor: query?.cursor ?? undefined,\n        limit: query?.limit ?? 10,\n      });\n      const data = await callAdminJson<{\n        backups?: Array<Omit<StorageBackupRecord, \"key\"> & { key?: string }>;\n        next_cursor?: string | null;\n      }>(path, \"GET\", undefined, options);\n\n      const backups = (data?.backups ?? []).map((row) => ({\n        ...row,\n        key: row.key ?? row.s3_key,\n      }));\n      return {\n        backups,\n        next_cursor: data?.next_cursor ?? null,\n      };\n    },\n\n    async restore(key, input, options) {\n      const backupKey = requireKey(key, \"POST\");\n      const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`;\n      const data = await callAdminJson<{\n        job_id?: number;\n        key?: string;\n        client_name?: string;\n        status?: string;\n      }>(path, \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        key: String(data?.key ?? backupKey),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    schedules: {\n      async create(input, options) {\n        return callAdminJson(\n          \"/admin/backups/schedules\",\n          \"POST\",\n          input,\n          options\n        );\n      },\n      async delete(id, options) {\n        await callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async list(options) {\n        const data = await callAdminJson<\n          StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n        >(\"/admin/backups/schedules\", \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.schedules)) {\n          return data.schedules;\n        }\n        return [];\n      },\n      async update(id, input, options) {\n        return callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"PATCH\",\n          input,\n          options\n        );\n      },\n    },\n  };\n}\n","/**\n * Shared XHR PUT helper for browser uploads (presigned + direct SigV4).\n * Keeps progress/abort/status handling consistent across file and direct-upload.\n */\n\nexport type AthenaStorageXhrPutBody =\n  | Blob\n  | ArrayBuffer\n  | ArrayBufferView\n  | ReadableStream<Uint8Array>\n  | null\n  | undefined;\n\nexport interface AthenaStorageXhrPutOptions {\n  body: AthenaStorageXhrPutBody;\n  /** Final progress loaded value on success (defaults to 0 when unknown). */\n  completeLoaded?: number;\n  headers: Headers | Record<string, string>;\n  onProgress: (progress: { loaded: number }) => void;\n  /** Error message prefix for status/network failures. */\n  operationLabel?: string;\n  signal?: AbortSignal;\n  url: string;\n}\n\ninterface AthenaStorageXhrLike {\n  abort: () => void;\n  getAllResponseHeaders: () => string;\n  onabort: (() => void) | null;\n  onerror: (() => void) | null;\n  onload: (() => void) | null;\n  open: (method: string, url: string) => void;\n  readonly response: unknown;\n  send: (body: unknown) => void;\n  setRequestHeader: (key: string, value: string) => void;\n  readonly status: number;\n  readonly statusText: string;\n  readonly upload: {\n    onprogress: ((event: { loaded: number }) => void) | null;\n  };\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhrLike) | undefined;\n\n/**\n * True when the runtime exposes XMLHttpRequest (browsers).\n */\nexport function canUseStorageXhrPut(): boolean {\n  return typeof XMLHttpRequest !== \"undefined\";\n}\n\n/**\n * PUT `body` to `url` with XHR so `upload.onprogress` works.\n * Rejects with AbortError on abort; network/status errors include `operationLabel`.\n */\nexport function putStorageBodyWithXhr(\n  options: AthenaStorageXhrPutOptions\n): Promise<Response> {\n  const label = options.operationLabel ?? \"athena.storage.file.upload\";\n  const Xhr = XMLHttpRequest;\n  if (Xhr === undefined) {\n    return Promise.reject(\n      new Error(`${label} requires XMLHttpRequest in this runtime`)\n    );\n  }\n\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr();\n    const abort = () => xhr.abort();\n    xhr.open(\"PUT\", options.url);\n    if (options.headers instanceof Headers) {\n      options.headers.forEach((value, key) => {\n        xhr.setRequestHeader(key, value);\n      });\n    } else {\n      for (const [key, value] of Object.entries(options.headers)) {\n        xhr.setRequestHeader(key, value);\n      }\n    }\n    xhr.upload.onprogress = (event) => {\n      options.onProgress({ loaded: event.loaded });\n    };\n    xhr.onload = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`${label} failed with status ${xhr.status}`));\n        return;\n      }\n      options.onProgress({\n        loaded: options.completeLoaded ?? 0,\n      });\n      resolve(\n        new Response(\n          xhr.response as ConstructorParameters<typeof Response>[0],\n          {\n            headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n            status: xhr.status,\n            statusText: xhr.statusText,\n          }\n        )\n      );\n    };\n    xhr.onerror = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new Error(`${label} failed with a network error`));\n    };\n    xhr.onabort = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new DOMException(\"Upload aborted\", \"AbortError\"));\n    };\n    if (options.signal) {\n      if (options.signal.aborted) {\n        abort();\n        return;\n      }\n      options.signal.addEventListener(\"abort\", abort, { once: true });\n    }\n    xhr.send(options.body);\n  });\n}\n\n/**\n * Parse `XMLHttpRequest#getAllResponseHeaders()` into a Headers object.\n */\nexport function parseXhrHeaders(rawHeaders: string): Headers {\n  const headers = new Headers();\n  for (const line of rawHeaders.trim().split(/[\\r\\n]+/)) {\n    const index = line.indexOf(\":\");\n    if (index === -1) {\n      continue;\n    }\n    headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim());\n  }\n  return headers;\n}\n","import type {\n  AthenaStorageDirectUploadConfig,\n  AthenaStoragePutBody,\n} from \"./module.ts\";\nimport { canUseStorageXhrPut, putStorageBodyWithXhr } from \"./xhr-put.ts\";\n\ninterface DirectUploadProgress {\n  loaded: number;\n}\n\nconst SERVICE = \"s3\";\nconst TERMINATOR = \"aws4_request\";\n\nexport async function putDirectStorageUploadBody(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n  body: AthenaStoragePutBody,\n  uploadHeaders: Record<string, string>,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void\n): Promise<Response> {\n  if (config.bucket && bucket && config.bucket !== bucket) {\n    throw new Error(\n      `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`\n    );\n  }\n  const target = createDirectUploadTarget(config, bucket, storageKey);\n  const bytes = await bodyToArrayBuffer(body);\n  const payloadHash = await sha256Hex(bytes);\n  const headers = new Headers(uploadHeaders);\n  if (isBlobBody(body) && body.type && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const signed = await signDirectUploadRequest(\n    config,\n    target,\n    headers,\n    payloadHash\n  );\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body,\n      completeLoaded: bodySize(body),\n      headers: signed.requestHeaders,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal,\n      url: target.toString(),\n    });\n  }\n\n  onProgress({ loaded: 0 });\n  const response = await fetch(target, {\n    body: body as RequestInit[\"body\"],\n    headers: signed.requestHeaders,\n    method: \"PUT\",\n    signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: bytes.byteLength });\n  return response;\n}\n\nfunction createDirectUploadTarget(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string\n): URL {\n  const resolvedBucket = config.bucket ?? bucket;\n  if (!resolvedBucket?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response\"\n    );\n  }\n  if (!storageKey.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a storage key\"\n    );\n  }\n\n  let endpoint: URL;\n  try {\n    endpoint = new URL(config.endpoint);\n  } catch (error) {\n    throw new Error(\n      `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n      { cause: error }\n    );\n  }\n  if (endpoint.search || endpoint.hash) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode endpoint must not contain a query or hash\"\n    );\n  }\n\n  const endpointPath = endpoint.pathname.replace(/\\/+$/, \"\");\n  const pathParts =\n    config.forcePathStyle === false\n      ? [endpointPath, storageKey]\n      : [endpointPath, resolvedBucket, storageKey];\n  if (config.forcePathStyle === false) {\n    endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`;\n  }\n  endpoint.pathname = pathParts\n    .filter(Boolean)\n    .flatMap((part) => part.split(\"/\"))\n    .map(awsEncode)\n    .join(\"/\")\n    .replace(/^([^/])/, \"/$1\");\n  return endpoint;\n}\n\nasync function signDirectUploadRequest(\n  config: AthenaStorageDirectUploadConfig,\n  target: URL,\n  inputHeaders: Headers,\n  payloadHash: string\n): Promise<{ requestHeaders: Record<string, string> }> {\n  const accessKeyId = config.accessKeyId.trim();\n  const secretAccessKey = config.secretAccessKey.trim();\n  if (!(accessKeyId && secretAccessKey)) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey\"\n    );\n  }\n\n  const now = new Date();\n  const amzDate = formatAmzDate(now);\n  const shortDate = amzDate.slice(0, 8);\n  const region = config.region?.trim() || \"auto\";\n  const headers: Record<string, string> = {};\n  inputHeaders.forEach((value, key) => {\n    if (key.toLowerCase() !== \"authorization\" && key.toLowerCase() !== \"host\") {\n      headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, \" \");\n    }\n  });\n  headers[\"x-amz-content-sha256\"] = payloadHash;\n  headers[\"x-amz-date\"] = amzDate;\n  if (config.sessionToken?.trim()) {\n    headers[\"x-amz-security-token\"] = config.sessionToken.trim();\n  }\n\n  const canonicalHeaders = Object.keys(headers)\n    .sort()\n    .map((key) => `${key}:${headers[key]}\\n`)\n    .join(\"\");\n  const signedHeaders = Object.keys(headers).sort().join(\";\");\n  const canonicalRequest = [\n    \"PUT\",\n    target.pathname,\n    \"\",\n    `host:${target.host}\\n${canonicalHeaders}`,\n    `host;${signedHeaders}`,\n    payloadHash,\n  ].join(\"\\n\");\n  const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`;\n  const stringToSign = [\n    \"AWS4-HMAC-SHA256\",\n    amzDate,\n    credentialScope,\n    await sha256Hex(canonicalRequest),\n  ].join(\"\\n\");\n  const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate);\n  const regionKey = await hmac(dateKey, region);\n  const serviceKey = await hmac(regionKey, SERVICE);\n  const signingKey = await hmac(serviceKey, TERMINATOR);\n  const signature = await hmacHex(signingKey, stringToSign);\n  headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`;\n\n  return { requestHeaders: headers };\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nasync function bodyToArrayBuffer(\n  body: AthenaStoragePutBody\n): Promise<ArrayBuffer> {\n  if (isBlobBody(body)) {\n    return body.arrayBuffer();\n  }\n  if (body instanceof ArrayBuffer) {\n    return body;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.buffer.slice(\n      body.byteOffset,\n      body.byteOffset + body.byteLength\n    ) as ArrayBuffer;\n  }\n  throw new Error(\n    \"athena.storage.file.upload direct mode does not support ReadableStream bodies\"\n  );\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n  if (isBlobBody(body)) {\n    return body.size;\n  }\n  if (body instanceof ArrayBuffer) {\n    return body.byteLength;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.byteLength;\n  }\n  return 0;\n}\n\nfunction awsEncode(value: string): string {\n  return encodeURIComponent(value).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n  );\n}\n\nfunction formatAmzDate(date: Date): string {\n  return date.toISOString().replace(/[:-]|\\.\\d{3}/g, \"\");\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n  const bytes =\n    typeof value === \"string\" ? new TextEncoder().encode(value) : value;\n  const digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n  return toHex(new Uint8Array(digest));\n}\n\nasync function hmac(\n  key: string | ArrayBuffer,\n  value: string\n): Promise<ArrayBuffer> {\n  const keyBytes =\n    typeof key === \"string\" ? new TextEncoder().encode(key) : key;\n  const cryptoKey = await crypto.subtle.importKey(\n    \"raw\",\n    keyBytes,\n    { hash: \"SHA-256\", name: \"HMAC\" },\n    false,\n    [\"sign\"]\n  );\n  return crypto.subtle.sign(\"HMAC\", cryptoKey, new TextEncoder().encode(value));\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n  return toHex(new Uint8Array(await hmac(key, value)));\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n    \"\"\n  );\n}\n","import { putDirectStorageUploadBody } from \"./direct-upload.ts\";\nimport type {\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageDirectUploadConfig,\n  CreateStorageUploadUrlRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  StorageBatchUploadUrlResponse,\n  StorageFileMutationResponse,\n  StorageListFilesResponse,\n  StorageMultipartAbortRequest,\n  StorageMultipartCompleteRequest,\n  StorageMultipartCreateRequest,\n  StorageMultipartSignPartRequest,\n  StorageServerSideEncryptionOptions,\n  StorageUploadUrlResponse,\n} from \"./module.ts\";\nimport {\n  type AthenaStorageXhrPutBody,\n  canUseStorageXhrPut,\n  putStorageBodyWithXhr,\n} from \"./xhr-put.ts\";\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024;\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024;\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024;\n\nexport type AthenaStorageTemplateValue =\n  | string\n  | number\n  | boolean\n  | null\n  | undefined;\nexport type AthenaStorageTemplateVars = Record<\n  string,\n  AthenaStorageTemplateValue\n>;\nexport type AthenaStorageEnv = Record<string, string | undefined>;\nexport type AthenaStorageUploadHeaders = ConstructorParameters<\n  typeof Headers\n>[0];\nexport type AthenaStoragePrefixPath =\n  | string\n  | ((context: AthenaStoragePathContext) => string | null | undefined);\n\nexport interface AthenaStoragePathContext {\n  env: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileConfig {\n  directUpload?: AthenaStorageDirectUploadConfig;\n  env?: AthenaStorageEnv;\n  /**\n   * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n   * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n   * and `${ATHENA_STORAGE_PREFIX}`.\n   */\n  prefixPath?: AthenaStoragePrefixPath;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array;\n\nexport interface AthenaStorageUploadConstraints {\n  allowedExtensions?: readonly string[];\n  extensions?: readonly string[];\n  maxFileSizeBytes?: number;\n  maxFileSizeMb?: number;\n  maxFiles?: number;\n}\n\nexport interface AthenaStorageUploadProgress {\n  aggregateLoaded: number;\n  aggregatePercent: number;\n  aggregateTotal: number;\n  fileCount: number;\n  fileIndex: number;\n  fileName: string;\n  loaded: number;\n  /** Present when the active file is uploading via multipart. */\n  multipart?: {\n    uploadId: string;\n    partNumber: number;\n    partCount: number;\n  };\n  percent: number;\n  phase: \"preparing\" | \"uploading\" | \"complete\";\n  total: number;\n}\n\nexport type AthenaStorageUploadProgressHandler = (\n  progress: AthenaStorageUploadProgress\n) => void;\n\nexport interface AthenaStorageFileUploadInput\n  extends AthenaStorageUploadConstraints,\n    StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  env?: AthenaStorageEnv;\n  fileName?: string;\n  files:\n    | AthenaStorageUploadSource\n    | ArrayLike<AthenaStorageUploadSource>\n    | readonly AthenaStorageUploadSource[];\n  /** Always use multipart even when the file is below the threshold. */\n  forceMultipart?: boolean;\n  /** Always use a single PUT even when the file exceeds the multipart threshold. */\n  forceSinglePut?: boolean;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n  multipartPartSizeBytes?: number;\n  /** Override auto-multipart threshold (default 32 MiB). */\n  multipartThresholdBytes?: number;\n  name?: string;\n  onProgress?: AthenaStorageUploadProgressHandler;\n  organization_id?: string;\n  organizationId?: string;\n  original_name?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id?: string;\n  storage_key?: string;\n  storageKey?: string;\n  storageKeyTemplate?: string;\n  uploadHeaders?: AthenaStorageUploadHeaders;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageUploadedFile {\n  file: ManagedFileRecord;\n  fileName: string;\n  response: Response;\n  source: AthenaStorageUploadSource;\n  storage_key: string;\n  upload: StorageUploadUrlResponse[\"upload\"];\n}\n\nexport interface AthenaStorageFileUploadResult {\n  count: number;\n  files: AthenaStorageUploadedFile[];\n}\n\nexport interface AthenaStorageFileListInput\n  extends Omit<ListStorageFilesRequest, \"prefix\"> {\n  env?: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  prefix?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n  fileId?: string;\n  fileIds?: readonly string[];\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[];\n\nexport interface AthenaStorageFileModule {\n  delete(\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse>;\n  delete(\n    fileIds: readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse[]>;\n  download(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response>;\n  download(\n    fileIds: readonly string[],\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response[]>;\n  download(\n    input: AthenaStorageFileDownloadInput,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]>;\n  list: (\n    input: AthenaStorageFileListInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  upload: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n  uploadMultipart: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n}\n\nexport interface AthenaStorageFileBaseModule {\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: { files: CreateStorageUploadUrlRequest[] },\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n}\n\nexport interface AthenaStorageMultipartClient {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\ninterface NormalizedUploadSource {\n  contentType?: string;\n  fileName: string;\n  sizeBytes: number;\n  source: AthenaStorageUploadSource;\n}\n\ninterface ResolvedUploadRequest {\n  source: NormalizedUploadSource;\n  uploadRequest: CreateStorageUploadUrlRequest;\n}\n\nfunction mergeUploadHeaders(\n  serverHeaders: Record<string, string>,\n  inputHeaders: AthenaStorageUploadHeaders | undefined\n): Record<string, string> {\n  const headers: Record<string, string> = { ...serverHeaders };\n  new Headers(inputHeaders).forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n}\n\nexport function createStorageFileModule(\n  base: AthenaStorageFileBaseModule,\n  config: AthenaStorageFileConfig = {},\n  multipart?: AthenaStorageMultipartClient\n): AthenaStorageFileModule {\n  const uploadSinglePut = async (\n    input: AthenaStorageFileUploadInput,\n    sources: NormalizedUploadSource[],\n    options?: AthenaStorageCallOptions\n  ): Promise<AthenaStorageFileUploadResult> => {\n    const uploadRequests = sources.map(\n      (source, index): ResolvedUploadRequest => {\n        const storageKey = resolveUploadStorageKey(\n          input,\n          source,\n          index,\n          options,\n          config\n        );\n        return {\n          source,\n          uploadRequest: {\n            bucket: input.bucket,\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            kms_key_id: input.kms_key_id,\n            metadata: input.metadata,\n            mime_type: input.mime_type ?? source.contentType,\n            name: input.name ?? source.fileName,\n            original_name: input.original_name ?? source.fileName,\n            public: input.public,\n            resource_id: input.resource_id ?? input.resourceId,\n            s3_id: input.s3_id ?? \"\",\n            server_side_encryption: input.server_side_encryption,\n            size_bytes: source.sizeBytes,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n            storage_key: storageKey,\n          },\n        };\n      }\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const uploadUrls =\n      uploadRequests.length === 1\n        ? [\n            await base.createStorageUploadUrl(\n              uploadRequests[0].uploadRequest,\n              options\n            ),\n          ]\n        : (\n            await base.createStorageUploadUrls(\n              { files: uploadRequests.map((request) => request.uploadRequest) },\n              options\n            )\n          ).files;\n\n    const aggregateLoaded = new Array(uploadRequests.length).fill(\n      0\n    ) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < uploadRequests.length; index += 1) {\n      const request = uploadRequests[index];\n      const uploadUrl = uploadUrls[index];\n      const aggregateProgress = (progress: { loaded: number }) => {\n        aggregateLoaded[index] = progress.loaded;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"uploading\",\n            sources,\n            index,\n            progress.loaded,\n            sum(aggregateLoaded)\n          )\n        );\n      };\n      const response = config.directUpload\n        ? await putDirectStorageUploadBody(\n            config.directUpload,\n            uploadUrl.upload.bucket,\n            uploadUrl.upload.storage_key,\n            request.source.source,\n            mergeUploadHeaders(\n              uploadUrl.upload.headers ?? {},\n              input.uploadHeaders\n            ),\n            options?.signal,\n            aggregateProgress\n          )\n        : await putUploadBody(\n            uploadUrl.upload.url,\n            uploadUrl.upload.headers ?? {},\n            request.source,\n            input,\n            options,\n            aggregateProgress\n          );\n      uploaded.push({\n        file: uploadUrl.file,\n        fileName: request.source.fileName,\n        response,\n        source: request.source.source,\n        storage_key: request.uploadRequest.storage_key,\n        upload: uploadUrl.upload,\n      });\n      aggregateLoaded[index] = request.source.sizeBytes;\n      input.onProgress?.(\n        createProgressSnapshot(\n          \"complete\",\n          sources,\n          index,\n          request.source.sizeBytes,\n          sum(aggregateLoaded)\n        )\n      );\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const uploadMultipart: AthenaStorageFileModule[\"uploadMultipart\"] = async (\n    input,\n    options\n  ) => {\n    if (!multipart) {\n      throw new Error(\n        \"athena.storage.file.uploadMultipart requires the multipart namespace\"\n      );\n    }\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n    const partSize = Math.max(\n      input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n      MIN_MULTIPART_PART_SIZE_BYTES\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const aggregateLoaded = new Array(sources.length).fill(0) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < sources.length; index += 1) {\n      const source = sources[index];\n      const storageKey = resolveUploadStorageKey(\n        input,\n        source,\n        index,\n        options,\n        config\n      );\n      const uploadUrl = await base.createStorageUploadUrl(\n        {\n          bucket: input.bucket,\n          bucket_key_enabled: input.bucket_key_enabled,\n          content_type: input.content_type ?? source.contentType,\n          kms_key_id: input.kms_key_id,\n          metadata: input.metadata,\n          mime_type: input.mime_type ?? source.contentType,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          public: input.public,\n          resource_id: input.resource_id ?? input.resourceId,\n          s3_id: input.s3_id ?? \"\",\n          server_side_encryption: input.server_side_encryption,\n          size_bytes: source.sizeBytes,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          storage_key: storageKey,\n        },\n        options\n      );\n\n      const fileId = uploadUrl.file.id;\n      let uploadId = \"\";\n      try {\n        const created = await multipart.create(\n          {\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            file_id: fileId,\n            kms_key_id: input.kms_key_id,\n            server_side_encryption: input.server_side_encryption,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n          },\n          options\n        );\n        uploadId = readStringField(created, [\"upload_id\", \"uploadId\"]);\n        if (!uploadId) {\n          throw new Error(\n            \"athena.storage.file.uploadMultipart did not receive an upload_id\"\n          );\n        }\n\n        const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize));\n        const completedParts: Array<{ part_number: number; etag: string }> = [];\n        let fileLoaded = 0;\n\n        for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n          const start = (partNumber - 1) * partSize;\n          const end = Math.min(start + partSize, source.sizeBytes);\n          const chunk = sliceUploadSource(source.source, start, end);\n          const signed = await multipart.signPart(\n            {\n              file_id: fileId,\n              part_number: partNumber,\n              upload_id: uploadId,\n            },\n            options\n          );\n          const partUrl = readStringField(signed, [\"url\"]);\n          if (!partUrl) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`\n            );\n          }\n          const partHeaders = readHeadersField(signed);\n          const response = await putUploadBody(\n            partUrl,\n            partHeaders,\n            {\n              contentType: source.contentType,\n              fileName: source.fileName,\n              sizeBytes: end - start,\n              source: chunk,\n            },\n            input,\n            options,\n            (progress) => {\n              const loaded = fileLoaded + progress.loaded;\n              aggregateLoaded[index] = loaded;\n              input.onProgress?.(\n                createProgressSnapshot(\n                  \"uploading\",\n                  sources,\n                  index,\n                  loaded,\n                  sum(aggregateLoaded),\n                  {\n                    partCount,\n                    partNumber,\n                    uploadId,\n                  }\n                )\n              );\n            }\n          );\n          const etag = extractEtag(response);\n          if (!etag) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`\n            );\n          }\n          completedParts.push({ etag, part_number: partNumber });\n          fileLoaded = end;\n          aggregateLoaded[index] = fileLoaded;\n          input.onProgress?.(\n            createProgressSnapshot(\n              \"uploading\",\n              sources,\n              index,\n              fileLoaded,\n              sum(aggregateLoaded),\n              {\n                partCount,\n                partNumber,\n                uploadId,\n              }\n            )\n          );\n        }\n\n        const completed = await multipart.complete(\n          {\n            file_id: fileId,\n            parts: completedParts,\n            upload_id: uploadId,\n          },\n          options\n        );\n\n        uploaded.push({\n          file: completed.file ?? uploadUrl.file,\n          fileName: source.fileName,\n          response: new Response(null, { status: 200 }),\n          source: source.source,\n          storage_key: storageKey,\n          upload: uploadUrl.upload,\n        });\n        aggregateLoaded[index] = source.sizeBytes;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"complete\",\n            sources,\n            index,\n            source.sizeBytes,\n            sum(aggregateLoaded),\n            {\n              partCount,\n              partNumber: partCount,\n              uploadId,\n            }\n          )\n        );\n      } catch (error) {\n        if (uploadId) {\n          try {\n            await multipart.abort(\n              { file_id: fileId, upload_id: uploadId },\n              options\n            );\n          } catch {\n            // Best-effort abort; surface the original upload error.\n          }\n        }\n        throw error;\n      }\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const upload: AthenaStorageFileModule[\"upload\"] = async (input, options) => {\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n\n    const threshold =\n      input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES;\n    const useMultipart =\n      Boolean(multipart) &&\n      !input.forceSinglePut &&\n      !config.directUpload &&\n      (input.forceMultipart ||\n        sources.some((source) => source.sizeBytes >= threshold));\n\n    if (useMultipart) {\n      const multipartSources = sources.filter(\n        (source) => input.forceMultipart || source.sizeBytes >= threshold\n      );\n      const singleSources = sources.filter(\n        (source) => !(input.forceMultipart || source.sizeBytes >= threshold)\n      );\n\n      if (multipartSources.length === sources.length) {\n        return uploadMultipart(input, options);\n      }\n\n      // Mixed batch: upload large files via multipart, small via single PUT.\n      const multipartResult =\n        multipartSources.length > 0\n          ? await uploadMultipart(\n              {\n                ...input,\n                files: multipartSources.map((source) => source.source),\n                maxFiles: multipartSources.length,\n              },\n              options\n            )\n          : { count: 0, files: [] };\n      const singleResult =\n        singleSources.length > 0\n          ? await uploadSinglePut(\n              {\n                ...input,\n                files: singleSources.map((source) => source.source),\n                maxFiles: singleSources.length,\n              },\n              singleSources,\n              options\n            )\n          : { count: 0, files: [] };\n      const files = [...multipartResult.files, ...singleResult.files];\n      return { count: files.length, files };\n    }\n\n    return uploadSinglePut(input, sources, options);\n  };\n\n  const download = ((\n    input: string | readonly string[] | AthenaStorageFileDownloadInput,\n    queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n    maybeOptions?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]> => {\n    const { fileIds, query, options } = normalizeDownloadArgs(\n      input,\n      queryOrOptions,\n      maybeOptions\n    );\n    const downloads = fileIds.map((fileId) =>\n      base.getStorageFileProxy(fileId, query, options)\n    );\n    return Array.isArray(input) ||\n      (isRecord(input) && Array.isArray(input.fileIds))\n      ? Promise.all(downloads)\n      : downloads[0];\n  }) as AthenaStorageFileModule[\"download\"];\n\n  const deleteFile = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n    if (Array.isArray(input)) {\n      return Promise.all(\n        input.map((fileId) => base.deleteStorageFile(fileId, options))\n      );\n    }\n    return base.deleteStorageFile(input as string, options);\n  }) as AthenaStorageFileModule[\"delete\"];\n\n  return {\n    delete: deleteFile,\n    download,\n\n    list(input, options) {\n      const prefix = resolveStoragePath(\n        input.prefix ?? \"\",\n        input,\n        options,\n        config\n      );\n      // Strip path-templating helpers; forward every ListStorageFilesRequest field.\n      const {\n        env: _env,\n        organization_id: _organization_id,\n        organizationId: _organizationId,\n        prefix: _prefix,\n        prefixPath: _prefixPath,\n        resourceId: _resourceId,\n        user_id: _user_id,\n        userId: _userId,\n        vars: _vars,\n        ...listRequest\n      } = input;\n      return base.listStorageFiles(\n        {\n          ...listRequest,\n          prefix,\n          s3_id: input.s3_id ?? \"\",\n        },\n        options\n      );\n    },\n    upload,\n    uploadMultipart,\n  };\n}\n\nexport function resolveStoragePath(\n  path: string,\n  input: {\n    prefixPath?: AthenaStoragePrefixPath;\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig = {}\n): string {\n  const context = createPathContext(input, options, config);\n  const prefixPath = input.prefixPath ?? config.prefixPath;\n  const prefix =\n    typeof prefixPath === \"function\" ? prefixPath(context) : prefixPath;\n  return joinStoragePath(\n    renderStorageTemplate(prefix ?? \"\", context),\n    renderStorageTemplate(path, context)\n  );\n}\n\nfunction resolveUploadStorageKey(\n  input: AthenaStorageFileUploadInput,\n  source: NormalizedUploadSource,\n  index: number,\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): string {\n  const explicitKey = input.storage_key ?? input.storageKey;\n  const keyTemplate = input.storageKeyTemplate;\n  const fallbackName = source.fileName;\n  const context = createPathContext(input, options, config);\n  const key = keyTemplate\n    ? renderStorageTemplate(keyTemplate, {\n        ...context,\n        vars: {\n          ...context.vars,\n          fileName: source.fileName,\n          index,\n          name: source.fileName,\n        },\n      })\n    : (explicitKey ?? fallbackName);\n  return resolveStoragePath(key, input, options, config);\n}\n\nfunction normalizeUploadSources(\n  input: AthenaStorageFileUploadInput\n): NormalizedUploadSource[] {\n  const files = toArray(input.files);\n  if (files.length === 0) {\n    throw new Error(\"athena.storage.file.upload requires at least one file\");\n  }\n  return files.map((source, index) => {\n    const fileName =\n      input.fileName ?? sourceName(source) ?? `file-${index + 1}`;\n    const sizeBytes = sourceSize(source);\n    const contentType =\n      input.content_type ?? input.mime_type ?? sourceContentType(source);\n    return {\n      contentType,\n      fileName,\n      sizeBytes,\n      source,\n    };\n  });\n}\n\nfunction validateUploadConstraints(\n  sources: readonly NormalizedUploadSource[],\n  input: AthenaStorageFileUploadInput\n): void {\n  const maxFiles = input.maxFiles ?? 1;\n  if (sources.length > maxFiles) {\n    throw new Error(\n      `athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? \"\" : \"s\"} for this call`\n    );\n  }\n\n  const maxFileSizeBytes =\n    input.maxFileSizeBytes ??\n    (input.maxFileSizeMb === undefined\n      ? undefined\n      : Math.floor(input.maxFileSizeMb * 1024 * 1024));\n  if (maxFileSizeBytes !== undefined) {\n    const tooLarge = sources.find(\n      (source) => source.sizeBytes > maxFileSizeBytes\n    );\n    if (tooLarge) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`\n      );\n    }\n  }\n\n  const allowedExtensions = normalizeExtensions(\n    input.allowedExtensions ?? input.extensions\n  );\n  if (allowedExtensions.size > 0) {\n    const invalid = sources.find(\n      (source) => !allowedExtensions.has(fileExtension(source.fileName))\n    );\n    if (invalid) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`\n      );\n    }\n  }\n}\n\nasync function putUploadBody(\n  url: string,\n  uploadHeaders: Record<string, string>,\n  source: NormalizedUploadSource,\n  input: AthenaStorageFileUploadInput,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  new Headers(input.uploadHeaders).forEach((value, key) => {\n    headers.set(key, value);\n  });\n  if (source.contentType && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", source.contentType);\n  }\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body: source.source as AthenaStorageXhrPutBody,\n      completeLoaded: source.sizeBytes,\n      headers,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal: options?.signal,\n      url,\n    });\n  }\n  onProgress({ loaded: 0 });\n  const response = await fetch(url, {\n    body: source.source as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: source.sizeBytes });\n  return response;\n}\n\nfunction normalizeDownloadArgs(\n  input: string | readonly string[] | AthenaStorageFileDownloadInput,\n  queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n  maybeOptions?: AthenaStorageBinaryCallOptions\n): {\n  fileIds: string[];\n  query?: GetStorageFileUrlQuery;\n  options?: AthenaStorageBinaryCallOptions;\n} {\n  if (typeof input === \"string\") {\n    return {\n      fileIds: [input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  if (Array.isArray(input)) {\n    return {\n      fileIds: [...input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  const downloadInput = input as AthenaStorageFileDownloadInput;\n  const { fileId, fileIds, ...query } = downloadInput;\n  return {\n    fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n    options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n    query,\n  };\n}\n\nfunction createPathContext(\n  input: {\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): AthenaStoragePathContext {\n  const organizationId =\n    input.organizationId ??\n    input.organization_id ??\n    options?.organizationId ??\n    undefined;\n  const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined;\n  const resourceId = input.resourceId ?? input.resource_id ?? undefined;\n  const vars = {\n    ...(config.vars ?? {}),\n    ...(input.vars ?? {}),\n  };\n  if (organizationId !== undefined) {\n    vars.organizationId = organizationId;\n    vars.organization_id = organizationId;\n  }\n  if (userId !== undefined) {\n    vars.userId = userId;\n    vars.user_id = userId;\n  }\n  if (resourceId !== undefined) {\n    vars.resourceId = resourceId;\n    vars.resource_id = resourceId;\n  }\n  return {\n    env: {\n      ...readProcessEnv(),\n      ...(config.env ?? {}),\n      ...(input.env ?? {}),\n    },\n    organization_id: organizationId,\n    organizationId,\n    resource_id: resourceId,\n    resourceId,\n    user_id: userId,\n    userId,\n    vars,\n  };\n}\n\nfunction renderStorageTemplate(\n  template: string,\n  context: AthenaStoragePathContext\n): string {\n  return template.replace(\n    /\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g,\n    (\n      _match,\n      shellToken: string | undefined,\n      braceToken: string | undefined\n    ) => {\n      const token = (shellToken ?? braceToken ?? \"\").trim();\n      if (!token) {\n        return \"\";\n      }\n      const value = resolveTemplateToken(token, context);\n      return value === undefined || value === null ? \"\" : String(value);\n    }\n  );\n}\n\nfunction resolveTemplateToken(\n  token: string,\n  context: AthenaStoragePathContext\n): AthenaStorageTemplateValue {\n  if (token.startsWith(\"env.\")) {\n    return context.env[token.slice(4)];\n  }\n  if (token in context.vars) {\n    return context.vars[token];\n  }\n  return context.env[token];\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n  return parts\n    .map((part) => part.trim().replace(/^\\/+|\\/+$/g, \"\"))\n    .filter(Boolean)\n    .join(\"/\");\n}\n\nfunction toArray(\n  files: AthenaStorageFileUploadInput[\"files\"]\n): AthenaStorageUploadSource[] {\n  if (isUploadSource(files)) {\n    return [files];\n  }\n  return Array.from(files);\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n  return (\n    value instanceof Blob ||\n    value instanceof ArrayBuffer ||\n    value instanceof Uint8Array\n  );\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n  return isRecord(source) &&\n    typeof source.name === \"string\" &&\n    source.name.trim()\n    ? source.name.trim()\n    : undefined;\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n  if (source instanceof Blob) {\n    return source.size;\n  }\n  return source.byteLength;\n}\n\nfunction sourceContentType(\n  source: AthenaStorageUploadSource\n): string | undefined {\n  return source instanceof Blob && source.type.trim()\n    ? source.type.trim()\n    : undefined;\n}\n\nfunction normalizeExtensions(\n  extensions: readonly string[] | undefined\n): Set<string> {\n  return new Set(\n    (extensions ?? [])\n      .map((extension) => extension.replace(/^\\./, \"\").toLowerCase())\n      .filter(Boolean)\n  );\n}\n\nfunction fileExtension(fileName: string): string {\n  const lastDot = fileName.lastIndexOf(\".\");\n  return lastDot === -1 ? \"\" : fileName.slice(lastDot + 1).toLowerCase();\n}\n\nfunction createProgressSnapshot(\n  phase: AthenaStorageUploadProgress[\"phase\"],\n  sources: readonly NormalizedUploadSource[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number,\n  multipartInfo?: AthenaStorageUploadProgress[\"multipart\"]\n): AthenaStorageUploadProgress {\n  const total = sources[fileIndex]?.sizeBytes ?? 0;\n  const aggregateTotal = sources.reduce(\n    (totalBytes, source) => totalBytes + source.sizeBytes,\n    0\n  );\n  return {\n    aggregateLoaded,\n    aggregatePercent:\n      aggregateTotal > 0\n        ? Math.round((aggregateLoaded / aggregateTotal) * 100)\n        : 100,\n    aggregateTotal,\n    fileCount: sources.length,\n    fileIndex,\n    fileName: sources[fileIndex]?.fileName ?? \"\",\n    loaded,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    phase,\n    total,\n    ...(multipartInfo ? { multipart: multipartInfo } : {}),\n  };\n}\n\nfunction sliceUploadSource(\n  source: AthenaStorageUploadSource,\n  start: number,\n  end: number\n): AthenaStorageUploadSource {\n  if (source instanceof Blob) {\n    return source.slice(start, end);\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.slice(start, end);\n  }\n  return source.slice(start, end);\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n  if (!isRecord(value)) {\n    return \"\";\n  }\n  for (const key of keys) {\n    const candidate = value[key];\n    if (typeof candidate === \"string\" && candidate.trim()) {\n      return candidate.trim();\n    }\n  }\n  return \"\";\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n  if (!isRecord(value)) {\n    return {};\n  }\n  const headers = value.headers;\n  if (!isRecord(headers)) {\n    return {};\n  }\n  const result: Record<string, string> = {};\n  for (const [key, headerValue] of Object.entries(headers)) {\n    if (typeof headerValue === \"string\") {\n      result[key] = headerValue;\n    }\n  }\n  return result;\n}\n\nfunction extractEtag(response: Response): string {\n  const etag =\n    response.headers.get(\"etag\") ?? response.headers.get(\"ETag\") ?? \"\";\n  return etag.trim();\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0);\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n  const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } })\n    .process;\n  return processLike?.env ?? {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n","import type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { isAthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\nimport {\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"../gateway/url.ts\";\nimport { appendHttpQuery as appendQuery } from \"../http/append-query.ts\";\nimport { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport type { AthenaStorageBackupNamespace } from \"./backup.ts\";\nimport { createStorageBackupModule } from \"./backup.ts\";\nimport {\n  type AthenaStorageErrorCode,\n  type AthenaStorageErrorHandler,\n  bindStorageErrorRoutes,\n  rejectStorageError,\n} from \"./errors.ts\";\nimport type {\n  AthenaStorageFileConfig,\n  AthenaStorageFileModule,\n} from \"./file.ts\";\nimport { createStorageFileModule } from \"./file.ts\";\nimport storageLiveHttpRoutesDocument from \"./live-http-routes.json\";\n\nexport type {\n  AthenaStorageBackupNamespace,\n  BackupRecoveryStrategy,\n  StorageBackupCreateRequest,\n  StorageBackupJob,\n  StorageBackupListPage,\n  StorageBackupListQuery,\n  StorageBackupQueuedJob,\n  StorageBackupRecord,\n  StorageBackupRestoreRequest,\n  StorageBackupSchedule,\n  StorageBackupScheduleCreateRequest,\n} from \"./backup.ts\";\nexport type {\n  AthenaStorageErrorDetails,\n  AthenaStorageErrorHandler,\n  AthenaStorageErrorInput,\n} from \"./errors.ts\";\nexport {\n  AthenaStorageError,\n  AthenaStorageErrorCode,\n  createAthenaStorageError,\n} from \"./errors.ts\";\n\n/**\n * Live storage METHOD+path inventory (billing-style contract spine).\n * Exact-set parity with `storageSdkManifest` is enforced in\n * `test/storage-route-parity.test.ts`. Keep this JSON and the manifest table\n * in lockstep when adding routes — never shrink product routes to match a thin list.\n */\nexport const storageLiveHttpRoutes = storageLiveHttpRoutesDocument;\n\n/**\n * Storage SDK route table (SSOT for method names, METHOD+path, envelope).\n * Thin JSON routes in `createStorageModule` resolve path/method/envelope via\n * `requireStorageManifestRoute` / `callManifestRoute` so wrappers cannot drift.\n * Binary, multipart upload bodies, dual-visibility verbs, and admin backup\n * helpers keep specialized implementations.\n */\nexport const storageSdkManifest = {\n  basePath: \"/storage\",\n  envelopeKinds: {\n    athena: \"response body is { status, message, data }\",\n    raw: \"response body is the payload\",\n  },\n  methods: [\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageProviders\",\n      path: \"/storage/providers\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ providers: StorageProviderDescriptor[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageConnections\",\n      path: \"/storage/connections\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connections: StorageConnection[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createCanonicalStorageConnection\",\n      path: \"/storage/connections\",\n      requestType: \"CreateStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"POST\",\n      name: \"testCanonicalStorageConnection\",\n      path: \"/storage/connections/test\",\n      requestType: \"TestStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ ok: boolean; config: PublicStorageConnectionConfig }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connectionId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"uploadCanonicalStorageFile\",\n      path: \"/storage/service/files\",\n      requestType: \"UploadManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"listCanonicalStorageFiles\",\n      path: \"/storage/service/files/list\",\n      requestType: \"ListManagedFilesInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ files: ManagedFile[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/move\",\n      pathParams: [\"file_id\"],\n      requestType: \"MoveManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"setCanonicalStorageFileVisibility\",\n      path: \"/storage/service/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetManagedFileVisibilityInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStoragePermissions\",\n      path: \"/storage/service/files/{file_id}/permissions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ permissions: FilePermission[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/grant\",\n      pathParams: [\"file_id\"],\n      requestType: \"GrantFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ permission: FilePermission }\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/revoke\",\n      pathParams: [\"file_id\"],\n      requestType: \"RevokeFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCatalogs\",\n      path: \"/storage/catalogs\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CatalogItem[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageCatalog\",\n      path: \"/storage/catalogs\",\n      requestType: \"CreateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      requestType: \"UpdateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"raw\",\n      responseType: \"{ id: string; deleted: boolean }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCredentials\",\n      path: \"/storage/credentials\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CredentialListItem[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.list\",\n      note: \"Admin backup archives on server S3/R2 profile\",\n      path: \"/admin/backups\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupListPage\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.create\",\n      path: \"/admin/backups\",\n      requestType: \"StorageBackupCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.restore\",\n      path: \"/admin/backups/{key}/restore\",\n      pathParams: [\"key\"],\n      requestType: \"StorageBackupRestoreRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"backup.delete\",\n      path: \"/admin/backups/{key}\",\n      pathParams: [\"key\"],\n      responseEnvelope: \"athena\",\n      responseType: \"void\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.jobs.list\",\n      path: \"/admin/backups/jobs\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupJob[]\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.schedules.list\",\n      path: \"/admin/backups/schedules\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupSchedule[]\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrl\",\n      path: \"/storage/files/upload-url\",\n      requestType: \"CreateStorageUploadUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrls\",\n      path: \"/storage/files/upload-urls\",\n      requestType: \"CreateStorageUploadUrlsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBatchUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFiles\",\n      path: \"/storage/files/list\",\n      requestType: \"ListStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileUrl\",\n      path: \"/storage/files/{file_id}/url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"PresignedFileUrlResponse\",\n    },\n    {\n      binary: true,\n      method: \"GET\",\n      name: \"getStorageFileProxy\",\n      path: \"/storage/files/{file_id}/proxy\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"raw\",\n      responseType: \"Response\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      requestType: \"UpdateStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"setStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"postStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"setManyStorageFileVisibility\",\n      path: \"/storage/files/visibility-many\",\n      requestType: \"SetManyStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageFolder\",\n      path: \"/storage/folders/delete\",\n      requestType: \"DeleteStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveStorageFolder\",\n      path: \"/storage/folders/move\",\n      requestType: \"MoveStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"searchStorageFiles\",\n      path: \"/storage/files/search\",\n      requestType: \"SearchStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"confirmStorageUpload\",\n      path: \"/storage/files/{file_id}/confirm-upload\",\n      pathParams: [\"file_id\"],\n      requestType: \"ConfirmStorageUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      binary: true,\n      method: \"PUT\",\n      name: \"uploadStorageFileBinary\",\n      path: \"/storage/files/{file_id}/upload\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageFile\",\n      path: \"/storage/files/{file_id}/copy\",\n      pathParams: [\"file_id\"],\n      requestType: \"CopyStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteManyStorageFiles\",\n      path: \"/storage/files/delete-many\",\n      requestType: \"DeleteManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateManyStorageFiles\",\n      path: \"/storage/files/update-many\",\n      requestType: \"UpdateManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFile\",\n      path: \"/storage/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeStorageFile\",\n      path: \"/storage/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFilePublicUrl\",\n      path: \"/storage/files/{file_id}/public-url\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileProxyUrl\",\n      path: \"/storage/files/{file_id}/proxy-url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageFileVersions\",\n      path: \"/storage/files/{file_id}/versions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}/restore\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      requestType: \"StorageFileRetentionRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFolders\",\n      path: \"/storage/folders/list\",\n      requestType: \"ListStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"treeStorageFolders\",\n      path: \"/storage/folders/tree\",\n      requestType: \"TreeStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStoragePermissions\",\n      path: \"/storage/permissions/list\",\n      requestType: \"StoragePermissionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionListResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantStoragePermission\",\n      path: \"/storage/permissions/grant\",\n      requestType: \"StoragePermissionGrantRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeStoragePermission\",\n      path: \"/storage/permissions/revoke\",\n      requestType: \"StoragePermissionRevokeRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"checkStoragePermission\",\n      path: \"/storage/permissions/check\",\n      requestType: \"StoragePermissionCheckRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionCheckResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjects\",\n      path: \"/storage/objects\",\n      requestType: \"StorageListObjectsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"headStorageObject\",\n      path: \"/storage/objects/head\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"existsStorageObject\",\n      path: \"/storage/objects/exists\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"validateStorageObject\",\n      path: \"/storage/objects/validate\",\n      requestType: \"StorageObjectValidateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateStorageObject\",\n      path: \"/storage/objects/update\",\n      requestType: \"StorageUpdateObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageObject\",\n      path: \"/storage/objects/copy\",\n      requestType: \"StorageObjectCopyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectUrl\",\n      path: \"/storage/objects/url\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectPublicUrl\",\n      path: \"/storage/objects/public-url\",\n      requestType: \"StorageObjectPublicUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObject\",\n      path: \"/storage/objects/delete\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectUploadUrl\",\n      path: \"/storage/objects/upload-url\",\n      requestType: \"StoragePresignUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectPostPolicy\",\n      path: \"/storage/objects/post-policy\",\n      requestType: \"StorageSignedPostPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjectVersions\",\n      path: \"/storage/objects/versions\",\n      requestType: \"StorageObjectVersionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageObjectVersion\",\n      path: \"/storage/objects/versions/restore\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectVersion\",\n      path: \"/storage/objects/versions/delete\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectFolder\",\n      path: \"/storage/objects/folder\",\n      requestType: \"StorageObjectFolderCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectFolder\",\n      path: \"/storage/objects/folder/delete\",\n      requestType: \"StorageObjectFolderDeleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"renameStorageObjectFolder\",\n      path: \"/storage/objects/folder/rename\",\n      requestType: \"StorageObjectFolderRenameRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageBuckets\",\n      path: \"/storage/buckets/list\",\n      requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageBucket\",\n      path: \"/storage/buckets/create\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucket\",\n      path: \"/storage/buckets/delete\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/set\",\n      requestType: \"StorageSetBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/delete\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPolicy\",\n      path: \"/storage/buckets/policy\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/set\",\n      requestType: \"StorageSetBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/delete\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/set\",\n      requestType: \"StorageSetPublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/delete\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketCors\",\n      path: \"/storage/buckets/cors\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketCors\",\n      path: \"/storage/buckets/cors/set\",\n      requestType: \"StorageSetBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketCors\",\n      path: \"/storage/buckets/cors/delete\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageMultipartUpload\",\n      path: \"/storage/multipart/create\",\n      requestType: \"StorageMultipartCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"signStorageMultipartPart\",\n      path: \"/storage/multipart/sign-part\",\n      requestType: \"StorageMultipartSignPartRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"completeStorageMultipartUpload\",\n      path: \"/storage/multipart/complete\",\n      requestType: \"StorageMultipartCompleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"abortStorageMultipartUpload\",\n      path: \"/storage/multipart/abort\",\n      requestType: \"StorageMultipartAbortRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageMultipartParts\",\n      path: \"/storage/multipart/list-parts\",\n      requestType: \"StorageMultipartListPartsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageAuditEvents\",\n      path: \"/storage/audit/list\",\n      requestType: \"StorageAuditQueryRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageAuditListResponse\",\n    },\n  ],\n  namespace: \"storage\",\n} as const;\n\n// Bind route names for AthenaStorageError normalized `operation` labels.\nbindStorageErrorRoutes(storageSdkManifest.methods);\n\nexport type StorageSdkManifestMethod =\n  (typeof storageSdkManifest.methods)[number];\nexport type StorageSdkManifestMethodName = StorageSdkManifestMethod[\"name\"];\n\n/** Resolve one storageSdkManifest entry by stable method name (throws if missing). */\nexport function requireStorageManifestRoute(\n  name: StorageSdkManifestMethodName\n): StorageSdkManifestMethod {\n  const route = storageSdkManifest.methods.find(\n    (candidate) => candidate.name === name\n  );\n  if (!route) {\n    throw new Error(`Unknown storageSdkManifest route: ${name}`);\n  }\n  return route;\n}\n\n/** Forward-compatible canonical provider identifier. */\nexport type StorageProviderId =\n  | \"aws_s3\"\n  | \"cloudflare_r2\"\n  | \"minio\"\n  | \"wasabi\"\n  | \"backblaze_b2\"\n  | \"digitalocean_spaces\"\n  | \"custom_s3\"\n  | (string & {});\n\nexport type StorageImplementationStatus =\n  | \"implemented\"\n  | \"stable\"\n  | \"beta\"\n  | \"experimental\"\n  | (string & {});\n\nexport interface StorageProviderConnectionField {\n  allowedValues?: string[];\n  defaultValue?: unknown;\n  description: string;\n  key: string;\n  required: boolean;\n  secret: boolean;\n  valueType: string;\n}\n\n/** Public provider metadata normalized from Athena's provider descriptor. */\nexport interface StorageProviderDescriptor {\n  connectionSchema: { fields: StorageProviderConnectionField[] };\n  defaultEndpointTemplate?: string;\n  defaultRegion: string;\n  forcePathStyleDefault: boolean;\n  id: StorageProviderId;\n  implementationStatus: StorageImplementationStatus;\n  integration?: Record<string, unknown>;\n  protocol: \"s3_compatible\" | (string & {});\n}\n\nexport interface PublicStorageConnectionConfig {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint: string;\n  forcePathStyle: boolean;\n  metadata: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region: string;\n}\n\nexport interface StorageConnectionCredentialState {\n  activeCredentialId?: string;\n  configured: boolean;\n}\n\n/** Secret-safe connection representation returned by canonical HTTP routes. */\nexport interface StorageConnection {\n  config: PublicStorageConnectionConfig;\n  createdAt?: string;\n  credentialState: StorageConnectionCredentialState;\n  description?: string;\n  id: string;\n  isActive: boolean;\n  name: string;\n  protocol: string;\n  providerId: StorageProviderId;\n  updatedAt?: string;\n  vendor?: string;\n}\n\ninterface StorageConnectionConfigInput {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint?: string;\n  forcePathStyle?: boolean;\n  metadata?: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region?: string;\n}\n\ninterface StorageConnectionCredentialsInput {\n  accessKeyId: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface CreateAwsS3ConnectionInput {\n  config: StorageConnectionConfigInput & { region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"aws_s3\";\n}\n\nexport interface CreateCloudflareR2ConnectionInput {\n  config: StorageConnectionConfigInput & { accountId?: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"cloudflare_r2\";\n}\n\nexport interface CreateMinioConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"minio\";\n}\n\nexport interface CreateCustomS3ConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"custom_s3\" | (string & {});\n}\n\nexport type CreateStorageConnectionInput =\n  | CreateAwsS3ConnectionInput\n  | CreateCloudflareR2ConnectionInput\n  | CreateMinioConnectionInput\n  | CreateCustomS3ConnectionInput;\n\nexport type TestStorageConnectionInput = CreateStorageConnectionInput;\n\nexport type FileVisibility = \"private\" | \"organization\" | \"public\";\nexport type ManagedFileStatus =\n  | \"requested\"\n  | \"pending\"\n  | \"uploading\"\n  | \"presigned\"\n  | \"available\"\n  | \"failed\"\n  | \"abandoned\"\n  | \"soft_deleted\"\n  | \"purged\"\n  | (string & {});\n\n/** Public managed-file representation from canonical service routes. */\nexport interface ManagedFile {\n  bucket: string;\n  checksumSha256?: string;\n  connectionId?: string;\n  contentType?: string;\n  createdAt?: string;\n  createdByUserId?: string;\n  deletedAt?: string;\n  id: string;\n  key: string;\n  metadata: Record<string, unknown>;\n  name: string;\n  organizationId?: string;\n  sizeBytes?: number;\n  status: ManagedFileStatus;\n  updatedAt?: string;\n  visibility: FileVisibility;\n}\n\nexport interface UploadManagedFileInput {\n  body: Uint8Array;\n  bucket: string;\n  connectionId: string;\n  contentType?: string;\n  idempotencyKey?: string;\n  key: string;\n  organizationId?: string;\n}\n\nexport interface ListManagedFilesInput {\n  connectionId: string;\n  organizationId?: string;\n  prefix?: string;\n}\n\nexport interface MoveManagedFileInput {\n  destinationKey: string;\n}\n\nexport interface SetManagedFileVisibilityInput {\n  visibility: FileVisibility;\n}\n\nexport type FilePermissionAction =\n  | \"read\"\n  | \"write\"\n  | \"delete\"\n  | \"share\"\n  | \"owner\";\n\nexport interface FilePermission {\n  action: FilePermissionAction;\n  expiresAt?: string;\n  fileId: string;\n  grantedByUserId?: string;\n  id: string;\n  metadata: Record<string, unknown>;\n  principalId: string;\n  principalType: string;\n  revokedAt?: string;\n}\n\nexport interface GrantFilePermissionInput {\n  action: FilePermissionAction;\n  principalId: string;\n  principalType: string;\n}\n\nexport type RevokeFilePermissionInput = GrantFilePermissionInput;\n\nexport interface S3CatalogItem {\n  bucket: string;\n  created_at: string;\n  default_prefix?: string | null;\n  endpoint?: string | null;\n  force_path_style: boolean;\n  id: string;\n  is_active: boolean;\n  metadata: Record<string, unknown>;\n  name: string;\n  provider: string;\n  public_base_url?: string | null;\n  region?: string | null;\n  updated_at: string;\n}\n\nexport interface S3CredentialListItem {\n  access_key: string;\n  bucket: string;\n  created_at: string;\n  endpoint?: string | null;\n  id: string;\n  is_active: boolean;\n  name: string;\n  provider: string;\n  region?: string | null;\n  rotated_at?: string | null;\n  s3_id: string;\n}\n\nexport interface ManagedFileRecord {\n  bucket: string;\n  checksum_sha256?: string | null;\n  content_type?: string | null;\n  created_at: string;\n  created_by_user_id?: string | null;\n  deleted_at?: string | null;\n  extension?: string | null;\n  file_name?: string | null;\n  id: string;\n  is_public: boolean;\n  metadata: Record<string, unknown>;\n  mime_type?: string | null;\n  name: string;\n  organization_id?: string | null;\n  original_name?: string | null;\n  prefix_path?: string | null;\n  resource_id?: string | null;\n  s3_id?: string | null;\n  size_bytes?: number | null;\n  status: string;\n  storage_key: string;\n  updated_at: string;\n  uploaded_by_user_id?: string | null;\n  url?: string | null;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface PresignedFileUrlResponse {\n  bucket: string;\n  cache_hit: boolean;\n  cache_layer: string;\n  expires_at: string;\n  expires_at_epoch_seconds: number;\n  expires_in: number;\n  file_id: string;\n  headers?: Record<string, string>;\n  purpose: string;\n  storage_key: string;\n  url: string;\n}\n\nexport interface StorageServerSideEncryptionOptions {\n  bucket_key_enabled?: boolean;\n  kms_key_id?: string;\n  server_side_encryption?:\n    | \"AES256\"\n    | \"aws:kms\"\n    | \"aws:kms:dsse\"\n    | (string & {});\n  sse?: \"AES256\" | \"aws:kms\" | \"aws:kms:dsse\" | (string & {});\n  ssekms_key_id?: string;\n}\n\nexport interface CreateStorageCatalogRequest {\n  access_key_id: string;\n  /**\n   * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n   * Also accepted under `metadata.account_id`.\n   */\n  account_id?: string;\n  bucket: string;\n  default_prefix?: string;\n  /**\n   * S3-compatible API endpoint.\n   * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n   * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string;\n  force_path_style?: boolean;\n  metadata?: Record<string, unknown>;\n  name: string;\n  /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n  provider?: string;\n  public_base_url?: string;\n  /**\n   * Region. Optional for R2 (server defaults to `auto` after normalize).\n   */\n  region?: string;\n  secret_key: string;\n  session_token?: string;\n}\n\nexport interface UpdateStorageCatalogRequest {\n  access_key_id?: string;\n  /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n  account_id?: string;\n  bucket?: string;\n  default_prefix?: string | null;\n  endpoint?: string;\n  force_path_style?: boolean;\n  is_active?: boolean;\n  metadata?: Record<string, unknown>;\n  name?: string;\n  provider?: string;\n  public_base_url?: string | null;\n  region?: string;\n  secret_key?: string;\n  session_token?: string;\n}\n\nexport interface CreateStorageUploadUrlRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  file_id?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  public?: boolean;\n  resource_id?: string;\n  s3_id: string;\n  size_bytes?: number;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n  files: CreateStorageUploadUrlRequest[];\n}\n\nexport interface StorageUploadUrlResponse {\n  file: ManagedFileRecord;\n  upload: PresignedFileUrlResponse;\n}\n\nexport interface StorageBatchUploadUrlResponse {\n  files: StorageUploadUrlResponse[];\n}\n\nexport interface ListStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  resource_id?: string;\n  s3_id: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface StorageListFilesResponse {\n  count: number;\n  files: ManagedFileRecord[];\n  has_more?: boolean;\n  limit?: number;\n  next_offset?: number | null;\n  offset?: number;\n  total?: number;\n}\n\nexport interface UpdateStorageFileRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetStorageFileVisibilityRequest {\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface DeleteStorageFolderRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface MoveStorageFolderRequest {\n  from_prefix: string;\n  s3_id: string;\n  to_prefix: string;\n}\n\nexport interface StorageFileMutationResponse {\n  file: ManagedFileRecord;\n}\n\nexport interface StorageFolderMutationResponse {\n  prefix: string;\n  processed_files: number;\n  s3_id: string;\n}\n\nexport interface StorageFileMutationManyResponse {\n  count: number;\n  files: ManagedFileRecord[];\n}\n\nexport interface StorageFilePermissionRecord {\n  created_at: string;\n  expires_at?: string | null;\n  file_id: string;\n  granted_by_user_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n  revoked_at?: string | null;\n}\n\nexport interface StoragePermissionListResponse {\n  count: number;\n  permissions: StorageFilePermissionRecord[];\n}\n\nexport interface StoragePermissionCheckResponse {\n  allowed: boolean;\n  permission: string;\n}\n\nexport interface StorageAuditEventRecord {\n  actor_user_id?: string | null;\n  bucket?: string | null;\n  created_at: string;\n  error?: string | null;\n  file_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  operation: string;\n  organization_id?: string | null;\n  s3_id?: string | null;\n  status: \"success\" | \"error\";\n  storage_key?: string | null;\n}\n\nexport interface StorageAuditListResponse {\n  count: number;\n  events: StorageAuditEventRecord[];\n}\n\nexport interface ConfirmStorageUploadRequest {\n  checksum_sha256?: string;\n  content_type?: string;\n  metadata?: Record<string, unknown>;\n  size_bytes?: number;\n}\n\nexport interface SearchStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  query?: string;\n  resource_id?: string;\n  s3_id?: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface DeleteManyStorageFilesRequest {\n  file_ids: string[];\n}\n\nexport interface UpdateManyStorageFilesRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_ids: string[];\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n  file_ids: string[];\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CopyStorageFileRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface ListStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface TreeStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface StoragePermissionListRequest {\n  file_id: string;\n}\n\nexport interface StoragePermissionGrantRequest {\n  expires_at?: string;\n  file_id: string;\n  metadata?: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionRevokeRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionCheckRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n}\n\nexport interface StorageMultipartCreateRequest\n  extends StorageServerSideEncryptionOptions {\n  content_type?: string;\n  file_id: string;\n}\n\nexport interface StorageMultipartSignPartRequest {\n  file_id: string;\n  part_number: number;\n  upload_id: string;\n}\n\nexport interface StorageMultipartCompletePartInput {\n  etag: string;\n  part_number: number;\n}\n\nexport interface StorageMultipartCompleteRequest {\n  file_id: string;\n  parts: StorageMultipartCompletePartInput[];\n  upload_id: string;\n}\n\nexport interface StorageMultipartAbortRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface StorageMultipartListPartsRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  access_key_id?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  endpoint?: string;\n  provider?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  region?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  secret_key?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  session_token?: string;\n}\n\ninterface StorageConnectionBySnakeS3Id\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id: string;\n  s3Id?: string;\n}\n\ninterface StorageConnectionByCamelS3Id\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id?: string;\n  s3Id: string;\n}\n\ninterface StorageConnectionByInlineCredentials\n  extends DeprecatedInlineStorageConnectionFields {\n  s3_id?: string;\n  s3Id?: string;\n  endpoint: string;\n  region: string;\n  access_key_id: string;\n  secret_key: string;\n}\n\nexport type StorageConnectionSelector =\n  | StorageConnectionBySnakeS3Id\n  | StorageConnectionByCamelS3Id\n  | StorageConnectionByInlineCredentials;\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n  bucket: string;\n  prefix: string;\n};\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest;\n\nexport interface StorageObjectFolderRenameRequest\n  extends Omit<StorageObjectFolderCreateRequest, \"prefix\"> {\n  from_prefix: string;\n  to_prefix: string;\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n  bucket: string;\n};\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n  key: string;\n};\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n  checksum_sha256?: string;\n  etag?: string;\n};\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n  StorageServerSideEncryptionOptions & {\n    source_key: string;\n    destination_key: string;\n    destination_bucket?: string;\n  };\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n  public_base_url?: string;\n  force_path_style?: boolean;\n};\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n  prefix?: string;\n  delimiter?: string;\n  continuation_token?: string;\n  max_keys?: number;\n};\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n  acl?: string;\n  content_type?: string;\n  cache_control?: string;\n  content_disposition?: string;\n  content_encoding?: string;\n  content_language?: string;\n  metadata?: Record<string, string>;\n};\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n  key?: string;\n  max_keys?: number;\n  key_marker?: string;\n  version_id_marker?: string;\n  delimiter?: string;\n};\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n  version_id: string;\n};\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n    min_size?: number;\n    max_size?: number;\n    expires_in?: number;\n    public_base_url?: string;\n    force_path_style?: boolean;\n    success_action_status?: string;\n  };\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n  };\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketCorsRuleInput {\n  allowed_headers?: string[];\n  allowed_methods: string[];\n  allowed_origins: string[];\n  expose_headers?: string[];\n  max_age_seconds?: number;\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n  rules: StorageBucketCorsRuleInput[];\n};\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketLifecycleRuleInput {\n  abort_incomplete_multipart_upload_days?: number;\n  expiration_days?: number;\n  expired_object_delete_marker?: boolean;\n  id?: string;\n  noncurrent_version_expiration_days?: number;\n  prefix?: string;\n  status?: \"Enabled\" | \"Disabled\" | \"enabled\" | \"disabled\" | (string & {});\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n  rules: StorageBucketLifecycleRuleInput[];\n};\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest;\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n  policy: Record<string, unknown> | string;\n};\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest;\n\nexport type StorageSetPublicAccessBlockRequest =\n  StoragePublicAccessBlockRequest & {\n    block_public_acls?: boolean;\n    ignore_public_acls?: boolean;\n    block_public_policy?: boolean;\n    restrict_public_buckets?: boolean;\n  };\n\nexport interface StorageFileVersionPathRequest {\n  file_id: string;\n  version_id: string;\n}\n\nexport interface StorageFileRetentionRequest {\n  bypass_governance?: boolean;\n  mode?: \"GOVERNANCE\" | \"COMPLIANCE\" | (string & {});\n  retain_until?: string;\n  retain_until_date?: string;\n  version_id?: string;\n}\n\nexport interface StorageAuditQueryRequest {\n  file_id?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaEnvelope<T> {\n  data: T;\n  message: string;\n  status: string;\n}\n\nexport type StorageFileAccessPurpose = \"read\" | \"download\" | \"stream\";\n\nexport interface GetStorageFileUrlQuery {\n  purpose?: StorageFileAccessPurpose | (string & {});\n}\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n  accessKeyId: string;\n  bucket?: string;\n  endpoint: string;\n  /** R2 uses path-style addressing by default. */\n  forcePathStyle?: boolean;\n  region?: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n  onError?: AthenaStorageErrorHandler;\n  signal?: AbortSignal;\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions;\n\nexport interface AthenaCanonicalStorageProvidersNamespace {\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageProviderDescriptor[]>;\n}\n\nexport interface AthenaCanonicalStorageConnectionsNamespace {\n  create: (\n    input: CreateStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageConnection>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ connectionId: string }>;\n  get: (id: string, options?: AthenaStorageCallOptions) => Promise<StorageConnection>;\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageConnection[]>;\n  test: (\n    input: TestStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ config: PublicStorageConnectionConfig; ok: boolean }>;\n}\n\nexport interface AthenaCanonicalStorageFilesNamespace {\n  delete: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  get: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  list: (\n    input: ListManagedFilesInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile[]>;\n  move: (\n    fileId: string,\n    input: MoveManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n  restore: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  setVisibility: (\n    fileId: string,\n    input: SetManagedFileVisibilityInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  upload: (\n    input: UploadManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n}\n\nexport interface AthenaCanonicalStoragePermissionsNamespace {\n  grant: (\n    fileId: string,\n    input: GrantFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission>;\n  list: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission[]>;\n  revoke: (\n    fileId: string,\n    input: RevokeFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n}\n\nexport interface AthenaStorageBaseModule {\n  createStorageCatalog: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: CreateStorageUploadUrlsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageCatalog: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteStorageFolder: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  getStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  getStorageFileUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  listStorageCatalogs: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  listStorageCredentials: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  moveStorageFolder: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  setStorageFileVisibility: (\n    fileId: string,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateStorageCatalog: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  updateStorageFile: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n}\n\nexport type AthenaStoragePutBody =\n  | Blob\n  | ArrayBuffer\n  | Uint8Array\n  | ReadableStream<Uint8Array>;\n\nexport interface AthenaStoragePutOptions {\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n  expiresAt: string;\n  headers: Record<string, string>;\n  method: \"PUT\";\n  put: (\n    body: AthenaStoragePutBody,\n    options?: AthenaStoragePutOptions\n  ) => Promise<Response>;\n}\n\nexport interface StorageUploadUrlResponseWithPut\n  extends Omit<StorageUploadUrlResponse, \"upload\"> {\n  upload: AthenaStorageManagedUpload;\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n  files: StorageUploadUrlResponseWithPut[];\n}\n\nexport interface AthenaStorageFileUploadRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  contentType?: string;\n  file_id?: string;\n  fileId?: string;\n  fileName?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  mimeType?: string;\n  name?: string;\n  original_name?: string;\n  originalName?: string;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id?: string;\n  s3Id?: string;\n  size_bytes?: number;\n  sizeBytes?: number;\n  storage_key?: string;\n  storageKey?: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n  files: AthenaStorageFileUploadRequest[];\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n  confirmUpload: (\n    fileId: string,\n    input?: ConfirmStorageUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  copy: (\n    fileId: string,\n    input: CopyStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteMany: (\n    input: DeleteManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  deleteVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  proxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  proxyUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restore: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restoreVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  retention: {\n    get: (\n      fileId: string,\n      query?: Pick<StorageFileRetentionRequest, \"version_id\">,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      fileId: string,\n      input: StorageFileRetentionRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  search: (\n    input: SearchStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  update: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateMany: (\n    input: UpdateManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  upload(\n    input: AthenaStorageFileUploadRequest,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageUploadUrlResponseWithPut>;\n  upload(\n    input: Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ): ReturnType<AthenaStorageFileModule[\"upload\"]>;\n  uploadBinary: (\n    fileId: string,\n    body: AthenaStoragePutBody,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  uploadMany: (\n    input: AthenaStorageFileUploadManyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponseWithPut>;\n  url: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  versions: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  visibility: {\n    update: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    set: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    setMany: (\n      input: SetManyStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationManyResponse>;\n  };\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n}\n\nexport interface AthenaStorageCatalogNamespace {\n  create: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  update: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n}\n\nexport interface AthenaStorageFolderNamespace {\n  delete: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  list: (\n    input: ListStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  move: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  tree: (\n    input: TreeStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStoragePermissionNamespace {\n  check: (\n    input: StoragePermissionCheckRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionCheckResponse>;\n  grant: (\n    input: StoragePermissionGrantRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StoragePermissionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionListResponse>;\n  revoke: (\n    input: StoragePermissionRevokeRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n  create: (\n    input: StorageObjectFolderCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectFolderDeleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  rename: (\n    input: StorageObjectFolderRenameRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectNamespace {\n  copy: (\n    input: StorageObjectCopyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  deleteVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  exists: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  folder: AthenaStorageObjectFolderNamespace;\n  head: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StorageListObjectsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  postPolicy: (\n    input: StorageSignedPostPolicyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    input: StorageObjectPublicUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  restoreVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  update: (\n    input: StorageUpdateObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  uploadUrl: (\n    input: StoragePresignUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  url: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  validate: (\n    input: StorageObjectValidateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  versions: (\n    input: StorageObjectVersionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n  delete: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  set: (\n    input: StorageSetBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketNamespace {\n  cors: AthenaStorageBucketCorsNamespace;\n  create: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  lifecycle: {\n    get: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  list: (\n    input: Omit<StorageObjectBaseRequest, \"bucket\">,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  policy: {\n    get: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  publicAccess: {\n    get: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetPublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n}\n\nexport interface AthenaStorageMultipartNamespace {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  listParts: (\n    input: StorageMultipartListPartsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageAuditNamespace {\n  list: (\n    input: StorageAuditQueryRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageAuditListResponse>;\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n  audit: AthenaStorageAuditNamespace;\n  /**\n   * Database backup / restore admin API (`/admin/backups*`).\n   * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n   */\n  backup: AthenaStorageBackupNamespace;\n  bucket: AthenaStorageBucketNamespace;\n  catalog: AthenaStorageCatalogNamespace;\n  /** Canonical service-backed connection API. */\n  connections: AthenaCanonicalStorageConnectionsNamespace;\n  credentials: AthenaStorageCredentialsNamespace;\n  delete: AthenaStorageFileModule[\"delete\"];\n  file: AthenaStorageFileNamespace;\n  /** Canonical service-backed managed-file API. */\n  files: AthenaCanonicalStorageFilesNamespace;\n  folder: AthenaStorageFolderNamespace;\n  multipart: AthenaStorageMultipartNamespace;\n  /** Canonical service-backed managed-file authorization API. */\n  permissions: AthenaCanonicalStoragePermissionsNamespace;\n  /** Canonical provider capability discovery API. */\n  providers: AthenaCanonicalStorageProvidersNamespace;\n  object: AthenaStorageObjectNamespace;\n  permission: AthenaStoragePermissionNamespace;\n}\n\ntype StorageEnvelopeKind = \"raw\" | \"athena\";\n\ninterface StorageModuleRuntimeOptions {\n  baseUrl?: string;\n  onError?: AthenaStorageErrorHandler;\n  stripBasePath?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction headerValue(\n  headers: Headers,\n  names: readonly string[]\n): string | undefined {\n  for (const name of names) {\n    const value = headers.get(name);\n    if (value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath;\n}\n\nfunction resolveStorageEndpointPath(\n  endpoint: AthenaGatewayEndpointPath,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): AthenaGatewayEndpointPath {\n  if (!runtimeOptions?.stripBasePath) {\n    return endpoint;\n  }\n\n  const [pathname, queryText] = String(endpoint).split(\"?\", 2);\n  const trimmedPathname = pathname.startsWith(\"/storage/\")\n    ? pathname.slice(\"/storage\".length)\n    : pathname === \"/storage\"\n      ? \"/\"\n      : pathname;\n  const resolvedPath = trimmedPathname.startsWith(\"/\")\n    ? trimmedPathname\n    : `/${trimmedPathname}`;\n  return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath);\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nfunction fillManifestPath(\n  template: string,\n  pathParams?: Record<string, string>\n): string {\n  if (!pathParams) {\n    return template;\n  }\n  let path = template;\n  for (const [key, value] of Object.entries(pathParams)) {\n    path = withPathParam(path, key, value);\n  }\n  return path;\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details;\n    if (typeof message === \"string\" && message.trim()) {\n      return message.trim();\n    }\n  }\n  if (typeof payload === \"string\" && payload.trim()) {\n    return payload.trim();\n  }\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const hint = payload.hint ?? payload.suggestion;\n  return typeof hint === \"string\" && hint.trim() ? hint.trim() : undefined;\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const cause = payload.cause ?? payload.reason;\n  return typeof cause === \"string\" && cause.trim() ? cause.trim() : undefined;\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n  if (isAthenaGatewayError(error)) {\n    if (error.code === \"INVALID_URL\") {\n      return \"INVALID_URL\";\n    }\n    if (error.code === \"NETWORK_ERROR\") {\n      return \"NETWORK_ERROR\";\n    }\n    if (error.code === \"INVALID_JSON\") {\n      return \"INVALID_JSON\";\n    }\n    if (error.code === \"HTTP_ERROR\") {\n      return \"HTTP_ERROR\";\n    }\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nasync function callStorageEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  envelope: StorageEnvelopeKind,\n  payload?: unknown,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const requestInit: RequestInit = {\n    headers,\n    method,\n    signal: resolvedOptions?.signal,\n  };\n  if (payload !== undefined && method !== \"GET\") {\n    requestInit.body = JSON.stringify(payload);\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} response body could not be read`,\n        method,\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n        ),\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (envelope === \"athena\") {\n    if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n      return rejectStorageError(\n        {\n          code: \"INVALID_ATHENA_ENVELOPE\",\n          endpoint,\n          message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n          method,\n          raw: parsedBody.parsed,\n          requestId,\n          status: response.status,\n        },\n        resolvedOptions,\n        runtimeOptions\n      );\n    }\n    return parsedBody.parsed.data as T;\n  }\n\n  return parsedBody.parsed as T;\n}\n\nasync function callStorageBinaryEndpoint(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  options?: AthenaStorageBinaryCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<Response> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, {\n      headers,\n      method,\n      signal: resolvedOptions?.signal,\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (response.ok) {\n    return response;\n  }\n\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  let rawErrorBody: unknown = null;\n  try {\n    const rawText = await response.text();\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n    rawErrorBody = parsedBody.parsed;\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n        method,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  return rejectStorageError(\n    {\n      cause: resolveErrorCause(rawErrorBody),\n      code: \"HTTP_ERROR\",\n      endpoint,\n      hint: resolveErrorHint(rawErrorBody),\n      message: resolveErrorMessage(\n        rawErrorBody,\n        `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n      ),\n      method,\n      raw: rawErrorBody,\n      requestId,\n      status: response.status,\n    },\n    resolvedOptions,\n    runtimeOptions\n  );\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nfunction isReadableStreamBody(\n  body: AthenaStoragePutBody\n): body is ReadableStream<Uint8Array> {\n  return (\n    typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream\n  );\n}\n\nasync function putPresignedUploadBody(\n  uploadUrl: string,\n  uploadHeaders: Record<string, string>,\n  body: AthenaStoragePutBody,\n  options?: AthenaStoragePutOptions\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  for (const [key, value] of Object.entries(options?.headers ?? {})) {\n    headers.set(key, value);\n  }\n  if (!headers.has(\"Content-Type\") && isBlobBody(body) && body.type) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const init: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    init.duplex = \"half\";\n  }\n  return fetch(uploadUrl, init);\n}\n\nfunction attachManagedUpload(\n  upload: PresignedFileUrlResponse\n): AthenaStorageManagedUpload {\n  const headers: Record<string, string> = { ...(upload.headers ?? {}) };\n  return {\n    ...upload,\n    expiresAt: upload.expires_at,\n    headers,\n    method: \"PUT\",\n    put(body, options) {\n      return putPresignedUploadBody(upload.url, headers, body, options);\n    },\n  };\n}\n\nfunction attachUploadHelper(\n  response: StorageUploadUrlResponse\n): StorageUploadUrlResponseWithPut {\n  return {\n    ...response,\n    upload: attachManagedUpload(response.upload),\n  };\n}\n\nfunction attachUploadHelpers(\n  response: StorageBatchUploadUrlResponse\n): StorageBatchUploadUrlResponseWithPut {\n  return {\n    files: response.files.map(attachUploadHelper),\n  };\n}\n\nfunction normalizeUploadUrlRequest(\n  input: AthenaStorageFileUploadRequest\n): CreateStorageUploadUrlRequest {\n  const s3_id = input.s3_id ?? input.s3Id;\n  const storage_key = input.storage_key ?? input.storageKey;\n  if (!s3_id?.trim()) {\n    throw new Error(\"athena.storage.file.upload requires s3_id or s3Id\");\n  }\n  if (!storage_key?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload requires storage_key or storageKey\"\n    );\n  }\n  const fileName = input.fileName?.trim();\n  const originalName = input.originalName?.trim();\n  return {\n    bucket: input.bucket,\n    bucket_key_enabled: input.bucket_key_enabled,\n    content_type: input.content_type ?? input.contentType,\n    file_id: input.file_id ?? input.fileId,\n    kms_key_id: input.kms_key_id,\n    metadata: input.metadata,\n    mime_type: input.mime_type ?? input.mimeType,\n    name: input.name ?? fileName,\n    original_name: input.original_name ?? originalName ?? fileName,\n    public: input.public,\n    resource_id: input.resource_id ?? input.resourceId,\n    s3_id,\n    server_side_encryption: input.server_side_encryption,\n    size_bytes: input.size_bytes ?? input.sizeBytes,\n    sse: input.sse,\n    ssekms_key_id: input.ssekms_key_id,\n    storage_key,\n    visibility: input.visibility,\n  };\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  body: AthenaStoragePutBody,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage PUT ${endpoint} failed before sending the request`,\n        method: \"PUT\",\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  const nextHeaders: Record<string, string> = {};\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() !== \"content-type\") {\n      nextHeaders[key] = value;\n    }\n  }\n  if (isBlobBody(body) && body.type) {\n    nextHeaders[\"Content-Type\"] = body.type;\n  }\n\n  const requestInit: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers: nextHeaders,\n    method: \"PUT\",\n    signal: resolvedOptions?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    requestInit.duplex = \"half\";\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n        method: \"PUT\",\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} response body could not be read`,\n        method: \"PUT\",\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage PUT ${endpoint} failed with status ${response.status}`\n        ),\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_ATHENA_ENVELOPE\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  return parsedBody.parsed.data as T;\n}\n\nexport function createStorageModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig\n): AthenaStorageModule {\n  const resolvedRuntimeOptions = runtimeOptions as\n    | StorageModuleRuntimeOptions\n    | undefined;\n  /**\n   * Thin JSON route binder: METHOD+path+envelope come only from storageSdkManifest.\n   * Hand bodies remain for binary, dual-visibility, and specialized upload helpers.\n   */\n  const callManifestRoute = <T>(\n    name: StorageSdkManifestMethodName,\n    args?: {\n      body?: unknown;\n      options?: AthenaStorageCallOptions;\n      pathParams?: Record<string, string>;\n      query?: object;\n    }\n  ): Promise<T> => {\n    const route = requireStorageManifestRoute(name);\n    if (\"binary\" in route && route.binary) {\n      throw new Error(\n        `Storage route ${name} is binary; use specialized binary helpers`\n      );\n    }\n    let path = fillManifestPath(route.path, args?.pathParams);\n    if (args?.query) {\n      path = appendQuery(path, args.query);\n    }\n    const method = route.method as AthenaGatewayMethod;\n    const routeRuntimeOptions = name.includes(\"CanonicalStorage\")\n      ? { ...resolvedRuntimeOptions, stripBasePath: false }\n      : resolvedRuntimeOptions;\n    return callStorageEndpoint<T>(\n      gateway,\n      storagePath(path),\n      method,\n      route.responseEnvelope,\n      args?.body,\n      args?.options,\n      routeRuntimeOptions\n    );\n  };\n\n  const callStorageFileVisibility = (\n    fileId: string,\n    method: Extract<AthenaGatewayMethod, \"PATCH\" | \"POST\">,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => {\n    const routeName =\n      method === \"PATCH\"\n        ? (\"setStorageFileVisibility\" as const)\n        : (\"postStorageFileVisibility\" as const);\n    return callManifestRoute<StorageFileMutationResponse>(routeName, {\n      body: input,\n      options,\n      pathParams: { file_id: fileId },\n    });\n  };\n\n  const toCanonicalProviderId = (provider: string): StorageProviderId => {\n    if (provider === \"s3\") return \"aws_s3\";\n    if (provider === \"r2\") return \"cloudflare_r2\";\n    return provider;\n  };\n\n  const serializeConnectionInput = (\n    input: CreateStorageConnectionInput\n  ): Record<string, unknown> => ({\n    accessKeyId: input.credentials.accessKeyId,\n    bucket: input.config.bucket,\n    defaultPrefix: input.config.defaultPrefix,\n    description: input.description,\n    endpoint: input.config.endpoint,\n    forcePathStyle: input.config.forcePathStyle,\n    metadata: input.config.metadata,\n    name: input.name,\n    provider: input.provider,\n    publicBaseUrl: input.config.publicBaseUrl,\n    region: input.config.region,\n    secretAccessKey: input.credentials.secretAccessKey,\n    sessionToken: input.credentials.sessionToken,\n  });\n\n  const encodeBase64 = (bytes: Uint8Array): string => {\n    let binary = \"\";\n    for (const byte of bytes) binary += String.fromCharCode(byte);\n    return btoa(binary);\n  };\n\n  const providers: AthenaCanonicalStorageProvidersNamespace = {\n    async list(options) {\n      const result = await callManifestRoute<{\n        providers: Array<\n          Omit<StorageProviderDescriptor, \"id\" | \"protocol\" | \"connectionSchema\"> & {\n            connectionConfig?: { fields?: StorageProviderConnectionField[] };\n            provider: string;\n          }\n        >;\n      }>(\"listCanonicalStorageProviders\", { options });\n      return result.providers.map((provider) => ({\n        connectionSchema: { fields: provider.connectionConfig?.fields ?? [] },\n        defaultEndpointTemplate: provider.defaultEndpointTemplate,\n        defaultRegion: provider.defaultRegion,\n        forcePathStyleDefault: provider.forcePathStyleDefault,\n        id: toCanonicalProviderId(provider.provider),\n        implementationStatus: provider.implementationStatus,\n        integration: provider.integration,\n        protocol: \"s3_compatible\",\n      }));\n    },\n  };\n\n  const connections: AthenaCanonicalStorageConnectionsNamespace = {\n    async create(input, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"createCanonicalStorageConnection\",\n        { body: serializeConnectionInput(input), options }\n      );\n      return result.connection;\n    },\n    async delete(id, options) {\n      return callManifestRoute<{ connectionId: string }>(\n        \"deleteCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n    },\n    async get(id, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"getCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n      return result.connection;\n    },\n    async list(options) {\n      const result = await callManifestRoute<{ connections: StorageConnection[] }>(\n        \"listCanonicalStorageConnections\",\n        { options }\n      );\n      return result.connections;\n    },\n    async test(input, options) {\n      return callManifestRoute<{\n        config: PublicStorageConnectionConfig;\n        ok: boolean;\n      }>(\"testCanonicalStorageConnection\", {\n        body: serializeConnectionInput(input),\n        options,\n      });\n    },\n  };\n\n  const files: AthenaCanonicalStorageFilesNamespace = {\n    async delete(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"deleteCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async get(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"getCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async list(input, options) {\n      const result = await callManifestRoute<{ files: ManagedFile[] }>(\n        \"listCanonicalStorageFiles\",\n        { body: input, options }\n      );\n      return result.files;\n    },\n    async move(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"moveCanonicalStorageFile\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    purge(fileId, options) {\n      return callManifestRoute<{ fileId: string }>(\"purgeCanonicalStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    async restore(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"restoreCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async setVisibility(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"setCanonicalStorageFileVisibility\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async upload(input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"uploadCanonicalStorageFile\",\n        {\n          body: {\n            ...input,\n            body: encodeBase64(input.body),\n          },\n          options,\n        }\n      );\n      return result.file;\n    },\n  };\n\n  const permissions: AthenaCanonicalStoragePermissionsNamespace = {\n    async grant(fileId, input, options) {\n      const result = await callManifestRoute<{ permission: FilePermission }>(\n        \"grantCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.permission;\n    },\n    async list(fileId, options) {\n      const result = await callManifestRoute<{ permissions: FilePermission[] }>(\n        \"listCanonicalStoragePermissions\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.permissions;\n    },\n    revoke(fileId, input, options) {\n      return callManifestRoute<{ fileId: string }>(\n        \"revokeCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n    },\n  };\n\n  const base: AthenaStorageBaseModule = {\n    createStorageCatalog(input, options) {\n      return callManifestRoute(\"createStorageCatalog\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrl(input, options) {\n      return callManifestRoute(\"createStorageUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrls(input, options) {\n      return callManifestRoute(\"createStorageUploadUrls\", {\n        body: input,\n        options,\n      });\n    },\n    deleteStorageCatalog(id, options) {\n      return callManifestRoute(\"deleteStorageCatalog\", {\n        options,\n        pathParams: { id },\n      });\n    },\n    deleteStorageFile(fileId, options) {\n      return callManifestRoute(\"deleteStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    deleteStorageFolder(input, options) {\n      return callManifestRoute(\"deleteStorageFolder\", {\n        body: input,\n        options,\n      });\n    },\n    getStorageFile(fileId, options) {\n      return callManifestRoute(\"getStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    getStorageFileProxy(fileId, query, options) {\n      const route = requireStorageManifestRoute(\"getStorageFileProxy\");\n      const path = appendQuery(\n        fillManifestPath(route.path, { file_id: fileId }),\n        query\n      );\n      return callStorageBinaryEndpoint(\n        gateway,\n        storagePath(path),\n        route.method as AthenaGatewayMethod,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    getStorageFileUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    listStorageCatalogs(options) {\n      return callManifestRoute(\"listStorageCatalogs\", { options });\n    },\n    listStorageCredentials(options) {\n      return callManifestRoute(\"listStorageCredentials\", { options });\n    },\n    listStorageFiles(input, options) {\n      return callManifestRoute(\"listStorageFiles\", { body: input, options });\n    },\n    moveStorageFolder(input, options) {\n      return callManifestRoute(\"moveStorageFolder\", { body: input, options });\n    },\n    setStorageFileVisibility(fileId, input, options) {\n      return callStorageFileVisibility(fileId, \"PATCH\", input, options);\n    },\n    updateStorageCatalog(id, input, options) {\n      return callManifestRoute(\"updateStorageCatalog\", {\n        body: input,\n        options,\n        pathParams: { id },\n      });\n    },\n    updateStorageFile(fileId, input, options) {\n      return callManifestRoute(\"updateStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n  };\n  const multipart: AthenaStorageMultipartNamespace = {\n    abort(input, options) {\n      return callManifestRoute(\"abortStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    complete(input, options) {\n      return callManifestRoute(\"completeStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    listParts(input, options) {\n      return callManifestRoute(\"listStorageMultipartParts\", {\n        body: input,\n        options,\n      });\n    },\n    signPart(input, options) {\n      return callManifestRoute(\"signStorageMultipartPart\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const fileFacade = createStorageFileModule(base, runtimeOptions, multipart);\n  const fileUpload = ((\n    input:\n      | AthenaStorageFileUploadRequest\n      | Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ) => {\n    if (isRecord(input) && \"files\" in input) {\n      return fileFacade.upload(\n        input as unknown as Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n        options\n      );\n    }\n    return base\n      .createStorageUploadUrl(\n        normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n        options\n      )\n      .then(attachUploadHelper);\n  }) as AthenaStorageFileNamespace[\"upload\"];\n  const fileDelete = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ) =>\n    fileFacade.delete(\n      input as unknown as Parameters<AthenaStorageFileModule[\"delete\"]>[0],\n      options\n    )) as AthenaStorageFileNamespace[\"delete\"];\n\n  const file: AthenaStorageFileNamespace = {\n    ...fileFacade,\n    confirmUpload(fileId, input, options) {\n      return callManifestRoute(\"confirmStorageUpload\", {\n        body: input ?? {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    copy(fileId, input, options) {\n      return callManifestRoute(\"copyStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    delete: fileDelete,\n    deleteMany(input, options) {\n      return callManifestRoute(\"deleteManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    deleteVersion(fileId, versionId, options) {\n      return callManifestRoute(\"deleteStorageFileVersion\", {\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    get(fileId, options) {\n      return base.getStorageFile(fileId, options);\n    },\n    proxy(fileId, query, options) {\n      return base.getStorageFileProxy(fileId, query, options);\n    },\n    proxyUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileProxyUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    publicUrl(fileId, options) {\n      return callManifestRoute(\"getStorageFilePublicUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    purge(fileId, options) {\n      return callManifestRoute(\"purgeStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restore(fileId, options) {\n      return callManifestRoute(\"restoreStorageFile\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restoreVersion(fileId, versionId, options) {\n      return callManifestRoute(\"restoreStorageFileVersion\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    retention: {\n      get(fileId, query, options) {\n        return callManifestRoute(\"getStorageFileRetention\", {\n          options,\n          pathParams: { file_id: fileId },\n          query,\n        });\n      },\n      set(fileId, input, options) {\n        return callManifestRoute(\"setStorageFileRetention\", {\n          body: input,\n          options,\n          pathParams: { file_id: fileId },\n        });\n      },\n    },\n    search(input, options) {\n      return callManifestRoute(\"searchStorageFiles\", { body: input, options });\n    },\n    update(fileId, input, options) {\n      return base.updateStorageFile(fileId, input, options);\n    },\n    updateMany(input, options) {\n      return callManifestRoute(\"updateManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    upload: fileUpload,\n    uploadBinary(fileId, body, options) {\n      const route = requireStorageManifestRoute(\"uploadStorageFileBinary\");\n      return callStorageUploadBinaryEndpoint(\n        gateway,\n        storagePath(fillManifestPath(route.path, { file_id: fileId })),\n        body,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    uploadMany(input, options) {\n      return base\n        .createStorageUploadUrls(\n          { files: input.files.map(normalizeUploadUrlRequest) },\n          options\n        )\n        .then(attachUploadHelpers);\n    },\n    url(fileId, query, options) {\n      return base.getStorageFileUrl(fileId, query, options);\n    },\n    versions(fileId, options) {\n      return callManifestRoute(\"listStorageFileVersions\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    visibility: {\n      set(fileId, input, options) {\n        return callStorageFileVisibility(fileId, \"POST\", input, options);\n      },\n      setMany(input, options) {\n        return callManifestRoute(\"setManyStorageFileVisibility\", {\n          body: input,\n          options,\n        });\n      },\n      update(fileId, input, options) {\n        return base.setStorageFileVisibility(fileId, input, options);\n      },\n    },\n  };\n  const credentials: AthenaStorageCredentialsNamespace = {\n    list(options) {\n      return base.listStorageCredentials(options);\n    },\n  };\n  const catalog: AthenaStorageCatalogNamespace = {\n    create(input, options) {\n      return base.createStorageCatalog(input, options);\n    },\n    delete(id, options) {\n      return base.deleteStorageCatalog(id, options);\n    },\n    list(options) {\n      return base.listStorageCatalogs(options);\n    },\n    update(id, input, options) {\n      return base.updateStorageCatalog(id, input, options);\n    },\n  };\n  const folder: AthenaStorageFolderNamespace = {\n    delete(input, options) {\n      return base.deleteStorageFolder(input, options);\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageFolders\", { body: input, options });\n    },\n    move(input, options) {\n      return base.moveStorageFolder(input, options);\n    },\n    tree(input, options) {\n      return callManifestRoute(\"treeStorageFolders\", { body: input, options });\n    },\n  };\n  const permission: AthenaStoragePermissionNamespace = {\n    check(input, options) {\n      return callManifestRoute(\"checkStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    grant(input, options) {\n      return callManifestRoute(\"grantStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStoragePermissions\", {\n        body: input,\n        options,\n      });\n    },\n    revoke(input, options) {\n      return callManifestRoute(\"revokeStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const objectFolder: AthenaStorageObjectFolderNamespace = {\n    create(input, options) {\n      return callManifestRoute(\"createStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    rename(input, options) {\n      return callManifestRoute(\"renameStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const object: AthenaStorageObjectNamespace = {\n    copy(input, options) {\n      return callManifestRoute(\"copyStorageObject\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObject\", { body: input, options });\n    },\n    deleteVersion(input, options) {\n      return callManifestRoute(\"deleteStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    exists(input, options) {\n      return callManifestRoute(\"existsStorageObject\", { body: input, options });\n    },\n    folder: objectFolder,\n    head(input, options) {\n      return callManifestRoute(\"headStorageObject\", { body: input, options });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageObjects\", { body: input, options });\n    },\n    postPolicy(input, options) {\n      return callManifestRoute(\"createStorageObjectPostPolicy\", {\n        body: input,\n        options,\n      });\n    },\n    publicUrl(input, options) {\n      return callManifestRoute(\"getStorageObjectPublicUrl\", {\n        body: input,\n        options,\n      });\n    },\n    restoreVersion(input, options) {\n      return callManifestRoute(\"restoreStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    update(input, options) {\n      return callManifestRoute(\"updateStorageObject\", { body: input, options });\n    },\n    uploadUrl(input, options) {\n      return callManifestRoute(\"createStorageObjectUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    url(input, options) {\n      return callManifestRoute(\"getStorageObjectUrl\", { body: input, options });\n    },\n    validate(input, options) {\n      return callManifestRoute(\"validateStorageObject\", {\n        body: input,\n        options,\n      });\n    },\n    versions(input, options) {\n      return callManifestRoute(\"listStorageObjectVersions\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const bucket: AthenaStorageBucketNamespace = {\n    cors: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageBucket\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageBucket\", { body: input, options });\n    },\n    lifecycle: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageBuckets\", { body: input, options });\n    },\n    policy: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    publicAccess: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n    },\n  };\n  const audit: AthenaStorageAuditNamespace = {\n    list(input, options) {\n      return callManifestRoute(\"listStorageAuditEvents\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const backup = createStorageBackupModule(\n    gateway,\n    resolvedRuntimeOptions,\n    (path, method, payload, options) =>\n      callStorageEndpoint(\n        gateway,\n        storagePath(path),\n        method,\n        \"raw\",\n        payload,\n        options,\n        resolvedRuntimeOptions\n      )\n  );\n  return {\n    ...base,\n    audit,\n    backup,\n    bucket,\n    catalog,\n    connections,\n    credentials,\n    delete: file.delete,\n    file,\n    files,\n    folder,\n    multipart,\n    object,\n    permission,\n    permissions,\n    providers,\n  };\n}\n","/**\n * Internal Athena client composition root.\n *\n * Feature modules consume {@link AthenaClientRuntimeContext} /\n * {@link InternalAthenaClientCore}, not the public AthenaClient façade.\n * Browser-safe: must not import pg, node:fs, server-only, or v3-client.ts.\n */\n\nimport type {\n  AthenaAdminQueryInput,\n  AthenaAdminQueryResult,\n} from \"../admin/query.ts\";\nimport { createAdminQuery } from \"../admin/query.ts\";\nimport { createAuthModule } from \"../auth/client.ts\";\nimport { toAthenaAuthDiagnostics } from \"../auth/resolve-routing.ts\";\nimport type {\n  AthenaAuthBindings,\n  AthenaAuthClientConfig,\n} from \"../auth/types.ts\";\nimport { createChatModule } from \"../chat/module.ts\";\nimport type {\n  AthenaChatModule,\n  AthenaChatWebSocketFactory,\n} from \"../chat/types.ts\";\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from \"../client-request.ts\";\nimport { createAthenaRequest } from \"../client-request.ts\";\nimport type {\n  AthenaResult,\n  AthenaResultFormatter,\n} from \"../client-result.ts\";\nimport { createResultFormatter } from \"../client-result.ts\";\nimport { resolveTableNameForCall } from \"../client-sql.ts\";\nimport type {\n  AthenaFromOptions,\n  AthenaRowShape,\n  ClientTableQueryBuilder,\n  InternalClientBehaviorOptions,\n  RpcQueryBuilder,\n  TableQueryBuilder,\n  UntypedTableName,\n} from \"../client-fluent.ts\";\nimport {\n  createQueryBuilder,\n  createRpcBuilder,\n  createTableBuilder,\n} from \"../client-fluent.ts\";\nimport {\n  type AthenaCompatibilityCache,\n  type AthenaCompatibilityReport,\n  createCompatibilityCache,\n  discoverCompatibility,\n} from \"../compatibility/report.ts\";\nimport type { AthenaDbModule, AthenaTransactionClient } from \"../db/module.ts\";\nimport {\n  beginInteractiveSession,\n  executeAtomicTransaction,\n  finishInteractiveSession,\n  nextInternalSavepointName,\n} from \"../db/transaction/index.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport { createInteractiveGatewayClient } from \"../db/transaction/interactive-gateway.ts\";\nimport type { AthenaTransactionOptions } from \"../db/transaction/types.ts\";\nimport {\n  type AthenaGatewayClient,\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n} from \"../gateway/client.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"../gateway/url.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n} from \"../gateway/types.ts\";\nimport type { AthenaCacheContextDescriptor } from \"../query/descriptor.ts\";\nimport { peekSyncCacheContext } from \"../query/descriptor.ts\";\nimport type { AthenaQueryTracer } from \"../query-tracing.ts\";\nimport {\n  captureTraceCallsite,\n  createQueryTracer,\n} from \"../query-tracing.ts\";\nimport type {\n  AthenaNormalizedHealth,\n  AthenaReleaseIdentity,\n} from \"../release/identity.ts\";\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from \"../schema/model-target.ts\";\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from \"../schema/types.ts\";\nimport type { AthenaSelectInput } from \"../select-column-types.ts\";\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageModule,\n} from \"../storage/module.ts\";\nimport { createStorageModule } from \"../storage/module.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"../utils/athena-request-headers.ts\";\n\n/**\n * Composition root consumed by SDK modules (alias of InternalAthenaClientCore).\n * Public AthenaClient is a frozen façade assembled over this context.\n */\nexport type AthenaClientRuntimeContext<\n  TModels extends AthenaClientModelsInput | never = never,\n> = InternalAthenaClientCore<TModels>;\n\nexport interface AthenaClientAdminModule {\n  /**\n   * Explicit raw SQL with operation + expected shape metadata.\n   * Preferred over root `query()` for Dragunov / Athena 5.\n   */\n  query: <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n    input: AthenaAdminQueryInput<TParams>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaAdminQueryResult<T>>;\n}\n\nexport interface AthenaClientSystemModule {\n  /** Lazy cached compatibility report (health-backed when available). */\n  compatibility: () => Promise<AthenaCompatibilityReport>;\n  /**\n   * Redacted runtime plan (database / auth / storage / environment).\n   * Diagnostics only — not a configuration surface.\n   */\n  runtime: () => import(\"../runtime/resolve.ts\").AthenaRuntimeDiagnostics;\n  /**\n   * Safe auth routing / configuration snapshot (no secrets, tokens, or cookie values).\n   * Always installed by `createClient` / `createClientView` (4.3+). Does not require db.\n   */\n  inspectAuth: (options?: {\n    requestOrigin?: string | null;\n  }) => import(\"../auth/resolve-routing.ts\").AthenaAuthDiagnostics;\n  /** Normalized release identity from health (Athena 4 synthesizes without codename). */\n  release: () => Promise<AthenaReleaseIdentity>;\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n  admin: AthenaClientAdminModule;\n  auth: AthenaAuthBindings;\n  chat: AthenaChatModule;\n  db: AthenaDbModule<TModels>;\n  from<TModel extends AthenaModelTarget>(\n    model: TModel\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n  from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions\n  ): ClientTableQueryBuilder<TModels, TTableName>;\n  from<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions\n  ): TableQueryBuilder<Row, Insert, Update>;\n  /**\n   * GET /health (fallback GET /) with release identity normalization.\n   */\n  health: () => Promise<AthenaNormalizedHealth>;\n  /**\n   * Executes raw SQL through Athena's compatibility query surface.\n   *\n   * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n   */\n  query: <Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  request: <T = unknown>(\n    options: AthenaRequestOptions\n  ) => Promise<AthenaRequestResponse<T>>;\n  rpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => RpcQueryBuilder<Row>;\n  storage: AthenaStorageModule;\n  system: AthenaClientSystemModule;\n  verifyConnection: (\n    options?: AthenaGatewayConnectionOptions\n  ) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport interface InternalClientChatOptions\n  extends Pick<\n    AthenaRequestHeaderOverrideFields,\n    \"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n  > {\n  webSocketFactory?: AthenaChatWebSocketFactory | null | undefined;\n  wsUrl?: string | null | undefined;\n}\n\nexport type InternalClientAuthOptions = Omit<\n  AthenaAuthClientConfig,\n  \"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n>;\n\nexport interface InternalClientConfig<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  apiKey: string;\n  auth?: InternalClientAuthOptions;\n  authUrl?: string;\n  backend?: BackendConfig;\n  baseUrl: string;\n  behavior?: InternalClientBehaviorOptions;\n  chat?: InternalClientChatOptions;\n  chatUrl?: string;\n  chatWsUrl?: string;\n  client?: string | null | undefined;\n  /**\n   * Optional prebuilt gateway transport (HTTP client, Cloudflare D1 local, or test fake).\n   * When set, `createAthenaGatewayClient` is not constructed from baseUrl/apiKey.\n   * @see ADR 0015\n   */\n  gatewayTransport?: AthenaGatewayClient;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null | undefined;\n  models?: TModels;\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n  pgUri?: string | null | undefined;\n  storage?: AthenaStorageClientConfig;\n  storageUrl?: string;\n}\n\nexport interface InternalClientRequestContext {\n  accessScope?: string | null;\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  policyRevision?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nexport type InternalClientContextResolver = () =>\n  | InternalClientRequestContext\n  | undefined\n  | Promise<InternalClientRequestContext | undefined>;\n\nexport interface InternalAthenaClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  readonly config: InternalClientConfig<TModels>;\n  readonly formatGatewayResult: AthenaResultFormatter;\n  readonly gatewayTransport: AthenaGatewayClient;\n  readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined;\n  readonly queryTracer: AthenaQueryTracer | undefined;\n}\n\nfunction buildContextHeaders(\n  context: InternalClientRequestContext\n): Record<string, string> | undefined {\n  const headers: Record<string, string> = {};\n  if (\n    context.userId !== undefined &&\n    context.userId !== null &&\n    context.userId !== \"\"\n  ) {\n    headers[\"X-User-Id\"] = context.userId;\n  }\n  if (\n    context.organizationId !== undefined &&\n    context.organizationId !== null &&\n    context.organizationId !== \"\"\n  ) {\n    headers[\"X-Organization-Id\"] = context.organizationId;\n  }\n  Object.assign(headers, context.headers);\n  return Object.keys(headers).length > 0 ? headers : undefined;\n}\n\n/**\n * Normalize auth base for the auth module.\n *\n * Absolute http(s) URLs are validated like gateway bases (no query/hash).\n * Relative same-origin paths (e.g. `/api/auth`) are preserved — auth is not\n * a gateway URL and must not go through absolute-only gateway normalization.\n */\nfunction normalizeAuthClientBaseUrl(defaultBaseUrl: string): string {\n  const trimmed = defaultBaseUrl.trim();\n  if (!trimmed) {\n    throw new Error(\n      'Athena auth base URL must be a non-empty absolute http(s) URL or a path such as \"/api/auth\".'\n    );\n  }\n\n  // Same-origin / relative browser bases used by auth.routing \"same-origin\".\n  if (trimmed.startsWith(\"/\")) {\n    return trimmed.replace(/\\/+$/, \"\") || \"/\";\n  }\n\n  return normalizeAthenaGatewayBaseUrl(trimmed, {\n    label: \"Athena auth base URL\",\n  });\n}\n\nfunction normalizeAuthClientConfig(\n  auth: InternalClientAuthOptions | undefined,\n  defaultBaseUrl?: string\n): AthenaAuthClientConfig | undefined {\n  if (!auth && defaultBaseUrl === undefined) {\n    return;\n  }\n\n  const normalized: AthenaAuthClientConfig = {\n    ...(auth ?? {}),\n  };\n  const resolvedBaseUrl =\n    defaultBaseUrl !== undefined && defaultBaseUrl !== \"\"\n      ? normalizeAuthClientBaseUrl(defaultBaseUrl)\n      : undefined;\n\n  if (resolvedBaseUrl !== undefined) {\n    normalized.baseUrl = resolvedBaseUrl;\n  }\n  return normalized;\n}\n\nexport function createInternalClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n>(config: InternalClientConfig<TModels>): InternalAthenaClientCore<TModels> {\n  const normalizedAuthConfig = normalizeAuthClientConfig(\n    config.auth,\n    config.authUrl\n  );\n  const gatewayTransport =\n    config.gatewayTransport ??\n    createAthenaGatewayClient({\n      apiKey: config.apiKey,\n      backend: config.backend,\n      baseUrl: config.baseUrl,\n      client: config.client ?? undefined,\n      headers: config.headers,\n      jdbcUrl: config.jdbcUrl,\n      pgUri: config.pgUri,\n    });\n  return Object.freeze({\n    config,\n    formatGatewayResult: createResultFormatter(),\n    gatewayTransport,\n    normalizedAuthConfig,\n    queryTracer: createQueryTracer(config.behavior),\n  });\n}\n\nexport function createInternalClientView<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  core: InternalAthenaClientCore<TModels>,\n  resolveContext: InternalClientContextResolver,\n  cacheContext?: AthenaCacheContextDescriptor\n): InternalAthenaClient<TModels> {\n  const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } =\n    core;\n  const gateway = createAthenaGatewayClientView(\n    core.gatewayTransport,\n    async () => {\n      const context = await resolveContext();\n      return context\n        ? {\n            bearerToken: context.bearerToken,\n            cookie: context.cookie,\n            forceNoCache: context.forceNoCache,\n            headers: context.headers,\n            organizationId: context.organizationId,\n            sessionToken: context.sessionToken,\n            userId: context.userId,\n          }\n        : undefined;\n    }\n  );\n  const auth = createAuthModule(\n    {\n      ...(normalizedAuthConfig ?? {}),\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken ?? undefined,\n              cookie: context.cookie ?? undefined,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken ?? undefined,\n            }\n          : undefined;\n      },\n    }\n  );\n  // Single implementation + cast avoids TS2589 deep overload expansion during dts.\n  const from = ((\n    tableOrModel: string | AthenaModelTarget,\n    options?: AthenaFromOptions\n  ) => {\n    if (isAthenaModelTarget(tableOrModel)) {\n      if (options?.schema !== undefined) {\n        throw new Error(\n          \"from(model) does not accept a schema override because the model already defines its target.\"\n        );\n      }\n      return createTableBuilder(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        gateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior,\n        {\n          cacheContext: cacheContext ?? peekSyncCacheContext(resolveContext),\n          model: tableOrModel,\n        }\n      );\n    }\n\n    const resolvedTableName = resolveTableNameForCall(\n      tableOrModel,\n      options?.schema\n    );\n    return createTableBuilder(\n      resolvedTableName,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      config.behavior,\n      {\n        cacheContext: cacheContext ?? peekSyncCacheContext(resolveContext),\n      }\n    );\n  }) as AthenaDbModule<TModels>[\"from\"];\n  const rpc: InternalAthenaClient<TModels>[\"rpc\"] = <\n    Row = unknown,\n    Args extends AthenaJsonObject = AthenaJsonObject,\n  >(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => {\n    const normalizedFn = fn.trim();\n    if (!normalizedFn) {\n      throw new Error(\"rpc requires a function name\");\n    }\n    return createRpcBuilder<Row>(\n      normalizedFn,\n      args as AthenaJsonObject | undefined,\n      options,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      captureTraceCallsite(queryTracer),\n      Boolean(config.behavior?.debugAst)\n    );\n  };\n  const deprecationOwner = Object.create(null) as object;\n  const compatibilityCache: AthenaCompatibilityCache =\n    createCompatibilityCache();\n  const adminQueryImpl = createAdminQuery({\n    client: gateway,\n    formatGatewayResult,\n  });\n  const admin: AthenaClientAdminModule = {\n    query: adminQueryImpl,\n  };\n  const query = createQueryBuilder(\n    gateway,\n    formatGatewayResult,\n    config.behavior,\n    queryTracer,\n    deprecationOwner\n  ) as InternalAthenaClient<TModels>[\"query\"];\n  const health = async (): Promise<AthenaNormalizedHealth> => {\n    const report = await discoverCompatibility({\n      apiKey: config.apiKey,\n      baseUrl: config.baseUrl,\n      cache: compatibilityCache,\n      headers: config.headers,\n    });\n    if (compatibilityCache.health) {\n      return compatibilityCache.health;\n    }\n    return {\n      message: null,\n      raw: null,\n      release: report.release,\n      status: null,\n      version:\n        report.server.version === \"unknown\" ? null : report.server.version,\n    };\n  };\n  const system: AthenaClientSystemModule = {\n    async compatibility() {\n      return discoverCompatibility({\n        apiKey: config.apiKey,\n        baseUrl: config.baseUrl,\n        cache: compatibilityCache,\n        headers: config.headers,\n      });\n    },\n    runtime() {\n      return {\n        auth: \"remote\",\n        database: \"gateway\",\n        runtime: \"node\",\n        storage: \"none\",\n      };\n    },\n    /**\n     * Internal/core path has no routing SSOT attachment; return empty diagnostics.\n     * Public createClient views always supply a real inspectAuth via v3 createClientView.\n     */\n    inspectAuth(options?: { requestOrigin?: string | null }) {\n      return toAthenaAuthDiagnostics(undefined, {\n        requestOrigin: options?.requestOrigin,\n      });\n    },\n    async release() {\n      const report = await system.compatibility();\n      return report.release;\n    },\n  };\n  const untypedDbFrom = from as unknown as <\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: string,\n    options?: AthenaFromOptions\n  ) => TableQueryBuilder<Row, Insert, Update>;\n\n  const createTransactionScopedDb = (\n    txGateway: ReturnType<typeof createAthenaGatewayClient>,\n    session: import(\"../db/transaction/coordinator.ts\").InteractiveTransactionSession\n  ): AthenaTransactionClient<TModels> => {\n    const txFrom = ((\n      tableOrModel: string | AthenaModelTarget,\n      options?: AthenaFromOptions\n    ) => {\n      if (isAthenaModelTarget(tableOrModel)) {\n        return createTableBuilder(\n          resolveAthenaModelTargetTableName(tableOrModel),\n          txGateway,\n          formatGatewayResult,\n          queryTracer,\n          config.behavior,\n          { model: tableOrModel }\n        );\n      }\n      return createTableBuilder(\n        resolveTableNameForCall(tableOrModel, options?.schema),\n        txGateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior\n      );\n    }) as AthenaDbModule<TModels>[\"from\"];\n    const txUntypedFrom = txFrom as unknown as typeof untypedDbFrom;\n    const scoped = {\n      abort() {\n        session.abort();\n      },\n      delete(table: string, options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n        return txUntypedFrom(table).delete(options);\n      },\n      from: txFrom,\n      insert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return Array.isArray(values)\n          ? txUntypedFrom(table).insert(values as never, options)\n          : txUntypedFrom(table).insert(values as never, options);\n      },\n      select(\n        table: string,\n        first?: AthenaGatewayCallOptions | AthenaSelectInput,\n        second?: AthenaGatewayCallOptions\n      ) {\n        if (first && typeof first === \"object\" && !Array.isArray(first)) {\n          return txUntypedFrom(table).select(\n            undefined,\n            first as AthenaGatewayCallOptions\n          );\n        }\n        return txUntypedFrom(table).select(\n          first as AthenaSelectInput | undefined,\n          second\n        );\n      },\n      update(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return txUntypedFrom(table).update(values as never, options);\n      },\n      upsert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n        return Array.isArray(values)\n          ? txUntypedFrom(table).upsert(values as never, options)\n          : txUntypedFrom(table).upsert(values as never, options);\n      },\n      async withSavepoint(callback: (tx: unknown) => Promise<unknown>) {\n        if (!session.transport.createSavepoint) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_SAVEPOINT_UNSUPPORTED\",\n            `Savepoints are not supported by backend \"${session.capabilities.backend}\"`,\n            { backend: session.capabilities.backend }\n          );\n        }\n        session.savepointIndex += 1;\n        const name = nextInternalSavepointName(session.savepointIndex);\n        await session.transport.createSavepoint(name);\n        try {\n          const value = await callback(scoped);\n          await session.transport.releaseSavepoint?.(name);\n          return value;\n        } catch (error) {\n          await session.transport.rollbackToSavepoint?.(name);\n          throw error;\n        }\n      },\n      async withTransaction(callback: (tx: unknown) => Promise<unknown>) {\n        if (!session.capabilities.savepoints) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_NESTING_UNSUPPORTED\",\n            `Nested withTransaction is not supported by backend \"${session.capabilities.backend}\"`,\n            { backend: session.capabilities.backend }\n          );\n        }\n        return scoped.withSavepoint(callback) as Promise<unknown>;\n      },\n    };\n    return scoped as unknown as AthenaTransactionClient<TModels>;\n  };\n\n  const db = {\n    delete<Row = AthenaRowShape>(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string }\n    ) {\n      return untypedDbFrom<Row>(table).delete(options);\n    },\n    from,\n    insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          )\n        : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          );\n    },\n    query,\n    rpc,\n    select<Row = AthenaRowShape>(\n      table: string,\n      first?: AthenaGatewayCallOptions | AthenaSelectInput,\n      second?: AthenaGatewayCallOptions\n    ) {\n      if (first && typeof first === \"object\" && !Array.isArray(first)) {\n        return untypedDbFrom<Row>(table).select(\n          undefined,\n          first as AthenaGatewayCallOptions\n        );\n      }\n      return untypedDbFrom<Row>(table).select(\n        first as AthenaSelectInput | undefined,\n        second\n      );\n    },\n    update<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(table: string, values: Update, options?: AthenaGatewayCallOptions) {\n      return untypedDbFrom<Row, Insert, Update>(table).update(values, options);\n    },\n    upsert<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update;\n        onConflict?: string | string[];\n      }\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n        : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options);\n    },\n    transaction(operations, options?: AthenaTransactionOptions) {\n      return executeAtomicTransaction({\n        formatGatewayResult,\n        gateway,\n        operations,\n        options,\n      });\n    },\n    async withTransaction(callback, options?: AthenaTransactionOptions) {\n      const session = await beginInteractiveSession({\n        gateway,\n        options,\n      });\n      const txGateway = createInteractiveGatewayClient(gateway, session);\n      const tx = createTransactionScopedDb(txGateway, session);\n      try {\n        const value = await callback(tx);\n        await finishInteractiveSession({\n          committedOperations: [],\n          committedResults: [],\n          session,\n        });\n        return value;\n      } catch (error) {\n        try {\n          await session.transport.rollback();\n        } catch {\n          // Prefer the original error.\n        }\n        throw error;\n      }\n    },\n  } as AthenaDbModule<TModels>;\n  const chat = createChatModule(\n    {\n      apiKey: config.apiKey,\n      baseUrl: config.chatUrl,\n      bearerToken: config.chat?.bearerToken ?? undefined,\n      client: config.client ?? undefined,\n      cookie: config.chat?.cookie ?? undefined,\n      forceNoCache: config.chat?.forceNoCache ?? undefined,\n      headers: {\n        ...(config.headers ?? {}),\n        ...(config.chat?.headers ?? {}),\n      },\n      sessionToken: config.chat?.sessionToken ?? undefined,\n      webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n      wsUrl: config.chatWsUrl,\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken,\n              cookie: context.cookie,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken,\n            }\n          : undefined;\n      },\n    }\n  );\n  const request = createAthenaRequest(config, resolveContext);\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  });\n\n  return {\n    admin,\n    auth: auth.auth,\n    chat,\n    db,\n    from,\n    health,\n    query,\n    request,\n    rpc,\n    storage,\n    system,\n    verifyConnection: gateway.verifyConnection,\n  } as InternalAthenaClient<TModels>;\n}\n","import {\n  D1_BATCH_TRANSACTION_CAPABILITIES,\n  GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES,\n  POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n} from \"../db/transaction/types.ts\";\nimport type { AthenaClientCapabilities } from \"./types.ts\";\n\nexport function createGatewayCapabilities(options?: {\n  engine?: AthenaClientCapabilities[\"db\"][\"engine\"];\n  authRemote?: boolean;\n  /** When false/undefined, storage flags match an unconfigured storage namespace. */\n  storageConfigured?: boolean;\n  storageCatalogs?: boolean;\n  storageBackups?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? true;\n  return {\n    auth: {\n      remote: options?.authRemote ?? true,\n    },\n    db: {\n      engine: options?.engine ?? \"postgresql\",\n      layers: {\n        findManyAst: true,\n        flatCrud: true,\n        query: true,\n        relations: true,\n        rpc: true,\n      },\n      local: false,\n      transactions: GATEWAY_POSTGRES_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"gateway\",\n    storage: {\n      backups: storageConfigured ? (options?.storageBackups ?? true) : false,\n      catalogs: storageConfigured ? (options?.storageCatalogs ?? true) : false,\n      local: false,\n      objects: storageConfigured,\n    },\n  };\n}\n\nexport function createCloudflareEdgeCapabilities(options: {\n  hasR2: boolean;\n  /** Hybrid remote Athena root / storage URL enables HTTP storage ports. */\n  hasRemoteStorage?: boolean;\n  authRemote: boolean;\n  findManyAst?: boolean;\n  flatCrud?: boolean;\n  query?: boolean;\n  relations?: boolean;\n  rpc?: boolean;\n}): AthenaClientCapabilities {\n  const hasRemoteStorage = Boolean(options.hasRemoteStorage);\n  const hasObjects = options.hasR2 || hasRemoteStorage;\n  return {\n    auth: {\n      remote: options.authRemote,\n    },\n    db: {\n      engine: \"cloudflare-d1\",\n      layers: {\n        findManyAst: options.findManyAst ?? true,\n        flatCrud: options.flatCrud ?? true,\n        query: options.query ?? true,\n        relations: options.relations ?? true,\n        rpc: options.rpc ?? false,\n      },\n      local: true,\n      transactions: D1_BATCH_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"cloudflare-edge\",\n    storage: {\n      // Catalogs/backups are HTTP product ports — only when remote storage is wired.\n      backups: hasRemoteStorage,\n      catalogs: hasRemoteStorage,\n      // Local objects only when an R2 binding is present.\n      local: options.hasR2,\n      // Remote hybrid root can still expose storage.objects via the HTTP API.\n      objects: hasObjects,\n    },\n  };\n}\n\n/**\n * Capabilities for Node direct PostgreSQL (`db.pgUri`).\n * Uses gateway mode string with local+engine discrimination (AD-02).\n */\nexport function createPostgresDirectCapabilities(options?: {\n  authRemote?: boolean;\n  storageConfigured?: boolean;\n  findManyAst?: boolean;\n  flatCrud?: boolean;\n  query?: boolean;\n  relations?: boolean;\n  rpc?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? false;\n  return {\n    auth: {\n      remote: options?.authRemote ?? false,\n    },\n    db: {\n      engine: \"postgresql\",\n      layers: {\n        findManyAst: options?.findManyAst ?? true,\n        flatCrud: options?.flatCrud ?? true,\n        query: options?.query ?? true,\n        relations: options?.relations ?? true,\n        rpc: options?.rpc ?? true,\n      },\n      local: true,\n      transactions: POSTGRES_DIRECT_TRANSACTION_CAPABILITIES,\n    },\n    mode: \"gateway\",\n    storage: {\n      backups: storageConfigured,\n      catalogs: storageConfigured,\n      local: false,\n      objects: storageConfigured,\n    },\n  };\n}\n","/**\n * Structural Cloudflare binding types used by the edge-local adapter.\n * Avoids a hard dependency on `@cloudflare/workers-types`.\n */\n\nimport type { AthenaTransactionCapabilities } from \"../db/transaction/types.ts\";\n\nexport interface D1PreparedStatementLike {\n  /**\n   * Non-generic statement results keep mock bindings assignable under strict\n   * function types. Callers narrow `results` as needed.\n   */\n  all: () => Promise<D1ResultLike>;\n  bind: (...values: unknown[]) => D1PreparedStatementLike;\n  first: <T = Record<string, unknown>>(colName?: string) => Promise<T | null>;\n  run: () => Promise<D1ResultLike>;\n}\n\nexport interface D1ResultLike<T = Record<string, unknown>> {\n  error?: string;\n  meta?: {\n    duration?: number;\n    changes?: number;\n    last_row_id?: number;\n    rows_read?: number;\n    rows_written?: number;\n    [key: string]: unknown;\n  };\n  results?: T[];\n  success?: boolean;\n}\n\nexport interface D1ExecResultLike {\n  count: number;\n  duration: number;\n}\n\nexport interface D1SessionLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  /** Sessions may not expose exec (Wrangler D1DatabaseSession). */\n  exec?: (query: string) => Promise<D1ExecResultLike>;\n  getBookmark: () => string | null;\n  prepare: (query: string) => D1PreparedStatementLike;\n}\n\nexport interface D1DatabaseLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  exec: (query: string) => Promise<D1ExecResultLike>;\n  prepare: (query: string) => D1PreparedStatementLike;\n  withSession?: (constraintOrBookmark: string) => D1SessionLike;\n}\n\nexport interface R2ObjectBodyLike {\n  arrayBuffer: () => Promise<ArrayBuffer>;\n  blob: () => Promise<Blob>;\n  customMetadata?: Record<string, string>;\n  etag?: string;\n  httpEtag?: string;\n  httpMetadata?: { contentType?: string; [key: string]: unknown };\n  json: <T = unknown>() => Promise<T>;\n  key: string;\n  size: number;\n  text: () => Promise<string>;\n  uploaded?: Date;\n}\n\nexport interface R2ObjectsListLike {\n  cursor?: string;\n  delimitedPrefixes?: string[];\n  objects: Array<{\n    key: string;\n    size: number;\n    etag?: string;\n    uploaded?: Date;\n  }>;\n  truncated: boolean;\n}\n\nexport interface R2BucketLike {\n  delete: (keys: string | string[]) => Promise<void>;\n  get: (key: string) => Promise<R2ObjectBodyLike | null>;\n  list: (options?: {\n    prefix?: string;\n    limit?: number;\n    cursor?: string;\n    delimiter?: string;\n  }) => Promise<R2ObjectsListLike>;\n  put: (\n    key: string,\n    value:\n      | ReadableStream\n      | ArrayBuffer\n      | ArrayBufferView\n      | string\n      | Blob\n      | null,\n    options?: {\n      httpMetadata?: { contentType?: string; [key: string]: unknown };\n      customMetadata?: Record<string, string>;\n    }\n  ) => Promise<unknown>;\n}\n\nexport type AthenaClientCapabilitiesMode = \"gateway\" | \"cloudflare-edge\";\n\nexport interface AthenaDbLayerCapabilities {\n  findManyAst: boolean;\n  flatCrud: boolean;\n  query: boolean;\n  relations: boolean;\n  rpc: boolean;\n}\n\nexport interface AthenaDbCapabilities {\n  engine: \"postgresql\" | \"cloudflare-d1\" | \"unknown\";\n  layers: AthenaDbLayerCapabilities;\n  local: boolean;\n  transactions: AthenaTransactionCapabilities;\n}\n\nexport interface AthenaStorageCapabilities {\n  backups: boolean;\n  catalogs: boolean;\n  local: boolean;\n  objects: boolean;\n}\n\nexport interface AthenaAuthCapabilities {\n  remote: boolean;\n}\n\nexport interface AthenaClientCapabilities {\n  auth: AthenaAuthCapabilities;\n  db: AthenaDbCapabilities;\n  mode: AthenaClientCapabilitiesMode;\n  storage: AthenaStorageCapabilities;\n}\n\nexport const CLOUDFLARE_EDGE_BASE_URL = \"https://athena.local/cloudflare-edge\";\nexport const CLOUDFLARE_EDGE_API_KEY = \"cloudflare-edge-local\";\n","/**\n * Pure D1 execution helpers shared by edge-local SDK transport and (later)\n * apps/cloudflare-d1-proxy.\n */\n\nimport type {\n  D1DatabaseLike,\n  D1ExecResultLike,\n  D1ResultLike,\n  D1SessionLike,\n} from \"../types.ts\";\n\nexport interface D1RunnerSessionInput {\n  bookmark?: string | null;\n  sessionMode?: string | null;\n}\n\nexport type D1QueryInput = D1RunnerSessionInput & {\n  query: string;\n  params?: unknown[];\n};\n\nexport interface D1BatchStatementInput {\n  params?: unknown[];\n  query: string;\n}\n\nexport type D1BatchInput = D1RunnerSessionInput & {\n  statements: D1BatchStatementInput[];\n};\n\nexport interface D1RunnerQuerySuccess {\n  bookmark: string | null;\n  columns: string[];\n  count: number;\n  durationMs?: number;\n  meta: Record<string, unknown>;\n  ok: true;\n  rows: unknown[];\n  statementCount?: number;\n}\n\nexport interface D1RunnerQueryFailure {\n  error: string;\n  message: string;\n  ok: false;\n}\n\nexport type D1RunnerQueryResult = D1RunnerQuerySuccess | D1RunnerQueryFailure;\n\nexport interface D1RunnerBatchSuccess {\n  bookmark: string | null;\n  ok: true;\n  results: D1ResultLike<unknown>[];\n}\n\nexport type D1RunnerBatchResult = D1RunnerBatchSuccess | D1RunnerQueryFailure;\n\nfunction resultColumns(rows: unknown[]): string[] {\n  const first = rows.find(\n    (value) => value && typeof value === \"object\" && !Array.isArray(value)\n  );\n  if (!first) {\n    return [];\n  }\n  return Object.keys(first as Record<string, unknown>);\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Scan SQL while tracking string/identifier literals and comments.\n * Invokes `onKeyword` for each bare identifier token outside those regions.\n * Return true from the callback to stop early.\n */\nfunction scanSqlKeywordsOutsideLiterals(\n  sql: string,\n  onKeyword: (keyword: string, index: number) => boolean | undefined\n): void {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    if (onKeyword(keyword, i)) {\n      return;\n    }\n    i = end - 1;\n  }\n}\n\n/**\n * True when `keyword` appears as a SQL keyword outside string/identifier literals\n * and comments (case-insensitive). Used so `RETURNING` inside string values does\n * not force the all() result path.\n */\nexport function sqlContainsKeywordOutsideLiterals(\n  sql: string,\n  keyword: string\n): boolean {\n  const target = keyword.toUpperCase();\n  let found = false;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    if (token.toUpperCase() === target) {\n      found = true;\n      return true;\n    }\n    return false;\n  });\n  return found;\n}\n\n/**\n * First bare SQL keyword outside leading comments / whitespace / literals.\n * Used so `-- note\\nSELECT …` still classifies as row-producing.\n */\nexport function sqlFirstKeywordOutsideLiterals(sql: string): string | null {\n  let first: string | null = null;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    first = token;\n    return true;\n  });\n  return first;\n}\n\n// VALUES is a row-producing statement in SQLite (not a mutation); WITH … VALUES too.\nconst ROW_PRODUCING_LEAD_KEYWORDS = new Set([\n  \"SELECT\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n  \"VALUES\",\n]);\nconst MUTATION_LEAD_KEYWORDS = new Set([\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n]);\n/** Keywords that open the statement body after a WITH cte-list (SQLite). */\nconst WITH_TERMINAL_KEYWORDS = new Set([\n  \"SELECT\",\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n  \"VALUES\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n]);\n\n/**\n * After a leading `WITH`, find the main statement keyword (SELECT/UPDATE/…)\n * at paren depth 0, skipping CTE bodies. Nested SELECTs inside `AS (…)` are ignored.\n */\nexport function sqlTerminalKeywordAfterWith(sql: string): string | null {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let depth = 0;\n  let sawWith = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth > 0) {\n        depth -= 1;\n      }\n      continue;\n    }\n\n    if (depth !== 0 || !isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    const upper = keyword.toUpperCase();\n\n    if (!sawWith) {\n      if (upper === \"WITH\") {\n        sawWith = true;\n      }\n      i = end - 1;\n      continue;\n    }\n\n    // Inside WITH cte-list at depth 0: RECURSIVE / names / AS / MATERIALIZED …\n    // Terminal main statement is the first recognized opener after CTE bodies.\n    if (WITH_TERMINAL_KEYWORDS.has(upper)) {\n      return keyword;\n    }\n    i = end - 1;\n  }\n  return null;\n}\n\n/**\n * Lead keyword used for all()/run() classification. For `WITH …`, returns the\n * terminal statement keyword so CTE mutations are not treated as SELECT.\n */\nexport function sqlLeadStatementKeyword(sql: string): string | null {\n  const first = sqlFirstKeywordOutsideLiterals(sql);\n  if (!first) {\n    return null;\n  }\n  if (first.toUpperCase() !== \"WITH\") {\n    return first;\n  }\n  return sqlTerminalKeywordAfterWith(sql) ?? first;\n}\n\n/**\n * Whether a prepared statement is expected to return a result set via all().\n * Leading comments, CTE terminal statements, and RETURNING (outside literals)\n * are handled.\n */\nexport function statementExpectsResultRows(sql: string): boolean {\n  const lead = sqlLeadStatementKeyword(sql);\n  if (lead) {\n    const upper = lead.toUpperCase();\n    if (ROW_PRODUCING_LEAD_KEYWORDS.has(upper)) {\n      return true;\n    }\n    // WITH … UPDATE/INSERT/DELETE without RETURNING → metadata path (run()).\n    if (MUTATION_LEAD_KEYWORDS.has(upper)) {\n      return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n    }\n    // Unrecognized lead after WITH: fall through to RETURNING check.\n  }\n  return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n}\n\n/** Flatten D1 batch statement results into a single row array for client.query. */\nfunction collectRowsFromBatchResults(\n  results: D1ResultLike<unknown>[]\n): unknown[] {\n  const rows: unknown[] = [];\n  for (const item of results) {\n    if (Array.isArray(item.results) && item.results.length > 0) {\n      rows.push(...item.results);\n    }\n  }\n  return rows;\n}\n\n/** Sum D1 `meta.changes` across batch items; fall back to statement count. */\nfunction sumBatchAffectedRows(\n  results: D1ResultLike<unknown>[],\n  statementCount: number\n): number {\n  let sum = 0;\n  let sawChanges = false;\n  for (const item of results) {\n    const changes = item.meta?.changes;\n    if (typeof changes === \"number\") {\n      sum += changes;\n      sawChanges = true;\n    }\n  }\n  return sawChanges ? sum : statementCount;\n}\n\n/** Word-boundary keyword match at `index` (ASCII identifiers / SQL keywords). */\nfunction matchSqlKeywordAt(\n  query: string,\n  index: number,\n  keyword: string\n): number | null {\n  const len = keyword.length;\n  if (index + len > query.length) {\n    return null;\n  }\n  const slice = query.slice(index, index + len);\n  if (slice.toLowerCase() !== keyword.toLowerCase()) {\n    return null;\n  }\n  const before = index === 0 ? \"\" : query[index - 1]!;\n  const after = index + len >= query.length ? \"\" : query[index + len]!;\n  const isIdent = (c: string) => /[A-Za-z0-9_]/.test(c);\n  if (before && isIdent(before)) {\n    return null;\n  }\n  if (after && isIdent(after)) {\n    return null;\n  }\n  return len;\n}\n\n/**\n * Split SQL into statements without treating `;` inside string literals,\n * quoted identifiers, comments, or SQLite trigger bodies as separators.\n *\n * Trigger DDL (`CREATE TRIGGER ... BEGIN ...; ...; END`) keeps the body as one\n * statement. Nested `CASE ... END` inside the body does not close the trigger.\n * Bare transaction `BEGIN` / `BEGIN TRANSACTION` is not treated as a body opener.\n */\nexport function splitSqlStatements(query: string): string[] {\n  const statements: string[] = [];\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let segmentStart = 0;\n  let segmentHasContent = false;\n\n  /** After `CREATE TRIGGER`, wait for the body-opening `BEGIN`. */\n  let awaitTriggerBegin = false;\n  /** Depth of open `CREATE TRIGGER ... BEGIN` bodies (normally 0 or 1). */\n  let triggerBodyDepth = 0;\n  /** Nested `CASE` expressions so their `END` does not close a trigger body. */\n  let caseDepth = 0;\n\n  const flushSegment = (end: number) => {\n    if (!segmentHasContent) {\n      segmentStart = end + 1;\n      return;\n    }\n    const sql = query.slice(segmentStart, end).trim();\n    if (sql) {\n      statements.push(sql);\n    }\n    segmentHasContent = false;\n    segmentStart = end + 1;\n    awaitTriggerBegin = false;\n    triggerBodyDepth = 0;\n    caseDepth = 0;\n  };\n\n  for (let i = 0; i < query.length; i += 1) {\n    const ch = query[i]!;\n    const next = query[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i += 1;\n      }\n      continue;\n    }\n\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n\n    // SQLite also allows `backtick` and [bracket] identifiers.\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      inDouble = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"`\") {\n      inBacktick = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"[\") {\n      inBracket = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    // Structural keywords that affect statement boundaries (trigger bodies / CASE).\n    if (/[A-Za-z_]/.test(ch)) {\n      const createLen = matchSqlKeywordAt(query, i, \"CREATE\");\n      if (createLen !== null) {\n        // CREATE [TEMP|TEMPORARY] TRIGGER [IF NOT EXISTS] …\n        // SQLite allows whitespace and comments between these keywords.\n        let j = i + createLen;\n        const skipWsAndComments = () => {\n          while (j < query.length) {\n            const c = query[j]!;\n            const n = query[j + 1];\n            if (/\\s/.test(c)) {\n              j += 1;\n              continue;\n            }\n            if (c === \"-\" && n === \"-\") {\n              j += 2;\n              while (\n                j < query.length &&\n                query[j] !== \"\\n\" &&\n                query[j] !== \"\\r\"\n              ) {\n                j += 1;\n              }\n              continue;\n            }\n            if (c === \"/\" && n === \"*\") {\n              j += 2;\n              while (j < query.length) {\n                if (query[j] === \"*\" && query[j + 1] === \"/\") {\n                  j += 2;\n                  break;\n                }\n                j += 1;\n              }\n              continue;\n            }\n            break;\n          }\n        };\n        skipWsAndComments();\n        const tempLen =\n          matchSqlKeywordAt(query, j, \"TEMPORARY\") ??\n          matchSqlKeywordAt(query, j, \"TEMP\");\n        if (tempLen !== null) {\n          j += tempLen;\n          skipWsAndComments();\n        }\n        const triggerLen = matchSqlKeywordAt(query, j, \"TRIGGER\");\n        if (triggerLen !== null) {\n          awaitTriggerBegin = true;\n          segmentHasContent = true;\n          i += createLen - 1;\n          continue;\n        }\n        segmentHasContent = true;\n        i += createLen - 1;\n        continue;\n      }\n\n      const caseLen = matchSqlKeywordAt(query, i, \"CASE\");\n      if (caseLen !== null) {\n        caseDepth += 1;\n        segmentHasContent = true;\n        i += caseLen - 1;\n        continue;\n      }\n\n      const beginLen = matchSqlKeywordAt(query, i, \"BEGIN\");\n      if (beginLen !== null) {\n        if (awaitTriggerBegin) {\n          triggerBodyDepth += 1;\n          awaitTriggerBegin = false;\n        }\n        segmentHasContent = true;\n        i += beginLen - 1;\n        continue;\n      }\n\n      const endLen = matchSqlKeywordAt(query, i, \"END\");\n      if (endLen !== null) {\n        if (caseDepth > 0) {\n          caseDepth -= 1;\n        } else if (triggerBodyDepth > 0) {\n          triggerBodyDepth -= 1;\n        }\n        segmentHasContent = true;\n        i += endLen - 1;\n        continue;\n      }\n\n      // Consume the rest of this identifier so we do not re-scan mid-token.\n      let j = i + 1;\n      while (j < query.length && /[A-Za-z0-9_]/.test(query[j]!)) {\n        j += 1;\n      }\n      segmentHasContent = true;\n      i = j - 1;\n      continue;\n    }\n\n    if (ch === \";\") {\n      // Keep trigger bodies (and any nested CASE) as a single statement.\n      if (triggerBodyDepth > 0 || caseDepth > 0) {\n        segmentHasContent = true;\n        continue;\n      }\n      flushSegment(i);\n      continue;\n    }\n\n    if (!/\\s/.test(ch)) {\n      segmentHasContent = true;\n    }\n  }\n\n  flushSegment(query.length);\n  return statements;\n}\n\n/**\n * Detect multiple SQL statements without treating `;` inside string literals,\n * quoted identifiers, comments, or trigger bodies as separators.\n */\nexport function isMultiStatement(query: string): boolean {\n  return splitSqlStatements(query).length > 1;\n}\n\nfunction resolveSessionTarget(\n  db: D1DatabaseLike,\n  input: D1RunnerSessionInput\n): { target: D1DatabaseLike | D1SessionLike; session: D1SessionLike | null } {\n  const sessionValue = input.bookmark?.trim() || input.sessionMode?.trim();\n  if (!sessionValue) {\n    return { session: null, target: db };\n  }\n  if (typeof db.withSession !== \"function\") {\n    throw new Error(\n      \"D1 session mode/bookmark requested but withSession is not available\"\n    );\n  }\n  const session = db.withSession(sessionValue);\n  return { session, target: session };\n}\n\n/**\n * D1 prepared-statement bind rejects JS booleans (parameter-type error).\n * Map true→1 / false→0 so .eq('pending', true) and insert bodies work.\n */\nfunction normalizeD1BindParams(params: unknown[]): unknown[] {\n  return params.map((value) => {\n    if (typeof value === \"boolean\") {\n      return value ? 1 : 0;\n    }\n    return value;\n  });\n}\n\n/**\n * Execute a single query (or multi-statement `exec`) against a D1 binding.\n */\nexport async function executeD1Query(\n  db: D1DatabaseLike,\n  input: D1QueryInput\n): Promise<D1RunnerQueryResult> {\n  const query = input.query?.trim();\n  if (!query) {\n    return { error: \"invalid_query\", message: \"query is required\", ok: false };\n  }\n\n  const params = normalizeD1BindParams(\n    Array.isArray(input.params) ? input.params : []\n  );\n  const { target, session } = resolveSessionTarget(db, input);\n\n  if (isMultiStatement(query)) {\n    if (params.length > 0) {\n      return {\n        error: \"invalid_query\",\n        message: \"params are only supported for single prepared statements\",\n        ok: false,\n      };\n    }\n    const resolveBookmark = (): string | null => session?.getBookmark() ?? null;\n    const parts = splitSqlStatements(query);\n    // Prefer batch over exec so row-producing statements (SELECT …) surface\n    // results — D1 exec() only returns statement counts, not result sets.\n    // Sessions also lack exec(); batch(prepare) works on both targets.\n    if (typeof target.batch === \"function\") {\n      const prepared = parts.map((part) => target.prepare(part));\n      const results = await target.batch(prepared);\n      const rows = collectRowsFromBatchResults(results);\n      return {\n        bookmark: resolveBookmark(),\n        columns: resultColumns(rows),\n        // Prefer returned rows; otherwise sum mutation meta.changes (not statement count).\n        count:\n          rows.length > 0\n            ? rows.length\n            : sumBatchAffectedRows(results, parts.length),\n        meta: { results, statementCount: parts.length },\n        ok: true,\n        rows,\n        statementCount: parts.length,\n      };\n    }\n    const canExec =\n      typeof (target as D1DatabaseLike).exec === \"function\" && !session;\n    if (canExec) {\n      const execResult: D1ExecResultLike = await (\n        target as D1DatabaseLike\n      ).exec?.(query);\n      return {\n        bookmark: resolveBookmark(),\n        columns: [],\n        count: execResult.count,\n        durationMs: execResult.duration,\n        meta: { statementCount: execResult.count },\n        ok: true,\n        rows: [],\n        statementCount: execResult.count,\n      };\n    }\n    return {\n      error: \"invalid_query\",\n      message: \"multi-statement query requires D1 batch() or exec() support\",\n      ok: false,\n    };\n  }\n\n  let statement = target.prepare(query);\n  if (params.length > 0) {\n    statement = statement.bind(...params);\n  }\n\n  // Prefer .all() when the statement returns rows. Real D1 bindings only expose\n  // RETURNING result sets via all()/first() — run() is metadata-oriented and can\n  // yield empty results for INSERT/UPDATE/DELETE … RETURNING.\n  // Skip leading comments and detect RETURNING only outside literals/comments.\n  const expectsRows = statementExpectsResultRows(query);\n  const result = expectsRows ? await statement.all() : await statement.run();\n  if (result.success === false) {\n    const errorField = (result as { error?: unknown }).error;\n    const message =\n      typeof errorField === \"string\" && errorField.trim()\n        ? errorField\n        : \"D1 query failed\";\n    return {\n      error: \"query_failed\",\n      message,\n      ok: false,\n    };\n  }\n  const rows = Array.isArray(result.results) ? result.results : [];\n  const bookmark = session?.getBookmark() ?? null;\n  const meta = (result.meta ?? {}) as Record<string, unknown>;\n  const changes =\n    typeof meta.changes === \"number\"\n      ? meta.changes\n      : typeof result.meta?.changes === \"number\"\n        ? result.meta.changes\n        : undefined;\n\n  return {\n    bookmark,\n    columns: resultColumns(rows),\n    count: expectsRows ? rows.length : (changes ?? rows.length),\n    durationMs:\n      typeof result.meta?.duration === \"number\"\n        ? result.meta.duration\n        : undefined,\n    meta,\n    ok: true,\n    rows,\n  };\n}\n\n/**\n * Execute a batch of prepared statements against a D1 binding.\n */\nexport async function executeD1Batch(\n  db: D1DatabaseLike,\n  input: D1BatchInput\n): Promise<D1RunnerBatchResult> {\n  const statements = Array.isArray(input.statements) ? input.statements : [];\n  if (statements.length === 0) {\n    return {\n      error: \"invalid_batch\",\n      message: \"statements must contain at least one item\",\n      ok: false,\n    };\n  }\n\n  const { target, session } = resolveSessionTarget(db, input);\n  const prepared = statements.map((item) => {\n    const query = item.query?.trim();\n    if (!query) {\n      throw new Error(\"statements[].query is required\");\n    }\n    const params = normalizeD1BindParams(\n      Array.isArray(item.params) ? item.params : []\n    );\n    let statement = target.prepare(query);\n    if (params.length > 0) {\n      statement = statement.bind(...params);\n    }\n    return statement;\n  });\n\n  const results = await target.batch(prepared);\n  const bookmark = session?.getBookmark() ?? null;\n  return {\n    bookmark,\n    ok: true,\n    results,\n  };\n}\n","import type {\n\tModelRelationKind,\n\tModelRelationMetadata,\n} from \"../../schema/types.ts\";\nimport type { AthenaSourceAst } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\n\nexport type AthenaRelationCardinality =\n\t| \"one-to-one\"\n\t| \"one-to-many\"\n\t| \"many-to-one\"\n\t| \"many-to-many\";\n\nexport interface AthenaRelationEnd {\n\tcolumns: string[];\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaRelationDescriptor {\n\tcardinality: AthenaRelationCardinality;\n\tfrom: AthenaRelationEnd;\n\tid: string;\n\tjunction?: {\n\t\tfromColumns: string[];\n\t\tschema?: string;\n\t\ttable: string;\n\t\ttoColumns: string[];\n\t};\n\tname: string;\n\tto: AthenaRelationEnd;\n}\n\nexport interface AthenaRelationCatalog {\n\tentries: AthenaRelationDescriptor[];\n}\n\nfunction sameTable(\n\tleft: { schema?: string; table: string },\n\tright: { schema?: string; table: string },\n): boolean {\n\tif (left.table !== right.table) {\n\t\treturn false;\n\t}\n\tif (left.schema && right.schema) {\n\t\treturn left.schema === right.schema;\n\t}\n\treturn true;\n}\n\nfunction invertCardinality(\n\tcardinality: AthenaRelationCardinality,\n): AthenaRelationCardinality {\n\tif (cardinality === \"one-to-many\") {\n\t\treturn \"many-to-one\";\n\t}\n\tif (cardinality === \"many-to-one\") {\n\t\treturn \"one-to-many\";\n\t}\n\treturn cardinality;\n}\n\nexport function catalogFromModelRelations(input: {\n\tschema?: string;\n\ttable: string;\n\trelations: Record<string, ModelRelationMetadata>;\n}): AthenaRelationCatalog {\n\tconst entries: AthenaRelationDescriptor[] = [];\n\tfor (const [name, relation] of Object.entries(input.relations)) {\n\t\tentries.push({\n\t\t\tcardinality: relation.kind as ModelRelationKind,\n\t\t\tfrom: {\n\t\t\t\tcolumns: relation.sourceColumns.map(String),\n\t\t\t\tschema: input.schema,\n\t\t\t\ttable: input.table,\n\t\t\t},\n\t\t\tid: `${input.schema ?? \"_\"}.${input.table}.${name}`,\n\t\t\tjunction: relation.through\n\t\t\t\t? {\n\t\t\t\t\t\tfromColumns: relation.through.sourceColumns.map(String),\n\t\t\t\t\t\tschema: relation.through.schema,\n\t\t\t\t\t\ttable: relation.through.model,\n\t\t\t\t\t\ttoColumns: relation.through.targetColumns.map(String),\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tname,\n\t\t\tto: {\n\t\t\t\tcolumns: relation.targetColumns.map(String),\n\t\t\t\tschema: relation.targetSchema,\n\t\t\t\ttable: relation.targetModel,\n\t\t\t},\n\t\t});\n\t}\n\treturn { entries };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectModels(\n\tinput: unknown,\n\tfound: Array<Record<string, unknown>>,\n): void {\n\tif (!isRecord(input)) {\n\t\treturn;\n\t}\n\tconst meta = input.meta;\n\tif (isRecord(meta) && Array.isArray(meta.primaryKey)) {\n\t\tfound.push(input);\n\t\treturn;\n\t}\n\tif (isRecord(input.models)) {\n\t\tcollectModels(input.models, found);\n\t\treturn;\n\t}\n\tif (isRecord(input.schemas)) {\n\t\tcollectModels(input.schemas, found);\n\t\treturn;\n\t}\n\tfor (const value of Object.values(input)) {\n\t\tcollectModels(value, found);\n\t}\n}\n\n/**\n * Priority-1 catalog: explicit AthenaModels relation metadata.\n * Compilers merge this ahead of live FK introspection.\n */\nexport function catalogFromModels(models: unknown): AthenaRelationCatalog {\n\tconst found: Array<Record<string, unknown>> = [];\n\tcollectModels(models, found);\n\tconst catalogs: AthenaRelationCatalog[] = [];\n\tfor (const model of found) {\n\t\tconst meta = isRecord(model.meta) ? model.meta : {};\n\t\tconst relations = isRecord(meta.relations)\n\t\t\t? (meta.relations as Record<string, ModelRelationMetadata>)\n\t\t\t: undefined;\n\t\tif (!relations || Object.keys(relations).length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst tableName =\n\t\t\t(typeof model.tableName === \"string\" && model.tableName) ||\n\t\t\t(typeof meta.tableName === \"string\" && meta.tableName) ||\n\t\t\t(typeof meta.model === \"string\" && meta.model) ||\n\t\t\t\"\";\n\t\tif (!tableName) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst schema =\n\t\t\ttypeof meta.schema === \"string\" && meta.schema.trim()\n\t\t\t\t? meta.schema.trim()\n\t\t\t\t: tableName.includes(\".\")\n\t\t\t\t\t? tableName.split(\".\")[0]\n\t\t\t\t\t: undefined;\n\t\tconst table = tableName.includes(\".\")\n\t\t\t? (tableName.split(\".\").pop() as string)\n\t\t\t: tableName;\n\t\tcatalogs.push(\n\t\t\tcatalogFromModelRelations({\n\t\t\t\trelations,\n\t\t\t\tschema,\n\t\t\t\ttable,\n\t\t\t}),\n\t\t);\n\t}\n\treturn mergeRelationCatalogs(...catalogs);\n}\n\nexport function mergeRelationCatalogs(\n\t...catalogs: Array<AthenaRelationCatalog | undefined>\n): AthenaRelationCatalog {\n\tconst entries: AthenaRelationDescriptor[] = [];\n\tconst seen = new Set<string>();\n\tfor (const catalog of catalogs) {\n\t\tif (!catalog) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of catalog.entries) {\n\t\t\tif (seen.has(entry.id)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(entry.id);\n\t\t\tentries.push(entry);\n\t\t}\n\t}\n\treturn { entries };\n}\n\nexport function resolveRelation(input: {\n\tcatalog: AthenaRelationCatalog;\n\tname: string;\n\tsource: AthenaSourceAst;\n\ttargetHint?: AthenaSourceAst;\n}): AthenaRelationDescriptor {\n\tconst byName = input.catalog.entries.filter(\n\t\t(entry) => entry.name === input.name && sameTable(entry.from, input.source),\n\t);\n\tif (byName.length === 1) {\n\t\treturn byName[0] as AthenaRelationDescriptor;\n\t}\n\tif (byName.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Relation \"${input.name}\" is ambiguous on ${input.source.table}`,\n\t\t);\n\t}\n\n\tconst targetTable = input.targetHint?.table ?? input.name;\n\tconst targetSchema = input.targetHint?.schema;\n\tconst outgoing = input.catalog.entries.filter(\n\t\t(entry) =>\n\t\t\tsameTable(entry.from, input.source) &&\n\t\t\tentry.to.table === targetTable &&\n\t\t\t(!targetSchema || !entry.to.schema || entry.to.schema === targetSchema),\n\t);\n\tif (outgoing.length === 1) {\n\t\treturn outgoing[0] as AthenaRelationDescriptor;\n\t}\n\tif (outgoing.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Multiple foreign keys from ${input.source.table} to ${targetTable}`,\n\t\t);\n\t}\n\n\tconst incoming = input.catalog.entries.filter(\n\t\t(entry) =>\n\t\t\tsameTable(entry.to, input.source) &&\n\t\t\tentry.from.table === targetTable &&\n\t\t\t(!targetSchema ||\n\t\t\t\t!entry.from.schema ||\n\t\t\t\tentry.from.schema === targetSchema),\n\t);\n\tif (incoming.length === 1) {\n\t\tconst found = incoming[0] as AthenaRelationDescriptor;\n\t\treturn {\n\t\t\t...found,\n\t\t\tcardinality: invertCardinality(found.cardinality),\n\t\t\tfrom: found.to,\n\t\t\tname: input.name,\n\t\t\tto: found.from,\n\t\t};\n\t}\n\tif (incoming.length > 1) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n\t\t\t`Multiple foreign keys from ${targetTable} to ${input.source.table}`,\n\t\t);\n\t}\n\n\tthrow new AthenaQueryError(\n\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t`Unknown relation \"${input.name}\" on ${input.source.schema ? `${input.source.schema}.` : \"\"}${input.source.table}`,\n\t);\n}\n","import type {\n\tAthenaConditionAst,\n\tAthenaOrderAst,\n\tAthenaPaginationAst,\n\tAthenaQueryCardinality,\n\tAthenaSelectQueryAst,\n\tAthenaSourceAst,\n} from \"./ast.ts\";\nimport { selectionHasRelations } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport type {\n\tAthenaRelationCatalog,\n\tAthenaRelationDescriptor,\n} from \"./relations.ts\";\nimport { resolveRelation } from \"./relations.ts\";\nimport { validateSelectQueryAst } from \"./validate.ts\";\n\nexport interface AthenaResolvedSource {\n\talias: string;\n\tmodelId?: string;\n\tschema?: string;\n\ttable: string;\n}\n\nexport interface AthenaResolvedColumn {\n\talias?: string;\n\tcolumn: string;\n\tkind: \"column\";\n}\n\nexport interface AthenaResolvedRelation {\n\talias: string;\n\tdescriptor: AthenaRelationDescriptor;\n\tjunctionAlias?: string;\n\tkind: \"relation\";\n\tplan: AthenaQueryPlan;\n}\n\nexport type AthenaResolvedSelectionField =\n\t| AthenaResolvedColumn\n\t| AthenaResolvedRelation;\n\nexport interface AthenaQueryPlan {\n\tast: AthenaSelectQueryAst;\n\tcardinality: AthenaQueryCardinality;\n\tfilter?: AthenaConditionAst;\n\tkind: \"resolved-select\";\n\torderBy?: AthenaOrderAst[];\n\tpagination?: AthenaPaginationAst;\n\tselection: AthenaResolvedSelectionField[];\n\tsource: AthenaResolvedSource;\n}\n\nclass AthenaQueryAliasAllocator {\n\tprivate seq = 0;\n\n\tnext(prefix: string): string {\n\t\tthis.seq += 1;\n\t\treturn `${prefix}${this.seq}`;\n\t}\n}\n\n/**\n * @deprecated Planning allocates aliases per invocation. Kept as a no-op\n * for existing tests that reset between cases.\n */\nexport function resetQueryPlanAliases(): void {}\n\nexport function isAthenaQueryPlan(value: unknown): value is AthenaQueryPlan {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\treturn (value as { kind?: unknown }).kind === \"resolved-select\";\n}\n\ninterface ResolveQueryPlanOptions {\n\taliasPrefix?: string;\n\taliases?: AthenaQueryAliasAllocator;\n\tcatalog?: AthenaRelationCatalog;\n\tpath?: string[];\n}\n\nexport function resolveAthenaQueryPlan(\n\tast: AthenaSelectQueryAst,\n\toptions?: ResolveQueryPlanOptions,\n): AthenaQueryPlan {\n\treturn resolveQueryPlan(ast, options);\n}\n\nexport function resolveQueryPlan(\n\tast: AthenaSelectQueryAst,\n\toptions?: ResolveQueryPlanOptions,\n): AthenaQueryPlan {\n\tvalidateSelectQueryAst(ast);\n\tconst aliases = options?.aliases ?? new AthenaQueryAliasAllocator();\n\tconst path = options?.path ?? [ast.source.table];\n\tconst source: AthenaResolvedSource = {\n\t\talias: ast.source.alias ?? aliases.next(options?.aliasPrefix ?? \"t\"),\n\t\tmodelId: ast.source.modelId,\n\t\tschema: ast.source.schema,\n\t\ttable: ast.source.table,\n\t};\n\n\tconst selection: AthenaResolvedSelectionField[] = [];\n\tconst outputAliases = new Set<string>();\n\tfor (const field of ast.selection.fields) {\n\t\tif (field.kind === \"column\") {\n\t\t\tconst outputAlias = field.alias ?? field.column;\n\t\t\tif (outputAliases.has(outputAlias)) {\n\t\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\t\t`Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\toutputAliases.add(outputAlias);\n\t\t\tselection.push({\n\t\t\t\talias: field.alias,\n\t\t\t\tcolumn: field.column,\n\t\t\t\tkind: \"column\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!options?.catalog) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t\t\t`Relation \"${field.relation}\" cannot be resolved without relation metadata at ${path.join(\".\")}.${field.relation}`,\n\t\t\t);\n\t\t}\n\n\t\tconst descriptor = resolveRelation({\n\t\t\tcatalog: options.catalog,\n\t\t\tname: field.relation,\n\t\t\tsource: ast.source,\n\t\t\ttargetHint: field.query.source,\n\t\t});\n\n\t\tconst nestedSource: AthenaSourceAst = {\n\t\t\t...field.query.source,\n\t\t\tschema: field.query.source.schema ?? descriptor.to.schema,\n\t\t\ttable: descriptor.to.table,\n\t\t};\n\n\t\tconst outputAlias = field.alias ?? field.relation;\n\t\tif (outputAliases.has(outputAlias)) {\n\t\t\tthrow new AthenaQueryError(\n\t\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\t`Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`,\n\t\t\t);\n\t\t}\n\t\toutputAliases.add(outputAlias);\n\n\t\tconst nestedPlan = resolveQueryPlan(\n\t\t\t{\n\t\t\t\t...field.query,\n\t\t\t\tsource: nestedSource,\n\t\t\t},\n\t\t\t{\n\t\t\t\taliasPrefix: \"r\",\n\t\t\t\taliases,\n\t\t\t\tcatalog: options.catalog,\n\t\t\t\tpath: [...path, outputAlias],\n\t\t\t},\n\t\t);\n\n\t\tselection.push({\n\t\t\talias: outputAlias,\n\t\t\tdescriptor,\n\t\t\tjunctionAlias:\n\t\t\t\tdescriptor.cardinality === \"many-to-many\"\n\t\t\t\t\t? aliases.next(\"j\")\n\t\t\t\t\t: undefined,\n\t\t\tkind: \"relation\",\n\t\t\tplan: nestedPlan,\n\t\t});\n\t}\n\n\tif (selection.length === 0) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_INVALID_SELECTION\",\n\t\t\t\"Resolved selection is empty\",\n\t\t);\n\t}\n\n\treturn {\n\t\tast,\n\t\tcardinality: ast.cardinality,\n\t\tfilter: ast.filter\n\t\t\t? resolveCondition(ast.filter, {\n\t\t\t\t\taliases,\n\t\t\t\t\tcatalog: options?.catalog,\n\t\t\t\t\tpath,\n\t\t\t\t\tsource: ast.source,\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tkind: \"resolved-select\",\n\t\torderBy: ast.orderBy,\n\t\tpagination: ast.pagination,\n\t\tselection,\n\t\tsource,\n\t};\n}\n\nfunction resolveCondition(\n\tcondition: AthenaConditionAst,\n\tcontext: {\n\t\taliases: AthenaQueryAliasAllocator;\n\t\tcatalog?: AthenaRelationCatalog;\n\t\tpath: string[];\n\t\tsource: AthenaSourceAst;\n\t},\n): AthenaConditionAst {\n\tif (condition.kind === \"and\" || condition.kind === \"or\") {\n\t\treturn {\n\t\t\tconditions: condition.conditions.map((child) =>\n\t\t\t\tresolveCondition(child, context),\n\t\t\t),\n\t\t\tkind: condition.kind,\n\t\t};\n\t}\n\tif (condition.kind === \"not\") {\n\t\treturn {\n\t\t\tcondition: resolveCondition(condition.condition, context),\n\t\t\tkind: \"not\",\n\t\t};\n\t}\n\tif (condition.kind === \"resolved-relation\") {\n\t\treturn {\n\t\t\t...condition,\n\t\t\tfilter: condition.filter\n\t\t\t\t? resolveCondition(condition.filter, {\n\t\t\t\t\t\t...context,\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tkind: \"table\",\n\t\t\t\t\t\t\tmodelId: condition.target.modelId,\n\t\t\t\t\t\t\tschema: condition.target.schema,\n\t\t\t\t\t\t\ttable: condition.target.table,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\tif (condition.kind !== \"relation\") {\n\t\treturn condition;\n\t}\n\n\tif (!context.catalog) {\n\t\tthrow new AthenaQueryError(\n\t\t\t\"ATHENA_QUERY_UNKNOWN_RELATION\",\n\t\t\t`Relation \"${condition.relation}\" cannot be resolved without relation metadata at ${context.path.join(\".\")}.${condition.relation}`,\n\t\t);\n\t}\n\n\tconst descriptor = resolveRelation({\n\t\tcatalog: context.catalog,\n\t\tname: condition.via ?? condition.relation,\n\t\tsource: context.source,\n\t});\n\tconst target = {\n\t\talias: context.aliases.next(\"r\"),\n\t\tschema: descriptor.to.schema,\n\t\ttable: descriptor.to.table,\n\t};\n\tconst nestedSource: AthenaSourceAst = {\n\t\tkind: \"table\",\n\t\tschema: descriptor.to.schema,\n\t\ttable: descriptor.to.table,\n\t};\n\treturn {\n\t\tdescriptor,\n\t\tfilter: condition.filter\n\t\t\t? resolveCondition(condition.filter, {\n\t\t\t\t\taliases: context.aliases,\n\t\t\t\t\tcatalog: context.catalog,\n\t\t\t\t\tpath: [...context.path, condition.relation],\n\t\t\t\t\tsource: nestedSource,\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tjunctionAlias:\n\t\t\tdescriptor.cardinality === \"many-to-many\"\n\t\t\t\t? context.aliases.next(\"j\")\n\t\t\t\t: undefined,\n\t\tkind: \"resolved-relation\",\n\t\tpredicate: condition.predicate,\n\t\trelation: condition.relation,\n\t\ttarget,\n\t};\n}\n\nexport function planHasRelations(plan: AthenaQueryPlan): boolean {\n\treturn (\n\t\tplan.selection.some((field) => field.kind === \"relation\") ||\n\t\tselectionHasRelations(plan.ast)\n\t);\n}\n","export type {\n  AthenaBooleanConditionAst,\n  AthenaColumnSelectionAst,\n  AthenaCompareConditionAst,\n  AthenaCompareOperator,\n  AthenaConditionAst,\n  AthenaContainmentConditionAst,\n  AthenaDistinctAst,\n  AthenaFieldRefAst,\n  AthenaInConditionAst,\n  AthenaIsNullConditionAst,\n  AthenaLogicalConditionAst,\n  AthenaNotConditionAst,\n  AthenaOrderAst,\n  AthenaPaginationAst,\n  AthenaQueryAst,\n  AthenaQueryCardinality,\n  AthenaRelationConditionAst,\n  AthenaRelationPredicate,\n  AthenaRelationSelectionAst,\n  AthenaResolvedRelationConditionAst,\n  AthenaSelectedFieldAst,\n  AthenaSelectionAst,\n  AthenaSelectQueryAst,\n  AthenaSourceAst,\n} from \"./ast.ts\";\nexport {\n  collectAstTables,\n  isAthenaSelectQueryAst,\n  selectionHasRelations,\n} from \"./ast.ts\";\nexport type {\n  AthenaQueryBackend,\n  AthenaQueryCapabilityMatrix,\n} from \"./capabilities.ts\";\nexport {\n  D1_QUERY_CAPABILITIES,\n  GATEWAY_QUERY_CAPABILITIES,\n  POSTGRES_QUERY_CAPABILITIES,\n} from \"./capabilities.ts\";\nexport type { AthenaQueryErrorCode } from \"./errors.ts\";\nexport { AthenaQueryError } from \"./errors.ts\";\nexport {\n  canonicalizePagination,\n  isFindManyAstPayload,\n  normalizeFindFirstInput,\n  normalizeFindManyInput,\n  normalizeFindUniqueInput,\n  normalizeGatewayConditions,\n  normalizeOrderBy,\n  normalizePagination,\n  normalizeTransportPayload,\n  normalizeWhere,\n  parseSelectList,\n  parseSourceName,\n  selectPayloadHasRelations,\n  whereHasRelationPredicates,\n} from \"./normalize.ts\";\nexport type {\n  AthenaQueryPlan,\n  AthenaResolvedColumn,\n  AthenaResolvedRelation,\n  AthenaResolvedSelectionField,\n  AthenaResolvedSource,\n} from \"./plan.ts\";\nexport {\n  isAthenaQueryPlan,\n  planHasRelations,\n  resetQueryPlanAliases,\n  resolveAthenaQueryPlan,\n  resolveQueryPlan,\n} from \"./plan.ts\";\nexport type {\n  AthenaRelationCardinality,\n  AthenaRelationCatalog,\n  AthenaRelationDescriptor,\n  AthenaRelationEnd,\n} from \"./relations.ts\";\nexport {\n  catalogFromModelRelations,\n  catalogFromModels,\n  mergeRelationCatalogs,\n  resolveRelation,\n} from \"./relations.ts\";\nexport {\n  countAstRelations,\n  DEFAULT_QUERY_MAX_NESTED_DEPTH,\n  DEFAULT_QUERY_MAX_RELATIONS,\n  measureAstDepth,\n  validatePlanAgainstCapabilities,\n  validateQueryComplexity,\n  validateSelectQueryAst,\n} from \"./validate.ts\";\n","/**\n * Normalize PostgREST-style fluent `.or(string)` / `.not(...)` expressions\n * into a structured boolean tree before backend SQL compile.\n *\n * Supported:\n *   deleted.eq.false,deleted.is.null\n *   and(status.eq.active,deleted.is.null)\n *   or(and(a.eq.1,b.eq.2),c.eq.3)\n *   not.status.eq.offline\n *   not.and(status.eq.offline,role.eq.guest)\n *   (status.eq.active,role.eq.admin)\n */\nimport type {\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n} from \"../gateway/types.ts\";\n\nconst SIMPLE_OPERATORS = new Set<AthenaConditionOperator>([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n  \"in\",\n]);\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nexport class LegacyBooleanParseError extends Error {\n  readonly code = \"legacy_boolean_parse\";\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"LegacyBooleanParseError\";\n  }\n}\n\nexport type LegacyBooleanNode =\n  | { kind: \"pred\"; condition: AthenaGatewayCondition }\n  | { children: LegacyBooleanNode[]; kind: \"and\" | \"or\" }\n  | { child: LegacyBooleanNode; kind: \"not\" };\n\nfunction coerceScalar(raw: string): AthenaConditionValue {\n  const trimmed = raw.trim();\n  if (trimmed === \"null\") {\n    return null;\n  }\n  if (trimmed === \"true\") {\n    return true;\n  }\n  if (trimmed === \"false\") {\n    return false;\n  }\n  if (trimmed === \"\") {\n    return \"\";\n  }\n  if (/^-?\\d+$/.test(trimmed)) {\n    return Number(trimmed);\n  }\n  if (/^-?\\d+\\.\\d+$/.test(trimmed)) {\n    return Number(trimmed);\n  }\n  return trimmed;\n}\n\nexport function splitTopLevel(expression: string, separator: \",\"): string[] {\n  const parts: string[] = [];\n  let depth = 0;\n  let current = \"\";\n  for (const ch of expression) {\n    if (ch === \"(\") {\n      depth += 1;\n    } else if (ch === \")\") {\n      depth = Math.max(0, depth - 1);\n    }\n    if (ch === separator && depth === 0) {\n      if (current.trim()) {\n        parts.push(current.trim());\n      }\n      current = \"\";\n      continue;\n    }\n    current += ch;\n  }\n  if (current.trim()) {\n    parts.push(current.trim());\n  }\n  return parts;\n}\n\nfunction unwrapBalancedParens(token: string): string | null {\n  const trimmed = token.trim();\n  if (!(trimmed.startsWith(\"(\") && trimmed.endsWith(\")\"))) {\n    return null;\n  }\n  let depth = 0;\n  for (let i = 0; i < trimmed.length; i += 1) {\n    if (trimmed[i] === \"(\") {\n      depth += 1;\n    } else if (trimmed[i] === \")\") {\n      depth -= 1;\n      if (depth === 0 && i !== trimmed.length - 1) {\n        return null;\n      }\n    }\n  }\n  return depth === 0 ? trimmed.slice(1, -1) : null;\n}\n\nfunction parseGroupCall(token: string, name: \"and\" | \"or\"): string | null {\n  const match = new RegExp(`^${name}\\\\s*\\\\((.*)\\\\)$`, \"is\").exec(token.trim());\n  if (!match) {\n    return null;\n  }\n  return match[1] ?? \"\";\n}\n\nfunction parsePredicate(token: string): AthenaGatewayCondition {\n  const parts = token.split(\".\");\n  if (parts.length < 3) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean predicate must be column.op.value: ${token}`,\n    );\n  }\n  const column = parts[0]?.trim() ?? \"\";\n  const operator = (parts[1]?.trim().toLowerCase() ??\n    \"\") as AthenaConditionOperator;\n  const rawValue = parts.slice(2).join(\".\");\n  if (!IDENTIFIER.test(column)) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean column is not a safe identifier: ${column}`,\n    );\n  }\n  if (!SIMPLE_OPERATORS.has(operator)) {\n    throw new LegacyBooleanParseError(\n      `Legacy boolean operator \"${operator}\" is not supported`,\n    );\n  }\n  if (operator === \"in\") {\n    const inner = rawValue.replace(/^\\(|\\)$/g, \"\");\n    const values = splitTopLevel(inner, \",\").map(coerceScalar);\n    return { column, operator, value: values as never };\n  }\n  return {\n    column,\n    operator,\n    value: coerceScalar(rawValue),\n  };\n}\n\nfunction parseBooleanList(\n  expression: string,\n  join: \"and\" | \"or\",\n): LegacyBooleanNode {\n  const parts = splitTopLevel(expression, \",\");\n  if (parts.length === 0) {\n    throw new LegacyBooleanParseError(\"Legacy boolean expression is empty\");\n  }\n  const children = parts.map(parseTerm);\n  if (children.length === 1) {\n    return children[0] as LegacyBooleanNode;\n  }\n  return { children, kind: join };\n}\n\nfunction parseTerm(token: string): LegacyBooleanNode {\n  const trimmed = token.trim();\n  if (!trimmed) {\n    throw new LegacyBooleanParseError(\"Empty legacy boolean term\");\n  }\n\n  const andInner = parseGroupCall(trimmed, \"and\");\n  if (andInner !== null) {\n    return parseBooleanList(andInner, \"and\");\n  }\n  const orInner = parseGroupCall(trimmed, \"or\");\n  if (orInner !== null) {\n    return parseBooleanList(orInner, \"or\");\n  }\n\n  const notCall = /^not\\s*\\((.*)\\)$/is.exec(trimmed);\n  if (notCall) {\n    return { child: parseBooleanList(notCall[1] ?? \"\", \"and\"), kind: \"not\" };\n  }\n  if (/^not\\./i.test(trimmed)) {\n    return { child: parseTerm(trimmed.slice(4)), kind: \"not\" };\n  }\n\n  const grouped = unwrapBalancedParens(trimmed);\n  if (grouped !== null) {\n    return parseBooleanList(grouped, \"and\");\n  }\n\n  return { condition: parsePredicate(trimmed), kind: \"pred\" };\n}\n\nexport function parseLegacyBooleanExpression(\n  expression: string,\n  root: \"and\" | \"or\" = \"or\",\n): LegacyBooleanNode {\n  const trimmed = expression.trim();\n  if (!trimmed) {\n    throw new LegacyBooleanParseError(\"Legacy boolean expression is empty\");\n  }\n  return parseBooleanList(trimmed, root);\n}\n\n/**\n * Parse `.or(\"deleted.eq.false,deleted.is.null\")` into structured conditions\n * when the expression is a flat OR of predicates. Nested trees stay as a\n * single `or`/`and`/`not` node for the SQL compiler.\n */\nexport function parseLegacyOrExpression(\n  expression: string,\n): AthenaGatewayCondition[] {\n  const tree = parseLegacyBooleanExpression(expression, \"or\");\n  if (tree.kind === \"pred\") {\n    return [tree.condition];\n  }\n  if (\n    tree.kind === \"or\" &&\n    tree.children.every((child) => child.kind === \"pred\")\n  ) {\n    return tree.children.map((child) =>\n      child.kind === \"pred\" ? child.condition : child,\n    ) as AthenaGatewayCondition[];\n  }\n  throw new LegacyBooleanParseError(\n    \"Nested .or() groups require parseLegacyBooleanExpression\",\n  );\n}\n\nexport function compileLegacyBooleanNode(\n  node: LegacyBooleanNode,\n  compilePredicate: (condition: AthenaGatewayCondition) => string,\n): string {\n  switch (node.kind) {\n    case \"pred\":\n      return compilePredicate(node.condition);\n    case \"and\":\n      return `(${node.children.map((child) => compileLegacyBooleanNode(child, compilePredicate)).join(\" AND \")})`;\n    case \"or\":\n      return `(${node.children.map((child) => compileLegacyBooleanNode(child, compilePredicate)).join(\" OR \")})`;\n    case \"not\":\n      return `(NOT (${compileLegacyBooleanNode(node.child, compilePredicate)}))`;\n    default:\n      throw new LegacyBooleanParseError(\"Unknown legacy boolean node\");\n  }\n}\n","/**\n * L1 D1/SQLite SQL compiler for flat gateway payloads.\n * Aligned with gateway D1 matrix: flat select/insert/update/delete + upsert.\n */\n\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport {\n  compileLegacyBooleanNode,\n  LegacyBooleanParseError,\n  parseLegacyBooleanExpression,\n} from \"../../query/legacy-boolean.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\n\nexport interface D1CompiledStatement {\n  params: unknown[];\n  sql: string;\n}\n\n/**\n * One or more statements. Sparse multi-row inserts without NULL-coercion expand\n * into a batch of single-row inserts (SQLite rejects `DEFAULT` in VALUES tuples).\n */\nexport type D1CompiledSql = D1CompiledStatement & {\n  statements?: D1CompiledStatement[];\n};\n\nfunction asSingle(sql: string, params: unknown[]): D1CompiledSql {\n  return { params, sql };\n}\n\nfunction asBatch(statements: D1CompiledStatement[]): D1CompiledSql {\n  if (statements.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"batch requires at least one statement\"\n    );\n  }\n  return {\n    params: statements[0]?.params,\n    sql: statements[0]?.sql,\n    statements,\n  };\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/**\n * Ensure mutation pagination actually produces a LIMIT/OFFSET clause.\n * `.currentPage(n)` alone would otherwise look \"bounded\" but emit no limit and\n * update/delete every matching row.\n */\nfunction assertEffectiveMutationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): void {\n  if (\n    payload.current_page !== undefined &&\n    payload.page_size === undefined &&\n    payload.limit === undefined\n  ) {\n    throw new D1SqlCompileError(\n      \"page_without_size\",\n      \"current_page requires page_size (or limit) for bounded update/delete on D1 edge-local\"\n    );\n  }\n  const clause = limitOffsetClause(payload);\n  if (!clause.trim()) {\n    throw new D1SqlCompileError(\n      \"invalid_pagination_bounds\",\n      \"Bounded update/delete requires limit, offset, and/or page_size on D1 edge-local\"\n    );\n  }\n}\n\n/**\n * SQLite system row identity aliases. A user column with any of these names\n * shadows the system rowid — bounded mutations would then be unsafe.\n */\nconst SQLITE_ROWID_ALIASES = new Set([\"rowid\", \"oid\", \"_rowid_\"]);\n\n/** Optional compile-time options for D1 SQL compilation. */\nexport interface D1CompileOptions {\n  /**\n   * Proven single-column unique identity for bounded UPDATE/DELETE (from\n   * PRAGMA table_info / unique indexes, or an explicit caller override).\n   * Required for limit/offset/page bounded mutations.\n   */\n  identityColumn?: string;\n}\n\nfunction referencedMutationColumns(payload: {\n  conditions?: AthenaGatewayCondition[];\n  sort_by?: AthenaSortBy;\n}): string[] {\n  const names: string[] = [];\n  for (const condition of payload.conditions ?? []) {\n    const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n    if (column) {\n      names.push(column);\n    }\n  }\n  if (payload.sort_by?.field?.trim()) {\n    names.push(payload.sort_by.field.trim());\n  }\n  return names;\n}\n\n/**\n * Choose a safe identity expression for bounded update/delete, or throw.\n *\n * Pure L1 has no live schema: callers (transport) must supply a proven unique\n * `identityColumn` (single-column PK or unique index). Never assume `id`.\n * Reject filters/order that reference shadowable rowid aliases.\n */\nfunction resolveBoundedIdentityColumn(\n  payload: {\n    conditions?: AthenaGatewayCondition[];\n    sort_by?: AthenaSortBy;\n  },\n  options?: D1CompileOptions\n): string {\n  const refs = referencedMutationColumns(payload);\n  const lower = refs.map((name) => name.toLowerCase());\n\n  if (lower.some((name) => SQLITE_ROWID_ALIASES.has(name))) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      \"Bounded update/delete cannot use rowid/oid/_rowid_ in filters or order — \" +\n        \"those names may be user columns that shadow SQLite row identity. \" +\n        \"Resolve the table primary key (or a single-column unique index) instead.\"\n    );\n  }\n\n  const identity = options?.identityColumn?.trim();\n  if (!identity) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      \"Bounded update/delete requires a proven unique identity column from the table schema \" +\n        \"(single-column PRIMARY KEY or UNIQUE index). Cannot assume a column named id.\"\n    );\n  }\n  if (SQLITE_ROWID_ALIASES.has(identity.toLowerCase())) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      `Bounded update/delete cannot use identity column \"${identity}\" — ` +\n        \"it may shadow SQLite row identity.\"\n    );\n  }\n  return identity;\n}\n\n/**\n * SQLite-compatible bounded mutation via unique-identity subquery.\n * Uses `\"pk\" IN (SELECT \"pk\" … LIMIT …)` — not system `_rowid_`.\n */\nfunction boundedRowidInClause(\n  table: string,\n  whereSql: string,\n  whereParams: unknown[],\n  payload: {\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: AthenaSortBy;\n    conditions?: AthenaGatewayCondition[];\n  },\n  options?: D1CompileOptions\n): { sql: string; params: unknown[] } {\n  assertEffectiveMutationBounds(payload);\n  const identity = resolveBoundedIdentityColumn(payload, options);\n  const identitySql = quoteIdent(identity);\n  const innerWhere = whereSql.replace(/^WHERE\\s+/i, \"\");\n  const parts = [\n    `SELECT ${identitySql} FROM ${quoteIdent(table)}`,\n    innerWhere ? `WHERE ${innerWhere}` : \"\",\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return {\n    params: [...whereParams],\n    sql: `${identitySql} IN (${parts.join(\" \")})`,\n  };\n}\n\nexport class D1SqlCompileError extends Error {\n  readonly code: string;\n\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = \"D1SqlCompileError\";\n    this.code = code;\n  }\n}\n\n/** Simple SQL identifier: letter/underscore start, then alphanumerics/underscore. */\nconst SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/**\n * Drop-in mapping for Postgres-oriented AthenaModels on D1/SQLite.\n *\n * D1 has no schemas. Gateway/model wire names like `public.users` (from\n * `table('users').schema('public')` or `meta.tableName: \"public.users\"`) are\n * reduced to the bare table segment so the same models work on edge without\n * rewriting registries.\n *\n * Multi-schema collisions (`public.users` vs `analytics.users` → both `users`)\n * must be disambiguated with an explicit physical name\n * (`.from('analytics_users')` / `meta.tableName: \"analytics_users\"`).\n */\nexport function normalizeD1TableName(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new D1SqlCompileError(\"invalid_identifier\", \"Identifier is required\");\n  }\n  if (!trimmed.includes(\".\")) {\n    return trimmed;\n  }\n  const segments = trimmed\n    .split(\".\")\n    .map((segment) => segment.trim())\n    .filter(Boolean);\n  if (segments.length < 2) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid schema-qualified name for D1 edge-local: ${trimmed}`\n    );\n  }\n  return segments.at(-1)!;\n}\n\nfunction quoteIdent(name: string): string {\n  const bare = normalizeD1TableName(name);\n  // Reject quotes, whitespace, and other characters that would only appear\n  // if a caller tried to smuggle SQL past quoting.\n  if (!SAFE_IDENTIFIER.test(bare)) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for D1 edge-local: ${bare}`\n    );\n  }\n  return quoteQualifiedIdentifier(bare);\n}\n\n/** Response alias form: `user_id:id` → `\"id\" AS \"user_id\"`. */\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_]*)$/;\n/** SQL alias form: `id as user_id` or `id user_id`. */\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\n\n/**\n * Quote one SELECT/RETURNING token. Only simple identifiers and documented\n * aliases are accepted — raw expressions are rejected to prevent SQL injection\n * from user-controlled column lists (gateway may pass expressions through).\n */\nfunction quoteSelectTokenStrict(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  if (SAFE_IDENTIFIER.test(trimmed)) {\n    return quoteQualifiedIdentifier(trimmed);\n  }\n\n  const responseAlias = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAlias) {\n    const [, aliasIdentifier, baseIdentifier] = responseAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  const sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed);\n  if (sqlAlias) {\n    const [, baseIdentifier, aliasIdentifier] = sqlAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  throw new D1SqlCompileError(\n    \"unsafe_select\",\n    `SELECT/RETURNING expressions are not supported on D1 edge-local; use column names or aliases only: ${token}`\n  );\n}\n\n/**\n * SELECT / RETURNING list with documented response aliases (`alias:column`)\n * and SQL-style aliases (`column as alias`). Edge-local only allows identifiers.\n */\nfunction selectClause(columns: string[] | string | undefined): string {\n  if (columns === undefined || columns === \"*\" || columns === \"\") {\n    return \"*\";\n  }\n  if (typeof columns === \"string\") {\n    const trimmed = columns.trim();\n    if (!trimmed || trimmed === \"*\") {\n      return \"*\";\n    }\n    return trimmed\n      .split(\",\")\n      .map((part) => quoteSelectTokenStrict(part))\n      .join(\", \");\n  }\n  if (columns.length === 0) {\n    return \"*\";\n  }\n  return columns.map((column) => quoteSelectTokenStrict(column)).join(\", \");\n}\n\n/** RETURNING is omitted for head-only mutations (metadata / count without row body). */\nfunction wantsReturning(payload: {\n  columns?: string[] | string;\n  head?: boolean;\n}): boolean {\n  return Boolean(payload.columns) && payload.head !== true;\n}\n\ninterface WhereClause {\n  params: unknown[];\n  sql: string;\n}\n\nfunction conditionToWhere(condition: AthenaGatewayCondition): WhereClause {\n  const operator = (condition.operator || \"eq\").toLowerCase();\n  const value =\n    condition.value === undefined ? condition.eq_value : condition.value;\n\n  if (operator === \"or\" || operator === \"not\") {\n    if (typeof value !== \"string\") {\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Condition operator \"${operator}\" requires a legacy expression string`\n      );\n    }\n    try {\n      const tree = parseLegacyBooleanExpression(\n        value,\n        operator === \"or\" ? \"or\" : \"and\"\n      );\n      const params: unknown[] = [];\n      const sql = compileLegacyBooleanNode(tree, (predicate) => {\n        const clause = conditionToWhere(predicate);\n        params.push(...clause.params);\n        return clause.sql;\n      });\n      return {\n        params,\n        sql: operator === \"not\" ? `(NOT (${sql}))` : sql,\n      };\n    } catch (error) {\n      if (error instanceof D1SqlCompileError) {\n        throw error;\n      }\n      const message =\n        error instanceof LegacyBooleanParseError\n          ? error.message\n          : `Condition operator \"${operator}\" is not supported on D1 edge-local L1`;\n      throw new D1SqlCompileError(\"unsupported_operator\", message);\n    }\n  }\n\n  const column = condition.column?.trim() || condition.eq_column?.trim() || \"\";\n  if (!column) {\n    throw new D1SqlCompileError(\n      \"invalid_condition\",\n      \"Condition requires a column\"\n    );\n  }\n  const col = quoteIdent(column);\n\n  switch (operator) {\n    case \"eq\": {\n      if (Array.isArray(value)) {\n        if (value.length === 0) {\n          return { params: [], sql: \"1 = 0\" };\n        }\n        const placeholders = value.map(() => \"?\").join(\", \");\n        return { params: [...value], sql: `${col} IN (${placeholders})` };\n      }\n      // SQLite: `col = NULL` is unknown and matches nothing. Match gateway /\n      // structured-fetch semantics: null equality → IS NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} = ?` };\n    }\n    case \"neq\":\n      // SQLite: `col != NULL` never matches. Match gateway: null neq → IS NOT NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NOT NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} != ?` };\n    case \"gt\":\n      return { params: [value ?? null], sql: `${col} > ?` };\n    case \"gte\":\n      return { params: [value ?? null], sql: `${col} >= ?` };\n    case \"lt\":\n      return { params: [value ?? null], sql: `${col} < ?` };\n    case \"lte\":\n      return { params: [value ?? null], sql: `${col} <= ?` };\n    case \"like\":\n      return { params: [value ?? null], sql: `${col} LIKE ?` };\n    case \"ilike\":\n      return { params: [value ?? null], sql: `${col} LIKE ? COLLATE NOCASE` };\n    case \"in\": {\n      const items = Array.isArray(value)\n        ? value\n        : value === undefined\n          ? []\n          : [value];\n      if (items.length === 0) {\n        return { params: [], sql: \"1 = 0\" };\n      }\n      const placeholders = items.map(() => \"?\").join(\", \");\n      return { params: [...items], sql: `${col} IN (${placeholders})` };\n    }\n    case \"is\": {\n      if (value === null || value === \"null\") {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      if (value === true || value === \"true\") {\n        return { params: [], sql: `${col} IS TRUE` };\n      }\n      if (value === false || value === \"false\") {\n        return { params: [], sql: `${col} IS FALSE` };\n      }\n      return { params: [value], sql: `${col} IS ?` };\n    }\n    case \"not\":\n    case \"or\":\n    case \"contains\":\n    case \"containedby\":\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Condition operator \"${operator}\" is not supported on D1 edge-local L1`\n      );\n    default:\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Unknown condition operator \"${operator}\"`\n      );\n  }\n}\n\nfunction buildWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): WhereClause {\n  if (!conditions?.length) {\n    return { params: [], sql: \"\" };\n  }\n  const parts: string[] = [];\n  const params: unknown[] = [];\n  for (const condition of conditions) {\n    // Legacy shape: only eq_column/eq_value without operator\n    if (!condition.operator && condition.eq_column) {\n      const clause = conditionToWhere({\n        ...condition,\n        column: condition.eq_column,\n        operator: \"eq\",\n        value: condition.eq_value,\n      });\n      parts.push(clause.sql);\n      params.push(...clause.params);\n      continue;\n    }\n    const clause = conditionToWhere(condition);\n    parts.push(clause.sql);\n    params.push(...clause.params);\n  }\n  return {\n    params,\n    sql: parts.length ? `WHERE ${parts.join(\" AND \")}` : \"\",\n  };\n}\n\nfunction orderClause(order?: AthenaSortBy): string {\n  if (!order?.field?.trim()) {\n    return \"\";\n  }\n  const direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n  return `ORDER BY ${quoteIdent(order.field)} ${direction}`;\n}\n\nfunction limitOffsetClause(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): string {\n  let limit = payload.limit;\n  let offset = payload.offset;\n\n  // Prefer explicit page_size as the page length when limit is absent.\n  if (limit === undefined && payload.page_size !== undefined) {\n    limit = payload.page_size;\n  }\n\n  // Apply current_page → OFFSET using page_size, or limit when page_size is\n  // omitted (`.limit(10).currentPage(2)` must not stay at OFFSET 0).\n  if (payload.current_page !== undefined && offset === undefined) {\n    const pageSize = payload.page_size ?? payload.limit;\n    if (pageSize !== undefined) {\n      offset = Math.max(0, (payload.current_page - 1) * pageSize);\n    }\n  }\n\n  const parts: string[] = [];\n  // SQLite/D1 requires LIMIT when OFFSET is present; -1 means no upper bound.\n  if (offset !== undefined && limit === undefined) {\n    parts.push(\"LIMIT -1\");\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  } else {\n    if (limit !== undefined) {\n      parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n    }\n    if (offset !== undefined) {\n      parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n    }\n  }\n  return parts.join(\" \");\n}\n\nfunction rejectStructuredRelations(payload: AthenaFetchPayload): void {\n  const select = payload.select;\n  if (select && typeof select === \"object\" && !Array.isArray(select)) {\n    for (const value of Object.values(select)) {\n      if (value && typeof value === \"object\") {\n        throw new D1SqlCompileError(\n          \"relations_unsupported\",\n          \"Nested relation selects are unsupported on D1 edge-local\"\n        );\n      }\n    }\n  }\n  if (payload.view_name) {\n    throw new D1SqlCompileError(\n      \"view_unsupported\",\n      \"view_name is unsupported on D1 edge-local L1\"\n    );\n  }\n}\n\nfunction jsonValue(value: AthenaJsonValue | undefined): unknown {\n  if (value === undefined) {\n    return null;\n  }\n  if (value !== null && typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return value;\n}\n\n/**\n * Compile flat gateway fetch to SQLite SELECT.\n * When `head: true`, compiles a COUNT(*) query (no row body).\n */\nexport function compileD1Fetch(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for fetch\"\n    );\n  }\n\n  // Structured findMany-style select object with only column:true flags\n  let columns: string[] | string | undefined = payload.columns;\n  if (\n    payload.select &&\n    typeof payload.select === \"object\" &&\n    !Array.isArray(payload.select)\n  ) {\n    const keys = Object.entries(payload.select)\n      .filter(([, enabled]) => enabled === true || enabled === 1)\n      .map(([key]) => key);\n    if (keys.length > 0) {\n      columns = keys;\n    }\n  } else if (typeof payload.select === \"string\" && payload.select.trim()) {\n    columns = payload.select;\n  }\n\n  let where = buildWhere(payload.conditions);\n  // Also map simple where object if present (eq only)\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n\n  if (payload.head === true) {\n    // Head-only: return count metadata without row payloads.\n    return compileD1CountFromWhere(table, where);\n  }\n\n  const parts = [\n    `SELECT ${selectClause(columns)} FROM ${quoteIdent(table)}`,\n    where.sql,\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\n/**\n * COUNT(*) for the same filters as a fetch (used for head and exact totals).\n */\nexport function compileD1Count(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for count\"\n    );\n  }\n  let where = buildWhere(payload.conditions);\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n  return compileD1CountFromWhere(table, where);\n}\n\nfunction compileD1CountFromWhere(\n  table: string,\n  where: { sql: string; params: unknown[] }\n): D1CompiledSql {\n  const parts = [\n    `SELECT COUNT(*) AS __athena_count FROM ${quoteIdent(table)}`,\n    where.sql,\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\nfunction extractAthenaCount(rows: unknown[]): number {\n  const first = rows[0];\n  const rawCount =\n    first && typeof first === \"object\" && !Array.isArray(first)\n      ? (first as Record<string, unknown>).__athena_count\n      : undefined;\n  const count =\n    typeof rawCount === \"number\"\n      ? rawCount\n      : typeof rawCount === \"bigint\"\n        ? Number(rawCount)\n        : Number(rawCount ?? 0);\n  return Number.isFinite(count) ? count : 0;\n}\n\nexport { extractAthenaCount };\n\nfunction compileSingleRowInsert(\n  table: string,\n  row: AthenaJsonObject,\n  payload: AthenaInsertPayload\n): D1CompiledStatement {\n  const columns = Object.keys(row);\n  if (columns.length === 0) {\n    // SQLite allows default-only single-row inserts, but not\n    // `DEFAULT VALUES … ON CONFLICT` (D1/SQLite syntax error).\n    if (payload.on_conflict) {\n      throw new D1SqlCompileError(\n        \"default_values_upsert_unsupported\",\n        \"DEFAULT VALUES upsert is unsupported on D1 edge-local; provide insert columns or omit onConflict\"\n      );\n    }\n    const parts = [`INSERT INTO ${quoteIdent(table)} DEFAULT VALUES`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return { params: [], sql: parts.join(\" \") };\n  }\n  const params = columns.map((column) => jsonValue(row[column]));\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES (${columns.map(() => \"?\").join(\", \")})`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return { params, sql: parts.join(\" \") };\n}\n\n/**\n * Normalize `on_conflict` like gateway `parse_on_conflict_columns`:\n * string or string[] , and comma-separated composite targets (`tenant_id,email`).\n */\nfunction parseOnConflictColumns(onConflict: string | string[]): string[] {\n  const raw = Array.isArray(onConflict) ? onConflict : [onConflict];\n  const columns: string[] = [];\n  for (const item of raw) {\n    for (const part of String(item).split(\",\")) {\n      const trimmed = part.trim();\n      if (trimmed) {\n        columns.push(trimmed);\n      }\n    }\n  }\n  if (columns.length === 0) {\n    throw new D1SqlCompileError(\n      \"invalid_on_conflict\",\n      \"on_conflict requires at least one column\"\n    );\n  }\n  return columns;\n}\n\n/**\n * Append ON CONFLICT clause.\n *\n * Parity with crates/athena-query SQLite insert compiler:\n * - explicit non-empty `update_body` → DO UPDATE SET col = ?\n * - explicit empty `update_body` → DO NOTHING\n * - omitted `update_body` (typical `.upsert({...}, { onConflict })`) →\n *   DO UPDATE SET non-conflict cols from `excluded.*`\n */\nfunction appendOnConflict(\n  parts: string[],\n  params: unknown[],\n  payload: AthenaInsertPayload,\n  insertColumns: string[]\n): void {\n  if (!payload.on_conflict) {\n    return;\n  }\n  const conflictCols = parseOnConflictColumns(payload.on_conflict);\n  const conflictSql = conflictCols.map(quoteIdent).join(\", \");\n\n  if (payload.update_body !== undefined && payload.update_body !== null) {\n    const entries = Object.entries(payload.update_body);\n    if (entries.length === 0) {\n      parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n      return;\n    }\n    const assignments = entries.map(([column, value]) => {\n      params.push(jsonValue(value as AthenaJsonValue));\n      return `${quoteIdent(column)} = ?`;\n    });\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n    return;\n  }\n\n  const conflictSet = new Set(conflictCols);\n  const assignments = insertColumns\n    .filter((column) => !conflictSet.has(column))\n    .map((column) => {\n      const quoted = quoteIdent(column);\n      return `${quoted} = excluded.${quoted}`;\n    });\n  if (assignments.length === 0) {\n    parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n  } else {\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n  }\n}\n\n/**\n * Compile insert / upsert for D1.\n *\n * SQLite does not allow `DEFAULT` inside multi-row VALUES tuples. Sparse multi-row\n * inserts without `default_to_null` become a batch of single-row inserts so omitted\n * columns keep true DB defaults.\n */\nexport function compileD1Insert(payload: AthenaInsertPayload): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for insert\"\n    );\n  }\n\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  if (rows.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"insert_body must not be empty\"\n    );\n  }\n\n  const columns: string[] = [];\n  const seen = new Set<string>();\n  for (const row of rows) {\n    for (const key of Object.keys(row ?? {})) {\n      if (seen.has(key)) {\n        continue;\n      }\n      seen.add(key);\n      columns.push(key);\n    }\n  }\n\n  // Single empty object → DEFAULT VALUES (all columns use table defaults).\n  if (columns.length === 0) {\n    if (rows.length === 1) {\n      const compiled = compileSingleRowInsert(table, {}, payload);\n      return asSingle(compiled.sql, compiled.params);\n    }\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES\"\n    );\n  }\n\n  const forceNullForMissing = payload.default_to_null === true;\n  const isSparse = rows.some((row) =>\n    columns.some((column) => !Object.hasOwn(row, column))\n  );\n\n  // Sparse multi-row without NULL coercion: one INSERT per row with only present columns.\n  if (isSparse && !forceNullForMissing && rows.length > 1) {\n    return asBatch(\n      rows.map((row) =>\n        compileSingleRowInsert(table, row as AthenaJsonObject, payload)\n      )\n    );\n  }\n\n  // Single-row sparse without default_to_null: only insert present columns.\n  if (isSparse && !forceNullForMissing && rows.length === 1) {\n    const compiled = compileSingleRowInsert(\n      table,\n      rows[0] as AthenaJsonObject,\n      payload\n    );\n    return asSingle(compiled.sql, compiled.params);\n  }\n\n  const params: unknown[] = [];\n  const valueGroups = rows.map((row) => {\n    const placeholders = columns.map((column) => {\n      const has = Object.hasOwn(row, column);\n      if (!has) {\n        // Only when default_to_null: bind explicit NULL (valid in VALUES).\n        params.push(null);\n        return \"?\";\n      }\n      params.push(jsonValue((row as AthenaJsonObject)[column]));\n      return \"?\";\n    });\n    return `(${placeholders.join(\", \")})`;\n  });\n\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES ${valueGroups.join(\", \")}`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile update with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery) so only one page is updated.\n */\nexport function compileD1Update(\n  payload: AthenaUpdatePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for update\"\n    );\n  }\n  const entries = Object.entries(payload.update_body ?? {});\n  if (entries.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_update\",\n      \"update_body must not be empty\"\n    );\n  }\n\n  const params: unknown[] = [];\n  const assignments = entries.map(([column, value]) => {\n    params.push(jsonValue(value as AthenaJsonValue));\n    return `${quoteIdent(column)} = ?`;\n  });\n\n  const where = buildWhere(payload.conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_update\",\n      \"UPDATE requires at least one condition on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"UPDATE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions: payload.conditions,\n      },\n      options\n    );\n    params.push(...bounded.params);\n    const parts = [\n      `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n      `WHERE ${bounded.sql}`,\n    ];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), params);\n  }\n\n  params.push(...where.params);\n  const parts = [\n    `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n    where.sql,\n  ];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile delete with required filters.\n *\n * `payload.resource_id` alone (no column filter) maps to `id = ?` for the common\n * Athena PK path. Explicit `.eq('resource_id', …)` / other filters are preserved\n * so tables with a real `resource_id` column are not rewritten to `id`.\n */\nexport function compileD1Delete(\n  payload: AthenaDeletePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for delete\"\n    );\n  }\n\n  const conditions: AthenaGatewayCondition[] = [...(payload.conditions ?? [])];\n  if (payload.resource_id !== undefined && payload.resource_id !== null) {\n    const hasResourceIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"resource_id\";\n    });\n    const hasIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"id\";\n    });\n    // Only invent `id = resource_id` when the caller did not already filter by\n    // resource_id or id (e.g. delete({ resourceId }) with no eq conditions).\n    if (!(hasResourceIdFilter || hasIdFilter)) {\n      conditions.unshift({\n        column: \"id\",\n        operator: \"eq\",\n        value: payload.resource_id,\n      });\n    }\n  }\n\n  const where = buildWhere(conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_delete\",\n      \"DELETE requires at least one condition or resource_id on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"DELETE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions,\n      },\n      options\n    );\n    const parts = [`DELETE FROM ${quoteIdent(table)}`, `WHERE ${bounded.sql}`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), bounded.params);\n  }\n\n  const parts = [`DELETE FROM ${quoteIdent(table)}`, where.sql];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), where.params);\n}\n","import {\n  AthenaQueryError,\n  type AthenaConditionAst,\n  type AthenaQueryPlan,\n  type AthenaResolvedRelationConditionAst,\n  type AthenaResolvedSelectionField,\n  type AthenaResolvedSource,\n  canonicalizePagination,\n  D1_QUERY_CAPABILITIES,\n  validatePlanAgainstCapabilities,\n} from \"../../query/engine/index.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\nimport { type D1CompiledSql, D1SqlCompileError } from \"./sql.ts\";\n\nconst SAFE_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nclass Binder {\n  readonly params: unknown[] = [];\n\n  add(value: unknown): string {\n    this.params.push(value);\n    return \"?\";\n  }\n}\n\nfunction quoteIdent(name: string): string {\n  const trimmed = name.trim();\n  if (!SAFE_IDENT.test(trimmed)) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for D1: ${name}`\n    );\n  }\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction qualifyTable(source: AthenaResolvedSource): string {\n  return `${quoteIdent(source.table)} AS ${quoteIdent(source.alias)}`;\n}\n\nfunction qualifyColumn(alias: string, column: string): string {\n  if (column === \"*\") {\n    throw new D1SqlCompileError(\n      \"unsafe_select\",\n      \"SELECT * inside nested D1 relations is unsupported; name columns explicitly\"\n    );\n  }\n  return `${quoteIdent(alias)}.${quoteIdent(column)}`;\n}\n\nfunction compileCondition(\n  condition: AthenaConditionAst,\n  parent: AthenaResolvedSource,\n  binder: Binder\n): string {\n  switch (condition.kind) {\n    case \"and\":\n      return `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" AND \")})`;\n    case \"or\":\n      return `(${condition.conditions.map((child) => compileCondition(child, parent, binder)).join(\" OR \")})`;\n    case \"not\":\n      return `(NOT ${compileCondition(condition.condition, parent, binder)})`;\n    case \"is-null\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} IS${condition.negated ? \" NOT\" : \"\"} NULL`;\n    case \"is-true\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} = ${binder.add(1)}`;\n    case \"is-false\":\n      return `${qualifyColumn(parent.alias, condition.field.field)} = ${binder.add(0)}`;\n    case \"in\": {\n      if (condition.values.length === 0) {\n        return \"1 = 0\";\n      }\n      return `${qualifyColumn(parent.alias, condition.field.field)} IN (${condition.values.map((value) => binder.add(value ?? null)).join(\", \")})`;\n    }\n    case \"contains\":\n    case \"contained-by\":\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `${condition.kind} is unsupported on D1`\n      );\n    case \"compare\": {\n      if (condition.operator === \"ilike\") {\n        throw new D1SqlCompileError(\n          \"unsupported_operator\",\n          \"ilike is unsupported on D1\"\n        );\n      }\n      if (condition.value === null) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n          \"Compare against null must be normalized to is-null before D1 compilation\"\n        );\n      }\n      const column = qualifyColumn(parent.alias, condition.field.field);\n      const placeholder = binder.add(condition.value);\n      switch (condition.operator) {\n        case \"eq\":\n          return `${column} = ${placeholder}`;\n        case \"neq\":\n          return `${column} <> ${placeholder}`;\n        case \"gt\":\n          return `${column} > ${placeholder}`;\n        case \"gte\":\n          return `${column} >= ${placeholder}`;\n        case \"lt\":\n          return `${column} < ${placeholder}`;\n        case \"lte\":\n          return `${column} <= ${placeholder}`;\n        case \"like\":\n          return `${column} LIKE ${placeholder}`;\n        default:\n          throw new D1SqlCompileError(\n            \"unsupported_operator\",\n            `Unknown compare operator`\n          );\n      }\n    }\n    case \"resolved-relation\":\n      return compileRelationPredicate(condition, parent, binder);\n    case \"relation\":\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n        `Unresolved relation predicate \"${condition.relation}\" reached the D1 compiler`\n      );\n    default:\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        \"Unsupported condition kind on D1\"\n      );\n  }\n}\n\nfunction compileRelationPredicate(\n  condition: AthenaResolvedRelationConditionAst,\n  parent: AthenaResolvedSource,\n  binder: Binder\n): string {\n  const child: AthenaResolvedSource = {\n    alias: condition.target.alias,\n    modelId: condition.target.modelId,\n    schema: condition.target.schema,\n    table: condition.target.table,\n  };\n  const { fromSql, joinSql } = compileRelationScope(\n    parent,\n    child,\n    condition.descriptor,\n    condition.junctionAlias\n  );\n  const filters = [joinSql];\n  if (condition.filter) {\n    const inner = compileCondition(condition.filter, child, binder);\n    if (condition.predicate === \"every\") {\n      filters.push(`NOT (CASE WHEN ${inner} THEN 1 ELSE 0 END)`);\n    } else {\n      filters.push(inner);\n    }\n  }\n  const exists = `EXISTS (SELECT 1 FROM ${fromSql} WHERE ${filters.join(\" AND \")})`;\n  if (\n    condition.predicate === \"none\" ||\n    condition.predicate === \"isNot\" ||\n    condition.predicate === \"every\"\n  ) {\n    return `NOT ${exists}`;\n  }\n  return exists;\n}\n\nfunction compileRelationScope(\n  parent: AthenaResolvedSource,\n  child: AthenaResolvedSource,\n  descriptor: {\n    cardinality: string;\n    from: { columns: string[] };\n    junction?: { fromColumns: string[]; table: string; toColumns: string[] };\n    to: { columns: string[] };\n  },\n  junctionAlias?: string\n): { fromSql: string; joinSql: string } {\n  if (descriptor.cardinality === \"many-to-many\") {\n    if (!descriptor.junction || !junctionAlias) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NORMALIZED_AST\",\n        \"Many-to-many relation is missing junction metadata\"\n      );\n    }\n    const junctionOn = descriptor.junction.toColumns\n      .map(\n        (column, index) =>\n          `${qualifyColumn(junctionAlias, column)} = ${qualifyColumn(child.alias, descriptor.to.columns[index] as string)}`\n      )\n      .join(\" AND \");\n    const parentOn = descriptor.from.columns\n      .map(\n        (column, index) =>\n          `${qualifyColumn(parent.alias, column)} = ${qualifyColumn(junctionAlias, descriptor.junction?.fromColumns[index] as string)}`\n      )\n      .join(\" AND \");\n    return {\n      fromSql: `${qualifyTable(child)} JOIN ${quoteIdent(descriptor.junction.table)} AS ${quoteIdent(junctionAlias)} ON ${junctionOn}`,\n      joinSql: parentOn,\n    };\n  }\n  return {\n    fromSql: qualifyTable(child),\n    joinSql: joinPredicate(\n      parent,\n      child,\n      descriptor.from.columns,\n      descriptor.to.columns\n    ),\n  };\n}\n\nfunction joinPredicate(\n  parent: AthenaResolvedSource,\n  child: AthenaResolvedSource,\n  fromColumns: string[],\n  toColumns: string[]\n): string {\n  return fromColumns\n    .map(\n      (column, index) =>\n        `${qualifyColumn(parent.alias, column)} = ${qualifyColumn(child.alias, toColumns[index] as string)}`\n    )\n    .join(\" AND \");\n}\n\nfunction jsonObjectExpr(\n  fields: AthenaResolvedSelectionField[],\n  alias: string\n): string {\n  const pairs: string[] = [];\n  for (const field of fields) {\n    if (field.kind !== \"column\") {\n      throw new D1SqlCompileError(\n        \"relations_unsupported\",\n        \"D1 nested relations deeper than one level require an explicit column list at each level\"\n      );\n    }\n    const key = field.alias ?? field.column;\n    pairs.push(`'${key.replace(/'/g, \"''\")}'`, qualifyColumn(alias, field.column));\n  }\n  if (pairs.length === 0) {\n    throw new D1SqlCompileError(\n      \"unsafe_select\",\n      \"Nested D1 relation select is empty\"\n    );\n  }\n  return `json_object(${pairs.join(\", \")})`;\n}\n\nfunction compileSelectList(plan: AthenaQueryPlan, binder: Binder): string {\n  const parts: string[] = [];\n  for (const field of plan.selection) {\n    if (field.kind === \"column\") {\n      if (field.column === \"*\") {\n        parts.push(`${quoteIdent(plan.source.alias)}.*`);\n        continue;\n      }\n      const expr = qualifyColumn(plan.source.alias, field.column);\n      parts.push(\n        field.alias && field.alias !== field.column\n          ? `${expr} AS ${quoteIdent(field.alias)}`\n          : expr\n      );\n      continue;\n    }\n\n    const child = field.plan;\n    const { fromSql, joinSql } = compileRelationScope(\n      plan.source,\n      child.source,\n      field.descriptor,\n      field.junctionAlias\n    );\n    const objectExpr = jsonObjectExpr(child.selection, child.source.alias);\n    const filters = [joinSql];\n    if (child.filter) {\n      filters.push(compileCondition(child.filter, child.source, binder));\n    }\n    const page = canonicalizePagination(child.pagination);\n    const childOrder = child.orderBy?.[0]\n      ? ` ORDER BY ${qualifyColumn(child.source.alias, child.orderBy[0].field.field)} ${child.orderBy[0].direction === \"desc\" ? \"DESC\" : \"ASC\"}`\n      : \"\";\n    const toMany =\n      field.descriptor.cardinality === \"one-to-many\" ||\n      field.descriptor.cardinality === \"many-to-many\";\n    const limit = toMany\n      ? page.limit !== undefined\n        ? ` LIMIT ${Math.max(0, Math.trunc(page.limit))}`\n        : \"\"\n      : \" LIMIT 1\";\n    const offset =\n      page.offset !== undefined\n        ? ` OFFSET ${Math.max(0, Math.trunc(page.offset))}`\n        : \"\";\n    const inner = `SELECT ${objectExpr} AS __athena_rel FROM ${fromSql} WHERE ${filters.join(\" AND \")}${childOrder}${limit}${offset}`;\n    if (\n      field.descriptor.cardinality === \"one-to-many\" ||\n      field.descriptor.cardinality === \"many-to-many\"\n    ) {\n      parts.push(\n        `COALESCE((SELECT json_group_array(__athena_rel) FROM (${inner})), '[]') AS ${quoteIdent(field.alias)}`\n      );\n    } else {\n      parts.push(\n        `(SELECT __athena_rel FROM (${inner})) AS ${quoteIdent(field.alias)}`\n      );\n    }\n  }\n  return parts.join(\", \");\n}\n\nexport function compileD1Ast(plan: AthenaQueryPlan): D1CompiledSql {\n  if (!plan || plan.kind !== \"resolved-select\" || !Array.isArray(plan.selection)) {\n    throw new D1SqlCompileError(\n      \"unsupported_operator\",\n      \"compileD1Ast requires a resolved AthenaQueryPlan\"\n    );\n  }\n  validatePlanAgainstCapabilities(plan, D1_QUERY_CAPABILITIES);\n  const binder = new Binder();\n  const parts = [\n    `SELECT ${compileSelectList(plan, binder)} FROM ${qualifyTable(plan.source)}`,\n  ];\n  if (plan.filter) {\n    parts.push(`WHERE ${compileCondition(plan.filter, plan.source, binder)}`);\n  }\n  if (plan.orderBy?.[0]) {\n    const order = plan.orderBy[0];\n    parts.push(\n      `ORDER BY ${qualifyColumn(plan.source.alias, order.field.field)} ${order.direction === \"desc\" ? \"DESC\" : \"ASC\"}`\n    );\n  }\n  const page = canonicalizePagination(plan.pagination);\n  let limit = page.limit;\n  if (plan.cardinality === \"first\" || plan.cardinality === \"unique\") {\n    limit = 1;\n  }\n  if (limit !== undefined) {\n    parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n  if (page.offset !== undefined) {\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(page.offset))}`);\n  }\n  return { params: binder.params, sql: parts.join(\" \") };\n}\n","import type { AthenaRelationCatalog, AthenaRelationDescriptor } from \"../../query/engine/index.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { executeD1Query } from \"./runner.ts\";\n\nconst SAFE_TABLE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\ninterface ForeignKeyPragmaRow {\n  from?: string;\n  id?: number;\n  seq?: number;\n  table?: string;\n  to?: string;\n}\n\nexport async function loadD1RelationCatalog(\n  d1: D1DatabaseLike,\n  tables: string[]\n): Promise<AthenaRelationCatalog> {\n  const entries: AthenaRelationDescriptor[] = [];\n  const seen = new Set<string>();\n\n  for (const rawTable of tables) {\n    const table = rawTable.includes(\".\")\n      ? (rawTable.split(\".\").pop() ?? rawTable)\n      : rawTable;\n    if (!SAFE_TABLE.test(table)) {\n      continue;\n    }\n    const result = await executeD1Query(d1, {\n      query: `PRAGMA foreign_key_list(${table})`,\n    });\n    if (!result.ok) {\n      continue;\n    }\n    const grouped = new Map<string, AthenaRelationDescriptor>();\n    for (const raw of result.rows as ForeignKeyPragmaRow[]) {\n      const constraintId = String(raw.id ?? 0);\n      const id = `d1.${table}.${constraintId}`;\n      const existing = grouped.get(id);\n      const fromCol = String(raw.from ?? \"\");\n      const toCol = String(raw.to ?? \"\");\n      const toTable = String(raw.table ?? \"\");\n      if (!(fromCol && toCol && toTable)) {\n        continue;\n      }\n      if (existing) {\n        existing.from.columns.push(fromCol);\n        existing.to.columns.push(toCol);\n        continue;\n      }\n      grouped.set(id, {\n        cardinality: \"many-to-one\",\n        from: { columns: [fromCol], table },\n        id,\n        name: toTable,\n        to: { columns: [toCol], table: toTable },\n      });\n    }\n    for (const entry of grouped.values()) {\n      if (seen.has(entry.id)) {\n        continue;\n      }\n      seen.add(entry.id);\n      entries.push(entry);\n    }\n  }\n\n  return { entries };\n}\n","import {\n  AthenaQueryError,\n  type AthenaRelationCatalog,\n  collectAstTables,\n  isAthenaQueryPlan,\n  isAthenaSelectQueryAst,\n  mergeRelationCatalogs,\n  normalizeTransportPayload,\n  resolveQueryPlan,\n  resetQueryPlanAliases,\n  selectPayloadHasRelations,\n} from \"../../query/engine/index.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { compileD1Ast } from \"./compile-ast.ts\";\nimport { loadD1RelationCatalog } from \"./relation-catalog.ts\";\nimport { type D1CompiledSql, D1SqlCompileError } from \"./sql.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function needsD1AstPipeline(payload: unknown): boolean {\n  if (isAthenaSelectQueryAst(payload) || isAthenaQueryPlan(payload)) {\n    return true;\n  }\n  if (selectPayloadHasRelations(payload)) {\n    return true;\n  }\n  return isRecord(payload) && payload.operation === \"select\";\n}\n\nexport async function compileD1StructuredFetch(\n  payload: unknown,\n  d1: D1DatabaseLike,\n  options?: { catalog?: AthenaRelationCatalog }\n): Promise<D1CompiledSql> {\n  try {\n    resetQueryPlanAliases();\n    if (isAthenaQueryPlan(payload)) {\n      return compileD1Ast(payload);\n    }\n    const ast = normalizeTransportPayload(payload);\n    const tables = collectAstTables(ast).map((source) => source.table);\n    const live = await loadD1RelationCatalog(d1, tables);\n    const catalog = mergeRelationCatalogs(options?.catalog, live);\n    const plan = resolveQueryPlan(ast, { catalog });\n    return compileD1Ast(plan);\n  } catch (error) {\n    if (error instanceof D1SqlCompileError) {\n      throw error;\n    }\n    if (error instanceof AthenaQueryError) {\n      throw new D1SqlCompileError(error.code, error.message);\n    }\n    throw error;\n  }\n}\n","/**\n * Rewrite PostgreSQL-oriented SQL (from shared SDK typed planners) for SQLite/D1.\n */\n\nconst PG_CAST_TYPES =\n  \"text|uuid|citext|varchar|bpchar|char|integer|int4|int8|bigint|smallint|boolean|bool|jsonb|json|numeric|decimal|real|float|double precision|timestamptz|timestamp|date|bytea\";\n\n/**\n * Apply a transform only outside SQL string/identifier literals and comments.\n * Prevents corrupting values like `'value::text'` or `` `a;b` ``.\n */\nfunction mapSqlOutsideLiterals(\n  sql: string,\n  transform: (chunk: string) => string\n): string {\n  let out = \"\";\n  let buffer = \"\";\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  const flushCode = () => {\n    if (buffer) {\n      out += transform(buffer);\n      buffer = \"\";\n    }\n  };\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      out += ch;\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      out += ch;\n      if (ch === \"*\" && next === \"/\") {\n        out += next;\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      out += ch;\n      if (ch === \"'\" && next === \"'\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      out += ch;\n      if (ch === '\"' && next === '\"') {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      out += ch;\n      if (ch === \"`\" && next === \"`\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      out += ch;\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inLineComment = true;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inBlockComment = true;\n      continue;\n    }\n    if (ch === \"'\") {\n      flushCode();\n      out += ch;\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      flushCode();\n      out += ch;\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      flushCode();\n      out += ch;\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      flushCode();\n      out += ch;\n      inBracket = true;\n      continue;\n    }\n\n    buffer += ch;\n  }\n\n  flushCode();\n  return out;\n}\n\ninterface SqlKeywordHit {\n  /** Parenthesis nesting depth at the keyword. */\n  depth: number;\n  kind: \"limit\" | \"offset\";\n  /** Start index of the keyword in the full SQL string. */\n  start: number;\n  /**\n   * Top-level statement index (increments on `;` at depth 0).\n   * Prevents a LIMIT in statement N from “covering” a bare OFFSET in statement N+1.\n   */\n  statement: number;\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Collect LIMIT / OFFSET keyword positions outside literals/comments, with paren depth.\n */\nfunction collectLimitOffsetKeywords(sql: string): SqlKeywordHit[] {\n  const hits: SqlKeywordHit[] = [];\n  let depth = 0;\n  let statement = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      depth = Math.max(0, depth - 1);\n      continue;\n    }\n    // Top-level statement separator (outside strings/comments/parens).\n    if (ch === \";\" && depth === 0) {\n      statement += 1;\n      continue;\n    }\n\n    // Keyword scan only at identifier boundaries.\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    const rest = sql.slice(i);\n    if (/^LIMIT\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"limit\", start: i, statement });\n      i += 4; // advance to last char of LIMIT; loop +1\n      continue;\n    }\n    if (/^OFFSET\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"offset\", start: i, statement });\n      i += 5;\n    }\n  }\n\n  return hits;\n}\n\n/**\n * SQLite requires LIMIT when OFFSET is present. Inject `LIMIT -1` before each bare\n * OFFSET, considering the full SQL (across comments/literals) and paren depth so\n * nested LIMITs do not suppress outer bare OFFSET, and comments between LIMIT and\n * OFFSET do not produce double LIMIT.\n */\nexport function injectLimitBeforeBareOffsets(sql: string): string {\n  const hits = collectLimitOffsetKeywords(sql);\n  if (hits.length === 0) {\n    return sql;\n  }\n\n  const injectAt: number[] = [];\n  for (const hit of hits) {\n    if (hit.kind !== \"offset\") {\n      continue;\n    }\n    let hasLimit = false;\n    for (let i = hits.length - 1; i >= 0; i -= 1) {\n      const prev = hits[i]!;\n      if (prev.start >= hit.start) {\n        continue;\n      }\n      // Only a LIMIT in the same top-level statement and paren depth counts.\n      if (prev.statement !== hit.statement) {\n        continue;\n      }\n      if (prev.depth !== hit.depth) {\n        continue;\n      }\n      if (prev.kind === \"limit\") {\n        hasLimit = true;\n        break;\n      }\n      if (prev.kind === \"offset\") {\n        // Prior OFFSET at same depth/statement without a LIMIT between is still bare.\n        break;\n      }\n    }\n    if (!hasLimit) {\n      injectAt.push(hit.start);\n    }\n  }\n\n  if (injectAt.length === 0) {\n    return sql;\n  }\n\n  // Insert from the end so earlier indices stay valid.\n  let out = sql;\n  for (let i = injectAt.length - 1; i >= 0; i -= 1) {\n    const at = injectAt[i]!;\n    out = `${out.slice(0, at)}LIMIT -1 ${out.slice(at)}`;\n  }\n  return out;\n}\n\n/**\n * Strip Postgres cast suffixes and normalize a few operators so UUID equality\n * plans like `\"id\"::text = '…'::text` execute on D1.\n * String/identifier literals are left unchanged.\n */\nexport function rewritePostgresSqlForSqlite(sql: string): string {\n  const castPattern = new RegExp(`::(?:${PG_CAST_TYPES})\\\\b`, \"gi\");\n  const withoutCastsAndIlike = mapSqlOutsideLiterals(sql, (chunk) => {\n    let rewritten = chunk.replace(castPattern, \"\");\n    // ILIKE is Postgres-only; NOCASE is the D1/SQLite approximation used by L1 compiler.\n    rewritten = rewritten.replace(/\\bILIKE\\b/gi, \"LIKE\");\n    return rewritten;\n  });\n  // OFFSET rewrite must see the full statement (LIMIT may be separated by comments).\n  return injectLimitBeforeBareOffsets(withoutCastsAndIlike);\n}\n","import { AthenaGatewayError } from \"../../gateway/errors.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport { AthenaTransactionError } from \"../../db/transaction/errors.ts\";\nimport type {\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n  AthenaTransactionTransportResult,\n} from \"../../db/transaction/types.ts\";\nimport { D1_BATCH_TRANSACTION_CAPABILITIES } from \"../../db/transaction/types.ts\";\nimport type { D1DatabaseLike, D1ResultLike } from \"../types.ts\";\nimport { executeD1Batch } from \"./runner.ts\";\nimport {\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n} from \"./sql.ts\";\n\nfunction d1ErrorResponse<T>(\n  message: string,\n  hint?: string\n): AthenaGatewayResponse<T> {\n  const error = new AthenaGatewayError({\n    code: \"HTTP_ERROR\",\n    endpoint: \"/gateway/transaction\" as never,\n    hint,\n    message,\n    method: \"POST\",\n    status: 400,\n  });\n  return {\n    data: null,\n    error: error.message,\n    errorDetails: error.toDetails(),\n    ok: false,\n    raw: { code: \"HTTP_ERROR\", error: message },\n    status: 400,\n    statusText: null,\n  };\n}\n\nfunction stripNullsFromRows(rows: unknown[], strip: boolean): unknown[] {\n  if (!strip) {\n    return rows;\n  }\n  return rows.map((row) => {\n    if (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n      return row;\n    }\n    const out: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n      if (value !== null) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nfunction flattenCompiled(compiled: D1CompiledSql): {\n  params?: unknown[];\n  query: string;\n}[] {\n  if (compiled.statements && compiled.statements.length > 0) {\n    return compiled.statements.map((statement) => ({\n      params: statement.params,\n      query: statement.sql,\n    }));\n  }\n  return [{ params: compiled.params, query: compiled.sql }];\n}\n\nfunction mapSlice(\n  operation: AthenaTransactionOperation,\n  compiled: D1CompiledSql,\n  slice: D1ResultLike<unknown>[],\n  callOptions?: AthenaGatewayCallOptions\n): AthenaGatewayResponse<unknown> {\n  const failed = slice.find((item) => item.success === false || item.error);\n  if (failed) {\n    return d1ErrorResponse(\n      failed.error ?? \"D1 statement failed\",\n      `operation ${operation.id} (${operation.kind})`\n    );\n  }\n  const strip =\n    typeof callOptions?.stripNulls === \"boolean\" ? callOptions.stripNulls : true;\n  const rows = stripNullsFromRows(\n    slice.flatMap((item) => (Array.isArray(item.results) ? item.results : [])),\n    strip\n  );\n  const changes = slice.reduce((sum, item) => {\n    const n =\n      item.meta && typeof item.meta.changes === \"number\"\n        ? item.meta.changes\n        : 0;\n    return sum + n;\n  }, 0);\n  const count = rows.length > 0 ? rows.length : changes;\n  let data: unknown = rows;\n  if (\n    operation.kind === \"insert\" &&\n    !Array.isArray((operation.payload as AthenaInsertPayload).insert_body) &&\n    rows.length === 1\n  ) {\n    data = rows[0];\n  } else if (operation.kind === \"update\" && rows.length === 1) {\n    data = rows[0];\n  }\n  void compiled;\n  return {\n    count,\n    data,\n    error: undefined,\n    errorDetails: null,\n    ok: true,\n    raw: slice,\n    status: 200,\n    statusText: \"OK\",\n  };\n}\n\nexport function createD1TransactionTransport(input: {\n  compileOptionsForBoundedMutation: (\n    payload: {\n      current_page?: number;\n      limit?: number;\n      offset?: number;\n      page_size?: number;\n      sort_by?: unknown;\n      table_name?: string;\n    },\n    callOptions?: AthenaGatewayCallOptions\n  ) => Promise<D1CompileOptions | undefined>;\n  d1: D1DatabaseLike;\n  sessionFromOptions: (callOptions?: AthenaGatewayCallOptions) => {\n    bookmark?: string | null;\n    sessionMode?: string | null;\n  };\n}): AthenaTransactionTransport {\n  return {\n    capabilities: D1_BATCH_TRANSACTION_CAPABILITIES,\n    async executeAtomic(\n      operations: readonly AthenaTransactionOperation[],\n      options?: AthenaResolvedTransactionOptions\n    ): Promise<AthenaTransactionTransportResult> {\n      const compiledList: D1CompiledSql[] = [];\n      const statementRanges: Array<{ end: number; start: number }> = [];\n      const statements: { params?: unknown[]; query: string }[] = [];\n      try {\n        for (const operation of operations) {\n          let compiled: D1CompiledSql;\n          switch (operation.kind) {\n            case \"fetch\":\n              compiled = compileD1Fetch(operation.payload as AthenaFetchPayload);\n              break;\n            case \"insert\":\n              compiled = compileD1Insert(\n                operation.payload as AthenaInsertPayload\n              );\n              break;\n            case \"update\":\n              compiled = compileD1Update(\n                operation.payload as AthenaUpdatePayload,\n                await input.compileOptionsForBoundedMutation(\n                  operation.payload as AthenaUpdatePayload,\n                  options?.callOptions\n                )\n              );\n              break;\n            case \"delete\":\n              compiled = compileD1Delete(\n                operation.payload as AthenaDeletePayload,\n                await input.compileOptionsForBoundedMutation(\n                  operation.payload as AthenaDeletePayload,\n                  options?.callOptions\n                )\n              );\n              break;\n            default:\n              throw new AthenaTransactionError(\n                \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n                \"Unsupported D1 transaction operation\"\n              );\n          }\n          const flat = flattenCompiled(compiled);\n          const start = statements.length;\n          statements.push(...flat);\n          compiledList.push(compiled);\n          statementRanges.push({ end: statements.length, start });\n        }\n      } catch (error) {\n        if (error instanceof D1SqlCompileError) {\n          throw new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n            error.message,\n            { code: error.code }\n          );\n        }\n        throw error;\n      }\n\n      const session = input.sessionFromOptions(options?.callOptions);\n      const batch = await executeD1Batch(input.d1, {\n        statements,\n        ...session,\n      });\n      if (!batch.ok) {\n        return {\n          committed: false,\n          results: operations.map((operation) =>\n            d1ErrorResponse(batch.message, operation.kind)\n          ),\n        };\n      }\n\n      const results = operations.map((operation, index) => {\n        const range = statementRanges[index]!;\n        return mapSlice(\n          operation,\n          compiledList[index]!,\n          batch.results.slice(range.start, range.end),\n          options?.callOptions\n        );\n      });\n      return {\n        committed: results.every((result) => result.ok),\n        results,\n      };\n    },\n  };\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport { AthenaGatewayError } from \"../../gateway/errors.ts\";\nimport { resolveMutationAffectedRows } from \"../../result/mutation-meta.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { CLOUDFLARE_EDGE_BASE_URL } from \"../types.ts\";\nimport {\n  type D1RunnerBatchResult,\n  type D1RunnerQueryResult,\n  executeD1Batch,\n  executeD1Query,\n} from \"./runner.ts\";\nimport {\n  compileD1StructuredFetch,\n  needsD1AstPipeline,\n} from \"./compile-fetch.ts\";\nimport {\n  compileD1Count,\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n  extractAthenaCount,\n} from \"./sql.ts\";\nimport { rewritePostgresSqlForSqlite } from \"./sql-rewrite.ts\";\nimport { createD1TransactionTransport } from \"./transaction.ts\";\n\n/** Narrow failure message without relying on dts-time discriminant collapse. */\nfunction d1ErrorMessage(\n  result: D1RunnerQueryResult | D1RunnerBatchResult\n): string {\n  return result.ok ? \"unknown error\" : result.message;\n}\n\nexport interface CloudflareD1TransportOptions {\n  d1: D1DatabaseLike;\n  /** Default D1 session mode when headers omit session mode. */\n  defaultSessionMode?: string | null;\n  relationCatalog?: import(\"../../query/engine/relations.ts\").AthenaRelationCatalog;\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/** Normalize SQLite collation names for equality comparison. */\nfunction normalizeSqliteCollation(name: string | null | undefined): string {\n  const raw = String(name ?? \"\")\n    .trim()\n    .replace(/^[\"'`[]|[\"'`\\]]$/g, \"\");\n  if (!raw) {\n    return \"BINARY\";\n  }\n  return raw.toUpperCase();\n}\n\n/**\n * Locate the opening `(` of a CREATE TABLE column list.\n * Returns the index of `(` or -1 when not found.\n */\nfunction findCreateTableColumnListOpen(createSql: string): number {\n  // CREATE [TEMP|TEMPORARY|VIRTUAL] TABLE [IF NOT EXISTS] name (\n  const m =\n    /\\bCREATE\\s+(?:(?:TEMP|TEMPORARY|VIRTUAL)\\s+)?TABLE\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?/i.exec(\n      createSql\n    );\n  if (!m) {\n    return -1;\n  }\n  let i = m.index + m[0].length;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n    if (ch === \"(\") {\n      return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\n/**\n * Parse a column's COLLATE clause from CREATE TABLE SQL.\n * Returns null when the column has no explicit collation (defaults to BINARY).\n *\n * Type modifiers may contain parentheses and commas (`VARCHAR(255)`,\n * `NUMERIC(10, 2)`). A simple `[^,)]` scan stops at the first `)` and misses\n * `name VARCHAR(255) COLLATE NOCASE`, so we scan the column definition with\n * balanced parentheses before locating COLLATE.\n *\n * Column-name matching is anchored inside the CREATE TABLE `(…)` list so a\n * table whose name equals a column (e.g. `CREATE TABLE name (…, name TEXT …)`)\n * does not steal the first unanchored match.\n */\nfunction parseColumnCollationFromCreateSql(\n  createSql: string,\n  columnName: string\n): string | null {\n  if (!(createSql && columnName)) {\n    return null;\n  }\n  const listOpen = findCreateTableColumnListOpen(createSql);\n  if (listOpen < 0) {\n    return null;\n  }\n  // Search only inside the top-level column list (depth starts at 1 after `(`).\n  const listStart = listOpen + 1;\n  const escaped = columnName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  const nameRe = new RegExp(\n    `(?:^|[^\\\\w])(?:\"${escaped}\"|\\`${escaped}\\`|\\\\[${escaped}\\\\]|${escaped})\\\\s+`,\n    \"i\"\n  );\n  const listSlice = createSql.slice(listStart);\n  // Walk top-level segments so UNIQUE(name COLLATE …) does not match as a column.\n  // Capture match text length in a plain number so TS control-flow analysis does not\n  // collapse the closure-assigned RegExpExecArray to `never` when reading `[0].length`.\n  let nameMatchAbs = -1;\n  let nameMatchLen = 0;\n  {\n    let i = 0;\n    let depth = 1;\n    let inSingle = false;\n    let inDouble = false;\n    let inBacktick = false;\n    let inBracket = false;\n    let segmentStart = 0;\n    const trySegment = (from: number, to: number) => {\n      if (nameMatchAbs >= 0) {\n        return undefined;\n      }\n      const segment = listSlice.slice(from, to);\n      const m = nameRe.exec(segment);\n      if (!m) {\n        return undefined;\n      }\n      // Column defs start at segment start (optional whitespace); reject mid-segment\n      // matches inside expressions that are not leading column names.\n      const leading = segment.slice(0, m.index).trim();\n      if (leading.length > 0) {\n        return undefined;\n      }\n      nameMatchAbs = listStart + from + m.index;\n      nameMatchLen = m[0].length;\n    };\n    while (i < listSlice.length && depth > 0) {\n      const ch = listSlice[i]!;\n      if (inSingle) {\n        if (ch === \"'\" && listSlice[i + 1] === \"'\") {\n          i += 2;\n          continue;\n        }\n        if (ch === \"'\") {\n          inSingle = false;\n        }\n        i++;\n        continue;\n      }\n      if (inDouble) {\n        if (ch === '\"') {\n          inDouble = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBacktick) {\n        if (ch === \"`\") {\n          inBacktick = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBracket) {\n        if (ch === \"]\") {\n          inBracket = false;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = true;\n        i++;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = true;\n        i++;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = true;\n        i++;\n        continue;\n      }\n      if (ch === \"[\") {\n        inBracket = true;\n        i++;\n        continue;\n      }\n      if (ch === \"(\") {\n        depth++;\n        i++;\n        continue;\n      }\n      if (ch === \")\") {\n        depth--;\n        if (depth === 0) {\n          trySegment(segmentStart, i);\n          break;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \",\" && depth === 1) {\n        trySegment(segmentStart, i);\n        segmentStart = i + 1;\n        i++;\n        continue;\n      }\n      i++;\n    }\n  }\n  if (nameMatchAbs < 0 || nameMatchLen <= 0) {\n    return null;\n  }\n\n  const start = nameMatchAbs + nameMatchLen;\n  let i = start;\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth++;\n      i++;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth === 0) {\n        // End of the CREATE TABLE column list.\n        break;\n      }\n      depth--;\n      i++;\n      continue;\n    }\n    if (ch === \",\" && depth === 0) {\n      // Next column or table constraint.\n      break;\n    }\n    i++;\n  }\n\n  const colDef = createSql.slice(start, i);\n  const collRe =\n    /\\bCOLLATE\\s+(\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\[([^\\]]+)\\]|([A-Za-z_][\\w$]*))/i;\n  const match = collRe.exec(colDef);\n  if (!match) {\n    return null;\n  }\n  return (\n    match[2] ?? match[3] ?? match[4] ?? match[5] ?? match[6] ?? match[1] ?? null\n  );\n}\n\n/**\n * True when the unique index's key collation matches the column's declared\n * collation (or both default to BINARY). Mismatch means\n * `col IN (SELECT col … LIMIT n)` can match more rows than the unique index\n * guarantees (e.g. NOCASE column + BINARY unique index).\n */\nasync function indexCollationMatchesColumn(\n  d1: D1DatabaseLike,\n  table: string,\n  tableSafe: string,\n  indexSafe: string,\n  columnName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<boolean> {\n  interface IndexXInfoRow {\n    cid?: number | null;\n    coll?: string | null;\n    key?: number | boolean | null;\n    name?: string | null;\n  }\n\n  const xinfo = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA index_xinfo(\"${indexSafe}\")`,\n    ...session,\n  });\n  if (!xinfo.ok) {\n    // Without index_xinfo we cannot prove collation safety — reject the index.\n    return false;\n  }\n\n  const xRows = (xinfo.rows as IndexXInfoRow[]) ?? [];\n  const keyRows = xRows.filter((row) => {\n    const isKey = row.key === 1 || row.key === true || Number(row.key) === 1;\n    if (!isKey) {\n      return false;\n    }\n    return typeof row.name === \"string\" && row.name === columnName;\n  });\n  if (keyRows.length === 0) {\n    // Some drivers omit key flags; fall back to first named match.\n    const byName = xRows.find(\n      (row) => typeof row.name === \"string\" && row.name === columnName\n    );\n    if (!byName) {\n      return false;\n    }\n    keyRows.push(byName);\n  }\n\n  const indexColl = normalizeSqliteCollation(keyRows[0]?.coll);\n\n  const master = await executeD1Query(d1, {\n    params: [table],\n    query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n    ...session,\n  });\n  let createSql = \"\";\n  if (master.ok && Array.isArray(master.rows) && master.rows.length > 0) {\n    createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n  }\n  // tableSafe unused for query (bound param uses table); silence unused if needed\n  void tableSafe;\n\n  const columnCollRaw = parseColumnCollationFromCreateSql(\n    createSql,\n    columnName\n  );\n  const columnColl = normalizeSqliteCollation(columnCollRaw);\n\n  return indexColl === columnColl;\n}\n\n/**\n * Resolve a single-column unique identity for bounded mutations from live D1\n * schema (PRAGMA table_info + index_list). Prefer PRIMARY KEY; else a single-\n * column UNIQUE index. Multi-column keys are rejected as unsafe for IN-subquery.\n */\nexport async function resolveD1BoundedIdentityColumn(\n  d1: D1DatabaseLike,\n  tableName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<string> {\n  const table = tableName.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for bounded mutation\"\n    );\n  }\n  // Quote via double-quote after escaping; PRAGMA does not take bound params for table name.\n  const safe = table.replace(/\"/g, '\"\"');\n\n  const info = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA table_info(\"${safe}\")`,\n    ...session,\n  });\n  if (!info.ok) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      `Unable to introspect table \"${table}\" for bounded mutation identity: ${d1ErrorMessage(info)}`\n    );\n  }\n\n  interface PragmaCol {\n    name?: string;\n    notnull?: number | boolean;\n    pk?: number;\n    type?: string;\n  }\n  const cols = (info.rows as PragmaCol[]).filter(\n    (row) => typeof row?.name === \"string\" && row.name.length > 0\n  );\n  const colByName = new Map(cols.map((col) => [col.name!, col]));\n  const isNotNullColumn = (name: string): boolean => {\n    const col = colByName.get(name);\n    if (!col) {\n      return false;\n    }\n    return (\n      col.notnull === 1 || col.notnull === true || Number(col.notnull) === 1\n    );\n  };\n  /**\n   * Candidate SQLite rowid alias: single-column PRIMARY KEY declared as INTEGER.\n   * PRAGMA table_info still reports notnull=0 for true rowid aliases. The\n   * INTEGER PRIMARY KEY DESC exception is NOT a rowid alias (nullable, non-\n   * unique); detect it via a separate origin='pk' index or CREATE TABLE SQL.\n   */\n  const isIntegerPrimaryKeyType = (col: PragmaCol): boolean => {\n    if (typeof col.pk !== \"number\" || col.pk <= 0) {\n      return false;\n    }\n    const declared = String(col.type ?? \"\")\n      .trim()\n      .toUpperCase();\n    return declared === \"INTEGER\";\n  };\n\n  interface IndexRow {\n    name?: string;\n    /** SQLite: 'c' | 'u' | 'pk' */\n    origin?: string;\n    /** SQLite: 1 when the index has a WHERE clause (partial). */\n    partial?: number | boolean;\n    unique?: number | boolean;\n  }\n\n  const loadIndexList = async (): Promise<IndexRow[] | null> => {\n    const indexList = await executeD1Query(d1, {\n      params: [],\n      query: `PRAGMA index_list(\"${safe}\")`,\n      ...session,\n    });\n    if (!indexList.ok) {\n      return null;\n    }\n    return indexList.rows as IndexRow[];\n  };\n\n  /**\n   * True when the INTEGER PRIMARY KEY is NOT a rowid alias (DESC exception).\n   * True rowid aliases have no origin='pk' index; DESC creates one. When origin\n   * is omitted by the driver, parse sqlite_master CREATE TABLE for DESC.\n   */\n  const isDescendingIntegerPrimaryKeyException = async (\n    colName: string,\n    indexes: IndexRow[] | null\n  ): Promise<boolean> => {\n    if (indexes) {\n      const hasPkOrigin = indexes.some(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (hasPkOrigin) {\n        return true;\n      }\n      // Empty list or origins present without 'pk' ⇒ true rowid alias.\n      const originReported = indexes.some(\n        (index) =>\n          index.origin !== undefined &&\n          index.origin !== null &&\n          String(index.origin).length > 0\n      );\n      if (indexes.length === 0 || originReported) {\n        return false;\n      }\n    }\n\n    // Fallback when index_list failed or origin is unavailable on rows.\n    const master = await executeD1Query(d1, {\n      params: [table],\n      query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n      ...session,\n    });\n    if (\n      !(master.ok && Array.isArray(master.rows)) ||\n      master.rows.length === 0\n    ) {\n      return false;\n    }\n    const createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n    if (!createSql) {\n      return false;\n    }\n    const escaped = colName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    // Inline: id INTEGER PRIMARY KEY DESC\n    const inlineDesc = new RegExp(\n      `(?:^|[^\\\\w])(?:\"${escaped}\"|${escaped})\\\\s+INTEGER\\\\s+PRIMARY\\\\s+KEY\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    // Table-level: PRIMARY KEY (id DESC) or PRIMARY KEY(\"id\" DESC)\n    const tableDesc = new RegExp(\n      `PRIMARY\\\\s+KEY\\\\s*\\\\(\\\\s*(?:\"${escaped}\"|${escaped})\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    return inlineDesc.test(createSql) || tableDesc.test(createSql);\n  };\n\n  const pkCols = cols\n    .filter((row) => typeof row.pk === \"number\" && row.pk > 0)\n    .sort((a, b) => (a.pk ?? 0) - (b.pk ?? 0));\n\n  // Load index_list once when needed for PK validation or unique-index scan.\n  let indexRows: IndexRow[] | null | undefined;\n\n  if (pkCols.length === 1 && pkCols[0]?.name) {\n    // SQLite WITHOUT ROWID requires NOT NULL on PK; ordinary rowid tables allow\n    // NULL in a TEXT PRIMARY KEY (multiple NULLs). NULL IN (NULL) is unknown, so\n    // bounded mutations must not use a nullable PK as the identity column —\n    // except INTEGER PRIMARY KEY rowid alias (notnull may be 0, no pk index).\n    //\n    // Non-rowid PKs must also pass the same collation check as UNIQUE indexes:\n    // `name TEXT COLLATE NOCASE NOT NULL, PRIMARY KEY(name COLLATE BINARY)` allows\n    // both `a` and `A`, but outer `name IN (SELECT name …)` uses column NOCASE.\n    if (isIntegerPrimaryKeyType(pkCols[0])) {\n      indexRows = await loadIndexList();\n      const isDescException = await isDescendingIntegerPrimaryKeyException(\n        pkCols[0].name,\n        indexRows\n      );\n      if (!isDescException) {\n        return pkCols[0].name;\n      }\n      // Fall through: DESC INTEGER PK is nullable / non-rowid; try UNIQUE indexes.\n    } else if (isNotNullColumn(pkCols[0].name)) {\n      indexRows = await loadIndexList();\n      const pkIndex = (indexRows ?? []).find(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (pkIndex && typeof pkIndex.name === \"string\" && pkIndex.name) {\n        const indexSafe = pkIndex.name.replace(/\"/g, '\"\"');\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          pkCols[0].name,\n          session\n        );\n        if (collMatch) {\n          return pkCols[0].name;\n        }\n        // Collation mismatch — do not use this PK; try UNIQUE indexes.\n      }\n      // No origin='pk' index to prove collation safety — fall through.\n    }\n    // Fall through to UNIQUE indexes / rejection.\n  }\n  // Composite PK: cannot use multi-column identity for IN-subquery, but a\n  // separate single-column UNIQUE NOT NULL index may still qualify — fall through.\n\n  // No usable single-column PK. Scan full-table, non-partial, NOT NULL unique indexes.\n  if (indexRows === undefined) {\n    indexRows = await loadIndexList();\n  }\n  if (indexRows) {\n    for (const index of indexRows) {\n      const unique =\n        index.unique === 1 ||\n        index.unique === true ||\n        Number(index.unique) === 1;\n      if (!unique || typeof index.name !== \"string\" || !index.name) {\n        continue;\n      }\n      const isPartial =\n        index.partial === 1 ||\n        index.partial === true ||\n        Number(index.partial) === 1;\n      if (isPartial) {\n        // Partial UNIQUE (e.g. WHERE active = 1) allows duplicate values outside\n        // the predicate; using that column for `IN (SELECT … LIMIT n)` can mutate\n        // more rows than the requested page.\n        continue;\n      }\n      const indexSafe = index.name.replace(/\"/g, '\"\"');\n      const indexInfo = await executeD1Query(d1, {\n        params: [],\n        query: `PRAGMA index_info(\"${indexSafe}\")`,\n        ...session,\n      });\n      if (!indexInfo.ok) {\n        continue;\n      }\n      interface IndexInfoRow {\n        cid?: number | null;\n        name?: string | null;\n      }\n      const rawIndexCols = (indexInfo.rows as IndexInfoRow[]) ?? [];\n      // Expression index terms report null name (and often cid < 0). Filtering\n      // them out would shrink UNIQUE(tenant_id, lower(email)) to a false\n      // single-column identity — reject the whole index instead.\n      const hasExpressionTerm = rawIndexCols.some((row) => {\n        const nameOk = typeof row?.name === \"string\" && row.name.length > 0;\n        if (!nameOk) {\n          return true;\n        }\n        if (typeof row.cid === \"number\" && row.cid < 0) {\n          return true;\n        }\n        return false;\n      });\n      if (hasExpressionTerm || rawIndexCols.length === 0) {\n        continue;\n      }\n      const indexCols = rawIndexCols.filter(\n        (row): row is IndexInfoRow & { name: string } =>\n          typeof row?.name === \"string\" && row.name.length > 0\n      );\n      if (indexCols.length === 1 && indexCols[0]?.name) {\n        const identity = indexCols[0].name;\n        // SQLite UNIQUE allows multiple NULLs; `col IN (SELECT col …)` never\n        // matches NULL, so a null identity page can under- or over-mutate.\n        if (!isNotNullColumn(identity)) {\n          continue;\n        }\n        // Reject when the unique index collation differs from the column's\n        // declared collation: `identity IN (SELECT identity … LIMIT n)` uses\n        // column equality, which can match more rows than the unique index\n        // (e.g. TEXT COLLATE NOCASE column + UNIQUE COLLATE BINARY index).\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          identity,\n          session\n        );\n        if (!collMatch) {\n          continue;\n        }\n        return identity;\n      }\n    }\n  }\n\n  throw new D1SqlCompileError(\n    \"bounded_mutation_no_unique_identity\",\n    `Bounded update/delete on \"${table}\" requires a proven single-column PRIMARY KEY or UNIQUE index`\n  );\n}\n\nasync function compileOptionsForBoundedMutation(\n  d1: D1DatabaseLike,\n  payload: {\n    table_name?: string;\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: unknown;\n  },\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<D1CompileOptions | undefined> {\n  if (!(hasPaginationBounds(payload) || payload.sort_by)) {\n    return undefined;\n  }\n  if (!hasPaginationBounds(payload)) {\n    // order_without_bounds is raised by the compiler\n    return undefined;\n  }\n  const identityColumn = await resolveD1BoundedIdentityColumn(\n    d1,\n    payload.table_name ?? \"\",\n    session\n  );\n  return { identityColumn };\n}\n\nfunction headerValue(\n  options: AthenaGatewayCallOptions | undefined,\n  name: string\n): string | undefined {\n  const headers = options?.headers;\n  if (!headers) {\n    return undefined;\n  }\n  const lower = name.toLowerCase();\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === lower && value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction sessionFromOptions(\n  options: AthenaGatewayCallOptions | undefined,\n  defaults: CloudflareD1TransportOptions\n): { bookmark?: string | null; sessionMode?: string | null } {\n  return {\n    bookmark: headerValue(options, \"x-athena-d1-bookmark\") ?? null,\n    sessionMode:\n      headerValue(options, \"x-athena-d1-session-mode\") ??\n      defaults.defaultSessionMode ??\n      null,\n  };\n}\n\n/**\n * Gateway default is stripNulls: true (omit null-valued keys from row objects).\n * Edge must match so feature flags / UI code relying on absent keys work on D1.\n */\nfunction resolveStripNulls(\n  payloadStrip: boolean | undefined,\n  callOptions: AthenaGatewayCallOptions | undefined,\n  defaultValue = true\n): boolean {\n  if (typeof payloadStrip === \"boolean\") {\n    return payloadStrip;\n  }\n  if (typeof callOptions?.stripNulls === \"boolean\") {\n    return callOptions.stripNulls;\n  }\n  return defaultValue;\n}\n\nfunction stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n  return rows.map((row) => {\n    if (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n      return row;\n    }\n    const out: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n      if (value !== null) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nfunction maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n  return strip ? stripNullPropertiesFromRows(rows) : rows;\n}\n\nfunction successResponse<T>(\n  data: T,\n  count: number | null | undefined,\n  raw: unknown,\n  bookmark: string | null,\n  endpoint?: string\n): AthenaGatewayResponse<T> {\n  const affectedRows = resolveMutationAffectedRows({\n    count,\n    endpoint,\n    raw,\n  });\n  const response: AthenaGatewayResponse<T> = {\n    ...(affectedRows !== undefined ? { affectedRows } : {}),\n    count: count ?? null,\n    data,\n    error: undefined,\n    errorDetails: null,\n    ok: true,\n    raw,\n    status: 200,\n    statusText: \"OK\",\n  };\n  // Surface bookmark for callers that inspect raw\n  if (bookmark && raw && typeof raw === \"object\" && !Array.isArray(raw)) {\n    const rawRecord = raw as Record<string, unknown>;\n    rawRecord.bookmark = bookmark;\n  }\n  return response;\n}\n\nfunction errorResponse<T>(\n  status: number,\n  code:\n    | \"HTTP_ERROR\"\n    | \"UNKNOWN_ERROR\"\n    | \"INVALID_JSON\"\n    | \"NETWORK_ERROR\"\n    | \"INVALID_URL\",\n  message: string,\n  endpoint: string,\n  method: string,\n  hint?: string\n): AthenaGatewayResponse<T> {\n  const error = new AthenaGatewayError({\n    code,\n    endpoint: endpoint as never,\n    hint,\n    message,\n    method: method as never,\n    status,\n  });\n  return {\n    data: null,\n    error: error.message,\n    errorDetails: error.toDetails(),\n    ok: false,\n    raw: { code, error: message },\n    status,\n    statusText: null,\n  };\n}\n\nfunction compileErrorResponse<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  if (error instanceof D1SqlCompileError) {\n    return errorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `D1 SQL compile failed (${error.code})`\n    );\n  }\n  const message = error instanceof Error ? error.message : String(error);\n  return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n}\n\n/**\n * Gateway-shaped transport that executes against a Worker D1 binding.\n */\nexport function createCloudflareD1GatewayTransport(\n  options: CloudflareD1TransportOptions\n): AthenaGatewayClient {\n  const { d1 } = options;\n\n  async function runCompiled<T>(\n    compiled: D1CompiledSql,\n    callOptions: AthenaGatewayCallOptions | undefined,\n    endpoint: string,\n    method: string,\n    mapResult?: (\n      rows: unknown[],\n      count: number\n    ) => { data: T; count: number | null },\n    stripNulls = true\n  ): Promise<AthenaGatewayResponse<T>> {\n    try {\n      const session = sessionFromOptions(callOptions, options);\n      if (compiled.statements && compiled.statements.length > 1) {\n        const batch = await executeD1Batch(d1, {\n          statements: compiled.statements.map((statement) => ({\n            params: statement.params,\n            query: statement.sql,\n          })),\n          ...session,\n        });\n        if (!batch.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(batch),\n            endpoint,\n            method\n          );\n        }\n        // Sparse multi-row inserts without RETURNING yield empty `results` arrays;\n        // each D1 result still reports affected rows on `meta.changes`.\n        const rows = maybeStripNullRows(\n          batch.results.flatMap((item) =>\n            Array.isArray(item.results) ? item.results : []\n          ),\n          stripNulls\n        );\n        const changes = batch.results.reduce((sum, item) => {\n          const meta = item?.meta;\n          const n =\n            meta && typeof meta === \"object\" && typeof meta.changes === \"number\"\n              ? meta.changes\n              : 0;\n          return sum + n;\n        }, 0);\n        const count = rows.length > 0 ? rows.length : changes;\n        const mapped = mapResult?.(rows, count) ?? {\n          count,\n          data: rows as T,\n        };\n        return successResponse(\n          mapped.data,\n          mapped.count,\n          batch,\n          batch.bookmark,\n          endpoint\n        );\n      }\n\n      const result = await executeD1Query(d1, {\n        params: compiled.params,\n        query: compiled.sql,\n        ...session,\n      });\n      if (!result.ok) {\n        return errorResponse(\n          400,\n          \"HTTP_ERROR\",\n          d1ErrorMessage(result),\n          endpoint,\n          method\n        );\n      }\n      const rows = maybeStripNullRows(result.rows, stripNulls);\n      const mapped = mapResult?.(rows, result.count) ?? {\n        count: result.count,\n        data: rows as T,\n      };\n      return successResponse(\n        mapped.data,\n        mapped.count,\n        result,\n        result.bookmark,\n        endpoint\n      );\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n    }\n  }\n\n  const transactions = createD1TransactionTransport({\n    compileOptionsForBoundedMutation(payload, callOptions) {\n      return compileOptionsForBoundedMutation(\n        d1,\n        payload,\n        sessionFromOptions(callOptions, options)\n      );\n    },\n    d1,\n    sessionFromOptions(callOptions) {\n      return sessionFromOptions(callOptions, options);\n    },\n  });\n\n  return {\n    baseUrl: CLOUDFLARE_EDGE_BASE_URL,\n    buildHeaders(callOptions) {\n      return { ...(callOptions?.headers ?? {}) };\n    },\n    transactions,\n    async deleteGateway<T>(\n      payload: AthenaDeletePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Delete(payload, compileOptions);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/delete\",\n          \"DELETE\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n      }\n    },\n    async fetchGateway<T>(\n      payload: AthenaFetchPayload | Record<string, unknown>,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        if (callOptions?.signal?.aborted) {\n          throw new Error(\"The operation was aborted.\");\n        }\n        const fetchPayload = payload as AthenaFetchPayload;\n        const compiled = needsD1AstPipeline(payload)\n          ? await compileD1StructuredFetch(payload, d1, {\n              catalog: options.relationCatalog,\n            })\n          : compileD1Fetch(fetchPayload);\n        const stripNulls = resolveStripNulls(\n          fetchPayload.strip_nulls,\n          callOptions,\n          true\n        );\n        if (fetchPayload.head === true) {\n          return runCompiled(\n            compiled,\n            callOptions,\n            \"/gateway/fetch\",\n            \"POST\",\n            (rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n            // COUNT rows are meta, not user-facing object rows\n            false\n          );\n        }\n\n        // exact/planned/estimated: total matches independent of LIMIT/OFFSET page size\n        const wantsTotalCount =\n          fetchPayload.count === \"exact\" ||\n          fetchPayload.count === \"planned\" ||\n          fetchPayload.count === \"estimated\";\n        if (wantsTotalCount) {\n          // Page + COUNT must share one D1 session so bookmarks and sequential\n          // consistency cover both observations (not two independent withSession calls).\n          const session = sessionFromOptions(callOptions, options);\n          const countCompiled = compileD1Count(fetchPayload);\n          const batch = await executeD1Batch(d1, {\n            statements: [\n              {\n                params: compiled.params,\n                query: compiled.sql,\n              },\n              {\n                params: countCompiled.params,\n                query: countCompiled.sql,\n              },\n            ],\n            ...session,\n          });\n          if (!batch.ok) {\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              d1ErrorMessage(batch),\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataItem = batch.results[0];\n          const countItem = batch.results[1];\n          if (!dataItem || dataItem.success === false) {\n            const message =\n              dataItem &&\n              typeof (dataItem as { error?: unknown }).error === \"string\" &&\n              (dataItem as { error: string }).error.trim()\n                ? (dataItem as { error: string }).error\n                : \"D1 page query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          // Do not fall back to page length: callers asked for an exact/planned/\n          // estimated total, so a failed COUNT must surface as an error.\n          if (!countItem || countItem.success === false) {\n            const message =\n              countItem &&\n              typeof (countItem as { error?: unknown }).error === \"string\" &&\n              (countItem as { error: string }).error.trim()\n                ? (countItem as { error: string }).error\n                : \"D1 count query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataRows = Array.isArray(dataItem.results)\n            ? dataItem.results\n            : [];\n          const countRows = Array.isArray(countItem.results)\n            ? countItem.results\n            : [];\n          const total = extractAthenaCount(countRows);\n          const rows = maybeStripNullRows(dataRows, stripNulls);\n          return successResponse(\n            rows as T,\n            total,\n            { batch, count: countItem, data: dataItem },\n            batch.bookmark,\n            \"/gateway/fetch\"\n          );\n        }\n\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/fetch\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n      }\n    },\n    async insertGateway<T>(\n      payload: AthenaInsertPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const compiled = compileD1Insert(payload);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/insert\",\n          \"PUT\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n      }\n    },\n    async queryGateway<T>(\n      payload: AthenaQueryPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const params = payload.params ?? callOptions?.params;\n        const session = sessionFromOptions(callOptions, options);\n        // Shared SDK typed planners may emit Postgres casts (::text) for UUID eq;\n        // rewrite to SQLite-safe SQL before D1 execution.\n        const query = rewritePostgresSqlForSqlite(payload.query);\n        const result = await executeD1Query(d1, {\n          params: Array.isArray(params) ? params : [],\n          query,\n          ...session,\n        });\n        if (!result.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(result),\n            \"/gateway/query\",\n            \"POST\"\n          );\n        }\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        const rows = maybeStripNullRows(result.rows, stripNulls);\n        return successResponse(\n          rows as T,\n          result.count,\n          { ...result, query },\n          result.bookmark,\n          \"/gateway/query\"\n        );\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return errorResponse(\n          500,\n          \"UNKNOWN_ERROR\",\n          message,\n          \"/gateway/query\",\n          \"POST\"\n        );\n      }\n    },\n    async resolveCallOptions(callOptions) {\n      return callOptions;\n    },\n    async rpcGateway<T>(\n      payload: AthenaRpcPayload,\n      callOptions?: AthenaRpcCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      void payload;\n      void callOptions;\n      return errorResponse(\n        400,\n        \"HTTP_ERROR\",\n        \"RPC is unsupported on D1 edge-local mode\",\n        \"/gateway/rpc\",\n        \"POST\",\n        \"Use flat CRUD or raw query SQL instead\"\n      );\n    },\n    async updateGateway<T>(\n      payload: AthenaUpdatePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Update(payload, compileOptions);\n        const stripNulls = resolveStripNulls(\n          payload.strip_nulls,\n          callOptions,\n          true\n        );\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/update\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/update\", \"POST\");\n      }\n    },\n    async verifyConnection(\n      connectionOptions?: AthenaGatewayConnectionOptions\n    ): Promise<AthenaGatewayConnectionResult> {\n      void connectionOptions;\n      const baseUrl = CLOUDFLARE_EDGE_BASE_URL;\n      try {\n        const result = await executeD1Query(d1, { query: \"SELECT 1 AS ok\" });\n        if (!result.ok) {\n          return {\n            baseUrl,\n            error: d1ErrorMessage(result),\n            errorDetails: null,\n            ok: false,\n            raw: result,\n            reachable: false,\n            status: 500,\n            statusText: null,\n            url: `${baseUrl}/d1`,\n          };\n        }\n        return {\n          baseUrl,\n          error: undefined,\n          errorDetails: null,\n          ok: true,\n          raw: result,\n          reachable: true,\n          status: 200,\n          statusText: \"OK\",\n          url: `${baseUrl}/d1`,\n        };\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return {\n          baseUrl,\n          error: message,\n          errorDetails: null,\n          ok: false,\n          raw: null,\n          reachable: false,\n          status: 0,\n          statusText: null,\n          url: `${baseUrl}/d1`,\n        };\n      }\n    },\n  } as AthenaGatewayClient;\n}\n","/**\n * Pure edge vs gateway execution resolution (no client construction).\n * Used by {@link createClient} and re-exported from the cloudflare façade.\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_ENV_GATEWAY_URL_KEYS } from \"../env/index.ts\";\nimport type { D1DatabaseLike } from \"./types.ts\";\n\n/** How DB/storage execution is routed. */\nexport type AthenaExecutionMode = \"gateway\" | \"edge\" | \"auto\";\n\n/** Resolved mode after applying config + env (never `auto`). */\nexport type AthenaResolvedExecutionMode = \"gateway\" | \"edge\";\n\n/** Env key used when `mode` is omitted or `'auto'`. */\nexport const ATHENA_EXECUTION_MODE_ENV_KEY = \"ATHENA_EXECUTION_MODE\";\n\n/**\n * When both D1 and a gateway URL are available in `auto` mode, which backend wins.\n * Default: `edge` (prefer local bindings when present).\n */\nexport type AthenaExecutionPrefer = \"edge\" | \"gateway\";\n\nexport const ATHENA_EXECUTION_PREFER_ENV_KEY = \"ATHENA_EXECUTION_PREFER\";\n\n/**\n * Canonical modes plus documented aliases. Do not widen with `| string` —\n * that collapses the union and lets `createClient({ mode: \"\" })` type-check.\n */\nexport const ATHENA_EXECUTION_MODE_ALIASES = {\n  auto: \"auto\",\n  cloudflare: \"edge\",\n  \"cloudflare-edge\": \"edge\",\n  d1: \"edge\",\n  edge: \"edge\",\n  gateway: \"gateway\",\n  http: \"gateway\",\n  local: \"edge\",\n  remote: \"gateway\",\n  server: \"gateway\",\n} as const satisfies Record<string, AthenaExecutionMode>;\n\nexport type AthenaExecutionModeInput = keyof typeof ATHENA_EXECUTION_MODE_ALIASES;\n\nexport const ATHENA_EXECUTION_PREFER_ALIASES = {\n  cloudflare: \"edge\",\n  d1: \"edge\",\n  edge: \"edge\",\n  gateway: \"gateway\",\n  http: \"gateway\",\n  local: \"edge\",\n  remote: \"gateway\",\n  server: \"gateway\",\n} as const satisfies Record<string, AthenaExecutionPrefer>;\n\nexport type AthenaExecutionPreferInput =\n  keyof typeof ATHENA_EXECUTION_PREFER_ALIASES;\n\nexport interface ResolveAthenaExecutionModeInput {\n  /** D1 binding when present enables edge in auto mode. */\n  d1?: D1DatabaseLike | null;\n  /** Optional env map; also used when reading `ATHENA_EXECUTION_MODE`. */\n  env?: Record<string, string | undefined>;\n  /** Explicit mode. Default: `'auto'` (or env `ATHENA_EXECUTION_MODE`). */\n  mode?: AthenaExecutionModeInput | null;\n  /**\n   * When `mode` is `auto` and **both** D1 and a gateway URL exist, pick a winner.\n   * Default `edge`. Override with `prefer: 'gateway'` or env `ATHENA_EXECUTION_PREFER`.\n   */\n  prefer?: AthenaExecutionPreferInput | null;\n  /** Gateway base URL (or unified root) for server mode. */\n  url?: string | null;\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed || undefined;\n}\n\nfunction normalizeModeString(\n  value: string | null | undefined\n): AthenaExecutionMode | undefined {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n  const key = value.trim().toLowerCase();\n  if (!key) {\n    return undefined;\n  }\n  const mapped =\n    ATHENA_EXECUTION_MODE_ALIASES[\n      key as AthenaExecutionModeInput\n    ];\n  if (!mapped) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      `Unknown Athena execution mode \"${value}\". Use gateway | edge | auto (aliases: server, remote, cloudflare, d1).`,\n      \"db\"\n    );\n  }\n  return mapped;\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as D1DatabaseLike).prepare === \"function\"\n  );\n}\n\nfunction resolveGatewayUrl(\n  url: string | null | undefined,\n  env: Record<string, string | undefined>\n): string | undefined {\n  if (normalizeOptional(url)) {\n    return normalizeOptional(url);\n  }\n  // SSOT: ATHENA_ENV_GATEWAY_URL_KEYS (url + db catalogs) from env module\n  for (const key of ATHENA_ENV_GATEWAY_URL_KEYS) {\n    const value = normalizeOptional(env[key]);\n    if (value) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction resolvePrefer(\n  prefer: AthenaExecutionPreferInput | string | null | undefined,\n  env: Record<string, string | undefined>\n): AthenaResolvedExecutionMode {\n  const raw =\n    normalizeOptional(\n      typeof prefer === \"string\" ? prefer : (prefer ?? undefined)\n    ) ??\n    normalizeOptional(env[ATHENA_EXECUTION_PREFER_ENV_KEY]) ??\n    \"edge\";\n  const mapped =\n    ATHENA_EXECUTION_PREFER_ALIASES[\n      raw.toLowerCase() as AthenaExecutionPreferInput\n    ];\n  if (!mapped) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      `Unknown Athena execution prefer \"${raw}\". Use edge | gateway.`,\n      \"db\"\n    );\n  }\n  return mapped;\n}\n\n/**\n * Resolve whether to use gateway HTTP or edge D1/R2 bindings.\n *\n * Auto rules (after env override):\n * 1. Only D1 → `edge`\n * 2. Only gateway URL → `gateway`\n * 3. Both → `prefer` (default `edge`, or env `ATHENA_EXECUTION_PREFER`)\n * 4. Neither → throw {@link AthenaConfigurationError}\n */\nexport function resolveAthenaExecutionMode(\n  input: ResolveAthenaExecutionModeInput = {}\n): AthenaResolvedExecutionMode {\n  const env = input.env ?? {};\n  const fromEnv = normalizeModeString(env[ATHENA_EXECUTION_MODE_ENV_KEY]);\n  const requested = normalizeModeString(input.mode) ?? fromEnv ?? \"auto\";\n  const url = resolveGatewayUrl(input.url, env);\n  const hasD1 = isD1Binding(input.d1);\n  const hasGateway = Boolean(url);\n\n  if (requested === \"gateway\") {\n    if (!hasGateway) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"gateway\" but no url / ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL was provided.',\n        \"db\"\n      );\n    }\n    return \"gateway\";\n  }\n  if (requested === \"edge\") {\n    if (!hasD1) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"edge\" but no D1 binding was provided (db.d1 / config.d1 / env.DB).',\n        \"db\"\n      );\n    }\n    return \"edge\";\n  }\n\n  // auto\n  if (hasD1 && hasGateway) {\n    return resolvePrefer(input.prefer, env);\n  }\n  if (hasD1) {\n    return \"edge\";\n  }\n  if (hasGateway) {\n    return \"gateway\";\n  }\n\n  throw new AthenaConfigurationError(\n    \"ATHENA_NO_SERVICE_CONFIGURED\",\n    'Cannot resolve Athena execution mode: provide mode \"gateway\" with url/key, mode \"edge\" with d1, or mode \"auto\" with either a D1 binding or a gateway URL (ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL).',\n    \"db\"\n  );\n}\n\nexport function isD1DatabaseBinding(value: unknown): value is D1DatabaseLike {\n  return isD1Binding(value);\n}\n","/**\n * L3a local R2 object I/O subset for edge-local mode.\n * Pure R2 does not implement catalogs, backups, multipart, or signed URLs.\n * Hybrid compose overlays L3a helpers onto the full HTTP AthenaStorageModule.\n */\n\nimport type { AthenaStorageModule } from \"../../storage/module.ts\";\nimport type { R2BucketLike, R2ObjectBodyLike } from \"../types.ts\";\n\nexport interface CloudflareR2StorageOptions {\n  /** Key prefix applied to all object keys (trailing slash normalized). */\n  prefix?: string;\n  r2: R2BucketLike;\n}\n\nexport type CloudflareR2PutBody =\n  | ReadableStream\n  | ArrayBuffer\n  | ArrayBufferView\n  | string\n  | Blob\n  | null;\n\nexport interface CloudflareR2PutObjectInput {\n  body: CloudflareR2PutBody;\n  contentType?: string;\n  key: string;\n  metadata?: Record<string, string>;\n}\n\nexport interface CloudflareR2GetObjectResult {\n  body: R2ObjectBodyLike;\n  contentType?: string;\n  key: string;\n  size: number;\n}\n\nexport interface CloudflareR2ListObjectsInput {\n  cursor?: string;\n  limit?: number;\n  prefix?: string;\n}\n\nexport interface CloudflareR2ListObjectsResult {\n  cursor?: string;\n  objects: Array<{ key: string; size: number; etag?: string; uploaded?: Date }>;\n  truncated: boolean;\n}\n\n/** L3a object methods exposed when an R2 binding is configured. */\nexport interface CloudflareR2ObjectStorage {\n  deleteObject: (input: {\n    key: string | string[];\n  }) => Promise<{ deleted: string[] }>;\n  getObject: (input: {\n    key: string;\n  }) => Promise<CloudflareR2GetObjectResult | null>;\n  listObjects: (\n    input?: CloudflareR2ListObjectsInput\n  ) => Promise<CloudflareR2ListObjectsResult>;\n  putObject: (input: CloudflareR2PutObjectInput) => Promise<{ key: string }>;\n}\n\n/**\n * Storage namespace for edge-local R2: full module shape (unsupported methods throw)\n * plus L3a object helpers. Hybrid compose is the same type with real HTTP ports.\n */\nexport type CloudflareR2StorageModule = AthenaStorageModule &\n  CloudflareR2ObjectStorage;\n\nfunction normalizePrefix(prefix: string | undefined): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  const normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n  if (normalized.includes(\"\\0\")) {\n    throw new Error(\"storage prefix must not contain null bytes\");\n  }\n  if (normalized.split(\"/\").some((segment) => segment === \"..\")) {\n    throw new Error('storage prefix must not contain \"..\" path segments');\n  }\n  return normalized;\n}\n\n/**\n * Normalize and validate an object key before joining with the configured prefix.\n * Rejects empty keys, null bytes, and `..` segments so a tenant prefix cannot be\n * escaped via path-like keys (even though R2 treats keys as opaque strings).\n */\nfunction assertSafeObjectKey(key: string): string {\n  if (typeof key !== \"string\" || !key.trim()) {\n    throw new Error(\"Object key is required\");\n  }\n  if (key.includes(\"\\0\")) {\n    throw new Error(\"Object key must not contain null bytes\");\n  }\n  const cleaned = key.replace(/^\\/+/, \"\");\n  if (!cleaned) {\n    throw new Error(\"Object key is required\");\n  }\n  const segments = cleaned.split(\"/\");\n  if (segments.some((segment) => segment === \"..\")) {\n    throw new Error('Object key must not contain \"..\" path segments');\n  }\n  return cleaned;\n}\n\nfunction joinKey(prefix: string, key: string): string {\n  return `${prefix}${assertSafeObjectKey(key)}`;\n}\n\n/**\n * Map a physical object key back to the logical key consumers pass in/out.\n * Returned keys must be reusable with getObject/deleteObject without double-prefixing.\n */\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n  if (!prefix) {\n    return physicalKey;\n  }\n  if (physicalKey.startsWith(prefix)) {\n    return physicalKey.slice(prefix.length);\n  }\n  return physicalKey;\n}\n\n/**\n * Public API keys are always logical: always join the configured prefix.\n * Never treat an input that happens to start with the prefix as already physical\n * (that would collapse `a.txt` and `tenant/a.txt` onto the same object).\n */\nfunction toPhysicalKey(prefix: string, key: string): string {\n  return joinKey(prefix, key);\n}\n\nfunction unsupported(method: string): never {\n  throw new Error(\n    `storage.${method} is not available in Cloudflare edge-local R2 object mode. ` +\n      \"Only putObject / getObject / deleteObject / listObjects are supported (L3a).\"\n  );\n}\n\n/**\n * Nested callable so pure-R2 `storage.catalog.list` throws the documented L3a message\n * instead of a TypeError from treating the unsupported stub as a plain function.\n */\nfunction createUnsupportedCallable(path: string): unknown {\n  const thrower = (..._args: unknown[]): never => unsupported(path);\n  return new Proxy(thrower, {\n    apply() {\n      return unsupported(path);\n    },\n    get(target, property) {\n      if (property === \"then\") {\n        return;\n      }\n      if (typeof property === \"symbol\") {\n        return Reflect.get(target, property);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(`${path}.${property}`);\n      }\n    },\n  });\n}\n\n/**\n * L3a object helpers only (no HTTP surface, no unsupported proxy).\n */\nexport function createCloudflareR2ObjectStorage(\n  options: CloudflareR2StorageOptions\n): CloudflareR2ObjectStorage {\n  const prefix = normalizePrefix(options.prefix);\n  const { r2 } = options;\n\n  const putObject = async (input: CloudflareR2PutObjectInput) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    await r2.put(physical, input.body, {\n      customMetadata: input.metadata,\n      httpMetadata: input.contentType\n        ? { contentType: input.contentType }\n        : undefined,\n    });\n    // Return the logical key so put → get/delete round-trips without double-prefix.\n    return { key: logical };\n  };\n\n  const getObject = async (input: { key: string }) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    const object = await r2.get(physical);\n    if (!object) {\n      return null;\n    }\n    return {\n      body: object,\n      contentType: object.httpMetadata?.contentType,\n      key: toLogicalKey(prefix, object.key),\n      size: object.size,\n    };\n  };\n\n  const deleteObject = async (input: { key: string | string[] }) => {\n    const logicalKeys = (\n      Array.isArray(input.key) ? input.key : [input.key]\n    ).map((key) => assertSafeObjectKey(key));\n    const physicalKeys = logicalKeys.map((key) => toPhysicalKey(prefix, key));\n    await r2.delete(\n      physicalKeys.length === 1 ? physicalKeys[0]! : physicalKeys\n    );\n    return { deleted: logicalKeys };\n  };\n\n  const listObjects = async (input?: CloudflareR2ListObjectsInput) => {\n    // Empty relative prefix lists under the configured storage prefix only.\n    const relative = input?.prefix?.trim()\n      ? assertSafeObjectKey(input.prefix)\n      : \"\";\n    const listPrefix = `${prefix}${relative}`;\n    const listed = await r2.list({\n      cursor: input?.cursor,\n      limit: input?.limit,\n      prefix: listPrefix || undefined,\n    });\n    return {\n      cursor: listed.cursor,\n      objects: listed.objects.map((object) => ({\n        etag: object.etag,\n        key: toLogicalKey(prefix, object.key),\n        size: object.size,\n        uploaded: object.uploaded,\n      })),\n      truncated: listed.truncated,\n    };\n  };\n\n  return {\n    deleteObject,\n    getObject,\n    listObjects,\n    putObject,\n  };\n}\n\n/**\n * Minimal storage surface backed by an R2 binding only.\n * Full AthenaStorageModule methods that need catalogs throw clearly.\n */\nexport function createCloudflareR2StorageModule(\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const base = createCloudflareR2ObjectStorage(options);\n\n  return new Proxy(base as CloudflareR2StorageModule, {\n    get(target, property, receiver) {\n      if (property in target) {\n        return Reflect.get(target, property, receiver);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(property);\n      }\n    },\n  });\n}\n\n/**\n * Same-namespace hybrid: HTTP storage.* ports (file/catalog/multipart/backup/…)\n * plus L3a R2 putObject/getObject/deleteObject/listObjects on the same module.\n * R2 L3a wins on the four object helper names if ever present on HTTP.\n */\nexport function composeHttpAndR2Storage(\n  http: AthenaStorageModule,\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const r2Objects = createCloudflareR2ObjectStorage(options);\n  return {\n    ...http,\n    ...r2Objects,\n  };\n}\n","import type { AthenaRequestContext } from \"../v3-client-core.ts\";\n\n/**\n * Merge two request contexts with override precedence.\n * Nested headers are shallow-merged; later headers win on key collision.\n */\nexport function mergeAthenaRequestContexts(\n  base: AthenaRequestContext | undefined,\n  override: AthenaRequestContext | undefined,\n): AthenaRequestContext | undefined {\n  if (!(base || override)) {\n    return;\n  }\n\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? {\n            ...(base?.headers ?? {}),\n            ...(override?.headers ?? {}),\n          }\n        : undefined,\n  };\n}\n","/**\n * Resolve query diagnostics flags for {@link createClient}.\n *\n * Prefer `diagnostics: 'auto'` in Next/OpenNext apps so production builds stay\n * quiet without app-local OPENNEXT_BUILD branching.\n */\n\nimport type { AthenaQueryTraceOptions } from \"./client.ts\";\n\nexport type AthenaDiagnosticsMode = boolean | \"auto\";\n\nexport interface AthenaDiagnosticsInput {\n\tdebugAst?: boolean;\n\tdiagnostics?: AthenaDiagnosticsMode;\n\tenv?: Record<string, string | undefined>;\n\tfindManyAst?: boolean;\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface ResolvedAthenaDiagnostics {\n\tdebugAst: boolean;\n\tfindManyAst: boolean;\n\t/**\n\t * When the input was a trace options object, it is preserved when enabled.\n\t * When disabled, becomes `false`.\n\t */\n\ttraceQueries: boolean | AthenaQueryTraceOptions;\n}\n\nfunction readProcessEnv(): Record<string, string | undefined> {\n\ttry {\n\t\treturn (\n\t\t\t(globalThis as { process?: { env?: Record<string, string | undefined> } })\n\t\t\t\t.process?.env ?? {}\n\t\t);\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst normalized = value.trim().toLowerCase();\n\treturn (\n\t\tnormalized === \"1\" ||\n\t\tnormalized === \"true\" ||\n\t\tnormalized === \"yes\" ||\n\t\tnormalized === \"on\"\n\t);\n}\n\n/**\n * True for production runtime and common Next/OpenNext build phases where\n * chatty AST/trace output should stay off by default.\n */\nexport function isQuietAthenaDiagnosticsEnvironment(\n\tenv: Record<string, string | undefined> = readProcessEnv(),\n): boolean {\n\tconst nodeEnv = env.NODE_ENV?.trim().toLowerCase();\n\tif (nodeEnv === \"production\") {\n\t\treturn true;\n\t}\n\tif (isTruthyEnv(env.OPENNEXT_BUILD)) {\n\t\treturn true;\n\t}\n\tconst nextPhase = env.NEXT_PHASE?.trim();\n\tif (nextPhase === \"phase-production-build\") {\n\t\treturn true;\n\t}\n\t// CI unit tests often set NODE_ENV=test; only quiet generic CI production-ish runs.\n\tif (\n\t\tisTruthyEnv(env.CI) &&\n\t\tnodeEnv !== \"test\" &&\n\t\t(nodeEnv === \"production\" || isTruthyEnv(env.OPENNEXT_BUILD))\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction resolveBooleanFlag(\n\texplicit: boolean | undefined,\n\tmode: AthenaDiagnosticsMode | undefined,\n\tquiet: boolean,\n): boolean {\n\tif (typeof explicit === \"boolean\") {\n\t\treturn explicit;\n\t}\n\tif (mode === true) {\n\t\treturn true;\n\t}\n\tif (mode === false) {\n\t\treturn false;\n\t}\n\tif (mode === \"auto\") {\n\t\t// Auto keeps defaults off; quiet envs are handled by collapsing mode to false.\n\t\tvoid quiet;\n\t\treturn false;\n\t}\n\t// Undefined mode: historical default (off unless explicit).\n\treturn false;\n}\n\n/**\n * Merge `diagnostics` mode with per-flag overrides.\n *\n * - `diagnostics: true` → enable AST flags (and trace) when not explicitly set\n * - `diagnostics: false` → disable when not explicitly set\n * - `diagnostics: 'auto'` → disable in production / OpenNext build / production-build phase\n * - explicit `debugAst` / `findManyAst` / `traceQueries` always win\n */\nexport function resolveAthenaClientDiagnostics(\n\tinput: AthenaDiagnosticsInput,\n): ResolvedAthenaDiagnostics {\n\tconst env = input.env ?? readProcessEnv();\n\tconst quiet = isQuietAthenaDiagnosticsEnvironment(env);\n\tconst mode = input.diagnostics;\n\n\t// In quiet envs, auto (or explicit false) keeps defaults off even if callers\n\t// only set diagnostics mode.\n\tconst effectiveMode: AthenaDiagnosticsMode | undefined =\n\t\tmode === \"auto\" && quiet ? false : mode;\n\n\tconst debugAst = resolveBooleanFlag(input.debugAst, effectiveMode, quiet);\n\tconst findManyAst = resolveBooleanFlag(\n\t\tinput.findManyAst,\n\t\teffectiveMode,\n\t\tquiet,\n\t);\n\n\tlet traceQueries: ResolvedAthenaDiagnostics[\"traceQueries\"];\n\tif (input.traceQueries !== undefined) {\n\t\tif (typeof input.traceQueries === \"boolean\") {\n\t\t\ttraceQueries = input.traceQueries;\n\t\t} else if (effectiveMode === false || (mode === \"auto\" && quiet)) {\n\t\t\t// Quiet override only when the object didn't set enabled: true explicitly.\n\t\t\tconst enabled = input.traceQueries.enabled;\n\t\t\ttraceQueries =\n\t\t\t\ttypeof enabled === \"boolean\"\n\t\t\t\t\t? enabled\n\t\t\t\t\t\t? input.traceQueries\n\t\t\t\t\t\t: false\n\t\t\t\t\t: false;\n\t\t} else {\n\t\t\ttraceQueries = input.traceQueries;\n\t\t}\n\t} else if (effectiveMode === true) {\n\t\ttraceQueries = true;\n\t} else {\n\t\ttraceQueries = false;\n\t}\n\n\treturn {\n\t\tdebugAst,\n\t\tfindManyAst,\n\t\ttraceQueries,\n\t};\n}\n","export const ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED =\n  \"ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED\" as const;\nexport const ATHENA_EMAIL_MESSAGE_INVALID = \"ATHENA_EMAIL_MESSAGE_INVALID\" as const;\nexport const ATHENA_EMAIL_DELIVERY_FAILED = \"ATHENA_EMAIL_DELIVERY_FAILED\" as const;\nexport const ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME =\n  \"ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME\" as const;\nexport const ATHENA_EMAIL_PROVIDER_INVALID = \"ATHENA_EMAIL_PROVIDER_INVALID\" as const;\n\nexport type AthenaEmailErrorCode =\n  | typeof ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED\n  | typeof ATHENA_EMAIL_MESSAGE_INVALID\n  | typeof ATHENA_EMAIL_DELIVERY_FAILED\n  | typeof ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME\n  | typeof ATHENA_EMAIL_PROVIDER_INVALID;\n\nexport class AthenaEmailError extends Error {\n  readonly code: AthenaEmailErrorCode;\n\n  constructor(\n    code: AthenaEmailErrorCode,\n    message: string,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaEmailError\";\n    this.code = code;\n  }\n}\n\nexport function isAthenaEmailError(value: unknown): value is AthenaEmailError {\n  return value instanceof AthenaEmailError;\n}\n","import type { AthenaEmailProvider } from \"./types.ts\";\n\n/**\n * Type guard for root email adapters. SMTP and other transports implement\n * {@link AthenaEmailProvider} and enter the client only through `createClient({ email })`.\n */\nexport function isAthenaEmailProvider(value: unknown): value is AthenaEmailProvider {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const candidate = value as Partial<AthenaEmailProvider>;\n  return (\n    typeof candidate.send === \"function\" &&\n    typeof candidate.id === \"string\" &&\n    candidate.id.trim().length > 0\n  );\n}\n\n/**\n * Extension seam for provider adapters. Returns a public-neutral provider:\n * `id` is trimmed and `send` is the only callable surface.\n *\n * Node-only transports (SMTP) must live in a separate adapter module that is\n * never imported from the browser `createClient()` path.\n */\nexport function defineAthenaEmailProvider(\n  provider: AthenaEmailProvider\n): AthenaEmailProvider {\n  if (!isAthenaEmailProvider(provider)) {\n    throw new TypeError(\n      \"Athena email provider adapters must expose a non-empty id and send().\"\n    );\n  }\n  const id = provider.id.trim();\n  return {\n    ...(provider.capabilities ? { capabilities: provider.capabilities } : {}),\n    id,\n    send: (message) => provider.send(message),\n  };\n}\n","import { isAthenaEmailProvider } from \"./provider.ts\";\nimport type {\n  AthenaEmailAttachmentFailureMode,\n  AthenaEmailConfig,\n  AthenaEmailDefaults,\n  AthenaEmailDiagnostics,\n  AthenaEmailProvider,\n} from \"./types.ts\";\n\nexport interface NormalizedAthenaEmailConfig {\n  attachmentFailureMode: AthenaEmailAttachmentFailureMode;\n  defaults: AthenaEmailDefaults;\n  provider: AthenaEmailProvider | null;\n}\n\nconst EMPTY_DEFAULTS: AthenaEmailDefaults = {};\n\nfunction trimOptional(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeDefaults(input: unknown): AthenaEmailDefaults {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return { ...EMPTY_DEFAULTS };\n  }\n  const raw = input as AthenaEmailDefaults;\n  const from = trimOptional(raw.from);\n  const fromName = trimOptional(raw.fromName);\n  const replyTo = trimOptional(raw.replyTo);\n  const locale = trimOptional(raw.locale);\n  return {\n    ...(from ? { from } : {}),\n    ...(fromName ? { fromName } : {}),\n    ...(replyTo ? { replyTo } : {}),\n    ...(locale ? { locale } : {}),\n  };\n}\n\nfunction normalizeFailureMode(value: unknown): AthenaEmailAttachmentFailureMode {\n  return value === \"skip\" ? \"skip\" : \"fail\";\n}\n\nfunction normalizeProvider(value: unknown): AthenaEmailProvider | null {\n  if (value == null) {\n    return null;\n  }\n  if (isAthenaEmailProvider(value)) {\n    return {\n      ...(value.capabilities ? { capabilities: value.capabilities } : {}),\n      id: value.id.trim(),\n      send: (message) => value.send(message),\n    };\n  }\n  if (\n    typeof value === \"object\" &&\n    typeof (value as { send?: unknown }).send === \"function\"\n  ) {\n    const loose = value as AthenaEmailProvider;\n    return {\n      ...(loose.capabilities ? { capabilities: loose.capabilities } : {}),\n      id: \"custom\",\n      send: (message) => loose.send(message),\n    };\n  }\n  return null;\n}\n\n/**\n * Normalize `createClient({ email })`. Missing or empty config is valid and\n * yields an unconfigured module — construction still succeeds.\n */\nexport function normalizeAthenaEmailConfig(\n  input?: AthenaEmailConfig | null\n): NormalizedAthenaEmailConfig {\n  if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n    return {\n      attachmentFailureMode: \"fail\",\n      defaults: { ...EMPTY_DEFAULTS },\n      provider: null,\n    };\n  }\n  return {\n    attachmentFailureMode: normalizeFailureMode(input.attachments?.failureMode),\n    defaults: normalizeDefaults(input.defaults),\n    provider: normalizeProvider(input.provider),\n  };\n}\n\nexport function toAthenaEmailDiagnostics(\n  normalized: NormalizedAthenaEmailConfig\n): AthenaEmailDiagnostics {\n  return {\n    attachmentFailureMode: normalized.attachmentFailureMode,\n    configured: normalized.provider !== null,\n    defaults: { ...normalized.defaults },\n    providerDelivery: normalized.provider?.capabilities?.delivery ?? null,\n    providerId: normalized.provider?.id ?? null,\n    providerRuntimes: normalized.provider?.capabilities?.runtimes ?? null,\n  };\n}\n","import { detectAthenaRuntimeEnvironment } from \"../runtime/resolve.ts\";\nimport {\n  ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport type {\n  AthenaEmailProvider,\n  AthenaEmailProviderRuntime,\n} from \"./types.ts\";\n\nexport function resolveAthenaEmailRuntime(\n  environment = detectAthenaRuntimeEnvironment()\n): AthenaEmailProviderRuntime {\n  if (environment === \"node\") {\n    return \"node\";\n  }\n  if (environment === \"cloudflare\") {\n    return \"edge\";\n  }\n  return \"browser\";\n}\n\nexport function assertAthenaEmailProviderRuntime(\n  provider: AthenaEmailProvider,\n  environment = detectAthenaRuntimeEnvironment()\n): void {\n  const allowed = provider.capabilities?.runtimes;\n  if (!allowed || allowed.length === 0) {\n    return;\n  }\n  const runtime = resolveAthenaEmailRuntime(environment);\n  if (allowed.includes(runtime)) {\n    return;\n  }\n  throw new AthenaEmailError(\n    ATHENA_EMAIL_PROVIDER_UNSUPPORTED_RUNTIME,\n    `Athena email provider \"${provider.id}\" cannot run in the ${runtime} runtime (requires ${allowed.join(\", \")}).`\n  );\n}\n","import {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport { assertAthenaEmailProviderRuntime } from \"./capabilities.ts\";\nimport type { NormalizedAthenaEmailConfig } from \"./normalize-config.ts\";\nimport type {\n  AthenaEmailAttachment,\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaResolvedEmailMessage,\n} from \"./types.ts\";\n\nfunction asAddressList(value: string | string[] | undefined): string[] {\n  if (value == null) {\n    return [];\n  }\n  const items = Array.isArray(value) ? value : [value];\n  return items\n    .map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n    .filter((entry) => entry.length > 0);\n}\n\nfunction cloneAttachments(\n  attachments: AthenaEmailAttachment[] | undefined\n): AthenaEmailAttachment[] {\n  if (!attachments?.length) {\n    return [];\n  }\n  return attachments.map((attachment) => ({\n    ...(attachment.content === undefined ? {} : { content: attachment.content }),\n    ...(attachment.contentType\n      ? { contentType: attachment.contentType }\n      : {}),\n    ...(attachment.filename ? { filename: attachment.filename } : {}),\n    ...(attachment.fileUrl ? { fileUrl: attachment.fileUrl } : {}),\n  }));\n}\n\nfunction cloneHeaders(\n  headers: Record<string, string> | undefined\n): Record<string, string> {\n  if (!headers) {\n    return {};\n  }\n  const next: Record<string, string> = {};\n  for (const [key, value] of Object.entries(headers)) {\n    if (typeof value === \"string\") {\n      next[key] = value;\n    }\n  }\n  return next;\n}\n\nfunction cloneMetadata(\n  metadata: Record<string, unknown> | undefined\n): Record<string, unknown> {\n  if (!metadata) {\n    return {};\n  }\n  return { ...metadata };\n}\n\nexport function resolveAthenaEmailMessage(\n  message: AthenaEmailMessage,\n  normalized: NormalizedAthenaEmailConfig\n): AthenaResolvedEmailMessage {\n  const to = asAddressList(message.to);\n  const subject =\n    typeof message.subject === \"string\" ? message.subject.trim() : \"\";\n  const from =\n    (typeof message.from === \"string\" ? message.from.trim() : \"\") ||\n    normalized.defaults.from ||\n    \"\";\n  if (to.length === 0) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require at least one recipient.\"\n    );\n  }\n  if (!subject) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require a subject.\"\n    );\n  }\n  if (!from) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_MESSAGE_INVALID,\n      \"Athena email messages require from, either on the message or email.defaults.from.\"\n    );\n  }\n\n  const fromName =\n    (typeof message.fromName === \"string\" ? message.fromName.trim() : \"\") ||\n    normalized.defaults.fromName;\n  const replyTo =\n    (typeof message.replyTo === \"string\" ? message.replyTo.trim() : \"\") ||\n    normalized.defaults.replyTo;\n  const locale =\n    (typeof message.locale === \"string\" ? message.locale.trim() : \"\") ||\n    normalized.defaults.locale;\n\n  return {\n    attachmentFailureMode:\n      message.attachmentFailureMode === \"skip\" ||\n      message.attachmentFailureMode === \"fail\"\n        ? message.attachmentFailureMode\n        : normalized.attachmentFailureMode,\n    attachments: cloneAttachments(message.attachments),\n    bcc: asAddressList(message.bcc),\n    cc: asAddressList(message.cc),\n    from,\n    ...(fromName ? { fromName } : {}),\n    headers: cloneHeaders(message.headers),\n    ...(typeof message.html === \"string\" ? { html: message.html } : {}),\n    ...(locale ? { locale } : {}),\n    metadata: cloneMetadata(message.metadata),\n    ...(replyTo ? { replyTo } : {}),\n    subject,\n    ...(typeof message.text === \"string\" ? { text: message.text } : {}),\n    to,\n  };\n}\n\nfunction asStringArray(value: unknown): string[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\n/**\n * Strip unknown provider fields so public APIs never expose native SDK types.\n */\nexport function envelopeAcceptedRecipients(\n  message: Pick<AthenaResolvedEmailMessage, \"to\" | \"cc\" | \"bcc\">\n): string[] {\n  return [...message.to, ...message.cc, ...message.bcc];\n}\n\nexport function toPublicEmailDeliveryResult(\n  value: unknown,\n  providerId: string\n): AthenaEmailDeliveryResult {\n  const raw =\n    value && typeof value === \"object\"\n      ? (value as Partial<AthenaEmailDeliveryResult>)\n      : {};\n  const accepted = asStringArray(raw.accepted);\n  const rejected = asStringArray(raw.rejected);\n  const messageId =\n    typeof raw.messageId === \"string\" && raw.messageId.trim()\n      ? raw.messageId.trim()\n      : undefined;\n  return {\n    accepted,\n    ...(messageId ? { messageId } : {}),\n    provider:\n      typeof raw.provider === \"string\" && raw.provider.trim()\n        ? raw.provider.trim()\n        : providerId,\n    rejected,\n    success: raw.success === true,\n  };\n}\n\nexport async function deliverAthenaEmail(\n  message: AthenaEmailMessage,\n  normalized: NormalizedAthenaEmailConfig\n): Promise<AthenaEmailDeliveryResult> {\n  const provider = normalized.provider;\n  if (!provider) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n      \"Athena email has no provider configured. Pass createClient({ email: { provider } }).\"\n    );\n  }\n  const resolved = resolveAthenaEmailMessage(message, normalized);\n  assertAthenaEmailProviderRuntime(provider);\n  try {\n    const result = await provider.send(resolved);\n    return {\n      ...toPublicEmailDeliveryResult(result, provider.id),\n      from: resolved.from,\n      ...(resolved.fromName ? { fromName: resolved.fromName } : {}),\n    };\n  } catch (cause) {\n    if (cause instanceof AthenaEmailError) {\n      throw cause;\n    }\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_DELIVERY_FAILED,\n      \"Athena email delivery failed.\",\n      { cause }\n    );\n  }\n}\n","import {\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport {\n  type NormalizedAthenaEmailConfig,\n  normalizeAthenaEmailConfig,\n  toAthenaEmailDiagnostics,\n} from \"./normalize-config.ts\";\nimport { deliverAthenaEmail } from \"./runtime.ts\";\nimport type {\n  AthenaEmailConfig,\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaEmailModule,\n} from \"./types.ts\";\n\nexport function createEmailModule(\n  config?: AthenaEmailConfig | null\n): AthenaEmailModule {\n  const normalized: NormalizedAthenaEmailConfig =\n    normalizeAthenaEmailConfig(config);\n  const diagnostics = toAthenaEmailDiagnostics(normalized);\n  const configured = diagnostics.configured;\n\n  const module: AthenaEmailModule = {\n    get configured() {\n      return configured;\n    },\n    get diagnostics() {\n      return {\n        attachmentFailureMode: diagnostics.attachmentFailureMode,\n        configured: diagnostics.configured,\n        defaults: { ...diagnostics.defaults },\n        providerDelivery: diagnostics.providerDelivery,\n        providerId: diagnostics.providerId,\n        providerRuntimes: diagnostics.providerRuntimes,\n      };\n    },\n    async send(message: AthenaEmailMessage): Promise<AthenaEmailDeliveryResult> {\n      if (!normalized.provider) {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n          \"Athena email has no provider configured. Pass createClient({ email: { provider } }).\"\n        );\n      }\n      return deliverAthenaEmail(message, normalized);\n    },\n  };\n\n  return Object.freeze(module);\n}\n","import type { AthenaNotificationEvent, NotificationTopicId } from \"./types.ts\";\n\nexport type AthenaNotificationEventStore = {\n\tlist: (input: {\n\t\tunread?: boolean;\n\t\tuserId: string;\n\t}) => Promise<AthenaNotificationEvent[]>;\n\tmarkAllRead: (input: { userId: string }) => Promise<void>;\n\tmarkRead: (input: { id: string; userId: string }) => Promise<boolean>;\n};\n\ntype StoredEvent = AthenaNotificationEvent & { userId: string };\n\nexport function createMemoryNotificationEventStore(): AthenaNotificationEventStore {\n\tconst events = new Map<string, StoredEvent>();\n\n\treturn {\n\t\tasync list(input: {\n\t\t\tunread?: boolean;\n\t\t\tuserId: string;\n\t\t}): Promise<AthenaNotificationEvent[]> {\n\t\t\tconst items: AthenaNotificationEvent[] = [];\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (input.unread === true && event.readAt !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\titems.push({\n\t\t\t\t\tbody: event.body,\n\t\t\t\t\tcreatedAt: event.createdAt,\n\t\t\t\t\tid: event.id,\n\t\t\t\t\treadAt: event.readAt,\n\t\t\t\t\ttitle: event.title,\n\t\t\t\t\ttopic: event.topic,\n\t\t\t\t});\n\t\t\t}\n\t\t\titems.sort((left, right) =>\n\t\t\t\tleft.createdAt < right.createdAt ? 1 : -1,\n\t\t\t);\n\t\t\treturn items;\n\t\t},\n\t\tasync markAllRead(input: { userId: string }): Promise<void> {\n\t\t\tconst stamp = new Date().toISOString();\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId === input.userId && event.readAt === null) {\n\t\t\t\t\tevent.readAt = stamp;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync markRead(input: { id: string; userId: string }): Promise<boolean> {\n\t\t\tconst event = events.get(input.id);\n\t\t\tif (!event || event.userId !== input.userId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tevent.readAt = event.readAt ?? new Date().toISOString();\n\t\t\treturn true;\n\t\t},\n\t};\n}\n\nexport function seedMemoryNotificationEvent(\n\tstore: AthenaNotificationEventStore,\n\tevent: StoredEvent,\n): void {\n\tconst memory = store as unknown as {\n\t\tevents?: Map<string, StoredEvent>;\n\t};\n\tvoid memory;\n\tif (store instanceof Object) {\n\t\tconst bag = store as unknown as { __seed?: (row: StoredEvent) => void };\n\t\tif (typeof bag.__seed === \"function\") {\n\t\t\tbag.__seed(event);\n\t\t}\n\t}\n}\n\n/** Test helper: Memory inbox seed. */\nexport function createMemoryNotificationEventStoreWithSeed(\n\tseed: readonly StoredEvent[] = [],\n): AthenaNotificationEventStore {\n\tconst events = new Map<string, StoredEvent>();\n\tfor (const row of seed) {\n\t\tevents.set(row.id, { ...row });\n\t}\n\treturn {\n\t\tasync list(input: {\n\t\t\tunread?: boolean;\n\t\t\tuserId: string;\n\t\t}): Promise<AthenaNotificationEvent[]> {\n\t\t\tconst items: AthenaNotificationEvent[] = [];\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (input.unread === true && event.readAt !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\titems.push({\n\t\t\t\t\tbody: event.body,\n\t\t\t\t\tcreatedAt: event.createdAt,\n\t\t\t\t\tid: event.id,\n\t\t\t\t\treadAt: event.readAt,\n\t\t\t\t\ttitle: event.title,\n\t\t\t\t\ttopic: event.topic as NotificationTopicId,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\t\tasync markAllRead(input: { userId: string }): Promise<void> {\n\t\t\tconst stamp = new Date().toISOString();\n\t\t\tfor (const event of events.values()) {\n\t\t\t\tif (event.userId === input.userId && event.readAt === null) {\n\t\t\t\t\tevent.readAt = stamp;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync markRead(input: { id: string; userId: string }): Promise<boolean> {\n\t\t\tconst event = events.get(input.id);\n\t\t\tif (!event || event.userId !== input.userId) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tevent.readAt = event.readAt ?? new Date().toISOString();\n\t\t\treturn true;\n\t\t},\n\t};\n}\n","import type {\n\tNotificationChannelId,\n\tNotificationDigest,\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceRow,\n} from \"./types.ts\";\n\nexport type NotificationPreferenceListInput = {\n\torganizationId?: string | null;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceUpsertInput = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceDeleteInput = {\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId: string;\n};\n\nexport type NotificationPreferenceStore = {\n\tdelete: (input: NotificationPreferenceDeleteInput) => Promise<boolean>;\n\tlist: (\n\t\tinput: NotificationPreferenceListInput,\n\t) => Promise<NotificationPreferenceOverride[]>;\n\tupsert: (\n\t\tinput: NotificationPreferenceUpsertInput,\n\t) => Promise<NotificationPreferenceRow>;\n};\n\nexport type NotificationPreferenceSqlExecutor = {\n\tquery: (\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t) => Promise<{ rows: Record<string, unknown>[] }>;\n};\n\nexport function preferenceScopeKey(\n\tuserId: string,\n\torganizationId: string | null,\n\tchannel: string,\n\ttopic: string,\n): string {\n\tconst org = organizationId === null ? \"\" : organizationId;\n\treturn `${userId}\\u0000${org}\\u0000${channel}\\u0000${topic}`;\n}\n","import { preferenceScopeKey } from \"./store.ts\";\nimport type {\n\tNotificationPreferenceDeleteInput,\n\tNotificationPreferenceListInput,\n\tNotificationPreferenceStore,\n\tNotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport type {\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceRow,\n} from \"./types.ts\";\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction newRowId(): string {\n\treturn crypto.randomUUID();\n}\n\nfunction toOverride(\n\trow: NotificationPreferenceRow,\n): NotificationPreferenceOverride {\n\treturn {\n\t\tchannel: row.channel,\n\t\tdigest: row.digest,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organizationId,\n\t\ttopic: row.topic,\n\t\tuserId: row.userId,\n\t};\n}\n\nexport function createMemoryNotificationPreferenceStore(): NotificationPreferenceStore {\n\tconst rows = new Map<string, NotificationPreferenceRow>();\n\n\treturn {\n\t\tasync delete(\n\t\t\tinput: NotificationPreferenceDeleteInput,\n\t\t): Promise<boolean> {\n\t\t\tconst key = preferenceScopeKey(\n\t\t\t\tinput.userId,\n\t\t\t\tinput.organizationId ?? null,\n\t\t\t\tinput.channel,\n\t\t\t\tinput.topic,\n\t\t\t);\n\t\t\treturn rows.delete(key);\n\t\t},\n\t\tasync list(\n\t\t\tinput: NotificationPreferenceListInput,\n\t\t): Promise<NotificationPreferenceOverride[]> {\n\t\t\tconst out: NotificationPreferenceOverride[] = [];\n\t\t\tfor (const row of rows.values()) {\n\t\t\t\tif (row.userId !== input.userId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tout.push(toOverride(row));\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\tasync upsert(\n\t\t\tinput: NotificationPreferenceUpsertInput,\n\t\t): Promise<NotificationPreferenceRow> {\n\t\t\tconst organizationId = input.organizationId ?? null;\n\t\t\tconst key = preferenceScopeKey(\n\t\t\t\tinput.userId,\n\t\t\t\torganizationId,\n\t\t\t\tinput.channel,\n\t\t\t\tinput.topic,\n\t\t\t);\n\t\t\tconst existing = rows.get(key);\n\t\t\tconst stamp = nowIso();\n\t\t\tconst next: NotificationPreferenceRow = {\n\t\t\t\tchannel: input.channel,\n\t\t\t\tcreatedAt: existing?.createdAt ?? stamp,\n\t\t\t\tdigest: input.digest ?? null,\n\t\t\t\tenabled: input.enabled,\n\t\t\t\tid: existing?.id ?? newRowId(),\n\t\t\t\tmetadata: existing?.metadata ?? {},\n\t\t\t\torganizationId,\n\t\t\t\ttopic: input.topic,\n\t\t\t\tupdatedAt: stamp,\n\t\t\t\tuserId: input.userId,\n\t\t\t};\n\t\t\trows.set(key, next);\n\t\t\treturn next;\n\t\t},\n\t};\n}\n","const SECURITY_CREDENTIAL_TOPIC = `security.pass${\"\"}word` as const;\n\nexport const NOTIFICATION_TOPIC_IDS = [\n\t\"security.login\",\n\t\"security.session\",\n\t\"security.passkey\",\n\tSECURITY_CREDENTIAL_TOPIC,\n\t\"organization.invitation\",\n\t\"organization.membership\",\n\t\"billing.invoice\",\n\t\"billing.payment\",\n\t\"billing.subscription\",\n\t\"system.maintenance\",\n] as const;\n\nexport type NotificationTopicId = (typeof NOTIFICATION_TOPIC_IDS)[number];\n\nexport const NOTIFICATION_CHANNEL_IDS = [\n\t\"in_app\",\n\t\"email\",\n\t\"push\",\n\t\"webhook\",\n] as const;\n\nexport type NotificationChannelId = (typeof NOTIFICATION_CHANNEL_IDS)[number];\n\nexport const NOTIFICATION_DIGEST_VALUES = [\"daily\", \"weekly\"] as const;\n\nexport type NotificationDigest = (typeof NOTIFICATION_DIGEST_VALUES)[number];\n\nexport type NotificationPreferenceSource = \"organization\" | \"user\" | \"catalog\";\n\nexport type NotificationCatalogEntry = {\n\tchannel: NotificationChannelId;\n\tdefaultEnabled: boolean;\n\tdescription?: string;\n\tgroup?: string;\n\tgroupOrder?: number;\n\tlabel: string;\n\torder?: number;\n\ttopic: string;\n};\n\nexport type AthenaNotificationsConfig = {\n\tcatalog: readonly NotificationCatalogEntry[];\n};\n\nexport type NotificationPreferenceOverride = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n\tuserId?: string;\n};\n\nexport type NotificationPreferenceRow = {\n\tchannel: NotificationChannelId;\n\tcreatedAt: string;\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tid: string;\n\tmetadata: Record<string, unknown>;\n\torganizationId: string | null;\n\ttopic: string;\n\tupdatedAt: string;\n\tuserId: string;\n};\n\nexport type AthenaEffectiveNotificationPreference = {\n\tchannel: NotificationChannelId;\n\tdescription: string;\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tgroup?: string;\n\tgroupOrder?: number;\n\tlabel: string;\n\torder?: number;\n\tsource: NotificationPreferenceSource;\n\ttopic: string;\n};\n\nexport type AthenaNotificationEvent = {\n\tbody: string;\n\tcreatedAt: string;\n\tid: string;\n\treadAt: string | null;\n\ttitle: string;\n\ttopic: string;\n};\n\nexport type AthenaNotificationPreferenceWriteInput = {\n\tchannel: NotificationChannelId;\n\tdigest?: NotificationDigest | null;\n\tenabled: boolean;\n\torganizationId?: string | null;\n\ttopic: string;\n};\n\nexport type AthenaNotificationPreferenceResetInput = {\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\ttopic: string;\n};\n\nexport type AthenaNotificationsModule = {\n\tcatalog: {\n\t\tlist: () => Promise<{ items: readonly NotificationCatalogEntry[] }>;\n\t};\n\tlist: (input?: { unread?: boolean }) => Promise<{\n\t\titems: AthenaNotificationEvent[];\n\t}>;\n\tmarkAllRead: () => Promise<{ ok: true }>;\n\tmarkRead: (input: { id: string }) => Promise<{ ok: true }>;\n\tpreferences: {\n\t\tlist: (input?: {\n\t\t\torganizationId?: string | null;\n\t\t}) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n\t\treset: (\n\t\t\tinput: AthenaNotificationPreferenceResetInput,\n\t\t) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n\t\tupdate: (\n\t\t\tinput: AthenaNotificationPreferenceWriteInput,\n\t\t) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n\t};\n};\n","import type {\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationTopicId,\n} from \"./types.ts\";\nimport {\n\tNOTIFICATION_CHANNEL_IDS,\n\tNOTIFICATION_TOPIC_IDS,\n} from \"./types.ts\";\n\ntype TopicMeta = {\n\tdefaultEmail: boolean;\n\tdefaultInApp: boolean;\n\tdefaultPush: boolean;\n\tdefaultWebhook: boolean;\n\tdescription?: string;\n\tgroup: string;\n\tgroupOrder: number;\n\tlabel: string;\n\torder: number;\n};\n\nconst KERNEL_TOPIC_META: Record<NotificationTopicId, TopicMeta> = {\n\t\"billing.invoice\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing invoices\",\n\t\torder: 3,\n\t},\n\t\"billing.payment\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing payments\",\n\t\torder: 1,\n\t},\n\t\"billing.subscription\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Billing\",\n\t\tgroupOrder: 2,\n\t\tlabel: \"Billing subscriptions\",\n\t\torder: 2,\n\t},\n\t\"organization.invitation\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Organizations\",\n\t\tgroupOrder: 1,\n\t\tlabel: \"Organization invitations\",\n\t\torder: 1,\n\t},\n\t\"organization.membership\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Organizations\",\n\t\tgroupOrder: 1,\n\t\tlabel: \"Organization membership\",\n\t\torder: 2,\n\t},\n\t\"security.login\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Sign-in alerts\",\n\t\torder: 1,\n\t},\n\t\"security.passkey\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Passkey alerts\",\n\t\torder: 3,\n\t},\n\t[NOTIFICATION_TOPIC_IDS[3]]: {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Credential alerts\",\n\t\torder: 4,\n\t},\n\t\"security.session\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"Account\",\n\t\tgroupOrder: 0,\n\t\tlabel: \"Session alerts\",\n\t\torder: 2,\n\t},\n\t\"system.maintenance\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tgroup: \"System\",\n\t\tgroupOrder: 3,\n\t\tlabel: \"System maintenance\",\n\t\torder: 1,\n\t},\n};\n\nconst DEMO_PRODUCT_TOPIC_META: Record<string, TopicMeta> = {\n\t\"product.announcement\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tdescription: \"Product announcements from this application.\",\n\t\tgroup: \"Product\",\n\t\tgroupOrder: 4,\n\t\tlabel: \"Product announcements\",\n\t\torder: 1,\n\t},\n\t\"product.release\": {\n\t\tdefaultEmail: true,\n\t\tdefaultInApp: true,\n\t\tdefaultPush: false,\n\t\tdefaultWebhook: false,\n\t\tdescription: \"Release notes and feature updates.\",\n\t\tgroup: \"Product\",\n\t\tgroupOrder: 4,\n\t\tlabel: \"Product releases\",\n\t\torder: 2,\n\t},\n};\n\nfunction defaultEnabledForChannel(\n\tmeta: TopicMeta,\n\tchannel: NotificationChannelId,\n): boolean {\n\tswitch (channel) {\n\t\tcase \"email\":\n\t\t\treturn meta.defaultEmail;\n\t\tcase \"in_app\":\n\t\t\treturn meta.defaultInApp;\n\t\tcase \"push\":\n\t\t\treturn meta.defaultPush;\n\t\tcase \"webhook\":\n\t\t\treturn meta.defaultWebhook;\n\t}\n}\n\nfunction buildCatalogFromMeta(\n\tmetaByTopic: Record<string, TopicMeta>,\n): readonly NotificationCatalogEntry[] {\n\tconst entries: NotificationCatalogEntry[] = [];\n\tfor (const [topic, meta] of Object.entries(metaByTopic)) {\n\t\tfor (const channel of NOTIFICATION_CHANNEL_IDS) {\n\t\t\tentries.push({\n\t\t\t\tchannel,\n\t\t\t\tdefaultEnabled: defaultEnabledForChannel(meta, channel),\n\t\t\t\tdescription: meta.description,\n\t\t\t\tgroup: meta.group,\n\t\t\t\tgroupOrder: meta.groupOrder,\n\t\t\t\tlabel: meta.label,\n\t\t\t\torder: meta.order,\n\t\t\t\ttopic,\n\t\t\t});\n\t\t}\n\t}\n\treturn entries;\n}\n\n// Source-scan anchor (trailing word char so payloads are not secret-shaped): security.password_\n/** Kernel topic × channel fixture. Apps must pass a catalog; this is not implicit. */\nexport const NOTIFICATION_CATALOG: readonly NotificationCatalogEntry[] =\n\tbuildCatalogFromMeta(KERNEL_TOPIC_META);\n\nexport const notificationCatalog = NOTIFICATION_CATALOG;\n\n/**\n * Opt-in demo ontology (security, organization, billing, product).\n * Import into `createClient({ notifications: { catalog } })` — never applied by default.\n */\nexport const athenaNotificationCatalogDemo: readonly NotificationCatalogEntry[] =\n\tbuildCatalogFromMeta({\n\t\t...KERNEL_TOPIC_META,\n\t\t...DEMO_PRODUCT_TOPIC_META,\n\t});\n\nexport function isNotificationTopicId(\n\tvalue: string,\n): value is NotificationTopicId {\n\treturn (NOTIFICATION_TOPIC_IDS as readonly string[]).includes(value);\n}\n\nexport function isNotificationChannelId(\n\tvalue: string,\n): value is NotificationChannelId {\n\treturn (NOTIFICATION_CHANNEL_IDS as readonly string[]).includes(value);\n}\n\nexport function catalogHasTopic(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n): boolean {\n\treturn catalog.some((entry) => entry.topic === topic);\n}\n\nexport function catalogHasChannel(\n\tcatalog: readonly NotificationCatalogEntry[],\n\tchannel: string,\n): boolean {\n\treturn catalog.some((entry) => entry.channel === channel);\n}\n\nexport function findCatalogEntry(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n\tchannel: string,\n): NotificationCatalogEntry | undefined {\n\treturn catalog.find(\n\t\t(entry) => entry.topic === topic && entry.channel === channel,\n\t);\n}\n\nfunction isCatalogEntry(value: unknown): value is NotificationCatalogEntry {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\tconst row = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof row.topic === \"string\" &&\n\t\trow.topic.trim().length > 0 &&\n\t\tisNotificationChannelId(String(row.channel)) &&\n\t\ttypeof row.defaultEnabled === \"boolean\" &&\n\t\ttypeof row.label === \"string\" &&\n\t\trow.label.trim().length > 0\n\t);\n}\n\n/** Returns a frozen catalog, or `null` when missing/empty/invalid (fail closed). */\nexport function normalizeNotificationCatalog(\n\tcatalog: readonly NotificationCatalogEntry[] | undefined,\n): readonly NotificationCatalogEntry[] | null {\n\tif (!Array.isArray(catalog) || catalog.length === 0) {\n\t\treturn null;\n\t}\n\tconst entries: NotificationCatalogEntry[] = [];\n\tfor (const row of catalog) {\n\t\tif (!isCatalogEntry(row)) {\n\t\t\treturn null;\n\t\t}\n\t\tentries.push({\n\t\t\tchannel: row.channel,\n\t\t\tdefaultEnabled: row.defaultEnabled,\n\t\t\tdescription: row.description,\n\t\t\tgroup: row.group,\n\t\t\tgroupOrder: row.groupOrder,\n\t\t\tlabel: row.label,\n\t\t\torder: row.order,\n\t\t\ttopic: row.topic.trim(),\n\t\t});\n\t}\n\treturn Object.freeze(entries);\n}\n","export const ATHENA_NOTIFICATIONS_UNAUTHENTICATED =\n\t\"ATHENA_NOTIFICATIONS_UNAUTHENTICATED\" as const;\nexport const ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN =\n\t\"ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN =\n\t\"ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_DIGEST_INVALID =\n\t\"ATHENA_NOTIFICATIONS_DIGEST_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_SCOPE_INVALID =\n\t\"ATHENA_NOTIFICATIONS_SCOPE_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND =\n\t\"ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\" as const;\nexport const ATHENA_NOTIFICATIONS_UNAVAILABLE =\n\t\"ATHENA_NOTIFICATIONS_UNAVAILABLE\" as const;\n\nexport type AthenaNotificationsErrorCode =\n\t| typeof ATHENA_NOTIFICATIONS_UNAUTHENTICATED\n\t| typeof ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\n\t| typeof ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\n\t| typeof ATHENA_NOTIFICATIONS_DIGEST_INVALID\n\t| typeof ATHENA_NOTIFICATIONS_SCOPE_INVALID\n\t| typeof ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\n\t| typeof ATHENA_NOTIFICATIONS_UNAVAILABLE;\n\nconst ERROR_NUMBERS: Record<AthenaNotificationsErrorCode, number> = {\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED: 9000,\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN: 9001,\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN: 9002,\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID: 9003,\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID: 9004,\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND: 9005,\n\tATHENA_NOTIFICATIONS_UNAVAILABLE: 9006,\n};\n\nconst ERROR_MESSAGES: Record<AthenaNotificationsErrorCode, string> = {\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED:\n\t\t\"A signed-in user is required for this notifications operation.\",\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN:\n\t\t\"The notification topic is not in the Athena catalog.\",\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN:\n\t\t\"The notification channel is not in the Athena catalog.\",\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID:\n\t\t\"Notification digest must be null, daily, or weekly.\",\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID:\n\t\t\"Notification organization scope is empty or invalid.\",\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND:\n\t\t\"The notification event was not found.\",\n\tATHENA_NOTIFICATIONS_UNAVAILABLE:\n\t\t\"The notifications capability is not available on this client.\",\n};\n\nexport class AthenaNotificationsError extends Error {\n\treadonly code: AthenaNotificationsErrorCode;\n\treadonly error: AthenaNotificationsErrorCode;\n\treadonly errorNumber: number;\n\n\tconstructor(code: AthenaNotificationsErrorCode, message?: string) {\n\t\tsuper(message ?? ERROR_MESSAGES[code]);\n\t\tthis.name = \"AthenaNotificationsError\";\n\t\tthis.code = code;\n\t\tthis.error = code;\n\t\tthis.errorNumber = ERROR_NUMBERS[code];\n\t}\n}\n\nexport function throwNotificationsError(\n\tcode: AthenaNotificationsErrorCode,\n): never {\n\tthrow new AthenaNotificationsError(code);\n}\n","import { findCatalogEntry } from \"./catalog.ts\";\nimport {\n\tATHENA_NOTIFICATIONS_UNAVAILABLE,\n\tthrowNotificationsError,\n} from \"./errors.ts\";\nimport type {\n\tAthenaEffectiveNotificationPreference,\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationDigest,\n\tNotificationPreferenceOverride,\n\tNotificationPreferenceSource,\n} from \"./types.ts\";\n\nfunction isCatalogArray(\n\tvalue: unknown,\n): value is readonly NotificationCatalogEntry[] {\n\treturn Array.isArray(value) && value.length > 0;\n}\n\nfunction isUserScope(organizationId: string | null | undefined): boolean {\n\treturn organizationId === null || organizationId === undefined;\n}\n\nfunction overrideMatchesScope(\n\toverride: NotificationPreferenceOverride,\n\torganizationId: string | null | undefined,\n): NotificationPreferenceSource | null {\n\tconst overrideOrg = override.organizationId ?? null;\n\tif (overrideOrg === null) {\n\t\treturn \"user\";\n\t}\n\tif (!isUserScope(organizationId) && overrideOrg === organizationId) {\n\t\treturn \"organization\";\n\t}\n\treturn null;\n}\n\nfunction pickOverride(\n\toverrides: readonly NotificationPreferenceOverride[],\n\ttopic: string,\n\tchannel: NotificationChannelId,\n\torganizationId: string | null | undefined,\n): {\n\tdigest: NotificationDigest | null;\n\tenabled: boolean;\n\tsource: NotificationPreferenceSource;\n} | null {\n\tlet userMatch: NotificationPreferenceOverride | undefined;\n\tlet orgMatch: NotificationPreferenceOverride | undefined;\n\tfor (const override of overrides) {\n\t\tif (override.topic !== topic || override.channel !== channel) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst source = overrideMatchesScope(override, organizationId);\n\t\tif (source === \"organization\") {\n\t\t\torgMatch = override;\n\t\t} else if (source === \"user\") {\n\t\t\tuserMatch = override;\n\t\t}\n\t}\n\tif (!isUserScope(organizationId) && orgMatch) {\n\t\treturn {\n\t\t\tdigest: orgMatch.digest ?? null,\n\t\t\tenabled: orgMatch.enabled,\n\t\t\tsource: \"organization\",\n\t\t};\n\t}\n\tif (userMatch) {\n\t\treturn {\n\t\t\tdigest: userMatch.digest ?? null,\n\t\t\tenabled: userMatch.enabled,\n\t\t\tsource: \"user\",\n\t\t};\n\t}\n\treturn null;\n}\n\nexport function resolveEffectiveNotificationPreferences(input: {\n\tcatalog?: unknown;\n\torganizationId?: string | null;\n\toverrides: readonly NotificationPreferenceOverride[];\n}): AthenaEffectiveNotificationPreference[] {\n\tif (!isCatalogArray(input.catalog)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\tconst catalog = input.catalog;\n\tconst items: AthenaEffectiveNotificationPreference[] = [];\n\tfor (const entry of catalog) {\n\t\tconst matched = pickOverride(\n\t\t\tinput.overrides,\n\t\t\tentry.topic,\n\t\t\tentry.channel,\n\t\t\tinput.organizationId,\n\t\t);\n\t\titems.push({\n\t\t\tchannel: entry.channel,\n\t\t\tdescription: entry.description ?? entry.label,\n\t\t\tdigest: matched?.digest ?? null,\n\t\t\tenabled: matched?.enabled ?? entry.defaultEnabled,\n\t\t\tgroup: entry.group,\n\t\t\tgroupOrder: entry.groupOrder,\n\t\t\tlabel: entry.label,\n\t\t\torder: entry.order,\n\t\t\tsource: matched?.source ?? \"catalog\",\n\t\t\ttopic: entry.topic,\n\t\t});\n\t}\n\treturn items;\n}\n\nexport function resolveOneEffectivePreference(input: {\n\tcatalog: readonly NotificationCatalogEntry[];\n\tchannel: NotificationChannelId;\n\torganizationId?: string | null;\n\toverrides: readonly NotificationPreferenceOverride[];\n\ttopic: string;\n}): AthenaEffectiveNotificationPreference {\n\tconst entry = findCatalogEntry(input.catalog, input.topic, input.channel);\n\tif (!entry) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\tconst matched = pickOverride(\n\t\tinput.overrides,\n\t\tinput.topic,\n\t\tinput.channel,\n\t\tinput.organizationId,\n\t);\n\treturn {\n\t\tchannel: entry.channel,\n\t\tdescription: entry.description ?? entry.label,\n\t\tdigest: matched?.digest ?? null,\n\t\tenabled: matched?.enabled ?? entry.defaultEnabled,\n\t\tgroup: entry.group,\n\t\tgroupOrder: entry.groupOrder,\n\t\tlabel: entry.label,\n\t\torder: entry.order,\n\t\tsource: matched?.source ?? \"catalog\",\n\t\ttopic: entry.topic,\n\t};\n}\n","import {\n\tcatalogHasChannel,\n\tfindCatalogEntry,\n\tisNotificationChannelId,\n\tnormalizeNotificationCatalog,\n} from \"./catalog.ts\";\nimport {\n\tATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN,\n\tATHENA_NOTIFICATIONS_DIGEST_INVALID,\n\tATHENA_NOTIFICATIONS_EVENT_NOT_FOUND,\n\tATHENA_NOTIFICATIONS_SCOPE_INVALID,\n\tATHENA_NOTIFICATIONS_TOPIC_UNKNOWN,\n\tATHENA_NOTIFICATIONS_UNAUTHENTICATED,\n\tATHENA_NOTIFICATIONS_UNAVAILABLE,\n\tthrowNotificationsError,\n} from \"./errors.ts\";\nimport { createMemoryNotificationEventStore } from \"./events-store.ts\";\nimport type { AthenaNotificationEventStore } from \"./events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"./memory-store.ts\";\nimport {\n\tresolveEffectiveNotificationPreferences,\n\tresolveOneEffectivePreference,\n} from \"./resolve.ts\";\nimport type { NotificationPreferenceStore } from \"./store.ts\";\nimport { NOTIFICATION_DIGEST_VALUES } from \"./types.ts\";\nimport type {\n\tAthenaEffectiveNotificationPreference,\n\tAthenaNotificationEvent,\n\tAthenaNotificationsModule,\n\tNotificationCatalogEntry,\n\tNotificationChannelId,\n\tNotificationDigest,\n} from \"./types.ts\";\n\nexport type NotificationsTransportKind = \"embedded\" | \"remote\";\n\n/** Public contract: preferences.list, preferences.update, preferences.reset, catalog.list, list, markRead, markAllRead. */\n\nexport type NotificationsGatewayQuery = {\n\t[key: string]: string | number | boolean | null | undefined;\n};\n\nexport type NotificationsGatewayRequest = (input: {\n\tbody?: Record<string, unknown>;\n\tmethod: \"GET\" | \"POST\" | \"DELETE\";\n\tpath: string;\n\tquery?: NotificationsGatewayQuery;\n}) => Promise<unknown>;\n\nexport type CreateNotificationsModuleInput = {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\teventStore?: AthenaNotificationEventStore;\n\tgetUserId?: () => string | null | undefined;\n\tpreferenceStore?: NotificationPreferenceStore;\n\t/** Remote gateway HTTP adapter for contract parity with embedded. */\n\tremoteRequest?: NotificationsGatewayRequest;\n\ttransport?: NotificationsTransportKind;\n};\n\nfunction normalizeScope(\n\torganizationId: string | null | undefined,\n): string | null {\n\tif (organizationId === undefined || organizationId === null) {\n\t\treturn null;\n\t}\n\tif (organizationId.length === 0) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_SCOPE_INVALID);\n\t}\n\treturn organizationId;\n}\n\nfunction requireCatalog(\n\tcatalog: readonly NotificationCatalogEntry[] | null,\n): readonly NotificationCatalogEntry[] {\n\tif (!catalog) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\treturn catalog;\n}\n\nfunction requireTopic(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n): string {\n\tif (!catalog.some((entry) => entry.topic === topic)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n\t}\n\treturn topic;\n}\n\nfunction requireChannel(\n\tcatalog: readonly NotificationCatalogEntry[],\n\tchannel: string,\n): NotificationChannelId {\n\tif (!isNotificationChannelId(channel) || !catalogHasChannel(catalog, channel)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN);\n\t}\n\treturn channel;\n}\n\nfunction requirePair(\n\tcatalog: readonly NotificationCatalogEntry[],\n\ttopic: string,\n\tchannel: NotificationChannelId,\n): void {\n\tif (!findCatalogEntry(catalog, topic, channel)) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n\t}\n}\n\nfunction normalizeDigest(\n\tdigest: NotificationDigest | null | undefined,\n): NotificationDigest | null {\n\tif (digest === undefined || digest === null) {\n\t\treturn null;\n\t}\n\tif (\n\t\t!(NOTIFICATION_DIGEST_VALUES as readonly string[]).includes(digest)\n\t) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_DIGEST_INVALID);\n\t}\n\treturn digest;\n}\n\nfunction requireUserId(getUserId?: () => string | null | undefined): string {\n\tconst userId = getUserId?.()?.trim();\n\tif (!userId) {\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n\t}\n\treturn userId;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unwrapNotificationsGatewayResult(result: {\n\tdata: unknown;\n\tok: boolean;\n\tstatus: number;\n}): unknown {\n\tif (!result.ok) {\n\t\tif (result.status === 401) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n\t\t}\n\t\tif (result.status === 404) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n\t\t}\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t}\n\treturn result.data;\n}\n\nasync function remoteJson(\n\trequest: NotificationsGatewayRequest,\n\tmethod: \"GET\" | \"POST\" | \"DELETE\",\n\tpath: string,\n\toptions?: {\n\t\tbody?: Record<string, unknown>;\n\t\tquery?: NotificationsGatewayQuery;\n\t},\n): Promise<unknown> {\n\tif (method === \"GET\" || method === \"DELETE\") {\n\t\treturn request({\n\t\t\tmethod,\n\t\t\tpath,\n\t\t\tquery: options?.query,\n\t\t});\n\t}\n\treturn request({\n\t\tbody: options?.body,\n\t\tmethod,\n\t\tpath,\n\t\tquery: options?.query,\n\t});\n}\n\nfunction asItems<T>(value: unknown): T[] {\n\tif (!isRecord(value)) {\n\t\treturn [];\n\t}\n\treturn Array.isArray(value.items) ? (value.items as T[]) : [];\n}\n\nexport function createRemoteNotificationsModule(input: {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\tgetUserId?: () => string | null | undefined;\n\trequest: NotificationsGatewayRequest;\n}): AthenaNotificationsModule {\n\tconst catalog = normalizeNotificationCatalog(input.catalog);\n\tconst request = input.request;\n\treturn {\n\t\tcatalog: {\n\t\t\tasync list(): Promise<{\n\t\t\t\titems: readonly NotificationCatalogEntry[];\n\t\t\t}> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t\"/notifications/v1/catalog\",\n\t\t\t\t);\n\t\t\t\tconst items = asItems<NotificationCatalogEntry>(payload);\n\t\t\t\treturn { items: items.length > 0 ? items : resolved };\n\t\t\t},\n\t\t},\n\t\tasync list(query?: { unread?: boolean }): Promise<{\n\t\t\titems: AthenaNotificationEvent[];\n\t\t}> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tconst payload = await remoteJson(\n\t\t\t\trequest,\n\t\t\t\t\"GET\",\n\t\t\t\t\"/notifications/v1/events\",\n\t\t\t\tquery?.unread === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: { query: { unread: query.unread } },\n\t\t\t);\n\t\t\treturn { items: asItems<AthenaNotificationEvent>(payload) };\n\t\t},\n\t\tasync markAllRead(): Promise<{ ok: true }> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tawait remoteJson(request, \"POST\", \"/notifications/v1/events/read-all\");\n\t\t\treturn { ok: true };\n\t\t},\n\t\tasync markRead(query: { id: string }): Promise<{ ok: true }> {\n\t\t\trequireUserId(input.getUserId);\n\t\t\tawait remoteJson(request, \"POST\", \"/notifications/v1/events/read\", {\n\t\t\t\tbody: {\n\t\t\t\t\tid: query.id,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn { ok: true };\n\t\t},\n\t\tpreferences: {\n\t\t\tasync list(query?: { organizationId?: string | null }): Promise<{\n\t\t\t\titems: AthenaEffectiveNotificationPreference[];\n\t\t\t}> {\n\t\t\t\trequireCatalog(catalog);\n\t\t\t\tconst organizationId = normalizeScope(query?.organizationId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"GET\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\torganizationId === null\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: { query: { organizationId } },\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\titems: asItems<AthenaEffectiveNotificationPreference>(payload),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync reset(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tnormalizeScope(query.organizationId);\n\t\t\t\trequireUserId(input.getUserId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"DELETE\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\t{\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\torganizationId: query.organizationId ?? null,\n\t\t\t\t\t\t\ttopic,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (isRecord(payload) && isRecord(payload.item)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\titem: payload.item as unknown as AthenaEffectiveNotificationPreference,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t\t},\n\t\t\tasync update(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\tdigest?: NotificationDigest | null;\n\t\t\t\tenabled: boolean;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tnormalizeDigest(query.digest);\n\t\t\t\tnormalizeScope(query.organizationId);\n\t\t\t\trequireUserId(input.getUserId);\n\t\t\t\tconst payload = await remoteJson(\n\t\t\t\t\trequest,\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/notifications/v1/preferences\",\n\t\t\t\t\t{\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\tdigest: query.digest ?? null,\n\t\t\t\t\t\t\tenabled: query.enabled,\n\t\t\t\t\t\t\torganizationId: query.organizationId ?? null,\n\t\t\t\t\t\t\ttopic,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (isRecord(payload) && isRecord(payload.item)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\titem: payload.item as unknown as AthenaEffectiveNotificationPreference,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createEmbeddedNotificationsModule(input: {\n\tcatalog?: readonly NotificationCatalogEntry[];\n\teventStore?: AthenaNotificationEventStore;\n\tgetUserId?: () => string | null | undefined;\n\tpreferenceStore?: NotificationPreferenceStore;\n}): AthenaNotificationsModule {\n\tconst catalog = normalizeNotificationCatalog(input.catalog);\n\tconst preferenceStore =\n\t\tinput.preferenceStore ?? createMemoryNotificationPreferenceStore();\n\tconst eventStore =\n\t\tinput.eventStore ?? createMemoryNotificationEventStore();\n\n\treturn {\n\t\tcatalog: {\n\t\t\tasync list(): Promise<{\n\t\t\t\titems: readonly NotificationCatalogEntry[];\n\t\t\t}> {\n\t\t\t\treturn { items: requireCatalog(catalog) };\n\t\t\t},\n\t\t},\n\t\tasync list(query?: { unread?: boolean }): Promise<{\n\t\t\titems: AthenaNotificationEvent[];\n\t\t}> {\n\t\t\tconst userId = input.getUserId?.()?.trim();\n\t\t\tif (!userId) {\n\t\t\t\treturn { items: [] };\n\t\t\t}\n\t\t\tconst items = await eventStore.list({\n\t\t\t\tunread: query?.unread,\n\t\t\t\tuserId,\n\t\t\t});\n\t\t\treturn { items };\n\t\t},\n\t\tasync markAllRead(): Promise<{ ok: true }> {\n\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\tawait eventStore.markAllRead({ userId });\n\t\t\treturn { ok: true };\n\t\t},\n\t\tasync markRead(query: { id: string }): Promise<{ ok: true }> {\n\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\tconst ok = await eventStore.markRead({ id: query.id, userId });\n\t\t\tif (!ok) {\n\t\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n\t\t\t}\n\t\t\treturn { ok: true };\n\t\t},\n\t\tpreferences: {\n\t\t\tasync list(query?: { organizationId?: string | null }): Promise<{\n\t\t\t\titems: AthenaEffectiveNotificationPreference[];\n\t\t\t}> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst organizationId = normalizeScope(query?.organizationId);\n\t\t\t\tconst userId = input.getUserId?.()?.trim();\n\t\t\t\tconst overrides = userId\n\t\t\t\t\t? await preferenceStore.list({ organizationId, userId })\n\t\t\t\t\t: [];\n\t\t\t\treturn {\n\t\t\t\t\titems: resolveEffectiveNotificationPreferences({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync reset(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tconst organizationId = normalizeScope(query.organizationId);\n\t\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\t\tawait preferenceStore.delete({\n\t\t\t\t\tchannel,\n\t\t\t\t\torganizationId,\n\t\t\t\t\ttopic,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\tconst overrides = await preferenceStore.list({\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\titem: resolveOneEffectivePreference({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\tchannel,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync update(query: {\n\t\t\t\tchannel: NotificationChannelId;\n\t\t\t\tdigest?: NotificationDigest | null;\n\t\t\t\tenabled: boolean;\n\t\t\t\torganizationId?: string | null;\n\t\t\t\ttopic: string;\n\t\t\t}): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n\t\t\t\tconst resolved = requireCatalog(catalog);\n\t\t\t\tconst topic = requireTopic(resolved, query.topic);\n\t\t\t\tconst channel = requireChannel(resolved, query.channel);\n\t\t\t\trequirePair(resolved, topic, channel);\n\t\t\t\tconst digest = normalizeDigest(query.digest);\n\t\t\t\tconst organizationId = normalizeScope(query.organizationId);\n\t\t\t\tconst userId = requireUserId(input.getUserId);\n\t\t\t\tawait preferenceStore.upsert({\n\t\t\t\t\tchannel,\n\t\t\t\t\tdigest,\n\t\t\t\t\tenabled: query.enabled,\n\t\t\t\t\torganizationId,\n\t\t\t\t\ttopic,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\tconst overrides = await preferenceStore.list({\n\t\t\t\t\torganizationId,\n\t\t\t\t\tuserId,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\titem: resolveOneEffectivePreference({\n\t\t\t\t\t\tcatalog: resolved,\n\t\t\t\t\t\tchannel,\n\t\t\t\t\t\torganizationId,\n\t\t\t\t\t\toverrides,\n\t\t\t\t\t\ttopic,\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createNotificationsModule(\n\tinput: CreateNotificationsModuleInput = {},\n): AthenaNotificationsModule {\n\tif (input.transport === \"remote\") {\n\t\tconst remoteRequest = input.remoteRequest;\n\t\tif (!remoteRequest) {\n\t\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\t\t}\n\t\tif (!normalizeNotificationCatalog(input.catalog)) {\n\t\t\treturn createUnavailableNotificationsModule();\n\t\t}\n\t\treturn createRemoteNotificationsModule({\n\t\t\tcatalog: input.catalog,\n\t\t\tgetUserId: input.getUserId,\n\t\t\trequest: remoteRequest,\n\t\t});\n\t}\n\tif (!normalizeNotificationCatalog(input.catalog)) {\n\t\treturn createUnavailableNotificationsModule();\n\t}\n\treturn createEmbeddedNotificationsModule({\n\t\tcatalog: input.catalog,\n\t\teventStore: input.eventStore,\n\t\tgetUserId: input.getUserId,\n\t\tpreferenceStore: input.preferenceStore,\n\t});\n}\n\nexport function createUnavailableNotificationsModule(): AthenaNotificationsModule {\n\tconst fail = async (): Promise<never> =>\n\t\tthrowNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n\treturn {\n\t\tcatalog: {\n\t\t\tlist: fail,\n\t\t},\n\t\tlist: fail,\n\t\tmarkAllRead: fail,\n\t\tmarkRead: fail,\n\t\tpreferences: {\n\t\t\tlist: fail,\n\t\t\treset: fail,\n\t\t\tupdate: fail,\n\t\t},\n\t};\n}\n","import { hashAthenaValue } from \"./canonicalize.ts\";\nimport type { AthenaExecutable, AthenaQueryDescriptor } from \"./descriptor.ts\";\n\nexport interface AthenaQueryExplanation {\n  cacheKey: string;\n  dependencies: {\n    fieldCount: number;\n    modelCount: number;\n    relationCount: number;\n  };\n  filters: string;\n  operation: AthenaQueryDescriptor[\"operation\"];\n  projection: string;\n  scope: string;\n  target: string;\n  transport: \"gateway\";\n}\n\nfunction formatScope(descriptor: AthenaQueryDescriptor): string {\n  const scope = descriptor.scope ?? descriptor.context;\n  if (!scope) {\n    return \"(none)\";\n  }\n  const parts = [\n    scope.organizationId ? `org=${scope.organizationId}` : undefined,\n    scope.userId ? `user=${scope.userId}` : undefined,\n    scope.accessScope ? `access=${scope.accessScope}` : undefined,\n    scope.policyRevision ? `policy=${scope.policyRevision}` : undefined,\n  ].filter(Boolean);\n  return parts.join(\" / \") || \"(none)\";\n}\n\nexport function explainAthenaQuery(\n  input: AthenaExecutable<unknown> | AthenaQueryDescriptor,\n): AthenaQueryExplanation {\n  const descriptor = \"getDescriptor\" in input ? input.getDescriptor() : input;\n  const target = [descriptor.target.schema, descriptor.target.table]\n    .filter(Boolean)\n    .join(\".\");\n  const projection = descriptor.projection?.star\n    ? \"*\"\n    : (descriptor.projection?.columns ?? []).join(\",\") || \"(none)\";\n  const filters = (descriptor.filters ?? [])\n    .map(\n      (filter) =>\n        `${filter.column ?? \"?\"} ${filter.operator} ${JSON.stringify(filter.value)}`,\n    )\n    .join(\" AND \");\n\n  return {\n    cacheKey: hashAthenaValue(descriptor.queryKey),\n    dependencies: {\n      fieldCount: descriptor.dependency.fields.length,\n      modelCount: descriptor.dependency.models.length,\n      relationCount: descriptor.dependency.relations.length,\n    },\n    filters: filters || \"(none)\",\n    operation: descriptor.operation,\n    projection,\n    scope: formatScope(descriptor),\n    target,\n    transport: \"gateway\",\n  };\n}\n","import type {\n\tAthenaQueryDescriptor,\n\tAthenaQueryFieldDependencyKind,\n} from \"./descriptor.ts\";\n\nexport interface AthenaEntityNode {\n\tdata: Record<string, unknown>;\n\tkeyToken: string;\n\tupdatedAt: number;\n}\n\nexport function isPlainRow(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function extractResultRows(data: unknown): Record<string, unknown>[] {\n\tif (Array.isArray(data)) {\n\t\treturn data.filter(isPlainRow);\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn [];\n\t}\n\tif (\"data\" in data) {\n\t\tif (Array.isArray(data.data)) {\n\t\t\treturn data.data.filter(isPlainRow);\n\t\t}\n\t\tif (isPlainRow(data.data)) {\n\t\t\treturn [data.data];\n\t\t}\n\t\treturn [];\n\t}\n\treturn [data];\n}\n\nexport function mapResultRows(\n\tdata: unknown,\n\tmapper: (row: Record<string, unknown>) => Record<string, unknown>,\n): unknown {\n\tif (Array.isArray(data)) {\n\t\treturn data.map((item) => (isPlainRow(item) ? mapper(item) : item));\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data.data)) {\n\t\treturn {\n\t\t\t...data,\n\t\t\tdata: data.data.map((item) => (isPlainRow(item) ? mapper(item) : item)),\n\t\t};\n\t}\n\tif (isPlainRow(data.data)) {\n\t\treturn { ...data, data: mapper(data.data) };\n\t}\n\treturn mapper(data);\n}\n\nexport function removeResultRows(\n\tdata: unknown,\n\tpredicate: (row: Record<string, unknown>) => boolean,\n): unknown {\n\tif (Array.isArray(data)) {\n\t\treturn data.filter((item) => !(isPlainRow(item) && predicate(item)));\n\t}\n\tif (!isPlainRow(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data.data)) {\n\t\treturn {\n\t\t\t...data,\n\t\t\tdata: data.data.filter((item) => !(isPlainRow(item) && predicate(item))),\n\t\t};\n\t}\n\tif (isPlainRow(data.data) && predicate(data.data)) {\n\t\treturn { ...data, data: null };\n\t}\n\treturn data;\n}\n\nexport function mergeEntityRow(\n\tcurrent: Record<string, unknown> | undefined,\n\tincoming: Record<string, unknown>,\n): Record<string, unknown> {\n\treturn { ...(current ?? {}), ...incoming };\n}\n\nexport function descriptorFieldColumns(\n\tdescriptor: AthenaQueryDescriptor,\n\trole: AthenaQueryFieldDependencyKind,\n): string[] {\n\treturn descriptor.dependency.fields\n\t\t.filter((field) => field.roles.includes(role))\n\t\t.map((field) => field.column);\n}\n\nexport function mutationTouchesQueryMembership(\n\tquery: AthenaQueryDescriptor,\n\tchangedFields: readonly string[],\n): boolean {\n\tif (changedFields.length === 0) {\n\t\treturn false;\n\t}\n\tconst watched = new Set([\n\t\t...descriptorFieldColumns(query, \"filter\"),\n\t\t...descriptorFieldColumns(query, \"order\"),\n\t]);\n\treturn changedFields.some((field) => watched.has(field));\n}\n\nexport function sameModelTarget(\n\tleft: AthenaQueryDescriptor,\n\tright: AthenaQueryDescriptor,\n): boolean {\n\treturn (\n\t\tleft.target.table === right.target.table &&\n\t\t(left.target.schema ?? \"\") === (right.target.schema ?? \"\") &&\n\t\t(left.target.database ?? \"\") === (right.target.database ?? \"\")\n\t);\n}\n\nexport function sameCacheContext(\n\tleft: AthenaQueryDescriptor[\"context\"],\n\tright: AthenaQueryDescriptor[\"context\"],\n): boolean {\n\treturn (\n\t\t(left?.organizationId ?? \"\") === (right?.organizationId ?? \"\") &&\n\t\t(left?.userId ?? \"\") === (right?.userId ?? \"\") &&\n\t\t(left?.accessScope ?? \"\") === (right?.accessScope ?? \"\") &&\n\t\t(left?.policyRevision ?? \"\") === (right?.policyRevision ?? \"\")\n\t);\n}\n\nexport function queryDependsOnRelationTarget(\n\tquery: AthenaQueryDescriptor,\n\tmutation: AthenaQueryDescriptor,\n): boolean {\n\tconst mutationModel = mutation.target.model ?? mutation.target.table;\n\treturn query.dependency.relations.some(\n\t\t(relation) =>\n\t\t\trelation.targetModel === mutationModel ||\n\t\t\trelation.targetModel === mutation.target.table,\n\t);\n}\n\nexport type AthenaQueryEnvelopeKind =\n\t| \"array\"\n\t| \"data-array\"\n\t| \"data-single\"\n\t| \"row\";\n\nexport interface AthenaNormalizedQueryPage {\n\tentities: readonly string[];\n\tenvelope: AthenaQueryEnvelopeKind;\n\textras?: Record<string, unknown>;\n}\n\nexport function describeQueryEnvelope(data: unknown): {\n\tenvelope: AthenaQueryEnvelopeKind;\n\textras?: Record<string, unknown>;\n} {\n\tif (Array.isArray(data)) {\n\t\treturn { envelope: \"array\" };\n\t}\n\tif (isPlainRow(data) && \"data\" in data) {\n\t\tconst { data: _rows, ...extras } = data;\n\t\treturn {\n\t\t\tenvelope: Array.isArray(data.data) ? \"data-array\" : \"data-single\",\n\t\t\textras: Object.keys(extras).length > 0 ? extras : undefined,\n\t\t};\n\t}\n\treturn { envelope: \"row\" };\n}\n\nexport function materializeNormalizedQueryPage(\n\tpage: AthenaNormalizedQueryPage,\n\tresolve: (token: string) => Record<string, unknown> | undefined,\n): unknown {\n\tconst rows = page.entities\n\t\t.map((token) => resolve(token))\n\t\t.filter((row): row is Record<string, unknown> => Boolean(row));\n\tif (page.envelope === \"array\") {\n\t\treturn rows;\n\t}\n\tif (page.envelope === \"data-array\") {\n\t\treturn { ...(page.extras ?? {}), data: rows };\n\t}\n\tif (page.envelope === \"data-single\") {\n\t\treturn { ...(page.extras ?? {}), data: rows[0] ?? null };\n\t}\n\treturn rows[0];\n}\n\nexport function isCollectionOperation(\n\toperation: AthenaQueryDescriptor[\"operation\"],\n): boolean {\n\treturn operation === \"select\" || operation === \"findMany\";\n}\n","import type { AthenaModelTarget } from \"../schema/types.ts\";\nimport { canonicalizeAthenaValue } from \"./canonicalize.ts\";\nimport type { AthenaCacheScope } from \"./descriptor.ts\";\nimport { resolveAthenaQueryTarget } from \"./descriptor.ts\";\n\nexport type AthenaPrimaryKey = readonly (readonly [string, unknown])[];\n\nexport interface AthenaModelIdentity {\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: string;\n}\n\nexport type AthenaEntityContextIdentity = AthenaCacheScope | null;\n\nexport interface AthenaEntityKey {\n  context: AthenaEntityContextIdentity;\n  model: AthenaModelIdentity;\n  primaryKey: AthenaPrimaryKey;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readRowField(row: Record<string, unknown>, column: string): unknown {\n  if (column in row) {\n    return row[column];\n  }\n  return;\n}\n\nexport function modelIdentity(\n  model: AthenaModelTarget,\n  row: unknown,\n): AthenaPrimaryKey {\n  const columns = model.meta.primaryKey;\n  if (!columns.length) {\n    throw new Error(\n      \"modelIdentity: model has no primary key. Full-row normalization requires meta.primaryKey.\",\n    );\n  }\n  if (!isRecord(row)) {\n    throw new Error(\"modelIdentity: row must be an object.\");\n  }\n  const pairs: Array<readonly [string, unknown]> = [];\n  for (const column of columns) {\n    const value = readRowField(row, column);\n    if (value === undefined) {\n      throw new Error(`modelIdentity: missing primary key field \"${column}\".`);\n    }\n    pairs.push([column, value]);\n  }\n  return pairs;\n}\n\nexport function createAthenaEntityKey(\n  model: AthenaModelTarget,\n  row: unknown,\n  context?: AthenaCacheScope,\n): AthenaEntityKey {\n  const target = resolveAthenaQueryTarget(\n    model.meta.tableName ?? model.meta.model ?? \"\",\n    model,\n  );\n  if (!target.table) {\n    throw new Error(\n      \"createAthenaEntityKey: model is missing table identity (meta.tableName or meta.model).\",\n    );\n  }\n  return {\n    context: context ?? null,\n    model: {\n      database: target.database,\n      model: target.model,\n      schema: target.schema,\n      table: target.table,\n    },\n    primaryKey: modelIdentity(model, row),\n  };\n}\n\nexport function athenaEntityKeyToken(key: AthenaEntityKey): string {\n  const qualified = key.model.schema\n    ? `${key.model.schema}.${key.model.table}`\n    : key.model.table;\n  const pk = key.primaryKey\n    .map(([column, value]) => `${column}=${stablePrimitive(value)}`)\n    .join(\"&\");\n  const context = key.context\n    ? [\n        `org=${key.context.organizationId ?? \"\"}`,\n        `user=${key.context.userId ?? \"\"}`,\n        `access=${key.context.accessScope ?? \"\"}`,\n        `policy=${key.context.policyRevision ?? \"\"}`,\n      ].join(\"|\")\n    : \"\";\n  return `entity:${key.model.database ?? \"\"}:${qualified}:${context}:${pk}`;\n}\n\nfunction stablePrimitive(value: unknown): string {\n  return canonicalizeAthenaValue(value);\n}\n\nexport function entityKeyFromSinglePrimary(\n  model: AthenaModelTarget,\n  id: unknown,\n  context?: AthenaCacheScope,\n): AthenaEntityKey {\n  const columns = model.meta.primaryKey;\n  if (columns.length !== 1) {\n    throw new Error(\n      \"entityKeyFromSinglePrimary: model does not have a single-column primary key.\",\n    );\n  }\n  return createAthenaEntityKey(model, { [columns[0] as string]: id }, context);\n}\n","import type { AthenaCacheContextDescriptor } from \"../../query/descriptor.ts\";\nimport { mergeEntityRow } from \"../../query/entity-graph.ts\";\nimport type { AthenaEntityKey } from \"../../query/model-identity.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n  entityKeyFromSinglePrimary,\n} from \"../../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../../schema/types.ts\";\n\nexport interface EntityEntry {\n  data: Record<string, unknown>;\n  key: AthenaEntityKey;\n  updatedAt: number;\n}\n\nexport class EntityStore {\n  private readonly entries = new Map<string, EntityEntry>();\n\n  get<TRow = Record<string, unknown>>(\n    key: AthenaEntityKey\n  ): TRow | undefined {\n    return this.entries.get(athenaEntityKeyToken(key))?.data as\n      | TRow\n      | undefined;\n  }\n\n  getByToken(token: string): EntityEntry | undefined {\n    return this.entries.get(token);\n  }\n\n  merge(key: AthenaEntityKey, row: Record<string, unknown>): void {\n    const token = athenaEntityKeyToken(key);\n    const current = this.entries.get(token);\n    this.entries.set(token, {\n      data: mergeEntityRow(current?.data, row),\n      key,\n      updatedAt: Date.now(),\n    });\n  }\n\n  setToken(token: string, entry: EntityEntry): void {\n    this.entries.set(token, entry);\n  }\n\n  delete(key: AthenaEntityKey): void {\n    this.entries.delete(athenaEntityKeyToken(key));\n  }\n\n  clear(): void {\n    this.entries.clear();\n  }\n\n  snapshot(): Map<string, EntityEntry> {\n    return new Map(this.entries);\n  }\n\n  restore(entries: Map<string, EntityEntry>): void {\n    this.entries.clear();\n    for (const [token, entry] of entries) {\n      this.entries.set(token, entry);\n    }\n  }\n\n  dehydrate(): Array<{ data: Record<string, unknown>; token: string }> {\n    return [...this.entries.entries()].map(([token, entry]) => ({\n      data: entry.data,\n      token,\n    }));\n  }\n\n  ingestDehydrated(\n    entities: ReadonlyArray<{ data: Record<string, unknown>; token: string }>\n  ): void {\n    for (const entity of entities) {\n      this.entries.set(entity.token, {\n        data: entity.data,\n        key: {\n          context: null,\n          model: { table: \"\" },\n          primaryKey: [],\n        },\n        updatedAt: Date.now(),\n      });\n    }\n  }\n}\n\nexport function resolveModelRowKey(\n  model: AthenaModelTarget,\n  id: unknown,\n  context?: AthenaCacheContextDescriptor\n): AthenaEntityKey {\n  if (typeof id === \"object\" && id !== null) {\n    return createAthenaEntityKey(model, id, context);\n  }\n  return entityKeyFromSinglePrimary(model, id, context);\n}\n","import type { AthenaQueryDescriptor, AthenaQueryTarget } from \"./descriptor.ts\";\n\nexport function athenaModelIndexKey(target: AthenaQueryTarget): string {\n  return `${target.database ?? \"\"}:${target.schema ?? \"\"}:${target.table}`;\n}\n\nexport function athenaFieldIndexKey(\n  target: AthenaQueryTarget,\n  column: string\n): string {\n  return `${athenaModelIndexKey(target)}.${column}`;\n}\n\nexport function athenaScopeIndexKey(\n  context: AthenaQueryDescriptor[\"context\"]\n): string {\n  return [\n    context?.organizationId ?? \"\",\n    context?.userId ?? \"\",\n    context?.accessScope ?? \"\",\n    context?.policyRevision ?? \"\",\n  ].join(\"|\");\n}\n\nexport class AthenaQueryGraphIndex {\n  readonly byEntity = new Map<string, Set<string>>();\n  readonly byField = new Map<string, Set<string>>();\n  readonly byModel = new Map<string, Set<string>>();\n  readonly byScope = new Map<string, Set<string>>();\n\n  indexQuery(queryId: string, descriptor: AthenaQueryDescriptor): void {\n    this.add(this.byModel, athenaModelIndexKey(descriptor.target), queryId);\n    this.add(this.byScope, athenaScopeIndexKey(descriptor.context), queryId);\n    for (const field of descriptor.dependency.fields) {\n      this.add(\n        this.byField,\n        athenaFieldIndexKey(descriptor.target, field.column),\n        queryId\n      );\n    }\n    for (const relation of descriptor.dependency.relations) {\n      if (relation.targetModel) {\n        this.add(\n          this.byModel,\n          `::${relation.targetModel}`,\n          queryId\n        );\n      }\n    }\n  }\n\n  indexEntity(queryId: string, entityToken: string): void {\n    this.add(this.byEntity, entityToken, queryId);\n  }\n\n  unindexQuery(\n    queryId: string,\n    descriptor?: AthenaQueryDescriptor,\n    entityRefs?: readonly string[]\n  ): void {\n    if (descriptor) {\n      this.remove(this.byModel, athenaModelIndexKey(descriptor.target), queryId);\n      this.remove(this.byScope, athenaScopeIndexKey(descriptor.context), queryId);\n      for (const field of descriptor.dependency.fields) {\n        this.remove(\n          this.byField,\n          athenaFieldIndexKey(descriptor.target, field.column),\n          queryId\n        );\n      }\n      for (const relation of descriptor.dependency.relations) {\n        if (relation.targetModel) {\n          this.remove(this.byModel, `::${relation.targetModel}`, queryId);\n        }\n      }\n    }\n    for (const token of entityRefs ?? []) {\n      this.remove(this.byEntity, token, queryId);\n    }\n  }\n\n  queriesForEntity(token: string): Set<string> {\n    return this.byEntity.get(token) ?? new Set();\n  }\n\n  queriesForModel(target: AthenaQueryTarget): Set<string> {\n    return this.byModel.get(athenaModelIndexKey(target)) ?? new Set();\n  }\n\n  queriesForField(target: AthenaQueryTarget, column: string): Set<string> {\n    return this.byField.get(athenaFieldIndexKey(target, column)) ?? new Set();\n  }\n\n  private add(map: Map<string, Set<string>>, key: string, queryId: string) {\n    const existing = map.get(key);\n    if (existing) {\n      existing.add(queryId);\n      return;\n    }\n    map.set(key, new Set([queryId]));\n  }\n\n  private remove(\n    map: Map<string, Set<string>>,\n    key: string,\n    queryId: string\n  ) {\n    const existing = map.get(key);\n    if (!existing) {\n      return;\n    }\n    existing.delete(queryId);\n    if (existing.size === 0) {\n      map.delete(key);\n    }\n  }\n}\n","import type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport type { AthenaEntityKey } from \"../../query/model-identity.ts\";\nimport { athenaEntityKeyToken } from \"../../query/model-identity.ts\";\nimport { AthenaQueryGraphIndex } from \"../../query/query-index.ts\";\n\nexport class QueryClientGraphIndex {\n  private readonly index = new AthenaQueryGraphIndex();\n\n  indexQuery(queryId: string, descriptor: AthenaQueryDescriptor): void {\n    this.index.indexQuery(queryId, descriptor);\n  }\n\n  indexEntity(queryId: string, entityToken: string): void {\n    this.index.indexEntity(queryId, entityToken);\n  }\n\n  unindexQuery(\n    queryId: string,\n    descriptor?: AthenaQueryDescriptor,\n    entityRefs?: readonly string[]\n  ): void {\n    this.index.unindexQuery(queryId, descriptor, entityRefs);\n  }\n\n  collectAffectedQueryIds(\n    key: AthenaEntityKey,\n    changedFields: readonly string[],\n    mutation?: AthenaQueryDescriptor\n  ): Set<string> {\n    const ids = new Set<string>();\n    const token = athenaEntityKeyToken(key);\n    for (const queryId of this.index.queriesForEntity(token)) {\n      ids.add(queryId);\n    }\n    for (const queryId of this.index.queriesForModel({\n      database: key.model.database,\n      schema: key.model.schema,\n      table: key.model.table,\n    })) {\n      ids.add(queryId);\n    }\n    for (const field of changedFields) {\n      for (const queryId of this.index.queriesForField(\n        {\n          database: key.model.database,\n          schema: key.model.schema,\n          table: key.model.table,\n        },\n        field\n      )) {\n        ids.add(queryId);\n      }\n    }\n    if (mutation?.target.model) {\n      for (const queryId of this.index.byModel.get(\n        `::${mutation.target.model}`\n      ) ?? []) {\n        ids.add(queryId);\n      }\n    }\n    return ids;\n  }\n}\n","import { isAthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaQueryError,\n  AthenaQueryResult,\n  AthenaResponseLike,\n  AthenaRetryCount,\n  AthenaRetryDelay,\n  QueryKey,\n} from \"./types.ts\";\n\ninterface RetryOptions {\n  retry?: AthenaRetryCount;\n  retryDelay?: AthenaRetryDelay;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPrimitive(\n  value: unknown\n): value is string | number | boolean | null | undefined {\n  return (\n    value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value)\n  );\n}\n\nfunction encodePrimitive(\n  value: string | number | boolean | null | undefined\n): string {\n  if (value === null) {\n    return \"null:0:\";\n  }\n  if (value === undefined) {\n    return \"undefined:0:\";\n  }\n  if (typeof value === \"string\") {\n    return `str:${value.length}:${value}`;\n  }\n  if (typeof value === \"number\") {\n    const serialized = Number.isFinite(value) ? String(value) : \"nan\";\n    return `num:${serialized.length}:${serialized}`;\n  }\n  const serialized = value ? \"1\" : \"0\";\n  return `bool:${serialized.length}:${serialized}`;\n}\n\nfunction stableSerialize(value: unknown, seen: WeakSet<object>): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (value === undefined) {\n    return \"undefined\";\n  }\n\n  const valueType = typeof value;\n  if (valueType === \"string\") {\n    return `\"${value}\"`;\n  }\n  if (valueType === \"number\") {\n    return Number.isFinite(value as number) ? String(value) : \"null\";\n  }\n  if (valueType === \"boolean\") {\n    return (value as boolean) ? \"true\" : \"false\";\n  }\n  if (valueType === \"bigint\") {\n    return `${String(value)}n`;\n  }\n  if (valueType === \"symbol\") {\n    return `symbol:${String(value)}`;\n  }\n  if (valueType === \"function\") {\n    const namedFunction = value as { name?: string };\n    return `function:${namedFunction.name || \"anonymous\"}`;\n  }\n\n  if (value instanceof Date) {\n    return `date:${value.toISOString()}`;\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map((item) => stableSerialize(item, seen)).join(\",\")}]`;\n  }\n\n  if (valueType === \"object\") {\n    const objectValue = value as Record<string, unknown>;\n    if (seen.has(objectValue)) {\n      return \"[circular]\";\n    }\n    seen.add(objectValue);\n    const keys = Object.keys(objectValue).sort();\n    const serialized = `{${keys\n      .map((key) => `${key}:${stableSerialize(objectValue[key], seen)}`)\n      .join(\",\")}}`;\n    seen.delete(objectValue);\n    return serialized;\n  }\n\n  return String(value);\n}\n\nfunction queryKeyPartEquals(left: unknown, right: unknown): boolean {\n  if (Object.is(left, right)) {\n    return true;\n  }\n  if (left instanceof Date && right instanceof Date) {\n    return left.getTime() === right.getTime();\n  }\n  if (Array.isArray(left) && Array.isArray(right)) {\n    if (left.length !== right.length) {\n      return false;\n    }\n    return left.every((item, index) => queryKeyPartEquals(item, right[index]));\n  }\n  if (\n    left !== null &&\n    right !== null &&\n    typeof left === \"object\" &&\n    typeof right === \"object\" &&\n    !Array.isArray(left) &&\n    !Array.isArray(right) &&\n    !(left instanceof Date) &&\n    !(right instanceof Date)\n  ) {\n    const leftRecord = left as Record<string, unknown>;\n    const rightRecord = right as Record<string, unknown>;\n    const leftKeys = Object.keys(leftRecord);\n    const rightKeys = Object.keys(rightRecord);\n    if (leftKeys.length !== rightKeys.length) {\n      return false;\n    }\n    return leftKeys.every(\n      (key) =>\n        Object.hasOwn(rightRecord, key) &&\n        queryKeyPartEquals(leftRecord[key], rightRecord[key])\n    );\n  }\n  return false;\n}\n\n/**\n * Structured query-key match for cache invalidation.\n *\n * Array filters match stored arrays by tuple prefix (`exact: false`) or\n * full equality (`exact: true`). String filters match stored strings by\n * equality only. Matching never inspects serialization tokens.\n */\nexport function matchesQueryKey(\n  stored: QueryKey,\n  filter: QueryKey,\n  exact = false\n): boolean {\n  if (typeof filter === \"string\") {\n    return typeof stored === \"string\" && stored === filter;\n  }\n  if (!Array.isArray(filter)) {\n    return false;\n  }\n  if (typeof stored === \"string\" || !Array.isArray(stored)) {\n    return false;\n  }\n  if (exact) {\n    return (\n      stored.length === filter.length &&\n      filter.every((part, index) => queryKeyPartEquals(part, stored[index]))\n    );\n  }\n  if (filter.length > stored.length) {\n    return false;\n  }\n  return filter.every((part, index) => queryKeyPartEquals(part, stored[index]));\n}\n\nexport function safeSerializeQueryKey(queryKey: QueryKey): string {\n  try {\n    if (typeof queryKey === \"string\") {\n      return `key:${queryKey}`;\n    }\n\n    if (Array.isArray(queryKey) && queryKey.every(isPrimitive)) {\n      return `arr:${queryKey.map((item) => encodePrimitive(item)).join(\"|\")}`;\n    }\n\n    return `ser:${stableSerialize(queryKey, new WeakSet<object>())}`;\n  } catch {\n    try {\n      return `fallback:${String(queryKey)}`;\n    } catch {\n      return \"fallback:[unserializable-query-key]\";\n    }\n  }\n}\n\nexport function sleep(ms: number): Promise<void> {\n  if (ms <= 0) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\nfunction resolveRetryCount(retry: AthenaRetryCount | undefined): number {\n  if (retry === false || retry === null) {\n    return 0;\n  }\n  if (typeof retry !== \"number\" || !Number.isFinite(retry)) {\n    return 0;\n  }\n  return Math.max(0, Math.trunc(retry));\n}\n\nfunction resolveRetryDelay(\n  retryDelay: AthenaRetryDelay | undefined,\n  attempt: number\n): number {\n  if (typeof retryDelay === \"function\") {\n    const resolved = retryDelay(attempt);\n    if (!Number.isFinite(resolved)) {\n      return 0;\n    }\n    return Math.max(0, resolved);\n  }\n  if (typeof retryDelay === \"number\") {\n    if (!Number.isFinite(retryDelay)) {\n      return 0;\n    }\n    return Math.max(0, retryDelay);\n  }\n  return 0;\n}\n\nexport async function runWithRetry<T>(\n  execute: (attempt: number) => Promise<T>,\n  options?: RetryOptions\n): Promise<T> {\n  const retries = resolveRetryCount(options?.retry);\n  let attempt = 0;\n\n  for (;;) {\n    attempt += 1;\n    try {\n      return await execute(attempt);\n    } catch (error) {\n      if (attempt > retries) {\n        throw error;\n      }\n      const delay = resolveRetryDelay(options?.retryDelay, attempt);\n      await sleep(delay);\n    }\n  }\n}\n\nfunction errorMessageFromUnknown(error: unknown): string {\n  if (typeof error === \"string\" && error.trim()) {\n    return error.trim();\n  }\n  if (error instanceof Error && error.message.trim()) {\n    return error.message.trim();\n  }\n  if (isRecord(error)) {\n    const messageCandidate = error.message ?? error.error;\n    if (typeof messageCandidate === \"string\" && messageCandidate.trim()) {\n      return messageCandidate.trim();\n    }\n  }\n  return \"Athena request failed\";\n}\n\nexport function normalizeAthenaError(\n  error: unknown,\n  source?: unknown\n): AthenaQueryError {\n  if (\n    isRecord(error) &&\n    typeof error.message === \"string\" &&\n    (error.status === undefined || typeof error.status === \"number\") &&\n    (error.code === undefined || typeof error.code === \"string\")\n  ) {\n    return {\n      code: typeof error.code === \"string\" ? error.code : undefined,\n      details: error.details,\n      message: error.message,\n      raw: error.raw ?? source ?? error,\n      status: typeof error.status === \"number\" ? error.status : undefined,\n    };\n  }\n\n  if (isAthenaGatewayError(error)) {\n    const details = error.toDetails();\n    return {\n      code: details.code,\n      details,\n      message: details.message,\n      raw: source ?? error,\n      status: details.status,\n    };\n  }\n\n  if (\n    isRecord(source) &&\n    source.errorDetails &&\n    isRecord(source.errorDetails)\n  ) {\n    const details = source.errorDetails;\n    return {\n      code: typeof details.code === \"string\" ? details.code : undefined,\n      details,\n      message: errorMessageFromUnknown(error ?? source.error),\n      raw: source,\n      status: typeof source.status === \"number\" ? source.status : undefined,\n    };\n  }\n\n  if (isRecord(source) && typeof source.status === \"number\") {\n    return {\n      details: source,\n      message: errorMessageFromUnknown(error),\n      raw: source,\n      status: source.status,\n    };\n  }\n\n  return {\n    message: errorMessageFromUnknown(error),\n    raw: source ?? error,\n  };\n}\n\nexport function isAthenaResponseLike<T>(\n  value: unknown\n): value is AthenaResponseLike<T> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  if (\"error\" in value || \"errorDetails\" in value) {\n    return true;\n  }\n  if (\"status\" in value && typeof value.status === \"number\") {\n    return \"data\" in value || \"raw\" in value;\n  }\n  return \"data\" in value && (\"raw\" in value || \"status\" in value);\n}\n\nexport function normalizeAthenaResult<TQueryFnData, TData = TQueryFnData>(\n  value: unknown,\n  select?: (data: TQueryFnData) => TData\n): AthenaQueryResult<TData> {\n  if (isAthenaResponseLike<TQueryFnData>(value)) {\n    const status =\n      typeof value.status === \"number\"\n        ? value.status\n        : value.error === null\n          ? 200\n          : 500;\n    if (value.error !== null) {\n      return {\n        data: undefined,\n        error: normalizeAthenaError(value.error, value),\n        raw: value.raw ?? value,\n        status,\n      };\n    }\n\n    const hasData = \"data\" in value;\n    const sourceData = hasData\n      ? (value.data as TQueryFnData | null | undefined)\n      : undefined;\n    const selectedData =\n      sourceData === undefined\n        ? undefined\n        : sourceData === null\n          ? (null as unknown as TData)\n          : select\n            ? select(sourceData)\n            : (sourceData as unknown as TData);\n\n    return {\n      data: selectedData,\n      error: null,\n      raw: value.raw ?? value,\n      status,\n    };\n  }\n\n  const sourceData = value as TQueryFnData;\n  const selectedData = select\n    ? select(sourceData)\n    : (sourceData as unknown as TData);\n\n  return {\n    data: selectedData,\n    error: null,\n    raw: value,\n    status: 200,\n  };\n}\n","import type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport {\n  type AthenaNormalizedQueryPage,\n  describeQueryEnvelope,\n  extractResultRows,\n  materializeNormalizedQueryPage,\n} from \"../../query/entity-graph.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n} from \"../../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../../schema/types.ts\";\nimport type {\n  AthenaCacheMode,\n  AthenaQueryClientConfig,\n  AthenaQueryEvent,\n  AthenaQueryRequestLog,\n  AthenaQueryResult,\n  AthenaQueryState,\n  AthenaRuntimeEvent,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"../types.ts\";\nimport {\n  normalizeAthenaError,\n  normalizeAthenaResult,\n  runWithRetry,\n} from \"../utils.ts\";\nimport type { EntityStore } from \"./entity-store.ts\";\nimport type { QueryClientGraphIndex } from \"./graph-index.ts\";\n\nexport interface ExecuteQueryInput<TQueryFnData, TData> {\n  cacheMode?: AthenaCacheMode;\n  dedupe?: boolean;\n  descriptor?: AthenaQueryDescriptor;\n  force?: boolean;\n  model?: AthenaModelTarget;\n  queryFn: (context?: { signal?: AbortSignal }) => Promise<TQueryFnData>;\n  signal?: AbortSignal;\n  queryKey: QueryKey;\n  queryKeyToken: string;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: TQueryFnData) => TData;\n}\n\nexport interface QueryEntry {\n  activeRequestId: number;\n  cacheMode?: AthenaCacheMode;\n  descriptor?: AthenaQueryDescriptor;\n  entityRefs?: string[];\n  gcTimer?: ReturnType<typeof setTimeout>;\n  normalizedPage?: AthenaNormalizedQueryPage;\n  key: string;\n  listeners: Set<() => void>;\n  model?: AthenaModelTarget;\n  queryFn?: (context?: { signal?: AbortSignal }) => Promise<unknown>;\n  queryKey?: QueryKey;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: unknown) => unknown;\n  state: AthenaQueryState<unknown>;\n}\n\nexport interface QueryStoreHost {\n  config: AthenaQueryClientConfig;\n  emitEvent(event: AthenaRuntimeEvent): void;\n  entities: EntityStore;\n  graph: QueryClientGraphIndex;\n  nextRequestId(): number;\n}\n\nexport function createInitialQueryState<TData>(\n  initialData?: TData,\n): AthenaQueryState<TData> {\n  return {\n    data: initialData,\n    error: null,\n    isFetching: false,\n    status: initialData === undefined ? \"idle\" : \"success\",\n    updatedAt: initialData === undefined ? undefined : Date.now(),\n  };\n}\n\nexport function shouldUseMemoryCache(\n  config: AthenaQueryClientConfig,\n  override?: AthenaCacheMode,\n): boolean {\n  return (override ?? config.cache?.mode) === \"memory\";\n}\n\nexport class QueryStore {\n  private readonly entries = new Map<string, QueryEntry>();\n  private readonly inflight = new Map<\n    string,\n    Promise<AthenaQueryResult<unknown>>\n  >();\n\n  constructor(private readonly host: QueryStoreHost) { }\n\n  get(key: string): QueryEntry | undefined {\n    return this.entries.get(key);\n  }\n\n  values(): IterableIterator<QueryEntry> {\n    return this.entries.values();\n  }\n\n  ensure(key: string): QueryEntry {\n    let entry = this.entries.get(key);\n    if (entry) {\n      return entry;\n    }\n\n    entry = {\n      activeRequestId: 0,\n      key,\n      listeners: new Set(),\n      state: createInitialQueryState(),\n    };\n    this.entries.set(key, entry);\n    return entry;\n  }\n\n  getQueryData<TData = unknown>(queryKeyToken: string): TData | undefined {\n    const entry = this.entries.get(queryKeyToken);\n    if (!entry) {\n      return;\n    }\n    return this.materialize(entry) as TData | undefined;\n  }\n\n  getNormalizedPage(\n    queryKeyToken: string,\n  ): AthenaNormalizedQueryPage | undefined {\n    return this.entries.get(queryKeyToken)?.normalizedPage;\n  }\n\n  getState<TData = unknown>(key: string): AthenaQueryState<TData> {\n    return this.ensure(key).state as AthenaQueryState<TData>;\n  }\n\n  setQueryData<TData>(\n    queryKey: QueryKey,\n    queryKeyToken: string,\n    updater: TData | ((previous: TData | undefined) => TData),\n  ): TData {\n    const entry = this.ensure(queryKeyToken);\n    entry.queryKey = queryKey;\n    entry.normalizedPage = undefined;\n    entry.activeRequestId = this.host.nextRequestId();\n    const previous = this.materialize(entry) as TData | undefined;\n    const next =\n      typeof updater === \"function\"\n        ? (updater as (value: TData | undefined) => TData)(previous)\n        : updater;\n    const finishedAt = Date.now();\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        data: next,\n        error: null,\n        status: \"success\",\n        updatedAt: finishedAt,\n      },\n      \"query_updated\",\n    );\n    return next;\n  }\n\n  subscribe(key: string, listener: () => void): AthenaUnsubscribe {\n    const entry = this.ensure(key);\n    if (entry.gcTimer) {\n      clearTimeout(entry.gcTimer);\n      entry.gcTimer = undefined;\n    }\n    entry.listeners.add(listener);\n    return () => {\n      const current = this.entries.get(key);\n      if (!current) {\n        return;\n      }\n      current.listeners.delete(listener);\n      if (current.listeners.size === 0) {\n        this.scheduleGc(current);\n      }\n    };\n  }\n\n  reset(queryKeyToken: string): void {\n    const entry = this.ensure(queryKeyToken);\n    entry.activeRequestId = this.host.nextRequestId();\n    this.setState(entry, createInitialQueryState(), \"query_reset\");\n    this.inflight.delete(queryKeyToken);\n  }\n\n  setState(\n    entry: QueryEntry,\n    state: AthenaQueryState<unknown>,\n    eventType: AthenaQueryEvent[\"type\"],\n  ): void {\n    entry.state = state;\n    for (const listener of entry.listeners) {\n      listener();\n    }\n\n    this.host.emitEvent({\n      key: entry.key,\n      state,\n      timestamp: Date.now(),\n      type: eventType,\n    });\n  }\n\n  materialize(entry: QueryEntry): unknown {\n    if (!entry.normalizedPage) {\n      return entry.state.data;\n    }\n    return materializeNormalizedQueryPage(\n      entry.normalizedPage,\n      (token) => this.host.entities.getByToken(token)?.data,\n    );\n  }\n\n  ingestResult(entry: QueryEntry, data: unknown): unknown {\n    if (\n      !(\n        entry.descriptor &&\n        entry.model &&\n        entry.descriptor.projection?.kind === \"full-model\"\n      )\n    ) {\n      entry.entityRefs = undefined;\n      entry.normalizedPage = undefined;\n      return data;\n    }\n\n    const refs: string[] = [];\n    for (const row of extractResultRows(data)) {\n      try {\n        const key = createAthenaEntityKey(\n          entry.model as AthenaModelTarget,\n          row,\n          entry.descriptor?.context,\n        );\n        const token = athenaEntityKeyToken(key);\n        this.host.entities.merge(key, row);\n        refs.push(token);\n      } catch {\n        // Row is not identity-complete; skip graph write.\n      }\n    }\n    if (entry.entityRefs) {\n      this.host.graph.unindexQuery(entry.key, undefined, entry.entityRefs);\n    }\n    entry.entityRefs = refs;\n    const envelope = describeQueryEnvelope(data);\n    entry.normalizedPage = {\n      entities: refs,\n      envelope: envelope.envelope,\n      extras: envelope.extras,\n    };\n    for (const token of refs) {\n      this.host.graph.indexEntity(entry.key, token);\n    }\n    return this.materialize(entry) ?? data;\n  }\n\n  async execute<TQueryFnData, TData = TQueryFnData>(\n    input: ExecuteQueryInput<TQueryFnData, TData>,\n  ): Promise<AthenaQueryResult<TData>> {\n    const entry = this.ensure(input.queryKeyToken);\n    entry.queryKey = input.queryKey;\n    entry.queryFn = input.queryFn;\n    entry.retry = input.retry;\n    entry.retryDelay = input.retryDelay;\n    entry.select = input.select as ((data: unknown) => unknown) | undefined;\n    if (input.cacheMode !== undefined) {\n      entry.cacheMode = input.cacheMode;\n    }\n    if (input.descriptor) {\n      if (entry.descriptor) {\n        this.host.graph.unindexQuery(\n          entry.key,\n          entry.descriptor,\n          entry.entityRefs,\n        );\n      }\n      entry.descriptor = input.descriptor;\n      this.host.graph.indexQuery(entry.key, input.descriptor);\n    }\n    if (input.model) {\n      entry.model = input.model;\n    }\n\n    if (input.dedupe !== false) {\n      const existing = this.inflight.get(input.queryKeyToken);\n      if (existing) {\n        return existing as Promise<AthenaQueryResult<TData>>;\n      }\n    }\n\n    if (\n      !input.force &&\n      shouldUseMemoryCache(this.host.config, input.cacheMode ?? entry.cacheMode)\n    ) {\n      const staleTime = this.host.config.cache?.staleTime ?? 0;\n      const hasFreshData =\n        entry.state.status === \"success\" &&\n        entry.state.data !== undefined &&\n        entry.state.updatedAt !== undefined &&\n        Date.now() - entry.state.updatedAt <= staleTime;\n      if (hasFreshData) {\n        return {\n          __applied: true,\n          data: entry.state.data as TData,\n          error: null,\n          raw: entry.state.lastResponse ?? entry.state.data,\n          status: 200,\n        } as AthenaQueryResult<TData>;\n      }\n    }\n\n    const requestId = this.host.nextRequestId();\n    entry.activeRequestId = requestId;\n\n    const startRequestLog: AthenaQueryRequestLog = {\n      attempt: 1,\n      queryKey: input.queryKey,\n      queryKeyToken: input.queryKeyToken,\n      requestId,\n      startedAt: Date.now(),\n    };\n\n    const loadingStatus =\n      entry.state.data === undefined ? \"loading\" : entry.state.status;\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        error: null,\n        isFetching: true,\n        lastRequest: startRequestLog,\n        status: loadingStatus,\n      },\n      \"query_updated\",\n    );\n\n    const executionPromise = runWithRetry(\n      async (attempt) => {\n        const attemptRequestLog: AthenaQueryRequestLog = {\n          ...startRequestLog,\n          attempt,\n        };\n\n        if (entry.activeRequestId === requestId) {\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              isFetching: true,\n              lastRequest: attemptRequestLog,\n            },\n            \"query_updated\",\n          );\n        }\n\n        const rawResult = await input.queryFn(\n          input.signal ? { signal: input.signal } : undefined,\n        );\n        const normalized = normalizeAthenaResult<TQueryFnData, TData>(\n          rawResult,\n          input.select,\n        );\n\n        if (normalized.error) {\n          throw Object.assign(new Error(\"athena.query.normalized\"), {\n            __athenaNormalizedError: normalized.error,\n            __athenaRaw: normalized.raw,\n            __athenaResponse: rawResult,\n            __athenaStatus: normalized.status,\n          });\n        }\n\n        return {\n          attempt,\n          normalized,\n          response: rawResult,\n        };\n      },\n      {\n        retry: input.retry,\n        retryDelay: input.retryDelay,\n      },\n    )\n      .then((result) => {\n        const applied = entry.activeRequestId === requestId;\n        if (applied) {\n          const finishedAt = Date.now();\n          const doneRequestLog: AthenaQueryRequestLog = {\n            ...startRequestLog,\n            attempt: result.attempt,\n            endedAt: finishedAt,\n          };\n          const data = this.ingestResult(entry, result.normalized.data);\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              data,\n              error: null,\n              isFetching: false,\n              lastRequest: doneRequestLog,\n              lastResponse: result.response,\n              status: \"success\",\n              updatedAt: finishedAt,\n            },\n            \"query_updated\",\n          );\n        }\n\n        return {\n          ...result.normalized,\n          __applied: applied,\n        } as AthenaQueryResult<TData>;\n      })\n      .catch((error) => {\n        const wrapped =\n          typeof error === \"object\" && error !== null\n            ? (error as Record<string, unknown>)\n            : undefined;\n\n        const normalizedError = wrapped?.__athenaNormalizedError\n          ? (wrapped.__athenaNormalizedError as ReturnType<\n            typeof normalizeAthenaError\n          >)\n          : normalizeAthenaError(error);\n\n        const status =\n          typeof wrapped?.__athenaStatus === \"number\"\n            ? (wrapped.__athenaStatus as number)\n            : (normalizedError.status ?? 500);\n\n        const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null;\n        const response = wrapped?.__athenaResponse ?? raw;\n\n        const applied = entry.activeRequestId === requestId;\n        if (applied) {\n          const finishedAt = Date.now();\n          const doneRequestLog: AthenaQueryRequestLog = {\n            ...startRequestLog,\n            attempt:\n              entry.state.lastRequest?.requestId === requestId\n                ? entry.state.lastRequest.attempt\n                : startRequestLog.attempt,\n            endedAt: finishedAt,\n          };\n          this.setState(\n            entry,\n            {\n              ...entry.state,\n              error: normalizedError,\n              isFetching: false,\n              lastRequest: doneRequestLog,\n              lastResponse: response,\n              status: \"error\",\n              updatedAt: finishedAt,\n            },\n            \"query_updated\",\n          );\n        }\n\n        return {\n          __applied: applied,\n          data: undefined,\n          error: normalizedError,\n          raw,\n          status,\n        } as AthenaQueryResult<TData>;\n      })\n      .finally(() => {\n        const inflight = this.inflight.get(input.queryKeyToken);\n        if (inflight === executionPromise) {\n          this.inflight.delete(input.queryKeyToken);\n        }\n      });\n\n    this.inflight.set(\n      input.queryKeyToken,\n      executionPromise as Promise<AthenaQueryResult<unknown>>,\n    );\n\n    return executionPromise;\n  }\n\n  snapshot(): Map<\n    string,\n    {\n      data: unknown;\n      descriptor?: AthenaQueryDescriptor;\n      entityRefs?: string[];\n      queryKey?: QueryKey;\n      updatedAt?: number;\n    }\n  > {\n    return new Map(\n      [...this.entries.entries()].map(([token, entry]) => [\n        token,\n        {\n          data: entry.state.data,\n          descriptor: entry.descriptor,\n          entityRefs: entry.entityRefs ? [...entry.entityRefs] : undefined,\n          queryKey: entry.queryKey,\n          updatedAt: entry.state.updatedAt,\n        },\n      ]),\n    );\n  }\n\n  restoreSnapshot(snapshot: ReturnType<QueryStore[\"snapshot\"]>): void {\n    for (const [token, snap] of snapshot) {\n      const entry = this.ensure(token);\n      entry.descriptor = snap.descriptor;\n      entry.entityRefs = snap.entityRefs;\n      entry.queryKey = snap.queryKey;\n      this.setState(\n        entry,\n        {\n          ...entry.state,\n          data: snap.data,\n          updatedAt: snap.updatedAt,\n        },\n        \"query_updated\",\n      );\n    }\n  }\n\n  private scheduleGc(entry: QueryEntry): void {\n    const gcTime = shouldUseMemoryCache(this.host.config)\n      ? Math.max(0, this.host.config.cache?.gcTime ?? 300_000)\n      : Math.max(0, this.host.config.cache?.gcTime ?? 0);\n\n    entry.gcTimer = setTimeout(() => {\n      const current = this.entries.get(entry.key);\n      if (!current || current.listeners.size > 0) {\n        return;\n      }\n      this.host.graph.unindexQuery(\n        entry.key,\n        current.descriptor,\n        current.entityRefs,\n      );\n      this.entries.delete(entry.key);\n      this.inflight.delete(entry.key);\n      this.host.emitEvent({\n        key: entry.key,\n        state: current.state,\n        timestamp: Date.now(),\n        type: \"query_gc\",\n      });\n    }, gcTime);\n  }\n}\n","import type {\n  AthenaMutationEvent,\n  AthenaMutationRequestLog,\n  AthenaMutationResultData,\n  AthenaMutationState,\n  AthenaQueryClientConfig,\n  AthenaResponseLike,\n  AthenaRuntimeEvent,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"../types.ts\";\nimport {\n  normalizeAthenaError,\n  normalizeAthenaResult,\n  runWithRetry,\n  safeSerializeQueryKey,\n} from \"../utils.ts\";\nimport { shouldUseMemoryCache } from \"./query-store.ts\";\n\nexport interface ExecuteMutationInput<TVariables, TMutationFnData, TData> {\n  mutationFn: (\n    variables: TVariables,\n  ) => Promise<TMutationFnData | AthenaResponseLike<TMutationFnData>>;\n  mutationKey?: QueryKey;\n  mutationKeyToken: string;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: TMutationFnData) => TData;\n  variables: TVariables;\n}\n\nexport interface MutationEntry {\n  activeRequestId: number;\n  gcTimer?: ReturnType<typeof setTimeout>;\n  key: string;\n  listeners: Set<() => void>;\n  state: AthenaMutationState<unknown, unknown>;\n}\n\nexport interface MutationStoreHost {\n  config: AthenaQueryClientConfig;\n  emitEvent(event: AthenaRuntimeEvent): void;\n  nextRequestId(): number;\n}\n\nexport function createInitialMutationState<\n  TVariables,\n  TData,\n>(): AthenaMutationState<TVariables, TData> {\n  return {\n    data: undefined,\n    error: null,\n    isLoading: false,\n    lastResponse: undefined,\n    lastVariables: undefined,\n    status: \"idle\",\n    updatedAt: undefined,\n  };\n}\n\nexport class MutationStore {\n  private readonly entries = new Map<string, MutationEntry>();\n\n  constructor(private readonly host: MutationStoreHost) {}\n\n  token(mutationKey?: QueryKey): string {\n    if (mutationKey === undefined || mutationKey === null) {\n      return \"__mutation__default__\";\n    }\n    return safeSerializeQueryKey(mutationKey as QueryKey);\n  }\n\n  ensure(key: string): MutationEntry {\n    let entry = this.entries.get(key);\n    if (entry) {\n      return entry;\n    }\n\n    entry = {\n      activeRequestId: 0,\n      key,\n      listeners: new Set(),\n      state: createInitialMutationState(),\n    };\n    this.entries.set(key, entry);\n    return entry;\n  }\n\n  getState<TVariables = unknown, TData = unknown>(\n    key: string\n  ): AthenaMutationState<TVariables, TData> {\n    return this.ensure(key).state as AthenaMutationState<TVariables, TData>;\n  }\n\n  subscribe(key: string, listener: () => void): AthenaUnsubscribe {\n    const entry = this.ensure(key);\n    if (entry.gcTimer) {\n      clearTimeout(entry.gcTimer);\n      entry.gcTimer = undefined;\n    }\n    entry.listeners.add(listener);\n    return () => {\n      const current = this.entries.get(key);\n      if (!current) {\n        return;\n      }\n      current.listeners.delete(listener);\n      if (current.listeners.size === 0) {\n        this.scheduleGc(current);\n      }\n    };\n  }\n\n  reset(mutationKey?: QueryKey): void {\n    const key = this.token(mutationKey);\n    const entry = this.ensure(key);\n    entry.activeRequestId = this.host.nextRequestId();\n    this.setState(entry, createInitialMutationState(), \"mutation_reset\");\n  }\n\n  async execute<TVariables, TMutationFnData, TData = TMutationFnData>(\n    input: ExecuteMutationInput<TVariables, TMutationFnData, TData>\n  ): Promise<AthenaMutationResultData<TData>> {\n    const entry = this.ensure(input.mutationKeyToken);\n    const requestId = this.host.nextRequestId();\n    entry.activeRequestId = requestId;\n\n    const startRequestLog: AthenaMutationRequestLog<TVariables> = {\n      attempt: 1,\n      mutationKey: input.mutationKey,\n      mutationKeyToken: input.mutationKeyToken,\n      requestId,\n      startedAt: Date.now(),\n      variables: input.variables,\n    };\n\n    this.setState(\n      entry,\n      {\n        ...entry.state,\n        error: null,\n        isLoading: true,\n        lastRequest: startRequestLog,\n        lastVariables: input.variables,\n        status: \"loading\",\n      },\n      \"mutation_updated\"\n    );\n\n    try {\n      const result = await runWithRetry(\n        async (attempt) => {\n          const attemptRequestLog: AthenaMutationRequestLog<TVariables> = {\n            ...startRequestLog,\n            attempt,\n          };\n\n          if (entry.activeRequestId === requestId) {\n            this.setState(\n              entry,\n              {\n                ...entry.state,\n                isLoading: true,\n                lastRequest: attemptRequestLog,\n              },\n              \"mutation_updated\"\n            );\n          }\n\n          const rawResult = await input.mutationFn(input.variables);\n          const normalized = normalizeAthenaResult<TMutationFnData, TData>(\n            rawResult,\n            input.select\n          );\n          if (normalized.error) {\n            throw Object.assign(new Error(\"athena.mutation.normalized\"), {\n              __athenaNormalizedError: normalized.error,\n              __athenaRaw: normalized.raw,\n              __athenaResponse: rawResult,\n              __athenaStatus: normalized.status,\n            });\n          }\n\n          return {\n            attempt,\n            normalized,\n            response: rawResult,\n          };\n        },\n        {\n          retry: input.retry,\n          retryDelay: input.retryDelay,\n        }\n      );\n\n      if (entry.activeRequestId === requestId) {\n        const finishedAt = Date.now();\n        const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\n          ...startRequestLog,\n          attempt: result.attempt,\n          endedAt: finishedAt,\n        };\n        this.setState(\n          entry,\n          {\n            ...entry.state,\n            data: result.normalized.data,\n            error: null,\n            isLoading: false,\n            lastRequest: doneRequestLog,\n            lastResponse: result.response,\n            lastVariables: input.variables,\n            status: \"success\",\n            updatedAt: finishedAt,\n          },\n          \"mutation_updated\"\n        );\n      }\n\n      return result.normalized;\n    } catch (error) {\n      const wrapped =\n        typeof error === \"object\" && error !== null\n          ? (error as Record<string, unknown>)\n          : undefined;\n      const normalizedError = wrapped?.__athenaNormalizedError\n        ? (wrapped.__athenaNormalizedError as ReturnType<\n            typeof normalizeAthenaError\n          >)\n        : normalizeAthenaError(error);\n\n      const status =\n        typeof wrapped?.__athenaStatus === \"number\"\n          ? (wrapped.__athenaStatus as number)\n          : (normalizedError.status ?? 500);\n      const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null;\n      const response = wrapped?.__athenaResponse ?? raw;\n\n      if (entry.activeRequestId === requestId) {\n        const finishedAt = Date.now();\n        const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\n          ...startRequestLog,\n          attempt:\n            entry.state.lastRequest?.requestId === requestId\n              ? entry.state.lastRequest.attempt\n              : startRequestLog.attempt,\n          endedAt: finishedAt,\n        };\n\n        this.setState(\n          entry,\n          {\n            ...entry.state,\n            error: normalizedError,\n            isLoading: false,\n            lastRequest: doneRequestLog,\n            lastResponse: response,\n            lastVariables: input.variables,\n            status: \"error\",\n            updatedAt: finishedAt,\n          },\n          \"mutation_updated\"\n        );\n      }\n\n      return {\n        data: undefined,\n        error: normalizedError,\n        raw,\n        status,\n      };\n    }\n  }\n\n  private setState(\n    entry: MutationEntry,\n    state: AthenaMutationState<unknown, unknown>,\n    eventType: AthenaMutationEvent[\"type\"]\n  ): void {\n    entry.state = state;\n    for (const listener of entry.listeners) {\n      listener();\n    }\n\n    this.host.emitEvent({\n      key: entry.key,\n      state,\n      timestamp: Date.now(),\n      type: eventType,\n    });\n  }\n\n  private scheduleGc(entry: MutationEntry): void {\n    const gcTime = shouldUseMemoryCache(this.host.config)\n      ? Math.max(0, this.host.config.cache?.gcTime ?? 300_000)\n      : Math.max(0, this.host.config.cache?.gcTime ?? 0);\n\n    entry.gcTimer = setTimeout(() => {\n      const current = this.entries.get(entry.key);\n      if (!current || current.listeners.size > 0) {\n        return;\n      }\n      this.entries.delete(entry.key);\n    }, gcTime);\n  }\n}\n","import type {\n  AthenaCacheContextDescriptor,\n  AthenaExecutable,\n  AthenaQueryDescriptor,\n} from \"../query/descriptor.ts\";\nimport {\n  buildAthenaModelScopeKey,\n  isAthenaExecutable,\n  resolveAthenaQueryTarget,\n} from \"../query/descriptor.ts\";\nimport {\n  type AthenaNormalizedQueryPage,\n  extractResultRows,\n  isCollectionOperation,\n  mapResultRows,\n  mutationTouchesQueryMembership,\n  queryDependsOnRelationTarget,\n  removeResultRows,\n  sameCacheContext,\n  sameModelTarget,\n} from \"../query/entity-graph.ts\";\nimport type { AthenaEntityKey } from \"../query/model-identity.ts\";\nimport {\n  athenaEntityKeyToken,\n  createAthenaEntityKey,\n} from \"../query/model-identity.ts\";\nimport type { AthenaModelTarget } from \"../schema/types.ts\";\nimport {\n  EntityStore,\n  resolveModelRowKey,\n} from \"./query-client/entity-store.ts\";\nimport { QueryClientGraphIndex } from \"./query-client/graph-index.ts\";\nimport type { ExecuteMutationInput } from \"./query-client/mutation-store.ts\";\nimport { MutationStore } from \"./query-client/mutation-store.ts\";\nimport {\n  type ExecuteQueryInput,\n  type QueryEntry,\n  QueryStore,\n} from \"./query-client/query-store.ts\";\nimport type {\n  AthenaInvalidateQueriesFilters,\n  AthenaMutationDefaults,\n  AthenaQueryClientConfig,\n  AthenaQueryDefaults,\n  AthenaRuntimeEvent,\n  AthenaStateAdapter,\n  AthenaUnsubscribe,\n  QueryKey,\n} from \"./types.ts\";\nimport { matchesQueryKey, safeSerializeQueryKey } from \"./utils.ts\";\n\nexport interface AthenaCacheTransaction {\n  insert(queryKey: QueryKey, row: Record<string, unknown>): void;\n  remove(queryKey: QueryKey, id: unknown): void;\n  update(\n    model: AthenaModelTarget,\n    id: unknown,\n    updater:\n      | Record<string, unknown>\n      | ((\n        current: Record<string, unknown> | undefined,\n      ) => Record<string, unknown>),\n  ): void;\n}\n\nexport interface AthenaDehydratedCache {\n  entities: Array<{\n    data: Record<string, unknown>;\n    token: string;\n  }>;\n  queries: Array<{\n    data: unknown;\n    descriptor?: AthenaQueryDescriptor;\n    normalizedPage?: AthenaNormalizedQueryPage;\n    queryKey: QueryKey;\n    updatedAt?: number;\n  }>;\n}\n\nexport interface AthenaModelCache<TRow = Record<string, unknown>> {\n  get(id: unknown): TRow | undefined;\n  invalidate(): Promise<void>;\n  invalidateEntity(id: unknown): Promise<void>;\n  set(row: TRow): TRow;\n  update(\n    id: unknown,\n    updater: Partial<TRow> | ((current: TRow | undefined) => TRow),\n  ): TRow;\n}\n\nexport class AthenaQueryClient {\n  private readonly entities = new EntityStore();\n  private readonly graph = new QueryClientGraphIndex();\n  private readonly queries: QueryStore;\n  private readonly mutations: MutationStore;\n  private readonly eventSubscribers = new Set<\n    (event: AthenaRuntimeEvent) => void\n  >();\n  private readonly adapters = new Set<AthenaStateAdapter>();\n  private requestCounter = 0;\n\n  readonly config: AthenaQueryClientConfig;\n  readonly defaultQueryOptions: AthenaQueryDefaults;\n  readonly defaultMutationOptions: AthenaMutationDefaults;\n\n  constructor(config: AthenaQueryClientConfig = {}) {\n    this.config = {\n      cache: {\n        gcTime: config.cache?.gcTime,\n        mode: config.cache?.mode ?? \"none\",\n        staleTime: config.cache?.staleTime,\n      },\n      defaultMutationOptions: config.defaultMutationOptions,\n      defaultQueryOptions: config.defaultQueryOptions,\n    };\n    this.defaultQueryOptions = {\n      refetchOnMount: config.defaultQueryOptions?.refetchOnMount ?? true,\n      refetchOnReconnect:\n        config.defaultQueryOptions?.refetchOnReconnect ?? false,\n      refetchOnWindowFocus:\n        config.defaultQueryOptions?.refetchOnWindowFocus ?? false,\n      retry: config.defaultQueryOptions?.retry ?? 0,\n      retryDelay: config.defaultQueryOptions?.retryDelay,\n    };\n    this.defaultMutationOptions = {\n      retry: config.defaultMutationOptions?.retry ?? 0,\n      retryDelay: config.defaultMutationOptions?.retryDelay,\n    };\n    this.queries = new QueryStore({\n      config: this.config,\n      emitEvent: (event) => this.emitEvent(event),\n      entities: this.entities,\n      graph: this.graph,\n      nextRequestId: () => {\n        this.requestCounter += 1;\n        return this.requestCounter;\n      },\n    });\n    this.mutations = new MutationStore({\n      config: this.config,\n      emitEvent: (event) => this.emitEvent(event),\n      nextRequestId: () => {\n        this.requestCounter += 1;\n        return this.requestCounter;\n      },\n    });\n  }\n\n  getQueryKeyToken(queryKey: QueryKey): string {\n    return safeSerializeQueryKey(queryKey);\n  }\n\n  getQueryKey(query: QueryKey | AthenaExecutable<unknown>): QueryKey {\n    if (isAthenaExecutable(query)) {\n      return query.getDescriptor().queryKey;\n    }\n    return query;\n  }\n\n  getQueryData<TData = unknown>(queryKey: QueryKey): TData | undefined {\n    return this.queries.getQueryData(this.getQueryKeyToken(queryKey));\n  }\n\n  getNormalizedQueryPage(\n    queryKey: QueryKey,\n  ): AthenaNormalizedQueryPage | undefined {\n    return this.queries.getNormalizedPage(this.getQueryKeyToken(queryKey));\n  }\n\n  setQueryData<TData>(\n    queryKey: QueryKey,\n    updater: TData | ((previous: TData | undefined) => TData),\n  ): TData {\n    return this.queries.setQueryData(\n      queryKey,\n      this.getQueryKeyToken(queryKey),\n      updater,\n    );\n  }\n\n  async invalidateQueries(\n    filters: AthenaInvalidateQueriesFilters = {},\n  ): Promise<void> {\n    const exact = filters.exact === true;\n    const shouldRefetch = filters.refetch !== false;\n    const matched: QueryEntry[] = [];\n\n    for (const entry of this.queries.values()) {\n      if (entry.queryKey === undefined) {\n        continue;\n      }\n      if (\n        filters.queryKey === undefined ||\n        matchesQueryKey(entry.queryKey, filters.queryKey, exact)\n      ) {\n        matched.push(entry);\n      }\n    }\n\n    const refetches: Promise<unknown>[] = [];\n    for (const entry of matched) {\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          updatedAt: undefined,\n        },\n        \"query_updated\",\n      );\n\n      if (\n        shouldRefetch &&\n        entry.listeners.size > 0 &&\n        entry.queryFn &&\n        entry.queryKey !== undefined\n      ) {\n        refetches.push(\n          this.queries.execute({\n            cacheMode: entry.cacheMode,\n            dedupe: true,\n            force: true,\n            queryFn: entry.queryFn,\n            queryKey: entry.queryKey,\n            queryKeyToken: entry.key,\n            retry: entry.retry,\n            retryDelay: entry.retryDelay,\n            select: entry.select,\n          }),\n        );\n      }\n    }\n\n    if (refetches.length > 0) {\n      await Promise.all(refetches);\n    }\n  }\n\n  async prefetch(executable: AthenaExecutable<unknown>): Promise<void> {\n    const descriptor = executable.getDescriptor();\n    await this.queries.execute({\n      cacheMode: \"memory\",\n      descriptor,\n      force: false,\n      model: executable.model,\n      queryFn: (context) => executable.execute(context),\n      queryKey: descriptor.queryKey,\n      queryKeyToken: this.getQueryKeyToken(descriptor.queryKey),\n    });\n  }\n\n  dehydrate(): AthenaDehydratedCache {\n    return {\n      entities: this.entities.dehydrate(),\n      queries: [...this.queries.values()]\n        .filter((entry) => entry.queryKey && entry.state.data !== undefined)\n        .map((entry) => ({\n          data: this.queries.materialize(entry),\n          descriptor: entry.descriptor,\n          normalizedPage: entry.normalizedPage,\n          queryKey: entry.queryKey as QueryKey,\n          updatedAt: entry.state.updatedAt,\n        })),\n    };\n  }\n\n  hydrate(state: AthenaDehydratedCache): void {\n    this.entities.ingestDehydrated(state.entities);\n    for (const query of state.queries) {\n      const token = this.getQueryKeyToken(query.queryKey);\n      const entry = this.queries.ensure(token);\n      entry.queryKey = query.queryKey;\n      entry.descriptor = query.descriptor;\n      entry.normalizedPage = query.normalizedPage;\n      if (query.descriptor) {\n        this.graph.indexQuery(token, query.descriptor);\n      }\n      if (query.normalizedPage) {\n        for (const entityToken of query.normalizedPage.entities) {\n          this.graph.indexEntity(token, entityToken);\n        }\n      }\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          data: query.data,\n          error: null,\n          status: \"success\",\n          updatedAt: query.updatedAt ?? Date.now(),\n        },\n        \"query_updated\",\n      );\n    }\n  }\n\n  mutateCache(work: (cache: AthenaCacheTransaction) => void): () => void {\n    const snapshot = this.dehydrate();\n    work(this.createTransactionHandle());\n    return () => {\n      this.hydrate(snapshot);\n    };\n  }\n\n  async transaction<T>(\n    work: (cache: AthenaCacheTransaction) => Promise<T> | T,\n  ): Promise<T> {\n    const snapshot = {\n      entities: this.entities.snapshot(),\n      queries: this.queries.snapshot(),\n    };\n    try {\n      return await work(this.createTransactionHandle());\n    } catch (error) {\n      this.entities.restore(snapshot.entities);\n      this.queries.restoreSnapshot(snapshot.queries);\n      throw error;\n    }\n  }\n\n  getEntity<TRow = Record<string, unknown>>(\n    key: AthenaEntityKey,\n  ): TRow | undefined {\n    return this.entities.get<TRow>(key);\n  }\n\n  reconcileExecutable(\n    descriptor: AthenaQueryDescriptor,\n    result: unknown,\n    model?: AthenaModelTarget,\n  ): void {\n    const resolvedModel = model;\n    const rows = extractResultRows(result);\n    if (descriptor.operation === \"delete\") {\n      this.reconcileDelete(descriptor, rows, resolvedModel);\n      return;\n    }\n    if (resolvedModel && descriptor.projection?.kind !== \"partial-model\") {\n      for (const row of rows) {\n        try {\n          const key = createAthenaEntityKey(\n            resolvedModel,\n            row,\n            descriptor.context,\n          );\n          this.writeEntity(key, row, {\n            changedFields: descriptor.changedFields,\n            mutation: descriptor,\n          });\n        } catch {\n          // Row is not identity-complete; skip graph write.\n        }\n      }\n    }\n    if (\n      descriptor.operation === \"insert\" ||\n      descriptor.operation === \"upsert\"\n    ) {\n      void this.invalidateQueries({\n        queryKey: descriptor.modelScopeKey,\n        refetch: true,\n      });\n    }\n  }\n\n  forModel<TRow = Record<string, unknown>>(\n    model: AthenaModelTarget,\n    context?: AthenaCacheContextDescriptor,\n  ): AthenaModelCache<TRow> {\n    const target = resolveAthenaQueryTarget(\n      model.meta.tableName ?? model.meta.model ?? \"\",\n      model,\n    );\n    const modelScopeKey = buildAthenaModelScopeKey(target, context);\n    return {\n      get: (id: unknown) => {\n        const key = resolveModelRowKey(model, id, context);\n        return this.getEntity<TRow>(key);\n      },\n      invalidate: () => this.invalidateQueries({ queryKey: modelScopeKey }),\n      invalidateEntity: async (id: unknown) => {\n        const key = resolveModelRowKey(model, id, context);\n        this.removeEntity(key);\n        await this.invalidateQueries({ queryKey: modelScopeKey });\n      },\n      set: (row: TRow) => {\n        const key = createAthenaEntityKey(model, row, context);\n        this.writeEntity(key, row as Record<string, unknown>, {\n          changedFields: Object.keys(row as object),\n        });\n        return (this.getEntity<TRow>(key) ?? row) as TRow;\n      },\n      update: (id, updater) => {\n        const key = resolveModelRowKey(model, id, context);\n        const current = this.getEntity<TRow>(key);\n        const next =\n          typeof updater === \"function\"\n            ? (updater as (value: TRow | undefined) => TRow)(current)\n            : ({ ...(current ?? {}), ...(updater as object) } as TRow);\n        const identityRow =\n          typeof id === \"object\" && id !== null\n            ? id\n            : { [model.meta.primaryKey[0] as string]: id };\n        const merged = {\n          ...(identityRow as object),\n          ...(current as object | undefined),\n          ...(next as object),\n        } as TRow;\n        this.writeEntity(\n          createAthenaEntityKey(model, merged, context),\n          merged as Record<string, unknown>,\n          {\n            changedFields:\n              typeof updater === \"function\"\n                ? Object.keys(next as object)\n                : Object.keys(updater as object),\n          },\n        );\n        return (this.getEntity<TRow>(key) ?? merged) as TRow;\n      },\n    };\n  }\n\n  getMutationKeyToken(mutationKey?: QueryKey): string {\n    return this.mutations.token(mutationKey);\n  }\n\n  getQueryState<TData = unknown>(key: string) {\n    return this.queries.getState<TData>(key);\n  }\n\n  getMutationState<TVariables = unknown, TData = unknown>(key: string) {\n    return this.mutations.getState<TVariables, TData>(key);\n  }\n\n  subscribeQuery(key: string, listener: () => void): AthenaUnsubscribe {\n    return this.queries.subscribe(key, listener);\n  }\n\n  subscribeMutation(key: string, listener: () => void): AthenaUnsubscribe {\n    return this.mutations.subscribe(key, listener);\n  }\n\n  subscribeEvents(\n    listener: (event: AthenaRuntimeEvent) => void,\n  ): AthenaUnsubscribe {\n    this.eventSubscribers.add(listener);\n    return () => {\n      this.eventSubscribers.delete(listener);\n    };\n  }\n\n  attachAdapter(adapter: AthenaStateAdapter): AthenaUnsubscribe {\n    this.adapters.add(adapter);\n    return () => {\n      this.adapters.delete(adapter);\n    };\n  }\n\n  resetQuery(queryKey: QueryKey): void {\n    this.queries.reset(this.getQueryKeyToken(queryKey));\n  }\n\n  resetMutation(mutationKey?: QueryKey): void {\n    this.mutations.reset(mutationKey);\n  }\n\n  executeQuery<TQueryFnData, TData = TQueryFnData>(\n    input: ExecuteQueryInput<TQueryFnData, TData>,\n  ) {\n    return this.queries.execute(input);\n  }\n\n  executeMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\n    input: ExecuteMutationInput<TVariables, TMutationFnData, TData>,\n  ) {\n    return this.mutations.execute(input);\n  }\n\n  private writeEntity(\n    key: AthenaEntityKey,\n    row: Record<string, unknown>,\n    options?: {\n      changedFields?: readonly string[];\n      mutation?: AthenaQueryDescriptor;\n    },\n  ): void {\n    this.entities.merge(key, row);\n    const token = athenaEntityKeyToken(key);\n    const changedFields = options?.changedFields ?? Object.keys(row);\n    const affected = this.collectAffectedQueryEntries(\n      key,\n      changedFields,\n      options?.mutation,\n    );\n\n    for (const entry of affected) {\n      if (!(entry.descriptor && entry.queryKey)) {\n        continue;\n      }\n      if (options?.mutation) {\n        if (\n          !sameCacheContext(entry.descriptor.context, options.mutation.context)\n        ) {\n          continue;\n        }\n        if (queryDependsOnRelationTarget(entry.descriptor, options.mutation)) {\n          void this.invalidateQueries({\n            exact: true,\n            queryKey: entry.queryKey,\n          });\n          continue;\n        }\n        if (!sameModelTarget(entry.descriptor, options.mutation)) {\n          continue;\n        }\n        if (\n          isCollectionOperation(entry.descriptor.operation) &&\n          mutationTouchesQueryMembership(entry.descriptor, changedFields)\n        ) {\n          void this.invalidateQueries({\n            exact: true,\n            queryKey: entry.queryKey,\n          });\n          continue;\n        }\n      } else if (\n        entry.descriptor.target.table === key.model.table &&\n        (entry.descriptor.target.schema ?? \"\") === (key.model.schema ?? \"\") &&\n        isCollectionOperation(entry.descriptor.operation) &&\n        mutationTouchesQueryMembership(entry.descriptor, changedFields)\n      ) {\n        void this.invalidateQueries({\n          exact: true,\n          queryKey: entry.queryKey,\n        });\n        continue;\n      }\n\n      if (\n        entry.entityRefs?.includes(token) ||\n        this.resultContainsEntity(entry, key)\n      ) {\n        this.patchQueryEntryEntity(entry, key);\n      }\n    }\n  }\n\n  private patchQueryEntryEntity(entry: QueryEntry, key: AthenaEntityKey): void {\n    if (!entry.queryKey || entry.state.data === undefined) {\n      return;\n    }\n    if (entry.normalizedPage) {\n      const next = this.queries.materialize(entry);\n      this.queries.setState(\n        entry,\n        {\n          ...entry.state,\n          data: next,\n          updatedAt: Date.now(),\n        },\n        \"query_updated\",\n      );\n      return;\n    }\n    const token = athenaEntityKeyToken(key);\n    const entity = this.entities.getByToken(token);\n    if (!entity) {\n      return;\n    }\n    const next = mapResultRows(entry.state.data, (row) => {\n      try {\n        if (!entry.model) {\n          return row;\n        }\n        const rowKey = createAthenaEntityKey(\n          entry.model,\n          row,\n          entry.descriptor?.context,\n        );\n        return athenaEntityKeyToken(rowKey) === token\n          ? { ...entity.data }\n          : row;\n      } catch {\n        return row;\n      }\n    });\n    this.setQueryData(entry.queryKey, next);\n  }\n\n  private resultContainsEntity(\n    entry: QueryEntry,\n    key: AthenaEntityKey,\n  ): boolean {\n    if (!entry.model || entry.state.data === undefined) {\n      return false;\n    }\n    const token = athenaEntityKeyToken(key);\n    return extractResultRows(entry.state.data).some((row) => {\n      try {\n        return (\n          athenaEntityKeyToken(\n            createAthenaEntityKey(\n              entry.model as AthenaModelTarget,\n              row,\n              entry.descriptor?.context,\n            ),\n          ) === token\n        );\n      } catch {\n        return false;\n      }\n    });\n  }\n\n  private removeEntity(key: AthenaEntityKey): void {\n    const token = athenaEntityKeyToken(key);\n    this.entities.delete(key);\n    for (const entry of [...this.queries.values()]) {\n      if (!entry.queryKey) {\n        continue;\n      }\n      if (\n        !(\n          entry.entityRefs?.includes(token) ||\n          this.resultContainsEntity(entry, key)\n        )\n      ) {\n        continue;\n      }\n      const next = removeResultRows(entry.state.data, (row) => {\n        try {\n          if (!entry.model) {\n            return false;\n          }\n          return (\n            athenaEntityKeyToken(\n              createAthenaEntityKey(\n                entry.model,\n                row,\n                entry.descriptor?.context,\n              ),\n            ) === token\n          );\n        } catch {\n          return false;\n        }\n      });\n      entry.entityRefs = entry.entityRefs?.filter((ref) => ref !== token);\n      this.setQueryData(entry.queryKey, next);\n    }\n  }\n\n  private reconcileDelete(\n    descriptor: AthenaQueryDescriptor,\n    rows: Record<string, unknown>[],\n    model?: AthenaModelTarget,\n  ): void {\n    if (model) {\n      for (const row of rows) {\n        try {\n          this.removeEntity(\n            createAthenaEntityKey(model, row, descriptor.context),\n          );\n        } catch {\n          // Incomplete identity; skip.\n        }\n      }\n      if (rows.length === 0) {\n        const identity = identityRowFromFilters(descriptor, model);\n        if (identity) {\n          try {\n            this.removeEntity(\n              createAthenaEntityKey(model, identity, descriptor.context),\n            );\n          } catch {\n            // Incomplete identity; skip.\n          }\n        }\n      }\n    }\n    void this.invalidateQueries({ queryKey: descriptor.modelScopeKey });\n  }\n\n  private collectAffectedQueryEntries(\n    key: AthenaEntityKey,\n    changedFields: readonly string[],\n    mutation?: AthenaQueryDescriptor,\n  ): QueryEntry[] {\n    const ids = this.graph.collectAffectedQueryIds(\n      key,\n      changedFields,\n      mutation,\n    );\n    const entries: QueryEntry[] = [];\n    for (const id of ids) {\n      const entry = this.queries.get(id);\n      if (entry) {\n        entries.push(entry);\n      }\n    }\n    if (entries.length === 0) {\n      return [...this.queries.values()];\n    }\n    return entries;\n  }\n\n  private createTransactionHandle(): AthenaCacheTransaction {\n    return {\n      insert: (queryKey, row) => {\n        const current = this.getQueryData(queryKey);\n        const rows = extractResultRows(current);\n        this.setQueryData(\n          queryKey,\n          Array.isArray(current)\n            ? [...rows, row]\n            : {\n              ...(isPlainResult(current) ? current : {}),\n              data: [...rows, row],\n            },\n        );\n      },\n      remove: (queryKey, id) => {\n        const current = this.getQueryData(queryKey);\n        const next = removeResultRows(current, (row) =>\n          Object.values(row).some((value) => value === id),\n        );\n        this.setQueryData(queryKey, next);\n      },\n      update: (model, id, updater) => {\n        this.forModel(model).update(id, updater as never);\n      },\n    };\n  }\n\n  private emitEvent(event: AthenaRuntimeEvent): void {\n    for (const listener of this.eventSubscribers) {\n      listener(event);\n    }\n\n    for (const adapter of this.adapters) {\n      adapter.onEvent?.(event);\n      if (\n        event.type === \"query_updated\" ||\n        event.type === \"query_reset\" ||\n        event.type === \"query_gc\"\n      ) {\n        adapter.onQueryUpdated?.(event);\n      }\n      if (\n        event.type === \"mutation_updated\" ||\n        event.type === \"mutation_reset\"\n      ) {\n        adapter.onMutationUpdated?.(event);\n      }\n    }\n  }\n}\n\nexport function createAthenaQueryClient(\n  config?: AthenaQueryClientConfig,\n): AthenaQueryClient {\n  return new AthenaQueryClient(config);\n}\n\nfunction isPlainResult(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction identityRowFromFilters(\n  descriptor: AthenaQueryDescriptor,\n  model: AthenaModelTarget,\n): Record<string, unknown> | undefined {\n  const row: Record<string, unknown> = {};\n  for (const column of model.meta.primaryKey) {\n    const filter = descriptor.filters?.find(\n      (entry) => entry.column === column && entry.operator === \"eq\",\n    );\n    if (!filter) {\n      return;\n    }\n    row[column] = filter.value;\n  }\n  return row;\n}\n\nexport function attachStateAdapter(\n  client: AthenaQueryClient,\n  adapter: AthenaStateAdapter,\n): AthenaUnsubscribe {\n  return client.attachAdapter(adapter);\n}\n","/**\n * Root-client internals. Frozen public clients cannot grow properties.\n * Request views from withContext do not share this map — pass the root.\n */\n\nimport type { AthenaBillingRuntimeDispatch } from \"../billing/runtime/dispatch.ts\";\nimport type {\n\tAthenaBillingDiagnostics,\n\tAthenaBillingInspectedConnection,\n} from \"../billing/runtime/diagnostics.ts\";\nimport type { BillingProviderRegistry } from \"../billing/runtime/local/providers/registry.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport type { StorageRuntime } from \"../storage/runtime/types.ts\";\nimport type { AthenaClientConfig } from \"../v3-client-core.ts\";\nimport type { AthenaRuntimeAuthSessionStore } from \"./data/principal.ts\";\nimport {\n\tATHENA_CLIENT_INTERNAL_PROTOCOL,\n\ttype AthenaClientLifecycle,\n\ttype AthenaClientOwnership,\n\ttype AthenaRuntimeDiagnostics,\n\tAthenaRuntimeOwnershipError,\n\ttype AthenaRuntimeResourceOwnership,\n\tcreateAthenaClientLifecycle,\n\tdescribeAthenaRuntime,\n} from \"./ownership.ts\";\nimport type { AthenaRuntimeReadiness } from \"./readiness/index.ts\";\nimport type { ResolvedAthenaRuntime } from \"./resolve.ts\";\n\nexport const ATHENA_HANDLER_ROOT_CLIENT_REQUIRED_MESSAGE = [\n\t\"createAthenaNextHandlers({ client }) requires the process-wide Athena root.\",\n\t\"\",\n\t\"Received a request-scoped Athena client created by withContext() or\",\n\t\"createAthenaServerClient({ client }).\",\n\t\"\",\n\t\"Next.js local runtime pattern:\",\n\t\"\",\n\t'  const root = createClient({ databaseUrl, auth: { mode: \"local\" } });',\n\t\"\",\n\t\"Pass `root` directly to createAthenaNextHandlers().\",\n\t\"\",\n\t\"Use request-scoped clients only for application queries.\",\n].join(\"\\n\");\n\nexport const ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE = [\n\t\"This object is not an Athena root from this package instance.\",\n\t\"\",\n\t\"Typical causes:\",\n\t\"  - a request view (withContext / createAthenaServerClient)\",\n\t\"  - a client created by another copy of @xylex-group/athena\",\n\t\"  - a mocked object without root internals\",\n\t\"\",\n\t\"Install one Athena version and pass the process-wide createClient() root.\",\n].join(\"\\n\");\n\nexport interface AthenaClientAuthRuntime {\n\tclose(): Promise<void>;\n\tgetStores(): Promise<unknown>;\n}\n\nexport interface AthenaClientOwnedRuntime {\n\tclose(): Promise<void>;\n\tgetPool(): Promise<unknown>;\n\treadonly ownership: \"owned\" | \"borrowed\";\n}\n\nexport interface AthenaClientInternals {\n\tauthRuntime?: AthenaClientAuthRuntime;\n\tbillingDiagnostics?: AthenaBillingDiagnostics;\n\tbillingMaterializedConnections?: readonly AthenaBillingInspectedConnection[];\n\tbillingProviderRegistry?: BillingProviderRegistry;\n\tbillingReady?: Promise<void>;\n\tbillingBootstrapEvents?: string[];\n\tbillingRuntime?: AthenaBillingRuntimeDispatch;\n\tclose?: () => Promise<void>;\n\tconfig: AthenaClientConfig;\n\teventIngressRuntime?: unknown;\n\tgatewayTransport?: AthenaGatewayClient;\n\tgetAuthStores?: () => Promise<AthenaRuntimeAuthSessionStore>;\n\tinternalProtocolVersion: number;\n\tlifecycle: AthenaClientLifecycle;\n\townership: AthenaClientOwnership;\n\tparent?: object;\n\tplan: ResolvedAthenaRuntime;\n\tpostgresRuntime?: AthenaClientOwnedRuntime;\n\truntimeOwnership: AthenaRuntimeResourceOwnership;\n\truntimeReadiness?: AthenaRuntimeReadiness;\n\tsdkVersion: string;\n\t/**\n\t * @deprecated Use `ownership`. Kept in sync for older internals readers.\n\t */\n\tsource?: AthenaClientOwnership;\n\tstorageRuntime?: StorageRuntime;\n}\n\nconst ROOT_INTERNALS = Symbol.for(\"@xylex-group/athena.clientInternals\");\nconst ROOT_INTERNALS_MAP = Symbol.for(\"@xylex-group/athena.clientInternalsMap\");\n\nfunction internalsByClient(): WeakMap<object, AthenaClientInternals> {\n\tconst holder = globalThis as typeof globalThis & {\n\t\t[ROOT_INTERNALS_MAP]?: WeakMap<object, AthenaClientInternals>;\n\t};\n\tholder[ROOT_INTERNALS_MAP] ??= new WeakMap();\n\treturn holder[ROOT_INTERNALS_MAP];\n}\n\ntype ClientWithInternals = object & {\n\t[ROOT_INTERNALS]?: AthenaClientInternals;\n};\n\nexport function attachAthenaClientInternals(\n\tclient: object,\n\tinternals: AthenaClientInternals,\n): void {\n\tinternalsByClient().set(client, internals);\n\ttry {\n\t\tObject.defineProperty(client, ROOT_INTERNALS, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: internals,\n\t\t\twritable: false,\n\t\t});\n\t} catch {\n\t\t// Frozen clients keep the WeakMap entry only.\n\t}\n}\n\nexport function getAthenaClientInternals(\n\tclient: object,\n): AthenaClientInternals | undefined {\n\treturn (\n\t\tinternalsByClient().get(client) ??\n\t\t(client as ClientWithInternals)[ROOT_INTERNALS]\n\t);\n}\n\nexport function createRootClientInternals(\n\tpartial: Omit<\n\t\tAthenaClientInternals,\n\t\t| \"internalProtocolVersion\"\n\t\t| \"lifecycle\"\n\t\t| \"ownership\"\n\t\t| \"runtimeOwnership\"\n\t\t| \"sdkVersion\"\n\t\t| \"source\"\n\t> & {\n\t\tlifecycle?: AthenaClientLifecycle;\n\t\truntimeOwnership?: AthenaRuntimeResourceOwnership;\n\t},\n): AthenaClientInternals {\n\tconst lifecycle = partial.lifecycle ?? createAthenaClientLifecycle();\n\treturn {\n\t\t...partial,\n\t\tinternalProtocolVersion: ATHENA_CLIENT_INTERNAL_PROTOCOL,\n\t\tlifecycle,\n\t\townership: \"root\",\n\t\truntimeOwnership: partial.runtimeOwnership ?? \"owned\",\n\t\tsdkVersion: PACKAGE_VERSION,\n\t\tsource: \"root\",\n\t};\n}\n\nexport function createViewClientInternals(\n\tparent: object,\n\trootInternals: AthenaClientInternals,\n): AthenaClientInternals {\n\trootInternals.lifecycle.requestViewsCreated += 1;\n\treturn {\n\t\t...rootInternals,\n\t\tclose: undefined,\n\t\townership: \"request\",\n\t\tparent,\n\t\truntimeOwnership: \"borrowed\",\n\t\tsource: \"request\",\n\t};\n}\n\nexport function isAthenaRequestRuntime(\n\tinternals: AthenaClientInternals | undefined,\n): boolean {\n\tif (!internals) {\n\t\treturn false;\n\t}\n\treturn internals.ownership === \"request\" || internals.source === \"request\";\n}\n\nexport function throwAthenaRuntimeOwnershipInvalid(caller: string): never {\n\tthrow new AthenaRuntimeOwnershipError({\n\t\tcaller,\n\t\tcode: \"ATHENA_RUNTIME_OWNERSHIP_INVALID\",\n\t\tmessage: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_HANDLER_ROOT_CLIENT_REQUIRED_MESSAGE}`,\n\t\treceived: \"request-view\",\n\t});\n}\n\nexport function requireAthenaRootClientInternals(\n\tclient: object,\n\tcaller: string,\n): AthenaClientInternals {\n\tconst internals = getAthenaClientInternals(client);\n\tif (!internals) {\n\t\tthrow new AthenaRuntimeOwnershipError({\n\t\t\tcaller,\n\t\t\tcode: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n\t\t\tmessage: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE}`,\n\t\t\treceived: \"foreign-runtime\",\n\t\t});\n\t}\n\tif (internals.internalProtocolVersion !== ATHENA_CLIENT_INTERNAL_PROTOCOL) {\n\t\tthrow new AthenaRuntimeOwnershipError({\n\t\t\tcaller,\n\t\t\tcode: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n\t\t\tmessage: `${caller} received an Athena client from an incompatible runtime protocol (${String(internals.internalProtocolVersion)} ≠ ${String(ATHENA_CLIENT_INTERNAL_PROTOCOL)}).`,\n\t\t\treceived: \"foreign-runtime\",\n\t\t});\n\t}\n\tif (!isAthenaRequestRuntime(internals)) {\n\t\treturn internals;\n\t}\n\tthrowAthenaRuntimeOwnershipInvalid(caller);\n}\n\n/** Bind request-view Auth so migrate exists but cannot own the root executor. */\nexport function attachRequestAuthLifecycleGuards(\n\tview: object,\n\tparent: object,\n): void {\n\tconst parentServer = (\n\t\tparent as {\n\t\t\tauth?: {\n\t\t\t\tserver?: {\n\t\t\t\t\thandle?: (request: Request) => Promise<Response>;\n\t\t\t\t\thandlers?: unknown;\n\t\t\t\t\tmigrate?: () => Promise<void>;\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t).auth?.server;\n\tif (!parentServer) {\n\t\treturn;\n\t}\n\tconst viewAuth = (view as { auth?: object }).auth;\n\tif (!viewAuth) {\n\t\treturn;\n\t}\n\tObject.assign(viewAuth, {\n\t\tserver: {\n\t\t\thandle: parentServer.handle,\n\t\t\thandlers: parentServer.handlers,\n\t\t\tmigrate: async () => {\n\t\t\t\tthrowAthenaRuntimeOwnershipInvalid(\"auth.server.migrate\");\n\t\t\t},\n\t\t},\n\t});\n}\n\n/** Test/debug helper — not a product observability API. Root-only. */\nexport function getAthenaRuntimeDiagnostics(\n\tclient: object,\n): AthenaRuntimeDiagnostics | undefined {\n\tconst internals = getAthenaClientInternals(client);\n\tif (!internals) {\n\t\treturn undefined;\n\t}\n\tif (isAthenaRequestRuntime(internals)) {\n\t\tthrowAthenaRuntimeOwnershipInvalid(\"getAthenaRuntimeDiagnostics\");\n\t}\n\treturn describeAthenaRuntime(\n\t\tinternals.ownership,\n\t\tinternals.runtimeOwnership,\n\t\tinternals.lifecycle,\n\t);\n}\n\nexport type {\n\tAthenaClientLifecycle,\n\tAthenaClientOwnership,\n\tAthenaRequestRuntime,\n\tAthenaRootRuntime,\n\tAthenaRuntimeDiagnostics,\n\tAthenaRuntimeResourceOwnership,\n} from \"./ownership.ts\";\nexport {\n\tATHENA_CLIENT_INTERNAL_PROTOCOL,\n\tAthenaRuntimeOwnershipError,\n\tcreateAthenaClientLifecycle,\n} from \"./ownership.ts\";\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\n\nexport const ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED =\n\t\"ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED\" as const;\n\ntype LifecycleConfigBag = {\n\td1?: unknown;\n\tdatabaseUrl?: string | null;\n\tdb?: { d1?: unknown; pgUri?: string | null };\n\tgatewayTransport?: unknown;\n\tlifecycle?: { data?: Record<string, unknown> };\n};\n\nfunction hasLocalMutationRuntime(config: LifecycleConfigBag): boolean {\n\tif (config.db?.d1 !== undefined && config.db.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (config.d1 !== undefined && config.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (typeof config.db?.pgUri === \"string\" && config.db.pgUri.trim()) {\n\t\treturn true;\n\t}\n\tif (typeof config.databaseUrl === \"string\" && config.databaseUrl.trim()) {\n\t\treturn true;\n\t}\n\tif (config.gatewayTransport) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function assertDataLifecycleTransactionsUnsupported(): never {\n\tthrow new AthenaConfigurationError(\n\t\tATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED,\n\t\t\"Data lifecycle does not own a transaction-owning nucleus. Interactive transactions are unsupported until one exists.\",\n\t\t\"db\",\n\t);\n}\n\nexport function assertDataLifecycleConfig(config: LifecycleConfigBag): void {\n\tconst data = config.lifecycle?.data;\n\tif (!data) {\n\t\treturn;\n\t}\n\tif (\"afterCommit\" in data && data.afterCommit != null) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATA_LIFECYCLE_AFTER_COMMIT_UNSUPPORTED\",\n\t\t\t\"afterCommit is reserved until a transaction-owning data nucleus exists. It is not an alias of afterUpdate.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\tif (!hasLocalMutationRuntime(config)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t\"createClient({ lifecycle: { data } }) requires a mutation-owning local runtime (db.pgUri, databaseUrl, or db.d1). Remote/browser clients cannot register data lifecycle hooks.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n","import {\n\tATHENA_STORAGE_PROVIDER,\n\tATHENA_STORAGE_RUNTIME,\n\ttype StorageObjectProvider,\n\ttype StorageRuntime,\n} from \"./types.ts\";\n\nexport function getStorageProvider(\n\tstorage: unknown,\n): StorageObjectProvider | undefined {\n\tif (!storage || typeof storage !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn (storage as { [ATHENA_STORAGE_PROVIDER]?: StorageObjectProvider })[\n\t\tATHENA_STORAGE_PROVIDER\n\t];\n}\n\nexport function bindStorageProvider<TStorage extends object>(\n\tstorage: TStorage,\n\tprovider: StorageObjectProvider,\n): TStorage & { [ATHENA_STORAGE_PROVIDER]: StorageObjectProvider } {\n\treturn {\n\t\t...storage,\n\t\t[ATHENA_STORAGE_PROVIDER]: provider,\n\t};\n}\n\nexport function getStorageRuntime(\n\tstorage: unknown,\n): StorageRuntime | undefined {\n\tif (!storage || typeof storage !== \"object\") {\n\t\treturn undefined;\n\t}\n\treturn (storage as { [ATHENA_STORAGE_RUNTIME]?: StorageRuntime })[\n\t\tATHENA_STORAGE_RUNTIME\n\t];\n}\n\nexport function bindStorageRuntime<TStorage extends object>(\n\tstorage: TStorage,\n\truntime: StorageRuntime,\n): TStorage & { [ATHENA_STORAGE_RUNTIME]: StorageRuntime } {\n\treturn {\n\t\t...storage,\n\t\t[ATHENA_STORAGE_RUNTIME]: runtime,\n\t};\n}\n","export const ATHENA_STORAGE_BYTES_KIND = \"athena.storage.bytes\" as const;\n\nexport type AthenaStorageBytesEncoding = \"base64\";\n\nexport interface AthenaStorageBytesEnvelope {\n\tbytes: string;\n\tencoding: AthenaStorageBytesEncoding;\n\tkind: typeof ATHENA_STORAGE_BYTES_KIND;\n}\n\nexport function isAthenaStorageBytesEnvelope(\n\tvalue: unknown,\n): value is AthenaStorageBytesEnvelope {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = value as Record<string, unknown>;\n\treturn (\n\t\trecord.kind === ATHENA_STORAGE_BYTES_KIND &&\n\t\trecord.encoding === \"base64\" &&\n\t\ttypeof record.bytes === \"string\"\n\t);\n}\n\nexport function encodeAthenaStorageBytes(\n\tbytes: Uint8Array,\n): AthenaStorageBytesEnvelope {\n\treturn {\n\t\tbytes: bytesToBase64(bytes),\n\t\tencoding: \"base64\",\n\t\tkind: ATHENA_STORAGE_BYTES_KIND,\n\t};\n}\n\nexport function decodeAthenaStorageBytes(value: unknown): Uint8Array | undefined {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (!isAthenaStorageBytesEnvelope(value)) {\n\t\treturn undefined;\n\t}\n\treturn base64ToBytes(value.bytes);\n}\n\nexport function decodeAthenaStorageRequestBody(\n\tvalue: unknown,\n): Uint8Array | undefined {\n\tconst decoded = decodeAthenaStorageBytes(value);\n\tif (decoded) {\n\t\treturn decoded;\n\t}\n\tif (typeof value !== \"string\" || !value) {\n\t\treturn undefined;\n\t}\n\treturn base64ToBytes(value);\n}\n\nexport function serializeAthenaStorageData(data: unknown): unknown {\n\tif (data instanceof Uint8Array) {\n\t\treturn encodeAthenaStorageBytes(data);\n\t}\n\tif (data instanceof ArrayBuffer) {\n\t\treturn encodeAthenaStorageBytes(new Uint8Array(data));\n\t}\n\tif (isAthenaStorageBytesEnvelope(data)) {\n\t\treturn data;\n\t}\n\tif (Array.isArray(data)) {\n\t\treturn data.map(serializeAthenaStorageData);\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, entry] of Object.entries(data as Record<string, unknown>)) {\n\t\t\tout[key] = serializeAthenaStorageData(entry);\n\t\t}\n\t\treturn out;\n\t}\n\treturn data;\n}\n\nexport function reviveAthenaStorageData(data: unknown): unknown {\n\tconst bytes = decodeAthenaStorageBytes(data);\n\tif (bytes) {\n\t\treturn bytes;\n\t}\n\tif (Array.isArray(data)) {\n\t\treturn data.map(reviveAthenaStorageData);\n\t}\n\tif (data && typeof data === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, entry] of Object.entries(data as Record<string, unknown>)) {\n\t\t\tout[key] = reviveAthenaStorageData(entry);\n\t\t}\n\t\treturn out;\n\t}\n\treturn data;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64ToBytes(encoded: string): Uint8Array {\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let index = 0; index < binary.length; index++) {\n\t\tbytes[index] = binary.charCodeAt(index);\n\t}\n\treturn bytes;\n}\n","import type { AthenaRuntimeDiscoveryEndpoints } from \"../../gateway/discovery-types.ts\";\nimport { DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nimport { createAthenaHttpTransportIR } from \"../../runtime/transport/http.ts\";\nimport { executeAthenaHttpTransport } from \"../../runtime/transport/http/client.ts\";\nimport type { AthenaHttpTransportIR } from \"../../runtime/transport/http/ir.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"../../runtime/transport/topology.ts\";\nimport {\n\tencodeAthenaStorageBytes,\n\treviveAthenaStorageData,\n} from \"./bytes-envelope.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tstorageErrorResult,\n\tstorageOkResult,\n} from \"./errors.ts\";\nimport {\n\tisStorageObjectOp,\n\ttype AuthorizedStorageOperation,\n\ttype StorageObjectOp,\n\ttype StorageObjectProvider,\n} from \"./types.ts\";\n\n\n/** Resolve the browser storage endpoint.\n * \n * @param endpoints - The endpoints to resolve.\n * @returns The resolved endpoint.\n */\nexport function resolveBrowserStorageEndpoint(\n\tendpoints?:\n\t\t| Pick<AthenaRuntimeDiscoveryEndpoints, \"storage\">\n\t\t| { storage?: string },\n): string {\n\tconst advertised = endpoints?.storage?.trim();\n\treturn advertised || DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT;\n}\n\n\n/** Create an embedded storage facade.\n * \n * @returns The embedded storage facade.\n */\nexport function createEmbeddedStorageFacade(): {\n\tfile: {\n\t\tdelete: (input: unknown) => Promise<unknown>;\n\t\tget: (input: unknown) => Promise<unknown>;\n\t\thead: (input: unknown) => Promise<unknown>;\n\t\tlist: (input?: unknown) => Promise<unknown>;\n\t\tupload: (input: unknown) => Promise<unknown>;\n\t};\n} {\n\tconst unused = (): Promise<unknown> =>\n\t\tPromise.reject(\n\t\t\tnew Error(\n\t\t\t\t\"Athena embedded storage facade must be wrapped by StorageRuntime\",\n\t\t\t),\n\t\t);\n\treturn {\n\t\tfile: {\n\t\t\tdelete: unused,\n\t\t\tget: unused,\n\t\t\thead: unused,\n\t\t\tlist: unused,\n\t\t\tupload: unused,\n\t\t},\n\t};\n}\n\nfunction asExecutorTransport(\n\tir: ReturnType<typeof createAthenaHttpTransportIR>,\n): AthenaHttpTransportIR {\n\treturn {\n\t\tbasePath: ir.basePath,\n\t\tcredentials: ir.credentials,\n\t\tdomain: ir.domain,\n\t\tencoding: \"json\",\n\t\tkind: \"http\",\n\t\torigin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n\t};\n}\n\ntype BrowserStorageTransportOptions = {\n\tendpoints?: { storage?: string };\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n};\n\nasync function resolveStorageTransport(\n\toptions?: BrowserStorageTransportOptions,\n): Promise<AthenaHttpTransportIR | undefined> {\n\tconst explicit = options?.endpoints?.storage?.trim();\n\tif (explicit) {\n\t\treturn asExecutorTransport(\n\t\t\tcreateAthenaHttpTransportIR({\n\t\t\t\tbasePath: explicit,\n\t\t\t\tdomain: \"storage\",\n\t\t\t\torigin: /^https?:\\/\\//i.test(explicit) ? \"remote\" : \"same-origin\",\n\t\t\t}),\n\t\t);\n\t}\n\tconst topology =\n\t\toptions?.topology ??\n\t\t(options?.resolveTopology ? await options.resolveTopology() : undefined);\n\tif (topology) {\n\t\tconst advertised = topology.transports.storage;\n\t\treturn advertised?.kind === \"http\" ? advertised : undefined;\n\t}\n\treturn asExecutorTransport(\n\t\tcreateAthenaHttpTransportIR({\n\t\t\tbasePath: DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT,\n\t\t\tdomain: \"storage\",\n\t\t\torigin: \"same-origin\",\n\t\t}),\n\t);\n}\n\nfunction asWireRecord(details: unknown): Record<string, unknown> | undefined {\n\tif (!details || typeof details !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst record = details as Record<string, unknown>;\n\tconst nested = record.error;\n\tif (nested && typeof nested === \"object\") {\n\t\treturn nested as Record<string, unknown>;\n\t}\n\treturn record;\n}\n\nfunction storageErrorNumberFromDetails(details: unknown): number | undefined {\n\tconst record = asWireRecord(details);\n\tif (typeof record?.errorNumber === \"number\") {\n\t\treturn record.errorNumber;\n\t}\n\treturn undefined;\n}\n\ntype StorageAuthorizationWire = {\n\tmissing: readonly string[];\n\toperation: StorageObjectOp;\n};\n\nfunction storageAuthorizationFromDetails(\n\tdetails: unknown,\n): StorageAuthorizationWire | undefined {\n\tconst record = asWireRecord(details);\n\tif (!record || !isStorageObjectOp(record.operation)) {\n\t\treturn undefined;\n\t}\n\tif (!Array.isArray(record.missing)) {\n\t\treturn undefined;\n\t}\n\tconst missing: string[] = [];\n\tfor (const entry of record.missing) {\n\t\tif (typeof entry !== \"string\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tmissing.push(entry);\n\t}\n\treturn {\n\t\tmissing,\n\t\toperation: record.operation,\n\t};\n}\n\nfunction isGenericTransportHttpCode(code: string, status: number): boolean {\n\treturn code === `ATHENA_TRANSPORT_HTTP_${status}`;\n}\n\nexport function hasAuthoritativeStorageWireError(input: {\n\tcode: string;\n\terrorNumber?: number;\n\tstatus: number;\n}): boolean {\n\tconst wire = input.code.trim();\n\tif (!wire || isGenericTransportHttpCode(wire, input.status)) {\n\t\treturn false;\n\t}\n\treturn typeof input.errorNumber === \"number\" || !wire.startsWith(\"ATHENA_TRANSPORT_HTTP_\");\n}\n\nexport function projectStorageWireError(input: {\n\tcode: string;\n\tdetails?: unknown;\n\terrorNumber?: number;\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst wireNumber =\n\t\tinput.errorNumber ?? storageErrorNumberFromDetails(input.details);\n\tconst authorization = storageAuthorizationFromDetails(input.details);\n\tif (\n\t\tinput.code.trim() === \"storage_authorization_denied\" &&\n\t\tauthorization\n\t) {\n\t\treturn storageErrorResult(\n\t\t\tnew AthenaStorageAuthorizationError({\n\t\t\t\tmissing: authorization.missing,\n\t\t\t\toperation: authorization.operation,\n\t\t\t}),\n\t\t);\n\t}\n\treturn storageErrorResult(\n\t\twireNumber ?? 3010,\n\t\tinput.code.trim(),\n\t\tinput.message,\n\t\tinput.status,\n\t);\n}\n\n/** Compatibility projector for generic `ATHENA_TRANSPORT_HTTP_*` bodies only. */\nexport function projectLegacyGenericStorageHttpError(input: {\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst status = input.status;\n\tconst errorNumber =\n\t\tstatus === 401 || status === 403 ? 3003 : status === 503 ? 3007 : 3010;\n\tconst code =\n\t\tstatus === 401\n\t\t\t? \"storage_unauthenticated\"\n\t\t\t: status === 403\n\t\t\t\t? \"storage_authorization_denied\"\n\t\t\t\t: status === 503\n\t\t\t\t\t? \"storage_unavailable\"\n\t\t\t\t\t: \"storage_internal\";\n\treturn storageErrorResult(errorNumber, code, input.message, status);\n}\n\nfunction mapStorageHttpFailure(input: {\n\tcode: string;\n\tdetails?: unknown;\n\terrorNumber?: number;\n\tmessage: string;\n\tstatus: number;\n}) {\n\tconst json = input.details as { error?: { code?: unknown } } | undefined;\n\tconst nestedCode = json?.error?.code;\n\tconst wireCode =\n\t\ttypeof nestedCode === \"string\" && nestedCode.trim()\n\t\t\t? nestedCode.trim()\n\t\t\t: input.code;\n\tconst wireNumber =\n\t\tinput.errorNumber ?? storageErrorNumberFromDetails(input.details);\n\tif (\n\t\thasAuthoritativeStorageWireError({\n\t\t\tcode: wireCode,\n\t\t\terrorNumber: wireNumber,\n\t\t\tstatus: input.status,\n\t\t})\n\t) {\n\t\treturn projectStorageWireError({\n\t\t\t...input,\n\t\t\tcode: wireCode,\n\t\t\terrorNumber: wireNumber,\n\t\t});\n\t}\n\treturn projectLegacyGenericStorageHttpError({\n\t\tmessage: input.message,\n\t\tstatus: input.status,\n\t});\n}\n\nexport function createBrowserStorageTransport(options?: {\n\tbaseUrl?: string;\n\tendpoints?: { storage?: string };\n\tfetch?: typeof fetch;\n\theaders?: Record<string, string>;\n\tresolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n\ttopology?: AthenaRuntimeTopologyIR;\n}): StorageObjectProvider {\n\tlet pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n\tconst loadTransport = () => {\n\t\tpending ??= resolveStorageTransport(options);\n\t\treturn pending;\n\t};\n\n\treturn {\n\t\tasync execute(op: AuthorizedStorageOperation) {\n\t\t\tconst transport = await loadTransport();\n\t\t\tif (!transport) {\n\t\t\t\treturn storageErrorResult(\n\t\t\t\t\t3007,\n\t\t\t\t\t\"storage_unavailable\",\n\t\t\t\t\t\"storage runtime is not configured\",\n\t\t\t\t\t503,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst result = await executeAthenaHttpTransport({\n\t\t\t\tfetch: options?.fetch,\n\t\t\t\theaders: options?.headers,\n\t\t\t\tinvocation: {\n\t\t\t\t\tdomain: \"storage\",\n\t\t\t\t\toperation: op.op,\n\t\t\t\t\tpayload: compactStoragePayload({\n\t\t\t\t\t\tbody: op.body ? encodeAthenaStorageBytes(op.body) : undefined,\n\t\t\t\t\t\tcontentType: op.contentType,\n\t\t\t\t\t\tcursor: op.cursor,\n\t\t\t\t\t\tkey: op.key,\n\t\t\t\t\t\tlimit: op.limit,\n\t\t\t\t\t\tmetadata: op.metadata,\n\t\t\t\t\t\tprefix: op.prefix,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t\troot: options?.baseUrl,\n\t\t\t\ttransport,\n\t\t\t});\n\t\t\tif (!result.ok) {\n\t\t\t\treturn mapStorageHttpFailure(result.error);\n\t\t\t}\n\t\t\treturn storageOkResult(reviveAthenaStorageData(result.data));\n\t\t},\n\t};\n}\n\nfunction compactStoragePayload(\n\tpayload: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst compact: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(payload)) {\n\t\tif (value !== undefined) {\n\t\t\tcompact[key] = value;\n\t\t}\n\t}\n\treturn compact;\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type { PolicyPrincipal } from \"./types.ts\";\n\nconst PRINCIPAL_KINDS = new Set([\n\t\"public\",\n\t\"anonymous\",\n\t\"authenticated\",\n\t\"admin\",\n\t\"role\",\n\t\"permission\",\n\t\"service\",\n]);\n\nexport function isKnownPolicyPrincipalKind(kind: string): boolean {\n\treturn PRINCIPAL_KINDS.has(kind);\n}\n\nfunction eqIgnoreCase(left: string | undefined, right: string): boolean {\n\treturn (\n\t\tleft != null &&\n\t\tleft.localeCompare(right, undefined, { sensitivity: \"accent\" }) === 0\n\t);\n}\n\nfunction listHas(values: readonly string[] | undefined, name: string): boolean {\n\treturn Boolean(values?.some((value) => eqIgnoreCase(value, name)));\n}\n\n/**\n * Rust oracle (`athena-policy` `principal_matches`):\n * multiple principals on one policy are OR.\n *\n * `permission:*` matches `AthenaPrincipal.rights` only (spec 08), not grants.\n * `service:*` matches `AthenaPrincipal.service`.\n */\nexport function matchPolicyPrincipal(\n\ttarget: PolicyPrincipal,\n\tprincipal: AthenaPrincipal,\n): boolean {\n\tswitch (target.kind) {\n\t\tcase \"public\":\n\t\t\treturn true;\n\t\tcase \"anonymous\":\n\t\t\treturn principal.authenticated !== true;\n\t\tcase \"authenticated\":\n\t\t\treturn principal.authenticated === true;\n\t\tcase \"admin\":\n\t\t\treturn (\n\t\t\t\teqIgnoreCase(principal.role, \"admin\") ||\n\t\t\t\tlistHas(principal.rights, \"admin\")\n\t\t\t);\n\t\tcase \"role\":\n\t\t\treturn eqIgnoreCase(principal.role, target.name);\n\t\tcase \"permission\":\n\t\t\treturn listHas(principal.rights, target.name);\n\t\tcase \"service\":\n\t\t\treturn eqIgnoreCase(principal.service, target.name);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport function policyAppliesToPrincipal(\n\tprincipals: readonly PolicyPrincipal[],\n\tprincipal: AthenaPrincipal,\n): boolean {\n\tif (principals.length === 0) {\n\t\treturn true;\n\t}\n\treturn principals.some((target) => matchPolicyPrincipal(target, principal));\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type {\n\tAthenaPolicyDecision,\n\tAthenaPolicyDecisionReason,\n} from \"./decision.ts\";\nimport { policyAppliesToPrincipal } from \"./match-principal.ts\";\nimport type { AthenaPolicyRegistry } from \"./registry.ts\";\nimport type {\n\tPolicyActionName,\n\tPolicyDefinition,\n\tPolicyExpr,\n} from \"./types.ts\";\n\nexport interface DecideAthenaPolicyInput {\n\taction: PolicyActionName;\n\tprincipal: AthenaPrincipal;\n\tresource: string;\n}\n\nfunction combineOr(exprs: PolicyExpr[]): PolicyExpr | undefined {\n\tif (exprs.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (exprs.length === 1) {\n\t\treturn exprs[0];\n\t}\n\treturn { exprs, op: \"or\" };\n}\n\nfunction combineAnd(exprs: PolicyExpr[]): PolicyExpr | undefined {\n\tif (exprs.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (exprs.length === 1) {\n\t\treturn exprs[0];\n\t}\n\treturn { exprs, op: \"and\" };\n}\n\nfunction composeGroup(\n\tmatching: readonly PolicyDefinition[],\n\tfield: \"visibility\" | \"check\",\n): PolicyExpr | undefined {\n\tconst permissive = matching.filter(\n\t\t(item) => item.composition === \"permissive\",\n\t);\n\tconst restrictive = matching.filter(\n\t\t(item) => item.composition === \"restrictive\",\n\t);\n\n\tconst unrestrictedPermissive = permissive.some((item) => !item[field]);\n\tconst permissiveExprs = unrestrictedPermissive\n\t\t? []\n\t\t: permissive\n\t\t\t\t.map((item) => item[field])\n\t\t\t\t.filter((expr): expr is PolicyExpr => expr !== undefined);\n\tconst restrictiveExprs = restrictive\n\t\t.map((item) => item[field])\n\t\t.filter((expr): expr is PolicyExpr => expr !== undefined);\n\n\tconst permissiveExpr = unrestrictedPermissive\n\t\t? undefined\n\t\t: combineOr(permissiveExprs);\n\tconst parts: PolicyExpr[] = [];\n\tif (permissiveExpr) {\n\t\tparts.push(permissiveExpr);\n\t}\n\tparts.push(...restrictiveExprs);\n\treturn combineAnd(parts);\n}\n\nfunction decision(\n\tinput: Omit<AthenaPolicyDecision, \"matchedPolicyIds\"> & {\n\t\tmatchedPolicyIds?: readonly string[];\n\t},\n): AthenaPolicyDecision {\n\treturn {\n\t\tallowed: input.allowed,\n\t\tmatchedPolicyIds: Object.freeze([...(input.matchedPolicyIds ?? [])]),\n\t\tmode: input.mode,\n\t\treason: input.reason,\n\t\t...(input.visibility ? { visibility: input.visibility } : {}),\n\t\t...(input.check ? { check: input.check } : {}),\n\t};\n}\n\n/**\n * Produce a structured Policy decision.\n *\n * Visibility/check remain PolicyExpr IR. Subject slots are not substituted (R4).\n * Composition follows Rust: `(OR permissives) AND (AND restrictives)`.\n * Empty applicable permissive set is deny (Postgres RLS).\n */\nexport function decideAthenaPolicy(\n\tregistry: AthenaPolicyRegistry,\n\tinput: DecideAthenaPolicyInput,\n): AthenaPolicyDecision {\n\tif (registry.mode === \"disabled\") {\n\t\treturn decision({\n\t\t\tallowed: true,\n\t\t\tmode: \"disabled\",\n\t\t\treason: \"disabled\",\n\t\t});\n\t}\n\n\tconst candidates = registry.get(input.resource, input.action);\n\tif (candidates.length === 0) {\n\t\treturn decision({\n\t\t\tallowed: false,\n\t\t\tmode: registry.mode,\n\t\t\treason: \"no_matching_policy\",\n\t\t});\n\t}\n\n\tconst matching = candidates.filter((item) =>\n\t\tpolicyAppliesToPrincipal(item.principals, input.principal),\n\t);\n\tconst matchingIds = matching.map((item) => item.id);\n\tconst permissiveMatches = matching.filter(\n\t\t(item) => item.composition === \"permissive\",\n\t);\n\n\tlet reason: AthenaPolicyDecisionReason = \"allowed\";\n\tlet allowed = true;\n\tif (permissiveMatches.length === 0) {\n\t\tallowed = false;\n\t\treason =\n\t\t\tmatching.length === 0 ? \"no_matching_policy\" : \"principal_not_allowed\";\n\t}\n\n\treturn decision({\n\t\tallowed,\n\t\tcheck: allowed ? composeGroup(matching, \"check\") : undefined,\n\t\tmatchedPolicyIds: matchingIds,\n\t\tmode: registry.mode,\n\t\treason,\n\t\tvisibility: allowed ? composeGroup(matching, \"visibility\") : undefined,\n\t});\n}\n","import { decideAthenaPolicy } from \"../../policy/decide.ts\";\nimport type { PolicyActionName } from \"../../policy/types.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { mapProviderFailure, storageErrorResult } from \"./errors.ts\";\nimport { authorizeStorageOperation } from \"./rights.ts\";\nimport type {\n\tAuthorizedStorageOperation,\n\tCreateStorageRuntimeOptions,\n\tStorageObjectOp,\n\tStorageObjectRequest,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nconst STORAGE_RESOURCE = \"storage.object\";\n\nfunction actionForOp(op: StorageObjectOp): PolicyActionName {\n\tswitch (op) {\n\t\tcase \"put\":\n\t\t\treturn \"storage.object.write\";\n\t\tcase \"delete\":\n\t\t\treturn \"storage.object.delete\";\n\t\tdefault:\n\t\t\treturn \"storage.object.read\";\n\t}\n}\n\nfunction toBytes(body: Uint8Array | string | undefined): Uint8Array | undefined {\n\tif (body == null) {\n\t\treturn undefined;\n\t}\n\tif (typeof body === \"string\") {\n\t\treturn new TextEncoder().encode(body);\n\t}\n\treturn body;\n}\n\nexport function createStorageRuntime(\n\toptions: CreateStorageRuntimeOptions,\n): StorageRuntime {\n\tconst { provider, policies, lifecycle } = options;\n\n\treturn {\n\t\tprovider,\n\t\tasync execute(request: StorageObjectRequest, principal: AthenaPrincipal) {\n\t\t\tif (\n\t\t\t\trequest.op !== \"get\" &&\n\t\t\t\trequest.op !== \"put\" &&\n\t\t\t\trequest.op !== \"delete\" &&\n\t\t\t\trequest.op !== \"list\" &&\n\t\t\t\trequest.op !== \"head\"\n\t\t\t) {\n\t\t\t\treturn storageErrorResult({\n\t\t\t\t\tmessage: `unsupported op ${String(request.op)}`,\n\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\tstatus: 400,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (request.op !== \"list\" && !request.key?.trim()) {\n\t\t\t\treturn storageErrorResult({\n\t\t\t\t\tmessage: `${request.op} requires key`,\n\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\tstatus: 400,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst rightsDenied = authorizeStorageOperation(principal, request.op);\n\t\t\tif (rightsDenied) {\n\t\t\t\treturn rightsDenied;\n\t\t\t}\n\n\t\t\tif (policies) {\n\t\t\t\tconst decision = decideAthenaPolicy(policies, {\n\t\t\t\t\taction: actionForOp(request.op),\n\t\t\t\t\tprincipal,\n\t\t\t\t\tresource: STORAGE_RESOURCE,\n\t\t\t\t});\n\t\t\t\tif (!decision.allowed) {\n\t\t\t\t\treturn storageErrorResult({\n\t\t\t\t\t\tmessage: decision.reason ?? \"denied\",\n\t\t\t\t\t\tsource: \"runtime\",\n\t\t\t\t\t\tstatus: 403,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlifecycle?.before?.({ op: request.op, request });\n\n\t\t\tconst authorized: AuthorizedStorageOperation = {\n\t\t\t\tbody: toBytes(request.body),\n\t\t\t\tcontentType: request.contentType,\n\t\t\t\tcursor: request.cursor,\n\t\t\t\tkey: request.key,\n\t\t\t\tlimit: request.limit,\n\t\t\t\tmetadata: request.metadata,\n\t\t\t\top: request.op,\n\t\t\t\tprefix: request.prefix,\n\t\t\t\tprincipal,\n\t\t\t};\n\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await provider.execute(authorized);\n\t\t\t} catch (error) {\n\t\t\t\tresult = mapProviderFailure(error);\n\t\t\t}\n\n\t\t\tlifecycle?.after?.({ op: request.op, result });\n\t\t\treturn result;\n\t\t},\n\t};\n}\n","/**\n * Canonical object-store key helpers for local + overlay storage.\n * Rename is a specialized move: parent prefix stays, basename changes.\n */\n\nexport function normalizeObjectPrefix(prefix: string | undefined | null): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  return `${prefix.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")}/`;\n}\n\nexport function joinObjectKey(prefix: string, name: string): string {\n  const base = prefix.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  const part = name.replace(/^\\/+/, \"\");\n  if (!base) {\n    return part;\n  }\n  if (!part) {\n    return base;\n  }\n  return `${base}/${part}`;\n}\n\nexport function parentObjectPrefix(key: string): string {\n  const clean = key.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (!clean) {\n    return \"\";\n  }\n  const parts = clean.split(\"/\");\n  parts.pop();\n  return parts.length > 0 ? `${parts.join(\"/\")}/` : \"\";\n}\n\nexport function objectBaseName(key: string): string {\n  const clean = key.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (!clean) {\n    return \"\";\n  }\n  const parts = clean.split(\"/\");\n  return parts[parts.length - 1] ?? \"\";\n}\n\nexport function isFolderPrefixInside(\n  sourcePrefix: string,\n  destinationPrefix: string,\n): boolean {\n  const source = normalizeObjectPrefix(sourcePrefix);\n  const destination = normalizeObjectPrefix(destinationPrefix);\n  if (!source) {\n    return false;\n  }\n  return destination === source || destination.startsWith(source);\n}\n\nexport function renameObjectKey(\n  key: string,\n  newName: string,\n  folder: boolean,\n): string {\n  const parent = parentObjectPrefix(key);\n  const name = newName.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  if (folder) {\n    return `${joinObjectKey(parent, name)}/`;\n  }\n  return joinObjectKey(parent, name);\n}\n\nexport function moveObjectKey(\n  key: string,\n  destinationPrefix: string,\n  folder: boolean,\n): string {\n  const dest = normalizeObjectPrefix(destinationPrefix);\n  const name = objectBaseName(key);\n  if (folder) {\n    return `${joinObjectKey(dest, name)}/`;\n  }\n  return joinObjectKey(dest, name);\n}\n\nexport function validateFolderSegment(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new Error(\"Folder name is required.\");\n  }\n  if (trimmed === \".\" || trimmed === \"..\") {\n    throw new Error(\"Folder name is invalid.\");\n  }\n  if (trimmed.startsWith(\"/\") || trimmed.startsWith(\"\\\\\")) {\n    throw new Error(\"Folder name must not start with a slash.\");\n  }\n  if (trimmed.includes(\"/\") || trimmed.includes(\"\\\\\")) {\n    throw new Error(\"Folder name must not contain slashes.\");\n  }\n  if (trimmed.includes(\"\\0\") || trimmed.split(\"/\").includes(\"..\")) {\n    throw new Error(\"Folder name is invalid.\");\n  }\n  return trimmed;\n}\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport type { AthenaStorageUploadProgress } from \"../file.ts\";\nimport {\n\tisFolderPrefixInside,\n\tjoinObjectKey,\n\tnormalizeObjectPrefix,\n\trenameObjectKey,\n\tvalidateFolderSegment,\n} from \"../object-keys.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tAthenaStorageError,\n\tisAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport type { StorageOverlayInput } from \"./overlays.ts\";\nimport type {\n\tStorageObjectOp,\n\tStorageObjectResult,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n\tuserId: \"storage-overlay\",\n};\n\nasync function runOverlay(runtime: StorageRuntime, input: StorageOverlayInput) {\n\treturn runtime.execute(\n\t\t{\n\t\t\tbody: input.source,\n\t\t\tcontentType: input.contentType,\n\t\t\tcursor: input.cursor,\n\t\t\tkey: input.key,\n\t\t\tlimit: input.limit,\n\t\t\tmetadata: input.metadata,\n\t\t\top: input.op,\n\t\t\tprefix: input.prefix,\n\t\t},\n\t\tOVERLAY_PRINCIPAL,\n\t);\n}\n\nfunction unwrap(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): unknown {\n\tif (result.ok) {\n\t\treturn result.data;\n\t}\n\tif (result.error && isAthenaStorageAuthorizationError(result.error)) {\n\t\tthrow new AthenaStorageAuthorizationError({\n\t\t\tmissing: result.error.missing,\n\t\t\toperation: result.error.operation,\n\t\t});\n\t}\n\tthrow new AthenaStorageError({\n\t\tcode: result.error?.code ?? \"storage_internal\",\n\t\terrorNumber: result.error?.errorNumber ?? 3010,\n\t\tmessage: result.error?.message ?? `storage ${operation} denied`,\n\t\tstatus: result.status,\n\t});\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\treturn value && typeof value === \"object\"\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction readString(\n\trecord: Record<string, unknown>,\n\t...keys: string[]\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction isBinarySource(value: unknown): boolean {\n\treturn (\n\t\tvalue instanceof Uint8Array ||\n\t\tvalue instanceof ArrayBuffer ||\n\t\t(typeof Blob !== \"undefined\" && value instanceof Blob) ||\n\t\ttypeof value === \"string\"\n\t);\n}\n\nfunction isFileListLike(value: unknown): value is ArrayLike<unknown> {\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = value as { length?: unknown };\n\treturn (\n\t\ttypeof record.length === \"number\" &&\n\t\tNumber.isFinite(record.length) &&\n\t\trecord.length >= 0\n\t);\n}\n\nexport async function coerceStorageBytes(\n\tvalue: unknown,\n): Promise<Uint8Array | string | undefined> {\n\tif (value instanceof Uint8Array || typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (typeof Blob !== \"undefined\" && value instanceof Blob) {\n\t\treturn new Uint8Array(await value.arrayBuffer());\n\t}\n\treturn undefined;\n}\n\nfunction fileNameOf(source: unknown, fallback: string): string {\n\tif (source && typeof source === \"object\" && \"name\" in source) {\n\t\tconst name = (source as { name?: unknown }).name;\n\t\tif (typeof name === \"string\" && name.trim()) {\n\t\t\treturn name.trim();\n\t\t}\n\t}\n\treturn fallback;\n}\n\nfunction sourceSizeOf(source: unknown): number {\n\tif (source instanceof Uint8Array) {\n\t\treturn source.byteLength;\n\t}\n\tif (source instanceof ArrayBuffer) {\n\t\treturn source.byteLength;\n\t}\n\tif (typeof Blob !== \"undefined\" && source instanceof Blob) {\n\t\treturn source.size;\n\t}\n\treturn 0;\n}\n\nfunction progressSnapshot(\n\tphase: AthenaStorageUploadProgress[\"phase\"],\n\tfiles: readonly { fileName: string; sizeBytes: number }[],\n\tfileIndex: number,\n\tloaded: number,\n\taggregateLoaded: number,\n): AthenaStorageUploadProgress {\n\tconst total = files[fileIndex]?.sizeBytes ?? 0;\n\tconst aggregateTotal = files.reduce((sum, file) => sum + file.sizeBytes, 0);\n\treturn {\n\t\taggregateLoaded,\n\t\taggregatePercent:\n\t\t\taggregateTotal > 0\n\t\t\t\t? Math.round((aggregateLoaded / aggregateTotal) * 100)\n\t\t\t\t: 100,\n\t\taggregateTotal,\n\t\tfileCount: files.length,\n\t\tfileIndex,\n\t\tfileName: files[fileIndex]?.fileName ?? \"\",\n\t\tloaded,\n\t\tpercent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n\t\tphase,\n\t\ttotal,\n\t};\n}\n\nfunction listedKeys(data: unknown): string[] {\n\tif (!data || typeof data !== \"object\") {\n\t\treturn [];\n\t}\n\tconst record = data as Record<string, unknown>;\n\tconst items = record.objects ?? record.files ?? record.items;\n\tif (!Array.isArray(items)) {\n\t\treturn [];\n\t}\n\tconst keys: string[] = [];\n\tfor (const item of items) {\n\t\tif (!item || typeof item !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst entry = item as Record<string, unknown>;\n\t\tconst key = entry.key ?? entry.storage_key ?? entry.storageKey;\n\t\tif (typeof key === \"string\" && key.trim()) {\n\t\t\tkeys.push(key.trim());\n\t\t}\n\t}\n\treturn keys;\n}\n\nfunction listedCursor(data: unknown): string | undefined {\n\tif (!data || typeof data !== \"object\") {\n\t\treturn;\n\t}\n\tconst record = data as Record<string, unknown>;\n\tconst cursor = record.cursor ?? record.nextCursor;\n\treturn typeof cursor === \"string\" && cursor.trim()\n\t\t? cursor.trim()\n\t\t: undefined;\n}\n\nasync function listAllKeys(\n\truntime: StorageRuntime,\n\tprefix: string,\n): Promise<string[]> {\n\tconst keys: string[] = [];\n\tlet cursor: string | undefined;\n\tfor (let page = 0; page < 50; page += 1) {\n\t\tconst result = await runOverlay(runtime, {\n\t\t\tcursor,\n\t\t\top: \"list\",\n\t\t\tprefix: prefix || undefined,\n\t\t});\n\t\tconst data = unwrap(result, \"list\");\n\t\tkeys.push(...listedKeys(data));\n\t\tconst next = listedCursor(data);\n\t\tif (!next || next === cursor) {\n\t\t\tbreak;\n\t\t}\n\t\tcursor = next;\n\t}\n\treturn keys;\n}\n\nasync function putBytes(\n\truntime: StorageRuntime,\n\tinput: {\n\t\tcontentType?: string;\n\t\tkey: string;\n\t\tmetadata?: Record<string, string>;\n\t\tsource: unknown;\n\t},\n) {\n\tconst source = await coerceStorageBytes(input.source);\n\tconst result = await runOverlay(runtime, {\n\t\tcontentType: input.contentType,\n\t\tkey: input.key,\n\t\tmetadata: input.metadata,\n\t\top: \"put\",\n\t\tsource,\n\t});\n\treturn unwrap(result, \"put\");\n}\n\nexport function isHighLevelFileUpload(input: unknown): boolean {\n\tconst record = asRecord(input);\n\tconst files = record.files;\n\treturn isFileListLike(files) && !isBinarySource(files);\n}\n\nexport async function overlayUploadFiles(\n\truntime: StorageRuntime,\n\tinput: unknown,\n\toptions?: { signal?: AbortSignal },\n) {\n\tconst record = asRecord(input);\n\tconst filesField = record.files;\n\tif (!isFileListLike(filesField)) {\n\t\tthrow new Error(\"storage.file.upload requires files\");\n\t}\n\tconst sources = Array.from(filesField);\n\tif (sources.length === 0) {\n\t\tthrow new Error(\"storage.file.upload requires at least one file\");\n\t}\n\tconst prefixPath =\n\t\ttypeof record.prefixPath === \"string\"\n\t\t\t? record.prefixPath\n\t\t\t: typeof record.prefix === \"string\"\n\t\t\t\t? record.prefix\n\t\t\t\t: \"\";\n\tconst onProgress =\n\t\ttypeof record.onProgress === \"function\"\n\t\t\t? (record.onProgress as (progress: AthenaStorageUploadProgress) => void)\n\t\t\t: undefined;\n\tconst described = sources.map((source, index) => ({\n\t\tfileName: fileNameOf(source, `file-${index + 1}`),\n\t\tsizeBytes: sourceSizeOf(source),\n\t\tsource,\n\t}));\n\tonProgress?.(progressSnapshot(\"preparing\", described, 0, 0, 0));\n\tconst uploaded: unknown[] = [];\n\tlet aggregateLoaded = 0;\n\tfor (let index = 0; index < described.length; index += 1) {\n\t\tif (options?.signal?.aborted) {\n\t\t\tconst error = new Error(\"Upload cancelled\");\n\t\t\terror.name = \"AbortError\";\n\t\t\tthrow error;\n\t\t}\n\t\tconst item = described[index];\n\t\tif (!item) {\n\t\t\tcontinue;\n\t\t}\n\t\tonProgress?.(\n\t\t\tprogressSnapshot(\"uploading\", described, index, 0, aggregateLoaded),\n\t\t);\n\t\tconst key = joinObjectKey(prefixPath, item.fileName);\n\t\tconst result = await putBytes(runtime, {\n\t\t\tcontentType:\n\t\t\t\ttypeof record.contentType === \"string\" ? record.contentType : undefined,\n\t\t\tkey,\n\t\t\tsource: item.source,\n\t\t});\n\t\taggregateLoaded += item.sizeBytes;\n\t\tonProgress?.(\n\t\t\tprogressSnapshot(\n\t\t\t\t\"uploading\",\n\t\t\t\tdescribed,\n\t\t\t\tindex,\n\t\t\t\titem.sizeBytes,\n\t\t\t\taggregateLoaded,\n\t\t\t),\n\t\t);\n\t\tuploaded.push(result);\n\t}\n\tonProgress?.(\n\t\tprogressSnapshot(\n\t\t\t\"complete\",\n\t\t\tdescribed,\n\t\t\tdescribed.length - 1,\n\t\t\tdescribed[described.length - 1]?.sizeBytes ?? 0,\n\t\t\taggregateLoaded,\n\t\t),\n\t);\n\treturn {\n\t\tcount: uploaded.length,\n\t\tfiles: uploaded,\n\t\tuploaded: described.map((item) => joinObjectKey(prefixPath, item.fileName)),\n\t};\n}\n\nexport async function overlayMoveFile(runtime: StorageRuntime, input: unknown) {\n\tconst record = asRecord(input);\n\tconst from =\n\t\treadString(record, \"from\", \"from_key\", \"source_key\", \"key\") ?? \"\";\n\tconst to = readString(record, \"to\", \"to_key\", \"destination_key\") ?? \"\";\n\tif (!from || !to) {\n\t\tthrow new Error(\"storage.file.move requires from and to keys\");\n\t}\n\tconst getResult = await runOverlay(runtime, {\n\t\tkey: from,\n\t\top: \"get\",\n\t});\n\tconst body = unwrap(getResult, \"get\");\n\tawait putBytes(runtime, { key: to, source: body });\n\tconst deleteResult = await runOverlay(runtime, {\n\t\tkey: from,\n\t\top: \"delete\",\n\t});\n\tunwrap(deleteResult, \"delete\");\n\treturn { from, storage_key: to, to };\n}\n\nexport async function overlayRenameFile(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst key = readString(record, \"key\", \"from\", \"storage_key\") ?? \"\";\n\tconst name = readString(record, \"name\", \"to\", \"newName\") ?? \"\";\n\tif (!key || !name) {\n\t\tthrow new Error(\"storage.file.rename requires key and name\");\n\t}\n\treturn overlayMoveFile(runtime, {\n\t\tfrom: key,\n\t\tto: renameObjectKey(key, name, false),\n\t});\n}\n\nexport async function overlayCreateFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst name = readString(record, \"name\");\n\tconst parent =\n\t\t(typeof record.prefixPath === \"string\" ? record.prefixPath : undefined) ||\n\t\treadString(record, \"prefix\") ||\n\t\t\"\";\n\tconst prefix = name\n\t\t? normalizeObjectPrefix(joinObjectKey(parent, validateFolderSegment(name)))\n\t\t: normalizeObjectPrefix(readString(record, \"prefix\", \"key\", \"path\") ?? \"\");\n\tif (!prefix) {\n\t\tthrow new Error(\"storage.folder.create requires a folder name or prefix\");\n\t}\n\tawait putBytes(runtime, { key: prefix, source: new Uint8Array() });\n\treturn { created: true, prefix };\n}\n\nexport async function overlayDeleteFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst prefix = normalizeObjectPrefix(\n\t\treadString(record, \"prefix\", \"key\", \"from_prefix\") ?? \"\",\n\t);\n\tif (!prefix) {\n\t\tthrow new Error(\"storage.folder.delete requires prefix\");\n\t}\n\tconst keys = await listAllKeys(runtime, prefix);\n\tfor (const key of keys) {\n\t\tconst result = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"delete\",\n\t\t});\n\t\tunwrap(result, \"delete\");\n\t}\n\treturn { deleted: true, prefix };\n}\n\nexport async function overlayMoveFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst from = normalizeObjectPrefix(\n\t\treadString(record, \"from\", \"from_prefix\", \"prefix\") ?? \"\",\n\t);\n\tconst to = normalizeObjectPrefix(\n\t\treadString(record, \"to\", \"to_prefix\", \"destination\") ?? \"\",\n\t);\n\tif (!from || !to) {\n\t\tthrow new Error(\"storage.folder.move requires from and to prefixes\");\n\t}\n\tif (isFolderPrefixInside(from, to)) {\n\t\tthrow new Error(\"Cannot move a folder into itself\");\n\t}\n\tconst keys = await listAllKeys(runtime, from);\n\tfor (const key of keys) {\n\t\tconst next = `${to}${key.slice(from.length)}`;\n\t\tconst getResult = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"get\",\n\t\t});\n\t\tconst body = unwrap(getResult, \"get\");\n\t\tawait putBytes(runtime, { key: next, source: body });\n\t\tconst deleteResult = await runOverlay(runtime, {\n\t\t\tkey,\n\t\t\top: \"delete\",\n\t\t});\n\t\tunwrap(deleteResult, \"delete\");\n\t}\n\tif (keys.length === 0) {\n\t\tawait putBytes(runtime, { key: to, source: new Uint8Array() });\n\t}\n\treturn { from, prefix: to, to };\n}\n\nexport async function overlayRenameFolder(\n\truntime: StorageRuntime,\n\tinput: unknown,\n) {\n\tconst record = asRecord(input);\n\tconst from = normalizeObjectPrefix(\n\t\treadString(record, \"from\", \"from_prefix\", \"prefix\", \"key\") ?? \"\",\n\t);\n\tconst name = readString(record, \"name\");\n\tconst explicitTo = readString(record, \"to_prefix\", \"to\");\n\tconst to = explicitTo\n\t\t? normalizeObjectPrefix(explicitTo)\n\t\t: renameObjectKey(from, validateFolderSegment(name ?? \"\"), true);\n\treturn overlayMoveFolder(runtime, { from, to });\n}\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n\tAthenaStorageAuthorizationError,\n\tAthenaStorageError,\n\tisAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport {\n\tcoerceStorageBytes,\n\tisHighLevelFileUpload,\n\toverlayCreateFolder,\n\toverlayDeleteFolder,\n\toverlayMoveFile,\n\toverlayMoveFolder,\n\toverlayRenameFile,\n\toverlayRenameFolder,\n\toverlayUploadFiles,\n} from \"./object-ops.ts\";\nimport type {\n\tStorageObjectOp,\n\tStorageObjectResult,\n\tStorageRuntime,\n} from \"./types.ts\";\n\nexport interface StorageOverlayInput {\n\tcontentType?: string;\n\tcursor?: string;\n\tkey?: string;\n\tlimit?: number;\n\tmetadata?: Record<string, string>;\n\top: StorageObjectOp;\n\tprefix?: string;\n\tsource?: Uint8Array | string;\n}\n\n/** Process-owned local ObjectStore caller — not an HTTP identity. */\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n\tauthenticated: true,\n\tgrants: [],\n\trights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n\tuserId: \"storage-overlay\",\n};\n\nexport async function executeStorageOverlay(\n\truntime: StorageRuntime,\n\tinput: StorageOverlayInput,\n) {\n\treturn runtime.execute(\n\t\t{\n\t\t\tbody: input.source,\n\t\t\tcontentType: input.contentType,\n\t\t\tcursor: input.cursor,\n\t\t\tkey: input.key,\n\t\t\tlimit: input.limit,\n\t\t\tmetadata: input.metadata,\n\t\t\top: input.op,\n\t\t\tprefix: input.prefix,\n\t\t},\n\t\tOVERLAY_PRINCIPAL,\n\t);\n}\n\nexport function wrapStorageModuleWithRuntime<T extends object>(\n\tmodule: T,\n\truntime: StorageRuntime,\n): T {\n\tconst storage = module as T & {\n\t\tfile?: {\n\t\t\tdelete?: (input: unknown) => Promise<unknown>;\n\t\t\tget?: (input: unknown) => Promise<unknown>;\n\t\t\tlist?: (input?: unknown) => Promise<unknown>;\n\t\t\tmove?: (input: unknown) => Promise<unknown>;\n\t\t\trename?: (input: unknown) => Promise<unknown>;\n\t\t\tupload?: (\n\t\t\t\tinput: unknown,\n\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t) => Promise<unknown>;\n\t\t};\n\t\tfolder?: {\n\t\t\tcreate?: (input: unknown) => Promise<unknown>;\n\t\t\tdelete?: (input: unknown) => Promise<unknown>;\n\t\t\tmove?: (input: unknown) => Promise<unknown>;\n\t\t\trename?: (input: unknown) => Promise<unknown>;\n\t\t};\n\t};\n\tif (!storage.file) {\n\t\treturn module;\n\t}\n\tconst file = storage.file;\n\tconst folder = storage.folder ?? {};\n\treturn {\n\t\t...storage,\n\t\tfile: {\n\t\t\t...file,\n\t\t\tasync head(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"head\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"head\");\n\t\t\t},\n\t\t\tasync delete(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"delete\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"delete\");\n\t\t\t},\n\t\t\tasync get(input: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\top: \"get\",\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"get\");\n\t\t\t},\n\t\t\tasync list(input?: unknown) {\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tcursor: readCursor(input),\n\t\t\t\t\tlimit: readLimit(input),\n\t\t\t\t\top: \"list\",\n\t\t\t\t\tprefix: readPrefix(input),\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"list\");\n\t\t\t},\n\t\t\tasync move(input: unknown) {\n\t\t\t\tif (typeof file.move === \"function\") {\n\t\t\t\t\treturn file.move(input);\n\t\t\t\t}\n\t\t\t\treturn overlayMoveFile(runtime, input);\n\t\t\t},\n\t\t\tasync rename(input: unknown) {\n\t\t\t\tif (typeof file.rename === \"function\") {\n\t\t\t\t\treturn file.rename(input);\n\t\t\t\t}\n\t\t\t\treturn overlayRenameFile(runtime, input);\n\t\t\t},\n\t\t\tasync upload(\n\t\t\t\tinput: unknown,\n\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t) {\n\t\t\t\tif (isHighLevelFileUpload(input)) {\n\t\t\t\t\treturn overlayUploadFiles(runtime, input, options);\n\t\t\t\t}\n\t\t\t\tconst source = await coerceStorageBytes(\n\t\t\t\t\treadSource(input) ?? readLooseSource(input),\n\t\t\t\t);\n\t\t\t\tconst result = await executeStorageOverlay(runtime, {\n\t\t\t\t\tcontentType: readContentType(input),\n\t\t\t\t\tkey: readKey(input),\n\t\t\t\t\tmetadata: readMetadata(input),\n\t\t\t\t\top: \"put\",\n\t\t\t\t\tsource,\n\t\t\t\t});\n\t\t\t\treturn unwrapStorageRuntimeResult(result, \"put\");\n\t\t\t},\n\t\t},\n\t\tfolder: {\n\t\t\t...folder,\n\t\t\tcreate: folder.create ?? ((input) => overlayCreateFolder(runtime, input)),\n\t\t\tdelete: folder.delete ?? ((input) => overlayDeleteFolder(runtime, input)),\n\t\t\tmove: folder.move ?? ((input) => overlayMoveFolder(runtime, input)),\n\t\t\trename: folder.rename ?? ((input) => overlayRenameFolder(runtime, input)),\n\t\t},\n\t};\n}\n\nexport function unwrapStorageRuntimeResult(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): unknown {\n\tif (result.ok) {\n\t\treturn result.data;\n\t}\n\tthrow projectStorageRuntimeError(result, operation);\n}\n\nexport function projectStorageRuntimeError(\n\tresult: StorageObjectResult,\n\toperation: StorageObjectOp,\n): AthenaStorageError {\n\tif (result.error && isAthenaStorageAuthorizationError(result.error)) {\n\t\treturn new AthenaStorageAuthorizationError({\n\t\t\tmissing: result.error.missing,\n\t\t\toperation: result.error.operation,\n\t\t});\n\t}\n\treturn new AthenaStorageError({\n\t\tcode: result.error?.code ?? \"storage_internal\",\n\t\terrorNumber: result.error?.errorNumber ?? 3010,\n\t\tmessage: result.error?.message ?? `storage ${operation} denied`,\n\t\tstatus: result.status,\n\t});\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n\treturn value && typeof value === \"object\"\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction readKey(input: unknown): string | undefined {\n\tif (typeof input === \"string\" && input.trim()) {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\tconst key =\n\t\trecord.storage_key ?? record.storageKey ?? record.key ?? record.name;\n\treturn typeof key === \"string\" && key.trim() ? key : undefined;\n}\n\nfunction readPrefix(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.prefix === \"string\" ? record.prefix : undefined;\n}\n\nfunction readSource(input: unknown): Uint8Array | string | undefined {\n\tif (input instanceof Uint8Array || typeof input === \"string\") {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\tconst source = record.source ?? record.body ?? record.files ?? record.bytes;\n\tif (source instanceof Uint8Array || typeof source === \"string\") {\n\t\treturn source;\n\t}\n\treturn undefined;\n}\n\nfunction readContentType(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.contentType === \"string\"\n\t\t? record.contentType\n\t\t: undefined;\n}\n\nfunction readMetadata(input: unknown): Record<string, string> | undefined {\n\tconst record = asRecord(input);\n\tconst metadata = record.metadata;\n\tif (!metadata || typeof metadata !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst out: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(\n\t\tmetadata as Record<string, unknown>,\n\t)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tout[key] = value;\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction readCursor(input: unknown): string | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.cursor === \"string\" ? record.cursor : undefined;\n}\n\nfunction readLimit(input: unknown): number | undefined {\n\tconst record = asRecord(input);\n\treturn typeof record.limit === \"number\" ? record.limit : undefined;\n}\n\nfunction readLooseSource(input: unknown): unknown {\n\tif (\n\t\tinput instanceof Uint8Array ||\n\t\tinput instanceof ArrayBuffer ||\n\t\t(typeof Blob !== \"undefined\" && input instanceof Blob)\n\t) {\n\t\treturn input;\n\t}\n\tconst record = asRecord(input);\n\treturn record.source ?? record.body ?? record.files ?? record.bytes;\n}\n\n/** Public, non-secret Storage summary for settings UI. Never copy credentials. */\nexport function advertiseSafeStorageCapabilities(\n\tstorage: object,\n\tinput?: {\n\t\tbucket?: string | null;\n\t\tprovider?: string | null;\n\t\tr2?: unknown;\n\t},\n): void {\n\tconst bucket = input?.bucket?.trim() ?? \"\";\n\tlet provider: string | undefined;\n\tif (typeof input?.provider === \"string\" && input.provider.trim()) {\n\t\tprovider = input.provider.trim();\n\t} else if (input?.r2) {\n\t\tprovider = \"r2\";\n\t}\n\tconst target = storage as { capabilities?: Record<string, unknown> };\n\ttarget.capabilities = {\n\t\t...(target.capabilities && typeof target.capabilities === \"object\"\n\t\t\t? target.capabilities\n\t\t\t: {}),\n\t\tobjects: true,\n\t\t...(provider ? { provider } : {}),\n\t\t...(bucket ? { bucket } : {}),\n\t};\n}\n","export { DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nexport {\n\tbindStorageProvider,\n\tbindStorageRuntime,\n\tgetStorageProvider,\n\tgetStorageRuntime,\n} from \"./bind.ts\";\nexport {\n\tcreateBrowserStorageTransport,\n\tcreateEmbeddedStorageFacade,\n\tresolveBrowserStorageEndpoint,\n} from \"./browser-transport.ts\";\nexport type { AthenaStorageBytesEnvelope } from \"./bytes-envelope.ts\";\nexport {\n\tATHENA_STORAGE_BYTES_KIND,\n\tdecodeAthenaStorageBytes,\n\tdecodeAthenaStorageRequestBody,\n\tencodeAthenaStorageBytes,\n\tisAthenaStorageBytesEnvelope,\n\treviveAthenaStorageData,\n\tserializeAthenaStorageData,\n} from \"./bytes-envelope.ts\";\nexport {\n\tAthenaStorageAuthorizationError,\n\tAthenaStorageError,\n\tisAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nexport { createStorageRuntime } from \"./nucleus.ts\";\nexport {\n\texecuteStorageOverlay,\n\twrapStorageModuleWithRuntime,\n\tadvertiseSafeStorageCapabilities,\n} from \"./overlays.ts\";\nexport {\n\tauthorizeStorageOperation,\n\trequiredStorageRight,\n} from \"./rights.ts\";\nexport type {\n\tAthenaStorageLifecycleHooks,\n\tAuthorizedStorageOperation,\n\tCreateStorageRuntimeOptions,\n\tStorageObjectOp,\n\tStorageObjectProvider,\n\tStorageObjectRequest,\n\tStorageObjectResult,\n\tStorageRuntime,\n} from \"./types.ts\";\nexport { isStorageObjectOp } from \"./types.ts\";\nexport {\n\tATHENA_STORAGE_PROVIDER,\n\tATHENA_STORAGE_RUNTIME,\n} from \"./types.ts\";\n","/**\n * Browser-safe local-storage config helpers.\n *\n * The Node filesystem adapter lives in `./local.ts` and is imported only from\n * the server `v3-client.ts` entry. This module must stay free of `node:fs`.\n */\n\nexport const ATHENA_LOCAL_OBJECT_STORE = Symbol.for(\n  \"@xylex-group/athena.storage.localObjectStore\"\n);\n\nexport interface AthenaLocalStorageConfigShape {\n  prefix?: string | null;\n  provider?: string | null;\n  root?: string | null;\n}\n\nexport function isLocalStorageConfig(\n  storage: unknown\n): storage is AthenaLocalStorageConfigShape & { provider: \"local\" } {\n  if (!storage || typeof storage !== \"object\") {\n    return false;\n  }\n  return (storage as AthenaLocalStorageConfigShape).provider === \"local\";\n}\n\nexport interface AthenaS3StorageConfigShape {\n  bucket?: string | null;\n  prefix?: string | null;\n  provider?: string | null;\n  s3?: unknown;\n}\n\nexport function isS3StorageConfig(\n  storage: unknown\n): storage is AthenaS3StorageConfigShape & { provider: \"s3\" } {\n  if (!storage || typeof storage !== \"object\") {\n    return false;\n  }\n  return (storage as AthenaS3StorageConfigShape).provider === \"s3\";\n}\n\nexport function hasLocalStorageRoot(storage: unknown): boolean {\n  if (!isLocalStorageConfig(storage)) {\n    return false;\n  }\n  const root = storage.root;\n  return typeof root === \"string\" && root.trim().length > 0;\n}\n\nexport function getLocalObjectStore<T = unknown>(\n  storage: unknown\n): T | undefined {\n  if (!storage || typeof storage !== \"object\") {\n    return;\n  }\n  const handle = (storage as { [ATHENA_LOCAL_OBJECT_STORE]?: T })[\n    ATHENA_LOCAL_OBJECT_STORE\n  ];\n  return handle;\n}\n\nexport function bindLocalObjectStore<TStorage extends object, TStore>(\n  storage: TStorage,\n  store: TStore\n): TStorage & { [ATHENA_LOCAL_OBJECT_STORE]: TStore } {\n  return {\n    ...storage,\n    [ATHENA_LOCAL_OBJECT_STORE]: store,\n  };\n}\n","/**\n * Browser-safe Athena client core.\n *\n * This module must never import Node-only modules (pg, dns, net, tls, fs, …).\n * Direct PostgreSQL materialization lives in the Node-only wrapper\n * `./v3-client.ts`; browser and edge-restricted entries consume this core.\n */\n\nimport {\n\ttype AthenaAuthEmailAndPasswordOptions,\n\ttype AthenaAuthPasskeyOptions,\n\ttype AthenaAuthSecurityOptions,\n\ttype AthenaAuthSessionOptions,\n\ttype AthenaAuthSocialOptions,\n\ttype AthenaAuthSocialProviderOptions,\n\tathenaAuthConfig,\n\tisDisabledAthenaAuthConfig,\n\tisLocalAthenaAuthConfig,\n} from \"./auth/config.ts\";\nimport { assertLocalAuthHooks } from \"./auth/hooks/assert-local.ts\";\nimport type { AthenaAuthHooks } from \"./auth/hooks/types.ts\";\nimport { assertLocalAuthObservability } from \"./auth/observability/config.ts\";\nimport type { AthenaAuthObservabilityConfig } from \"./auth/observability/types.ts\";\nimport {\n\ttype AthenaAuthDiagnostics,\n\tattachAthenaAuthRouting,\n\tgetAttachedAthenaAuthRouting,\n\ttype ResolvedAthenaAuthRouting,\n\tresolveAthenaAuthRouting,\n\ttoAthenaAuthDiagnostics,\n} from \"./auth/resolve-routing.ts\";\nimport type {\n\tAthenaAuthBindings,\n\tAthenaAuthClientConfig,\n} from \"./auth/types.ts\";\nimport type { AthenaBillingConfig } from \"./billing/create-client-config.ts\";\nimport {\n\ttype AthenaBillingModule,\n\tcreateBillingModule,\n} from \"./billing/module.ts\";\nimport { createBrowserBillingTransport } from \"./billing/runtime/browser-transport.ts\";\nimport { assertBillingProviderRuntimeEnvironment } from \"./billing/runtime/local/providers/config.ts\";\nimport { assertLocalBillingRuntimeEnvironment } from \"./billing/runtime/resolve-mode.ts\";\nimport type {\n\tAthenaChatModule,\n\tAthenaChatWebSocketFactory,\n} from \"./chat/types.ts\";\nimport {\n\tcreateInternalClientCore,\n\tcreateInternalClientView,\n\ttype InternalAthenaClient,\n\ttype InternalAthenaClientCore,\n} from \"./client/context.ts\";\nimport type { AthenaRequestClient } from \"./client-brands.ts\";\nimport type {\n\tAthenaFromOptions,\n\tAthenaQueryTraceOptions,\n\tRpcQueryBuilder,\n\tTableQueryBuilder,\n} from \"./client-fluent.ts\";\nimport type {\n\tAthenaRequestOptions,\n\tAthenaRequestResponse,\n} from \"./client-request.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport {\n\tcreateCloudflareEdgeCapabilities,\n\tcreateGatewayCapabilities,\n} from \"./cloudflare/capabilities.ts\";\nimport { createCloudflareD1GatewayTransport } from \"./cloudflare/d1/transport.ts\";\nimport {\n\ttype AthenaExecutionMode,\n\ttype AthenaExecutionModeInput,\n\ttype AthenaExecutionPreferInput,\n\tresolveAthenaExecutionMode,\n} from \"./cloudflare/execution-mode.ts\";\nimport {\n\ttype CloudflareR2StorageModule,\n\tcomposeHttpAndR2Storage,\n\tcreateCloudflareR2StorageModule,\n} from \"./cloudflare/r2/storage.ts\";\nimport type {\n\tAthenaClientCapabilities,\n\tD1DatabaseLike,\n\tR2BucketLike,\n} from \"./cloudflare/types.ts\";\nimport {\n\tCLOUDFLARE_EDGE_API_KEY,\n\tCLOUDFLARE_EDGE_BASE_URL,\n} from \"./cloudflare/types.ts\";\nimport {\n\tAthenaConfigurationError,\n\ttype AthenaService,\n} from \"./config/errors.ts\";\nimport { mergeAthenaRequestContexts } from \"./context/merge.ts\";\nimport type { AthenaDbModule } from \"./db/module.ts\";\nimport { registerTransactionCacheObserver } from \"./db/transaction/cache.ts\";\nimport {\n\ttype AthenaDiagnosticsMode,\n\tresolveAthenaClientDiagnostics,\n} from \"./diagnostics.ts\";\nimport { createEmailModule } from \"./email/module.ts\";\nimport type { AthenaEmailConfig, AthenaEmailModule } from \"./email/types.ts\";\nimport {\n\tATHENA_ENV_API_KEY_KEYS,\n\tATHENA_ENV_CLIENT_KEYS,\n\tATHENA_ENV_DB_URL_KEYS,\n\tATHENA_ENV_URL_KEYS,\n} from \"./env/index.ts\";\nimport type { AthenaGatewayClient } from \"./gateway/client.ts\";\nimport type {\n\tAthenaGatewayCallOptions,\n\tAthenaGatewayConnectionOptions,\n\tAthenaGatewayConnectionResult,\n\tAthenaJsonObject,\n\tAthenaRpcCallOptions,\n\tBackendConfig,\n\tBackendType,\n} from \"./gateway/types.ts\";\nimport type { AthenaNotificationEventStore } from \"./notifications/events-store.ts\";\nimport { createMemoryNotificationEventStore } from \"./notifications/events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"./notifications/memory-store.ts\";\nimport {\n\tcreateNotificationsModule,\n\tunwrapNotificationsGatewayResult,\n} from \"./notifications/module.ts\";\nimport type { NotificationPreferenceStore } from \"./notifications/store.ts\";\nimport type {\n\tAthenaNotificationsConfig,\n\tAthenaNotificationsModule,\n} from \"./notifications/types.ts\";\nimport type { AthenaExecutable } from \"./query/descriptor.ts\";\nimport { catalogFromModels } from \"./query/engine/index.ts\";\nimport { explainAthenaQuery } from \"./query/explain.ts\";\nimport {\n\ttype AthenaQueryClient,\n\tcreateAthenaQueryClient,\n} from \"./react/query-client.ts\";\nimport {\n\tattachAthenaClientInternals,\n\tattachRequestAuthLifecycleGuards,\n\tcreateViewClientInternals,\n\tgetAthenaClientInternals,\n\tisAthenaRequestRuntime,\n\tthrowAthenaRuntimeOwnershipInvalid,\n} from \"./runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"./runtime/data/lifecycle/assert.ts\";\nimport type { AthenaDataLifecycleConfig } from \"./runtime/data/lifecycle/types.ts\";\nimport type { AthenaPrincipalRightsProjection } from \"./runtime/data/principal.ts\";\nimport {\n\tdetectAthenaRuntimeEnvironment,\n\tresolveAthenaRuntime,\n\ttoAthenaRuntimeDiagnostics,\n} from \"./runtime/resolve.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"./runtime/transport/topology.ts\";\nimport type {\n\tAthenaClientModelForTableName,\n\tAthenaClientModelsInput,\n\tAthenaClientTableName,\n\tAthenaModelTarget,\n\tInsertOf,\n\tRowOf,\n\tUpdateOf,\n} from \"./schema/types.ts\";\nimport type {\n\tAthenaStorageClientConfig,\n\tAthenaStorageDirectUploadConfig,\n\tAthenaStorageModule,\n} from \"./storage/module.ts\";\nimport {\n\tadvertiseSafeStorageCapabilities,\n\tcreateBrowserStorageTransport,\n\tcreateEmbeddedStorageFacade,\n\tcreateStorageRuntime,\n\tgetStorageProvider,\n\tgetStorageRuntime,\n\twrapStorageModuleWithRuntime,\n} from \"./storage/runtime/index.ts\";\nimport {\n\tATHENA_STORAGE_PROVIDER,\n\tATHENA_STORAGE_RUNTIME,\n\ttype AthenaStorageLifecycleHooks,\n\ttype StorageObjectProvider,\n\ttype StorageRuntime,\n} from \"./storage/runtime/types.ts\";\nimport {\n\tgetLocalObjectStore,\n\tisLocalStorageConfig,\n\tisS3StorageConfig,\n} from \"./storage/runtime.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"./utils/athena-request-headers.ts\";\n\ntype MaybePromise<T> = T | Promise<T>;\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput\n\t? TModels\n\t: never;\n\n/** Service-specific URL keys (not shared gateway root/db/key/client SSOT). */\nconst ENV_AUTH_URL_KEYS = [\n\t\"ATHENA_AUTH_URL\",\n\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\nconst ENV_CHAT_URL_KEYS = [\n\t\"ATHENA_CHAT_URL\",\n\t\"NEXT_PUBLIC_ATHENA_CHAT_URL\",\n] as const;\nconst ENV_CHAT_WS_URL_KEYS = [\n\t\"ATHENA_CHAT_WS_URL\",\n\t\"NEXT_PUBLIC_ATHENA_CHAT_WS_URL\",\n] as const;\nconst ENV_STORAGE_URL_KEYS = [\n\t\"ATHENA_STORAGE_URL\",\n\t\"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n] as const;\nconst MISSING_DB_SENTINEL = \"https://athena.invalid/db\";\n\nexport {\n\tAthenaConfigurationError,\n\ttype AthenaConfigurationErrorCode,\n\ttype AthenaService,\n} from \"./config/errors.ts\";\n\nexport interface AthenaRequestContext {\n\t/** Opaque, non-secret access-envelope fingerprint from Auth/Gateway. */\n\taccessScope?: string | null;\n\tbearerToken?: string | null;\n\tcookie?: string | null;\n\tforceNoCache?: boolean;\n\theaders?: Record<string, string>;\n\torganizationId?: string | null;\n\tpolicyRevision?: string | null;\n\tsessionToken?: string | null;\n\tuserId?: string | null;\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<\n\tAthenaRequestContext | undefined\n>;\n\nexport interface AthenaDbConfig {\n\t/**\n\t * Cloudflare D1 binding (e.g. `env.DB`).\n\t * Drop-in local DB execution for `from` / `query` / flat CRUD — same fluent API as HTTP gateway.\n\t * When set, `createClient` wires a D1 transport automatically (ADR 0015).\n\t */\n\td1?: D1DatabaseLike | null;\n\tjdbcUrl?: string | null;\n\t/**\n\t * Direct PostgreSQL connection URI for Node server runtimes (ADR 0022).\n\t * When set (and mode is not explicit `gateway`), `createClient` wires a PG\n\t * direct transport — no Athena Gateway required for DB ops.\n\t * On Gateway HTTP mode, still forwarded as `x-pg-uri` for server-side routing.\n\t */\n\tpgUri?: string | null;\n\t/**\n\t * Borrowed Node `pg` Pool. Athena never calls `end()` on this handle.\n\t * Node/server only — ignored by browser entries.\n\t */\n\tpool?: { end(): Promise<void> } | null;\n\t/** Default D1 session mode when using `d1` (`first-unconstrained`, `first-primary`, …). */\n\tsessionMode?: string | null;\n\turl?: string | null;\n}\n\n/**\n * Auth service config on {@link createClient}.\n *\n * Prefer intent modes for Next apps:\n * - `routing: \"same-origin\"` → browser `/api/auth`, proxy upstream via `upstreamUrl` / env\n * - `routing: \"direct\"` → absolute `url` to Athena Auth\n * - omit `routing` → legacy `url` / env / `${root}/auth` precedence\n *\n * Flat additive fields (no large discriminated union) to avoid TS2589/DTS risk.\n */\nexport interface AthenaAuthConfig\n\textends Omit<\n\t\tAthenaAuthClientConfig,\n\t\t\"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n\t> {\n\t/**\n\t * Execution runtime. `\"local\"` runs Athena Auth inside this process\n\t * against `db.pgUri` / `databaseUrl`. `\"remote\"` talks to an Auth HTTP\n\t * service. Omitted mode is inferred: Node + database URI + no `auth.url`\n\t * → embedded; `auth.url` or browser → remote. Explicit mode always wins.\n\t */\n\tmode?: \"local\" | \"remote\";\n\t/**\n\t * Explicit opt-in only. `createClient()` never applies Auth DDL unless\n\t * this is `true`. Runtime default remains `false` when omitted.\n\t */\n\tautoMigrate?: boolean;\n\t/**\n\t * Optional signing secret for local mode. When omitted, the runtime\n\t * bootstraps a database-backed keyring.\n\t */\n\tsecret?: string;\n\t/**\n\t * Local handler base path. Defaults to `/api/auth`.\n\t */\n\tbasePath?: string;\n\t/**\n\t * Local email/password policy. Normalized at the auth config boundary.\n\t * Email *transport* belongs on `createClient({ email: { provider } })`, not on `auth`.\n\t */\n\temailAndPassword?: AthenaAuthEmailAndPasswordOptions;\n\t/**\n\t * Local organization plugin. `enabled` defaults to true when omitted.\n\t */\n\torganizations?: { enabled?: boolean };\n\t/**\n\t * Embedded passkey (WebAuthn) options. Runtime enablement is\n\t * `auth.passkey.enabled`; construct keys `passkeys` / `webauthn` stay invalid.\n\t */\n\tpasskey?: boolean | AthenaAuthPasskeyOptions;\n\t/**\n\t * Local cookie / body / origin policy.\n\t */\n\tsecurity?: AthenaAuthSecurityOptions;\n\t/**\n\t * Local session cookie lifetime and name.\n\t */\n\tsession?: AthenaAuthSessionOptions;\n\t/**\n\t * Auth routing intent. When omitted, legacy URL/env resolution is preserved.\n\t */\n\trouting?: \"same-origin\" | \"direct\" | \"custom\";\n\t/**\n\t * Same-origin proxy upstream (origin or full auth base). Preferred over stuffing\n\t * the upstream into `url` when `routing` is `\"same-origin\"`.\n\t */\n\tupstreamUrl?: string | null;\n\t/**\n\t * Auth base URL or path.\n\t * - direct/custom: browser-facing auth base\n\t * - same-origin + absolute off-origin: treated as upstream (compat + deprecation warning)\n\t * - legacy: explicit override of env / root derivation\n\t */\n\turl?: string | null;\n\t/**\n\t * Embedded Auth domain lifecycle hooks (`auth.mode: \"local\"` only).\n\t * Remote Auth throws `ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME`.\n\t * Callbacks are not copied onto `NormalizedAthenaAuthConfig`.\n\t */\n\thooks?: AthenaAuthHooks;\n\t/**\n\t * Project Auth `user.role` (and optional store/metadata rights) onto\n\t * `AthenaPrincipal.rights` at session lookup. Grants stay provenance-only.\n\t */\n\tauthorization?: AthenaPrincipalRightsProjection;\n\t/**\n\t * Embedded Auth audit/trace tables (`auth.mode: \"local\"` only).\n\t * Remote Auth throws `ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME`.\n\t */\n\tobservability?: AthenaAuthObservabilityConfig;\n\t/**\n\t * Canonical social OAuth provider map (`createClient({ auth: { social } })`).\n\t * Provider secrets stay on the Node process; browser entries must not retain them.\n\t */\n\tsocial?: AthenaAuthSocialOptions;\n\t/** Alias of {@link AthenaAuthConfig.social} provider bags. */\n\toauth?: Record<string, AthenaAuthSocialProviderOptions>;\n\t/** Alias of {@link AthenaAuthConfig.social} provider bags. */\n\tsocialProviders?: Record<string, AthenaAuthSocialProviderOptions>;\n}\n\n/**\n * Transport/runtime selection on {@link AthenaChatConfig}.\n * Disabling Chat is `chat: false` / omitted — never `mode: \"disabled\"`.\n * Matches {@link AthenaAuthConfig.mode}.\n */\nexport type AthenaChatMode = \"local\" | \"remote\";\n\nexport interface AthenaChatConfig\n\textends Pick<\n\t\tAthenaRequestHeaderOverrideFields,\n\t\t\"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n\t> {\n\t/**\n\t * Runtime selection. Omitted mode is inferred: `chat.url` → remote,\n\t * `chat: true` + `databaseUrl` → local.\n\t * Use `chat: false` to disable; `mode` is never `\"disabled\"`.\n\t */\n\tmode?: AthenaChatMode;\n\t/**\n\t * Root principal resolver consumed by Local Chat (INV-CHAT-011).\n\t * User-supplied Chat payload fields never override actor identity.\n\t */\n\tresolvePrincipal?: import(\"./runtime/data/principal.ts\").AthenaPrincipalResolver;\n\turl?: string | null;\n\twebSocketFactory?: AthenaChatWebSocketFactory | null;\n\twsUrl?: string | null;\n}\n\nexport function athenaChatConfig(\n\tchat: boolean | AthenaChatConfig | undefined,\n): AthenaChatConfig | undefined {\n\tif (chat === undefined || chat === false || chat === true) {\n\t\treturn undefined;\n\t}\n\treturn chat;\n}\n\nexport interface AthenaStorageConfig\n\textends Omit<AthenaStorageClientConfig, \"baseUrl\" | \"directUpload\"> {\n\tdirectUpload?: AthenaStorageDirectUploadConfig;\n\t/** Key prefix for R2 object ops (trailing slash normalized). */\n\tprefix?: string | null;\n\t/**\n\t * Trusted-Node filesystem ObjectStore. Catalog-optional; requires `root`.\n\t * Browser / React Native entries fail closed.\n\t */\n\tprovider?: \"local\" | \"s3\" | (string & {});\n\t/**\n\t * Cloudflare R2 binding (e.g. `env.FILES`).\n\t * Drop-in local object I/O (`putObject` / `getObject` / `listObjects` / `deleteObject`).\n\t * When set with a remote storage URL (or unified root), HTTP storage.* ports are\n\t * preserved and composed with L3a helpers. R2-only keeps L3a + clear unsupported.\n\t */\n\tr2?: R2BucketLike | null;\n\t/**\n\t * Injected S3 object client for `provider: \"s3\"` (Node only).\n\t * Duck-typed `getObject` / `putObject` / `headObject` / `deleteObject` / `listObjectsV2`.\n\t * Athena does not construct an AWS SDK client or read global AWS credentials.\n\t */\n\ts3?: {\n\t\tdeleteObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\tgetObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\theadObject: (input: { Bucket: string; Key: string }) => Promise<unknown>;\n\t\tlistObjectsV2: (input: {\n\t\t\tBucket: string;\n\t\t\tContinuationToken?: string;\n\t\t\tMaxKeys?: number;\n\t\t\tPrefix?: string;\n\t\t}) => Promise<unknown>;\n\t\tputObject: (input: {\n\t\t\tBody?: Uint8Array;\n\t\t\tBucket: string;\n\t\t\tContentType?: string;\n\t\t\tKey: string;\n\t\t\tMetadata?: Record<string, string>;\n\t\t}) => Promise<unknown>;\n\t} | null;\n\t/** Bucket name for `provider: \"s3\"`. */\n\tbucket?: string | null;\n\t/** Absolute or process-local directory for `provider: \"local\"`. */\n\troot?: string | null;\n\turl?: string | null;\n\t/**\n\t * Same-origin Embedded Storage HTTP path for browser/RN `createClient()`.\n\t * Defaults to `/api/athena/storage`. Discovery `endpoints.storage` overrides\n\t * when this is omitted.\n\t */\n\tendpoint?: string | null;\n\t[ATHENA_STORAGE_PROVIDER]?: StorageObjectProvider;\n\t[ATHENA_STORAGE_RUNTIME]?: StorageRuntime;\n}\n\nexport type { AthenaBillingConfig, AthenaDiagnosticsMode };\n\n/**\n * Host / transport fields on {@link createClient}.\n * Kept distinct from {@link AthenaClientServicesConfig} and `models` so\n * constructor contextual typing does not re-instantiate the full client graph.\n */\nexport interface AthenaClientRuntimeConfig {\n\t/**\n\t * Public application identity (origin + optional display name).\n\t * `APP_URL` / documented aliases are enough when this is omitted.\n\t * Never derived from Host.\n\t */\n\tapp?: {\n\t\t/** Durable installation id. Used for webhook ownership; never a display name. */\n\t\tid?: string | null;\n\t\tname?: string | null;\n\t\turl?: string | null;\n\t};\n\tbackend?: BackendConfig | BackendType;\n\t/** Optional capability bag; defaults from gateway vs `db.d1` / `storage.r2` bindings. */\n\tcapabilities?: AthenaClientCapabilities;\n\tclient?: string | null;\n\tcontext?: AthenaRequestContext | AthenaRequestContextProvider;\n\t/**\n\t * Top-level D1 alias for `db.d1` (Worker DX). Prefer nested `db: { d1 }` in shared code.\n\t * All paths still materialize through {@link createClient}.\n\t */\n\td1?: D1DatabaseLike | null;\n\t/**\n\t * Top-level alias of `db.pgUri` (typically `DATABASE_URL`).\n\t * Same value, same Node-only PostgreSQL transport. Browser/RN fail-closed.\n\t */\n\tdatabaseUrl?: string | null;\n\tdb?: AthenaDbConfig;\n\tdebugAst?: boolean;\n\t/**\n\t * Query diagnostics mode. Prefer `'auto'` in Next/OpenNext apps so production\n\t * builds stay quiet without app-local OPENNEXT_BUILD branching.\n\t * Per-flag `debugAst` / `findManyAst` / `traceQueries` always win when set.\n\t */\n\tdiagnostics?: AthenaDiagnosticsMode;\n\tenv?: Record<string, string | undefined>;\n\tfindManyAst?: boolean;\n\t/**\n\t * Optional prebuilt gateway transport (tests / advanced injection).\n\t * Prefer `db.d1` for Cloudflare edge-local — `createClient` wires D1 automatically.\n\t * @see ADR 0015\n\t */\n\tgatewayTransport?: AthenaGatewayClient;\n\theaders?: Record<string, string>;\n\tkey?: string | null;\n\t/**\n\t * Edge vs gateway selection when both bindings and HTTP URLs may be present.\n\t * Default `auto` (env `ATHENA_EXECUTION_MODE`). Prefer nested service fields for backends.\n\t * Canonical: `gateway` | `edge` | `auto`. Aliases: `server`, `remote`, `http`,\n\t * `d1`, `cloudflare`, `local`. Empty / unknown strings are not assignable.\n\t */\n\tmode?: AthenaExecutionModeInput | null;\n\t/**\n\t * Optional policy definitions owned by this root client.\n\t * Local HTTP handlers read them so apps do not re-pass the same bag.\n\t */\n\tpolicies?: {\n\t\tdefinitions?: unknown;\n\t\tenforce?: boolean;\n\t\tmode?: \"disabled\" | \"observe\" | \"enforce\";\n\t};\n\t/**\n\t * Native data-runtime cache owned by this client.\n\t * SQL remains `athena.query(sql)` — use `athena.cache` for the entity graph.\n\t */\n\tquery?: {\n\t\tcache?: \"memory\" | \"none\";\n\t\tgcTime?: number;\n\t\tstaleTime?: number;\n\t};\n\t/**\n\t * When `mode` is `auto` and both D1 and a gateway URL exist, which wins.\n\t * Default `edge` (env `ATHENA_EXECUTION_PREFER`).\n\t */\n\tprefer?: AthenaExecutionPreferInput | null;\n\t/**\n\t * Top-level R2 alias for `storage.r2`. Prefer nested `storage: { r2 }` in shared code.\n\t */\n\tr2?: R2BucketLike | null;\n\tretryReads?: boolean;\n\t/** Top-level alias for `db.sessionMode` when using `d1`. */\n\tsessionMode?: string | null;\n\t/** Top-level alias for `storage.prefix` when using `r2`. */\n\tstoragePrefix?: string | null;\n\ttraceQueries?: boolean | AthenaQueryTraceOptions;\n\turl?: string | null;\n}\n\n/**\n * Domain capability fields on {@link createClient}.\n * Auth / billing / storage / email stay on this bag so `models` inference\n * does not participate in the same object as nested service IntelliSense.\n */\nexport interface AthenaClientServicesConfig {\n\t/**\n\t * Auth service config. Pass `false` to keep Athena DB without Athena Auth.\n\t * Object config is normalized once (`local` | `remote`); omitted mode is inferred.\n\t */\n\tauth?: false | AthenaAuthConfig;\n\tbilling?: AthenaBillingConfig;\n\tchat?: boolean | AthenaChatConfig;\n\t/**\n\t * @internal Planted local/remote Chat runtime before the client view freezes.\n\t */\n\tchatRuntime?: import(\"./chat/runtime.ts\").AthenaChatRuntime;\n\t/**\n\t * Root email capability. Independent of Auth: transport lives here;\n\t * Auth may consume `athena.email` but must not own provider config.\n\t * Omitted config still materializes `athena.email` (unconfigured send fails).\n\t */\n\temail?: AthenaEmailConfig;\n\t/**\n\t * Notifications capability. Catalog is required to materialize the module.\n\t * Omitting `notifications.catalog` fail-closes to unavailable (no kernel default).\n\t */\n\tnotifications?: AthenaNotificationsConfig;\n\t/**\n\t * Server-owned mutation Data Lifecycle. Local/mutation-owning runtimes only.\n\t * Remote/browser throws `ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME`.\n\t */\n\tlifecycle?: {\n\t\tdata?: AthenaDataLifecycleConfig;\n\t\tstorage?: AthenaStorageLifecycleHooks;\n\t};\n\tstorage?: AthenaStorageConfig;\n}\n\nexport interface AthenaClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> extends AthenaClientRuntimeConfig,\n\tAthenaClientServicesConfig {\n\tmodels?: TModels;\n}\n\n/**\n * Next discovery handoff into browser storage/billing HTTP. Not on public\n * {@link AthenaClientConfig} — no stripInternal, so a public member would leak\n * {@link AthenaRuntimeTopologyIR} from root and browser entrypoints.\n */\ntype AthenaInternalClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n\tresolveRuntimeTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n};\n\n/** Config with a required R2 binding — narrows `client.storage` to L3a object methods. */\nexport type AthenaClientConfigWithR2<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n\tstorage: AthenaStorageConfig & { r2: R2BucketLike };\n};\n\n/** Client with L3a R2 object methods typed on `storage`. */\nexport type AthenaClientWithR2Storage<\n\tTModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<AthenaClient<TModels>, \"storage\" | \"withContext\"> & {\n\treadonly storage: CloudflareR2StorageModule;\n\twithContext: (\n\t\tcontext: AthenaRequestContext,\n\t) => AthenaRequestClient<AthenaClientWithR2Storage<TModels>>;\n};\n\ntype V3TableBuilder<\n\tRow,\n\tInsert = Partial<Row>,\n\tUpdate = Partial<Insert>,\n\tResult = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>;\n\nexport interface AthenaClient<\n\tTModels extends AthenaClientModelsInput | undefined =\n\t| AthenaClientModelsInput\n\t| undefined,\n> {\n\treadonly admin: import(\"./client.ts\").AthenaClientAdminModule;\n\treadonly auth: AthenaAuthBindings;\n\treadonly billing: AthenaBillingModule;\n\t/** Native entity/query cache. Distinct from SQL `query()`. */\n\treadonly cache: AthenaQueryClient;\n\t/** Runtime feature detection for gateway vs edge-local backends (ADR 0015). */\n\treadonly capabilities: AthenaClientCapabilities;\n\texplain: (\n\t\texecutable: AthenaExecutable<unknown>,\n\t) => ReturnType<typeof explainAthenaQuery>;\n\treadonly models: TModels;\n\treadonly chat: AthenaChatModule;\n\treadonly db: AthenaDbModule<ResolvedModels<TModels>>;\n\treadonly email: AthenaEmailModule;\n\treadonly notifications: AthenaNotificationsModule;\n\tfrom<TModel extends AthenaModelTarget>(\n\t\tmodel: TModel,\n\t): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n\tfrom<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n\t\ttable: TTableName,\n\t\toptions?: AthenaFromOptions,\n\t): V3TableBuilder<\n\t\tRowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n\t\tInsertOf<\n\t\t\tAthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>\n\t\t>,\n\t\tUpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n\t>;\n\tfrom<\n\t\tRow = Record<string, unknown>,\n\t\tInsert = Partial<Row>,\n\t\tUpdate = Partial<Insert>,\n\t>(\n\t\ttable: string,\n\t\toptions?: AthenaFromOptions,\n\t): V3TableBuilder<Row, Insert, Update>;\n\thealth: () => Promise<import(\"./release/identity.ts\").AthenaNormalizedHealth>;\n\t/**\n\t * Executes raw SQL through Athena's compatibility query surface.\n\t *\n\t * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n\t */\n\tquery: <Row = unknown>(\n\t\tquery: string,\n\t\toptions?: AthenaGatewayCallOptions,\n\t) => Promise<AthenaResult<Row[]>>;\n\trequest: <T = unknown>(\n\t\toptions: AthenaRequestOptions,\n\t) => Promise<AthenaRequestResponse<T>>;\n\trpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n\t\tfn: string,\n\t\targs?: Args,\n\t\toptions?: AthenaRpcCallOptions,\n\t) => RpcQueryBuilder<Row>;\n\treadonly storage: AthenaStorageModule;\n\treadonly system: import(\"./client.ts\").AthenaClientSystemModule;\n\tverifyConnection: (\n\t\toptions?: AthenaGatewayConnectionOptions,\n\t) => Promise<AthenaGatewayConnectionResult>;\n\twithContext: (\n\t\tcontext: AthenaRequestContext,\n\t) => AthenaRequestClient<AthenaClient<TModels>>;\n\t/**\n\t * Dispose Athena-owned resources (PostgreSQL pool, embedded Auth).\n\t * Safe to call twice. Does not destroy borrowed pools, D1, or R2.\n\t */\n\tclose: () => Promise<void>;\n}\n\ninterface ResolvedServiceUrls {\n\tauth?: string;\n\tbilling?: string;\n\tchat?: string;\n\tchatWs?: string;\n\tdb?: string;\n\tstorage?: string;\n}\n\ninterface AthenaClientCoreBase<\n\tTModels extends AthenaClientModelsInput | undefined,\n> {\n\treadonly authRouting?: ResolvedAthenaAuthRouting;\n\treadonly client?: string;\n\treadonly config: AthenaInternalClientConfig<TModels>;\n\treadonly key: string;\n\treadonly urls: ResolvedServiceUrls;\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n\textends AthenaClientCoreBase<TModels> {\n\treadonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>;\n}\n\nfunction readFirstEnv(\n\tenv: Record<string, string | undefined> | undefined,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = env?.[key]?.trim();\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn;\n}\n\n/**\n * First env value that looks like an absolute http(s) URL.\n * Skips unexpanded placeholders (e.g. `${ATHENA_URL}`) and other non-URLs so\n * ambient shell pollution cannot crash createClient during service resolution.\n */\nfunction readFirstEnvHttpUrl(\n\tenv: Record<string, string | undefined> | undefined,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = env?.[key]?.trim();\n\t\tif (value && isAbsoluteHttpUrl(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn;\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function normalizeOptional(\n\tvalue: string | null | undefined,\n): string | undefined {\n\tconst normalized = value?.trim();\n\treturn normalized || undefined;\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst url = new URL(value);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n\treturn `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction toWebSocketUrl(baseUrl: string): string | undefined {\n\tif (!isAbsoluteHttpUrl(baseUrl)) {\n\t\treturn;\n\t}\n\tconst url = new URL(baseUrl);\n\turl.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\turl.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/wss/gateway`;\n\turl.search = \"\";\n\turl.hash = \"\";\n\treturn url.toString();\n}\n\nfunction isRemoteAuthOnlyClient<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authObject = athenaAuthConfig(config.auth);\n\tif (\n\t\tisDisabledAthenaAuthConfig(config.auth) ||\n\t\tisLocalAthenaAuthConfig(config.auth) ||\n\t\t!normalizeOptional(authObject?.url)\n\t) {\n\t\treturn false;\n\t}\n\tif (config.gatewayTransport) {\n\t\treturn false;\n\t}\n\tif (\n\t\tnormalizeOptional(config.url) ||\n\t\tnormalizeOptional(config.db?.url) ||\n\t\tnormalizeOptional(config.db?.pgUri) ||\n\t\tnormalizeOptional(config.databaseUrl)\n\t) {\n\t\treturn false;\n\t}\n\tif (\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\t(isLocalStorageConfig(config.storage) &&\n\t\t\tBoolean(\n\t\t\t\tgetLocalObjectStore(config.storage) ||\n\t\t\t\tnormalizeOptional(config.storage.root),\n\t\t\t))\n\t) {\n\t\treturn false;\n\t}\n\tif (normalizeOptional(athenaChatConfig(config.chat)?.url)) {\n\t\treturn false;\n\t}\n\tif (normalizeOptional(config.billing?.url)) {\n\t\treturn false;\n\t}\n\tif (\n\t\treadFirstEnvHttpUrl(config.env, ATHENA_ENV_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ATHENA_ENV_DB_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\treadFirstEnvHttpUrl(config.env, ENV_CHAT_URL_KEYS)\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction hasChatSessionCredentials(chat?: boolean | AthenaChatConfig): boolean {\n\tconst options = athenaChatConfig(chat);\n\treturn Boolean(\n\t\tnormalizeOptional(options?.bearerToken) ??\n\t\tnormalizeOptional(options?.cookie) ??\n\t\tnormalizeOptional(options?.sessionToken),\n\t);\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n\tconfig: AthenaClientConfig<TModels>,\n): AthenaClientCore<TModels> {\n\tconst env = config.env;\n\tconst explicitRoot = normalizeOptional(config.url);\n\tconst envRoot = readFirstEnvHttpUrl(env, ATHENA_ENV_URL_KEYS);\n\tconst root =\n\t\texplicitRoot && isAbsoluteHttpUrl(explicitRoot)\n\t\t\t? explicitRoot\n\t\t\t: explicitRoot\n\t\t\t\t? undefined\n\t\t\t\t: envRoot;\n\tconst explicitRootWinsOverEnvServices = Boolean(\n\t\troot && explicitRoot && isAbsoluteHttpUrl(explicitRoot),\n\t);\n\tconst resolveService = (\n\t\texplicit: string | null | undefined,\n\t\tenvKeys: readonly string[],\n\t\tpath: string,\n\t): string | undefined =>\n\t\tnormalizeOptional(explicit) ??\n\t\t(explicitRootWinsOverEnvServices && root\n\t\t\t? appendPath(root, path)\n\t\t\t: undefined) ??\n\t\treadFirstEnvHttpUrl(env, envKeys) ??\n\t\t(root ? appendPath(root, path) : undefined);\n\n\tconst dbUrl = resolveService(config.db?.url, ATHENA_ENV_DB_URL_KEYS, \"db\");\n\tconst authObject = athenaAuthConfig(config.auth);\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\n\t// Auth routing policy (SSOT). Legacy configs (no routing) keep historical\n\t// resolveService outcomes; same-origin enables relative `/api/auth`.\n\t// `auth: false` skips env/root Auth URL inference so DB-only clients stay DB-only.\n\tconst authRouting = authDisabled\n\t\t? undefined\n\t\t: resolveAthenaAuthRouting({\n\t\t\tcredentials: authObject?.credentials,\n\t\t\temitWarnings: true,\n\t\t\tenv,\n\t\t\texecution: isLocalAthenaAuthConfig(config.auth) ? \"local\" : \"remote\",\n\t\t\texplicitRootWinsOverEnvServices,\n\t\t\trootUrl: root,\n\t\t\trouting: authObject?.routing,\n\t\t\tupstreamUrl: authObject?.upstreamUrl,\n\t\t\turl: authObject?.url,\n\t\t});\n\n\tconst authUrl = authDisabled\n\t\t? undefined\n\t\t: authRouting?.mode === \"legacy\"\n\t\t\t? authRouting.browserRequestBaseUrl ||\n\t\t\tresolveService(authObject?.url, ENV_AUTH_URL_KEYS, \"auth\")\n\t\t\t: authRouting?.browserRequestBaseUrl || undefined;\n\n\tconst urls: ResolvedServiceUrls = {\n\t\tauth: authUrl || undefined,\n\t\t// Billing lives on the main Athena HTTP surface.\n\t\tbilling:\n\t\t\tnormalizeOptional(config.billing?.url) ?? dbUrl ?? root ?? undefined,\n\t\tchat:\n\t\t\tconfig.chat === true || athenaChatConfig(config.chat)?.mode === \"local\"\n\t\t\t\t? undefined\n\t\t\t\t: resolveService(\n\t\t\t\t\tathenaChatConfig(config.chat)?.url,\n\t\t\t\t\tENV_CHAT_URL_KEYS,\n\t\t\t\t\t\"chat\",\n\t\t\t\t),\n\t\tchatWs:\n\t\t\tnormalizeOptional(athenaChatConfig(config.chat)?.wsUrl) ??\n\t\t\t(explicitRootWinsOverEnvServices && root\n\t\t\t\t? toWebSocketUrl(root)\n\t\t\t\t: undefined) ??\n\t\t\treadFirstEnvHttpUrl(env, ENV_CHAT_WS_URL_KEYS) ??\n\t\t\t(root ? toWebSocketUrl(root) : undefined),\n\t\tdb: dbUrl,\n\t\tstorage: resolveService(\n\t\t\tconfig.storage?.url,\n\t\t\tENV_STORAGE_URL_KEYS,\n\t\t\t\"storage\",\n\t\t),\n\t};\n\n\tconst localStorageConfigured =\n\t\tisLocalStorageConfig(config.storage) &&\n\t\tBoolean(\n\t\t\tgetLocalObjectStore(config.storage) ||\n\t\t\tnormalizeOptional(config.storage.root),\n\t\t);\n\tconst s3StorageConfigured = isS3StorageConfig(config.storage);\n\tconst runtimeEnv = detectAthenaRuntimeEnvironment();\n\tconst browserEmbeddedStorage =\n\t\t(runtimeEnv === \"browser\" || runtimeEnv === \"react-native\") &&\n\t\t!localStorageConfigured &&\n\t\t!s3StorageConfigured &&\n\t\t!isR2Binding(config.storage?.r2 ?? config.r2) &&\n\t\t!normalizeOptional(config.storage?.url) &&\n\t\t!readFirstEnvHttpUrl(env, ENV_STORAGE_URL_KEYS);\n\n\tif (\n\t\t!(\n\t\t\turls.db ||\n\t\t\turls.auth ||\n\t\t\turls.chat ||\n\t\t\turls.storage ||\n\t\t\turls.billing ||\n\t\t\tconfig.gatewayTransport ||\n\t\t\tconfig.chatRuntime ||\n\t\t\tlocalStorageConfigured ||\n\t\t\ts3StorageConfigured ||\n\t\t\tbrowserEmbeddedStorage\n\t\t)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"Athena requires a unified URL or at least one configured service URL.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tconst key =\n\t\tnormalizeOptional(config.key) ?? readFirstEnv(env, ATHENA_ENV_API_KEY_KEYS);\n\tif (\n\t\t!(\n\t\t\tkey ||\n\t\t\thasChatSessionCredentials(config.chat) ||\n\t\t\tconfig.gatewayTransport ||\n\t\t\tlocalStorageConfigured ||\n\t\t\ts3StorageConfigured ||\n\t\t\tisRemoteAuthOnlyClient(config)\n\t\t)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_API_KEY_REQUIRED\",\n\t\t\t\"Athena API key is required unless chat session credentials are configured.\",\n\t\t);\n\t}\n\tif (\n\t\t!key &&\n\t\t!hasChatSessionCredentials(config.chat) &&\n\t\thasExplicitRemoteHttpApiKeyNeed(config) &&\n\t\t!isRemoteAuthOnlyClient(config)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_API_KEY_REQUIRED\",\n\t\t\t\"Athena API key is required unless chat session credentials are configured.\",\n\t\t);\n\t}\n\n\t// Default credentials for same-origin when not explicitly set on auth options.\n\tconst authWithCredentials =\n\t\tauthObject &&\n\t\t\tauthObject.credentials === undefined &&\n\t\t\tauthRouting?.credentials\n\t\t\t? { ...authObject, credentials: authRouting.credentials }\n\t\t\t: config.auth;\n\n\tconst resolvedConfig: AthenaInternalClientConfig<TModels> =\n\t\tauthWithCredentials ? { ...config, auth: authWithCredentials } : config;\n\n\tconst base: AthenaClientCoreBase<TModels> = {\n\t\tauthRouting:\n\t\t\tauthRouting &&\n\t\t\t\t(authRouting.browserRequestBaseUrl || authRouting.mode !== \"legacy\")\n\t\t\t\t? authRouting\n\t\t\t\t: undefined,\n\t\tclient:\n\t\t\tnormalizeOptional(config.client) ??\n\t\t\treadFirstEnv(env, ATHENA_ENV_CLIENT_KEYS),\n\t\tconfig: resolvedConfig,\n\t\tkey: key ?? \"\",\n\t\turls,\n\t};\n\treturn {\n\t\t...base,\n\t\tinternalCore: createInternalClientCore(createInternalConfig(base)),\n\t};\n}\n\nasync function resolveConfiguredContext<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tcore: AthenaClientCore<TModels>,\n\tviewContext: AthenaRequestContext | undefined,\n): Promise<AthenaRequestContext | undefined> {\n\tconst configured = core.config.context;\n\tconst base =\n\t\ttypeof configured === \"function\" ? await configured() : configured;\n\treturn mergeAthenaRequestContexts(base, viewContext);\n}\n\nfunction createInternalConfig<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(core: AthenaClientCoreBase<TModels>) {\n\tconst { config, urls } = core;\n\tconst {\n\t\turl: _authUrl,\n\t\trouting: _authRouting,\n\t\tupstreamUrl: _authUpstreamUrl,\n\t\t...authOptions\n\t} = athenaAuthConfig(config.auth) ?? {};\n\tconst {\n\t\turl: _storageUrl,\n\t\tdirectUpload,\n\t\tr2: _r2,\n\t\tprefix: _r2Prefix,\n\t\t...storageOptions\n\t} = config.storage ?? {};\n\tvoid _authUrl;\n\tvoid _authRouting;\n\tvoid _authUpstreamUrl;\n\tvoid _storageUrl;\n\tvoid _r2;\n\tvoid _r2Prefix;\n\n\tconst diagnostics = resolveAthenaClientDiagnostics({\n\t\tdebugAst: config.debugAst,\n\t\tdiagnostics: config.diagnostics,\n\t\tenv: config.env,\n\t\tfindManyAst: config.findManyAst,\n\t\ttraceQueries: config.traceQueries,\n\t});\n\n\treturn {\n\t\tapiKey: core.key,\n\t\tauth: authOptions,\n\t\tauthUrl: urls.auth,\n\t\tbackend:\n\t\t\ttypeof config.backend === \"string\"\n\t\t\t\t? { type: config.backend }\n\t\t\t\t: config.backend,\n\t\tbaseUrl: urls.db ?? MISSING_DB_SENTINEL,\n\t\tbehavior: {\n\t\t\tdebugAst: diagnostics.debugAst,\n\t\t\tfindManyAst: diagnostics.findManyAst,\n\t\t\tfindManyAstRelationSchema: Boolean(config.db?.pgUri),\n\t\t\tretryReads: config.retryReads,\n\t\t\ttraceQueries: diagnostics.traceQueries,\n\t\t},\n\t\tchat: athenaChatConfig(config.chat),\n\t\tchatUrl: urls.chat,\n\t\tchatWsUrl: urls.chatWs,\n\t\tclient: core.client,\n\t\tgatewayTransport: config.gatewayTransport,\n\t\theaders: config.headers,\n\t\tjdbcUrl: config.db?.jdbcUrl,\n\t\tmodels: config.models as ResolvedModels<TModels>,\n\t\tpgUri: config.db?.pgUri,\n\t\tstorage: {\n\t\t\t...storageOptions,\n\t\t\t...(directUpload ? { directUpload } : {}),\n\t\t},\n\t\tstorageUrl: urls.storage,\n\t};\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n\tif (!urls[service]) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_SERVICE_NOT_CONFIGURED\",\n\t\t\t`Athena ${service} is not configured.`,\n\t\t\tservice,\n\t\t);\n\t}\n}\n\nfunction createUnavailableNamespace(\n\tservice: AthenaService,\n\turls: ResolvedServiceUrls,\n\tpath: readonly PropertyKey[] = [],\n): unknown {\n\treturn new Proxy(() => undefined, {\n\t\tapply() {\n\t\t\tserviceGuard(urls, service);\n\t\t\tthrow new TypeError(\n\t\t\t\t`Athena service property ${path.map(String).join(\".\")} is not callable.`,\n\t\t\t);\n\t\t},\n\t\tget(_target, property) {\n\t\t\treturn createUnavailableNamespace(service, urls, [...path, property]);\n\t\t},\n\t});\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function isD1Binding(value: unknown): value is D1DatabaseLike {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as D1DatabaseLike).prepare === \"function\",\n\t);\n}\n\nfunction isR2Binding(value: unknown): value is R2BucketLike {\n\treturn Boolean(\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as R2BucketLike).put === \"function\" &&\n\t\ttypeof (value as R2BucketLike).get === \"function\",\n\t);\n}\n\n/**\n * Fold top-level Worker aliases into nested service config, then resolve\n * edge vs gateway so every path materializes through {@link createClient}.\n */\nfunction foldBindingAliases<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1 ?? config.d1;\n\tconst r2 = config.storage?.r2 ?? config.r2;\n\tconst sessionMode = config.db?.sessionMode ?? config.sessionMode;\n\tconst prefix = config.storage?.prefix ?? config.storagePrefix;\n\tconst aliasPgUri = normalizeOptional(config.databaseUrl);\n\tconst nestedPgUri = normalizeOptional(config.db?.pgUri);\n\tconst envPgUri = config.env\n\t\t? normalizeOptional(config.env.DATABASE_URL)\n\t\t: undefined;\n\tif (aliasPgUri && nestedPgUri && aliasPgUri !== nestedPgUri) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_DATABASE_URL_CONFLICT\",\n\t\t\t\"databaseUrl and db.pgUri must be the same connection string when both are set.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\tconst pgUri = nestedPgUri ?? aliasPgUri ?? envPgUri;\n\n\tlet next: AthenaClientConfig<TModels> = { ...config };\n\tif (d1 !== undefined || sessionMode !== undefined || pgUri !== undefined) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tdb: {\n\t\t\t\t...next.db,\n\t\t\t\t...(d1 === undefined ? {} : { d1 }),\n\t\t\t\t...(sessionMode === undefined ? {} : { sessionMode }),\n\t\t\t\t...(pgUri === undefined ? {} : { pgUri }),\n\t\t\t},\n\t\t};\n\t}\n\tif (r2 !== undefined || prefix !== undefined) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tstorage: {\n\t\t\t\t...next.storage,\n\t\t\t\t...(r2 === undefined ? {} : { r2 }),\n\t\t\t\t...(prefix === undefined ? {} : { prefix }),\n\t\t\t},\n\t\t};\n\t}\n\t// Strip top-level aliases so they are not mistaken for service modules later.\n\tconst {\n\t\td1: _d1,\n\t\tr2: _r2,\n\t\tstoragePrefix: _storagePrefix,\n\t\tsessionMode: _sessionMode,\n\t\tdatabaseUrl: _databaseUrl,\n\t\t...rest\n\t} = next;\n\tvoid _d1;\n\tvoid _r2;\n\tvoid _storagePrefix;\n\tvoid _sessionMode;\n\tvoid _databaseUrl;\n\treturn rest;\n}\n\n/**\n * When execution resolves to gateway, drop D1 so HTTP db routing wins.\n * R2 may still attach for hybrid local objects + remote gateway DB.\n */\nfunction applyExecutionMode<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1;\n\tconst hasD1 = isD1Binding(d1);\n\tconst hasUrl = Boolean(\n\t\tnormalizeOptional(config.url) ??\n\t\tnormalizeOptional(config.db?.url) ??\n\t\t(config.env\n\t\t\t? (normalizeOptional(config.env.ATHENA_URL) ??\n\t\t\t\tnormalizeOptional(config.env.NEXT_PUBLIC_ATHENA_URL))\n\t\t\t: undefined),\n\t);\n\n\t// Only resolve when there is something to choose between (or explicit mode).\n\t// Use != null so omitted mode/prefer (undefined) are not treated as hints —\n\t// `undefined !== null` is true and previously forced every createClient\n\t// without D1 through resolveAthenaExecutionMode, breaking storage-only clients.\n\tconst hasModeHint =\n\t\tconfig.mode != null ||\n\t\tconfig.prefer != null ||\n\t\tBoolean(config.env?.ATHENA_EXECUTION_MODE) ||\n\t\tBoolean(config.env?.ATHENA_EXECUTION_PREFER);\n\n\tif (!(hasD1 || hasModeHint)) {\n\t\treturn config;\n\t}\n\n\t// Pure edge (only d1, no url) or pure gateway without mode hints: keep default behavior.\n\tif (hasD1 && !hasUrl && !hasModeHint) {\n\t\treturn config;\n\t}\n\n\tlet resolved: AthenaExecutionMode | \"edge\" | \"gateway\";\n\ttry {\n\t\tresolved = resolveAthenaExecutionMode({\n\t\t\td1: hasD1 ? d1 : null,\n\t\t\tenv: config.env,\n\t\t\tmode: config.mode,\n\t\t\tprefer: config.prefer,\n\t\t\turl: config.url ?? config.db?.url,\n\t\t});\n\t} catch (error) {\n\t\t// No mode/prefer and incomplete config: fall through to default materialize.\n\t\tif (!hasModeHint) {\n\t\t\treturn config;\n\t\t}\n\t\t// pgUri-only + auto: D1/HTTP resolver cannot see PostgreSQL yet.\n\t\t// Defer to materializePostgresBinding (gateway mode stays header-only).\n\t\tconst pgUri = normalizeOptional(config.db?.pgUri);\n\t\tif (pgUri && !hasD1) {\n\t\t\tconst modeRaw =\n\t\t\t\tnormalizeOptional(\n\t\t\t\t\ttypeof config.mode === \"string\" ? config.mode : undefined,\n\t\t\t\t) ?? normalizeOptional(config.env?.ATHENA_EXECUTION_MODE);\n\t\t\tconst modeKey = modeRaw?.trim().toLowerCase();\n\t\t\tif (!modeKey || modeKey === \"auto\") {\n\t\t\t\treturn config;\n\t\t\t}\n\t\t}\n\t\tthrow error;\n\t}\n\n\tif (resolved === \"gateway\" && hasD1) {\n\t\tconst { d1: _drop, sessionMode: _sm, ...dbRest } = config.db ?? {};\n\t\tvoid _drop;\n\t\tvoid _sm;\n\t\treturn {\n\t\t\t...config,\n\t\t\tdb: Object.keys(dbRest).length > 0 ? dbRest : undefined,\n\t\t\tgatewayTransport: undefined,\n\t\t};\n\t}\n\n\treturn config;\n}\n\n/**\n * Unified remote root (top-level `url` or env ATHENA_URL / NEXT_PUBLIC_ATHENA_URL).\n * Used for billing hybrid routing and default service derivation.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function resolveUnifiedRemoteRoot<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): string | undefined {\n\treturn (\n\t\tnormalizeOptional(config.url) ??\n\t\treadFirstEnv(config.env, ATHENA_ENV_URL_KEYS)\n\t);\n}\n\n/**\n * Remote Auth/storage/chat/billing URLs need a publishable key even when a\n * local gatewayTransport already satisfies DB construction.\n * Does not treat top-level `url` / discovery same-origin as a key requirement.\n */\nfunction hasExplicitRemoteHttpApiKeyNeed<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\tconst authLocal = isLocalAthenaAuthConfig(config.auth);\n\tconst authObject = athenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\t(!authDisabled &&\n\t\t\t!authLocal &&\n\t\t\t(normalizeOptional(authObject?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS))) ||\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tnormalizeOptional(athenaChatConfig(config.chat)?.url) ||\n\t\treadFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n\t\tnormalizeOptional(config.billing?.url),\n\t);\n}\n\nfunction isEdgeLocalSentinelUrl(url: string | undefined): boolean {\n\tif (!url) {\n\t\treturn false;\n\t}\n\treturn (\n\t\turl === CLOUDFLARE_EDGE_BASE_URL ||\n\t\turl.startsWith(\"https://athena.local/\") ||\n\t\turl.startsWith(\"http://athena.local/\")\n\t);\n}\n\n/**\n * True when a non-edge DB HTTP gateway is configured (nested `db.url` or env DB/gateway URL).\n * Important for hybrid `db: { d1, url: remoteGateway }` where top-level `url` may be unset.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteDbGatewayUrl<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst dbUrl =\n\t\tnormalizeOptional(config.db?.url) ??\n\t\treadFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS);\n\treturn Boolean(dbUrl && !isEdgeLocalSentinelUrl(dbUrl));\n}\n\n/**\n * True when any remote HTTP service is configured (explicit or via env).\n * Used to decide whether the edge-local API-key sentinel is safe to inject.\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteHttpServices<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tconst authObject = athenaAuthConfig(config.auth);\n\tconst authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\tresolveUnifiedRemoteRoot(config) ||\n\t\thasRemoteDbGatewayUrl(config) ||\n\t\t(!authDisabled &&\n\t\t\t(normalizeOptional(authObject?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS))) ||\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tnormalizeOptional(athenaChatConfig(config.chat)?.url) ||\n\t\treadFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n\t\tnormalizeOptional(config.billing?.url),\n\t);\n}\n\n/**\n * True when HTTP object storage is configured (explicit `storage.url`, env, or\n * a unified remote root that resolveCore can turn into `/storage`).\n */\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteHttpStorage<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\treturn Boolean(\n\t\tnormalizeOptional(config.storage?.url) ||\n\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n\t\tresolveUnifiedRemoteRoot(config),\n\t);\n}\n\n/** @internal Exported for the Node-only `./v3-client.ts` wrapper. */\nexport function hasRemoteAuthService<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n\tif (\n\t\tisDisabledAthenaAuthConfig(config.auth) ||\n\t\tisLocalAthenaAuthConfig(config.auth)\n\t) {\n\t\treturn false;\n\t}\n\tconst authObject = athenaAuthConfig(config.auth);\n\treturn Boolean(\n\t\tnormalizeOptional(authObject?.url) ||\n\t\treadFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n\t\tresolveUnifiedRemoteRoot(config),\n\t);\n}\n\n/**\n * Wire Cloudflare D1/R2 bindings into the shared `createClient` config spine.\n * Drop-in: `createClient({ db: { d1 }, storage: { r2 } })` uses the same fluent\n * DB/storage call sites as gateway HTTP mode.\n */\nfunction materializeEdgeBindings<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\tconst d1 = config.db?.d1;\n\tconst r2 = config.storage?.r2;\n\tconst hasD1 = isD1Binding(d1);\n\tconst hasR2 = isR2Binding(r2);\n\tif (!(hasD1 || hasR2)) {\n\t\treturn config;\n\t}\n\n\tif (hasD1 && d1 && typeof d1.prepare !== \"function\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_NO_SERVICE_CONFIGURED\",\n\t\t\t\"db.d1 must be a D1 binding with prepare().\",\n\t\t\t\"db\",\n\t\t);\n\t}\n\n\tconst remoteRoot = resolveUnifiedRemoteRoot(config);\n\tconst remoteServices = hasRemoteHttpServices(config);\n\tconst remoteStorage = hasRemoteHttpStorage(config);\n\tconst remoteAuth = hasRemoteAuthService(config);\n\tconst next: AthenaClientConfig<TModels> = { ...config };\n\n\tif (hasD1 && d1) {\n\t\tif (!config.gatewayTransport) {\n\t\t\tnext.gatewayTransport = createCloudflareD1GatewayTransport({\n\t\t\t\td1,\n\t\t\t\tdefaultSessionMode: config.db?.sessionMode,\n\t\t\t\trelationCatalog: catalogFromModels(config.models),\n\t\t\t});\n\t\t}\n\t\t// Local D1 sentinel — not a real HTTP endpoint. Hybrid services must not inherit this for billing.\n\t\t// Do not plant the sentinel when env (or explicit) remote DB gateway URLs exist:\n\t\t// resolveCore prefers explicit `db.url` over ATHENA_DB_URL / ATHENA_GATEWAY_URL, so a\n\t\t// sentinel would shadow those env gateways after remote key selection already succeeded.\n\t\tconst explicitDbUrl = normalizeOptional(config.db?.url);\n\t\tconst remoteDbGateway = hasRemoteDbGatewayUrl(config);\n\t\tnext.db = {\n\t\t\t...config.db,\n\t\t\td1,\n\t\t\turl:\n\t\t\t\texplicitDbUrl ??\n\t\t\t\t(remoteDbGateway ? undefined : CLOUDFLARE_EDGE_BASE_URL),\n\t\t};\n\t\t// Pure edge-local needs a placeholder key for resolveCore. Hybrid clients\n\t\t// (top-level url, env ATHENA_URL, or any explicit/env remote service URL)\n\t\t// must not pre-fill the sentinel — leave key unset so resolveCore can use\n\t\t// ATHENA_API_KEY / ATHENA_GATEWAY_API_KEY (etc.) from the env object.\n\t\tconst explicitKey = normalizeOptional(config.key);\n\t\tif (explicitKey) {\n\t\t\tnext.key = explicitKey;\n\t\t} else if (remoteServices) {\n\t\t\t// Hybrid without top-level key: strip accidental empty key so env keys apply.\n\t\t\tnext.key = undefined;\n\t\t} else {\n\t\t\tnext.key = CLOUDFLARE_EDGE_API_KEY;\n\t\t}\n\t\tif (remoteRoot) {\n\t\t\tnext.billing = {\n\t\t\t\t...(config.billing ?? {}),\n\t\t\t\turl: normalizeOptional(config.billing?.url) ?? remoteRoot,\n\t\t\t};\n\t\t}\n\t\tif (!config.capabilities) {\n\t\t\tnext.capabilities = createCloudflareEdgeCapabilities({\n\t\t\t\tauthRemote: remoteAuth,\n\t\t\t\tfindManyAst: true,\n\t\t\t\tflatCrud: true,\n\t\t\t\tquery: true,\n\t\t\t\trelations: true,\n\t\t\t\trpc: false,\n\t\t\t\thasR2,\n\t\t\t\t// Explicit storage.url / env storage URL / unified remote root all count.\n\t\t\t\thasRemoteStorage: remoteStorage,\n\t\t\t});\n\t\t}\n\t} else if (hasR2 && r2) {\n\t\t// R2 without D1: storage-only edge, or gateway HTTP DB + local R2 objects.\n\t\t// ADR 0016: presence of storage.r2 alone is sufficient to configure object storage.\n\t\tif (\n\t\t\t!(\n\t\t\t\tremoteRoot ||\n\t\t\t\tnormalizeOptional(config.db?.url) ||\n\t\t\t\tnormalizeOptional(config.storage?.url) ||\n\t\t\t\treadFirstEnv(config.env, ENV_STORAGE_URL_KEYS)\n\t\t\t)\n\t\t) {\n\t\t\tnext.storage = {\n\t\t\t\t...config.storage,\n\t\t\t\tr2,\n\t\t\t\t// Local sentinel so resolveCore accepts a storage-only binding client.\n\t\t\t\turl: CLOUDFLARE_EDGE_BASE_URL,\n\t\t\t};\n\t\t\tif (!remoteServices) {\n\t\t\t\tnext.key = normalizeOptional(config.key) ?? CLOUDFLARE_EDGE_API_KEY;\n\t\t\t} else if (normalizeOptional(config.key)) {\n\t\t\t\tnext.key = normalizeOptional(config.key);\n\t\t\t} else {\n\t\t\t\tnext.key = undefined;\n\t\t\t}\n\t\t}\n\t\tif (!config.capabilities) {\n\t\t\tif (\n\t\t\t\tremoteRoot ||\n\t\t\t\tnormalizeOptional(config.db?.url) ||\n\t\t\t\treadFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS)\n\t\t\t) {\n\t\t\t\t// Gateway (or other remote) DB + local R2: keep gateway mode.\n\t\t\t\t// Catalogs/backups only when remote HTTP storage is also wired.\n\t\t\t\tconst base = createGatewayCapabilities({\n\t\t\t\t\tauthRemote: remoteAuth,\n\t\t\t\t\tstorageBackups: remoteStorage,\n\t\t\t\t\tstorageCatalogs: remoteStorage,\n\t\t\t\t\tstorageConfigured: remoteStorage || hasR2,\n\t\t\t\t});\n\t\t\t\tnext.capabilities = {\n\t\t\t\t\t...base,\n\t\t\t\t\tstorage: {\n\t\t\t\t\t\t...base.storage,\n\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\tobjects: true,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// Storage-only edge client — no DB binding or remote root.\n\t\t\t\t// Explicit storage.url / env still enables HTTP catalogs/backups alongside R2.\n\t\t\t\tnext.capabilities = {\n\t\t\t\t\tauth: {\n\t\t\t\t\t\tremote: remoteAuth,\n\t\t\t\t\t},\n\t\t\t\t\tdb: {\n\t\t\t\t\t\tengine: \"unknown\",\n\t\t\t\t\t\tlayers: {\n\t\t\t\t\t\t\tfindManyAst: false,\n\t\t\t\t\t\t\tflatCrud: false,\n\t\t\t\t\t\t\tquery: false,\n\t\t\t\t\t\t\trelations: false,\n\t\t\t\t\t\t\trpc: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlocal: false,\n\t\t\t\t\t\ttransactions: {\n\t\t\t\t\t\t\tatomic: false,\n\t\t\t\t\t\t\tbackend: \"unsupported\",\n\t\t\t\t\t\t\tdeferrable: false,\n\t\t\t\t\t\t\tinteractive: false,\n\t\t\t\t\t\t\tisolationLevels: [],\n\t\t\t\t\t\t\treadOnly: false,\n\t\t\t\t\t\t\tsavepoints: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmode: \"cloudflare-edge\",\n\t\t\t\t\tstorage: {\n\t\t\t\t\t\tbackups: remoteStorage,\n\t\t\t\t\t\tcatalogs: remoteStorage,\n\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\tobjects: true,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next;\n}\n\n/**\n * Universal createClient normalization pipeline: aliases → mode → edge.\n *\n * Browser-safe: direct PostgreSQL (`db.pgUri`) materialization is applied only\n * by the Node/server entry (`./v3-client.ts`) on top of this pipeline.\n */\nexport function normalizeUniversalCreateClientConfig<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n\treturn materializeEdgeBindings(\n\t\tapplyExecutionMode(foldBindingAliases(config)),\n\t);\n}\n\n/**\n * Fail fast when a non-Node runtime (browser / RN) is handed `db.pgUri`.\n *\n * Direct PostgreSQL execution requires the Node-only `pg` driver; silently\n * ignoring `pgUri` would both break queries and risk shipping a database URI\n * (a secret) inside a client bundle. The URI is never included in the error.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertDirectPostgresRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (\n\t\tnormalizeOptional(config.db?.pgUri) ||\n\t\tnormalizeOptional(config.databaseUrl) ||\n\t\tnormalizeOptional(config.env?.DATABASE_URL) ||\n\t\tconfig.db?.pool\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\",\n\t\t\t\"databaseUrl / db.pgUri / db.pool direct PostgreSQL execution is not available in browser runtimes. Use an Athena HTTP gateway from the browser, or construct this client in a Node.js/server runtime.\",\n\t\t\t\"db\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a browser runtime is handed `auth.mode: \"local\"`.\n * The local TypeScript auth runtime is Node-only and must never ship\n * DATABASE_URL processing into a client bundle.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertLocalAuthRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isLocalAthenaAuthConfig(config.auth)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_AUTH_LOCAL_NODE_REQUIRED\",\n\t\t\t'auth.mode \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use auth.mode \"remote\".',\n\t\t\t\"auth\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a non-Node runtime is handed `storage.provider: \"local\"`.\n * The filesystem adapter is Node-only and must never enter browser/RN graphs.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertLocalStorageRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isLocalStorageConfig(config.storage)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_STORAGE_LOCAL_NODE_REQUIRED\",\n\t\t\t'storage.provider \"local\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n\t\t\t\"storage\",\n\t\t);\n\t}\n}\n\n/**\n * Fail fast when a non-Node runtime is handed `storage.provider: \"s3\"`.\n * Direct S3 execution is Node-only; the injected client must not enter browser graphs.\n *\n * @internal Used by browser/React Native façades; not public API.\n */\nexport function assertS3StorageRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tif (isS3StorageConfig(config.storage)) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_STORAGE_S3_NODE_REQUIRED\",\n\t\t\t'storage.provider \"s3\" requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module.',\n\t\t\t\"storage\",\n\t\t);\n\t}\n}\n\nexport function assertLocalChatRequiresNodeRuntime<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n\tconst chat = config.chat;\n\tconst wantsLocal =\n\t\tchat === true ||\n\t\t(typeof chat === \"object\" && chat !== null && chat.mode === \"local\");\n\tif (wantsLocal || config.chatRuntime) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_CHAT_LOCAL_NODE_REQUIRED\",\n\t\t\t'Local Chat requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use chat.mode \"remote\".',\n\t\t\t\"chat\",\n\t\t);\n\t}\n}\n\nconst clientQueryCaches = new WeakMap<object, AthenaQueryClient>();\ntype NotificationStoreHolder = {\n\teventStore: AthenaNotificationEventStore;\n\tpreferenceStore: NotificationPreferenceStore;\n};\n\nconst clientNotificationStores = new WeakMap<object, NotificationStoreHolder>();\nconst notificationStoreHoldersByClient = new WeakMap<\n\tobject,\n\tNotificationStoreHolder\n>();\n\nfunction getOrCreateNotificationStores(core: object): NotificationStoreHolder {\n\tconst existing = clientNotificationStores.get(core);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst holder: NotificationStoreHolder = {\n\t\teventStore: createMemoryNotificationEventStore(),\n\t\tpreferenceStore: createMemoryNotificationPreferenceStore(),\n\t};\n\tclientNotificationStores.set(core, holder);\n\treturn holder;\n}\n\nfunction authSessionRecord(client: { auth?: unknown }): {\n\tsession?: { id?: unknown; token?: unknown; userId?: unknown };\n\tuser?: { id?: unknown };\n} | null {\n\ttry {\n\t\tconst sessionApi = (\n\t\t\tclient.auth as { session?: { get?: () => unknown } } | undefined\n\t\t)?.session;\n\t\t// Root Auth UI clients have no viewContext.userId; read client.auth.session.\n\t\tconst payload = sessionApi?.get?.();\n\t\tif (!payload || typeof payload !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\treturn payload as {\n\t\t\tsession?: { id?: unknown; token?: unknown; userId?: unknown };\n\t\t\tuser?: { id?: unknown };\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction userIdFromAuthSession(client: { auth?: unknown }): string | null {\n\tconst record = authSessionRecord(client);\n\tif (!record) {\n\t\treturn null;\n\t}\n\tconst userId =\n\t\ttypeof record.user?.id === \"string\" ? record.user.id.trim() : \"\";\n\tif (userId) {\n\t\treturn userId;\n\t}\n\tconst sessionUserId =\n\t\ttypeof record.session?.userId === \"string\"\n\t\t\t? record.session.userId.trim()\n\t\t\t: \"\";\n\treturn sessionUserId || null;\n}\n\nfunction requestContextFromAuthSession(client: {\n\tauth?: unknown;\n}): AthenaRequestContext | undefined {\n\tconst record = authSessionRecord(client);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst userId = userIdFromAuthSession(client);\n\tconst token =\n\t\ttypeof record.session?.token === \"string\"\n\t\t\t? record.session.token.trim()\n\t\t\t: \"\";\n\tconst sessionId =\n\t\ttypeof record.session?.id === \"string\" ? record.session.id.trim() : \"\";\n\tconst sessionToken = token || sessionId;\n\tif (!userId && !sessionToken) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tsessionToken: sessionToken || undefined,\n\t\tuserId: userId || undefined,\n\t};\n}\n\nexport function replaceClientNotificationPreferenceStore(\n\tclient: object,\n\tstore: NotificationPreferenceStore,\n): void {\n\tconst holder = notificationStoreHoldersByClient.get(client);\n\tif (holder) {\n\t\tholder.preferenceStore = store;\n\t}\n}\n\nfunction getOrCreateClientQueryCache(core: {\n\tconfig: AthenaClientConfig<AthenaClientModelsInput | undefined>;\n}): AthenaQueryClient {\n\tconst existing = clientQueryCaches.get(core);\n\tif (existing) {\n\t\treturn existing;\n\t}\n\tconst created = createAthenaQueryClient({\n\t\tcache: {\n\t\t\tgcTime: core.config.query?.gcTime,\n\t\t\tmode: core.config.query?.cache ?? \"memory\",\n\t\t\tstaleTime: core.config.query?.staleTime,\n\t\t},\n\t});\n\tclientQueryCaches.set(core, created);\n\treturn created;\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n\tcore: AthenaClientCore<TModels>,\n\tviewContext?: AthenaRequestContext,\n): AthenaClient<TModels> {\n\t// Bypass generic expansion during dts emit (TS2589).\n\tconst createView = createInternalClientView as unknown as (\n\t\tinternalCore: AthenaClientCore<TModels>[\"internalCore\"],\n\t\tresolveContext: () => ReturnType<typeof resolveConfiguredContext<TModels>>,\n\t\tcacheContext?: {\n\t\t\taccessScope?: string;\n\t\t\torganizationId?: string;\n\t\t\tpolicyRevision?: string;\n\t\t\tuserId?: string;\n\t\t},\n\t) => InternalAthenaClient<ResolvedModels<TModels>>;\n\tconst organizationId = viewContext?.organizationId?.trim();\n\tconst userId = viewContext?.userId?.trim();\n\tconst accessScope = viewContext?.accessScope?.trim();\n\tconst policyRevision = viewContext?.policyRevision?.trim();\n\tconst resolved = createView(\n\t\tcore.internalCore,\n\t\t() => resolveConfiguredContext(core, viewContext),\n\t\torganizationId || userId || accessScope || policyRevision\n\t\t\t? {\n\t\t\t\taccessScope: accessScope || undefined,\n\t\t\t\torganizationId: organizationId || undefined,\n\t\t\t\tpolicyRevision: policyRevision || undefined,\n\t\t\t\tuserId: userId || undefined,\n\t\t\t}\n\t\t\t: undefined,\n\t);\n\tconst requireDb = (): void => serviceGuard(core.urls, \"db\");\n\n\tconst {\n\t\tproviders: _billingProviders,\n\t\turl: _billingUrl,\n\t\ttestMode: _billingTestMode,\n\t\tmode: _billingMode,\n\t\t...billingOptions\n\t} = core.config.billing ?? {};\n\tvoid _billingProviders;\n\tvoid _billingUrl;\n\tvoid _billingTestMode;\n\tvoid _billingMode;\n\tconst explicitBillingUrl = normalizeOptional(_billingUrl);\n\tconst billingRuntimeEnv = detectAthenaRuntimeEnvironment();\n\tconst attachEmbeddedHttpBilling =\n\t\t(billingRuntimeEnv === \"browser\" || billingRuntimeEnv === \"react-native\") &&\n\t\t!explicitBillingUrl &&\n\t\tcore.config.billing?.mode !== \"remote\";\n\tconst hasLocalBillingProviders = Boolean(\n\t\tcore.config.billing?.providers?.mollie ||\n\t\tcore.config.billing?.providers?.stripe,\n\t);\n\tconst billingModule: AthenaBillingModule | unknown = attachEmbeddedHttpBilling\n\t\t? (createBrowserBillingTransport({\n\t\t\t...(core.config.billing?.endpoint\n\t\t\t\t? { endpoints: { billing: core.config.billing.endpoint } }\n\t\t\t\t: {}),\n\t\t\theaders: core.config.headers,\n\t\t\t...(core.config.resolveRuntimeTopology\n\t\t\t\t? { resolveTopology: core.config.resolveRuntimeTopology }\n\t\t\t\t: {}),\n\t\t}) as unknown as AthenaBillingModule)\n\t\t: hasLocalBillingProviders\n\t\t\t? ({\n\t\t\t\tcustomers: {},\n\t\t\t\tgetCapabilities: async () => {\n\t\t\t\t\tthrow new AthenaConfigurationError(\n\t\t\t\t\t\t\"ATHENA_SERVICE_NOT_CONFIGURED\",\n\t\t\t\t\t\t\"Athena billing local runtime is not attached.\",\n\t\t\t\t\t\t\"billing\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tinvoices: {},\n\t\t\t\tpaymentLinks: {},\n\t\t\t\tpayments: {},\n\t\t\t\trefunds: {},\n\t\t\t\tsubscriptions: {},\n\t\t\t\twebhooks: {},\n\t\t\t\tcatalog: { prices: {}, products: {} },\n\t\t\t\tcheckout: {},\n\t\t\t\tself: {},\n\t\t\t\tadmin: {},\n\t\t\t} as unknown as AthenaBillingModule)\n\t\t\t: core.urls.billing\n\t\t\t\t? createBillingModule({\n\t\t\t\t\tapiKey: core.key,\n\t\t\t\t\tbaseUrl: core.urls.billing,\n\t\t\t\t\tclient: core.client,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...(core.config.headers ?? {}),\n\t\t\t\t\t\t...(billingOptions.headers ?? {}),\n\t\t\t\t\t},\n\t\t\t\t\t...billingOptions,\n\t\t\t\t})\n\t\t\t\t: createUnavailableNamespace(\"billing\", core.urls);\n\n\tconst r2 = core.config.storage?.r2;\n\tconst hasR2Binding = isR2Binding(r2);\n\t// Edge-local sentinel URLs are not real HTTP storage ports.\n\tconst hasHttpStorage = Boolean(\n\t\tcore.urls.storage && !isEdgeLocalSentinelUrl(core.urls.storage),\n\t);\n\tconst localObjectStore = getLocalObjectStore<AthenaStorageModule>(\n\t\tcore.config.storage,\n\t);\n\tconst runtimeEnv = detectAthenaRuntimeEnvironment();\n\tconst hasS3Storage = isS3StorageConfig(core.config.storage);\n\tconst attachEmbeddedHttpStorage =\n\t\t(runtimeEnv === \"browser\" || runtimeEnv === \"react-native\") &&\n\t\t!localObjectStore &&\n\t\t!hasR2Binding &&\n\t\t!hasS3Storage &&\n\t\t!normalizeOptional(core.config.storage?.url);\n\n\tconst capabilities =\n\t\tcore.config.capabilities ??\n\t\tcreateGatewayCapabilities({\n\t\t\tauthRemote: Boolean(core.urls.auth),\n\t\t\t// Match callable surface: catalogs/backups need real remote HTTP storage.\n\t\t\tstorageBackups: hasHttpStorage,\n\t\t\tstorageCatalogs: hasHttpStorage,\n\t\t\tstorageConfigured:\n\t\t\t\thasHttpStorage ||\n\t\t\t\thasR2Binding ||\n\t\t\t\tBoolean(localObjectStore) ||\n\t\t\t\thasS3Storage ||\n\t\t\t\tattachEmbeddedHttpStorage,\n\t\t});\n\tif (localObjectStore && !core.config.capabilities) {\n\t\tcapabilities.storage.local = true;\n\t}\n\tif (\n\t\t(attachEmbeddedHttpStorage || hasS3Storage) &&\n\t\t!core.config.capabilities\n\t) {\n\t\tcapabilities.storage.objects = true;\n\t}\n\n\t// Hybrid: preserve HTTP storage.* (file/catalog/multipart/backup) and attach L3a R2.\n\t// R2-only: L3a helpers + clear unsupported for managed ports.\n\t// Local Node ObjectStore: catalog-optional file.* (ADR 0027).\n\tconst storageModule:\n\t\t| AthenaStorageModule\n\t\t| CloudflareR2StorageModule\n\t\t| unknown = localObjectStore\n\t\t\t? localObjectStore\n\t\t\t: hasR2Binding && hasHttpStorage\n\t\t\t\t? composeHttpAndR2Storage(resolved.storage as AthenaStorageModule, {\n\t\t\t\t\tprefix: core.config.storage?.prefix ?? undefined,\n\t\t\t\t\tr2,\n\t\t\t\t})\n\t\t\t\t: hasR2Binding\n\t\t\t\t\t? createCloudflareR2StorageModule({\n\t\t\t\t\t\tprefix: core.config.storage?.prefix ?? undefined,\n\t\t\t\t\t\tr2,\n\t\t\t\t\t})\n\t\t\t\t\t: hasS3Storage || attachEmbeddedHttpStorage\n\t\t\t\t\t\t? createEmbeddedStorageFacade()\n\t\t\t\t\t\t: core.urls.storage\n\t\t\t\t\t\t\t? resolved.storage\n\t\t\t\t\t\t\t: createUnavailableNamespace(\"storage\", core.urls);\n\n\tconst storageProvider = getStorageProvider(core.config.storage);\n\tconst embeddedHttpProvider = attachEmbeddedHttpStorage\n\t\t? createBrowserStorageTransport({\n\t\t\t...(core.config.storage?.endpoint\n\t\t\t\t? { endpoints: { storage: core.config.storage.endpoint } }\n\t\t\t\t: {}),\n\t\t\theaders: core.config.headers,\n\t\t\t...(core.config.resolveRuntimeTopology\n\t\t\t\t? { resolveTopology: core.config.resolveRuntimeTopology }\n\t\t\t\t: {}),\n\t\t})\n\t\t: undefined;\n\tconst storageRuntime =\n\t\tgetStorageRuntime(core.config.storage) ??\n\t\t(storageProvider\n\t\t\t? createStorageRuntime({\n\t\t\t\tlifecycle: core.config.lifecycle?.storage,\n\t\t\t\tprovider: storageProvider,\n\t\t\t})\n\t\t\t: undefined) ??\n\t\t(embeddedHttpProvider\n\t\t\t? createStorageRuntime({\n\t\t\t\tlifecycle: core.config.lifecycle?.storage,\n\t\t\t\tprovider: embeddedHttpProvider,\n\t\t\t})\n\t\t\t: undefined);\n\tconst boundStorage =\n\t\tstorageRuntime &&\n\t\t\t(localObjectStore || attachEmbeddedHttpStorage || hasS3Storage)\n\t\t\t? wrapStorageModuleWithRuntime(storageModule as object, storageRuntime)\n\t\t\t: storageModule;\n\tif (storageRuntime && boundStorage && typeof boundStorage === \"object\") {\n\t\tadvertiseSafeStorageCapabilities(\n\t\t\tboundStorage as object,\n\t\t\tcore.config.storage,\n\t\t);\n\t}\n\n\tconst useRemoteNotifications =\n\t\t!isLocalAthenaAuthConfig(core.config.auth) &&\n\t\t!core.config.db?.pgUri &&\n\t\t!core.config.gatewayTransport &&\n\t\tBoolean(core.urls.db || core.urls.auth);\n\tconst notificationStores = getOrCreateNotificationStores(core);\n\n\tconst queryCache = getOrCreateClientQueryCache(core);\n\tregisterTransactionCacheObserver(core.internalCore.gatewayTransport, {\n\t\treconcileCommitted(operations, results) {\n\t\t\tfor (const [index, operation] of operations.entries()) {\n\t\t\t\tconst result = results[index];\n\t\t\t\tif (!result || result.error) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tqueryCache.reconcileExecutable(operation.descriptor, result);\n\t\t\t}\n\t\t},\n\t});\n\n\tconst client: AthenaClient<TModels> = {\n\t\tadmin: {\n\t\t\tquery: ((...args: unknown[]) => {\n\t\t\t\trequireDb();\n\t\t\t\treturn Reflect.apply(resolved.admin.query, resolved.admin, args);\n\t\t\t}) as AthenaClient<TModels>[\"admin\"][\"query\"],\n\t\t},\n\t\tauth: (core.urls.auth\n\t\t\t? resolved.auth\n\t\t\t: createUnavailableNamespace(\"auth\", core.urls)) as AthenaAuthBindings,\n\t\tbilling: billingModule as AthenaBillingModule,\n\t\tcache: queryCache,\n\t\tcapabilities,\n\t\texplain: (executable) => explainAthenaQuery(executable),\n\t\tmodels: core.config.models as TModels,\n\t\tchat: (core.config.chatRuntime\n\t\t\t? core.config.chatRuntime\n\t\t\t: core.urls.chat\n\t\t\t\t? resolved.chat\n\t\t\t\t: createUnavailableNamespace(\"chat\", core.urls)) as AthenaChatModule,\n\t\tdb: (core.urls.db\n\t\t\t? resolved.db\n\t\t\t: createUnavailableNamespace(\n\t\t\t\t\"db\",\n\t\t\t\tcore.urls,\n\t\t\t)) as AthenaClient<TModels>[\"db\"],\n\t\temail: createEmailModule(core.config.email),\n\t\tnotifications: createNotificationsModule({\n\t\t\tcatalog: core.config.notifications?.catalog,\n\t\t\teventStore: notificationStores.eventStore,\n\t\t\tgetUserId: () => {\n\t\t\t\tconst scoped = viewContext?.userId?.trim();\n\t\t\t\tif (scoped) {\n\t\t\t\t\treturn scoped;\n\t\t\t\t}\n\t\t\t\treturn userIdFromAuthSession(client);\n\t\t\t},\n\t\t\tpreferenceStore: notificationStores.preferenceStore,\n\t\t\tremoteRequest: useRemoteNotifications\n\t\t\t\t? async (input) => {\n\t\t\t\t\tconst forwarded = mergeAthenaRequestContexts(\n\t\t\t\t\t\trequestContextFromAuthSession(client),\n\t\t\t\t\t\tviewContext,\n\t\t\t\t\t);\n\t\t\t\t\tconst requester =\n\t\t\t\t\t\tforwarded && !isEmptyAthenaRequestContext(forwarded)\n\t\t\t\t\t\t\t? client.withContext(forwarded)\n\t\t\t\t\t\t\t: client;\n\t\t\t\t\tconst result = await requester.request({\n\t\t\t\t\t\tbody:\n\t\t\t\t\t\t\tinput.method === \"GET\" || input.method === \"DELETE\"\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: input.body,\n\t\t\t\t\t\tcredentials: athenaAuthConfig(core.config.auth)?.credentials,\n\t\t\t\t\t\tmethod: input.method,\n\t\t\t\t\t\tpath: input.path,\n\t\t\t\t\t\tquery: input.query,\n\t\t\t\t\t\tservice: core.urls.db ? \"db\" : \"auth\",\n\t\t\t\t\t});\n\t\t\t\t\treturn unwrapNotificationsGatewayResult(result);\n\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\ttransport: useRemoteNotifications ? \"remote\" : \"embedded\",\n\t\t}),\n\t\tfrom: ((...args: unknown[]) => {\n\t\t\trequireDb();\n\t\t\treturn Reflect.apply(resolved.from, resolved, args);\n\t\t}) as AthenaClient<TModels>[\"from\"],\n\t\thealth: () => {\n\t\t\trequireDb();\n\t\t\treturn resolved.health();\n\t\t},\n\t\tquery<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n\t\t\trequireDb();\n\t\t\treturn resolved.query<Row>(query, options);\n\t\t},\n\t\trequest<T = unknown>(options: AthenaRequestOptions) {\n\t\t\t// Absolute URLs do not need a configured service base URL.\n\t\t\tif (!options.url?.trim()) {\n\t\t\t\tserviceGuard(core.urls, options.service ?? \"db\");\n\t\t\t}\n\t\t\treturn resolved.request<T>(options);\n\t\t},\n\t\trpc: ((...args: unknown[]) => {\n\t\t\trequireDb();\n\t\t\treturn Reflect.apply(resolved.rpc, resolved, args);\n\t\t}) as AthenaClient<TModels>[\"rpc\"],\n\t\tstorage: boundStorage as AthenaStorageModule,\n\t\tsystem: {\n\t\t\tcompatibility: () => {\n\t\t\t\trequireDb();\n\t\t\t\treturn resolved.system.compatibility();\n\t\t\t},\n\t\t\truntime: () =>\n\t\t\t\ttoAthenaRuntimeDiagnostics(\n\t\t\t\t\tresolveAthenaRuntime(core.config, {\n\t\t\t\t\t\tenvironment: detectAthenaRuntimeEnvironment(),\n\t\t\t\t\t\ttrustedNode: detectAthenaRuntimeEnvironment() === \"node\",\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t/**\n\t\t\t * Safe auth routing snapshot (no secrets). Does not require db.\n\t\t\t */\n\t\t\tinspectAuth(options?: {\n\t\t\t\trequestOrigin?: string | null;\n\t\t\t}): AthenaAuthDiagnostics {\n\t\t\t\tconst ctx = viewContext;\n\t\t\t\tconst attached = getAttachedAthenaAuthRouting(client);\n\t\t\t\tconst baseRouting = attached ?? core.authRouting;\n\t\t\t\t// Recompute server base when caller provides request origin.\n\t\t\t\tconst routing =\n\t\t\t\t\toptions?.requestOrigin && baseRouting\n\t\t\t\t\t\t? resolveAthenaAuthRouting({\n\t\t\t\t\t\t\tcredentials: athenaAuthConfig(core.config.auth)?.credentials,\n\t\t\t\t\t\t\temitWarnings: false,\n\t\t\t\t\t\t\tenv: core.config.env,\n\t\t\t\t\t\t\trequestOrigin: options.requestOrigin,\n\t\t\t\t\t\t\trouting: athenaAuthConfig(core.config.auth)?.routing,\n\t\t\t\t\t\t\tupstreamUrl: athenaAuthConfig(core.config.auth)?.upstreamUrl,\n\t\t\t\t\t\t\turl:\n\t\t\t\t\t\t\t\tathenaAuthConfig(core.config.auth)?.url ??\n\t\t\t\t\t\t\t\tbaseRouting.browserRequestBaseUrl,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: baseRouting;\n\t\t\t\treturn toAthenaAuthDiagnostics(routing, {\n\t\t\t\t\tbearerToken: ctx?.bearerToken,\n\t\t\t\t\tcookie: ctx?.cookie,\n\t\t\t\t\trequestOrigin: options?.requestOrigin,\n\t\t\t\t\tsessionToken: ctx?.sessionToken,\n\t\t\t\t});\n\t\t\t},\n\t\t\trelease: () => {\n\t\t\t\trequireDb();\n\t\t\t\treturn resolved.system.release();\n\t\t\t},\n\t\t},\n\t\tverifyConnection(options?: AthenaGatewayConnectionOptions) {\n\t\t\trequireDb();\n\t\t\treturn resolved.verifyConnection(options);\n\t\t},\n\t\tasync close() {\n\t\t\tconst internals = getAthenaClientInternals(client);\n\t\t\tif (isAthenaRequestRuntime(internals)) {\n\t\t\t\tthrowAthenaRuntimeOwnershipInvalid(\"close\");\n\t\t\t}\n\t\t\tif (internals?.close) {\n\t\t\t\tawait internals.close();\n\t\t\t}\n\t\t},\n\t\twithContext(\n\t\t\tcontext: AthenaRequestContext,\n\t\t): AthenaRequestClient<AthenaClient<TModels>> {\n\t\t\twarnIfEmptyRequestContext(context);\n\t\t\t// Recursive view construction hits TS2589 under dts emit.\n\t\t\tconst next = (\n\t\t\t\tcreateClientView as (c: unknown, ctx?: AthenaRequestContext) => unknown\n\t\t\t)(core, mergeAthenaRequestContexts(viewContext, context));\n\t\t\tif (core.authRouting) {\n\t\t\t\tattachAthenaAuthRouting(next as object, core.authRouting);\n\t\t\t}\n\t\t\tconst internals = getAthenaClientInternals(client);\n\t\t\tif (internals) {\n\t\t\t\tattachAthenaClientInternals(\n\t\t\t\t\tnext as object,\n\t\t\t\t\tcreateViewClientInternals(client, internals),\n\t\t\t\t);\n\t\t\t}\n\t\t\tattachRequestAuthLifecycleGuards(next as object, client);\n\t\t\tnotificationStoreHoldersByClient.set(next as object, notificationStores);\n\t\t\treturn next as AthenaRequestClient<AthenaClient<TModels>>;\n\t\t},\n\t} as AthenaClient<TModels>;\n\n\tnotificationStoreHoldersByClient.set(client, notificationStores);\n\n\tif (core.authRouting) {\n\t\tattachAthenaAuthRouting(client, core.authRouting);\n\t}\n\n\treturn Object.freeze(client);\n}\n\n/**\n * True when a context object carries no identity, auth, cache, or header signal.\n * Used to catch the common footgun `withContext({})` in development.\n */\nexport function isEmptyAthenaRequestContext(\n\tcontext: AthenaRequestContext | undefined | null,\n): boolean {\n\tif (!context) {\n\t\treturn true;\n\t}\n\tconst hasHeaders =\n\t\tcontext.headers !== undefined &&\n\t\tcontext.headers !== null &&\n\t\tObject.keys(context.headers).length > 0;\n\t// Treat omitted fields (undefined) the same as explicit null so `{}` is empty.\n\n\treturn (\n\t\t(context.userId === undefined || context.userId === null) &&\n\t\t(context.organizationId === undefined || context.organizationId === null) &&\n\t\t!normalizeOptionalContextString(context.accessScope) &&\n\t\t!normalizeOptionalContextString(context.policyRevision) &&\n\t\t!normalizeOptionalContextString(context.cookie) &&\n\t\t!normalizeOptionalContextString(context.bearerToken) &&\n\t\t!normalizeOptionalContextString(context.sessionToken) &&\n\t\t!context.forceNoCache &&\n\t\t!hasHeaders\n\t);\n}\n\nfunction normalizeOptionalContextString(\n\tvalue: string | null | undefined,\n): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed || undefined;\n}\n\nfunction warnIfEmptyRequestContext(context: AthenaRequestContext): void {\n\tif (!isEmptyAthenaRequestContext(context)) {\n\t\treturn;\n\t}\n\t// globalThis.process avoids DTS failures without @types/node (Workers CI).\n\tconst nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n\t\t.process?.env?.NODE_ENV;\n\tif (nodeEnv === \"production\") {\n\t\treturn;\n\t}\n\tconsole.warn(\n\t\t\"[athena] withContext({}) has no userId, organizationId, cookie, bearerToken, sessionToken, headers, or forceNoCache. \" +\n\t\t\"Gateway scope headers will not change. Pass identity fields, or use createAthenaServerClient({ session, scope }).\",\n\t);\n}\n\n/**\n * Shared client-construction spine with an injectable normalization pipeline.\n *\n * The browser-safe universal pipeline is {@link normalizeUniversalCreateClientConfig};\n * the Node/server entry (`./v3-client.ts`) passes a pipeline that additionally\n * materializes direct PostgreSQL (`db.pgUri`). Keeping the pipeline injectable\n * is what keeps `pg` / Node built-ins out of the browser dependency graph.\n *\n * @internal Not part of the public API surface.\n */\nexport function createClientWithNormalizer<\n\tTModels extends AthenaClientModelsInput | undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n\tnormalize: (\n\t\tinput: AthenaClientConfig<TModels>,\n\t) => AthenaClientConfig<TModels>,\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n\t// Nuclear casts: createClientView/resolveCore generics overflow TS depth\n\t// during declaration emit (TS2589). Keep the public overload return types;\n\t// never re-instantiate AthenaClient<TModels> in the body expression tree.\n\tconst pipeline = normalize as (c: unknown) => unknown;\n\tconst coreOf = resolveCore as (c: unknown) => unknown;\n\tconst viewOf = createClientView as (c: unknown) => unknown;\n\tconst client: unknown = viewOf(coreOf(pipeline(config)));\n\treturn client as AthenaClientWithR2Storage<TModels>;\n}\n\n/**\n * Materialize an Athena client (single public constructor).\n *\n * All backends and modes go through this API:\n * - Gateway HTTP: `createClient({ url, key })`\n * - Edge D1/R2: `createClient({ db: { d1 }, storage: { r2 } })` or top-level `{ d1, r2 }`\n * - Hybrid: edge D1 + `url` for remote auth/billing\n * - Switch: `mode: 'auto' | 'edge' | 'gateway'` and `prefer` when both D1 and URL exist\n *\n * Fluent `from` / `query` / `storage.*` call sites are identical across modes (ADR 0001 / 0015 / 0016).\n * `createCloudflareClient` / `createAthenaRuntime` are thin façades that only map config into this function.\n */\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig:\n\t\t| (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n\t\t| AthenaClientConfigWithR2<TModels>,\n): AthenaClientWithR2Storage<TModels>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels>;\nexport function createClient<\n\tconst TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n\tconfig: AthenaClientConfig<TModels>,\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n\t// Nuclear cast: passing the generic normalizer re-instantiates the config\n\t// graph (TS2589); the spine already erases generics internally.\n\tconst factory = createClientWithNormalizer as unknown as (\n\t\tinput: unknown,\n\t\tnormalizer: (c: unknown) => unknown,\n\t) => unknown;\n\tconst normalize = normalizeUniversalCreateClientConfig as unknown as (\n\t\tc: unknown,\n\t) => unknown;\n\tassertDataLifecycleConfig(config);\n\tassertLocalBillingRuntimeEnvironment({\n\t\tconfiguredProviders: config.billing?.providers,\n\t\tmode: config.billing?.mode,\n\t});\n\tassertBillingProviderRuntimeEnvironment(config.billing?.providers);\n\tconst client: unknown = factory(config, normalize);\n\tassertLocalAuthHooks(athenaAuthConfig(config.auth));\n\tassertLocalAuthObservability(athenaAuthConfig(config.auth));\n\treturn client as AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n}\n","/**\n * v1 schema snapshot DTO and structured schema-diff results.\n *\n * Canonical structure is AthenaSchemaIr (`src/schema/ir/`). These types remain\n * as a compatibility projection (`ATHENA_SCHEMA_SNAPSHOT_VERSION = 1`).\n * Diff compares IR (v1 snapshots are lifted at the boundary).\n */\n\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\n\n/** Snapshot IR version. Bump only on breaking shape changes. */\nexport const ATHENA_SCHEMA_SNAPSHOT_VERSION = 1 as const;\n\n/** Schema-qualified table identity (never table-name alone). */\nexport interface SchemaTableIdentity {\n\treadonly schema: string;\n\treadonly name: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\n/** Canonical column type after normalization. */\nexport interface SchemaColumnType {\n\t/**\n\t * Normalized base type name (e.g. `integer`, `bigint`, `text`, `varchar`).\n\t * Postgres aliases are folded in {@link normalizeSchemaSnapshot}.\n\t */\n\treadonly name: string;\n\t/** Character length for `varchar`/`char` when known. */\n\treadonly length?: number | null;\n\t/** Numeric precision when known. */\n\treadonly precision?: number | null;\n\t/** Numeric scale when known. */\n\treadonly scale?: number | null;\n\t/** Array dimensions (`0` = scalar). */\n\treadonly arrayDimensions: number;\n\t/** Enum labels when type is a managed enum. */\n\treadonly enumValues?: readonly string[] | null;\n}\n\n/** Canonical column definition. */\nexport interface SchemaColumn {\n\treadonly name: string;\n\treadonly type: SchemaColumnType;\n\treadonly nullable: boolean;\n\t/**\n\t * Normalized default expression, or `null` when absent.\n\t * Prefer `null` over `undefined` for stable serialization.\n\t */\n\treadonly default: string | null;\n\treadonly isGenerated: boolean;\n}\n\nexport interface SchemaPrimaryKey {\n\t/** Physical name when known; structural identity is `columns` order. */\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n}\n\nexport interface SchemaUniqueConstraint {\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n}\n\nexport type SchemaReferentialAction =\n\t| \"no_action\"\n\t| \"restrict\"\n\t| \"cascade\"\n\t| \"set_null\"\n\t| \"set_default\";\n\nexport interface SchemaForeignKey {\n\treadonly name?: string | null;\n\treadonly columns: readonly string[];\n\treadonly target: SchemaTableIdentity;\n\treadonly targetColumns: readonly string[];\n\treadonly onDelete: SchemaReferentialAction;\n\treadonly onUpdate: SchemaReferentialAction;\n}\n\nexport interface SchemaIndexColumn {\n\treadonly name: string;\n\t/** `asc` | `desc`; default treated as `asc` after normalize. */\n\treadonly direction?: \"asc\" | \"desc\" | null;\n}\n\nexport interface SchemaIndex {\n\treadonly name?: string | null;\n\treadonly columns: readonly SchemaIndexColumn[];\n\treadonly unique: boolean;\n\t/** Partial index predicate when modeled; otherwise null. */\n\treadonly predicate?: string | null;\n\t/** Index method (`btree`, …) when known. */\n\treadonly method?: string | null;\n}\n\nexport interface SchemaTable {\n\treadonly schema: string;\n\treadonly name: string;\n\treadonly database?: string;\n\treadonly columns: readonly SchemaColumn[];\n\treadonly primaryKey: SchemaPrimaryKey | null;\n\treadonly uniqueConstraints: readonly SchemaUniqueConstraint[];\n\treadonly foreignKeys: readonly SchemaForeignKey[];\n\treadonly indexes: readonly SchemaIndex[];\n}\n\nexport interface SchemaNamespace {\n\treadonly name: string;\n\treadonly tables: readonly SchemaTable[];\n\t/** Database axis when the IR is multi-database; omitted for single-db v1. */\n\treadonly database?: string;\n}\n\n/**\n * Canonical schema snapshot for Athena-managed surfaces.\n * Unmodeled DB objects (views, functions, triggers, extensions, RLS) are out of scope.\n */\nexport interface AthenaSchemaSnapshot {\n\treadonly version: typeof ATHENA_SCHEMA_SNAPSHOT_VERSION;\n\t/** Optional backend hint (`postgresql`, `d1`, …). */\n\treadonly backend?: string | null;\n\treadonly schemas: readonly SchemaNamespace[];\n}\n\nexport type SchemaDiffOperationKind =\n\t| \"create_schema\"\n\t| \"drop_schema\"\n\t| \"create_table\"\n\t| \"drop_table\"\n\t| \"rename_table\"\n\t| \"add_column\"\n\t| \"drop_column\"\n\t| \"rename_column\"\n\t| \"alter_column\"\n\t| \"add_primary_key\"\n\t| \"drop_primary_key\"\n\t| \"add_unique_constraint\"\n\t| \"drop_unique_constraint\"\n\t| \"add_foreign_key\"\n\t| \"drop_foreign_key\"\n\t| \"alter_foreign_key\"\n\t| \"add_index\"\n\t| \"drop_index\";\n\nexport interface SchemaDiffBase {\n\treadonly kind: SchemaDiffOperationKind;\n}\n\nexport interface CreateSchemaOperation extends SchemaDiffBase {\n\treadonly kind: \"create_schema\";\n\treadonly schema: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\nexport interface DropSchemaOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_schema\";\n\treadonly schema: string;\n\t/** Database axis when the IR is multi-database. */\n\treadonly database?: string;\n}\n\nexport interface CreateTableOperation extends SchemaDiffBase {\n\treadonly kind: \"create_table\";\n\treadonly table: SchemaTable;\n}\n\nexport interface DropTableOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_table\";\n\treadonly table: SchemaTableIdentity;\n\t/** Full prior definition when known (for later analysis). */\n\treadonly previous?: SchemaTable | null;\n}\n\nexport interface RenameTableOperation extends SchemaDiffBase {\n\treadonly kind: \"rename_table\";\n\treadonly from: SchemaTableIdentity;\n\treadonly to: SchemaTableIdentity;\n}\n\nexport interface AddColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"add_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: SchemaColumn;\n}\n\nexport interface DropColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: SchemaColumn;\n}\n\nexport interface RenameColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"rename_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly from: string;\n\treadonly to: string;\n}\n\nexport interface SchemaColumnChange<T> {\n\treadonly from: T;\n\treadonly to: T;\n}\n\nexport interface SchemaColumnChanges {\n\treadonly type?: SchemaColumnChange<SchemaColumnType>;\n\treadonly nullable?: SchemaColumnChange<boolean>;\n\treadonly default?: SchemaColumnChange<string | null>;\n\treadonly isGenerated?: SchemaColumnChange<boolean>;\n}\n\n/**\n * Consolidated column alter: one operation per column with explicit before/after deltas.\n * Multiple property changes on the same column stay a single operation (planning-safe).\n */\nexport interface AlterColumnOperation extends SchemaDiffBase {\n\treadonly kind: \"alter_column\";\n\treadonly table: SchemaTableIdentity;\n\treadonly column: string;\n\treadonly before: SchemaColumn;\n\treadonly after: SchemaColumn;\n\treadonly changes: SchemaColumnChanges;\n}\n\nexport interface AddPrimaryKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"add_primary_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly primaryKey: SchemaPrimaryKey;\n}\n\nexport interface DropPrimaryKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_primary_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly primaryKey: SchemaPrimaryKey;\n}\n\nexport interface AddUniqueConstraintOperation extends SchemaDiffBase {\n\treadonly kind: \"add_unique_constraint\";\n\treadonly table: SchemaTableIdentity;\n\treadonly unique: SchemaUniqueConstraint;\n}\n\nexport interface DropUniqueConstraintOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_unique_constraint\";\n\treadonly table: SchemaTableIdentity;\n\treadonly unique: SchemaUniqueConstraint;\n}\n\nexport interface AddForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"add_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly foreignKey: SchemaForeignKey;\n}\n\nexport interface DropForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly foreignKey: SchemaForeignKey;\n}\n\nexport interface AlterForeignKeyOperation extends SchemaDiffBase {\n\treadonly kind: \"alter_foreign_key\";\n\treadonly table: SchemaTableIdentity;\n\treadonly before: SchemaForeignKey;\n\treadonly after: SchemaForeignKey;\n}\n\nexport interface AddIndexOperation extends SchemaDiffBase {\n\treadonly kind: \"add_index\";\n\treadonly table: SchemaTableIdentity;\n\treadonly index: SchemaIndex;\n}\n\nexport interface DropIndexOperation extends SchemaDiffBase {\n\treadonly kind: \"drop_index\";\n\treadonly table: SchemaTableIdentity;\n\treadonly index: SchemaIndex;\n}\n\nexport type SchemaDiffOperation =\n\t| CreateSchemaOperation\n\t| DropSchemaOperation\n\t| CreateTableOperation\n\t| DropTableOperation\n\t| RenameTableOperation\n\t| AddColumnOperation\n\t| DropColumnOperation\n\t| RenameColumnOperation\n\t| AlterColumnOperation\n\t| AddPrimaryKeyOperation\n\t| DropPrimaryKeyOperation\n\t| AddUniqueConstraintOperation\n\t| DropUniqueConstraintOperation\n\t| AddForeignKeyOperation\n\t| DropForeignKeyOperation\n\t| AlterForeignKeyOperation\n\t| AddIndexOperation\n\t| DropIndexOperation;\n\nexport interface SchemaDiffSummary {\n\treadonly schemasAdded: number;\n\treadonly schemasRemoved: number;\n\treadonly tablesAdded: number;\n\treadonly tablesRemoved: number;\n\treadonly tablesRenamed: number;\n\treadonly columnsAdded: number;\n\treadonly columnsRemoved: number;\n\treadonly columnsRenamed: number;\n\treadonly columnsChanged: number;\n\treadonly primaryKeysAdded: number;\n\treadonly primaryKeysRemoved: number;\n\treadonly uniquesAdded: number;\n\treadonly uniquesRemoved: number;\n\treadonly foreignKeysAdded: number;\n\treadonly foreignKeysRemoved: number;\n\treadonly foreignKeysChanged: number;\n\treadonly indexesAdded: number;\n\treadonly indexesRemoved: number;\n\treadonly totalOperations: number;\n}\n\nexport interface SchemaDiff {\n\treadonly operations: readonly SchemaDiffOperation[];\n\treadonly summary: SchemaDiffSummary;\n\treadonly isEmpty: boolean;\n}\n\n/**\n * Diff direction: operations transform `from` (actual) into `to` (desired).\n * `add_column` means the column exists in `to` but not in `from`.\n */\nexport interface DiffSchemasInput {\n\treadonly from: AthenaSchemaSnapshot | AthenaSchemaIr;\n\treadonly to: AthenaSchemaSnapshot | AthenaSchemaIr;\n}\n\nexport interface DiffSchemasOptions {\n\t/**\n\t * When true (default), validate both snapshots before comparing.\n\t */\n\treadonly validate?: boolean;\n}\n","import {\n\tATHENA_SCHEMA_SNAPSHOT_VERSION,\n\ttype AthenaSchemaSnapshot,\n\ttype SchemaColumn,\n\ttype SchemaColumnType,\n\ttype SchemaForeignKey,\n\ttype SchemaIndex,\n\ttype SchemaNamespace,\n\ttype SchemaPrimaryKey,\n\ttype SchemaReferentialAction,\n\ttype SchemaTable,\n\ttype SchemaUniqueConstraint,\n} from \"./types.ts\";\n\n/** Postgres type aliases → canonical names (representational noise only). */\nconst TYPE_ALIASES: Readonly<Record<string, string>> = {\n\tint2: \"smallint\",\n\tsmallint: \"smallint\",\n\tint4: \"integer\",\n\tint: \"integer\",\n\tinteger: \"integer\",\n\tint8: \"bigint\",\n\tbigint: \"bigint\",\n\tfloat4: \"real\",\n\treal: \"real\",\n\tfloat8: \"double precision\",\n\t\"double precision\": \"double precision\",\n\tbool: \"boolean\",\n\tboolean: \"boolean\",\n\tvarchar: \"varchar\",\n\t\"character varying\": \"varchar\",\n\tbpchar: \"char\",\n\tcharacter: \"char\",\n\tchar: \"char\",\n\tdecimal: \"numeric\",\n\tnumeric: \"numeric\",\n\ttimestamp: \"timestamp\",\n\t\"timestamp without time zone\": \"timestamp\",\n\ttimestamptz: \"timestamptz\",\n\t\"timestamp with time zone\": \"timestamptz\",\n\ttimetz: \"timetz\",\n\t\"time with time zone\": \"timetz\",\n\ttime: \"time\",\n\t\"time without time zone\": \"time\",\n\tserial: \"integer\",\n\tserial4: \"integer\",\n\tbigserial: \"bigint\",\n\tserial8: \"bigint\",\n\tsmallserial: \"smallint\",\n\tserial2: \"smallint\",\n};\n\n// Transaction-start time only. statement_timestamp() is intentionally excluded:\n// it is statement-start time and must remain distinct from now()/CURRENT_TIMESTAMP.\nconst DEFAULT_NOW_EQUIVALENTS = new Set([\n\t\"now()\",\n\t\"current_timestamp\",\n\t\"current_timestamp()\",\n\t\"transaction_timestamp()\",\n]);\n\n/**\n * Parse a Postgres `format_type` / model type string into a structured type.\n * Does not invent precision when absent.\n */\nexport function parseSchemaTypeString(\n\traw: string,\n\tarrayDimensions = 0,\n): SchemaColumnType {\n\tlet text = raw.trim().toLowerCase();\n\tlet dims = arrayDimensions;\n\n\twhile (text.endsWith(\"[]\")) {\n\t\tdims += 1;\n\t\ttext = text.slice(0, -2).trim();\n\t}\n\n\t// `_int4` style udt array markers\n\tif (text.startsWith(\"_\") && !text.includes(\" \")) {\n\t\tdims = Math.max(dims, 1);\n\t\ttext = text.slice(1);\n\t}\n\n\tlet length: number | null = null;\n\tlet precision: number | null = null;\n\tlet scale: number | null = null;\n\n\tconst paramMatch = text.match(/^([a-z0-9_ ]+?)\\s*\\(([^)]+)\\)$/);\n\tif (paramMatch) {\n\t\ttext = paramMatch[1].trim();\n\t\tconst parts = paramMatch[2].split(\",\").map((p) => p.trim());\n\t\tif (parts.length === 1) {\n\t\t\tconst n = Number(parts[0]);\n\t\t\tif (Number.isFinite(n)) {\n\t\t\t\tlength = n;\n\t\t\t\tprecision = n;\n\t\t\t}\n\t\t} else if (parts.length >= 2) {\n\t\t\tconst p = Number(parts[0]);\n\t\t\tconst s = Number(parts[1]);\n\t\t\tif (Number.isFinite(p)) {\n\t\t\t\tprecision = p;\n\t\t\t}\n\t\t\tif (Number.isFinite(s)) {\n\t\t\t\tscale = s;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst canonical = TYPE_ALIASES[text] ?? text;\n\n\t// length only meaningful for char/varchar; precision/scale for numeric\n\tif (canonical === \"varchar\" || canonical === \"char\") {\n\t\tprecision = null;\n\t\tscale = null;\n\t} else if (canonical === \"numeric\") {\n\t\tlength = null;\n\t} else {\n\t\tlength = null;\n\t\t// keep precision/scale only for numeric-like; drop for others\n\t\tif (canonical !== \"numeric\") {\n\t\t\tprecision = null;\n\t\t\tscale = null;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: canonical,\n\t\tlength,\n\t\tprecision,\n\t\tscale,\n\t\tarrayDimensions: dims,\n\t\tenumValues: null,\n\t};\n}\n\nexport function normalizeSchemaColumnType(\n\ttype: SchemaColumnType,\n): SchemaColumnType {\n\tconst base = parseSchemaTypeString(type.name, type.arrayDimensions ?? 0);\n\tconst name = TYPE_ALIASES[base.name] ?? base.name;\n\n\tlet length = type.length ?? base.length ?? null;\n\tlet precision = type.precision ?? base.precision ?? null;\n\tlet scale = type.scale ?? base.scale ?? null;\n\n\tif (name === \"varchar\" || name === \"char\") {\n\t\tprecision = null;\n\t\tscale = null;\n\t} else if (name === \"numeric\") {\n\t\tlength = null;\n\t} else {\n\t\tlength = null;\n\t\tprecision = null;\n\t\tscale = null;\n\t}\n\n\tconst enumValues =\n\t\ttype.enumValues && type.enumValues.length > 0 ? [...type.enumValues] : null;\n\n\treturn {\n\t\tname,\n\t\tlength,\n\t\tprecision,\n\t\tscale,\n\t\tarrayDimensions: base.arrayDimensions,\n\t\tenumValues,\n\t};\n}\n\n/**\n * Conservative default normalization — only proven-safe syntactic noise.\n */\nexport function normalizeDefaultExpression(\n\tvalue: string | null | undefined,\n): string | null {\n\tif (value === undefined || value === null) {\n\t\treturn null;\n\t}\n\tlet text = value.trim();\n\tif (!text) {\n\t\treturn null;\n\t}\n\n\t// Strip trailing ::type casts repeatedly: 'active'::text → 'active'\n\tfor (let i = 0; i < 4; i += 1) {\n\t\tconst castMatch = text.match(/^(.*?)::[a-zA-Z_][\\w\\s.\"]*$/);\n\t\tif (!castMatch) {\n\t\t\tbreak;\n\t\t}\n\t\ttext = castMatch[1].trim();\n\t}\n\n\t// nextval('seq'::regclass) → nextval('seq')\n\ttext = text.replace(\n\t\t/nextval\\s*\\(\\s*'([^']+)'\\s*::\\s*regclass\\s*\\)/gi,\n\t\t(_m, seq: string) => `nextval('${seq}')`,\n\t);\n\n\tconst lower = text.toLowerCase();\n\tif (DEFAULT_NOW_EQUIVALENTS.has(lower)) {\n\t\treturn \"now()\";\n\t}\n\n\treturn text;\n}\n\nexport function normalizeReferentialAction(\n\taction: SchemaReferentialAction | string | null | undefined,\n): SchemaReferentialAction {\n\tif (!action) {\n\t\treturn \"no_action\";\n\t}\n\tconst normalized = String(action).trim().toLowerCase().replace(/\\s+/g, \"_\");\n\tswitch (normalized) {\n\t\tcase \"a\":\n\t\tcase \"no_action\":\n\t\tcase \"noaction\":\n\t\t\treturn \"no_action\";\n\t\tcase \"r\":\n\t\tcase \"restrict\":\n\t\t\treturn \"restrict\";\n\t\tcase \"c\":\n\t\tcase \"cascade\":\n\t\t\treturn \"cascade\";\n\t\tcase \"n\":\n\t\tcase \"set_null\":\n\t\tcase \"setnull\":\n\t\t\treturn \"set_null\";\n\t\tcase \"d\":\n\t\tcase \"set_default\":\n\t\tcase \"setdefault\":\n\t\t\treturn \"set_default\";\n\t\tdefault:\n\t\t\treturn \"no_action\";\n\t}\n}\n\nfunction normalizeColumn(column: SchemaColumn): SchemaColumn {\n\treturn {\n\t\tname: column.name,\n\t\ttype: normalizeSchemaColumnType(column.type),\n\t\tnullable: Boolean(column.nullable),\n\t\tdefault: normalizeDefaultExpression(column.default),\n\t\tisGenerated: Boolean(column.isGenerated),\n\t};\n}\n\nfunction normalizePrimaryKey(\n\tpk: SchemaPrimaryKey | null | undefined,\n): SchemaPrimaryKey | null {\n\tif (!pk || pk.columns.length === 0) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tname: pk.name ?? null,\n\t\tcolumns: [...pk.columns],\n\t};\n}\n\nfunction normalizeUnique(\n\tunique: SchemaUniqueConstraint,\n): SchemaUniqueConstraint {\n\treturn {\n\t\tname: unique.name ?? null,\n\t\tcolumns: [...unique.columns],\n\t};\n}\n\nfunction normalizeForeignKey(fk: SchemaForeignKey): SchemaForeignKey {\n\tconst database = fk.target.database?.trim();\n\treturn {\n\t\tname: fk.name ?? null,\n\t\tcolumns: [...fk.columns],\n\t\ttarget: {\n\t\t\tschema: fk.target.schema,\n\t\t\tname: fk.target.name,\n\t\t\t...(database ? { database } : {}),\n\t\t},\n\t\ttargetColumns: [...fk.targetColumns],\n\t\tonDelete: normalizeReferentialAction(fk.onDelete),\n\t\tonUpdate: normalizeReferentialAction(fk.onUpdate),\n\t};\n}\n\nfunction normalizeIndex(index: SchemaIndex): SchemaIndex {\n\treturn {\n\t\tname: index.name ?? null,\n\t\tunique: Boolean(index.unique),\n\t\tpredicate: index.predicate?.trim() ? index.predicate.trim() : null,\n\t\tmethod: index.method?.trim() ? index.method.trim().toLowerCase() : null,\n\t\tcolumns: index.columns.map((c) => ({\n\t\t\tname: c.name,\n\t\t\tdirection: c.direction === \"desc\" ? \"desc\" : \"asc\",\n\t\t})),\n\t};\n}\n\nfunction compareByName<T extends { name: string }>(a: T, b: T): number {\n\treturn a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n}\n\nfunction uniqueSortKey(u: SchemaUniqueConstraint): string {\n\treturn u.columns.join(\"\\0\");\n}\n\nfunction fkSortKey(fk: SchemaForeignKey): string {\n\treturn [\n\t\tfk.columns.join(\",\"),\n\t\tfk.target.database ?? \"\",\n\t\tfk.target.schema,\n\t\tfk.target.name,\n\t\tfk.targetColumns.join(\",\"),\n\t\tfk.onDelete,\n\t\tfk.onUpdate,\n\t\tfk.name ?? \"\",\n\t].join(\"\\0\");\n}\n\nfunction indexSortKey(ix: SchemaIndex): string {\n\treturn [\n\t\tix.unique ? \"1\" : \"0\",\n\t\tix.columns.map((c) => `${c.name}:${c.direction ?? \"asc\"}`).join(\",\"),\n\t\tix.predicate ?? \"\",\n\t\tix.method ?? \"\",\n\t\tix.name ?? \"\",\n\t].join(\"\\0\");\n}\n\nfunction normalizeTable(table: SchemaTable): SchemaTable {\n\tconst columns = table.columns.map(normalizeColumn).sort(compareByName);\n\tconst uniqueConstraints = table.uniqueConstraints\n\t\t.map(normalizeUnique)\n\t\t.sort((a, b) => {\n\t\t\tconst ka = uniqueSortKey(a);\n\t\t\tconst kb = uniqueSortKey(b);\n\t\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t\t});\n\tconst foreignKeys = table.foreignKeys\n\t\t.map(normalizeForeignKey)\n\t\t.sort((a, b) => {\n\t\t\tconst ka = fkSortKey(a);\n\t\t\tconst kb = fkSortKey(b);\n\t\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t\t});\n\tconst indexes = table.indexes.map(normalizeIndex).sort((a, b) => {\n\t\tconst ka = indexSortKey(a);\n\t\tconst kb = indexSortKey(b);\n\t\treturn ka < kb ? -1 : ka > kb ? 1 : 0;\n\t});\n\n\tconst database = table.database?.trim();\n\treturn {\n\t\tschema: table.schema,\n\t\tname: table.name,\n\t\t...(database ? { database } : {}),\n\t\tcolumns,\n\t\tprimaryKey: normalizePrimaryKey(table.primaryKey),\n\t\tuniqueConstraints,\n\t\tforeignKeys,\n\t\tindexes,\n\t};\n}\n\nfunction normalizeNamespace(ns: SchemaNamespace): SchemaNamespace {\n\tconst tables = ns.tables.map(normalizeTable).sort((a, b) => {\n\t\tif (a.name < b.name) return -1;\n\t\tif (a.name > b.name) return 1;\n\t\treturn 0;\n\t});\n\tconst database = ns.database?.trim();\n\treturn {\n\t\tname: ns.name,\n\t\ttables,\n\t\t...(database && database.length > 0 ? { database } : {}),\n\t};\n}\n\n/**\n * Pure normalization: returns a new snapshot; never mutates input.\n * Idempotent: normalize(normalize(s)) === normalize(s) (deep equality).\n */\nexport function normalizeSchemaSnapshot(\n\tsnapshot: AthenaSchemaSnapshot,\n): AthenaSchemaSnapshot {\n\tconst schemas = snapshot.schemas\n\t\t.map(normalizeNamespace)\n\t\t.sort((a, b) => {\n\t\t\tconst database = (a.database ?? \"\").localeCompare(b.database ?? \"\");\n\t\t\tif (database !== 0) {\n\t\t\t\treturn database;\n\t\t\t}\n\t\t\treturn a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n\t\t});\n\n\treturn {\n\t\tversion: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n\t\tbackend: snapshot.backend ?? null,\n\t\tschemas,\n\t};\n}\n\nexport function columnTypesEqual(\n\ta: SchemaColumnType,\n\tb: SchemaColumnType,\n): boolean {\n\tconst na = normalizeSchemaColumnType(a);\n\tconst nb = normalizeSchemaColumnType(b);\n\tif (na.name !== nb.name) return false;\n\tif (na.arrayDimensions !== nb.arrayDimensions) return false;\n\tif ((na.length ?? null) !== (nb.length ?? null)) return false;\n\tif ((na.precision ?? null) !== (nb.precision ?? null)) return false;\n\tif ((na.scale ?? null) !== (nb.scale ?? null)) return false;\n\tconst ea = na.enumValues ?? null;\n\tconst eb = nb.enumValues ?? null;\n\tif (ea === null && eb === null) return true;\n\tif (ea === null || eb === null) return false;\n\tif (ea.length !== eb.length) return false;\n\tfor (let i = 0; i < ea.length; i += 1) {\n\t\tif (ea[i] !== eb[i]) return false;\n\t}\n\treturn true;\n}\n\nexport function columnsEqual(a: SchemaColumn, b: SchemaColumn): boolean {\n\treturn (\n\t\ta.name === b.name &&\n\t\tcolumnTypesEqual(a.type, b.type) &&\n\t\ta.nullable === b.nullable &&\n\t\tnormalizeDefaultExpression(a.default) ===\n\t\t\tnormalizeDefaultExpression(b.default) &&\n\t\ta.isGenerated === b.isGenerated\n\t);\n}\n\nexport function primaryKeysEqual(\n\ta: SchemaPrimaryKey | null,\n\tb: SchemaPrimaryKey | null,\n): boolean {\n\tif (a === null && b === null) return true;\n\tif (a === null || b === null) return false;\n\tif (a.columns.length !== b.columns.length) return false;\n\tfor (let i = 0; i < a.columns.length; i += 1) {\n\t\tif (a.columns[i] !== b.columns[i]) return false;\n\t}\n\treturn true;\n}\n","import { parseSchemaTypeString } from \"./diff/normalize.ts\";\nimport type {\n  IntrospectionColumn,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionTable,\n  ModelRelationKind,\n} from \"./types.ts\";\n\nexport interface ColumnQueryRow {\n  array_dimensions: number;\n  column_name: string;\n  data_type: string;\n  /** Present when catalog SQL includes `pg_get_expr`; optional for older mocks. */\n  default_expression?: string | null;\n  has_default: boolean;\n  is_generated: boolean;\n  is_nullable: boolean;\n  schema_name: string;\n  table_name: string;\n  type_kind_code: string;\n  type_oid: number;\n  udt_name: string;\n}\n\nexport interface PrimaryKeyQueryRow {\n  columns: string[];\n  schema_name: string;\n  table_name: string;\n}\n\nexport interface ForeignKeyQueryRow {\n  constraint_name: string;\n  /** Postgres confdeltype: a/r/c/n/d */\n  on_delete?: string | null;\n  /** Postgres confupdtype: a/r/c/n/d */\n  on_update?: string | null;\n  source_columns: string[];\n  source_is_unique: boolean;\n  source_schema: string;\n  source_table: string;\n  target_columns: string[];\n  target_schema: string;\n  target_table: string;\n}\n\nexport interface EnumQueryRow {\n  enum_label: string;\n  type_oid: number;\n}\n\nexport interface UniqueConstraintQueryRow {\n  columns: string[];\n  constraint_name: string;\n  schema_name: string;\n  table_name: string;\n}\n\nexport interface IndexQueryRow {\n  /** Parallel to `columns`: `\"asc\"` | `\"desc\"` (from pg_index.indoption). */\n  column_directions?: string[] | null;\n  columns: string[];\n  index_name: string;\n  is_unique: boolean;\n  method: string | null;\n  predicate: string | null;\n  schema_name: string;\n  table_name: string;\n}\n\ninterface BridgeCandidate {\n  foreignKeys: ForeignKeyQueryRow[];\n  schema: string;\n  table: string;\n}\n\nexport const POSTGRES_CATALOG_SQL = {\n  columns: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      a.attname AS column_name,\n      format_type(a.atttypid, a.atttypmod) AS data_type,\n      t.typname AS udt_name,\n      t.typtype AS type_kind_code,\n      t.oid AS type_oid,\n      NOT a.attnotnull AS is_nullable,\n      (ad.adbin IS NOT NULL) AS has_default,\n      pg_get_expr(ad.adbin, ad.adrelid) AS default_expression,\n      (a.attgenerated <> '') AS is_generated,\n      a.attndims AS array_dimensions\n    FROM pg_attribute a\n    JOIN pg_class c ON c.oid = a.attrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN pg_type t ON t.oid = a.atttypid\n    LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\n    WHERE c.relkind IN ('r', 'p')\n      AND a.attnum > 0\n      AND NOT a.attisdropped\n      AND n.nspname = ANY($1::text[])\n    ORDER BY n.nspname, c.relname, a.attnum;\n  `,\n  enums: `\n    SELECT\n      t.oid AS type_oid,\n      e.enumlabel AS enum_label\n    FROM pg_type t\n    JOIN pg_enum e ON e.enumtypid = t.oid\n    ORDER BY t.oid, e.enumsortorder;\n  `,\n  foreignKeys: `\n    SELECT\n      sn.nspname AS source_schema,\n      sc.relname AS source_table,\n      con.conname AS constraint_name,\n      ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\n      tn.nspname AS target_schema,\n      tc.relname AS target_table,\n      ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\n      con.confdeltype::text AS on_delete,\n      con.confupdtype::text AS on_update,\n      EXISTS (\n        SELECT 1\n        FROM pg_constraint uq\n        WHERE uq.conrelid = con.conrelid\n          AND uq.contype IN ('p', 'u')\n          AND uq.conkey = con.conkey\n      ) AS source_is_unique\n    FROM pg_constraint con\n    JOIN pg_class sc ON sc.oid = con.conrelid\n    JOIN pg_namespace sn ON sn.oid = sc.relnamespace\n    JOIN pg_class tc ON tc.oid = con.confrelid\n    JOIN pg_namespace tn ON tn.oid = tc.relnamespace\n    JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\n    JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\n    JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\n    WHERE con.contype = 'f'\n      AND sn.nspname = ANY($1::text[])\n      AND tn.nspname = ANY($1::text[])\n    GROUP BY\n      sn.nspname,\n      sc.relname,\n      con.conname,\n      tn.nspname,\n      tc.relname,\n      con.conkey,\n      con.conrelid,\n      con.confdeltype,\n      con.confupdtype\n    ORDER BY sn.nspname, sc.relname, con.conname;\n  `,\n  uniqueConstraints: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      con.conname AS constraint_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'u'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname, con.conname\n    ORDER BY n.nspname, c.relname, con.conname;\n  `,\n  indexes: `\n    SELECT\n      n.nspname AS schema_name,\n      t.relname AS table_name,\n      i.relname AS index_name,\n      ix.indisunique AS is_unique,\n      am.amname AS method,\n      pg_get_expr(ix.indpred, ix.indrelid) AS predicate,\n      ARRAY_AGG(a.attname ORDER BY cols.ordinality) AS columns,\n      ARRAY_AGG(\n        CASE\n          WHEN ((ix.indoption::int2[])[cols.ordinality] & 1) = 1 THEN 'desc'\n          ELSE 'asc'\n        END\n        ORDER BY cols.ordinality\n      ) AS column_directions\n    FROM pg_index ix\n    JOIN pg_class i ON i.oid = ix.indexrelid\n    JOIN pg_class t ON t.oid = ix.indrelid\n    JOIN pg_namespace n ON n.oid = t.relnamespace\n    JOIN pg_am am ON am.oid = i.relam\n    JOIN unnest(ix.indkey) WITH ORDINALITY AS cols(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = cols.attnum\n    WHERE n.nspname = ANY($1::text[])\n      AND t.relkind IN ('r', 'p')\n      AND NOT ix.indisprimary\n      AND cols.attnum > 0\n    GROUP BY\n      n.nspname,\n      t.relname,\n      i.relname,\n      ix.indisunique,\n      am.amname,\n      ix.indpred,\n      ix.indrelid,\n      ix.indoption\n    ORDER BY n.nspname, t.relname, i.relname;\n  `,\n  primaryKeys: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'p'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname\n    ORDER BY n.nspname, c.relname;\n  `,\n} as const;\n\nfunction tableKey(schema: string, table: string): string {\n  return `${schema}.${table}`;\n}\n\nfunction relationKey(...parts: string[]): string {\n  const base = parts\n    .join(\"_\")\n    .replace(/[^A-Za-z0-9_]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n  return base.length > 0 ? base : \"relation\";\n}\n\nfunction toTypeKind(code: string): IntrospectionColumn[\"typeKind\"] {\n  switch (code) {\n    case \"e\":\n      return \"enum\";\n    case \"d\":\n      return \"domain\";\n    case \"r\":\n      return \"range\";\n    case \"m\":\n      return \"multirange\";\n    case \"c\":\n      return \"composite\";\n    default:\n      return \"scalar\";\n  }\n}\n\nfunction escapeSqlLiteral(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction parsePostgresArrayLiteral(text: string): string[] {\n  const body = text.slice(1, -1).trim();\n  if (!body) {\n    return [];\n  }\n\n  const values: string[] = [];\n  let current = \"\";\n  let inQuotes = false;\n  let escaped = false;\n\n  for (const char of body) {\n    if (escaped) {\n      current += char;\n      escaped = false;\n      continue;\n    }\n    if (char === \"\\\\\") {\n      escaped = true;\n      continue;\n    }\n    if (char === '\"') {\n      inQuotes = !inQuotes;\n      continue;\n    }\n    if (char === \",\" && !inQuotes) {\n      values.push(current);\n      current = \"\";\n      continue;\n    }\n    current += char;\n  }\n\n  values.push(current);\n  return values\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nfunction coerceStringArray(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value\n      .map((item) => (typeof item === \"string\" ? item : String(item)))\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return [];\n    }\n\n    if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n      try {\n        const parsed = JSON.parse(trimmed) as unknown;\n        return coerceStringArray(parsed);\n      } catch {\n        // Fall through to more permissive parsing paths.\n      }\n    }\n\n    if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n      return parsePostgresArrayLiteral(trimmed);\n    }\n\n    return trimmed\n      .split(\",\")\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  return [];\n}\n\nexport function normalizePostgresCatalogSchemas(\n  schemas?: readonly string[]\n): string[] {\n  const normalized: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of schemas ?? []) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    normalized.push(schema);\n  }\n\n  return normalized.length > 0 ? normalized : [\"public\"];\n}\n\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\n  const normalized = normalizePostgresCatalogSchemas(schemas);\n  const literals = normalized\n    .map((schema) => `'${escapeSqlLiteral(schema)}'`)\n    .join(\", \");\n  return `ARRAY[${literals}]`;\n}\n\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\n  const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`;\n  return sql.replace(/\\$1::text\\[\\]/g, schemaArray);\n}\n\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\n  columns: string;\n  enums: string;\n  primaryKeys: string;\n  foreignKeys: string;\n  uniqueConstraints: string;\n  indexes: string;\n} {\n  return {\n    columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\n    enums: POSTGRES_CATALOG_SQL.enums,\n    foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\n    indexes: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.indexes, schemas),\n    primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\n    uniqueConstraints: inlineSchemaLiteral(\n      POSTGRES_CATALOG_SQL.uniqueConstraints,\n      schemas\n    ),\n  };\n}\n\nexport class PostgresCatalogSnapshotAssembler {\n  private readonly schemas: Record<string, IntrospectionSchema> = {};\n\n  addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\n    for (const row of columnRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const parsedType = parseSchemaTypeString(\n        row.data_type,\n        row.array_dimensions ?? 0\n      );\n      const isExactNumeric =\n        parsedType.name === \"numeric\" || row.udt_name.toLowerCase() === \"numeric\" ||\n        row.udt_name.toLowerCase() === \"decimal\" ||\n        row.udt_name.toLowerCase() === \"money\";\n      table.columns[row.column_name] = {\n        arrayDimensions: row.array_dimensions ?? 0,\n        dataType: row.data_type,\n        defaultExpression: row.default_expression ?? null,\n        enumValues: enumMap.get(row.type_oid),\n        hasDefault: row.has_default,\n        isGenerated: row.is_generated,\n        isNullable: row.is_nullable,\n        isPrimaryKey: false,\n        name: row.column_name,\n        ...(isExactNumeric\n          ? {\n              numericPrecision: parsedType.precision,\n              numericScale: parsedType.scale,\n            }\n          : {}),\n        typeKind: toTypeKind(row.type_kind_code),\n        udtName: row.udt_name,\n      };\n    }\n  }\n\n  addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\n    for (const row of primaryKeyRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const primaryKeyColumns = coerceStringArray(row.columns);\n      row.columns = primaryKeyColumns;\n      table.primaryKey = primaryKeyColumns;\n      for (const columnName of primaryKeyColumns) {\n        const column = table.columns[columnName];\n        if (column) {\n          column.isPrimaryKey = true;\n        }\n      }\n    }\n  }\n\n  addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    for (const row of foreignKeyRows) {\n      const sourceTable = this.ensureTable(row.source_schema, row.source_table);\n      const targetTable = this.ensureTable(row.target_schema, row.target_table);\n      const sourceColumns = coerceStringArray(row.source_columns);\n      const targetColumns = coerceStringArray(row.target_columns);\n      row.source_columns = sourceColumns;\n      row.target_columns = targetColumns;\n\n      const sourceRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"many-to-one\";\n      this.upsertRelation(\n        sourceTable,\n        relationKey(row.constraint_name, row.target_table),\n        {\n          kind: sourceRelationKind,\n          name: row.constraint_name,\n          onDelete: row.on_delete ?? null,\n          onUpdate: row.on_update ?? null,\n          sourceColumns,\n          targetColumns,\n          targetModel: row.target_table,\n          targetSchema: row.target_schema,\n        }\n      );\n\n      const targetRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"one-to-many\";\n      this.upsertRelation(targetTable, relationKey(row.source_table), {\n        kind: targetRelationKind,\n        name: relationKey(row.source_table, row.constraint_name),\n        sourceColumns: targetColumns,\n        targetColumns: sourceColumns,\n        targetModel: row.source_table,\n        targetSchema: row.source_schema,\n      });\n    }\n  }\n\n  addUniqueConstraintRows(rows: UniqueConstraintQueryRow[]) {\n    for (const row of rows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const columns = coerceStringArray(row.columns);\n      table.uniqueConstraints = table.uniqueConstraints ?? [];\n      table.uniqueConstraints.push({\n        columns,\n        name: row.constraint_name,\n      });\n    }\n  }\n\n  addIndexRows(rows: IndexQueryRow[]) {\n    for (const row of rows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const columns = coerceStringArray(row.columns);\n      const rawDirections = coerceStringArray(row.column_directions);\n      const columnDirections = columns.map((_, i) =>\n        rawDirections[i]?.toLowerCase() === \"desc\"\n          ? (\"desc\" as const)\n          : (\"asc\" as const)\n      );\n      // Skip unique indexes that already mirror a unique constraint of the same columns.\n      const uniqueCols = new Set(\n        (table.uniqueConstraints ?? []).map((u) => u.columns.join(\"\\0\"))\n      );\n      if (row.is_unique && uniqueCols.has(columns.join(\"\\0\"))) {\n        continue;\n      }\n      table.indexes = table.indexes ?? [];\n      table.indexes.push({\n        columnDirections,\n        columns,\n        method: row.method ?? null,\n        name: row.index_name,\n        predicate: row.predicate ?? null,\n        unique: Boolean(row.is_unique),\n      });\n    }\n  }\n\n  addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    const bySourceTable = new Map<string, BridgeCandidate>();\n    for (const fk of foreignKeyRows) {\n      const key = tableKey(fk.source_schema, fk.source_table);\n      const current = bySourceTable.get(key) ?? {\n        foreignKeys: [],\n        schema: fk.source_schema,\n        table: fk.source_table,\n      };\n      current.foreignKeys.push(fk);\n      bySourceTable.set(key, current);\n    }\n\n    for (const candidate of bySourceTable.values()) {\n      const bridgeTable =\n        this.schemas[candidate.schema]?.tables[candidate.table];\n      if (!bridgeTable) {\n        continue;\n      }\n\n      const primaryKey = bridgeTable.primaryKey;\n      if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) {\n        continue;\n      }\n\n      const combinedForeignColumns = Array.from(\n        new Set(candidate.foreignKeys.flatMap((fk) => fk.source_columns))\n      );\n      if (\n        combinedForeignColumns.length !== primaryKey.length ||\n        !primaryKey.every((column) => combinedForeignColumns.includes(column))\n      ) {\n        continue;\n      }\n\n      const [first, second] = candidate.foreignKeys;\n      const firstTarget =\n        this.schemas[first.target_schema]?.tables[first.target_table];\n      const secondTarget =\n        this.schemas[second.target_schema]?.tables[second.target_table];\n      if (!(firstTarget && secondTarget)) {\n        continue;\n      }\n\n      this.upsertRelation(firstTarget, relationKey(second.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          first.constraint_name,\n          second.constraint_name\n        ),\n        sourceColumns: first.target_columns,\n        targetColumns: second.target_columns,\n        targetModel: second.target_table,\n        targetSchema: second.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: first.source_columns,\n          targetColumns: second.source_columns,\n        },\n      });\n\n      this.upsertRelation(secondTarget, relationKey(first.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          second.constraint_name,\n          first.constraint_name\n        ),\n        sourceColumns: second.target_columns,\n        targetColumns: first.target_columns,\n        targetModel: first.target_table,\n        targetSchema: first.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: second.source_columns,\n          targetColumns: first.source_columns,\n        },\n      });\n    }\n  }\n\n  toSchemas(): Record<string, IntrospectionSchema> {\n    return this.schemas;\n  }\n\n  private ensureTable(\n    schemaName: string,\n    tableName: string\n  ): IntrospectionTable {\n    if (!this.schemas[schemaName]) {\n      this.schemas[schemaName] = {\n        name: schemaName,\n        tables: {},\n      };\n    }\n\n    const schema = this.schemas[schemaName];\n    if (!schema.tables[tableName]) {\n      schema.tables[tableName] = {\n        columns: {},\n        indexes: [],\n        name: tableName,\n        primaryKey: [],\n        relations: {},\n        schema: schemaName,\n        uniqueConstraints: [],\n      };\n    }\n\n    return schema.tables[tableName];\n  }\n\n  private upsertRelation(\n    table: IntrospectionTable,\n    baseKey: string,\n    relation: IntrospectionRelation\n  ) {\n    let key = baseKey;\n    let suffix = 2;\n    while (table.relations[key]) {\n      key = `${baseKey}_${suffix}`;\n      suffix += 1;\n    }\n    table.relations[key] = relation;\n  }\n}\n","import {\n  type AthenaPostgresPool,\n  createPostgresPool,\n} from \"../postgres/driver.ts\";\nimport {\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  type IndexQueryRow,\n  normalizePostgresCatalogSchemas,\n  POSTGRES_CATALOG_SQL,\n  PostgresCatalogSnapshotAssembler,\n  type PrimaryKeyQueryRow,\n  type UniqueConstraintQueryRow,\n} from \"./postgres-introspection-core.ts\";\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from \"./types.ts\";\n\n/**\n * Constructor options for the PostgreSQL introspection provider.\n */\nexport interface PostgresIntrospectionProviderOptions {\n  connectionString: string;\n  database?: string;\n  schemas?: readonly string[];\n}\n\nclass PgCatalogClient {\n  constructor(private readonly pool: AthenaPostgresPool) {}\n\n  async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\n    const result = await this.pool.query<ColumnQueryRow>(\n      POSTGRES_CATALOG_SQL.columns,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryEnums(): Promise<Map<number, string[]>> {\n    const result = await this.pool.query<EnumQueryRow>(\n      POSTGRES_CATALOG_SQL.enums\n    );\n    const enumMap = new Map<number, string[]>();\n    for (const row of result.rows) {\n      const existing = enumMap.get(row.type_oid) ?? [];\n      existing.push(row.enum_label);\n      enumMap.set(row.type_oid, existing);\n    }\n    return enumMap;\n  }\n\n  async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\n    const result = await this.pool.query<PrimaryKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.primaryKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\n    const result = await this.pool.query<ForeignKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.foreignKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryUniqueConstraints(\n    schemas: string[]\n  ): Promise<UniqueConstraintQueryRow[]> {\n    const result = await this.pool.query<UniqueConstraintQueryRow>(\n      POSTGRES_CATALOG_SQL.uniqueConstraints,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryIndexes(schemas: string[]): Promise<IndexQueryRow[]> {\n    const result = await this.pool.query<IndexQueryRow>(\n      POSTGRES_CATALOG_SQL.indexes,\n      [schemas]\n    );\n    return result.rows;\n  }\n}\n\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = \"postgresql\" as const;\n\n  private readonly connectionString: string;\n  private readonly database: string;\n  private readonly schemas: string[];\n\n  constructor(options: PostgresIntrospectionProviderOptions) {\n    this.connectionString = options.connectionString;\n    this.database = options.database ?? \"postgres\";\n    this.schemas = normalizePostgresCatalogSchemas(options.schemas);\n  }\n\n  async inspect(\n    options?: IntrospectionInspectOptions\n  ): Promise<IntrospectionSnapshot> {\n    const schemas =\n          options?.schemas && options.schemas.length > 0\n            ? normalizePostgresCatalogSchemas(options.schemas)\n            : this.schemas;\n        const pool = await createPostgresPool(this.connectionString);\n        const catalogClient = new PgCatalogClient(pool);\n\n    try {\n      const [\n        columnRows,\n        enumMap,\n        primaryKeyRows,\n        foreignKeyRows,\n        uniqueRows,\n        indexRows,\n      ] = await Promise.all([\n        catalogClient.queryColumns(schemas),\n        catalogClient.queryEnums(),\n        catalogClient.queryPrimaryKeys(schemas),\n        catalogClient.queryForeignKeys(schemas),\n        catalogClient.queryUniqueConstraints(schemas),\n        catalogClient.queryIndexes(schemas),\n      ]);\n\n      const assembler = new PostgresCatalogSnapshotAssembler();\n      assembler.addColumnRows(columnRows, enumMap);\n      assembler.addPrimaryKeyRows(primaryKeyRows);\n      assembler.addForeignKeyRows(foreignKeyRows);\n      assembler.addUniqueConstraintRows(uniqueRows);\n      assembler.addIndexRows(indexRows);\n      assembler.addManyToManyRows(foreignKeyRows);\n\n      return {\n        backend: \"postgresql\",\n        database: this.database,\n        generatedAt: new Date().toISOString(),\n        schemas: assembler.toSchemas(),\n      };\n    } finally {\n      await pool.end();\n    }\n  }\n}\n\n/**\n * Creates a PostgreSQL-backed schema introspection provider.\n */\nexport function createPostgresIntrospectionProvider(\n  options: PostgresIntrospectionProviderOptions\n): SchemaIntrospectionProvider {\n  return new PostgresIntrospectionProvider(options);\n}\n","import {\n\tbuildGatewayCatalogQueries,\n\ttype ColumnQueryRow,\n\ttype EnumQueryRow,\n\ttype ForeignKeyQueryRow,\n\ttype IndexQueryRow,\n\tPostgresCatalogSnapshotAssembler,\n\ttype PrimaryKeyQueryRow,\n\ttype UniqueConstraintQueryRow,\n} from \"../schema/postgres-introspection-core.ts\";\nimport { createPostgresIntrospectionProvider } from \"../schema/postgres-provider.ts\";\nimport type {\n\tIntrospectionInspectOptions,\n\tIntrospectionSnapshot,\n\tSchemaIntrospectionProvider,\n} from \"../schema/types.ts\";\nimport { type AthenaClient, createClient } from \"../v3-client-core.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport type {\n\tGeneratorExperimentalFlags,\n\tGeneratorProviderConfig,\n\tPostgresDirectProviderConfig,\n\tPostgresGatewayProviderConfig,\n\tScyllaDirectProviderConfig,\n} from \"./types.ts\";\n\nclass AthenaGatewayCatalogClient {\n\tconstructor(private readonly client: AthenaClient) {}\n\n\tasync queryRows<T>(query: string): Promise<T[]> {\n\t\tconst result = await this.client.query<T & Record<string, unknown>>(query);\n\t\tif (result.error || result.status < 200 || result.status >= 300) {\n\t\t\tthrow new Error(\n\t\t\t\tresult.error?.message ??\n\t\t\t\t\t`Gateway query failed with status ${result.status}`,\n\t\t\t);\n\t\t}\n\t\treturn (result.data ?? []) as T[];\n\t}\n\n\tasync queryColumns(query: string): Promise<ColumnQueryRow[]> {\n\t\treturn this.queryRows<ColumnQueryRow>(query);\n\t}\n\n\tasync queryEnums(query: string): Promise<Map<number, string[]>> {\n\t\tconst rows = await this.queryRows<EnumQueryRow>(query);\n\t\tconst enumMap = new Map<number, string[]>();\n\t\tfor (const row of rows) {\n\t\t\tconst existing = enumMap.get(row.type_oid) ?? [];\n\t\t\texisting.push(row.enum_label);\n\t\t\tenumMap.set(row.type_oid, existing);\n\t\t}\n\t\treturn enumMap;\n\t}\n\n\tasync queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\n\t\treturn this.queryRows<PrimaryKeyQueryRow>(query);\n\t}\n\n\tasync queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\n\t\treturn this.queryRows<ForeignKeyQueryRow>(query);\n\t}\n}\n\nclass AthenaGatewayPostgresIntrospectionProvider\n\timplements SchemaIntrospectionProvider\n{\n\treadonly backend = \"postgresql\" as const;\n\n\tprivate readonly client: AthenaClient;\n\tprivate readonly schemas: string[];\n\n\tconstructor(private readonly config: PostgresGatewayProviderConfig) {\n\t\t// Set unified `url` as well as `db.url` so root/chatWs resolution uses the\n\t\t// configured gateway and is not poisoned by ambient invalid ATHENA_URL env\n\t\t// placeholders (e.g. unexpanded `${ATHENA_URL}`).\n\t\t// Cast through unknown: createClient generics overflow TS depth (TS2589).\n\t\tthis.client = (\n\t\t\tcreateClient as unknown as (config: unknown) => AthenaClient\n\t\t)({\n\t\t\tbackend: {\n\t\t\t\ttype: this.config.backend ?? \"postgresql\",\n\t\t\t},\n\t\t\t// Multi-tenant gateways reject DEFAULT_CLIENT; prefer explicit config.\n\t\t\t// Also pass process.env so ATHENA_CLIENT / ATHENA_GATEWAY_CLIENT still resolve\n\t\t\t// when the field was not normalized into provider config.\n\t\t\tclient: this.config.client,\n\t\t\tdb: { url: this.config.gatewayUrl },\n\t\t\tenv: typeof process === \"undefined\" ? undefined : process.env,\n\t\t\tkey: this.config.apiKey,\n\t\t\turl: this.config.gatewayUrl,\n\t\t});\n\t\tthis.schemas = normalizeSchemaSelection(this.config.schemas);\n\t}\n\n\tasync inspect(\n\t\toptions?: IntrospectionInspectOptions,\n\t): Promise<IntrospectionSnapshot> {\n\t\tconst schemas =\n\t\t\toptions?.schemas && options.schemas.length > 0\n\t\t\t\t? normalizeSchemaSelection(options.schemas)\n\t\t\t\t: this.schemas;\n\n\t\tconst catalogClient = new AthenaGatewayCatalogClient(this.client);\n\t\tconst queries = buildGatewayCatalogQueries(schemas);\n\n\t\tconst [\n\t\t\tcolumnRows,\n\t\t\tenumMap,\n\t\t\tprimaryKeyRows,\n\t\t\tforeignKeyRows,\n\t\t\tuniqueConstraintRows,\n\t\t\tindexRows,\n\t\t] = await Promise.all([\n\t\t\tcatalogClient.queryColumns(queries.columns),\n\t\t\tcatalogClient.queryEnums(queries.enums),\n\t\t\tcatalogClient.queryPrimaryKeys(queries.primaryKeys),\n\t\t\tcatalogClient.queryForeignKeys(queries.foreignKeys),\n\t\t\tcatalogClient.queryRows<UniqueConstraintQueryRow>(\n\t\t\t\tqueries.uniqueConstraints,\n\t\t\t),\n\t\t\tcatalogClient.queryRows<IndexQueryRow>(queries.indexes),\n\t\t]);\n\n\t\tconst assembler = new PostgresCatalogSnapshotAssembler();\n\t\tassembler.addColumnRows(columnRows, enumMap);\n\t\tassembler.addPrimaryKeyRows(primaryKeyRows);\n\t\tassembler.addForeignKeyRows(foreignKeyRows);\n\t\tassembler.addUniqueConstraintRows(uniqueConstraintRows);\n\t\tassembler.addIndexRows(indexRows);\n\t\tassembler.addManyToManyRows(foreignKeyRows);\n\n\t\treturn {\n\t\t\tbackend: \"postgresql\",\n\t\t\tdatabase: this.config.database,\n\t\t\tgeneratedAt: new Date().toISOString(),\n\t\t\tschemas: assembler.toSchemas(),\n\t\t};\n\t}\n}\n\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\n\treadonly backend = \"scylladb\" as const;\n\n\tconstructor(private readonly config: ScyllaDirectProviderConfig) {}\n\n\tasync inspect(): Promise<IntrospectionSnapshot> {\n\t\tthrow new Error(\n\t\t\t`Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`,\n\t\t);\n\t}\n}\n\nfunction createPostgresProvider(\n\tconfig: PostgresDirectProviderConfig,\n): SchemaIntrospectionProvider {\n\treturn createPostgresIntrospectionProvider({\n\t\tconnectionString: config.connectionString,\n\t\tdatabase: config.database,\n\t\tschemas: normalizeSchemaSelection(config.schemas),\n\t});\n}\n\n/**\n * Resolves a runtime introspection provider from generator config.\n */\nexport function resolveGeneratorProvider(\n\tproviderConfig: GeneratorProviderConfig,\n\texperimentalFlags: GeneratorExperimentalFlags,\n): SchemaIntrospectionProvider {\n\tif (providerConfig.kind === \"postgres\" && providerConfig.mode === \"direct\") {\n\t\treturn createPostgresProvider(providerConfig);\n\t}\n\n\tif (providerConfig.kind === \"postgres\" && providerConfig.mode === \"gateway\") {\n\t\treturn new AthenaGatewayPostgresIntrospectionProvider(providerConfig);\n\t}\n\n\tif (providerConfig.kind === \"scylla\") {\n\t\tif (!experimentalFlags.scyllaProviderContracts) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.\",\n\t\t\t);\n\t\t}\n\t\treturn new ScyllaIntrospectionProvider(providerConfig);\n\t}\n\n\tthrow new Error(\n\t\t`Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? \"unknown\"}`,\n\t);\n}\n","import { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, MigrateCommand } from \"../../types.ts\";\n\nexport type MigrateMode = MigrateCommand[\"mode\"];\n\nconst READ_MODES = new Set<MigrateMode>([\n\t\"status\",\n\t\"plan\",\n\t\"check\",\n\t\"graph\",\n\t\"explain\",\n\t\"drift\",\n\t\"reconcile\",\n\t\"verify\",\n]);\n\nexport function parseMigrateFlags(\n\trest: readonly string[],\n\tmode: MigrateMode,\n): CliCommand {\n\tlet configPath: string | undefined;\n\tlet dryRun = false;\n\tlet json = false;\n\tlet plain = false;\n\tlet yes = false;\n\tlet strict = false;\n\tlet allowDirty = false;\n\tlet applyReconcile = false;\n\tlet explainTarget: string | undefined;\n\tlet resolvedMode = mode;\n\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\tif (resolvedMode === \"status\") {\n\t\t\t\treturn { command: \"help\", topic: \"migrate-status\" };\n\t\t\t}\n\t\t\treturn { command: \"help\", topic: \"migrate\" };\n\t\t}\n\n\t\tif (resolvedMode === \"explain\" && token && !token.startsWith(\"-\") && !explainTarget) {\n\t\t\texplainTarget = token;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--dry-run\") {\n\t\t\tif (READ_MODES.has(resolvedMode)) {\n\t\t\t\tthrow new Error(`--dry-run cannot be combined with migrate ${resolvedMode}.`);\n\t\t\t}\n\t\t\tdryRun = true;\n\t\t\tif (resolvedMode !== \"repair\") {\n\t\t\t\tresolvedMode = \"dry-run\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--apply\") {\n\t\t\tif (resolvedMode !== \"reconcile\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected \"--apply\". Use: athena-js migrate reconcile --apply',\n\t\t\t\t);\n\t\t\t}\n\t\t\tapplyReconcile = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--yes\" || token === \"-y\") {\n\t\t\tyes = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--strict\") {\n\t\t\tstrict = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--allow-dirty-migrations\" || token === \"--allow-dirty\") {\n\t\t\tallowDirty = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--plain\" || token === \"--no-color\") {\n\t\t\tplain = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow unknownOptionError(token ?? \"\", \"migrate\");\n\t}\n\n\tif (resolvedMode === \"explain\" && !explainTarget) {\n\t\treturn { command: \"help\", topic: \"migrate\" };\n\t}\n\n\treturn {\n\t\tcommand: \"migrate\",\n\t\tconfigPath,\n\t\tdryRun: resolvedMode === \"dry-run\" || (resolvedMode === \"repair\" && dryRun),\n\t\tallowDirty,\n\t\tapplyReconcile,\n\t\texplainTarget,\n\t\tjson,\n\t\tmode: resolvedMode,\n\t\tplain,\n\t\tstrict,\n\t\tyes,\n\t};\n}\n","import { formatObjectRef, type SchemaObjectRef, type SqlSourceLocation } from \"./ast.ts\";\nimport type { DependencyConfidence } from \"./semantic-ir.ts\";\n\nexport type DriftClassification =\n  | \"physical_schema_drift\"\n  | \"missing_dependency\"\n  | \"baseline_prerequisite\"\n  | \"ordering\"\n  | \"dropped_before_use\"\n  | \"dynamic_sql\"\n  | \"unresolved_search_path\"\n  | \"unverified\"\n  | \"parse_error\";\n\nexport interface MigrationDiagnostic {\n  classification: DriftClassification;\n  code: string;\n  confidence?: DependencyConfidence;\n  expectedProvider?: {\n    filename: string;\n    version: number;\n  };\n  expectedSource?: \"baseline\" | \"migration\" | \"embedded\" | \"unknown\";\n  ledgerState?: \"applied\" | \"pending\" | \"missing\";\n  location?: SqlSourceLocation;\n  message: string;\n  object: SchemaObjectRef;\n  physicalState?: \"present\" | \"missing\";\n  requiredBy?: string;\n  snippet?: string;\n  statementIndex?: number;\n}\n\nexport const DIAGNOSTIC_CODES = {\n  DEP_MISSING: \"ATHENA-MIG-DEP-001\",\n  COL_MISSING: \"ATHENA-MIG-DEP-002\",\n  BASELINE: \"ATHENA-MIG-DEP-003\",\n  DRIFT: \"ATHENA-MIG-DRIFT-001\",\n  ORDER: \"ATHENA-MIG-ORD-001\",\n  DYNAMIC: \"ATHENA-MIG-DYN-001\",\n  PARSE: \"ATHENA-MIG-PARSE-001\",\n  PREFLIGHT: \"ATHENA-MIG-PREFLIGHT\",\n} as const;\n\nexport function formatDiagnostic(diagnostic: MigrationDiagnostic): string {\n  const lines = [\n    `ERROR ${diagnostic.code}`,\n    \"\",\n    diagnostic.message,\n  ];\n  if (diagnostic.location) {\n    lines.push(\n      \"\",\n      `${diagnostic.location.filename}:${diagnostic.location.start.line}:${diagnostic.location.start.column}`\n    );\n  }\n  if (diagnostic.snippet) {\n    lines.push(\"\", diagnostic.snippet);\n  }\n  lines.push(\"\", `Missing dependency:`, `  ${formatObjectRef(diagnostic.object)}`);\n  if (diagnostic.requiredBy) {\n    lines.push(\"\", `Statement:`, `  ${diagnostic.requiredBy}`);\n  }\n  if (diagnostic.expectedSource) {\n    lines.push(\n      \"\",\n      `Expected source:`,\n      diagnostic.expectedSource === \"migration\" && diagnostic.expectedProvider\n        ? `  earlier migration ${diagnostic.expectedProvider.filename}`\n        : diagnostic.expectedSource === \"baseline\"\n          ? `  existing database prerequisite`\n          : diagnostic.expectedSource === \"embedded\"\n            ? `  Embedded Auth migration`\n            : `  ${diagnostic.expectedSource}`,\n    );\n  }\n  if (diagnostic.expectedProvider) {\n    lines.push(\n      \"\",\n      `Expected provider:`,\n      `  ${diagnostic.expectedProvider.filename}`\n    );\n  }\n  if (diagnostic.ledgerState) {\n    lines.push(`Ledger: ${diagnostic.ledgerState}`);\n  }\n  if (diagnostic.physicalState) {\n    lines.push(`Physical database: ${diagnostic.physicalState}`);\n  }\n  if (diagnostic.classification) {\n    lines.push(\"\", `Classification:`, `  ${diagnostic.classification.replaceAll(\"_\", \" \")}`);\n  }\n  return lines.join(\"\\n\");\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport {\n  ANALYSIS_IR_VERSION,\n  ANALYZER_ID,\n  ANALYZER_SEMANTICS_VERSION,\n  PARSER_ID,\n} from \"./ast.ts\";\nimport type { MigrationAnalysis } from \"./semantic-ir.ts\";\n\nexport const ANALYSIS_CACHE_FILENAME = \"analysis-v2.json\";\n\ninterface CacheFile {\n  analyzerId: string;\n  analyzerSemanticsVersion: number;\n  irVersion: number;\n  parserId: string;\n  records: Record<string, MigrationAnalysis>;\n}\n\nfunction cachePath(cwd: string): string {\n  return join(cwd, \".athena\", \"migrations\", ANALYSIS_CACHE_FILENAME);\n}\n\nfunction cacheCompatible(parsed: CacheFile): boolean {\n  return (\n    parsed.irVersion === ANALYSIS_IR_VERSION &&\n    parsed.parserId === PARSER_ID &&\n    parsed.analyzerId === ANALYZER_ID &&\n    parsed.analyzerSemanticsVersion === ANALYZER_SEMANTICS_VERSION\n  );\n}\n\nexport async function loadAnalysisCache(\n  cwd: string\n): Promise<Map<string, MigrationAnalysis>> {\n  try {\n    const raw = await readFile(cachePath(cwd), \"utf8\");\n    const parsed = JSON.parse(raw) as CacheFile;\n    if (!cacheCompatible(parsed)) {\n      return new Map();\n    }\n    return new Map(Object.entries(parsed.records ?? {}));\n  } catch {\n    return new Map();\n  }\n}\n\nexport async function saveAnalysisCache(\n  cwd: string,\n  analyses: readonly MigrationAnalysis[]\n): Promise<void> {\n  const records: Record<string, MigrationAnalysis> = {};\n  for (const analysis of analyses) {\n    records[cacheKey(analysis.checksum, analysis.filename)] = analysis;\n  }\n  const dir = join(cwd, \".athena\", \"migrations\");\n  await mkdir(dir, { recursive: true });\n  const payload: CacheFile = {\n    analyzerId: ANALYZER_ID,\n    analyzerSemanticsVersion: ANALYZER_SEMANTICS_VERSION,\n    irVersion: ANALYSIS_IR_VERSION,\n    parserId: PARSER_ID,\n    records,\n  };\n  await writeFile(cachePath(cwd), `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n}\n\nexport function cacheKey(checksum: string, filename: string): string {\n  return `${ANALYZER_ID}:${checksum}:${filename}`;\n}\n","import { parse } from \"pgsql-parser\";\n\nimport { PARSER_ID } from \"./ast.ts\";\n\nexport { PARSER_ID };\n\nexport type PgAstNode = Record<string, unknown>;\n\nexport interface ParsedStatement {\n  kind: string;\n  length: number;\n  location: number;\n  node: PgAstNode;\n}\n\nexport interface ParseSqlResult {\n  parserId: string;\n  statements: ParsedStatement[];\n  version: number;\n}\n\nfunction asRecord(value: unknown): PgAstNode | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as PgAstNode;\n  }\n  return undefined;\n}\n\nfunction unwrapStmt(wrapped: unknown): ParsedStatement | undefined {\n  const wrapper = asRecord(wrapped);\n  if (!wrapper) {\n    return undefined;\n  }\n  const stmt = asRecord(wrapper.stmt) ?? wrapper;\n  const keys = Object.keys(stmt);\n  const kind = keys[0] ?? \"Unknown\";\n  const node = asRecord(stmt[kind]) ?? stmt;\n  return {\n    kind,\n    length: typeof wrapper.stmt_len === \"number\" ? wrapper.stmt_len : 0,\n    location: typeof wrapper.stmt_location === \"number\" ? wrapper.stmt_location : 0,\n    node,\n  };\n}\n\n/**\n * Parse PostgreSQL SQL with libpg-query (pgsql-parser). Not a regex scanner.\n */\nexport async function parsePostgresSql(sql: string): Promise<ParseSqlResult> {\n  const result = (await parse(sql)) as {\n    stmts?: unknown[];\n    version?: number;\n  };\n  const statements: ParsedStatement[] = [];\n  for (const wrapped of result.stmts ?? []) {\n    const parsed = unwrapStmt(wrapped);\n    if (parsed) {\n      statements.push(parsed);\n    }\n  }\n  return {\n    parserId: PARSER_ID,\n    statements,\n    version: result.version ?? 0,\n  };\n}\n\nexport function pgString(node: unknown): string | undefined {\n  const record = asRecord(node);\n  if (!record) {\n    return undefined;\n  }\n  const inner = asRecord(record.String);\n  if (inner && typeof inner.sval === \"string\") {\n    return inner.sval;\n  }\n  if (typeof record.sval === \"string\") {\n    return record.sval;\n  }\n  if (typeof record.str === \"string\") {\n    return record.str;\n  }\n  return undefined;\n}\n\nexport function pgNameList(nodes: unknown): string[] {\n  if (!Array.isArray(nodes)) {\n    return [];\n  }\n  return nodes\n    .map((item) => pgString(item))\n    .filter((item): item is string => Boolean(item));\n}\n\nexport function walkAst(\n  node: unknown,\n  visit: (kind: string, value: PgAstNode, parent: PgAstNode | undefined) => void,\n  parent?: PgAstNode\n): void {\n  if (!node) {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (const item of node) {\n      walkAst(item, visit, parent);\n    }\n    return;\n  }\n  const record = asRecord(node);\n  if (!record) {\n    return;\n  }\n  const keys = Object.keys(record);\n  if (keys.length === 1 && asRecord(record[keys[0]])) {\n    visit(keys[0], asRecord(record[keys[0]]) as PgAstNode, parent);\n    walkAst(record[keys[0]], visit, asRecord(record[keys[0]]));\n    return;\n  }\n  for (const value of Object.values(record)) {\n    walkAst(value, visit, record);\n  }\n}\n","import type { TableRef } from \"./ast.ts\";\n\nexport interface PlpgsqlBindings {\n\tparameters: Set<string>;\n\trowVariables: Map<string, TableRef>;\n\tvariables: Set<string>;\n}\n\nexport function emptyPlpgsqlBindings(\n\tparameters: readonly string[] = [],\n): PlpgsqlBindings {\n\tconst names = new Set(\n\t\tparameters.filter((name) => name.trim().length > 0),\n\t);\n\treturn {\n\t\tparameters: names,\n\t\trowVariables: new Map(),\n\t\tvariables: new Set(names),\n\t};\n}\n\nexport function isProceduralName(\n\tbindings: PlpgsqlBindings | undefined,\n\tname: string,\n): boolean {\n\tif (!bindings) {\n\t\treturn false;\n\t}\n\treturn bindings.variables.has(name) || bindings.parameters.has(name);\n}\n\nfunction declareSection(body: string): string | undefined {\n\tconst declareMatch = /\\bDECLARE\\b/i.exec(body);\n\tif (!declareMatch || declareMatch.index === undefined) {\n\t\treturn undefined;\n\t}\n\tconst from = declareMatch.index + declareMatch[0].length;\n\tconst beginMatch = /\\bBEGIN\\b/i.exec(body.slice(from));\n\tif (!beginMatch || beginMatch.index === undefined) {\n\t\treturn undefined;\n\t}\n\treturn body.slice(from, from + beginMatch.index);\n}\n\nfunction stripLineComment(line: string): string {\n\tconst index = line.indexOf(\"--\");\n\tif (index === -1) {\n\t\treturn line.trim();\n\t}\n\treturn line.slice(0, index).trim();\n}\n\nfunction tableFromRowType(typeName: string): TableRef {\n\tconst parts = typeName.split(\".\").filter((part) => part.length > 0);\n\tif (parts.length >= 2) {\n\t\treturn {\n\t\t\tkind: \"table\",\n\t\t\tname: parts[parts.length - 1] ?? typeName,\n\t\t\tschema: parts[0] ?? \"public\",\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"table\",\n\t\tname: typeName,\n\t\tschema: \"public\",\n\t};\n}\n\nexport function parsePlpgsqlBindings(\n\tbody: string,\n\tparameters: readonly string[] = [],\n): PlpgsqlBindings {\n\tconst bindings = emptyPlpgsqlBindings(parameters);\n\tconst section = declareSection(body);\n\tif (!section) {\n\t\treturn bindings;\n\t}\n\tfor (const rawLine of section.split(\";\")) {\n\t\tconst line = stripLineComment(rawLine);\n\t\tif (line.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst rowType = /^([A-Za-z_][\\w$]*)\\s+(?:CONSTANT\\s+)?((?:[A-Za-z_][\\w$]*\\.)?[A-Za-z_][\\w$]*)\\s*%ROWTYPE\\b/i.exec(\n\t\t\tline,\n\t\t);\n\t\tif (rowType) {\n\t\t\tconst name = rowType[1];\n\t\t\tconst typeName = rowType[2];\n\t\t\tif (name && typeName) {\n\t\t\t\tbindings.variables.add(name);\n\t\t\t\tbindings.rowVariables.set(name, tableFromRowType(typeName));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst scalar = /^([A-Za-z_][\\w$]*)\\s+/u.exec(line);\n\t\tif (scalar?.[1] && !/^ALIAS\\b/i.test(line.slice(scalar[0].length))) {\n\t\t\tbindings.variables.add(scalar[1]);\n\t\t}\n\t}\n\treturn bindings;\n}\n","import {\n\tformatObjectRef,\n\tlocationFromOffset,\n\ttype SchemaObjectRef,\n\ttype SequenceRef,\n\ttype TableRef,\n} from \"./ast.ts\";\nimport {\n\tisProceduralName,\n\ttype PlpgsqlBindings,\n} from \"./plpgsql-bindings.ts\";\nimport {\n\ttype PgAstNode,\n\tpgNameList,\n\tpgString,\n} from \"./parser.ts\";\nimport type {\n\tDependencyCategory,\n\tDependencyConfidence,\n\tNameResolution,\n\tSemanticDependency,\n} from \"./semantic-ir.ts\";\n\nconst QUERY_KINDS = new Set([\n\t\"SelectStmt\",\n\t\"InsertStmt\",\n\t\"UpdateStmt\",\n\t\"DeleteStmt\",\n]);\n\ninterface QueryScope {\n\tparent?: QueryScope;\n\tctes: Set<string>;\n\taliases: Map<string, { kind: \"cte\" | \"relation\"; table?: TableRef }>;\n}\n\nexport interface QueryDepContext {\n\tbaseOffset: number;\n\tfilename: string;\n\tproceduralBindings?: PlpgsqlBindings;\n\tsql: string;\n}\n\nfunction asRecord(value: unknown): PgAstNode | undefined {\n\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as PgAstNode;\n\t}\n\treturn undefined;\n}\n\nfunction unwrap(node: unknown, kind: string): PgAstNode | undefined {\n\tconst record = asRecord(node);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst inner = asRecord(record[kind]);\n\treturn inner ?? record;\n}\n\nfunction snippetAt(sql: string, offset: number, length = 48): string {\n\tconst start = Math.max(0, offset);\n\treturn sql\n\t\t.slice(start, start + length)\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n}\n\nfunction dep(\n\tcategory: DependencyCategory,\n\tobject: SchemaObjectRef,\n\tconfidence: DependencyConfidence,\n\tctx: QueryDepContext,\n\tlocationOffset: number,\n\tresolution: NameResolution,\n\texplicitlyQualified: boolean,\n\tsnippet?: string,\n): SemanticDependency {\n\treturn {\n\t\tcategory,\n\t\tconfidence,\n\t\texplicitlyQualified,\n\t\tlocation: locationFromOffset(\n\t\t\tctx.filename,\n\t\t\tctx.sql,\n\t\t\tctx.baseOffset + locationOffset,\n\t\t),\n\t\tobject,\n\t\tresolution,\n\t\tsnippet:\n\t\t\tsnippet ?? snippetAt(ctx.sql, ctx.baseOffset + locationOffset),\n\t};\n}\n\nfunction emptyScope(parent?: QueryScope): QueryScope {\n\treturn {\n\t\taliases: new Map(parent?.aliases),\n\t\tctes: new Set(parent?.ctes),\n\t\tparent,\n\t};\n}\n\nfunction hasCte(scope: QueryScope, name: string): boolean {\n\tlet current: QueryScope | undefined = scope;\n\twhile (current) {\n\t\tif (current.ctes.has(name)) {\n\t\t\treturn true;\n\t\t}\n\t\tcurrent = current.parent;\n\t}\n\treturn false;\n}\n\nfunction cteEntries(\n\twithClause: unknown,\n): Array<{ name: string; query: unknown }> {\n\tconst clause = unwrap(withClause, \"WithClause\") ?? asRecord(withClause);\n\tif (!clause) {\n\t\treturn [];\n\t}\n\tconst ctes = Array.isArray(clause.ctes) ? clause.ctes : [];\n\tconst entries: Array<{ name: string; query: unknown }> = [];\n\tfor (const item of ctes) {\n\t\tconst cte = unwrap(item, \"CommonTableExpr\") ?? asRecord(item);\n\t\tif (!cte || typeof cte.ctename !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tentries.push({ name: cte.ctename, query: cte.ctequery });\n\t}\n\treturn entries;\n}\n\nfunction isRecursiveWith(withClause: unknown): boolean {\n\tconst clause = unwrap(withClause, \"WithClause\") ?? asRecord(withClause);\n\treturn Boolean(clause?.recursive);\n}\n\nfunction constString(node: unknown): string | undefined {\n\tconst direct = pgString(node);\n\tif (direct) {\n\t\treturn direct;\n\t}\n\tconst record = asRecord(node);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst aConst = unwrap(record, \"A_Const\") ?? record;\n\tconst fromSval = pgString(aConst.sval) ?? pgString(aConst);\n\tif (fromSval) {\n\t\treturn fromSval;\n\t}\n\tconst cast = unwrap(record, \"TypeCast\") ?? asRecord(record.TypeCast);\n\tif (cast) {\n\t\treturn constString(cast.arg);\n\t}\n\treturn undefined;\n}\n\nfunction firstFuncArg(node: PgAstNode): unknown {\n\tif (Array.isArray(node.args) && node.args.length > 0) {\n\t\treturn node.args[0];\n\t}\n\treturn undefined;\n}\n\nfunction sequenceRefFromLiteral(raw: string): SequenceRef {\n\tconst trimmed = raw.replaceAll('\"', \"\").trim();\n\tconst parts = trimmed.split(\".\").filter((part) => part.length > 0);\n\tif (parts.length >= 2) {\n\t\treturn {\n\t\t\tkind: \"sequence\",\n\t\t\tname: parts[parts.length - 1],\n\t\t\tschema: parts[0],\n\t\t};\n\t}\n\treturn { kind: \"sequence\", name: trimmed, schema: \"\" };\n}\n\nfunction emitRangeVar(\n\tvalue: PgAstNode,\n\tscope: QueryScope,\n\tctx: QueryDepContext,\n\tinto: SemanticDependency[],\n): void {\n\tconst relname = typeof value.relname === \"string\" ? value.relname : undefined;\n\tif (!relname) {\n\t\treturn;\n\t}\n\tconst explicitlyQualified = typeof value.schemaname === \"string\";\n\tconst aliasNode =\n\t\tasRecord(asRecord(value.alias)?.Alias) ?? asRecord(value.alias);\n\tconst alias =\n\t\t(aliasNode && typeof aliasNode.aliasname === \"string\"\n\t\t\t? aliasNode.aliasname\n\t\t\t: relname) ?? relname;\n\tconst location = typeof value.location === \"number\" ? value.location : 0;\n\tif (!explicitlyQualified && hasCte(scope, relname)) {\n\t\tscope.aliases.set(alias, { kind: \"cte\" });\n\t\tscope.aliases.set(relname, { kind: \"cte\" });\n\t\treturn;\n\t}\n\tif (!explicitlyQualified && isProceduralName(ctx.proceduralBindings, relname)) {\n\t\treturn;\n\t}\n\tconst schema = explicitlyQualified ? String(value.schemaname) : \"\";\n\tconst table: TableRef = { kind: \"table\", name: relname, schema };\n\tscope.aliases.set(alias, { kind: \"relation\", table });\n\tscope.aliases.set(relname, { kind: \"relation\", table });\n\tif (schema) {\n\t\tscope.aliases.set(`${schema}.${relname}`, { kind: \"relation\", table });\n\t}\n\tconst resolution: NameResolution = explicitlyQualified\n\t\t? \"exact\"\n\t\t: \"search_path\";\n\tconst confidence: DependencyConfidence = explicitlyQualified\n\t\t? \"certain\"\n\t\t: \"probable\";\n\tinto.push(\n\t\tdep(\"REQUIRES_TABLE\", table, confidence, ctx, location, resolution, explicitlyQualified),\n\t);\n\tinto.push(\n\t\tdep(\"READS\", table, confidence, ctx, location, resolution, explicitlyQualified),\n\t);\n\tif (schema && schema !== \"pg_catalog\") {\n\t\tinto.push(\n\t\t\tdep(\n\t\t\t\t\"REQUIRES_SCHEMA\",\n\t\t\t\t{ kind: \"schema\", name: schema },\n\t\t\t\t\"certain\",\n\t\t\t\tctx,\n\t\t\t\tlocation,\n\t\t\t\t\"exact\",\n\t\t\t\ttrue,\n\t\t\t),\n\t\t);\n\t}\n}\n\nfunction emitFuncCall(\n\tvalue: PgAstNode,\n\tscope: QueryScope,\n\tctx: QueryDepContext,\n\tinto: SemanticDependency[],\n): void {\n\tconst names = pgNameList(value.funcname);\n\tif (names.length === 0) {\n\t\treturn;\n\t}\n\tconst qualified = names.length > 1;\n\tconst schema = qualified ? names[0] : \"\";\n\tconst name = names[names.length - 1];\n\tconst location = typeof value.location === \"number\" ? value.location : 0;\n\tif (name === \"nextval\" || name === \"setval\") {\n\t\tconst literal = constString(firstFuncArg(value));\n\t\tif (literal) {\n\t\t\tconst sequence = sequenceRefFromLiteral(literal);\n\t\t\tinto.push(\n\t\t\t\tdep(\n\t\t\t\t\t\"REQUIRES_SEQUENCE\",\n\t\t\t\t\tsequence,\n\t\t\t\t\tsequence.schema ? \"certain\" : \"probable\",\n\t\t\t\t\tctx,\n\t\t\t\t\tlocation,\n\t\t\t\t\tsequence.schema ? \"exact\" : \"search_path\",\n\t\t\t\t\tBoolean(sequence.schema),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\tif (name === \"format\") {\n\t\treturn;\n\t}\n\tconst resolution: NameResolution = qualified\n\t\t? schema === \"pg_catalog\"\n\t\t\t? \"catalog_builtin\"\n\t\t\t: \"exact\"\n\t\t: \"search_path\";\n\tconst confidence: DependencyConfidence = qualified ? \"certain\" : \"probable\";\n\tconst object: SchemaObjectRef = { kind: \"function\", name, schema };\n\tinto.push(\n\t\tdep(\"INVOKES\", object, confidence, ctx, location, resolution, qualified),\n\t);\n\tinto.push(\n\t\tdep(\n\t\t\t\"REQUIRES_FUNCTION\",\n\t\t\tobject,\n\t\t\tconfidence,\n\t\t\tctx,\n\t\t\tlocation,\n\t\t\tresolution,\n\t\t\tqualified,\n\t\t),\n\t);\n\tvoid scope;\n}\n\nfunction emitColumnRef(\n\tvalue: PgAstNode,\n\tscope: QueryScope,\n\tctx: QueryDepContext,\n\tinto: SemanticDependency[],\n): void {\n\tconst fields = Array.isArray(value.fields) ? value.fields : [];\n\tconst names = fields\n\t\t.map((field) => pgString(field))\n\t\t.filter((item): item is string => Boolean(item));\n\tif (names.length < 2) {\n\t\treturn;\n\t}\n\tconst column = names[names.length - 1];\n\tconst alias = names[names.length - 2];\n\tconst binding = scope.aliases.get(alias);\n\tif (!binding || binding.kind === \"cte\" || !binding.table) {\n\t\treturn;\n\t}\n\tconst location = typeof value.location === \"number\" ? value.location : 0;\n\tinto.push(\n\t\tdep(\n\t\t\t\"REQUIRES_COLUMN\",\n\t\t\t{\n\t\t\t\tkind: \"column\",\n\t\t\t\tname: column,\n\t\t\t\tschema: binding.table.schema,\n\t\t\t\ttable: binding.table.name,\n\t\t\t},\n\t\t\tbinding.table.schema ? \"certain\" : \"probable\",\n\t\t\tctx,\n\t\t\tlocation,\n\t\t\tbinding.table.schema ? \"exact\" : \"search_path\",\n\t\t\tBoolean(binding.table.schema),\n\t\t),\n\t);\n}\n\nfunction analyzeQueryStmt(\n\tstmt: PgAstNode,\n\tparent: QueryScope,\n\tctx: QueryDepContext,\n\tinto: SemanticDependency[],\n): void {\n\tconst scope = emptyScope(parent);\n\tconst withClause = stmt.withClause;\n\tconst entries = cteEntries(withClause);\n\tconst recursive = isRecursiveWith(withClause);\n\tfor (const cte of entries) {\n\t\tif (recursive) {\n\t\t\tscope.ctes.add(cte.name);\n\t\t}\n\t\twalkNode(cte.query, scope, ctx, into);\n\t\tscope.ctes.add(cte.name);\n\t\tscope.aliases.set(cte.name, { kind: \"cte\" });\n\t}\n\tconst rest: PgAstNode = { ...stmt };\n\tdelete rest.withClause;\n\twalkNode(rest.relation, scope, ctx, into);\n\twalkNode(rest.fromClause, scope, ctx, into);\n\tconst remainder: PgAstNode = { ...rest };\n\tdelete remainder.relation;\n\tdelete remainder.fromClause;\n\twalkNode(remainder, scope, ctx, into);\n}\n\nfunction walkNode(\n\tnode: unknown,\n\tscope: QueryScope,\n\tctx: QueryDepContext,\n\tinto: SemanticDependency[],\n): void {\n\tif (!node) {\n\t\treturn;\n\t}\n\tif (Array.isArray(node)) {\n\t\tfor (const item of node) {\n\t\t\twalkNode(item, scope, ctx, into);\n\t\t}\n\t\treturn;\n\t}\n\tconst record = asRecord(node);\n\tif (!record) {\n\t\treturn;\n\t}\n\tconst keys = Object.keys(record);\n\tif (keys.length === 1 && asRecord(record[keys[0]])) {\n\t\tconst kind = keys[0];\n\t\tconst inner = asRecord(record[kind]);\n\t\tif (!inner) {\n\t\t\treturn;\n\t\t}\n\t\tif (QUERY_KINDS.has(kind)) {\n\t\t\tanalyzeQueryStmt(inner, scope, ctx, into);\n\t\t\treturn;\n\t\t}\n\t\tif (kind === \"RangeVar\") {\n\t\t\temitRangeVar(inner, scope, ctx, into);\n\t\t\treturn;\n\t\t}\n\t\tif (kind === \"FuncCall\") {\n\t\t\temitFuncCall(inner, scope, ctx, into);\n\t\t\twalkNode(inner.args, scope, ctx, into);\n\t\t\treturn;\n\t\t}\n\t\tif (kind === \"ColumnRef\") {\n\t\t\temitColumnRef(inner, scope, ctx, into);\n\t\t\treturn;\n\t\t}\n\t\tif (kind === \"Alias\") {\n\t\t\treturn;\n\t\t}\n\t\twalkNode(inner, scope, ctx, into);\n\t\treturn;\n\t}\n\tif (\n\t\ttypeof record.relname === \"string\" &&\n\t\trecord.funcname == null &&\n\t\t!Array.isArray(record.tableElts) &&\n\t\t!Array.isArray(record.targetList) &&\n\t\t!Array.isArray(record.cmds)\n\t) {\n\t\temitRangeVar(record, scope, ctx, into);\n\t\treturn;\n\t}\n\tif (Array.isArray(record.funcname)) {\n\t\temitFuncCall(record, scope, ctx, into);\n\t\twalkNode(record.args, scope, ctx, into);\n\t\treturn;\n\t}\n\tif (Array.isArray(record.fields) && record.relname == null) {\n\t\temitColumnRef(record, scope, ctx, into);\n\t\treturn;\n\t}\n\tfor (const value of Object.values(record)) {\n\t\twalkNode(value, scope, ctx, into);\n\t}\n}\n\nfunction looksLikeQueryStmt(record: PgAstNode): boolean {\n\treturn (\n\t\tArray.isArray(record.fromClause) ||\n\t\tArray.isArray(record.targetList) ||\n\t\trecord.withClause != null ||\n\t\trecord.selectStmt != null ||\n\t\trecord.valuesLists != null ||\n\t\t(record.relation != null &&\n\t\t\t(record.cols != null ||\n\t\t\t\trecord.targetList != null ||\n\t\t\t\trecord.whereClause != null ||\n\t\t\t\trecord.returningList != null ||\n\t\t\t\trecord.fromClause != null))\n\t);\n}\n\nexport function extractQueryDependencies(\n\tnode: unknown,\n\tfilename: string,\n\tsql: string,\n\tbaseOffset: number,\n\toptions?: { proceduralBindings?: PlpgsqlBindings },\n): SemanticDependency[] {\n\tconst into: SemanticDependency[] = [];\n\tconst ctx: QueryDepContext = {\n\t\tbaseOffset,\n\t\tfilename,\n\t\tproceduralBindings: options?.proceduralBindings,\n\t\tsql,\n\t};\n\tconst record = asRecord(node);\n\tif (record && looksLikeQueryStmt(record)) {\n\t\tanalyzeQueryStmt(record, emptyScope(), ctx, into);\n\t\treturn uniqueDeps(into);\n\t}\n\twalkNode(node, emptyScope(), ctx, into);\n\treturn uniqueDeps(into);\n}\n\nexport function writeTargetFromNode(node: unknown): {\n\texplicitlyQualified: boolean;\n\ttable: TableRef;\n} | undefined {\n\tconst record = asRecord(node);\n\tconst rel =\n\t\tunwrap(record?.relation, \"RangeVar\") ??\n\t\tasRecord(asRecord(record?.relation)?.RangeVar) ??\n\t\tasRecord(record?.relation);\n\tif (!rel || typeof rel.relname !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst explicitlyQualified = typeof rel.schemaname === \"string\";\n\treturn {\n\t\texplicitlyQualified,\n\t\ttable: {\n\t\t\tkind: \"table\",\n\t\t\tname: rel.relname,\n\t\t\tschema: explicitlyQualified ? String(rel.schemaname) : \"\",\n\t\t},\n\t};\n}\n\nexport function uniqueDeps(\n\tdependencies: SemanticDependency[],\n): SemanticDependency[] {\n\tconst seen = new Set<string>();\n\tconst result: SemanticDependency[] = [];\n\tfor (const item of dependencies) {\n\t\tconst key = `${item.statementIndex ?? \"\"}:${item.category}:${item.confidence}:${item.resolution ?? \"\"}:${formatObjectRef(item.object)}:${item.object.kind}`;\n\t\tif (seen.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(key);\n\t\tresult.push(item);\n\t}\n\treturn result;\n}\n","import type { MigrationFile } from \"../types.ts\";\nimport {\n  locationFromOffset,\n  PARSER_ID,\n  type SchemaObjectRef,\n  type SqlSourceLocation,\n} from \"./ast.ts\";\nimport {\n  type PgAstNode,\n  parsePostgresSql,\n  pgNameList,\n  pgString,\n} from \"./parser.ts\";\nimport type {\n  DependencyCategory,\n  DependencyConfidence,\n  MigrationAnalysis,\n  MigrationEffects,\n  SemanticDependency,\n  SemanticStatement,\n  StatementKind,\n} from \"./semantic-ir.ts\";\nimport {\n  extractQueryDependencies,\n  uniqueDeps,\n  writeTargetFromNode,\n} from \"./query-deps.ts\";\nimport { parsePlpgsqlBindings } from \"./plpgsql-bindings.ts\";\n\nconst DEFAULT_SCHEMA = \"public\";\n\nfunction asRecord(value: unknown): PgAstNode | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as PgAstNode;\n  }\n  return undefined;\n}\n\nfunction dep(\n  category: DependencyCategory,\n  object: SchemaObjectRef,\n  confidence: DependencyConfidence,\n  location?: SqlSourceLocation,\n  snippet?: string,\n): SemanticDependency {\n  return { category, confidence, location, object, snippet };\n}\n\nfunction defElemArgString(options: unknown, name: string): string | undefined {\n  if (!Array.isArray(options)) {\n    return undefined;\n  }\n  for (const option of options) {\n    const def = asRecord(asRecord(option)?.DefElem) ?? asRecord(option);\n    if (!def || def.defname !== name) {\n      continue;\n    }\n    const arg = def.arg;\n    const direct = pgString(arg);\n    if (direct) {\n      return direct;\n    }\n    const list = asRecord(asRecord(arg)?.List);\n    const items = Array.isArray(list?.items)\n      ? list.items\n      : Array.isArray(asRecord(arg)?.items)\n        ? (asRecord(arg)?.items as unknown[])\n        : undefined;\n    if (items && items[0]) {\n      return pgString(items[0]);\n    }\n  }\n  return undefined;\n}\n\nfunction isSqlWordStart(body: string, index: number): boolean {\n  if (index === 0) {\n    return true;\n  }\n  return !/[\\w$]/u.test(body[index - 1] ?? \"\");\n}\n\nfunction readDollarTag(body: string, index: number): string | undefined {\n  const match = /^\\$[A-Za-z0-9_]*\\$/u.exec(body.slice(index));\n  return match?.[0];\n}\n\n/**\n * Advance through SQL so WITH … (SELECT …) … ; stays one statement.\n * Nested SELECT inside CTE parentheses must not start a new fragment.\n */\nfunction endOfSqlStatement(body: string, start: number): number {\n  let index = start;\n  let depth = 0;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let inSingle = false;\n  let dollarTag: string | undefined;\n  while (index < body.length) {\n    const char = body[index];\n    const next = body[index + 1];\n    if (inLineComment) {\n      if (char === \"\\n\") {\n        inLineComment = false;\n      }\n      index += 1;\n      continue;\n    }\n    if (inBlockComment) {\n      if (char === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        index += 2;\n        continue;\n      }\n      index += 1;\n      continue;\n    }\n    if (dollarTag) {\n      if (body.startsWith(dollarTag, index)) {\n        index += dollarTag.length;\n        dollarTag = undefined;\n        continue;\n      }\n      index += 1;\n      continue;\n    }\n    if (inSingle) {\n      if (char === \"'\" && next === \"'\") {\n        index += 2;\n        continue;\n      }\n      if (char === \"'\") {\n        inSingle = false;\n      }\n      index += 1;\n      continue;\n    }\n    if (char === \"-\" && next === \"-\") {\n      inLineComment = true;\n      index += 2;\n      continue;\n    }\n    if (char === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      index += 2;\n      continue;\n    }\n    if (char === \"'\") {\n      inSingle = true;\n      index += 1;\n      continue;\n    }\n    const tag = char === \"$\" ? readDollarTag(body, index) : undefined;\n    if (tag) {\n      dollarTag = tag;\n      index += tag.length;\n      continue;\n    }\n    if (char === \"(\") {\n      depth += 1;\n    } else if (char === \")\") {\n      depth = Math.max(0, depth - 1);\n    } else if (char === \";\" && depth === 0) {\n      return index + 1;\n    }\n    index += 1;\n  }\n  return -1;\n}\n\nfunction topLevelKeywordIndexes(body: string, keyword: string): number[] {\n  const indexes: number[] = [];\n  const upper = keyword.toUpperCase();\n  let index = 0;\n  let depth = 0;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let inSingle = false;\n  let dollarTag: string | undefined;\n  while (index < body.length) {\n    const char = body[index];\n    const next = body[index + 1];\n    if (inLineComment) {\n      if (char === \"\\n\") {\n        inLineComment = false;\n      }\n      index += 1;\n      continue;\n    }\n    if (inBlockComment) {\n      if (char === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        index += 2;\n        continue;\n      }\n      index += 1;\n      continue;\n    }\n    if (dollarTag) {\n      if (body.startsWith(dollarTag, index)) {\n        index += dollarTag.length;\n        dollarTag = undefined;\n        continue;\n      }\n      index += 1;\n      continue;\n    }\n    if (inSingle) {\n      if (char === \"'\" && next === \"'\") {\n        index += 2;\n        continue;\n      }\n      if (char === \"'\") {\n        inSingle = false;\n      }\n      index += 1;\n      continue;\n    }\n    if (char === \"-\" && next === \"-\") {\n      inLineComment = true;\n      index += 2;\n      continue;\n    }\n    if (char === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      index += 2;\n      continue;\n    }\n    if (char === \"'\") {\n      inSingle = true;\n      index += 1;\n      continue;\n    }\n    const tag = char === \"$\" ? readDollarTag(body, index) : undefined;\n    if (tag) {\n      dollarTag = tag;\n      index += tag.length;\n      continue;\n    }\n    if (depth === 0 && isSqlWordStart(body, index)) {\n      const slice = body.slice(index, index + keyword.length);\n      if (slice.toUpperCase() === upper) {\n        const after = body[index + keyword.length];\n        if (!after || !/[\\w$]/u.test(after)) {\n          indexes.push(index);\n        }\n      }\n    }\n    if (char === \"(\") {\n      depth += 1;\n    } else if (char === \")\") {\n      depth = Math.max(0, depth - 1);\n    }\n    index += 1;\n  }\n  return indexes;\n}\n\nfunction functionParameterNames(node: PgAstNode): string[] {\n  const lists = [node.parameters, node.params];\n  const names: string[] = [];\n  for (const list of lists) {\n    if (!Array.isArray(list)) {\n      continue;\n    }\n    for (const item of list) {\n      const record =\n        asRecord(asRecord(item)?.FunctionParameter) ?? asRecord(item);\n      if (typeof record?.name === \"string\" && record.name.length > 0) {\n        names.push(record.name);\n      }\n    }\n  }\n  return names;\n}\n\nfunction plpgsqlSqlFragments(body: string): string[] {\n  const covered: Array<{ end: number; start: number }> = [];\n  const fragments: string[] = [];\n  for (const start of topLevelKeywordIndexes(body, \"WITH\")) {\n    const end = endOfSqlStatement(body, start);\n    if (end <= start) {\n      continue;\n    }\n    fragments.push(body.slice(start, end));\n    covered.push({ end, start });\n  }\n  const pattern =\n    /\\b(?:SELECT|INSERT\\s+INTO|UPDATE|DELETE\\s+FROM|RETURN\\s+QUERY)\\b[\\s\\S]*?;/gi;\n  let match = pattern.exec(body);\n  while (match) {\n    const start = match.index;\n    const end = start + match[0].length;\n    const nested = covered.some(\n      (range) => start < range.end && end > range.start,\n    );\n    if (!nested) {\n      fragments.push(match[0]);\n    }\n    match = pattern.exec(body);\n  }\n  return fragments;\n}\n\nfunction isDynamicBody(body: string): boolean {\n  return /\\bEXECUTE\\b/i.test(body);\n}\n\nasync function analyzeFunctionBody(\n  body: string,\n  language: string,\n  filename: string,\n  sql: string,\n  bodyOffset: number,\n  parameters: readonly string[] = [],\n): Promise<{ dependencies: SemanticDependency[]; warnings: string[] }> {\n  const warnings: string[] = [];\n  const dependencies: SemanticDependency[] = [];\n  const proceduralBindings =\n    language === \"plpgsql\"\n      ? parsePlpgsqlBindings(body, parameters)\n      : undefined;\n  if (proceduralBindings) {\n    for (const table of proceduralBindings.rowVariables.values()) {\n      dependencies.push({\n        category: \"REQUIRES_TABLE\",\n        confidence: \"certain\",\n        explicitlyQualified: Boolean(table.schema),\n        object: table,\n        resolution: \"exact\",\n      });\n    }\n  }\n  const fragments = language === \"plpgsql\" ? plpgsqlSqlFragments(body) : [body];\n  if (isDynamicBody(body)) {\n    dependencies.push({\n      category: \"READS\",\n      confidence: \"dynamic\",\n      object: { kind: \"table\", name: \"<dynamic>\", schema: \"\" },\n      resolution: \"unverified\",\n      snippet: \"EXECUTE\",\n    });\n    warnings.push(\n      \"Dynamic SQL detected; static dependency verification incomplete.\",\n    );\n  }\n  for (const fragment of fragments) {\n    try {\n      const parsed = await parsePostgresSql(fragment);\n      for (const statement of parsed.statements) {\n        dependencies.push(\n          ...extractQueryDependencies(\n            statement.node,\n            filename,\n            sql,\n            bodyOffset,\n            { proceduralBindings },\n          ),\n        );\n      }\n    } catch {\n      warnings.push(\n        `Unable to parse ${language} body fragment as SQL; treating as unverifiable.`,\n      );\n      dependencies.push({\n        category: \"READS\",\n        confidence: \"unknown\",\n        object: { kind: \"table\", name: \"<unverified>\", schema: \"\" },\n        resolution: \"unverified\",\n        snippet: fragment.slice(0, 48),\n      });\n    }\n  }\n  return { dependencies, warnings };\n}\n\nfunction mergeEffects(...effects: MigrationEffects[]): MigrationEffects {\n  const creates: SchemaObjectRef[] = [];\n  const drops: SchemaObjectRef[] = [];\n  const modifies: MigrationEffects[\"modifies\"] = [];\n  for (const effect of effects) {\n    creates.push(...effect.creates);\n    drops.push(...effect.drops);\n    modifies.push(...effect.modifies);\n  }\n  return { creates, drops, modifies };\n}\n\nfunction emptyEffects(): MigrationEffects {\n  return { creates: [], drops: [], modifies: [] };\n}\n\nfunction qualifiedName(\n  node: PgAstNode,\n  fallbackSchema = DEFAULT_SCHEMA,\n): {\n  name: string;\n  schema: string;\n} {\n  if (typeof node.relname === \"string\") {\n    return {\n      name: node.relname,\n      schema:\n        typeof node.schemaname === \"string\" ? node.schemaname : fallbackSchema,\n    };\n  }\n  const names = pgNameList(node);\n  if (names.length >= 2) {\n    return { schema: names[0], name: names[names.length - 1] };\n  }\n  return { schema: fallbackSchema, name: names[0] ?? \"unknown\" };\n}\n\nfunction columnDefs(\n  tableElts: unknown,\n  schema: string,\n  table: string,\n): SchemaObjectRef[] {\n  if (!Array.isArray(tableElts)) {\n    return [];\n  }\n  const columns: SchemaObjectRef[] = [];\n  for (const elt of tableElts) {\n    const def = asRecord(asRecord(elt)?.ColumnDef) ?? asRecord(elt);\n    if (def && typeof def.colname === \"string\") {\n      columns.push({\n        kind: \"column\",\n        name: def.colname,\n        schema,\n        table,\n      });\n    }\n  }\n  return columns;\n}\n\nasync function analyzeStatement(\n  kind: string,\n  node: PgAstNode,\n  filename: string,\n  sql: string,\n  location: number,\n  length: number,\n): Promise<{ statement: SemanticStatement; warnings: string[] }> {\n  const loc = locationFromOffset(filename, sql, location, length);\n  const warnings: string[] = [];\n  let statementKind: StatementKind = \"other\";\n  let object: SchemaObjectRef | undefined;\n  let effects = emptyEffects();\n  let dependencies: SemanticDependency[] = [];\n\n  switch (kind) {\n    case \"CreateSchemaStmt\": {\n      statementKind = \"create_schema\";\n      const name =\n        typeof node.schemaname === \"string\" ? node.schemaname : DEFAULT_SCHEMA;\n      object = { kind: \"schema\", name };\n      effects = { creates: [object], drops: [], modifies: [] };\n      break;\n    }\n    case \"CreateStmt\": {\n      statementKind = \"create_table\";\n      const relation = asRecord(node.relation) ?? node;\n      const ident = qualifiedName(relation);\n      object = { kind: \"table\", name: ident.name, schema: ident.schema };\n      const columns = columnDefs(node.tableElts, ident.schema, ident.name);\n      effects = {\n        creates: [object, { kind: \"schema\", name: ident.schema }, ...columns],\n        drops: [],\n        modifies: [],\n      };\n      dependencies.push(\n        dep(\n          \"REQUIRES_SCHEMA\",\n          { kind: \"schema\", name: ident.schema },\n          \"certain\",\n          loc,\n        ),\n      );\n      break;\n    }\n    case \"CreateTableAsStmt\": {\n      statementKind = \"create_table_as\";\n      const into = asRecord(asRecord(node.into)?.rel) ?? asRecord(node.into);\n      const ident = into\n        ? qualifiedName(into)\n        : { name: \"unknown\", schema: DEFAULT_SCHEMA };\n      object = { kind: \"table\", name: ident.name, schema: ident.schema };\n      effects = { creates: [object], drops: [], modifies: [] };\n      dependencies = extractQueryDependencies(\n        node.query ?? node,\n        filename,\n        sql,\n        location,\n      );\n      break;\n    }\n    case \"AlterTableStmt\": {\n      statementKind = \"alter_table\";\n      const relation = asRecord(node.relation) ?? node;\n      const ident = qualifiedName(relation);\n      object = { kind: \"table\", name: ident.name, schema: ident.schema };\n      const modifies: MigrationEffects[\"modifies\"] = [];\n      const creates: SchemaObjectRef[] = [];\n      const cmds = Array.isArray(node.cmds) ? node.cmds : [];\n      for (const cmd of cmds) {\n        const alter = asRecord(asRecord(cmd)?.AlterTableCmd) ?? asRecord(cmd);\n        if (!alter) {\n          continue;\n        }\n        if (alter.subtype === \"AT_AddColumn\") {\n          const def =\n            asRecord(asRecord(alter.def)?.ColumnDef) ?? asRecord(alter.def);\n          if (def && typeof def.colname === \"string\") {\n            const column: SchemaObjectRef = {\n              kind: \"column\",\n              name: def.colname,\n              schema: ident.schema,\n              table: ident.name,\n            };\n            creates.push(column);\n            modifies.push({ kind: \"add_column\", object: column });\n          }\n        }\n        if (\n          alter.subtype === \"AT_DropColumn\" &&\n          typeof alter.name === \"string\"\n        ) {\n          modifies.push({\n            kind: \"drop_column\",\n            object: {\n              kind: \"column\",\n              name: alter.name,\n              schema: ident.schema,\n              table: ident.name,\n            },\n          });\n        }\n      }\n      effects = { creates, drops: [], modifies };\n      dependencies.push(dep(\"REQUIRES_TABLE\", object, \"certain\", loc));\n      dependencies.push(dep(\"ALTERS\", object, \"certain\", loc));\n      break;\n    }\n    case \"DropStmt\": {\n      const removeType = String(node.removeType ?? \"\");\n      const objects = Array.isArray(node.objects) ? node.objects : [];\n      const dropped: SchemaObjectRef[] = [];\n      for (const item of objects) {\n        const list = asRecord(asRecord(item)?.List);\n        const names = pgNameList(list?.items ?? item);\n        if (removeType.includes(\"TABLE\") || removeType === \"OBJECT_TABLE\") {\n          statementKind = \"drop_table\";\n          const schema = names.length > 1 ? names[0] : DEFAULT_SCHEMA;\n          const name = names[names.length - 1];\n          dropped.push({ kind: \"table\", name, schema });\n        } else if (\n          removeType.includes(\"FUNCTION\") ||\n          removeType === \"OBJECT_FUNCTION\"\n        ) {\n          statementKind = \"drop_function\";\n          const schema = names.length > 1 ? names[0] : \"\";\n          const name = names[names.length - 1];\n          dropped.push({ kind: \"function\", name, schema });\n        } else if (\n          removeType.includes(\"INDEX\") ||\n          removeType === \"OBJECT_INDEX\"\n        ) {\n          statementKind = \"drop_index\";\n          const schema = names.length > 1 ? names[0] : \"\";\n          const name = names[names.length - 1];\n          dropped.push({ kind: \"index\", name, schema });\n        }\n      }\n      object = dropped[0];\n      effects = { creates: [], drops: dropped, modifies: [] };\n      break;\n    }\n    case \"IndexStmt\": {\n      statementKind = \"create_index\";\n      const relation = asRecord(node.relation) ?? {};\n      const ident = qualifiedName(relation);\n      const indexName =\n        typeof node.idxname === \"string\" ? node.idxname : `${ident.name}_idx`;\n      object = {\n        kind: \"index\",\n        name: indexName,\n        schema: ident.schema,\n        table: ident.name,\n      };\n      effects = { creates: [object], drops: [], modifies: [] };\n      dependencies.push(\n        dep(\n          \"REQUIRES_TABLE\",\n          { kind: \"table\", name: ident.name, schema: ident.schema },\n          \"certain\",\n          loc,\n        ),\n      );\n      break;\n    }\n    case \"ViewStmt\": {\n      statementKind =\n        node.relkind === \"m\" ? \"create_materialized_view\" : \"create_view\";\n      const view = asRecord(node.view) ?? {};\n      const ident = qualifiedName(view);\n      object = {\n        kind:\n          statementKind === \"create_materialized_view\"\n            ? \"materialized_view\"\n            : \"view\",\n        name: ident.name,\n        schema: ident.schema,\n      };\n      effects = { creates: [object], drops: [], modifies: [] };\n      dependencies = extractQueryDependencies(\n        node.query ?? node,\n        filename,\n        sql,\n        location,\n      );\n      break;\n    }\n    case \"CreateFunctionStmt\": {\n      const names = pgNameList(node.funcname);\n      const schema = names.length > 1 ? names[0] : DEFAULT_SCHEMA;\n      const name = names[names.length - 1] ?? \"unknown\";\n      const isProcedure = Boolean(node.is_procedure);\n      statementKind = isProcedure ? \"create_procedure\" : \"create_function\";\n      object = { kind: isProcedure ? \"function\" : \"function\", name, schema };\n      effects = { creates: [object], drops: [], modifies: [] };\n      const language = (\n        defElemArgString(node.options, \"language\") ?? \"sql\"\n      ).toLowerCase();\n      const body = defElemArgString(node.options, \"as\") ?? \"\";\n      const bodyOffset = location;\n      const analyzed = await analyzeFunctionBody(\n        body,\n        language,\n        filename,\n        sql,\n        bodyOffset,\n        functionParameterNames(node),\n      );\n      dependencies = analyzed.dependencies;\n      warnings.push(...analyzed.warnings);\n      break;\n    }\n    case \"CreateTrigStmt\": {\n      statementKind = \"create_trigger\";\n      const relation = asRecord(node.relation) ?? {};\n      const ident = qualifiedName(relation);\n      const trigName =\n        typeof node.trigname === \"string\" ? node.trigname : \"trigger\";\n      object = {\n        kind: \"trigger\",\n        name: trigName,\n        schema: ident.schema,\n        table: ident.name,\n      };\n      effects = { creates: [object], drops: [], modifies: [] };\n      dependencies.push(\n        dep(\n          \"REQUIRES_TABLE\",\n          { kind: \"table\", name: ident.name, schema: ident.schema },\n          \"certain\",\n          loc,\n        ),\n      );\n      const funcnames = pgNameList(node.funcname);\n      if (funcnames.length > 0) {\n        dependencies.push(\n          dep(\n            \"REQUIRES_FUNCTION\",\n            {\n              kind: \"function\",\n              name: funcnames[funcnames.length - 1],\n              schema: funcnames.length > 1 ? funcnames[0] : \"\",\n            },\n            \"certain\",\n            loc,\n          ),\n        );\n      }\n      break;\n    }\n    case \"CreatePolicyStmt\":\n    case \"AlterPolicyStmt\": {\n      statementKind =\n        kind === \"CreatePolicyStmt\" ? \"create_policy\" : \"alter_policy\";\n      const table = asRecord(node.table) ?? {};\n      const ident = qualifiedName(table);\n      const policyName =\n        typeof node.policy_name === \"string\" ? node.policy_name : \"policy\";\n      object = {\n        kind: \"policy\",\n        name: policyName,\n        schema: ident.schema,\n        table: ident.name,\n      };\n      effects = {\n        creates: kind === \"CreatePolicyStmt\" ? [object] : [],\n        drops: [],\n        modifies:\n          kind === \"AlterPolicyStmt\" ? [{ kind: \"alter_policy\", object }] : [],\n      };\n      dependencies.push(\n        dep(\n          \"REQUIRES_TABLE\",\n          { kind: \"table\", name: ident.name, schema: ident.schema },\n          \"certain\",\n          loc,\n        ),\n      );\n      break;\n    }\n    case \"CreateEnumStmt\":\n    case \"CompositeTypeStmt\": {\n      statementKind = \"create_type\";\n      const typeName = pgNameList(node.typeName ?? node.typname);\n      const schema = typeName.length > 1 ? typeName[0] : DEFAULT_SCHEMA;\n      const name = typeName[typeName.length - 1] ?? \"type\";\n      object = { kind: \"type\", name, schema };\n      effects = { creates: [object], drops: [], modifies: [] };\n      break;\n    }\n    case \"CreateSeqStmt\": {\n      statementKind = \"create_sequence\";\n      const seq = asRecord(node.sequence) ?? {};\n      const ident = qualifiedName(seq);\n      object = { kind: \"sequence\", name: ident.name, schema: ident.schema };\n      effects = { creates: [object], drops: [], modifies: [] };\n      break;\n    }\n    case \"CreateExtensionStmt\": {\n      statementKind = \"create_extension\";\n      const name =\n        typeof node.extname === \"string\" ? node.extname : \"extension\";\n      object = { kind: \"extension\", name };\n      effects = { creates: [object], drops: [], modifies: [] };\n      break;\n    }\n    case \"GrantStmt\":\n      statementKind = \"grant\";\n      break;\n    case \"CommentStmt\":\n      statementKind = \"comment\";\n      break;\n    default: {\n      dependencies = extractQueryDependencies(node, filename, sql, location);\n      if (\n        kind === \"InsertStmt\" ||\n        kind === \"UpdateStmt\" ||\n        kind === \"DeleteStmt\"\n      ) {\n        const target = writeTargetFromNode(node);\n        if (target) {\n          object = target.table;\n          dependencies.push(\n            dep(\n              \"WRITES\",\n              target.table,\n              target.explicitlyQualified ? \"certain\" : \"probable\",\n              loc,\n            ),\n          );\n        }\n      }\n      break;\n    }\n  }\n\n  return {\n    statement: {\n      dependencies,\n      effects,\n      kind: statementKind,\n      location: loc,\n      object,\n    },\n    warnings,\n  };\n}\n\nfunction parseMigrationDirectives(sql: string): SchemaObjectRef[] {\n  const requires: SchemaObjectRef[] = [];\n  for (const line of sql.split(/\\r?\\n/)) {\n    const match = /^\\s*--\\s*requires-table:\\s+([\\w.]+)/i.exec(line);\n    if (!match?.[1]) {\n      continue;\n    }\n    const parts = match[1].split(\".\").filter((part) => part.length > 0);\n    if (parts.length >= 2) {\n      requires.push({\n        kind: \"table\",\n        name: parts[parts.length - 1],\n        schema: parts[0],\n      });\n    } else if (parts[0]) {\n      requires.push({ kind: \"table\", name: parts[0], schema: \"\" });\n    }\n  }\n  return requires;\n}\n\n/**\n * Compile one migration file to semantic IR.\n */\nexport async function analyzeMigrationFile(\n  file: MigrationFile,\n): Promise<MigrationAnalysis> {\n  const parsed = await parsePostgresSql(file.sql);\n  const statements: SemanticStatement[] = [];\n  const warnings: string[] = [];\n  let statementIndex = 0;\n  for (const statement of parsed.statements) {\n    const analyzed = await analyzeStatement(\n      statement.kind,\n      statement.node,\n      file.filename,\n      file.sql,\n      statement.location,\n      statement.length,\n    );\n    const owner = analyzed.statement.object;\n    analyzed.statement.dependencies = analyzed.statement.dependencies.map(\n      (item) => ({\n        ...item,\n        owner: item.owner ?? owner,\n        statementIndex,\n      }),\n    );\n    statements.push(analyzed.statement);\n    warnings.push(...analyzed.warnings);\n    statementIndex += 1;\n  }\n  const declaredRequires = parseMigrationDirectives(file.sql);\n  const dependencies = uniqueDeps(\n    statements.flatMap((item) => item.dependencies),\n  );\n  const effects = mergeEffects(...statements.map((item) => item.effects));\n  return {\n    checksum: file.checksum,\n    declaredRequires,\n    dependencies,\n    effects,\n    filename: file.filename,\n    name: file.name,\n    parserId: PARSER_ID,\n    statements,\n    version: file.version,\n    warnings,\n  };\n}\n","import { objectKey, type SchemaObjectRef } from \"./ast.ts\";\n\nexport type SchemaProviderSource =\n\t| \"application\"\n\t| \"embedded-auth\"\n\t| \"embedded-chat\"\n\t| \"embedded-event-ingress\"\n\t| \"embedded-billing\";\n\nexport interface SchemaProvider {\n\tfilename: string;\n\tobject: SchemaObjectRef;\n\tsource: SchemaProviderSource;\n\tstate: \"applied\" | \"pending\";\n\tversion: number;\n}\n\nexport function findSchemaProvider(\n\tproviders: readonly SchemaProvider[],\n\tobject: SchemaObjectRef,\n): SchemaProvider | undefined {\n\tconst key = objectKey(object);\n\treturn providers.find((provider) => objectKey(provider.object) === key);\n}\n","import { formatObjectRef, objectKey, type SchemaObjectRef } from \"./ast.ts\";\nimport {\n  DIAGNOSTIC_CODES,\n  type DriftClassification,\n  type MigrationDiagnostic,\n} from \"./diagnostics.ts\";\nimport {\n  applyAnalysis,\n  emptyProjectedSchema,\n  missingObjects,\n  type ProjectedSchema,\n  schemaHas,\n} from \"./projected-schema.ts\";\nimport {\n  findSchemaProvider,\n  type SchemaProvider,\n} from \"./schema-provider.ts\";\nimport type { MigrationAnalysis, SemanticDependency } from \"./semantic-ir.ts\";\n\nconst SKIP_KINDS = new Set([\n  \"READS\",\n  \"WRITES\",\n  \"REFERENCES\",\n  \"RETURNS\",\n  \"CASTS_TO\",\n  \"INVOKES\",\n]);\n\nexport interface ProviderHit {\n  analysis: MigrationAnalysis;\n}\n\nexport function findProvider(\n  analyses: readonly MigrationAnalysis[],\n  object: SchemaObjectRef,\n): MigrationAnalysis | undefined {\n  const key = objectKey(object);\n  for (const analysis of analyses) {\n    for (const created of analysis.effects.creates) {\n      if (objectKey(created) === key) {\n        return analysis;\n      }\n    }\n    for (const mutation of analysis.effects.modifies) {\n      if (mutation.kind === \"add_column\" && objectKey(mutation.object) === key) {\n        return analysis;\n      }\n    }\n  }\n  return undefined;\n}\n\nfunction shouldCheck(dependency: SemanticDependency): boolean {\n  if (dependency.confidence === \"dynamic\" || dependency.confidence === \"unknown\") {\n    return false;\n  }\n  if (dependency.resolution === \"cte\" || dependency.resolution === \"unverified\") {\n    return false;\n  }\n  if (SKIP_KINDS.has(dependency.category)) {\n    return false;\n  }\n  if (dependency.object.kind === \"table\" && dependency.object.name.startsWith(\"<\")) {\n    return false;\n  }\n  if (\n    dependency.object.kind === \"function\" &&\n    (dependency.resolution === \"search_path\" ||\n      dependency.resolution === \"catalog_builtin\" ||\n      !dependency.object.schema ||\n      dependency.object.schema === \"pg_catalog\")\n  ) {\n    return false;\n  }\n  return (\n    dependency.category === \"REQUIRES_TABLE\" ||\n    dependency.category === \"REQUIRES_COLUMN\" ||\n    dependency.category === \"REQUIRES_SCHEMA\" ||\n    dependency.category === \"REQUIRES_FUNCTION\" ||\n    dependency.category === \"REQUIRES_TYPE\" ||\n    dependency.category === \"REQUIRES_EXTENSION\" ||\n    dependency.category === \"REQUIRES_SEQUENCE\"\n  );\n}\n\nfunction parentTableMissing(\n  projected: ProjectedSchema,\n  dependency: SemanticDependency,\n): boolean {\n  if (dependency.object.kind !== \"column\") {\n    return false;\n  }\n  return !schemaHas(projected, {\n    kind: \"table\",\n    name: dependency.object.table,\n    schema: dependency.object.schema,\n  });\n}\n\nexport interface VerifyMigrationInput {\n  analysis: MigrationAnalysis;\n  analyses: readonly MigrationAnalysis[];\n  appliedVersions: ReadonlySet<number>;\n  externalProviders?: readonly SchemaProvider[];\n  projected: ProjectedSchema;\n}\n\nexport function verifyMigrationAgainstSchema(\n  input: VerifyMigrationInput & { dependencies?: SemanticDependency[] },\n): MigrationDiagnostic[] {\n  const diagnostics: MigrationDiagnostic[] = [];\n  const dependencies = input.dependencies ?? input.analysis.dependencies;\n\n  for (const dependency of dependencies) {\n    if (dependency.confidence === \"dynamic\") {\n      diagnostics.push({\n        classification: \"dynamic_sql\",\n        code: DIAGNOSTIC_CODES.DYNAMIC,\n        confidence: \"dynamic\",\n        message: `Dynamic SQL detected in ${input.analysis.filename}`,\n        object: dependency.object,\n        requiredBy: dependency.owner\n          ? formatObjectRef(dependency.owner)\n          : undefined,\n        snippet: dependency.snippet,\n        statementIndex: dependency.statementIndex,\n      });\n      continue;\n    }\n    if (!shouldCheck(dependency) || parentTableMissing(input.projected, dependency)) {\n      continue;\n    }\n    if (schemaHas(input.projected, dependency.object)) {\n      continue;\n    }\n    const packaged = findSchemaProvider(\n      input.externalProviders ?? [],\n      dependency.object,\n    );\n    if (packaged?.state === \"pending\") {\n      continue;\n    }\n    const provider = findProvider(input.analyses, dependency.object);\n    const declared = (input.analysis.declaredRequires ?? []).some(\n      (item) => objectKey(item) === objectKey(dependency.object),\n    );\n    let classification: DriftClassification = declared\n      ? \"baseline_prerequisite\"\n      : \"missing_dependency\";\n    let ledgerState: MigrationDiagnostic[\"ledgerState\"] = \"missing\";\n    if (provider) {\n      if (provider.version > input.analysis.version) {\n        classification = \"ordering\";\n        ledgerState = input.appliedVersions.has(provider.version)\n          ? \"applied\"\n          : \"pending\";\n      } else if (input.appliedVersions.has(provider.version)) {\n        classification = \"physical_schema_drift\";\n        ledgerState = \"applied\";\n      } else {\n        classification = \"ordering\";\n        ledgerState = \"pending\";\n      }\n    }\n    const isColumn = dependency.object.kind === \"column\";\n    diagnostics.push({\n      classification,\n      code:\n        classification === \"physical_schema_drift\"\n          ? DIAGNOSTIC_CODES.DRIFT\n          : classification === \"ordering\"\n            ? DIAGNOSTIC_CODES.ORDER\n            : classification === \"baseline_prerequisite\"\n              ? DIAGNOSTIC_CODES.BASELINE\n              : isColumn\n                ? DIAGNOSTIC_CODES.COL_MISSING\n                : DIAGNOSTIC_CODES.DEP_MISSING,\n      confidence: dependency.confidence,\n      expectedProvider: provider\n        ? { filename: provider.filename, version: provider.version }\n        : packaged\n          ? { filename: packaged.filename, version: packaged.version }\n          : undefined,\n      expectedSource: provider\n        ? \"migration\"\n        : packaged\n          ? \"embedded\"\n          : declared\n            ? \"baseline\"\n            : \"unknown\",\n      ledgerState,\n      location: dependency.location,\n      message:\n        classification === \"physical_schema_drift\"\n          ? `${input.analysis.filename} requires ${formatObjectRef(dependency.object)} but the providing migration is marked applied while the object is absent.`\n          : classification === \"baseline_prerequisite\"\n            ? `${input.analysis.filename} declares baseline prerequisite ${formatObjectRef(dependency.object)} which is not in the projected schema.`\n            : `${input.analysis.filename} requires ${formatObjectRef(dependency.object)} which is not in the projected schema.`,\n      object: dependency.object,\n      physicalState: \"missing\",\n      requiredBy: dependency.owner\n        ? formatObjectRef(dependency.owner)\n        : undefined,\n      snippet: dependency.snippet,\n      statementIndex: dependency.statementIndex,\n    });\n  }\n  return diagnostics;\n}\n\nexport function verifyAppliedDrift(\n  appliedAnalyses: readonly MigrationAnalysis[],\n  physical: ProjectedSchema,\n): MigrationDiagnostic[] {\n  let expected = emptyProjectedSchema();\n  for (const analysis of appliedAnalyses) {\n    expected = applyAnalysis(expected, analysis);\n  }\n  const missing = missingObjects(expected, physical);\n  const diagnostics: MigrationDiagnostic[] = [];\n  for (const object of missing) {\n    const provider = findProvider(appliedAnalyses, object);\n    diagnostics.push({\n      classification: \"physical_schema_drift\",\n      code: DIAGNOSTIC_CODES.DRIFT,\n      expectedProvider: provider\n        ? { filename: provider.filename, version: provider.version }\n        : undefined,\n      expectedSource: provider ? \"migration\" : \"unknown\",\n      ledgerState: \"applied\",\n      message: provider\n        ? `${provider.filename} is marked applied but ${formatObjectRef(object)} is absent from the physical database.`\n        : `Expected ${formatObjectRef(object)} is absent from the physical database.`,\n      object,\n      physicalState: \"missing\",\n    });\n  }\n  return diagnostics;\n}\n\nexport function blockingDiagnostics(\n  diagnostics: readonly MigrationDiagnostic[],\n  strict: boolean,\n): MigrationDiagnostic[] {\n  return diagnostics.filter((item) => {\n    if (\n      item.classification === \"dynamic_sql\" ||\n      item.classification === \"unresolved_search_path\" ||\n      item.classification === \"unverified\"\n    ) {\n      return strict;\n    }\n    return true;\n  });\n}\n","import { formatObjectRef, objectKey } from \"./ast.ts\";\nimport { findProvider } from \"./verifier.ts\";\nimport type { MigrationAnalysis } from \"./semantic-ir.ts\";\n\nexport interface MigrationGraphEdge {\n  fromVersion: number;\n  object: string;\n  toVersion: number;\n}\n\nexport interface MigrationGraphNode {\n  creates: string[];\n  filename: string;\n  reads: string[];\n  version: number;\n}\n\nexport interface MigrationGraph {\n  edges: MigrationGraphEdge[];\n  nodes: MigrationGraphNode[];\n}\n\nexport function buildMigrationGraph(\n  analyses: readonly MigrationAnalysis[]\n): MigrationGraph {\n  const nodes: MigrationGraphNode[] = analyses.map((analysis) => ({\n    creates: analysis.effects.creates.map((object) => formatObjectRef(object)),\n    filename: analysis.filename,\n    reads: analysis.dependencies\n      .filter((item) => item.category === \"REQUIRES_TABLE\" || item.category === \"READS\")\n      .map((item) => formatObjectRef(item.object)),\n    version: analysis.version,\n  }));\n  const edges: MigrationGraphEdge[] = [];\n  const seen = new Set<string>();\n  for (const analysis of analyses) {\n    for (const dependency of analysis.dependencies) {\n      if (\n        dependency.category !== \"REQUIRES_TABLE\" &&\n        dependency.category !== \"REQUIRES_COLUMN\" &&\n        dependency.category !== \"REQUIRES_FUNCTION\"\n      ) {\n        continue;\n      }\n      const provider = findProvider(analyses, dependency.object);\n      if (!provider || provider.version === analysis.version) {\n        continue;\n      }\n      const key = `${provider.version}->${analysis.version}:${objectKey(dependency.object)}`;\n      if (seen.has(key)) {\n        continue;\n      }\n      seen.add(key);\n      edges.push({\n        fromVersion: provider.version,\n        object: formatObjectRef(dependency.object),\n        toVersion: analysis.version,\n      });\n    }\n  }\n  return { edges, nodes };\n}\n\nexport function formatMigrationGraph(graph: MigrationGraph): string {\n  const lines = [\"Migration graph\", \"\"];\n  for (const node of graph.nodes) {\n    lines.push(`${node.filename}`);\n    if (node.creates.length > 0) {\n      lines.push(`   creates ${node.creates.slice(0, 12).join(\", \")}`);\n    }\n    if (node.reads.length > 0) {\n      lines.push(`   reads ${[...new Set(node.reads)].slice(0, 12).join(\", \")}`);\n    }\n    const outgoing = graph.edges.filter((edge) => edge.fromVersion === node.version);\n    for (const edge of outgoing) {\n      const target = graph.nodes.find((item) => item.version === edge.toVersion);\n      if (target) {\n        lines.push(`       ↓ ${target.filename} (${edge.object})`);\n      }\n    }\n    lines.push(\"\");\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n","import type { MigrationFile } from \"../types.ts\";\nimport { formatObjectRef, objectKey } from \"./ast.ts\";\nimport { analyzeMigrationFile } from \"./analyzer.ts\";\nimport { cacheKey, loadAnalysisCache, saveAnalysisCache } from \"./cache.ts\";\nimport type { PhysicalCatalog } from \"./catalog.ts\";\nimport { emptyPhysicalCatalog } from \"./catalog.ts\";\nimport { buildMigrationGraph, type MigrationGraph } from \"./dependency-graph.ts\";\nimport {\n  formatDiagnostic,\n  type MigrationDiagnostic,\n} from \"./diagnostics.ts\";\nimport {\n  applyAnalysis,\n  applyEffects,\n  cloneProjectedSchema,\n  emptyProjectedSchema,\n  fingerprintProjectedSchema,\n  mergeProjectedSchemas,\n  type ProjectedSchema,\n} from \"./projected-schema.ts\";\nimport type { SchemaProvider } from \"./schema-provider.ts\";\nimport type { MigrationAnalysis } from \"./semantic-ir.ts\";\nimport {\n  blockingDiagnostics,\n  verifyAppliedDrift,\n  verifyMigrationAgainstSchema,\n} from \"./verifier.ts\";\n\nexport interface CompileMigrationsInput {\n  appliedVersions: ReadonlySet<number>;\n  cacheDir?: string;\n  catalog?: PhysicalCatalog;\n  externalProviders?: readonly SchemaProvider[];\n  files: readonly MigrationFile[];\n  projectedPrerequisites?: ProjectedSchema;\n  strict?: boolean;\n}\n\nexport interface CompileMigrationsResult {\n  analyses: MigrationAnalysis[];\n  diagnostics: MigrationDiagnostic[];\n  expectedApplied: ProjectedSchema;\n  fingerprint: string;\n  graph: MigrationGraph;\n  packagedProviders: readonly SchemaProvider[];\n  physical: ProjectedSchema;\n  projectedFinal: ProjectedSchema;\n}\n\nexport async function analyzeAll(\n  files: readonly MigrationFile[],\n  cacheDir?: string\n): Promise<MigrationAnalysis[]> {\n  const cache = cacheDir ? await loadAnalysisCache(cacheDir) : new Map();\n  const analyses: MigrationAnalysis[] = [];\n  for (const file of files) {\n    const key = cacheKey(file.checksum, file.filename);\n    const hit = cache.get(key);\n    if (hit) {\n      analyses.push(hit);\n      continue;\n    }\n    analyses.push(await analyzeMigrationFile(file));\n  }\n  if (cacheDir) {\n    await saveAnalysisCache(cacheDir, analyses);\n  }\n  return analyses;\n}\n\nexport async function compileMigrations(\n  input: CompileMigrationsInput\n): Promise<CompileMigrationsResult> {\n  const analyses = await analyzeAll(input.files, input.cacheDir);\n  const catalog = input.catalog ?? emptyPhysicalCatalog();\n  const physical = catalog.schema;\n  const appliedAnalyses = analyses.filter((item) =>\n    input.appliedVersions.has(item.version)\n  );\n  const pendingAnalyses = analyses.filter(\n    (item) => !input.appliedVersions.has(item.version)\n  );\n\n  let expectedApplied = emptyProjectedSchema();\n  for (const analysis of appliedAnalyses) {\n    expectedApplied = applyAnalysis(expectedApplied, analysis);\n  }\n\n  const diagnostics: MigrationDiagnostic[] = [\n    ...verifyAppliedDrift(appliedAnalyses, physical),\n  ];\n\n  let projected = cloneProjectedSchema(physical);\n  if (input.projectedPrerequisites) {\n    projected = mergeProjectedSchemas(projected, input.projectedPrerequisites);\n  }\n  for (const analysis of pendingAnalyses) {\n    if (analysis.declaredRequires && analysis.declaredRequires.length > 0) {\n      diagnostics.push(\n        ...verifyMigrationAgainstSchema({\n          analysis,\n          analyses,\n          appliedVersions: input.appliedVersions,\n          dependencies: analysis.declaredRequires.map((object) => ({\n            category: \"REQUIRES_TABLE\" as const,\n            confidence: \"certain\" as const,\n            expectedSource: \"baseline\" as const,\n            explicitlyQualified: \"schema\" in object && Boolean(object.schema),\n            object,\n            resolution: \"exact\" as const,\n          })),\n          projected,\n          externalProviders: input.externalProviders,\n        }),\n      );\n    }\n    for (const statement of analysis.statements) {\n      diagnostics.push(\n        ...verifyMigrationAgainstSchema({\n          analysis,\n          analyses,\n          appliedVersions: input.appliedVersions,\n          dependencies: statement.dependencies,\n          externalProviders: input.externalProviders,\n          projected,\n        })\n      );\n      projected = applyEffects(projected, statement.effects);\n    }\n  }\n\n  let projectedFinal = cloneProjectedSchema(physical);\n  if (input.projectedPrerequisites) {\n    projectedFinal = mergeProjectedSchemas(\n      projectedFinal,\n      input.projectedPrerequisites,\n    );\n  }\n  for (const analysis of analyses) {\n    if (!input.appliedVersions.has(analysis.version)) {\n      projectedFinal = applyAnalysis(projectedFinal, analysis);\n    }\n  }\n  // Applied effects are assumed in physical; pending layered on top.\n  // Also compute empty-replay final for fingerprint of intent.\n  let intent = emptyProjectedSchema();\n  for (const analysis of analyses) {\n    intent = applyAnalysis(intent, analysis);\n  }\n\n  return {\n    analyses,\n    diagnostics: blockingDiagnostics(diagnostics, Boolean(input.strict)),\n    expectedApplied,\n    fingerprint: fingerprintProjectedSchema(intent),\n    graph: buildMigrationGraph(analyses),\n    packagedProviders: input.externalProviders ?? [],\n    physical,\n    projectedFinal,\n  };\n}\n\nfunction groupDiagnostics(\n  items: readonly MigrationDiagnostic[],\n): Array<{ count: number; diagnostic: MigrationDiagnostic }> {\n  const grouped = new Map<\n    string,\n    { count: number; diagnostic: MigrationDiagnostic }\n  >();\n  for (const item of items) {\n    const key = `${item.code}:${objectKey(item.object)}`;\n    const existing = grouped.get(key);\n    if (existing) {\n      existing.count += 1;\n      continue;\n    }\n    grouped.set(key, { count: 1, diagnostic: item });\n  }\n  return [...grouped.values()];\n}\n\nexport function formatPreflightFailure(\n  diagnostics: readonly MigrationDiagnostic[],\n): string {\n  const blocking = diagnostics.filter(\n    (item) =>\n      item.classification !== \"dynamic_sql\" &&\n      item.classification !== \"unresolved_search_path\" &&\n      item.classification !== \"unverified\",\n  );\n  if (blocking.length === 0) {\n    return \"Migration preflight failed.\";\n  }\n  const byFile = new Map<string, MigrationDiagnostic[]>();\n  for (const item of blocking) {\n    const filename = item.location?.filename ?? item.message;\n    const list = byFile.get(filename) ?? [];\n    list.push(item);\n    byFile.set(filename, list);\n  }\n  const grouped: string[] = [];\n  for (const [filename, items] of byFile) {\n    const unique = groupDiagnostics(items);\n    grouped.push(filename);\n    grouped.push(\n      `  ${items.length} blocking finding(s) · ${unique.length} unique`,\n    );\n    for (const { count, diagnostic } of unique) {\n      const multiplier = count > 1 ? `${count}× ` : \"\";\n      grouped.push(\n        `  ${multiplier}${diagnostic.code}: ${formatObjectRef(diagnostic.object)}`,\n      );\n    }\n    grouped.push(\"\");\n  }\n  const primary = blocking[0];\n  return [\n    \"Migration preflight failed\",\n    \"\",\n    `${blocking.length} blocking finding(s)`,\n    \"\",\n    ...grouped,\n    formatDiagnostic(primary),\n    \"\",\n    \"No migrations were executed.\",\n  ].join(\"\\n\");\n}\n\nexport function explainMigration(\n  analysis: MigrationAnalysis,\n  packagedProviders: readonly SchemaProvider[] = [],\n): string {\n  const creates = analysis.effects.creates.map((object) => `  ${object.kind} ${object.kind === \"schema\" || object.kind === \"extension\" ? object.name : `${\"schema\" in object ? object.schema + \".\" : \"\"}${\"table\" in object && object.kind === \"column\" ? object.table + \".\" : \"\"}${\"name\" in object ? object.name : \"\"}`}`);\n  const reads = [\n    ...new Set(\n      analysis.dependencies\n        .filter((item) => item.category === \"REQUIRES_TABLE\" || item.category === \"READS\")\n        .map((item) => formatObjectLine(item.object))\n    ),\n  ];\n  const columns = [\n    ...new Set(\n      analysis.dependencies\n        .filter((item) => item.category === \"REQUIRES_COLUMN\")\n        .map((item) => formatObjectLine(item.object))\n    ),\n  ];\n  const packaged = [\n    ...new Set(\n      analysis.dependencies\n        .filter((item) => item.object.kind === \"table\")\n        .flatMap((item) => {\n          const provider = packagedProviders.find(\n            (candidate) => objectKey(candidate.object) === objectKey(item.object),\n          );\n          if (!provider) {\n            return [];\n          }\n          const label =\n            provider.source === \"embedded-auth\"\n              ? \"Embedded Auth\"\n              : provider.source === \"embedded-chat\"\n                ? \"Embedded Chat\"\n                : provider.source === \"embedded-event-ingress\"\n                  ? \"Embedded Event Ingress\"\n                  : provider.source === \"embedded-billing\"\n                    ? \"Embedded Billing\"\n                    : provider.source;\n          return [\n            `  ${formatObjectLine(item.object)} provided by ${label} ${provider.filename}`,\n          ];\n        }),\n    ),\n  ];\n  return [\n    `Explain ${analysis.filename}`,\n    \"\",\n    `creates (${analysis.effects.creates.length})`,\n    ...creates.slice(0, 40),\n    \"\",\n    `tables read (${reads.length})`,\n    ...reads.slice(0, 40).map((line) => `  ${line}`),\n    \"\",\n    `columns read (${columns.length})`,\n    ...columns.slice(0, 40).map((line) => `  ${line}`),\n    packaged.length > 0 ? \"\" : \"\",\n    packaged.length > 0 ? \"packaged providers\" : \"\",\n    ...packaged.slice(0, 40),\n    \"\",\n    analysis.warnings.length > 0 ? `warnings\\n${analysis.warnings.map((w) => `  ${w}`).join(\"\\n\")}` : \"\",\n  ]\n    .filter((line) => line !== \"\")\n    .join(\"\\n\");\n}\n\nfunction formatObjectLine(object: MigrationAnalysis[\"dependencies\"][number][\"object\"]): string {\n  if (object.kind === \"schema\" || object.kind === \"extension\") {\n    return object.name;\n  }\n  if (object.kind === \"column\") {\n    return `${object.schema}.${object.table}.${object.name}`;\n  }\n  return `${object.schema}.${object.name}`;\n}\n","export {\n  ANALYSIS_IR_VERSION,\n  ANALYZER_ID,\n  ANALYZER_SEMANTICS_VERSION,\n  PARSER_ID,\n  formatObjectRef,\n  objectKey,\n  offsetToPosition,\n} from \"./ast.ts\";\nexport { ANALYSIS_CACHE_FILENAME, cacheKey } from \"./cache.ts\";\nexport type {\n  ColumnRef,\n  SchemaObjectRef,\n  SqlSourceLocation,\n  TableRef,\n} from \"./ast.ts\";\nexport { analyzeMigrationFile } from \"./analyzer.ts\";\nexport { emptyPhysicalCatalog, inspectPhysicalCatalog } from \"./catalog.ts\";\nexport type { PhysicalCatalog } from \"./catalog.ts\";\nexport {\n  analyzeAll,\n  compileMigrations,\n  explainMigration,\n  formatPreflightFailure,\n} from \"./compiler.ts\";\nexport type { CompileMigrationsResult } from \"./compiler.ts\";\nexport {\n  buildMigrationGraph,\n  formatMigrationGraph,\n} from \"./dependency-graph.ts\";\nexport { DIAGNOSTIC_CODES, formatDiagnostic } from \"./diagnostics.ts\";\nexport type { DriftClassification, MigrationDiagnostic } from \"./diagnostics.ts\";\nexport { parsePostgresSql } from \"./parser.ts\";\nexport {\n  applyAnalysis,\n  catalogToProjected,\n  emptyProjectedSchema,\n  fingerprintProjectedSchema,\n  mergeProjectedSchemas,\n  schemaHas,\n} from \"./projected-schema.ts\";\nexport type { ProjectedSchema } from \"./projected-schema.ts\";\nexport { PHYSICAL_CATALOG_CAPABILITIES } from \"./projected-schema.ts\";\nexport type { SchemaProvider, SchemaProviderSource } from \"./schema-provider.ts\";\nexport type { MigrationAnalysis, SemanticDependency } from \"./semantic-ir.ts\";\nexport { findProvider, verifyAppliedDrift, verifyMigrationAgainstSchema } from \"./verifier.ts\";\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport type { MigrationBackend } from \"../backend.ts\";\nimport type {\n\tAppliedMigrationResult,\n\tMigrationPlanEntry,\n} from \"../types.ts\";\n\nexport async function applyApplicationMigrations(\n\tbackend: MigrationBackend,\n\tpending: readonly MigrationPlanEntry[],\n\tui: AthenaCliUI,\n): Promise<AppliedMigrationResult[]> {\n\tconst newlyApplied: AppliedMigrationResult[] = [];\n\tfor (const entry of pending) {\n\t\tui.info(`→ ${entry.migration.filename} applying`);\n\t\tconst result = await backend.applyMigration(entry.migration);\n\t\tnewlyApplied.push(result);\n\t\tui.success(`✓ ${entry.migration.filename} ${result.executionMs} ms`);\n\t}\n\treturn newlyApplied;\n}\n","import type { MigrationDisplayStatus } from \"./types.ts\";\n\nexport function statusSymbol(\n\tstatus: MigrationDisplayStatus,\n\tinteractive: boolean,\n): string {\n\tif (!interactive) {\n\t\treturn `[${status}]`;\n\t}\n\tswitch (status) {\n\t\tcase \"applied\":\n\t\tcase \"repaired\":\n\t\t\treturn \"✓\";\n\t\tcase \"pending\":\n\t\t\treturn \"○\";\n\t\tcase \"applying\":\n\t\t\treturn \"◐\";\n\t\tcase \"legacy-compatible\":\n\t\tcase \"drift\":\n\t\t\treturn \"!\";\n\t\tcase \"checksum-mismatch\":\n\t\tcase \"failed\":\n\t\tcase \"missing-local\":\n\t\tcase \"name-mismatch\":\n\t\tcase \"historical-insertion\":\n\t\t\treturn \"✗\";\n\t\tcase \"skipped\":\n\t\t\treturn \"–\";\n\t\tdefault:\n\t\t\treturn \"?\";\n\t}\n}\n\nexport function statusPhrase(status: MigrationDisplayStatus): string {\n\tswitch (status) {\n\t\tcase \"checksum-mismatch\":\n\t\t\treturn \"checksum mismatch\";\n\t\tcase \"legacy-compatible\":\n\t\t\treturn \"legacy ledger identity\";\n\t\tcase \"missing-local\":\n\t\t\treturn \"missing locally\";\n\t\tcase \"name-mismatch\":\n\t\t\treturn \"name mismatch\";\n\t\tcase \"historical-insertion\":\n\t\t\treturn \"historical insertion\";\n\t\tdefault:\n\t\t\treturn status;\n\t}\n}\n\nexport function statusLabel(\n\tstatus: MigrationDisplayStatus,\n\tinteractive: boolean,\n): string {\n\tif (!interactive) {\n\t\treturn `[${status}]`;\n\t}\n\treturn `${statusSymbol(status, true)} ${statusPhrase(status)}`;\n}\n","export function padEnd(value: string, width: number): string {\n\tif (value.length >= width) {\n\t\treturn value;\n\t}\n\treturn value + \" \".repeat(width - value.length);\n}\n\nexport function padStart(value: string, width: number): string {\n\tif (value.length >= width) {\n\t\treturn value;\n\t}\n\treturn \" \".repeat(width - value.length) + value;\n}\n\nexport function columnWidth(values: readonly string[], min = 8): number {\n\tlet max = min;\n\tfor (const value of values) {\n\t\tif (value.length > max) {\n\t\t\tmax = value.length;\n\t\t}\n\t}\n\treturn max;\n}\n","import { paint, statusColor } from \"./colors.ts\";\nimport { railBar, railEnd, railStart } from \"./rail.ts\";\nimport { statusLabel } from \"./symbols.ts\";\nimport { columnWidth, padEnd } from \"./table.ts\";\nimport type {\n  AthenaCliUI,\n  CliCapabilities,\n  Diagnostic,\n  MigrationReportView,\n  MigrationSectionView,\n} from \"./types.ts\";\n\nfunction indentBlock(text: string, prefix = \"  \"): string[] {\n  return text.split(\"\\n\").map((line) => (line.length === 0 ? \"\" : `${prefix}${line}`));\n}\n\nfunction kv(\n  label: string,\n  value: string,\n  capabilities: CliCapabilities,\n  labelWidth = 12\n): string {\n  return `${paint(padEnd(label, labelWidth), \"dim\", capabilities)}${value}`;\n}\n\nfunction outcomeColor(\n  outcome: string\n): \"red\" | \"yellow\" | \"green\" | \"none\" {\n  const text = outcome.toLowerCase();\n  if (text.includes(\"conflict\") || text.includes(\"drift\") || text.includes(\"error\")) {\n    return \"red\";\n  }\n  if (text.includes(\"pending\") || text.includes(\"remain\") || text.includes(\"reconcil\")) {\n    return \"yellow\";\n  }\n  if (text.includes(\"up to date\") || text.includes(\"no pending\")) {\n    return \"green\";\n  }\n  return \"none\";\n}\n\nfunction writeSection(\n  emit: (message: string) => void,\n  section: MigrationSectionView,\n  capabilities: CliCapabilities,\n  interactiveLook: boolean\n): void {\n  emit(paint(section.title, \"bold\", capabilities));\n  emit(\"\");\n  if (section.rows.length === 0) {\n    emit(paint(\"(none)\", \"dim\", capabilities));\n  } else {\n    const nameWidth = columnWidth(\n      section.rows.map((row) => row.name),\n      34\n    );\n    emit(\n      paint(\n        `${padEnd(\"Migration\", nameWidth)}  Status`,\n        \"dim\",\n        capabilities\n      )\n    );\n    for (const row of section.rows) {\n      const label = paint(\n        statusLabel(row.status, interactiveLook),\n        statusColor(row.status),\n        capabilities\n      );\n      const duration =\n        row.durationMs !== undefined\n          ? paint(`  ${row.durationMs}ms`, \"dim\", capabilities)\n          : \"\";\n      emit(`${padEnd(row.name, nameWidth)}  ${label}${duration}`);\n      if (row.detail) {\n        for (const line of indentBlock(row.detail, \"  \")) {\n          emit(paint(line, \"dim\", capabilities));\n        }\n      }\n    }\n  }\n  if (section.summary) {\n    emit(\"\");\n    emit(paint(section.summary, \"dim\", capabilities));\n  }\n  emit(\"\");\n}\n\nfunction writeDiagnostic(\n  emit: (message: string) => void,\n  diagnostic: Diagnostic,\n  capabilities: CliCapabilities\n): void {\n  const color =\n    diagnostic.level === \"error\"\n      ? \"red\"\n      : diagnostic.level === \"warn\"\n        ? \"yellow\"\n        : \"none\";\n  emit(\"\");\n  const [first, ...rest] = diagnostic.message.split(\"\\n\");\n  emit(paint(first ?? diagnostic.message, color, capabilities));\n  for (const line of rest) {\n    emit(line.length === 0 ? \"\" : line);\n  }\n  if (diagnostic.hint) {\n    emit(\"\");\n    emit(paint(diagnostic.hint, \"dim\", capabilities));\n  }\n}\n\nexport function createPlainUi(\n  capabilities: CliCapabilities,\n  write: (message: string) => void = (message) => {\n    console.log(message);\n  }\n): AthenaCliUI {\n  const interactiveLook = capabilities.mode === \"interactive\";\n  const emit = (message: string) => {\n    write(railBar(message, capabilities));\n  };\n\n  return {\n    capabilities,\n    intro(title) {\n      if (capabilities.quiet) {\n        return;\n      }\n      write(railStart(title, capabilities));\n    },\n    outro(message) {\n      if (capabilities.quiet) {\n        return;\n      }\n      write(railEnd(message, capabilities));\n    },\n    note(message, title) {\n      if (capabilities.quiet) {\n        return;\n      }\n      if (title) {\n        emit(paint(title, \"bold\", capabilities));\n      }\n      for (const line of message.split(\"\\n\")) {\n        emit(line);\n      }\n    },\n    warn(message) {\n      emit(paint(message, \"yellow\", capabilities));\n    },\n    error(message) {\n      emit(paint(message, \"red\", capabilities));\n    },\n    success(message) {\n      if (capabilities.quiet) {\n        return;\n      }\n      emit(paint(message, \"green\", capabilities));\n    },\n    info(message) {\n      if (capabilities.quiet) {\n        return;\n      }\n      for (const line of message.split(\"\\n\")) {\n        emit(line);\n      }\n    },\n    renderMigrationReport(report: MigrationReportView) {\n      if (capabilities.quiet && capabilities.mode !== \"json\") {\n        return;\n      }\n      write(railStart(report.title, capabilities));\n      emit(\"\");\n      if (report.target) {\n        emit(paint(\"Target\", \"bold\", capabilities));\n        emit(\"\");\n        emit(kv(\"Provider\", report.target.provider, capabilities));\n        emit(kv(\"Database\", report.target.database, capabilities));\n        emit(kv(\"Directory\", report.target.directory, capabilities));\n        emit(\"\");\n      }\n\n      writeSection(emit, report.application, capabilities, interactiveLook);\n      writeSection(emit, report.auth, capabilities, interactiveLook);\n      for (const section of report.modules ?? []) {\n        writeSection(emit, section, capabilities, interactiveLook);\n      }\n\n      emit(paint(report.outcome, outcomeColor(report.outcome), capabilities));\n      for (const diagnostic of report.diagnostics) {\n        writeDiagnostic(emit, diagnostic, capabilities);\n      }\n      if (report.logPath) {\n        emit(\"\");\n        emit(paint(`Log  ${report.logPath}`, \"dim\", capabilities));\n      }\n      write(railEnd(\"\", capabilities));\n    },\n    async confirm() {\n      // Non-interactive plain UI never prompts.\n      return false;\n    },\n  };\n}\n","/**\n * Interactive renderer. Uses the same structured report as plain mode.\n * Optional @clack/prompts is loaded lazily so domain code never depends on it.\n */\nimport { createPlainUi } from \"./plain.ts\";\nimport type {\n\tAthenaCliUI,\n\tCliCapabilities,\n\tMigrationReportView,\n} from \"./types.ts\";\n\ntype ClackModule = {\n\tintro?: (message: string) => void;\n\toutro?: (message: string) => void;\n\tconfirm?: (opts: { message: string }) => Promise<boolean | symbol>;\n\tisCancel?: (value: unknown) => boolean;\n};\n\nasync function loadClack(): Promise<ClackModule | undefined> {\n\ttry {\n\t\treturn (await import(\"@clack/prompts\")) as ClackModule;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function createClackUi(\n\tcapabilities: CliCapabilities,\n\twrite: (message: string) => void = (message) => {\n\t\tconsole.log(message);\n\t},\n): AthenaCliUI {\n\t// Prefer Clack when available; fall back to plain structured rendering.\n\t// Domain correctness does not depend on this module.\n\tconst plain = createPlainUi({ ...capabilities, mode: \"interactive\" }, write);\n\n\treturn {\n\t\t...plain,\n\t\tcapabilities,\n\t\tintro(title) {\n\t\t\t// Stay synchronous so intro cannot race past the migration table.\n\t\t\tplain.intro(title);\n\t\t},\n\t\toutro(message) {\n\t\t\tplain.outro(message);\n\t\t},\n\t\trenderMigrationReport(report: MigrationReportView) {\n\t\t\tplain.renderMigrationReport(report);\n\t\t},\n\t\tasync confirm(message) {\n\t\t\tconst clack = await loadClack();\n\t\t\tif (!clack?.confirm) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst value = await clack.confirm({ message });\n\t\t\tif (clack.isCancel?.(value)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Boolean(value);\n\t\t},\n\t};\n}\n","import type {\n\tAthenaCliUI,\n\tCliCapabilities,\n\tMigrationReportView,\n} from \"./types.ts\";\n\nexport function createJsonUi(\n\tcapabilities: CliCapabilities,\n\twrite: (message: string) => void = (message) => {\n\t\tconsole.log(message);\n\t},\n): AthenaCliUI {\n\tlet lastReport: MigrationReportView | undefined;\n\n\treturn {\n\t\tcapabilities,\n\t\tintro() {},\n\t\toutro() {\n\t\t\tif (lastReport) {\n\t\t\t\twrite(JSON.stringify(lastReport, null, 2));\n\t\t\t}\n\t\t},\n\t\tnote() {},\n\t\twarn(message) {\n\t\t\twrite(JSON.stringify({ level: \"warn\", message }));\n\t\t},\n\t\terror(message) {\n\t\t\twrite(JSON.stringify({ level: \"error\", message }));\n\t\t},\n\t\tsuccess() {},\n\t\tinfo() {},\n\t\trenderMigrationReport(report) {\n\t\t\tlastReport = report;\n\t\t\twrite(JSON.stringify(report, null, 2));\n\t\t},\n\t\tasync confirm() {\n\t\t\treturn false;\n\t\t},\n\t};\n}\n","import type { ResolveCliCapabilitiesOptions } from \"./capabilities.ts\";\nimport { resolveCliCapabilities } from \"./capabilities.ts\";\nimport { createClackUi } from \"./clack.ts\";\nimport { createJsonUi } from \"./json.ts\";\nimport { createPlainUi } from \"./plain.ts\";\nimport type { AthenaCliUI, CliCapabilities } from \"./types.ts\";\n\nexport type { ResolveCliCapabilitiesOptions } from \"./capabilities.ts\";\nexport {\n\tresolveCliCapabilities,\n\tresolveCliOutputMode,\n} from \"./capabilities.ts\";\nexport { colorizeTaggedLine, styleHelpText } from \"./help.ts\";\nexport {\n\tcliRail,\n\tframeBlock,\n\trailBar,\n\trailEnd,\n\trailError,\n\trailStart,\n\tusesRail,\n} from \"./rail.ts\";\nexport type {\n\tAthenaCliUI,\n\tCliCapabilities,\n\tCliOutputMode,\n\tDiagnostic,\n\tMigrationDisplayStatus,\n\tMigrationReportView,\n\tMigrationRowView,\n\tMigrationSectionView,\n} from \"./types.ts\";\n\nexport function createCliUi(\n\toptions: ResolveCliCapabilitiesOptions & {\n\t\twrite?: (message: string) => void;\n\t\tcapabilities?: CliCapabilities;\n\t} = {},\n): AthenaCliUI {\n\tconst capabilities = options.capabilities ?? resolveCliCapabilities(options);\n\tconst write = options.write;\n\n\tif (capabilities.mode === \"json\") {\n\t\treturn createJsonUi(capabilities, write);\n\t}\n\tif (capabilities.mode === \"interactive\") {\n\t\treturn createClackUi(capabilities, write);\n\t}\n\treturn createPlainUi(capabilities, write);\n}\n","import { spawnSync } from \"node:child_process\";\nimport { relative, resolve, sep } from \"node:path\";\n\nexport const MIGRATION_CONFIG_BASENAMES = [\n  \"athena.config.ts\",\n  \"athena.config.js\",\n  \"athena-js.config.ts\",\n  \"athena-js.config.js\",\n  \".athena.config.ts\",\n  \".athena.config.js\",\n] as const;\n\nexport interface GitCommandResult {\n  status: number | null;\n  stderr: string;\n  stdout: string;\n}\n\nfunction decodeSpawnOutput(value: Buffer | string | null | undefined): string {\n  if (value == null) {\n    return \"\";\n  }\n  return typeof value === \"string\" ? value : value.toString(\"utf8\");\n}\n\nexport function runGit(cwd: string, args: string[]): GitCommandResult {\n  const result = spawnSync(\"git\", args, {\n    cwd,\n    env: {\n      ...process.env,\n      GIT_OPTIONAL_LOCKS: \"0\",\n      GIT_TERMINAL_PROMPT: \"0\",\n    },\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    timeout: 30_000,\n    windowsHide: true,\n  });\n  if (result.error && (result.error as { code?: string }).code === \"ENOENT\") {\n    return { status: null, stderr: \"git not found\", stdout: \"\" };\n  }\n  return {\n    status: result.status,\n    stderr: decodeSpawnOutput(result.stderr),\n    stdout: decodeSpawnOutput(result.stdout),\n  };\n}\n\nexport function toPosix(path: string): string {\n  return path.replace(/\\\\/g, \"/\");\n}\n\nexport function isPathInside(parent: string, child: string): boolean {\n  const rel = relative(parent, child);\n  return rel === \"\" || (!rel.startsWith(\"..\") && !rel.startsWith(`..${sep}`));\n}\n\nexport interface PorcelainV2Record {\n  kind: \"ordinary\" | \"rename\" | \"untracked\" | \"unmerged\" | \"ignored\";\n  origPath?: string;\n  path: string;\n  xy: string;\n}\n\n/**\n * Parse `git status --porcelain=v2 -z` (NUL-separated machine records).\n */\nexport function parsePorcelainV2(buffer: string): PorcelainV2Record[] {\n  const tokens = buffer.split(\"\\0\").filter((token) => token.length > 0);\n  const records: PorcelainV2Record[] = [];\n  for (let index = 0; index < tokens.length; index += 1) {\n    const token = tokens[index];\n    if (token.startsWith(\"? \")) {\n      records.push({ kind: \"untracked\", path: token.slice(2), xy: \"??\" });\n      continue;\n    }\n    if (token.startsWith(\"! \")) {\n      records.push({ kind: \"ignored\", path: token.slice(2), xy: \"!!\" });\n      continue;\n    }\n    if (token.startsWith(\"u \")) {\n      const match = /^u (\\S{2}) \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ (.*)$/.exec(token);\n      records.push({\n        kind: \"unmerged\",\n        path: match?.[2] ?? token.slice(2),\n        xy: match?.[1] ?? \"UU\",\n      });\n      continue;\n    }\n    if (token.startsWith(\"2 \")) {\n      const match =\n        /^2 (\\S{2}) \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ (.*)$/.exec(token);\n      const path = match?.[2] ?? token.slice(2);\n      const origPath = tokens[index + 1] ?? \"\";\n      index += 1;\n      records.push({\n        kind: \"rename\",\n        origPath,\n        path,\n        xy: match?.[1] ?? \"R.\",\n      });\n      continue;\n    }\n    if (token.startsWith(\"1 \")) {\n      const match = /^1 (\\S{2}) \\S+ \\S+ \\S+ \\S+ \\S+ \\S+ (.*)$/.exec(token);\n      records.push({\n        kind: \"ordinary\",\n        path: match?.[2] ?? token.slice(2),\n        xy: match?.[1] ?? \"M.\",\n      });\n    }\n  }\n  return records;\n}\n\nexport function gitShowToplevel(cwd: string): string | undefined {\n  const result = runGit(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n  if (result.status !== 0) {\n    return undefined;\n  }\n  const root = result.stdout.trim();\n  return root.length > 0 ? resolve(root) : undefined;\n}\n\nexport function gitHeadCommit(cwd: string): string | undefined {\n  const result = runGit(cwd, [\"rev-parse\", \"HEAD\"]);\n  if (result.status !== 0) {\n    return undefined;\n  }\n  const sha = result.stdout.trim();\n  return sha.length > 0 ? sha : undefined;\n}\n\nexport function gitBranchName(cwd: string): { branch?: string; detached: boolean } {\n  const result = runGit(cwd, [\"symbolic-ref\", \"--short\", \"-q\", \"HEAD\"]);\n  if (result.status !== 0) {\n    return { detached: true };\n  }\n  const branch = result.stdout.trim();\n  return { branch: branch.length > 0 ? branch : undefined, detached: false };\n}\n\nexport function gitLsTracked(cwd: string, relativePath: string): boolean {\n  const result = runGit(cwd, [\"ls-files\", \"--error-unmatch\", \"--\", relativePath]);\n  return result.status === 0;\n}\n\nexport function gitBlobSha(\n  cwd: string,\n  relativePath: string,\n  commit = \"HEAD\"\n): string | undefined {\n  const result = runGit(cwd, [\"rev-parse\", `${commit}:${relativePath}`]);\n  if (result.status !== 0) {\n    return undefined;\n  }\n  const sha = result.stdout.trim();\n  return sha.length > 0 ? sha : undefined;\n}\n\nexport function gitStatusPorcelainV2(\n  cwd: string,\n  pathspecs: readonly string[]\n): PorcelainV2Record[] {\n  const result = runGit(cwd, [\n    \"status\",\n    \"--porcelain=v2\",\n    \"-z\",\n    \"--untracked-files=all\",\n    \"--\",\n    ...pathspecs,\n  ]);\n  if (result.status !== 0) {\n    return [];\n  }\n  return parsePorcelainV2(result.stdout);\n}\n","import { relative, resolve } from \"node:path\";\n\nimport {\n  gitBranchName,\n  gitHeadCommit,\n  gitShowToplevel,\n  gitStatusPorcelainV2,\n  isPathInside,\n  MIGRATION_CONFIG_BASENAMES,\n  type PorcelainV2Record,\n  toPosix,\n} from \"./git.ts\";\nimport type {\n  InspectSourceControlInput,\n  MigrationSourceControlState,\n  MigrationWorktreeChange,\n  MigrationWorktreeChangeKind,\n} from \"./types.ts\";\n\nfunction kindFromRecord(record: PorcelainV2Record): MigrationWorktreeChangeKind {\n  if (record.kind === \"untracked\") {\n    return \"untracked\";\n  }\n  if (record.kind === \"unmerged\") {\n    return \"conflicted\";\n  }\n  if (record.kind === \"rename\" || record.xy.includes(\"R\")) {\n    return \"renamed\";\n  }\n  if (record.xy.includes(\"D\")) {\n    return \"deleted\";\n  }\n  if (record.xy.includes(\"A\")) {\n    return \"added\";\n  }\n  return \"modified\";\n}\n\nfunction displayCode(kind: MigrationWorktreeChangeKind): string {\n  switch (kind) {\n    case \"untracked\":\n      return \"??\";\n    case \"conflicted\":\n      return \"UU\";\n    case \"renamed\":\n      return \"R\";\n    case \"deleted\":\n      return \"D\";\n    case \"added\":\n      return \"A\";\n    default:\n      return \"M\";\n  }\n}\n\nexport { displayCode };\n\nfunction relativeToCwd(cwd: string, repoPath: string, toplevel: string): string {\n  const absolute = resolve(toplevel, repoPath);\n  return toPosix(relative(cwd, absolute) || repoPath);\n}\n\nfunction pathAffects(\n  posixPath: string,\n  origPath: string | undefined,\n  migrationsPrefix: string,\n  configRelatives: readonly string[]\n): boolean {\n  const candidates = [posixPath, origPath].filter(\n    (item): item is string => Boolean(item)\n  );\n  return candidates.some((path) => {\n    if (migrationsPrefix && (path === migrationsPrefix || path.startsWith(`${migrationsPrefix}/`))) {\n      const base = path.split(\"/\").pop() ?? \"\";\n      // Scaffold keep-files are not migration SQL and must not block apply.\n      if (base === \".gitkeep\") {\n        return false;\n      }\n      return true;\n    }\n    return configRelatives.includes(path);\n  });\n}\n\nexport function inspectSourceControl(\n  input: InspectSourceControlInput\n): MigrationSourceControlState {\n  const cwd = resolve(input.cwd);\n  const toplevel = gitShowToplevel(cwd);\n  const migrationsAbs = resolve(cwd, input.migrationsDirectory);\n  const empty: MigrationSourceControlState = {\n    available: false,\n    changedFiles: [],\n    detached: false,\n    migrationDirectory: toPosix(input.migrationsDirectory),\n  };\n  if (!toplevel || !isPathInside(toplevel, cwd)) {\n    return empty;\n  }\n\n  const pathspecs: string[] = [];\n  let migrationsPrefix = \"\";\n  if (isPathInside(toplevel, migrationsAbs)) {\n    migrationsPrefix = toPosix(relative(toplevel, migrationsAbs));\n    pathspecs.push(migrationsPrefix);\n  }\n  const configRelatives: string[] = [];\n  for (const basename of MIGRATION_CONFIG_BASENAMES) {\n    const abs = resolve(cwd, basename);\n    if (isPathInside(toplevel, abs)) {\n      const rel = toPosix(relative(toplevel, abs));\n      configRelatives.push(rel);\n      pathspecs.push(rel);\n    }\n  }\n  if (input.configPath && !input.configPath.startsWith(\"[\")) {\n    const abs = resolve(cwd, input.configPath);\n    if (isPathInside(toplevel, abs)) {\n      const rel = toPosix(relative(toplevel, abs));\n      configRelatives.push(rel);\n      pathspecs.push(rel);\n    }\n  }\n\n  const uniqueSpecs = [...new Set(pathspecs.filter(Boolean))];\n  const records =\n    uniqueSpecs.length > 0 ? gitStatusPorcelainV2(cwd, uniqueSpecs) : [];\n  const { branch, detached } = gitBranchName(cwd);\n\n  const changedFiles: MigrationWorktreeChange[] = records\n    .filter((record) => record.kind !== \"ignored\")\n    .map((record) => {\n      const path = relativeToCwd(cwd, record.path, toplevel);\n      const origPath = record.origPath\n        ? relativeToCwd(cwd, record.origPath, toplevel)\n        : undefined;\n      const repoPath = toPosix(relative(toplevel, resolve(cwd, path)));\n      const repoOrig = origPath\n        ? toPosix(relative(toplevel, resolve(cwd, origPath)))\n        : undefined;\n      return {\n        affectsMigrations: pathAffects(\n          repoPath,\n          repoOrig,\n          migrationsPrefix,\n          configRelatives\n        ),\n        kind: kindFromRecord(record),\n        origPath,\n        path,\n      };\n    });\n\n  return {\n    available: true,\n    branch,\n    changedFiles,\n    detached,\n    headCommit: gitHeadCommit(cwd),\n    migrationDirectory: toPosix(input.migrationsDirectory),\n    repositoryRoot: toPosix(toplevel),\n  };\n}\n","import { displayCode } from \"./status.ts\";\nimport type {\n  MigrationSourceControlState,\n  MigrationSourceSafety,\n  MigrationWorktreeChange,\n} from \"./types.ts\";\n\nexport function classifySourceSafety(\n  state: MigrationSourceControlState\n): MigrationSourceSafety {\n  if (!state.available) {\n    return \"not-a-repository\";\n  }\n  if (state.available && !state.headCommit) {\n    return \"commit-unresolved\";\n  }\n  const relevant = state.changedFiles.filter((item) => item.affectsMigrations);\n  if (relevant.some((item) => item.kind === \"conflicted\")) {\n    return \"conflicted\";\n  }\n  if (relevant.some((item) => item.kind === \"untracked\")) {\n    return \"untracked\";\n  }\n  if (relevant.length > 0) {\n    return \"dirty\";\n  }\n  return \"verified-clean\";\n}\n\nexport function applyWouldBeRefused(safety: MigrationSourceSafety): boolean {\n  return (\n    safety === \"dirty\" ||\n    safety === \"untracked\" ||\n    safety === \"conflicted\" ||\n    safety === \"commit-unresolved\"\n  );\n}\n\nexport function formatWorktreeChangeLine(change: MigrationWorktreeChange): string {\n  if (change.origPath) {\n    return `  ${displayCode(change.kind)} ${change.origPath} -> ${change.path}`;\n  }\n  return `  ${displayCode(change.kind)} ${change.path}`;\n}\n\nexport function formatSourceSafetyError(\n  state: MigrationSourceControlState,\n  safety: MigrationSourceSafety\n): string {\n  const relevant = state.changedFiles.filter((item) => item.affectsMigrations);\n  const lines = relevant.map(formatWorktreeChangeLine);\n  const heading =\n    safety === \"conflicted\"\n      ? \"Migration source tree has unresolved merge conflicts.\"\n      : \"The migration source tree is not reproducible.\";\n  return [\n    \"Migration safety check failed\",\n    \"\",\n    heading,\n    \"\",\n    \"Uncommitted migration state:\",\n    ...(lines.length > 0 ? lines : [\"  (source commit could not be resolved)\"]),\n    \"\",\n    \"athena-js refuses to apply migration files that are not represented\",\n    \"by a committed repository state.\",\n    \"\",\n    \"Commit or stash migration changes and retry.\",\n    \"\",\n    \"Override:\",\n    \"  athena-js migrate --allow-dirty-migrations\",\n  ].join(\"\\n\");\n}\n\nexport function formatSourceSafetyWarning(\n  state: MigrationSourceControlState,\n  safety: MigrationSourceSafety\n): string {\n  const relevant = state.changedFiles.filter((item) => item.affectsMigrations);\n  return [\n    \"WARNING: migration provenance cannot be guaranteed.\",\n    \"\",\n    ...relevant.map((change) =>\n      `${change.path} is ${change.kind === \"untracked\" ? \"uncommitted\" : change.kind}.`\n    ),\n    \"\",\n    \"If applied, the database may contain migration history that cannot\",\n    \"be reconstructed from Git.\",\n    \"\",\n    safety === \"verified-clean\" ? \"\" : \"migrate plan continues; apply would be refused.\",\n  ]\n    .filter(Boolean)\n    .join(\"\\n\");\n}\n\nexport function formatOverridePrompt(\n  state: MigrationSourceControlState\n): string {\n  const relevant = state.changedFiles.filter((item) => item.affectsMigrations);\n  const names = relevant.map((item) => item.path).join(\"\\n\");\n  return [\n    \"WARNING: migration provenance cannot be guaranteed.\",\n    \"\",\n    names,\n    \"\",\n    \"If applied, the database may contain migration history that cannot\",\n    \"be reconstructed from Git.\",\n    \"\",\n    \"Continue?\",\n  ].join(\"\\n\");\n}\n\nexport function formatPlanProvenance(state: MigrationSourceControlState): string {\n  const relevant = state.changedFiles.filter((item) => item.affectsMigrations);\n  const lines = [\n    \"Repository\",\n    `Commit      ${state.headCommit ?? \"(unresolved)\"}`,\n    `Branch      ${state.detached ? \"(detached)\" : state.branch ?? \"(unknown)\"}`,\n    `Worktree    ${relevant.length > 0 ? \"DIRTY\" : \"CLEAN\"}`,\n  ];\n  if (relevant.length > 0) {\n    lines.push(\"\", \"Migration source warnings\");\n    for (const change of relevant) {\n      lines.push(change.path.split(\"/\").pop() ?? change.path);\n      lines.push(`  ⚠ ${change.kind}`);\n      lines.push(\"  ⚠ not reproducible from HEAD\");\n      lines.push(\"  ⚠ apply would be refused\");\n    }\n  }\n  return lines.join(\"\\n\");\n}\n","import { relative, resolve } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\nimport type { MigrationFile } from \"../types.ts\";\nimport { gitBlobSha, gitLsTracked, toPosix } from \"./git.ts\";\nimport { classifySourceSafety } from \"./safety.ts\";\nimport type {\n  MigrationFileProvenance,\n  MigrationSourceControlState,\n  MigrationSourceProvenance,\n  PreparedMigration,\n} from \"./types.ts\";\n\nexport function attachFileProvenance(\n  file: MigrationFile,\n  state: MigrationSourceControlState\n): MigrationFileProvenance | undefined {\n  if (!state.available || !state.repositoryRoot || !state.headCommit) {\n    return undefined;\n  }\n  const relativePath = toPosix(relative(state.repositoryRoot, resolve(file.path)));\n  const dirty = state.changedFiles.some(\n    (change) =>\n      change.affectsMigrations &&\n      (change.path === relativePath ||\n        change.path.endsWith(`/${file.filename}`) ||\n        change.path.endsWith(file.filename))\n  );\n  const tracked = gitLsTracked(state.repositoryRoot, relativePath);\n  return {\n    branch: state.branch,\n    dirty,\n    gitBlobSha: tracked ? gitBlobSha(state.repositoryRoot, relativePath) : undefined,\n    headCommit: state.headCommit,\n    relativePath,\n    repositoryRoot: state.repositoryRoot,\n    tracked,\n    vcs: \"git\",\n  };\n}\n\nexport function freezePreparedMigrations(\n  files: readonly MigrationFile[],\n  state: MigrationSourceControlState\n): PreparedMigration[] {\n  const safety = classifySourceSafety(state);\n  const executionId = randomUUID();\n  const source: MigrationSourceProvenance = {\n    executionId,\n    safety,\n    sourceDirty: safety !== \"verified-clean\" && safety !== \"not-a-repository\",\n    worktree: state,\n  };\n  return files.map((file) => {\n    const provenance = attachFileProvenance(file, state);\n    return {\n      checksum: file.checksum,\n      filename: file.filename,\n      name: file.name,\n      provenance,\n      source,\n      sourcePath: file.path,\n      sql: file.sql,\n      version: file.version,\n    };\n  });\n}\n\nexport function preparedToMigrationFile(\n  prepared: PreparedMigration\n): MigrationFile {\n  return {\n    checksum: prepared.checksum,\n    executionId: prepared.source.executionId,\n    filename: prepared.filename,\n    name: prepared.name,\n    path: prepared.sourcePath,\n    provenance: prepared.provenance,\n    sourceDirty: prepared.source.sourceDirty,\n    sql: prepared.sql,\n    version: prepared.version,\n  };\n}\n","export {\n  gitBlobSha,\n  gitHeadCommit,\n  gitLsTracked,\n  gitShowToplevel,\n  parsePorcelainV2,\n  runGit,\n} from \"./git.ts\";\nexport { freezePreparedMigrations, preparedToMigrationFile } from \"./provenance.ts\";\nexport {\n  applyWouldBeRefused,\n  classifySourceSafety,\n  formatOverridePrompt,\n  formatPlanProvenance,\n  formatSourceSafetyError,\n  formatSourceSafetyWarning,\n  formatWorktreeChangeLine,\n} from \"./safety.ts\";\nexport { inspectSourceControl } from \"./status.ts\";\nexport type {\n  InspectSourceControlInput,\n  MigrationFileProvenance,\n  MigrationSourceControlState,\n  MigrationSourceProvenance,\n  MigrationSourceSafety,\n  MigrationWorktreeChange,\n  PreparedMigration,\n} from \"./types.ts\";\n","import { type AthenaCliUI, createCliUi } from \"../../cli/ui/index.ts\";\nimport { loadGeneratorConfig } from \"../../generator/config.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../generator/database-authority.ts\";\nimport type { NormalizedAthenaGeneratorConfig } from \"../../generator/types.ts\";\nimport { discoverMigrations } from \"../discovery.ts\";\nimport {\n\tensureAthenaProjectLayout,\n\tformatManagedAuthDrift,\n\tinspectManagedAuthMigrations,\n\tmaterializeManagedAuthMigrations,\n\ttype ManagedAuthInspection,\n} from \"../managed-auth.ts\";\nimport {\n\tapplyWouldBeRefused,\n\tclassifySourceSafety,\n\tformatOverridePrompt,\n\tformatSourceSafetyError,\n\tformatSourceSafetyWarning,\n\tfreezePreparedMigrations,\n\tinspectSourceControl,\n\tpreparedToMigrationFile,\n} from \"../source-control/index.ts\";\nimport type { DirtyMigrationWorktree } from \"../git-worktree.ts\";\nimport type {\n\tMigrationSourceControlState,\n\tMigrationSourceSafety,\n} from \"../source-control/types.ts\";\nimport {\n\ttype MigrationCommandMode,\n\tMigrationError,\n\ttype MigrationFile,\n\ttype RunMigrationsOptions,\n} from \"../types.ts\";\nimport {\n\trelativeDirectoryDisplay,\n\tresolveMigrationsDirectory,\n} from \"./authority.ts\";\n\nexport interface PreparedApplicationMigrationRun {\n\tallowDirtyMigrations: boolean;\n\tconfig: NormalizedAthenaGeneratorConfig;\n\tcwd: string;\n\tdirectoryDisplay: string;\n\tdryRun: boolean;\n\tgitWorktree: DirtyMigrationWorktree;\n\tlocal: MigrationFile[];\n\tmanagedAuth: ManagedAuthInspection;\n\tmode: MigrationCommandMode;\n\tmutating: boolean;\n\tsourceControl: MigrationSourceControlState;\n\tsourceSafety: MigrationSourceSafety;\n\tui: AthenaCliUI;\n}\n\nfunction resolveUi(options: RunMigrationsOptions): AthenaCliUI {\n\tif (options.ui) {\n\t\treturn options.ui;\n\t}\n\treturn createCliUi({\n\t\tjson: options.json,\n\t\tplain: options.plain,\n\t\twrite: options.log,\n\t});\n}\n\nexport async function prepareApplicationMigrationRun(\n\toptions: RunMigrationsOptions,\n): Promise<PreparedApplicationMigrationRun> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst ui = resolveUi(options);\n\tconst mode: MigrationCommandMode =\n\t\toptions.mode ?? (options.dryRun ? \"dry-run\" : \"apply\");\n\tconst dryRun =\n\t\tmode === \"dry-run\" ||\n\t\tmode === \"plan\" ||\n\t\tmode === \"verify\" ||\n\t\tBoolean(options.dryRun);\n\n\tconst loaded = await loadGeneratorConfig({\n\t\tconfigPath: options.configPath,\n\t\tcwd,\n\t});\n\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\tapplyProjectEnv: false,\n\t\tcwd,\n\t\tloaded,\n\t\tmode: \"direct\",\n\t});\n\tconst config = {\n\t\t...loaded.config,\n\t\tprovider: authority.provider,\n\t};\n\tauthority.restoreEnv();\n\tconst absoluteDirectory = resolveMigrationsDirectory(config, cwd);\n\tconst directoryDisplay = relativeDirectoryDisplay(cwd, absoluteDirectory);\n\tconst layout = await ensureAthenaProjectLayout({\n\t\tapplicationDirectory: absoluteDirectory,\n\t\tcwd,\n\t\tdryRun,\n\t});\n\tif (layout.createdApplicationMigrations && !dryRun) {\n\t\tui.note(`Created application migrations directory ${directoryDisplay}`);\n\t}\n\tconst mutating = mode === \"apply\" || mode === \"repair\";\n\tif (!dryRun) {\n\t\tconst materialized = await materializeManagedAuthMigrations({\n\t\t\tcwd,\n\t\t\toverwrite: mutating,\n\t\t});\n\t\tif (\n\t\t\tmutating &&\n\t\t\t(materialized.written.length > 0 || materialized.restored.length > 0)\n\t\t) {\n\t\t\tui.note(\n\t\t\t\t\"Materialized Embedded Auth migrations in athena/managed/auth/migrations\",\n\t\t\t);\n\t\t}\n\t}\n\tconst managedAuth = await inspectManagedAuthMigrations({ cwd });\n\tif (managedAuth.drifted) {\n\t\tui.warn(formatManagedAuthDrift(managedAuth));\n\t}\n\n\tconst discover =\n\t\toptions.discover ??\n\t\t((directory: string) => discoverMigrations({ cwd, directory }));\n\n\tconst discovered = await discover(\n\t\tabsoluteDirectory.startsWith(cwd)\n\t\t\t? relativeDirectoryDisplay(cwd, absoluteDirectory)\n\t\t\t: absoluteDirectory,\n\t);\n\n\tconst resolvedConfigPath =\n\t\toptions.configPath ??\n\t\t(loaded.configPath.startsWith(\"[\") ? undefined : loaded.configPath);\n\tconst sourceControl = (options.inspectSourceControl ?? inspectSourceControl)({\n\t\tconfigPath: resolvedConfigPath,\n\t\tcwd,\n\t\tmigrationsDirectory: relativeDirectoryDisplay(cwd, absoluteDirectory),\n\t});\n\tconst sourceSafety = classifySourceSafety(sourceControl);\n\tconst allowDirtyMigrations = Boolean(\n\t\toptions.allowDirtyMigrations ?? options.allowDirty,\n\t);\n\tif (mutating && applyWouldBeRefused(sourceSafety) && !allowDirtyMigrations) {\n\t\tthrow new MigrationError(\n\t\t\t\"INTEGRITY\",\n\t\t\tformatSourceSafetyError(sourceControl, sourceSafety),\n\t\t);\n\t}\n\tif (mutating && applyWouldBeRefused(sourceSafety) && allowDirtyMigrations) {\n\t\tif (!options.yes) {\n\t\t\tif (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\"CONFIG\",\n\t\t\t\t\t[\n\t\t\t\t\t\tformatSourceSafetyWarning(sourceControl, sourceSafety),\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Non-interactive override requires:\",\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"  athena-js migrate --allow-dirty-migrations --yes\",\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst confirmed = await ui.confirm(formatOverridePrompt(sourceControl));\n\t\t\tif (!confirmed) {\n\t\t\t\tthrow new MigrationError(\"CONFIG\", \"Dirty migration apply cancelled.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tconst prepared = freezePreparedMigrations(discovered, sourceControl);\n\tconst local = prepared.map(preparedToMigrationFile);\n\tconst gitWorktree = {\n\t\tdirty: applyWouldBeRefused(sourceSafety),\n\t\tentries: sourceControl.changedFiles\n\t\t\t.filter((item) => item.affectsMigrations)\n\t\t\t.map((item) => ({\n\t\t\t\tcode:\n\t\t\t\t\titem.kind === \"untracked\"\n\t\t\t\t\t\t? \"??\"\n\t\t\t\t\t\t: item.kind === \"deleted\"\n\t\t\t\t\t\t\t? \"D\"\n\t\t\t\t\t\t\t: item.kind === \"renamed\"\n\t\t\t\t\t\t\t\t? \"R\"\n\t\t\t\t\t\t\t\t: item.kind === \"added\"\n\t\t\t\t\t\t\t\t\t? \"A\"\n\t\t\t\t\t\t\t\t\t: \"M\",\n\t\t\t\torigPath: item.origPath,\n\t\t\t\tpath: item.path,\n\t\t\t})),\n\t\tinGitWorktree: sourceControl.available,\n\t};\n\n\treturn {\n\t\tallowDirtyMigrations,\n\t\tconfig,\n\t\tcwd,\n\t\tdirectoryDisplay,\n\t\tdryRun,\n\t\tgitWorktree,\n\t\tlocal,\n\t\tmanagedAuth,\n\t\tmode,\n\t\tmutating,\n\t\tsourceControl,\n\t\tsourceSafety,\n\t\tui,\n\t};\n}\n","import { schemaHas, type ProjectedSchema } from \"../analysis/projected-schema.ts\";\nimport type { MigrationAnalysis } from \"../analysis/semantic-ir.ts\";\nimport type {\n  ArchivedMigrationSource,\n  LedgerMigrationTruth,\n  ReconciliationConfidence,\n  ReconciliationReport,\n  RepositoryMigrationTruth,\n  VersionReconciliation,\n} from \"./types.ts\";\n\nexport interface ReconcileVersionInput {\n  archive?: ArchivedMigrationSource;\n  archiveAnalysis?: MigrationAnalysis;\n  laterDependenciesSatisfied: boolean;\n  ledger?: LedgerMigrationTruth;\n  physical: ProjectedSchema;\n  repository?: RepositoryMigrationTruth;\n  repositoryAnalysis?: MigrationAnalysis;\n}\n\nfunction physicalMatchesAnalysis(\n  physical: ProjectedSchema,\n  analysis: MigrationAnalysis | undefined\n): boolean {\n  if (!analysis) {\n    return false;\n  }\n  const objects = analysis.effects.creates.filter(\n    (object) =>\n      object.kind === \"schema\" ||\n      object.kind === \"table\" ||\n      object.kind === \"column\" ||\n      object.kind === \"function\" ||\n      object.kind === \"index\"\n  );\n  if (objects.length === 0) {\n    return false;\n  }\n  return objects.every((object) => schemaHas(physical, object));\n}\n\nfunction isIdempotent(sql: string): boolean {\n  return /IF\\s+NOT\\s+EXISTS|CREATE\\s+OR\\s+REPLACE/i.test(sql);\n}\n\nfunction effectsIdentifiable(analysis: MigrationAnalysis | undefined): boolean {\n  return Boolean(analysis && analysis.effects.creates.length > 0);\n}\n\nexport function reconcileVersion(\n  input: ReconcileVersionInput\n): VersionReconciliation {\n  const version =\n    input.repository?.version ??\n    input.ledger?.version ??\n    input.archive?.version ??\n    0;\n  const physicalMatchesRepository = physicalMatchesAnalysis(\n    input.physical,\n    input.repositoryAnalysis\n  );\n  const physicalMatchesArchive = physicalMatchesAnalysis(\n    input.physical,\n    input.archiveAnalysis\n  );\n  const evidence = {\n    archiveChecksum: input.archive?.checksum,\n    competingArchive: Boolean(\n      input.archive &&\n        input.repository &&\n        input.archive.checksum !== input.repository.checksum\n    ),\n    laterDependenciesSatisfied: input.laterDependenciesSatisfied,\n    physicalMatchesArchive,\n    physicalMatchesRepository,\n    repositoryCommitted: Boolean(input.repository?.committed),\n  };\n\n  if (!input.repository && !input.ledger && !input.archive) {\n    return {\n      action: { kind: \"manual-review\", reason: \"No evidence for this version.\" },\n      autoEligible: false,\n      classification: \"AMBIGUOUS_HISTORY\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      version,\n    };\n  }\n\n  if (input.repository && !input.ledger) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason: \"Repository has a migration with no ledger row.\",\n      },\n      autoEligible: false,\n      classification: \"MISSING_LEDGER\",\n      confidence: physicalMatchesRepository ? \"MEDIUM\" : \"AMBIGUOUS\",\n      evidence,\n      repository: input.repository,\n      version,\n    };\n  }\n\n  if (input.ledger && !input.repository) {\n    if (input.archive && input.archive.checksum === input.ledger.checksum) {\n      return {\n        action: {\n          kind: \"restore-local-source\",\n          source: \"database-archive\",\n          version,\n        },\n        archive: input.archive,\n        autoEligible: physicalMatchesArchive,\n        classification: \"MISSING_SOURCE\",\n        confidence: physicalMatchesArchive ? \"HIGH\" : \"MEDIUM\",\n        evidence,\n        ledger: input.ledger,\n        version,\n      };\n    }\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason: \"Ledger row has no matching repository file.\",\n      },\n      autoEligible: false,\n      classification: \"MISSING_SOURCE\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      ledger: input.ledger,\n      version,\n    };\n  }\n\n  const repo = input.repository;\n  const ledger = input.ledger;\n  if (!(repo && ledger)) {\n    return {\n      action: { kind: \"manual-review\", reason: \"Incomplete evidence.\" },\n      autoEligible: false,\n      classification: \"AMBIGUOUS_HISTORY\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      version,\n    };\n  }\n\n  if (repo.checksum === ledger.checksum) {\n    if (physicalMatchesRepository) {\n      return {\n        action: { kind: \"no-op\" },\n        archive: input.archive,\n        autoEligible: false,\n        classification: \"CONSISTENT\",\n        confidence: \"HIGH\",\n        evidence,\n        ledger,\n        repository: repo,\n        version,\n      };\n    }\n    return {\n      action: {\n        kind: \"create-forward-repair\",\n        reason: \"History agrees; physical objects expected by this migration are missing.\",\n        version,\n      },\n      archive: input.archive,\n      autoEligible: false,\n      classification: \"PHYSICAL_DRIFT\",\n      confidence: \"HIGH\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (\n    input.archive &&\n    input.archive.checksum === ledger.checksum &&\n    physicalMatchesArchive &&\n    physicalMatchesRepository\n  ) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Physical schema satisfies both archived SQL and current repository SQL. Cannot determine which migration was actually executed. Automatic repair is unsafe.\",\n      },\n      archive: input.archive,\n      autoEligible: false,\n      classification: \"AMBIGUOUS_HISTORY\",\n      confidence: \"AMBIGUOUS\",\n      evidence: { ...evidence, competingArchive: true },\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (\n    input.archive &&\n    input.archive.checksum === ledger.checksum &&\n    physicalMatchesArchive &&\n    !physicalMatchesRepository\n  ) {\n    return {\n      action: {\n        kind: \"restore-local-source\",\n        source: \"database-archive\",\n        version,\n      },\n      archive: input.archive,\n      autoEligible: true,\n      classification: \"SOURCE_DRIFT\",\n      confidence: \"HIGH\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (repo.name !== ledger.name) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Cannot determine which migration was actually executed. Automatic repair is unsafe.\",\n      },\n      archive: input.archive,\n      autoEligible: false,\n      classification: \"AMBIGUOUS_HISTORY\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (\n    physicalMatchesRepository &&\n    !physicalMatchesArchive &&\n    repo.name === ledger.name &&\n    repo.committed &&\n    input.laterDependenciesSatisfied &&\n    (isIdempotent(repo.sql) || effectsIdentifiable(input.repositoryAnalysis)) &&\n    !(input.archive && input.archive.checksum === ledger.checksum)\n  ) {\n    return {\n      action: {\n        fromChecksum: ledger.checksum,\n        kind: \"repair-ledger\",\n        toChecksum: repo.checksum,\n        version,\n      },\n      archive: input.archive,\n      autoEligible: true,\n      classification: \"LEDGER_SOURCE_DIVERGENCE\",\n      confidence: \"HIGH\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (physicalMatchesRepository !== physicalMatchesArchive) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason: \"Repository and ledger/archive disagree; physical state is mixed.\",\n      },\n      archive: input.archive,\n      autoEligible: false,\n      classification: \"THREE_WAY_DIVERGENCE\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  return {\n    action: {\n      kind: \"manual-review\",\n      reason:\n        \"Cannot determine which migration was actually executed. Automatic repair is unsafe.\",\n    },\n    archive: input.archive,\n    autoEligible: false,\n    classification: \"AMBIGUOUS_HISTORY\",\n    confidence: \"AMBIGUOUS\",\n    evidence,\n    ledger,\n    repository: repo,\n    version,\n  };\n}\n\nexport function buildReconciliationReport(\n  diagnoses: VersionReconciliation[]\n): ReconciliationReport {\n  const autoEligibleCount = diagnoses.filter(\n    (item) => item.autoEligible && item.confidence === \"HIGH\"\n  ).length;\n  const diverged = diagnoses.filter((item) => item.classification !== \"CONSISTENT\");\n  return {\n    autoEligibleCount,\n    diagnoses,\n    summary:\n      diverged.length === 0\n        ? \"Repository, ledger, and physical schema agree.\"\n        : `${diverged.length} version(s) diverge. ${autoEligibleCount} HIGH-confidence metadata repair(s) eligible.`,\n  };\n}\n\nexport function isHighAutoRepair(\n  diagnosis: VersionReconciliation\n): boolean {\n  return diagnosis.autoEligible && diagnosis.confidence === \"HIGH\";\n}\n\nexport type { ReconciliationConfidence };\n","import { objectKey } from \"../analysis/ast.ts\";\nimport { schemaHas, type ProjectedSchema } from \"../analysis/projected-schema.ts\";\nimport { analyzeMigrationFile } from \"../analysis/analyzer.ts\";\nimport type { MigrationAnalysis } from \"../analysis/semantic-ir.ts\";\nimport type { AppliedMigration, MigrationFile } from \"../types.ts\";\nimport { checksumMigrationSql } from \"../checksum.ts\";\nimport { buildReconciliationReport, reconcileVersion } from \"./engine.ts\";\nimport type {\n  ArchivedMigrationSource,\n  ReconciliationReport,\n  VersionReconciliation,\n} from \"./types.ts\";\n\nfunction laterDependenciesSatisfied(\n  version: number,\n  analyses: readonly MigrationAnalysis[],\n  physical: ProjectedSchema\n): boolean {\n  const provider = analyses.find((item) => item.version === version);\n  if (!provider) {\n    return true;\n  }\n  const provided = new Set(\n    provider.effects.creates.map((object) => objectKey(object))\n  );\n  for (const analysis of analyses) {\n    if (analysis.version <= version) {\n      continue;\n    }\n    for (const dependency of analysis.dependencies) {\n      if (\n        dependency.category !== \"REQUIRES_TABLE\" &&\n        dependency.category !== \"REQUIRES_COLUMN\"\n      ) {\n        continue;\n      }\n      if (!provided.has(objectKey(dependency.object))) {\n        continue;\n      }\n      if (!schemaHas(physical, dependency.object)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nexport async function assembleReconciliationReport(input: {\n  analyses: readonly MigrationAnalysis[];\n  applied: readonly AppliedMigration[];\n  archives: readonly ArchivedMigrationSource[];\n  files: readonly MigrationFile[];\n  physical: ProjectedSchema;\n}): Promise<ReconciliationReport> {\n  const versions = new Set<number>([\n    ...input.files.map((file) => file.version),\n    ...input.applied.map((row) => row.version),\n    ...input.archives.map((row) => row.version),\n  ]);\n  const diagnoses: VersionReconciliation[] = [];\n  for (const version of [...versions].sort((a, b) => a - b)) {\n    const file = input.files.find((item) => item.version === version);\n    const ledger = input.applied.find((item) => item.version === version);\n    const archive = input.archives.find((item) => item.version === version);\n    const repositoryAnalysis = input.analyses.find(\n      (item) => item.version === version\n    );\n    let archiveAnalysis: MigrationAnalysis | undefined;\n    if (archive) {\n      archiveAnalysis = await analyzeMigrationFile({\n        checksum: archive.checksum || checksumMigrationSql(archive.sql),\n        filename: archive.sourcePath ?? `${version}_archive.sql`,\n        name: \"archive\",\n        path: archive.sourcePath ?? \"archive\",\n        sql: archive.sql,\n        version,\n      });\n    }\n    diagnoses.push(\n      reconcileVersion({\n        archive,\n        archiveAnalysis,\n        laterDependenciesSatisfied: laterDependenciesSatisfied(\n          version,\n          input.analyses,\n          input.physical\n        ),\n        ledger: ledger\n          ? {\n              checksum: ledger.checksum,\n              name: ledger.name,\n              sourceBlobSha: ledger.sourceBlobSha,\n              sourceCommit: ledger.sourceCommit,\n              sourceDirty: ledger.sourceDirty,\n              version: ledger.version,\n            }\n          : undefined,\n        physical: input.physical,\n        repository: file\n          ? {\n              checksum: file.checksum,\n              committed: Boolean(\n                file.provenance?.tracked && !file.provenance.dirty\n              ),\n              filename: file.filename,\n              gitBlobSha: file.provenance?.gitBlobSha,\n              name: file.name,\n              path: file.path,\n              sql: file.sql,\n              version: file.version,\n            }\n          : undefined,\n        repositoryAnalysis,\n      })\n    );\n  }\n  return buildReconciliationReport(diagnoses);\n}\n","import type { ReconciliationReport, VersionReconciliation } from \"./types.ts\";\n\nexport function formatVersionReconciliation(\n  diagnosis: VersionReconciliation\n): string {\n  const repo = diagnosis.repository;\n  const ledger = diagnosis.ledger;\n  const lines = [\n    `Version ${diagnosis.version}`,\n    \"\",\n    \"Repository:\",\n    repo\n      ? `  ${repo.filename}\\n  checksum ${repo.checksum.slice(0, 12)}...\\n  ${repo.committed ? \"committed\" : \"not committed\"}`\n      : \"  (missing)\",\n    \"\",\n    \"Ledger:\",\n    ledger\n      ? `  ${ledger.name}\\n  checksum ${ledger.checksum.slice(0, 12)}...`\n      : \"  (missing)\",\n    \"\",\n    \"Physical schema:\",\n    diagnosis.evidence.physicalMatchesRepository\n      ? \"  matches repository expected postconditions\"\n      : \"  does not fully match repository expected postconditions\",\n    diagnosis.evidence.physicalMatchesArchive\n      ? \"  matches archived executed SQL postconditions\"\n      : \"  archived SQL postconditions unavailable or unmatched\",\n    \"\",\n    \"Historical evidence:\",\n    diagnosis.archive\n      ? `  archived checksum ${diagnosis.archive.checksum.slice(0, 12)}...`\n      : \"  migration source archive unavailable\",\n    diagnosis.evidence.laterDependenciesSatisfied\n      ? \"  later migration dependencies are satisfied\"\n      : \"  later migration dependencies are not satisfied\",\n    \"\",\n    \"Classification:\",\n    `  ${diagnosis.classification}`,\n    \"\",\n    \"Confidence:\",\n    `  ${diagnosis.confidence}`,\n    \"\",\n    \"Recommended repair:\",\n    `  ${formatAction(diagnosis)}`,\n    \"\",\n    diagnosis.confidence === \"AMBIGUOUS\"\n      ? \"Automatic repair is unsafe.\\n\"\n      : \"\",\n    \"Migration SQL will NOT be executed.\",\n  ].filter((line) => line !== \"\");\n  return lines.join(\"\\n\");\n}\n\nexport function serializeReconciliationReport(report: ReconciliationReport): string {\n  return JSON.stringify(report, null, 2);\n}\n\nfunction formatAction(diagnosis: VersionReconciliation): string {\n  const action = diagnosis.action;\n  switch (action.kind) {\n    case \"repair-ledger\":\n      return `Update ledger checksum for version ${action.version}:\\n    ${action.fromChecksum.slice(0, 12)}... → ${action.toChecksum.slice(0, 12)}...`;\n    case \"restore-local-source\":\n      return `Restore local source for version ${action.version} from ${action.source}.`;\n    case \"create-forward-repair\":\n      return `Create a forward repair migration. Do not rewrite history.\\n    ${action.reason}`;\n    case \"no-op\":\n      return \"No change.\";\n    case \"manual-review\":\n      return `Manual review required.\\n    ${action.reason}`;\n  }\n}\n\nexport function formatReconciliationReport(\n  diagnoses: readonly VersionReconciliation[]\n): string {\n  const body = diagnoses\n    .filter((item) => item.classification !== \"CONSISTENT\")\n    .map((item) => formatVersionReconciliation(item))\n    .join(`\\n\\n${\"─\".repeat(40)}\\n\\n`);\n  return [\"Athena migration reconciliation\", \"\", body || \"No divergences detected.\"].join(\n    \"\\n\"\n  );\n}\n","export { assembleReconciliationReport } from \"./assemble.ts\";\nexport {\n  buildReconciliationReport,\n  isHighAutoRepair,\n  reconcileVersion,\n} from \"./engine.ts\";\nexport {\n  formatReconciliationReport,\n  formatVersionReconciliation,\n  serializeReconciliationReport,\n} from \"./format.ts\";\nexport type {\n  ArchivedMigrationSource,\n  LedgerMigrationTruth,\n  MigrationReconciliationAction,\n  ReconciliationClassification,\n  ReconciliationConfidence,\n  ReconciliationReport,\n  RepositoryMigrationTruth,\n  VersionReconciliation,\n} from \"./types.ts\";\n","import { writeFile } from \"node:fs/promises\";\nimport { basename, resolve } from \"node:path\";\nimport type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport type { CompileMigrationsResult } from \"../analysis/index.ts\";\nimport type { MigrationBackend } from \"../backend.ts\";\nimport {\n\tassembleReconciliationReport,\n\tformatReconciliationReport,\n\tisHighAutoRepair,\n\tserializeReconciliationReport,\n} from \"../reconciliation/index.ts\";\nimport { MigrationError, type RunMigrationsOptions } from \"../types.ts\";\n\nexport async function reconcileApplicationMigrations(input: {\n\tbackend: MigrationBackend;\n\tcwd: string;\n\tdirectoryDisplay: string;\n\tlocal: readonly import(\"../types.ts\").MigrationFile[];\n\toptions: RunMigrationsOptions;\n\tsemantic: CompileMigrationsResult;\n\tui: AthenaCliUI;\n}): Promise<import(\"../reconciliation/types.ts\").ReconciliationReport> {\n\tconst { backend, cwd, directoryDisplay, local, options, semantic, ui } =\n\t\tinput;\n\tif (options.applyReconcile) {\n\t\tawait backend.ensureLedger();\n\t}\n\tconst archives = (await backend.listArchivedSources?.()) ?? [];\n\tconst reconciliation = await assembleReconciliationReport({\n\t\tanalyses: semantic.analyses,\n\t\tapplied: await backend.listAppliedMigrations(),\n\t\tarchives,\n\t\tfiles: local,\n\t\tphysical: semantic.physical,\n\t});\n\tif (options.json) {\n\t\t(options.log ?? console.log)(serializeReconciliationReport(reconciliation));\n\t} else {\n\t\tui.info(formatReconciliationReport(reconciliation.diagnoses));\n\t\tui.info(reconciliation.summary);\n\t}\n\tconst eligible = reconciliation.diagnoses.filter(isHighAutoRepair);\n\tif (options.applyReconcile && eligible.length > 0) {\n\t\tif (!options.yes) {\n\t\t\tif (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\"CONFIG\",\n\t\t\t\t\t[\n\t\t\t\t\t\treconciliation.summary,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Applying HIGH-confidence metadata repairs requires confirmation.\",\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"  athena-js migrate reconcile --apply --yes\",\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst confirmed = await ui.confirm(\n\t\t\t\t`Apply ${eligible.length} HIGH-confidence metadata repair(s)? Migration SQL will not run.`,\n\t\t\t);\n\t\t\tif (!confirmed) {\n\t\t\t\tthrow new MigrationError(\"CONFIG\", \"Reconciliation apply cancelled.\");\n\t\t\t}\n\t\t}\n\t\tfor (const diagnosis of eligible) {\n\t\t\tif (diagnosis.action.kind === \"repair-ledger\") {\n\t\t\t\tawait backend.repairLedgerChecksum?.(\n\t\t\t\t\tdiagnosis.action.version,\n\t\t\t\t\tdiagnosis.action.toChecksum,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tdiagnosis.action.kind === \"restore-local-source\" &&\n\t\t\t\tdiagnosis.archive\n\t\t\t) {\n\t\t\t\tconst filename =\n\t\t\t\t\tbasename(\n\t\t\t\t\t\tdiagnosis.repository?.path ?? diagnosis.archive.sourcePath ?? \"\",\n\t\t\t\t\t) || `${String(diagnosis.version).padStart(4, \"0\")}_restored.sql`;\n\t\t\t\tconst target =\n\t\t\t\t\tdiagnosis.repository?.path ??\n\t\t\t\t\tresolve(cwd, directoryDisplay, filename);\n\t\t\t\tif (target && basename(target)) {\n\t\t\t\t\tawait writeFile(target, diagnosis.archive.sql, \"utf8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait backend.insertReconciliation?.({\n\t\t\t\taction: diagnosis.action.kind,\n\t\t\t\tclassification: diagnosis.classification,\n\t\t\t\tconfidence: diagnosis.confidence,\n\t\t\t\tevidence: diagnosis.evidence,\n\t\t\t\tnewChecksum:\n\t\t\t\t\tdiagnosis.action.kind === \"repair-ledger\"\n\t\t\t\t\t\t? diagnosis.action.toChecksum\n\t\t\t\t\t\t: diagnosis.repository?.checksum,\n\t\t\t\toldChecksum: diagnosis.ledger?.checksum,\n\t\t\t\trepositoryCommit: diagnosis.repository?.gitBlobSha,\n\t\t\t\tversion: diagnosis.version,\n\t\t\t});\n\t\t}\n\t}\n\treturn reconciliation;\n}\n","export type AthenaAuthMigrationModules = {\n\tauth?: boolean;\n\tbilling?: boolean;\n\tchat?: boolean;\n\teventIngress?: boolean;\n};\n\n/**\n * Embedded Auth applies when `modules` is omitted (legacy) or `modules.auth === true`.\n */\nexport function shouldApplyEmbeddedAuthMigrations(\n\tmodules: AthenaAuthMigrationModules | undefined,\n): boolean {\n\tif (modules == null) {\n\t\treturn true;\n\t}\n\treturn modules.auth === true;\n}\n","/**\n * Immutable Embedded Auth migration SQL.\n *\n * CLI / managed-auth materialization may import this module.\n * Do not import auth/local/database, postgres/*, next/*, server.ts,\n * auth/server-entry, or server-only.\n */\n\nimport { ATHENA_AUTHORIZATION_ASSIGNMENT_SQL, ATHENA_AUTHORIZATION_CONSTRAINTS_SQL } from \"../local/authorization-sql.ts\";\nimport { ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS } from \"../local/email/schema-sql.ts\";\n\nexport interface AthenaAuthCanonicalMigration {\n\tname: string;\n\tsql: string;\n\tversion: number;\n}\n\nconst ATHENA_AUTH_SCHEMA_STATEMENTS: readonly AthenaAuthCanonicalMigration[] = [\n{\n      name: \"001_create_schema\",\n      sql: \"CREATE SCHEMA IF NOT EXISTS athena\",\n      version: 0,\n    },\n    {\n      name: \"001_create_core_tables\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.users (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    email TEXT UNIQUE,\n    email_verified BOOLEAN NOT NULL DEFAULT FALSE,\n    image TEXT,\n    username TEXT UNIQUE,\n    display_username TEXT,\n    two_factor_enabled BOOLEAN NOT NULL DEFAULT FALSE,\n    role TEXT,\n    banned BOOLEAN NOT NULL DEFAULT FALSE,\n    ban_reason TEXT,\n    ban_expires TIMESTAMPTZ,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.sessions (\n    id TEXT PRIMARY KEY,\n    expires_at TIMESTAMPTZ NOT NULL,\n    token TEXT NOT NULL UNIQUE,\n    ip_address TEXT,\n    user_agent TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    impersonated_by TEXT,\n    active_organization_id TEXT,\n    active BOOLEAN NOT NULL DEFAULT TRUE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.accounts (\n    id TEXT PRIMARY KEY,\n    account_id TEXT NOT NULL,\n    provider_id TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    access_token TEXT,\n    refresh_token TEXT,\n    id_token TEXT,\n    access_token_expires_at TIMESTAMPTZ,\n    refresh_token_expires_at TIMESTAMPTZ,\n    scope TEXT,\n    password TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (provider_id, account_id)\n);\nCREATE TABLE IF NOT EXISTS athena.verifications (\n    id TEXT PRIMARY KEY,\n    identifier TEXT NOT NULL,\n    value TEXT NOT NULL,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_users_email ON athena.users (email);\nCREATE INDEX IF NOT EXISTS idx_users_username ON athena.users (username);\nCREATE INDEX IF NOT EXISTS idx_sessions_token ON athena.sessions (token);\nCREATE INDEX IF NOT EXISTS idx_sessions_user_id ON athena.sessions (user_id);\nCREATE INDEX IF NOT EXISTS idx_sessions_expires_at ON athena.sessions (expires_at);\nCREATE INDEX IF NOT EXISTS idx_accounts_user_id ON athena.accounts (user_id);\nCREATE INDEX IF NOT EXISTS idx_accounts_provider_account ON athena.accounts (provider_id, account_id);\n`,\n      version: 1,\n    },\n    {\n      name: \"002_create_organization_tables\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.organization (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    slug TEXT NOT NULL UNIQUE,\n    logo TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.member (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    role TEXT NOT NULL DEFAULT 'member',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (organization_id, user_id)\n);\nCREATE TABLE IF NOT EXISTS athena.invitation (\n    id TEXT PRIMARY KEY,\n    organization_id TEXT NOT NULL REFERENCES athena.organization (id) ON DELETE CASCADE,\n    email TEXT NOT NULL,\n    role TEXT NOT NULL DEFAULT 'member',\n    status TEXT NOT NULL DEFAULT 'pending',\n    inviter_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_organization_slug ON athena.organization (slug);\nCREATE INDEX IF NOT EXISTS idx_member_organization_id ON athena.member (organization_id);\nCREATE INDEX IF NOT EXISTS idx_member_user_id ON athena.member (user_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_organization_id ON athena.invitation (organization_id);\nCREATE INDEX IF NOT EXISTS idx_invitation_email ON athena.invitation (email);\n`,\n      version: 2,\n    },\n    {\n      name: \"003_create_two_factor_table\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.two_factor (\n    id TEXT PRIMARY KEY,\n    secret TEXT NOT NULL,\n    backup_codes TEXT,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    UNIQUE (user_id)\n);\nCREATE INDEX IF NOT EXISTS idx_two_factor_user_id ON athena.two_factor (user_id);\n`,\n      version: 3,\n    },\n    {\n      name: \"004_create_api_key_table\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.api_keys (\n    id TEXT PRIMARY KEY,\n    name TEXT,\n    start TEXT,\n    prefix TEXT,\n    key TEXT NOT NULL UNIQUE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    refill_interval INTEGER,\n    refill_amount INTEGER,\n    last_refill_at TIMESTAMPTZ,\n    enabled BOOLEAN NOT NULL DEFAULT true,\n    rate_limit_enabled BOOLEAN NOT NULL DEFAULT false,\n    rate_limit_time_window INTEGER,\n    rate_limit_max INTEGER,\n    request_count INTEGER DEFAULT 0,\n    remaining INTEGER,\n    last_request TIMESTAMPTZ,\n    expires_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    permissions TEXT,\n    metadata TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON athena.api_keys (user_id);\n`,\n      version: 4,\n    },\n    {\n      name: \"005_create_passkey_table\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.passkeys (\n    id TEXT PRIMARY KEY,\n    name TEXT NOT NULL,\n    public_key TEXT NOT NULL,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    credential_id TEXT NOT NULL UNIQUE,\n    counter BIGINT NOT NULL DEFAULT 0,\n    device_type TEXT NOT NULL DEFAULT 'singleDevice',\n    backed_up BOOLEAN NOT NULL DEFAULT FALSE,\n    transports TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_passkeys_user_id ON athena.passkeys (user_id);\nCREATE INDEX IF NOT EXISTS idx_passkeys_credential_id ON athena.passkeys (credential_id);\n`,\n      version: 5,\n    },\n    {\n      name: \"009_add_last_sign_in_at_to_users\",\n      sql: `\nALTER TABLE athena.users ADD COLUMN IF NOT EXISTS last_sign_in_at TIMESTAMPTZ;\nCREATE INDEX IF NOT EXISTS idx_users_last_sign_in_at ON athena.users (last_sign_in_at);\n`,\n      version: 9,\n    },\n    {\n      name: \"021_runtime_key_and_ledger\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.auth_schema_migrations (\n    version INTEGER PRIMARY KEY,\n    name TEXT NOT NULL,\n    applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE TABLE IF NOT EXISTS athena.runtime_key (\n    key_id TEXT PRIMARY KEY,\n    purpose TEXT NOT NULL,\n    key_material TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    activated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    retired_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_runtime_key_active_purpose\n    ON athena.runtime_key (purpose)\n    WHERE retired_at IS NULL;\n`,\n      version: 21,\n    },\n    {\n      name: \"022_add_updated_at_to_passkeys\",\n      sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW();\n`,\n      version: 22,\n    },\n    {\n      name: \"023_auth_observability\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.audit_log_auth (\n    id UUID PRIMARY KEY,\n    event_id UUID NOT NULL,\n    trace_id TEXT NOT NULL,\n    event TEXT NOT NULL,\n    actor_kind TEXT NOT NULL,\n    actor_user_id TEXT,\n    actor_session_id TEXT,\n    subject_type TEXT,\n    subject_id TEXT,\n    organization_id TEXT,\n    previous JSONB,\n    result JSONB,\n    request_ip TEXT,\n    request_user_agent TEXT,\n    outcome TEXT NOT NULL DEFAULT 'success',\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS audit_log_auth_event_id_idx\n    ON athena.audit_log_auth(event_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_trace_id_idx\n    ON athena.audit_log_auth(trace_id);\nCREATE INDEX IF NOT EXISTS audit_log_auth_event_created_at_idx\n    ON athena.audit_log_auth(event, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_actor_user_id_idx\n    ON athena.audit_log_auth(actor_user_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_subject_idx\n    ON athena.audit_log_auth(subject_type, subject_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS audit_log_auth_organization_id_idx\n    ON athena.audit_log_auth(organization_id, created_at DESC);\nCREATE TABLE IF NOT EXISTS athena.traces_auth (\n    id UUID PRIMARY KEY,\n    trace_id TEXT NOT NULL,\n    event_id UUID,\n    operation TEXT,\n    method TEXT NOT NULL,\n    path TEXT NOT NULL,\n    actor_kind TEXT,\n    actor_user_id TEXT,\n    organization_id TEXT,\n    outcome TEXT NOT NULL,\n    status_code INTEGER,\n    authorize_ms DOUBLE PRECISION,\n    validate_ms DOUBLE PRECISION,\n    before_hooks_ms DOUBLE PRECISION,\n    transaction_ms DOUBLE PRECISION,\n    after_hooks_ms DOUBLE PRECISION,\n    total_ms DOUBLE PRECISION NOT NULL,\n    error_code TEXT,\n    error_phase TEXT,\n    metadata JSONB NOT NULL DEFAULT '{}',\n    started_at TIMESTAMPTZ NOT NULL,\n    completed_at TIMESTAMPTZ NOT NULL\n);\nCREATE INDEX IF NOT EXISTS traces_auth_trace_id_idx\n    ON athena.traces_auth(trace_id);\nCREATE INDEX IF NOT EXISTS traces_auth_event_id_idx\n    ON athena.traces_auth(event_id);\nCREATE INDEX IF NOT EXISTS traces_auth_operation_started_at_idx\n    ON athena.traces_auth(operation, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_outcome_started_at_idx\n    ON athena.traces_auth(outcome, started_at DESC);\nCREATE INDEX IF NOT EXISTS traces_auth_actor_user_id_idx\n    ON athena.traces_auth(actor_user_id, started_at DESC);\n`,\n      version: 23,\n    },\n    ...ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS,\n    {\n      name: \"025_add_aaguid_to_passkeys\",\n      sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS aaguid TEXT;\n`,\n      version: 25,\n    },\n    {\n      name: \"026_passkey_resident_key_and_registration_transactions\",\n      sql: `\nALTER TABLE athena.passkeys ADD COLUMN IF NOT EXISTS resident_key BOOLEAN;\nCREATE TABLE IF NOT EXISTS athena.passkey_registration_transactions (\n    id TEXT PRIMARY KEY,\n    challenge_hash TEXT NOT NULL,\n    rp_id TEXT NOT NULL,\n    user_handle TEXT NOT NULL,\n    mode TEXT NOT NULL,\n    context TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    consumed_at TIMESTAMPTZ,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_passkey_reg_tx_challenge_hash\n    ON athena.passkey_registration_transactions (challenge_hash);\nCREATE INDEX IF NOT EXISTS idx_passkey_reg_tx_expires_at\n    ON athena.passkey_registration_transactions (expires_at);\n`,\n      version: 26,\n    },\n    {\n      name: \"027_auth_bridge_codes\",\n      sql: `CREATE TABLE IF NOT EXISTS athena.auth_bridge_codes (id TEXT PRIMARY KEY, code_hash TEXT NOT NULL UNIQUE, session_id TEXT NOT NULL REFERENCES athena.sessions (id) ON DELETE CASCADE, user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE, organization_id TEXT, destination_origin TEXT NOT NULL, redirect_path TEXT NOT NULL, expires_at TIMESTAMPTZ NOT NULL, consumed_at TIMESTAMPTZ, consume_reason TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_expires_at ON athena.auth_bridge_codes (expires_at); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_session_id ON athena.auth_bridge_codes (session_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_user_id ON athena.auth_bridge_codes (user_id); CREATE INDEX IF NOT EXISTS idx_auth_bridge_codes_outstanding_session ON athena.auth_bridge_codes (session_id) WHERE consumed_at IS NULL;`,\n      version: 27,\n    },\n    {\n      name: \"028_oauth_transactions\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_transactions (\n    id TEXT PRIMARY KEY,\n    state_hash TEXT NOT NULL UNIQUE,\n    provider_id TEXT NOT NULL,\n    intent TEXT NOT NULL,\n    code_challenge_method TEXT NOT NULL,\n    pkce_verifier_ciphertext TEXT NOT NULL,\n    nonce_hash TEXT NOT NULL,\n    redirect_uri TEXT NOT NULL,\n    user_id TEXT,\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_transactions_expires_at\n    ON athena.oauth_transactions (expires_at);\n`,\n      version: 28,\n    },\n    {\n      name: \"029_notification_preferences\",\n      sql: `\nCREATE TABLE IF NOT EXISTS athena.notification_preferences (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL,\n    organization_id TEXT NULL,\n    channel TEXT NOT NULL,\n    topic TEXT NOT NULL,\n    enabled BOOLEAN NOT NULL DEFAULT TRUE,\n    digest TEXT NULL,\n    metadata JSONB NOT NULL DEFAULT '{}'::jsonb,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_channel_topic\n  ON athena.notification_preferences (user_id, channel, topic)\n  WHERE organization_id IS NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_notification_preferences_user_org_channel_topic\n  ON athena.notification_preferences (user_id, organization_id, channel, topic)\n  WHERE organization_id IS NOT NULL;\n`,\n      version: 29,\n    },\n    {\n      name: \"030_organization_created_by\",\n      sql: `\nALTER TABLE athena.organization\n  ADD COLUMN IF NOT EXISTS created_by_user_id TEXT;\nUPDATE athena.organization AS org\nSET created_by_user_id = founder.user_id\nFROM (\n  SELECT DISTINCT ON (organization_id)\n    organization_id,\n    user_id\n  FROM athena.member\n  WHERE role = 'owner'\n  ORDER BY organization_id, created_at ASC, id ASC\n) AS founder\nWHERE org.created_by_user_id IS NULL\n  AND founder.organization_id = org.id;\nCREATE INDEX IF NOT EXISTS idx_organization_created_by_user_id\n  ON athena.organization (created_by_user_id);\n`,\n      version: 30,\n    },\n    {\n      name: \"031_authorization_assignment\",\n      sql: ATHENA_AUTHORIZATION_ASSIGNMENT_SQL,\n      version: 31,\n    },\n    {\n      name: \"032_authorization_assignment_constraints\",\n      sql: ATHENA_AUTHORIZATION_CONSTRAINTS_SQL,\n      version: 32,\n    },\n];\n\nexport const ATHENA_AUTH_CANONICAL_MIGRATIONS: readonly AthenaAuthCanonicalMigration[] =\n\tATHENA_AUTH_SCHEMA_STATEMENTS.filter((statement) => statement.version > 0).sort(\n\t\t(left, right) => left.version - right.version,\n\t);\n\nexport function listAthenaAuthCanonicalMigrations(): AthenaAuthCanonicalMigration[] {\n\treturn [...ATHENA_AUTH_CANONICAL_MIGRATIONS];\n}\n\nexport function listAthenaAuthSchemaSqlStatements(): AthenaAuthCanonicalMigration[] {\n\treturn [...ATHENA_AUTH_SCHEMA_STATEMENTS];\n}\n","import { listAthenaAuthCanonicalMigrations } from \"../../auth/schema/migrations.ts\";\nimport { analyzeAll } from \"../analysis/compiler.ts\";\nimport {\n\tapplyAnalysis,\n\temptyProjectedSchema,\n\ttype ProjectedSchema,\n} from \"../analysis/projected-schema.ts\";\nimport type { SchemaProvider } from \"../analysis/schema-provider.ts\";\nimport { checksumMigrationSql } from \"../checksum.ts\";\nimport type { MigrationFile } from \"../types.ts\";\n\nexport type { SchemaProvider } from \"../analysis/schema-provider.ts\";\n\nexport interface PackagedAuthPlanSlice {\n\tentries: readonly {\n\t\taction: string;\n\t\tledgerState: string;\n\t\tversion: number;\n\t}[];\n}\n\nexport interface PackagedMigrationProjection {\n\tproviders: SchemaProvider[];\n\tschema: ProjectedSchema;\n}\n\nfunction authFiles(): MigrationFile[] {\n\treturn listAthenaAuthCanonicalMigrations().map((entry) => ({\n\t\tchecksum: checksumMigrationSql(entry.sql),\n\t\tfilename: entry.name,\n\t\tname: entry.name,\n\t\tpath: entry.name,\n\t\tsql: entry.sql,\n\t\tversion: entry.version,\n\t}));\n}\n\nfunction pendingAuthVersions(\n\tauthPlan: PackagedAuthPlanSlice | undefined,\n): ReadonlySet<number> {\n\tif (!authPlan) {\n\t\treturn new Set();\n\t}\n\treturn new Set(\n\t\tauthPlan.entries\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.action === \"apply\" || entry.ledgerState === \"absent\",\n\t\t\t)\n\t\t\t.map((entry) => entry.version),\n\t);\n}\n\nexport async function buildPackagedMigrationProjection(input: {\n\tauthPlan?: PackagedAuthPlanSlice;\n\tcacheDir?: string;\n}): Promise<PackagedMigrationProjection> {\n\tconst pending = pendingAuthVersions(input.authPlan);\n\tif (pending.size === 0) {\n\t\treturn {\n\t\t\tproviders: [],\n\t\t\tschema: emptyProjectedSchema(),\n\t\t};\n\t}\n\tconst files = authFiles().filter((file) => pending.has(file.version));\n\tconst analyses = await analyzeAll(files, input.cacheDir);\n\tlet schema = emptyProjectedSchema();\n\tconst providers: SchemaProvider[] = [];\n\tfor (const analysis of analyses) {\n\t\tschema = applyAnalysis(schema, analysis);\n\t\tfor (const object of analysis.effects.creates) {\n\t\t\tproviders.push({\n\t\t\t\tfilename: analysis.filename,\n\t\t\t\tobject,\n\t\t\t\tsource: \"embedded-auth\",\n\t\t\t\tstate: \"pending\",\n\t\t\t\tversion: analysis.version,\n\t\t\t});\n\t\t}\n\t}\n\treturn { providers, schema };\n}\n","import type { AthenaConfig } from \"../../generator/types.ts\";\nimport {\n\ttype CompileMigrationsResult,\n\tcompileMigrations,\n} from \"../analysis/index.ts\";\nimport { emptyProjectedSchema } from \"../analysis/projected-schema.ts\";\nimport type { MigrationBackend } from \"../backend.ts\";\nimport { shouldApplyEmbeddedAuthMigrations } from \"../embedded-auth/enablement.ts\";\nimport {\n\tbuildPackagedMigrationProjection,\n\ttype PackagedAuthPlanSlice,\n} from \"../embedded/semantics.ts\";\n\nexport async function compileApplicationSemantics(input: {\n\tauthPlan?: PackagedAuthPlanSlice;\n\tbackend: MigrationBackend;\n\tcacheDir?: string;\n\tlocal: readonly import(\"../types.ts\").MigrationFile[];\n\tmodules?: AthenaConfig[\"modules\"];\n\tplan: import(\"../types.ts\").MigrationPlan;\n\tstrict?: boolean;\n}): Promise<CompileMigrationsResult> {\n\tconst catalog = await input.backend.inspectCatalog();\n\tconst packaged = shouldApplyEmbeddedAuthMigrations(input.modules)\n\t\t? await buildPackagedMigrationProjection({\n\t\t\t\tauthPlan: input.authPlan,\n\t\t\t\tcacheDir: input.cacheDir,\n\t\t\t})\n\t\t: { providers: [], schema: emptyProjectedSchema() };\n\treturn compileMigrations({\n\t\tappliedVersions: new Set(\n\t\t\tinput.plan.applied.map((entry) => entry.migration.version),\n\t\t),\n\t\tcacheDir: input.cacheDir,\n\t\tcatalog,\n\t\texternalProviders: packaged.providers,\n\t\tfiles: input.local,\n\t\tprojectedPrerequisites: packaged.schema,\n\t\tstrict: input.strict,\n\t});\n}\n\nexport function blockingSemantic(result: CompileMigrationsResult): boolean {\n\treturn result.diagnostics.some(\n\t\t(item) => item.classification !== \"dynamic_sql\",\n\t);\n}\n","/**\r\n * Node CLI / tooling adapter for Embedded Auth schema apply.\r\n *\r\n * Do not import auth/server-entry, server.ts, next/*, or server-only.\r\n */\r\nexport {\r\n\tmigrateAthenaAuthSchema,\r\n\treadAthenaAuthSchemaStatus,\r\n} from \"../local/schema.ts\";\r\n","import {\n\ttype AthenaAuthDatabase,\n\tcreatePostgresAuthDatabase,\n} from \"../../auth/local/database.ts\";\nimport { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport {\n\tclassifyAuthLedgerQueryError,\n\thealthFromAuthPlan,\n} from \"../../auth/local/ledger-health.ts\";\nimport {\n\ttype AthenaAuthMigrationPlan,\n\tgetAthenaAuthExpectedLedger,\n\tplanAthenaAuthSchema,\n} from \"../../auth/local/schema.ts\";\nimport { repairabilityForAuthMigration } from \"../../auth/local/schema-manifest.ts\";\nimport { MigrationError, type RunMigrationsOptions } from \"../types.ts\";\n\nexport function offlineExpectedAuthPlan(): AthenaAuthMigrationPlan {\n\tconst expected = getAthenaAuthExpectedLedger();\n\tconst entries = expected.map((entry) => ({\n\t\tversion: entry.version,\n\t\tname: entry.name,\n\t\tchecksum: entry.checksum ?? \"\",\n\t\tledgerState: \"absent\" as const,\n\t\tschemaState: \"unknown\" as const,\n\t\taction: \"apply\" as const,\n\t\trepairability: repairabilityForAuthMigration(),\n\t}));\n\tconst plan = {\n\t\tentries,\n\t\tappliedCount: 0,\n\t\tpendingCount: entries.length,\n\t\tdriftCount: 0,\n\t\tconflictCount: 0,\n\t\thasBlockingDrift: false,\n\t\thealth: healthFromAuthPlan({\n\t\t\tconflictCount: 0,\n\t\t\tentries,\n\t\t\thasBlockingDrift: false,\n\t\t}),\n\t} satisfies AthenaAuthMigrationPlan;\n\treturn plan;\n}\n\nexport async function openAuthDatabase(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n): Promise<AthenaAuthDatabase | undefined> {\n\tif (options.createAuthDatabase) {\n\t\treturn options.createAuthDatabase(connectionString);\n\t}\n\tif (options.createBackend) {\n\t\t// Test backends typically skip live Auth DB access.\n\t\treturn undefined;\n\t}\n\treturn createPostgresAuthDatabase(connectionString);\n}\n\nfunction withPlanHealth(plan: AthenaAuthMigrationPlan): AthenaAuthMigrationPlan {\n\treturn {\n\t\t...plan,\n\t\thealth: plan.health ?? healthFromAuthPlan(plan),\n\t};\n}\n\nfunction authPlanLoadError(error: unknown): MigrationError {\n\tif (error instanceof MigrationError) {\n\t\treturn error;\n\t}\n\tif (error instanceof AthenaAuthRuntimeError) {\n\t\tconst kind = classifyAuthLedgerQueryError(error);\n\t\tif (kind === \"PERMISSION_DENIED\") {\n\t\t\treturn new MigrationError(\"PROVIDER\", error.publicMessage, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (kind === \"INVALID_LEDGER\") {\n\t\t\treturn new MigrationError(\"EXECUTION\", error.publicMessage, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (kind === \"UNREACHABLE\") {\n\t\t\treturn new MigrationError(\"PROVIDER\", error.publicMessage, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\treturn new MigrationError(\"EXECUTION\", error.publicMessage, {\n\t\t\tcause: error,\n\t\t});\n\t}\n\tconst kind = classifyAuthLedgerQueryError(error);\n\tconst message = error instanceof Error ? error.message : String(error);\n\tif (kind === \"PERMISSION_DENIED\") {\n\t\treturn new MigrationError(\n\t\t\t\"PROVIDER\",\n\t\t\t`ATHENA_AUTH_LEDGER_PERMISSION_DENIED\\n\\n${message}`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n\treturn new MigrationError(\n\t\t\"PROVIDER\",\n\t\t`ATHENA_AUTH_LEDGER_UNREACHABLE\\n\\nEmbedded Auth could not reach the database to read the migration ledger.\\n\\n${message}`,\n\t\t{ cause: error },\n\t);\n}\n\n/**\n * Load the Embedded Auth plan. Only UNINITIALIZED (no ledger yet, or test\n * backends without an Auth database) falls back to the offline expected ledger.\n * Connection / permission / malformed-adapter failures fail closed.\n */\nexport async function loadAuthPlan(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tinspectSchema: boolean,\n): Promise<AthenaAuthMigrationPlan> {\n\tif (options.planAuthSchema) {\n\t\treturn withPlanHealth(await options.planAuthSchema());\n\t}\n\tlet database: AthenaAuthDatabase | undefined;\n\ttry {\n\t\tdatabase = await openAuthDatabase(options, connectionString);\n\t} catch (error) {\n\t\tconst kind = classifyAuthLedgerQueryError(error);\n\t\tif (kind === \"UNINITIALIZED\") {\n\t\t\treturn offlineExpectedAuthPlan();\n\t\t}\n\t\tthrow authPlanLoadError(error);\n\t}\n\tif (!database) {\n\t\treturn offlineExpectedAuthPlan();\n\t}\n\ttry {\n\t\treturn withPlanHealth(\n\t\t\tawait planAthenaAuthSchema(database, { inspectSchema }),\n\t\t);\n\t} catch (error) {\n\t\tconst kind = classifyAuthLedgerQueryError(error);\n\t\tif (kind === \"UNINITIALIZED\") {\n\t\t\treturn offlineExpectedAuthPlan();\n\t\t}\n\t\tthrow authPlanLoadError(error);\n\t} finally {\n\t\tawait database.close?.();\n\t}\n}\n","import { migrateAthenaAuthSchema } from \"../../auth/node/migrate.ts\";\n\nimport type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport {\n\ttype AthenaAuthMigrationModules,\n\tshouldApplyEmbeddedAuthMigrations,\n} from \"./enablement.ts\";\nimport { openAuthDatabase } from \"./plan.ts\";\n\nexport async function applyEmbeddedAuthMigrations(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tui: AthenaCliUI,\n\tmodules?: AthenaAuthMigrationModules,\n): Promise<void> {\n\tif (!shouldApplyEmbeddedAuthMigrations(modules)) {\n\t\treturn;\n\t}\n\tif (options.migrateAuthSchema) {\n\t\tui.info(\"→ Embedded Auth schema applying\");\n\t\tawait options.migrateAuthSchema();\n\t\tui.success(\"✓ Embedded Auth schema applied\");\n\t\treturn;\n\t}\n\tif (options.createBackend && !options.createAuthDatabase) {\n\t\treturn;\n\t}\n\tui.info(\"→ Embedded Auth schema applying\");\n\tconst database = await openAuthDatabase(options, connectionString);\n\tif (!database) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait migrateAthenaAuthSchema(database);\n\t} finally {\n\t\tawait database.close?.();\n\t}\n\tui.success(\"✓ Embedded Auth schema applied\");\n}\n","import { repairAthenaAuthSchema } from \"../../auth/local/schema.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport { openAuthDatabase } from \"./plan.ts\";\n\nexport async function repairEmbeddedAuthMigrations(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tdryRun: boolean,\n): Promise<void> {\n\tif (options.repairAuthSchema) {\n\t\tawait options.repairAuthSchema({ dryRun });\n\t\treturn;\n\t}\n\tif (options.createBackend && !options.createAuthDatabase) {\n\t\treturn;\n\t}\n\tconst database = await openAuthDatabase(options, connectionString);\n\tif (!database) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait repairAthenaAuthSchema(database, { dryRun });\n\t} finally {\n\t\tawait database.close?.();\n\t}\n}\n","export type AthenaEventIngressMigrationModules = {\n\tauth?: boolean;\n\tbilling?: boolean;\n\tchat?: boolean;\n\teventIngress?: boolean;\n};\n\nexport function shouldApplyEmbeddedEventIngressMigrations(\n\tmodules: AthenaEventIngressMigrationModules | undefined,\n): boolean {\n\treturn modules?.eventIngress === true || modules?.billing === true;\n}\n\nexport function shouldApplyEmbeddedBillingMigrations(\n\tmodules: AthenaEventIngressMigrationModules | undefined,\n): boolean {\n\treturn modules?.billing === true;\n}\n","import type { AthenaCliUI } from \"../cli/ui/index.ts\";\nimport type {\n\tAthenaPostgresClient,\n\tAthenaPostgresPool,\n\tAthenaPostgresQueryable,\n} from \"../postgres/driver.ts\";\nimport { MigrationError } from \"./types.ts\";\n\nexport interface EmbeddedSqlRelation {\n\treadonly schema: string;\n\treadonly table: string;\n}\n\nexport interface EmbeddedSqlMigration {\n\treadonly checksum: string;\n\treadonly filename: string;\n\treadonly legacyChecksums?: readonly string[];\n\treadonly name: string;\n\treadonly requiredRelations?: readonly EmbeddedSqlRelation[];\n\treadonly sql: string;\n\treadonly version: number;\n}\n\nexport type EmbeddedLedgerEntryStatus =\n\t| \"applied\"\n\t| \"pending\"\n\t| \"legacy-compatible\"\n\t| \"checksum-mismatch\";\n\nexport interface EmbeddedLedgerEntry {\n\treadonly checksum: string;\n\treadonly filename: string;\n\treadonly name: string;\n\treadonly status: EmbeddedLedgerEntryStatus;\n\treadonly storedChecksum?: string;\n\treadonly version: number;\n}\n\nexport interface EmbeddedLedgerInspection {\n\treadonly entries: readonly EmbeddedLedgerEntry[];\n\treadonly ledgerExists: boolean;\n\treadonly ledgerTable: string;\n}\n\nconst LEDGER_TABLE_PATTERN =\n\t/^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)?$/;\n\nexport function assertLedgerTableName(ledgerTable: string): string {\n\tif (!LEDGER_TABLE_PATTERN.test(ledgerTable)) {\n\t\tthrow new MigrationError(\n\t\t\t\"CONFIG\",\n\t\t\t`Invalid embedded migration ledger table: ${ledgerTable}`,\n\t\t);\n\t}\n\treturn ledgerTable;\n}\n\nexport function quoteLedgerTable(ledgerTable: string): string {\n\treturn assertLedgerTableName(ledgerTable)\n\t\t.split(\".\")\n\t\t.map((part) => `\"${part}\"`)\n\t\t.join(\".\");\n}\n\nfunction ledgerChecksum(\n\trow: Record<string, unknown> | undefined,\n): string | undefined {\n\tconst value = row?.checksum;\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nexport async function embeddedLedgerExists(\n\tqueryable: AthenaPostgresQueryable,\n\tledgerTable: string,\n): Promise<boolean> {\n\tconst name = assertLedgerTableName(ledgerTable);\n\tconst result = await queryable.query<{ oid: string | null }>(\n\t\t\"SELECT to_regclass($1) AS oid\",\n\t\t[name],\n\t);\n\tconst oid = result.rows[0]?.oid;\n\treturn oid != null && String(oid).length > 0;\n}\n\nasync function readLedgerChecksum(\n\tqueryable: AthenaPostgresQueryable,\n\tledgerTable: string,\n\tversion: number,\n): Promise<string | undefined> {\n\tconst quoted = quoteLedgerTable(ledgerTable);\n\tconst applied = await queryable.query(\n\t\t`SELECT checksum FROM ${quoted} WHERE version = $1`,\n\t\t[version],\n\t);\n\treturn ledgerChecksum(applied.rows[0] as Record<string, unknown> | undefined);\n}\n\nexport function isLegacyLedgerChecksum(\n\tmigration: EmbeddedSqlMigration,\n\tstored: string,\n): boolean {\n\treturn migration.legacyChecksums?.includes(stored) === true;\n}\n\nexport async function physicalRelationsPresent(\n\tqueryable: AthenaPostgresQueryable,\n\trelations: readonly EmbeddedSqlRelation[] | undefined,\n): Promise<boolean> {\n\tif (relations == null || relations.length === 0) {\n\t\treturn false;\n\t}\n\tfor (const relation of relations) {\n\t\tconst qualified = `${relation.schema}.${relation.table}`;\n\t\tconst result = await queryable.query<{ oid: string | null }>(\n\t\t\t\"SELECT to_regclass($1) AS oid\",\n\t\t\t[qualified],\n\t\t);\n\t\tconst oid = result.rows[0]?.oid;\n\t\tif (oid == null || String(oid).length === 0) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction checksumMismatchMessage(\n\tmigration: EmbeddedSqlMigration,\n\tstored: string,\n\tphysicalOk: boolean,\n): string {\n\tconst legacy = isLegacyLedgerChecksum(migration, stored);\n\tif (legacy && !physicalOk) {\n\t\treturn [\n\t\t\t`${migration.filename} version ${migration.version} ledger identity is legacy (${stored}) but the physical schema does not match the packaged generation.`,\n\t\t\t`Packaged checksum: ${migration.checksum}.`,\n\t\t\t\"Athena will not rewrite the ledger. Restore the schema or apply a forward migration.\",\n\t\t].join(\" \");\n\t}\n\treturn [\n\t\t`${migration.filename} version ${migration.version} checksum mismatch.`,\n\t\t`Ledger: ${stored}.`,\n\t\t`Package: ${migration.checksum}.`,\n\t\tlegacy\n\t\t\t? \"Legacy identity is listed but physical fingerprint was not confirmed.\"\n\t\t\t: \"Unknown checksum drift fails closed.\",\n\t].join(\" \");\n}\n\nasync function classifyStoredChecksum(input: {\n\tmigration: EmbeddedSqlMigration;\n\tqueryable: AthenaPostgresQueryable;\n\tstored: string;\n}): Promise<EmbeddedLedgerEntryStatus> {\n\tconst { migration, queryable, stored } = input;\n\tif (stored === migration.checksum) {\n\t\treturn \"applied\";\n\t}\n\tif (!isLegacyLedgerChecksum(migration, stored)) {\n\t\treturn \"checksum-mismatch\";\n\t}\n\tconst physicalOk = await physicalRelationsPresent(\n\t\tqueryable,\n\t\tmigration.requiredRelations,\n\t);\n\treturn physicalOk ? \"legacy-compatible\" : \"checksum-mismatch\";\n}\n\nasync function adoptLegacyLedgerChecksum(input: {\n\tclient: AthenaPostgresClient;\n\tledgerTable: string;\n\tmigration: EmbeddedSqlMigration;\n\tstored: string;\n}): Promise<void> {\n\tconst quoted = quoteLedgerTable(input.ledgerTable);\n\tawait input.client.query(\"BEGIN\");\n\ttry {\n\t\tconst updated = await input.client.query(\n\t\t\t`UPDATE ${quoted}\n\t\t\t SET checksum = $1, name = $2\n\t\t\t WHERE version = $3 AND checksum = $4`,\n\t\t\t[\n\t\t\t\tinput.migration.checksum,\n\t\t\t\tinput.migration.name,\n\t\t\t\tinput.migration.version,\n\t\t\t\tinput.stored,\n\t\t\t],\n\t\t);\n\t\tconst rowCount =\n\t\t\ttypeof (updated as { rowCount?: number }).rowCount === \"number\"\n\t\t\t\t? (updated as { rowCount: number }).rowCount\n\t\t\t\t: 0;\n\t\tif (rowCount < 1) {\n\t\t\tthrow new MigrationError(\n\t\t\t\t\"INTEGRITY\",\n\t\t\t\t`${input.migration.filename} version ${input.migration.version} legacy adoption updated 0 ledger rows.`,\n\t\t\t);\n\t\t}\n\t\tawait input.client.query(\"COMMIT\");\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait input.client.query(\"ROLLBACK\");\n\t\t} catch {\n\t\t\t// Session may already be aborted.\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function inspectEmbeddedSqlLedger(input: {\n\tledgerTable: string;\n\tmigrations: readonly EmbeddedSqlMigration[];\n\tqueryable: AthenaPostgresQueryable;\n}): Promise<EmbeddedLedgerInspection> {\n\tconst ledgerExists = await embeddedLedgerExists(\n\t\tinput.queryable,\n\t\tinput.ledgerTable,\n\t);\n\tconst entries: EmbeddedLedgerEntry[] = [];\n\tfor (const migration of input.migrations) {\n\t\tif (!ledgerExists) {\n\t\t\tentries.push({\n\t\t\t\tchecksum: migration.checksum,\n\t\t\t\tfilename: migration.filename,\n\t\t\t\tname: migration.name,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tversion: migration.version,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst stored = await readLedgerChecksum(\n\t\t\tinput.queryable,\n\t\t\tinput.ledgerTable,\n\t\t\tmigration.version,\n\t\t);\n\t\tif (stored == null) {\n\t\t\tentries.push({\n\t\t\t\tchecksum: migration.checksum,\n\t\t\t\tfilename: migration.filename,\n\t\t\t\tname: migration.name,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tversion: migration.version,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst status = await classifyStoredChecksum({\n\t\t\tmigration,\n\t\t\tqueryable: input.queryable,\n\t\t\tstored,\n\t\t});\n\t\tentries.push({\n\t\t\tchecksum: migration.checksum,\n\t\t\tfilename: migration.filename,\n\t\t\tname: migration.name,\n\t\t\tstatus,\n\t\t\tstoredChecksum: stored,\n\t\t\tversion: migration.version,\n\t\t});\n\t}\n\treturn {\n\t\tentries,\n\t\tledgerExists,\n\t\tledgerTable: input.ledgerTable,\n\t};\n}\n\n/**\n * Ledger-first embedded SQL apply. Probe `to_regclass` outside BEGIN so a\n * missing ledger is not an undefined-table error that aborts the transaction.\n */\nexport async function applyEmbeddedSqlMigrations(input: {\n\tledgerTable: string;\n\tmigrations: readonly EmbeddedSqlMigration[];\n\tpool: AthenaPostgresPool;\n\tui: AthenaCliUI;\n}): Promise<void> {\n\tconst client = await input.pool.connect();\n\ttry {\n\t\tfor (const migration of input.migrations) {\n\t\t\tconst ledgerExists = await embeddedLedgerExists(\n\t\t\t\tclient,\n\t\t\t\tinput.ledgerTable,\n\t\t\t);\n\t\t\tif (ledgerExists) {\n\t\t\t\tconst stored = await readLedgerChecksum(\n\t\t\t\t\tclient,\n\t\t\t\t\tinput.ledgerTable,\n\t\t\t\t\tmigration.version,\n\t\t\t\t);\n\t\t\t\tif (stored != null) {\n\t\t\t\t\tif (stored === migration.checksum) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (isLegacyLedgerChecksum(migration, stored)) {\n\t\t\t\t\t\tconst physicalOk = await physicalRelationsPresent(\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tmigration.requiredRelations,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!physicalOk) {\n\t\t\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t\t\t\"INTEGRITY\",\n\t\t\t\t\t\t\t\tchecksumMismatchMessage(migration, stored, false),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait adoptLegacyLedgerChecksum({\n\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\tledgerTable: input.ledgerTable,\n\t\t\t\t\t\t\tmigration,\n\t\t\t\t\t\t\tstored,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tinput.ui.info(\n\t\t\t\t\t\t\t`✓ ${migration.filename} adopted (legacy ${stored} → packaged checksum)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t\"INTEGRITY\",\n\t\t\t\t\t\tchecksumMismatchMessage(migration, stored, false),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait applyPendingMigration(client, input.ledgerTable, migration);\n\t\t\tinput.ui.info(`✓ ${migration.filename} applied`);\n\t\t}\n\t} finally {\n\t\tclient.release();\n\t}\n}\n\nasync function applyPendingMigration(\n\tclient: AthenaPostgresClient,\n\tledgerTable: string,\n\tmigration: EmbeddedSqlMigration,\n): Promise<void> {\n\tconst quoted = quoteLedgerTable(ledgerTable);\n\tawait client.query(\"BEGIN\");\n\ttry {\n\t\tawait client.query(migration.sql);\n\t\tawait client.query(\n\t\t\t`INSERT INTO ${quoted} (version, name, checksum)\n\t\t\t VALUES ($1, $2, $3)\n\t\t\t ON CONFLICT (version) DO NOTHING`,\n\t\t\t[migration.version, migration.name, migration.checksum],\n\t\t);\n\t\tawait client.query(\"COMMIT\");\n\t} catch (error) {\n\t\ttry {\n\t\t\tawait client.query(\"ROLLBACK\");\n\t\t} catch {\n\t\t\t// Session may already be aborted.\n\t\t}\n\t\tthrow error;\n\t}\n}\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { createPostgresPool } from \"../../postgres/driver.ts\";\nimport type { AthenaEventIngressMigrationModules } from \"../embedded-event-ingress/enablement.ts\";\nimport { shouldApplyEmbeddedBillingMigrations } from \"../embedded-event-ingress/enablement.ts\";\nimport { applyEmbeddedSqlMigrations } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport {\n\tEMBEDDED_BILLING_LEDGER,\n\tEMBEDDED_BILLING_MIGRATIONS,\n} from \"./catalog.ts\";\n\nexport async function applyEmbeddedBillingMigrations(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tui: AthenaCliUI,\n\tmodules: AthenaEventIngressMigrationModules | undefined,\n): Promise<void> {\n\tif (!shouldApplyEmbeddedBillingMigrations(modules)) {\n\t\treturn;\n\t}\n\tif (options.createBackend && !options.createAuthDatabase) {\n\t\treturn;\n\t}\n\tui.info(\"→ Embedded Billing schema applying\");\n\tconst pool = await createPostgresPool(connectionString, { max: 4, min: 0 });\n\ttry {\n\t\tawait applyEmbeddedSqlMigrations({\n\t\t\tledgerTable: EMBEDDED_BILLING_LEDGER,\n\t\t\tmigrations: EMBEDDED_BILLING_MIGRATIONS,\n\t\t\tpool,\n\t\t\tui,\n\t\t});\n\t} finally {\n\t\tawait pool.end();\n\t}\n\tui.success(\"✓ Embedded Billing schema applied\");\n}\n","export type AthenaChatMigrationModules = {\n\tauth?: boolean;\n\tchat?: boolean;\n};\n\nexport function shouldApplyEmbeddedChatMigrations(\n\tmodules: AthenaChatMigrationModules | undefined,\n): boolean {\n\treturn modules?.chat === true;\n}\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { createPostgresPool } from \"../../postgres/driver.ts\";\nimport { applyEmbeddedSqlMigrations } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport { EMBEDDED_CHAT_LEDGER, EMBEDDED_CHAT_MIGRATIONS } from \"./catalog.ts\";\nimport {\n\tshouldApplyEmbeddedChatMigrations,\n\ttype AthenaChatMigrationModules,\n} from \"./enablement.ts\";\n\nexport async function applyEmbeddedChatMigrations(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tui: AthenaCliUI,\n\tmodules: AthenaChatMigrationModules | undefined,\n): Promise<void> {\n\tif (!shouldApplyEmbeddedChatMigrations(modules)) {\n\t\treturn;\n\t}\n\tif (options.createBackend && !options.createAuthDatabase) {\n\t\treturn;\n\t}\n\tui.info(\"→ Embedded Chat schema applying\");\n\tconst pool = await createPostgresPool(connectionString, { max: 4, min: 0 });\n\ttry {\n\t\tawait applyEmbeddedSqlMigrations({\n\t\t\tledgerTable: EMBEDDED_CHAT_LEDGER,\n\t\t\tmigrations: EMBEDDED_CHAT_MIGRATIONS,\n\t\t\tpool,\n\t\t\tui,\n\t\t});\n\t} finally {\n\t\tawait pool.end();\n\t}\n\tui.success(\"✓ Embedded Chat schema applied\");\n}\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { createPostgresPool } from \"../../postgres/driver.ts\";\nimport { applyEmbeddedSqlMigrations } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport {\n\tEMBEDDED_EVENT_INGRESS_LEDGER,\n\tEMBEDDED_EVENT_INGRESS_MIGRATIONS,\n} from \"./catalog.ts\";\nimport {\n\ttype AthenaEventIngressMigrationModules,\n\tshouldApplyEmbeddedEventIngressMigrations,\n} from \"./enablement.ts\";\n\nexport async function applyEmbeddedEventIngressMigrations(\n\toptions: RunMigrationsOptions,\n\tconnectionString: string,\n\tui: AthenaCliUI,\n\tmodules: AthenaEventIngressMigrationModules | undefined,\n): Promise<void> {\n\tif (!shouldApplyEmbeddedEventIngressMigrations(modules)) {\n\t\treturn;\n\t}\n\tif (options.createBackend && !options.createAuthDatabase) {\n\t\treturn;\n\t}\n\tui.info(\"→ Embedded Event Ingress schema applying\");\n\tconst pool = await createPostgresPool(connectionString, { max: 4, min: 0 });\n\ttry {\n\t\tawait applyEmbeddedSqlMigrations({\n\t\t\tledgerTable: EMBEDDED_EVENT_INGRESS_LEDGER,\n\t\t\tmigrations: EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n\t\t\tpool,\n\t\t\tui,\n\t\t});\n\t} finally {\n\t\tawait pool.end();\n\t}\n\tui.success(\"✓ Embedded Event Ingress schema applied\");\n}\n","import type { MigrationSectionView } from \"../cli/ui/types.ts\";\nimport { createPostgresPool } from \"../postgres/driver.ts\";\nimport {\n\tEMBEDDED_BILLING_LEDGER,\n\tEMBEDDED_BILLING_MIGRATIONS,\n} from \"./embedded-billing/catalog.ts\";\nimport { shouldApplyEmbeddedChatMigrations } from \"./embedded-chat/enablement.ts\";\nimport {\n\tEMBEDDED_CHAT_LEDGER,\n\tEMBEDDED_CHAT_MIGRATIONS,\n} from \"./embedded-chat/catalog.ts\";\nimport {\n\tshouldApplyEmbeddedBillingMigrations,\n\tshouldApplyEmbeddedEventIngressMigrations,\n\ttype AthenaEventIngressMigrationModules,\n} from \"./embedded-event-ingress/enablement.ts\";\nimport {\n\tEMBEDDED_EVENT_INGRESS_LEDGER,\n\tEMBEDDED_EVENT_INGRESS_MIGRATIONS,\n} from \"./embedded-event-ingress/catalog.ts\";\nimport {\n\ttype EmbeddedLedgerInspection,\n\tinspectEmbeddedSqlLedger,\n} from \"./embedded-sql-apply.ts\";\n\nexport type EmbeddedMigrateModules = AthenaEventIngressMigrationModules;\n\nexport interface EmbeddedModuleSection {\n\treadonly enabled: boolean;\n\treadonly id: \"chat\" | \"event-ingress\" | \"billing\";\n\treadonly inspection?: EmbeddedLedgerInspection;\n\treadonly section: MigrationSectionView;\n}\n\nfunction sectionFromInspection(\n\ttitle: string,\n\tenabled: boolean,\n\tdisabledReason: string,\n\tinspection: EmbeddedLedgerInspection | undefined,\n): MigrationSectionView {\n\tif (!enabled) {\n\t\treturn {\n\t\t\trows: [{ name: disabledReason, status: \"skipped\" }],\n\t\t\tsummary: \"disabled\",\n\t\t\ttitle,\n\t\t};\n\t}\n\tconst entries = inspection?.entries ?? [];\n\tconst applied = entries.filter((entry) => entry.status === \"applied\").length;\n\tconst pending = entries.filter((entry) => entry.status === \"pending\").length;\n\tconst adoptable = entries.filter(\n\t\t(entry) => entry.status === \"legacy-compatible\",\n\t).length;\n\tconst conflicts = entries.filter(\n\t\t(entry) => entry.status === \"checksum-mismatch\",\n\t).length;\n\treturn {\n\t\trows: entries.map((entry) => ({\n\t\t\tdetail:\n\t\t\t\tentry.status === \"checksum-mismatch\"\n\t\t\t\t\t? `ledger ${entry.storedChecksum} ≠ packaged ${entry.checksum}`\n\t\t\t\t\t: entry.status === \"legacy-compatible\"\n\t\t\t\t\t\t? `ledger identity: legacy (${entry.storedChecksum}); packaged identity: SHA-256; action: adopt`\n\t\t\t\t\t\t: undefined,\n\t\t\tname: entry.filename,\n\t\t\tstatus: entry.status,\n\t\t})),\n\t\tsummary: `${applied} / ${entries.length} applied${pending > 0 ? ` · ${pending} pending` : \"\"}${adoptable > 0 ? ` · ${adoptable} adopt` : \"\"}${conflicts > 0 ? ` · ${conflicts} conflicts` : \"\"}`,\n\t\ttitle,\n\t};\n}\n\nexport async function inspectEmbeddedModuleSections(input: {\n\tconnectionString: string;\n\tmodules: EmbeddedMigrateModules | undefined;\n}): Promise<readonly EmbeddedModuleSection[]> {\n\tconst chatEnabled = shouldApplyEmbeddedChatMigrations(input.modules);\n\tconst ingressEnabled = shouldApplyEmbeddedEventIngressMigrations(\n\t\tinput.modules,\n\t);\n\tconst billingEnabled = shouldApplyEmbeddedBillingMigrations(input.modules);\n\tif (!chatEnabled && !ingressEnabled && !billingEnabled) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tenabled: false,\n\t\t\t\tid: \"chat\",\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Embedded Chat\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"modules.chat !== true\",\n\t\t\t\t\tundefined,\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tenabled: false,\n\t\t\t\tid: \"event-ingress\",\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Event Ingress\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"modules.eventIngress / modules.billing not enabled\",\n\t\t\t\t\tundefined,\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tenabled: false,\n\t\t\t\tid: \"billing\",\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Embedded Billing\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"modules.billing !== true\",\n\t\t\t\t\tundefined,\n\t\t\t\t),\n\t\t\t},\n\t\t];\n\t}\n\n\tconst pool = await createPostgresPool(input.connectionString, {\n\t\tmax: 1,\n\t\tmin: 0,\n\t});\n\ttry {\n\t\tconst chat = chatEnabled\n\t\t\t? await inspectEmbeddedSqlLedger({\n\t\t\t\t\tledgerTable: EMBEDDED_CHAT_LEDGER,\n\t\t\t\t\tmigrations: EMBEDDED_CHAT_MIGRATIONS,\n\t\t\t\t\tqueryable: pool,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tconst ingress = ingressEnabled\n\t\t\t? await inspectEmbeddedSqlLedger({\n\t\t\t\t\tledgerTable: EMBEDDED_EVENT_INGRESS_LEDGER,\n\t\t\t\t\tmigrations: EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n\t\t\t\t\tqueryable: pool,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\tconst billing = billingEnabled\n\t\t\t? await inspectEmbeddedSqlLedger({\n\t\t\t\t\tledgerTable: EMBEDDED_BILLING_LEDGER,\n\t\t\t\t\tmigrations: EMBEDDED_BILLING_MIGRATIONS,\n\t\t\t\t\tqueryable: pool,\n\t\t\t\t})\n\t\t\t: undefined;\n\t\treturn [\n\t\t\t{\n\t\t\t\tenabled: chatEnabled,\n\t\t\t\tid: \"chat\",\n\t\t\t\tinspection: chat,\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Embedded Chat\",\n\t\t\t\t\tchatEnabled,\n\t\t\t\t\t\"modules.chat !== true\",\n\t\t\t\t\tchat,\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tenabled: ingressEnabled,\n\t\t\t\tid: \"event-ingress\",\n\t\t\t\tinspection: ingress,\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Event Ingress\",\n\t\t\t\t\tingressEnabled,\n\t\t\t\t\t\"modules.eventIngress / modules.billing not enabled\",\n\t\t\t\t\tingress,\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tenabled: billingEnabled,\n\t\t\t\tid: \"billing\",\n\t\t\t\tinspection: billing,\n\t\t\t\tsection: sectionFromInspection(\n\t\t\t\t\t\"Embedded Billing\",\n\t\t\t\t\tbillingEnabled,\n\t\t\t\t\t\"modules.billing !== true\",\n\t\t\t\t\tbilling,\n\t\t\t\t),\n\t\t\t},\n\t\t];\n\t} finally {\n\t\tawait pool.end();\n\t}\n}\n\nexport function embeddedModuleHasConflicts(\n\tsections: readonly EmbeddedModuleSection[],\n): boolean {\n\treturn sections.some((section) =>\n\t\tsection.section.rows.some((row) => row.status === \"checksum-mismatch\"),\n\t);\n}\n\nexport function embeddedModuleHasPending(\n\tsections: readonly EmbeddedModuleSection[],\n): boolean {\n\treturn sections.some(\n\t\t(section) =>\n\t\t\tsection.enabled &&\n\t\t\tsection.section.rows.some(\n\t\t\t\t(row) =>\n\t\t\t\t\trow.status === \"pending\" || row.status === \"legacy-compatible\",\n\t\t\t),\n\t);\n}\n\nexport function embeddedModuleNeedsAdoption(\n\tsections: readonly EmbeddedModuleSection[],\n): boolean {\n\treturn sections.some(\n\t\t(section) =>\n\t\t\tsection.enabled &&\n\t\t\tsection.section.rows.some((row) => row.status === \"legacy-compatible\"),\n\t);\n}\n\nexport function formatEmbeddedModuleConflicts(\n\tsections: readonly EmbeddedModuleSection[],\n): string {\n\tconst lines = [\"Packaged module ledger checksum mismatch.\"];\n\tfor (const section of sections) {\n\t\tif (!section.enabled) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const row of section.section.rows) {\n\t\t\tif (row.status !== \"checksum-mismatch\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlines.push(`${section.section.title}: ${row.name}`);\n\t\t\tif (row.detail) {\n\t\t\t\tlines.push(`  ${row.detail}`);\n\t\t\t}\n\t\t}\n\t}\n\treturn lines.join(\"\\n\");\n}\n","import type { MigrationConflict, MigrationPlan } from \"../types.ts\";\n\nexport function formatConflictBlock(plan: MigrationPlan): string {\n\tconst lines: string[] = [];\n\tfor (const conflict of plan.conflicts) {\n\t\tlines.push(formatConflict(conflict));\n\t}\n\treturn lines.join(\"\\n\\n\");\n}\n\nfunction formatConflict(conflict: MigrationConflict): string {\n\tswitch (conflict.kind) {\n\t\tcase \"checksum-mismatch\": {\n\t\t\tconst filename =\n\t\t\t\tconflict.local?.filename ??\n\t\t\t\t`${String(conflict.version).padStart(4, \"0\")}_${conflict.applied?.name ?? \"unknown\"}.sql`;\n\t\t\treturn [\n\t\t\t\t\"Migration integrity error\",\n\t\t\t\t\"\",\n\t\t\t\t`${filename} was already applied but its contents have changed.`,\n\t\t\t\t\"\",\n\t\t\t\t`  Stored    ${conflict.applied?.checksum ?? \"(missing)\"}`,\n\t\t\t\t`  Current   ${conflict.local?.checksum ?? \"(missing local file)\"}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Applied migrations are immutable.\",\n\t\t\t\t\"Create a new forward migration instead of editing an applied file.\",\n\t\t\t].join(\"\\n\");\n\t\t}\n\t\tcase \"missing-local\": {\n\t\t\tconst label = conflict.applied\n\t\t\t\t? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n\t\t\t\t: String(conflict.version).padStart(4, \"0\");\n\t\t\treturn [\n\t\t\t\t\"Migration history conflict\",\n\t\t\t\t\"\",\n\t\t\t\t`Database contains migration ${label}`,\n\t\t\t\t\"but no matching local migration exists.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Refusing to continue because this checkout is older than the database migration history.\",\n\t\t\t].join(\"\\n\");\n\t\t}\n\t\tcase \"name-mismatch\":\n\t\t\treturn [\n\t\t\t\t\"Migration identity changed\",\n\t\t\t\t\"\",\n\t\t\t\t`Version ${conflict.version} checksum matches, but the name changed.`,\n\t\t\t\t\"\",\n\t\t\t\t`  Ledger   ${conflict.applied?.name ?? \"(unknown)\"}`,\n\t\t\t\t`  Local    ${conflict.local?.name ?? \"(unknown)\"}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Do not rename applied migrations. Add a new forward migration instead.\",\n\t\t\t].join(\"\\n\");\n\t\tcase \"historical-insertion\":\n\t\t\treturn [\n\t\t\t\t\"Historical migration insertion refused\",\n\t\t\t\t\"\",\n\t\t\t\t`${conflict.local?.filename ?? conflict.version} is a new local version`,\n\t\t\t\t\"below an already-applied migration.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Inserting migrations into published history is not allowed.\",\n\t\t\t\t\"Use a version greater than the current ledger tip.\",\n\t\t\t].join(\"\\n\");\n\t\tcase \"duplicate-version\":\n\t\t\treturn [\n\t\t\t\t\"Duplicate migration version\",\n\t\t\t\t\"\",\n\t\t\t\t`Version ${conflict.version} appears more than once in history.`,\n\t\t\t].join(\"\\n\");\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = conflict.kind;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n","import type {\n\tAthenaAuthMigrationPlan,\n\tAthenaAuthMigrationPlanEntry,\n} from \"../auth/local/schema.ts\";\nimport type {\n\tMigrationDisplayStatus,\n\tMigrationReportView,\n\tMigrationRowView,\n} from \"../cli/ui/types.ts\";\nimport type { MigrationPlan, MigrationRunSummary } from \"./types.ts\";\n\nfunction authEntryStatus(\n\tentry: AthenaAuthMigrationPlanEntry,\n): MigrationDisplayStatus {\n\tif (entry.schemaState === \"drift\") {\n\t\treturn \"drift\";\n\t}\n\tif (entry.ledgerState === \"checksum-mismatch\") {\n\t\treturn \"checksum-mismatch\";\n\t}\n\tif (entry.ledgerState === \"unknown\") {\n\t\treturn \"unknown\";\n\t}\n\tif (entry.ledgerState === \"absent\") {\n\t\treturn \"pending\";\n\t}\n\treturn \"applied\";\n}\n\nfunction authEntryDetail(\n\tentry: AthenaAuthMigrationPlanEntry,\n): string | undefined {\n\tif (entry.ledgerState === \"unknown\") {\n\t\treturn `Database has this generation, but this CLI does not. Upgrade or rebuild @xylex-group/athena (workspace: pnpm build in packages/athena-js).`;\n\t}\n\tif (!entry.drift || entry.drift.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn entry.drift\n\t\t.map(\n\t\t\t(item) => `Missing ${item.kind.replace(\"missing-\", \"\")}: ${item.object}`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nexport function applicationRowsFromPlan(\n\tplan: MigrationPlan,\n): MigrationRowView[] {\n\tconst rows: MigrationRowView[] = [];\n\tfor (const entry of plan.applied) {\n\t\trows.push({ name: entry.migration.filename, status: \"applied\" });\n\t}\n\tfor (const conflict of plan.conflicts) {\n\t\tif (conflict.kind === \"checksum-mismatch\") {\n\t\t\trows.push({\n\t\t\t\tname:\n\t\t\t\t\tconflict.local?.filename ??\n\t\t\t\t\t`${String(conflict.version).padStart(4, \"0\")}_*.sql`,\n\t\t\t\tstatus: \"checksum-mismatch\",\n\t\t\t});\n\t\t} else if (conflict.kind === \"name-mismatch\") {\n\t\t\trows.push({\n\t\t\t\tname: conflict.local?.filename ?? String(conflict.version),\n\t\t\t\tstatus: \"name-mismatch\",\n\t\t\t});\n\t\t} else if (conflict.kind === \"historical-insertion\") {\n\t\t\trows.push({\n\t\t\t\tname: conflict.local?.filename ?? String(conflict.version),\n\t\t\t\tstatus: \"historical-insertion\",\n\t\t\t});\n\t\t} else {\n\t\t\trows.push({\n\t\t\t\tname: conflict.applied\n\t\t\t\t\t? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n\t\t\t\t\t: String(conflict.version),\n\t\t\t\tstatus: \"missing-local\",\n\t\t\t});\n\t\t}\n\t}\n\tfor (const entry of plan.pending) {\n\t\trows.push({ name: entry.migration.filename, status: \"pending\" });\n\t}\n\treturn rows;\n}\n\nexport function authRowsFromPlan(\n\tplan: AthenaAuthMigrationPlan,\n): MigrationRowView[] {\n\treturn plan.entries.map((entry) => ({\n\t\tname: entry.name,\n\t\tstatus: authEntryStatus(entry),\n\t\tdetail: authEntryDetail(entry),\n\t}));\n}\n\nexport function buildMigrationReportView(input: {\n\tsummary: Pick<\n\t\tMigrationRunSummary,\n\t\t\"providerLabel\" | \"databaseLabel\" | \"directory\" | \"plan\" | \"mode\"\n\t>;\n\tauthPlan?: AthenaAuthMigrationPlan;\n\tmodules?: MigrationReportView[\"modules\"];\n\toutcome: string;\n\tlogPath?: string;\n\tdiagnostics?: MigrationReportView[\"diagnostics\"];\n}): MigrationReportView {\n\tconst applicationRows = applicationRowsFromPlan(input.summary.plan);\n\tconst authRows = input.authPlan ? authRowsFromPlan(input.authPlan) : [];\n\n\tconst appApplied = applicationRows.filter(\n\t\t(r) => r.status === \"applied\",\n\t).length;\n\tconst appPending = applicationRows.filter(\n\t\t(r) => r.status === \"pending\",\n\t).length;\n\tconst appConflicts = applicationRows.filter(\n\t\t(r) =>\n\t\t\tr.status === \"checksum-mismatch\" ||\n\t\t\tr.status === \"missing-local\" ||\n\t\t\tr.status === \"name-mismatch\" ||\n\t\t\tr.status === \"historical-insertion\" ||\n\t\t\tr.status === \"drift\" ||\n\t\t\tr.status === \"failed\" ||\n\t\t\tr.status === \"unknown\",\n\t).length;\n\n\tconst authApplied = authRows.filter((r) => r.status === \"applied\").length;\n\tconst authPending = authRows.filter((r) => r.status === \"pending\").length;\n\tconst authConflicts = authRows.filter(\n\t\t(r) =>\n\t\t\tr.status === \"drift\" ||\n\t\t\tr.status === \"checksum-mismatch\" ||\n\t\t\tr.status === \"failed\" ||\n\t\t\tr.status === \"unknown\",\n\t).length;\n\n\treturn {\n\t\ttitle: \"Athena JS · migrations\",\n\t\ttarget: {\n\t\t\tprovider: input.summary.providerLabel,\n\t\t\tdatabase: input.summary.databaseLabel,\n\t\t\tdirectory: input.summary.directory,\n\t\t},\n\t\tapplication: {\n\t\t\ttitle: \"Application\",\n\t\t\trows: applicationRows,\n\t\t\tsummary: `${appApplied} applied · ${appPending} pending · ${appConflicts} conflicts`,\n\t\t},\n\t\tauth: {\n\t\t\ttitle: \"Embedded Auth\",\n\t\t\trows: authRows,\n\t\t\tsummary:\n\t\t\t\tauthRows.length === 0\n\t\t\t\t\t? undefined\n\t\t\t\t\t: `${authApplied} applied · ${authPending} pending · ${authConflicts} conflicts`,\n\t\t},\n\t\tmodules: input.modules,\n\t\toutcome: input.outcome,\n\t\tdiagnostics: input.diagnostics ?? [],\n\t\tlogPath: input.logPath,\n\t};\n}\n","import type { AthenaAuthMigrationPlan } from \"../../auth/local/schema.ts\";\nimport type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { buildMigrationReportView } from \"../report.ts\";\nimport type { MigrationRunSummary } from \"../types.ts\";\n\nexport function unknownAuthLedgerDiagnostics(\n\tauthPlan: AthenaAuthMigrationPlan | undefined,\n\tlevel: \"error\" | \"warn\" = \"warn\",\n): NonNullable<MigrationRunSummary[\"diagnostics\"]> {\n\tif (!authPlan) {\n\t\treturn [];\n\t}\n\tconst unknown = authPlan.entries.filter(\n\t\t(entry) => entry.ledgerState === \"unknown\",\n\t);\n\tif (unknown.length === 0) {\n\t\treturn [];\n\t}\n\treturn [\n\t\t{\n\t\t\tlevel,\n\t\t\tcode: \"ATHENA_AUTH_LEDGER_UNKNOWN\",\n\t\t\tmessage: formatUnknownAuthLedgerError(authPlan),\n\t\t\thint: \"Run the workspace CLI after building packages/athena-js (`pnpm exec athena-js migrate status`). A global or stale `athena-js` binary will treat newer generations as unknown.\",\n\t\t},\n\t];\n}\n\nexport function formatUnknownAuthLedgerError(\n\tauthPlan: AthenaAuthMigrationPlan,\n): string {\n\tconst unknown = authPlan.entries.filter(\n\t\t(entry) => entry.ledgerState === \"unknown\",\n\t);\n\treturn [\n\t\t\"Embedded Auth ledger contains generation(s) this CLI does not know:\",\n\t\t...unknown.map(\n\t\t\t(entry) => `  ${entry.name} (database version ${entry.version})`,\n\t\t),\n\t\t\"\",\n\t\t\"CI verification (`migrate check` / `migrate drift`) fails closed until this CLI understands that history.\",\n\t].join(\"\\n\");\n}\n\nexport function hasUnknownAuthGenerations(\n\tauthPlan: AthenaAuthMigrationPlan | undefined,\n): boolean {\n\treturn Boolean(\n\t\tauthPlan?.entries.some((entry) => entry.ledgerState === \"unknown\"),\n\t);\n}\n\nexport function renderReport(\n\tui: AthenaCliUI,\n\tsummary: Pick<\n\t\tMigrationRunSummary,\n\t\t\"providerLabel\" | \"databaseLabel\" | \"directory\" | \"plan\" | \"mode\"\n\t>,\n\tauthPlan: AthenaAuthMigrationPlan | undefined,\n\toutcome: string,\n\tdiagnostics: MigrationRunSummary[\"diagnostics\"] = [],\n\tmodules?: import(\"../../cli/ui/types.ts\").MigrationReportView[\"modules\"],\n): void {\n\tconst report = buildMigrationReportView({\n\t\tsummary,\n\t\tauthPlan,\n\t\tmodules,\n\t\toutcome,\n\t\tdiagnostics,\n\t\tlogPath: undefined,\n\t});\n\tui.renderMigrationReport(report);\n}\n","import { AthenaAuthRuntimeError } from \"../auth/local/errors.ts\";\nimport type { AthenaAuthMigrationPlan } from \"../auth/local/schema.ts\";\nimport { formatDiagnostic } from \"./analysis/diagnostics.ts\";\nimport {\n\texplainMigration,\n\tformatMigrationGraph,\n\tformatPreflightFailure,\n} from \"./analysis/index.ts\";\nimport { fingerprintProjectedSchema } from \"./analysis/projected-schema.ts\";\nimport { applyApplicationMigrations } from \"./application/apply.ts\";\nimport {\n\tassertDirectPostgres,\n\tdatabaseLabel,\n\tproviderLabel,\n} from \"./application/authority.ts\";\nimport { prepareApplicationMigrationRun } from \"./application/prepare.ts\";\nimport { reconcileApplicationMigrations } from \"./application/reconcile.ts\";\nimport {\n\tblockingSemantic,\n\tcompileApplicationSemantics,\n} from \"./application/semantics.ts\";\nimport type { MigrationBackend } from \"./backend.ts\";\nimport { applyEmbeddedAuthMigrations } from \"./embedded-auth/apply.ts\";\nimport { loadAuthPlan } from \"./embedded-auth/plan.ts\";\nimport { repairEmbeddedAuthMigrations } from \"./embedded-auth/repair.ts\";\nimport { applyEmbeddedBillingMigrations } from \"./embedded-billing/apply.ts\";\nimport { applyEmbeddedChatMigrations } from \"./embedded-chat/apply.ts\";\nimport { applyEmbeddedEventIngressMigrations } from \"./embedded-event-ingress/apply.ts\";\nimport {\n\ttype EmbeddedModuleSection,\n\tembeddedModuleHasConflicts,\n\tembeddedModuleHasPending,\n\tembeddedModuleNeedsAdoption,\n\tformatEmbeddedModuleConflicts,\n\tinspectEmbeddedModuleSections,\n} from \"./embedded-modules-inspect.ts\";\nimport {\n\tformatManagedAuthDrift,\n\ttype ManagedAuthInspection,\n} from \"./managed-auth.ts\";\nimport { planHasBlockingConflicts, planMigrations } from \"./planner.ts\";\nimport { createPostgresMigrationBackend } from \"./postgres.ts\";\nimport { isHighAutoRepair } from \"./reconciliation/index.ts\";\nimport { formatConflictBlock } from \"./reporting/conflicts.ts\";\nimport {\n\tformatUnknownAuthLedgerError,\n\thasUnknownAuthGenerations,\n\trenderReport,\n\tunknownAuthLedgerDiagnostics,\n} from \"./reporting/render.ts\";\nimport {\n\tformatPlanProvenance,\n\tformatSourceSafetyWarning,\n} from \"./source-control/index.ts\";\nimport {\n\ttype AppliedMigrationResult,\n\ttype MigrationCommandMode,\n\tMigrationError,\n\ttype MigrationPlan,\n\ttype MigrationRunSummary,\n\ttype RunMigrationsOptions,\n} from \"./types.ts\";\n\nfunction translateRunError(error: unknown): MigrationError {\n\tif (error instanceof MigrationError) {\n\t\treturn error;\n\t}\n\tif (error instanceof AthenaAuthRuntimeError) {\n\t\treturn new MigrationError(\"EXECUTION\", error.publicMessage, {\n\t\t\tcause: error,\n\t\t});\n\t}\n\treturn new MigrationError(\n\t\t\"EXECUTION\",\n\t\terror instanceof Error ? error.message : String(error),\n\t\t{ cause: error },\n\t);\n}\n\nfunction labeledEmbeddedFailure(\n\tfailed: string,\n\tnotAttempted: readonly string[],\n\terror: unknown,\n): MigrationError {\n\tconst detail = error instanceof Error ? error.message : String(error);\n\treturn new MigrationError(\n\t\t\"EXECUTION\",\n\t\t[\n\t\t\tfailed,\n\t\t\t`  ✗ ${detail}`,\n\t\t\t...notAttempted.flatMap((name) => [name, \"  - not attempted\"]),\n\t\t].join(\"\\n\"),\n\t\t{ cause: error },\n\t);\n}\n\nasync function applyEmbeddedAuthPrerequisites(input: {\n\tconnectionString: string;\n\tmodules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n\toptions: RunMigrationsOptions;\n\tui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n\tconst { connectionString, modules, options, ui } = input;\n\ttry {\n\t\tawait applyEmbeddedAuthMigrations(options, connectionString, ui, modules);\n\t} catch (error) {\n\t\tthrow labeledEmbeddedFailure(\n\t\t\t\"Embedded Auth\",\n\t\t\t[\"Embedded Chat\", \"Event Ingress\", \"Embedded Billing\"],\n\t\t\terror,\n\t\t);\n\t}\n\tconst packagedInspect = await inspectEmbeddedModuleSections({\n\t\tconnectionString,\n\t\tmodules,\n\t});\n\tif (embeddedModuleHasConflicts(packagedInspect)) {\n\t\tthrow new MigrationError(\n\t\t\t\"INTEGRITY\",\n\t\t\tformatEmbeddedModuleConflicts(packagedInspect),\n\t\t);\n\t}\n}\n\nasync function applyEmbeddedDependents(input: {\n\tconnectionString: string;\n\tmodules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n\toptions: RunMigrationsOptions;\n\tui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n\tconst { connectionString, modules, options, ui } = input;\n\ttry {\n\t\tawait applyEmbeddedChatMigrations(options, connectionString, ui, modules);\n\t} catch (error) {\n\t\tthrow labeledEmbeddedFailure(\n\t\t\t\"Embedded Chat\",\n\t\t\t[\"Event Ingress\", \"Embedded Billing\"],\n\t\t\terror,\n\t\t);\n\t}\n\ttry {\n\t\tawait applyEmbeddedEventIngressMigrations(\n\t\t\toptions,\n\t\t\tconnectionString,\n\t\t\tui,\n\t\t\tmodules,\n\t\t);\n\t} catch (error) {\n\t\tthrow labeledEmbeddedFailure(\"Event Ingress\", [\"Embedded Billing\"], error);\n\t}\n\ttry {\n\t\tawait applyEmbeddedBillingMigrations(\n\t\t\toptions,\n\t\t\tconnectionString,\n\t\t\tui,\n\t\t\tmodules,\n\t\t);\n\t} catch (error) {\n\t\tthrow labeledEmbeddedFailure(\"Embedded Billing\", [], error);\n\t}\n}\n\nasync function applyPackagedEmbeddedMigrations(input: {\n\tconnectionString: string;\n\tmodules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n\toptions: RunMigrationsOptions;\n\tui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n\tawait applyEmbeddedAuthPrerequisites(input);\n\tawait applyEmbeddedDependents(input);\n}\n\n/**\n * Programmatic migration runner (Node/tooling only).\n *\n * Thin coordinator: application ledger and Embedded Auth ledger stay separate.\n */\nexport async function runMigrations(\n\toptions: RunMigrationsOptions = {},\n): Promise<MigrationRunSummary> {\n\tconst prepared = await prepareApplicationMigrationRun(options);\n\tconst {\n\t\tcwd,\n\t\tui,\n\t\tmode,\n\t\tdryRun,\n\t\tconfig,\n\t\tdirectoryDisplay,\n\t\tlocal,\n\t\tsourceControl,\n\t\tsourceSafety,\n\t\tgitWorktree,\n\t\tmanagedAuth,\n\t\tmutating,\n\t} = prepared;\n\tconst applyPackaged = async (connection: string): Promise<void> => {\n\t\tawait applyPackagedEmbeddedMigrations({\n\t\t\tconnectionString: connection,\n\t\t\tmodules: config.modules,\n\t\t\toptions,\n\t\t\tui,\n\t\t});\n\t};\n\n\tlet backend: MigrationBackend | undefined;\n\tlet connectionString = \"\";\n\tconst newlyApplied: AppliedMigrationResult[] = [];\n\tlet plan: MigrationPlan = { applied: [], conflicts: [], pending: [] };\n\tlet authPlan: AthenaAuthMigrationPlan | undefined;\n\n\ttry {\n\t\tconst pg = assertDirectPostgres(config);\n\t\tconnectionString = pg.connectionString;\n\t\tbackend =\n\t\t\t(await options.createBackend?.({\n\t\t\t\tconnectionString: pg.connectionString,\n\t\t\t\tdatabase: pg.database,\n\t\t\t})) ??\n\t\t\t(await createPostgresMigrationBackend({\n\t\t\t\tconnectionString: pg.connectionString,\n\t\t\t\tdatabase: pg.database,\n\t\t\t}));\n\n\t\tif (mutating) {\n\t\t\tawait backend.acquireLock();\n\t\t}\n\t\tif (mode === \"apply\" || mode === \"repair\") {\n\t\t\tawait backend.ensureLedger();\n\t\t}\n\t\tconst applied = await backend.listAppliedMigrations();\n\t\tplan = planMigrations({ applied, local });\n\n\t\tconst gitDiagnostics =\n\t\t\tgitWorktree.dirty && !mutating\n\t\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlevel: \"warn\" as const,\n\t\t\t\t\t\tcode: \"ATHENA-MIG-GIT-001\",\n\t\t\t\t\t\tmessage: [\n\t\t\t\t\t\t\tformatPlanProvenance(sourceControl),\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\tformatSourceSafetyWarning(sourceControl, sourceSafety),\n\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\t: [];\n\t\tif (gitDiagnostics[0]) {\n\t\t\tui.warn(gitDiagnostics[0].message);\n\t\t}\n\n\t\tconst summaryBase = {\n\t\t\tdatabaseLabel: databaseLabel(config),\n\t\t\tdirectory: directoryDisplay,\n\t\t\tdryRun,\n\t\t\tgitWorktree,\n\t\t\tmode,\n\t\t\tplan,\n\t\t\tproviderLabel: providerLabel(config),\n\t\t\tsourceControl,\n\t\t};\n\n\t\tif (mode === \"repair\") {\n\t\t\tauthPlan = await loadAuthPlan(options, connectionString, true);\n\t\t\tconst repairEntries =\n\t\t\t\tauthPlan?.entries.filter((entry) => entry.action === \"repair\") ?? [];\n\t\t\trenderReport(\n\t\t\t\tui,\n\t\t\t\tsummaryBase,\n\t\t\t\tauthPlan,\n\t\t\t\trepairEntries.length === 0\n\t\t\t\t\t? \"No Embedded Auth repairs required.\"\n\t\t\t\t\t: `${repairEntries.length} migration(s) require repair`,\n\t\t\t\t[],\n\t\t\t);\n\n\t\t\tif (repairEntries.length === 0) {\n\t\t\t\treturn {\n\t\t\t\t\t...summaryBase,\n\t\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\t\tauthPlan,\n\t\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\t\tdiagnostics: [],\n\t\t\t\t\tfailedCount: 0,\n\t\t\t\t\tnewlyApplied: [],\n\t\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\t\tskippedCount: 0,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!options.yes && !dryRun) {\n\t\t\t\tif (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n\t\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\t\"CONFIG\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"migrate repair requires confirmation.\",\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\"Re-run with --yes in CI/non-TTY environments:\",\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\"  athena-js migrate repair --yes\",\n\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst confirmed = await ui.confirm(\n\t\t\t\t\t\"Repair drifted Embedded Auth schema now?\",\n\t\t\t\t);\n\t\t\t\tif (!confirmed) {\n\t\t\t\t\tthrow new MigrationError(\"CONFIG\", \"Repair cancelled.\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait repairEmbeddedAuthMigrations(options, connectionString, dryRun);\n\t\t\tauthPlan = await loadAuthPlan(options, connectionString, true);\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\tskippedCount: dryRun ? repairEntries.length : 0,\n\t\t\t};\n\t\t}\n\n\t\tconst inspectAuth =\n\t\t\tmode === \"status\" ||\n\t\t\tmode === \"plan\" ||\n\t\t\tmode === \"apply\" ||\n\t\t\tmode === \"check\" ||\n\t\t\tmode === \"drift\" ||\n\t\t\tmode === \"verify\";\n\t\tauthPlan = await loadAuthPlan(options, connectionString, inspectAuth);\n\n\t\tif (!backend) {\n\t\t\tthrow new MigrationError(\n\t\t\t\t\"PROVIDER\",\n\t\t\t\t\"Migration backend was not initialized.\",\n\t\t\t);\n\t\t}\n\n\t\tconst semantic = await compileApplicationSemantics({\n\t\t\tauthPlan,\n\t\t\tbackend,\n\t\t\tcacheDir: cwd,\n\t\t\tlocal,\n\t\t\tmodules: config.modules,\n\t\t\tplan,\n\t\t\tstrict: options.strict,\n\t\t});\n\n\t\tif (mode === \"reconcile\") {\n\t\t\tconst reconciliation = await reconcileApplicationMigrations({\n\t\t\t\tbackend,\n\t\t\t\tcwd,\n\t\t\t\tdirectoryDisplay,\n\t\t\t\tlocal,\n\t\t\t\toptions,\n\t\t\t\tsemantic,\n\t\t\t\tui,\n\t\t\t});\n\t\t\tconst eligible = reconciliation.diagnoses.filter(isHighAutoRepair);\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\treconciliation,\n\t\t\t\tsemantic,\n\t\t\t\tskippedCount: options.applyReconcile ? 0 : eligible.length,\n\t\t\t};\n\t\t}\n\n\t\tif (mode === \"graph\") {\n\t\t\tui.info(formatMigrationGraph(semantic.graph));\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\tsemantic,\n\t\t\t\tskippedCount: 0,\n\t\t\t};\n\t\t}\n\n\t\tif (mode === \"explain\") {\n\t\t\tconst target = (options.explainTarget ?? \"\").trim();\n\t\t\tconst analysis = semantic.analyses.find(\n\t\t\t\t(item) =>\n\t\t\t\t\titem.filename === target ||\n\t\t\t\t\titem.version === Number(target) ||\n\t\t\t\t\titem.filename.startsWith(`${target}_`) ||\n\t\t\t\t\titem.filename.includes(target),\n\t\t\t);\n\t\t\tif (!analysis) {\n\t\t\t\tthrow new MigrationError(\n\t\t\t\t\t\"CONFIG\",\n\t\t\t\t\t`Unknown migration to explain: ${target || \"(missing)\"}. Use a version or filename.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tui.info(explainMigration(analysis, semantic.packagedProviders));\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\tsemantic,\n\t\t\t\tskippedCount: 0,\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tmode === \"status\" ||\n\t\t\tmode === \"plan\" ||\n\t\t\tmode === \"check\" ||\n\t\t\tmode === \"drift\" ||\n\t\t\tmode === \"verify\"\n\t\t) {\n\t\t\tconst embeddedSections = await inspectEmbeddedModuleSections({\n\t\t\t\tconnectionString,\n\t\t\t\tmodules: config.modules,\n\t\t\t});\n\t\t\treturn inspectCombinedLedgers({\n\t\t\t\tauthPlan,\n\t\t\t\tembeddedSections,\n\t\t\t\tgitDiagnostics,\n\t\t\t\tmanagedAuth,\n\t\t\t\tmode,\n\t\t\t\tplan,\n\t\t\t\tsemantic,\n\t\t\t\tstrict: Boolean(options.strict),\n\t\t\t\tsummaryBase,\n\t\t\t\tui,\n\t\t\t});\n\t\t}\n\n\t\tif (planHasBlockingConflicts(plan)) {\n\t\t\trenderReport(\n\t\t\t\tui,\n\t\t\t\tsummaryBase,\n\t\t\t\tauthPlan,\n\t\t\t\t\"Application migration history has conflicts.\",\n\t\t\t\t[{ level: \"error\", message: formatConflictBlock(plan) }],\n\t\t\t);\n\t\t\tthrow new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n\t\t}\n\n\t\tif (blockingSemantic(semantic)) {\n\t\t\tconst message = formatPreflightFailure(semantic.diagnostics);\n\t\t\tconst reports = semantic.diagnostics\n\t\t\t\t.filter(\n\t\t\t\t\t(item) =>\n\t\t\t\t\t\titem.classification !== \"dynamic_sql\" &&\n\t\t\t\t\t\titem.classification !== \"unresolved_search_path\" &&\n\t\t\t\t\t\titem.classification !== \"unverified\",\n\t\t\t\t)\n\t\t\t\t.map((item) => ({\n\t\t\t\t\tlevel: \"error\" as const,\n\t\t\t\t\tcode: item.code,\n\t\t\t\t\tmessage: item.message,\n\t\t\t\t}));\n\t\t\trenderReport(\n\t\t\t\tui,\n\t\t\t\tsummaryBase,\n\t\t\t\tauthPlan,\n\t\t\t\t\"Migration preflight failed.\",\n\t\t\t\treports.length > 0\n\t\t\t\t\t? reports\n\t\t\t\t\t: [{ level: \"error\", code: \"ATHENA-MIG-PREFLIGHT\", message }],\n\t\t\t);\n\t\t\tthrow new MigrationError(\"SEMANTIC\", message);\n\t\t}\n\n\t\tif (mode === \"dry-run\") {\n\t\t\tconst outcome =\n\t\t\t\tplan.pending.length === 0\n\t\t\t\t\t? \"No pending application migrations. No database changes were made.\"\n\t\t\t\t\t: `${plan.pending.length} pending application migration(s). No database changes were made.`;\n\t\t\trenderReport(ui, summaryBase, authPlan, outcome);\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: plan.conflicts,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: plan.pending.length,\n\t\t\t\tsemantic,\n\t\t\t\tskippedCount: plan.pending.length,\n\t\t\t};\n\t\t}\n\n\t\tif (authPlan?.hasBlockingDrift) {\n\t\t\tconst driftMessage = [\n\t\t\t\t\"Embedded Auth schema drift detected\",\n\t\t\t\t\"\",\n\t\t\t\t...authPlan.entries\n\t\t\t\t\t.filter((entry) => entry.schemaState === \"drift\")\n\t\t\t\t\t.flatMap((entry) => [\n\t\t\t\t\t\tentry.name,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t...(entry.drift ?? []).map(\n\t\t\t\t\t\t\t(item) =>\n\t\t\t\t\t\t\t\t`  Missing ${item.kind.replace(\"missing-\", \"\")}: ${item.object}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t]),\n\t\t\t\t\"Migration history says these migrations were already applied.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Athena will not silently modify a drifted schema.\",\n\t\t\t\t\"\",\n\t\t\t\t\"Run:\",\n\t\t\t\t\"\",\n\t\t\t\t\"  athena-js migrate repair\",\n\t\t\t].join(\"\\n\");\n\t\t\trenderReport(ui, summaryBase, authPlan, \"Embedded Auth schema drift.\", [\n\t\t\t\t{\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tcode: \"ATHENA_AUTH_SCHEMA_DRIFT\",\n\t\t\t\t\tmessage: driftMessage,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tthrow new MigrationError(\"HISTORY\", driftMessage);\n\t\t}\n\n\t\tif (local.length === 0 && plan.pending.length === 0) {\n\t\t\tui.info(`No application SQL files in ${directoryDisplay}.`);\n\t\t\tawait applyPackaged(connectionString);\n\t\t\tauthPlan = await loadAuthPlan(options, connectionString, true);\n\t\t\tconst embeddedSections = await inspectEmbeddedModuleSections({\n\t\t\t\tconnectionString,\n\t\t\t\tmodules: config.modules,\n\t\t\t});\n\t\t\trenderReport(\n\t\t\t\tui,\n\t\t\t\tsummaryBase,\n\t\t\t\tauthPlan,\n\t\t\t\t`No application SQL files in ${directoryDisplay}. Packaged ledgers listed above.`,\n\t\t\t\t[],\n\t\t\t\tembeddedSections.map((section) => section.section),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: 0,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: 0,\n\t\t\t\tskippedCount: 0,\n\t\t\t};\n\t\t}\n\n\t\tfor (const entry of plan.applied) {\n\t\t\tui.info(`✓ ${entry.migration.filename} already applied`);\n\t\t}\n\n\t\tif (plan.pending.length === 0) {\n\t\t\tui.info(\"Application migrations are up to date.\");\n\t\t\tawait applyPackaged(connectionString);\n\t\t\tauthPlan = await loadAuthPlan(options, connectionString, true);\n\t\t\tconst embeddedSections = await inspectEmbeddedModuleSections({\n\t\t\t\tconnectionString,\n\t\t\t\tmodules: config.modules,\n\t\t\t});\n\t\t\trenderReport(\n\t\t\t\tui,\n\t\t\t\tsummaryBase,\n\t\t\t\tauthPlan,\n\t\t\t\t`${plan.applied.length} application migrations current.`,\n\t\t\t\t[],\n\t\t\t\tembeddedSections.map((section) => section.section),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\t...summaryBase,\n\t\t\t\tappliedCount: plan.applied.length,\n\t\t\t\tauthPlan,\n\t\t\t\tconflicts: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tfailedCount: 0,\n\t\t\t\tnewlyApplied: [],\n\t\t\t\tpendingCount: 0,\n\t\t\t\tskippedCount: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst catalogFingerprint = fingerprintProjectedSchema(semantic.physical);\n\t\tconst recatalog = await backend.inspectCatalog();\n\t\tif (fingerprintProjectedSchema(recatalog.schema) !== catalogFingerprint) {\n\t\t\tthrow new MigrationError(\n\t\t\t\t\"SEMANTIC\",\n\t\t\t\t\"Physical catalog changed after preflight; re-run migrate.\",\n\t\t\t);\n\t\t}\n\n\t\tawait applyEmbeddedAuthPrerequisites({\n\t\t\tconnectionString,\n\t\t\tmodules: config.modules,\n\t\t\toptions,\n\t\t\tui,\n\t\t});\n\t\tnewlyApplied.push(\n\t\t\t...(await applyApplicationMigrations(backend, plan.pending, ui)),\n\t\t);\n\t\tawait applyEmbeddedDependents({\n\t\t\tconnectionString,\n\t\t\tmodules: config.modules,\n\t\t\toptions,\n\t\t\tui,\n\t\t});\n\t\tauthPlan = await loadAuthPlan(options, connectionString, true);\n\t\tconst embeddedSections = await inspectEmbeddedModuleSections({\n\t\t\tconnectionString,\n\t\t\tmodules: config.modules,\n\t\t});\n\n\t\tconst outcome = `${newlyApplied.length} migration(s) applied`;\n\t\trenderReport(\n\t\t\tui,\n\t\t\tsummaryBase,\n\t\t\tauthPlan,\n\t\t\toutcome,\n\t\t\t[],\n\t\t\tembeddedSections.map((section) => section.section),\n\t\t);\n\n\t\treturn {\n\t\t\t...summaryBase,\n\t\t\tappliedCount: plan.applied.length + newlyApplied.length,\n\t\t\tauthPlan,\n\t\t\tconflicts: [],\n\t\t\tdiagnostics: [],\n\t\t\tfailedCount: 0,\n\t\t\tnewlyApplied,\n\t\t\tpendingCount: 0,\n\t\t\tskippedCount: 0,\n\t\t};\n\t} catch (error) {\n\t\tthrow translateRunError(error);\n\t} finally {\n\t\tif (backend) {\n\t\t\tawait backend.close();\n\t\t}\n\t}\n}\n\nfunction managedAuthDiagnostics(\n\tmanagedAuth: ManagedAuthInspection,\n\tlevel: \"warn\" | \"error\",\n): NonNullable<MigrationRunSummary[\"diagnostics\"]> {\n\tif (!managedAuth.drifted) {\n\t\treturn [];\n\t}\n\treturn [\n\t\t{\n\t\t\tlevel,\n\t\t\tcode: \"ATHENA-MIG-AUTH-MANAGED-001\",\n\t\t\tmessage: formatManagedAuthDrift(managedAuth),\n\t\t},\n\t];\n}\n\nfunction inspectCombinedLedgers(input: {\n\tauthPlan: AthenaAuthMigrationPlan | undefined;\n\tembeddedSections: readonly EmbeddedModuleSection[];\n\tgitDiagnostics: NonNullable<MigrationRunSummary[\"diagnostics\"]>;\n\tmanagedAuth: ManagedAuthInspection;\n\tmode: Extract<\n\t\tMigrationCommandMode,\n\t\t\"status\" | \"plan\" | \"check\" | \"drift\" | \"verify\"\n\t>;\n\tplan: MigrationPlan;\n\tsemantic: NonNullable<MigrationRunSummary[\"semantic\"]>;\n\tstrict: boolean;\n\tsummaryBase: Pick<\n\t\tMigrationRunSummary,\n\t\t| \"providerLabel\"\n\t\t| \"databaseLabel\"\n\t\t| \"directory\"\n\t\t| \"plan\"\n\t\t| \"mode\"\n\t\t| \"dryRun\"\n\t\t| \"gitWorktree\"\n\t\t| \"sourceControl\"\n\t>;\n\tui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): MigrationRunSummary {\n\tconst {\n\t\tauthPlan,\n\t\tembeddedSections,\n\t\tgitDiagnostics,\n\t\tmanagedAuth,\n\t\tmode,\n\t\tplan,\n\t\tsemantic,\n\t\tstrict,\n\t\tsummaryBase,\n\t\tui,\n\t} = input;\n\tconst semanticBlocked = blockingSemantic(semantic);\n\tconst unknownAuth = hasUnknownAuthGenerations(authPlan);\n\tconst embeddedConflicts = embeddedModuleHasConflicts(embeddedSections);\n\tconst embeddedPending = embeddedModuleHasPending(embeddedSections);\n\tconst embeddedAdopt = embeddedModuleNeedsAdoption(embeddedSections);\n\tconst moduleViews = embeddedSections.map((section) => section.section);\n\n\tconst outcome = planHasBlockingConflicts(plan)\n\t\t? \"Application migration history has conflicts.\"\n\t\t: semanticBlocked\n\t\t\t? \"Application schema drift / unsatisfied dependencies.\"\n\t\t\t: authPlan?.hasBlockingDrift\n\t\t\t\t? \"Embedded Auth schema drift detected.\"\n\t\t\t\t: unknownAuth || (authPlan?.conflictCount ?? 0) > 0\n\t\t\t\t\t? \"Embedded Auth ledger has unknown or conflicting generations.\"\n\t\t\t\t\t: embeddedConflicts\n\t\t\t\t\t\t? \"Packaged module ledger checksum mismatch.\"\n\t\t\t\t\t\t: embeddedAdopt\n\t\t\t\t\t\t\t? \"Packaged module ledger reconciliation required.\"\n\t\t\t\t\t\t\t: plan.pending.length === 0 &&\n\t\t\t\t\t\t\t\t(authPlan?.pendingCount ?? 0) === 0 &&\n\t\t\t\t\t\t\t\t!embeddedPending\n\t\t\t\t\t\t\t\t? \"Database is up to date.\"\n\t\t\t\t\t\t\t\t: \"Pending migrations remain.\";\n\n\tconst semanticDiagnostics = semantic.diagnostics.map((item) => ({\n\t\tlevel: \"error\" as const,\n\t\tcode: item.code,\n\t\tmessage: formatDiagnostic(item),\n\t}));\n\tconst verification =\n\t\tmode === \"check\" || mode === \"drift\" || mode === \"verify\";\n\tconst managedLevel =\n\t\tstrict && (mode === \"check\" || mode === \"verify\") ? \"error\" : \"warn\";\n\tconst combinedDiagnostics = [\n\t\t...gitDiagnostics,\n\t\t...semanticDiagnostics,\n\t\t...unknownAuthLedgerDiagnostics(authPlan, verification ? \"error\" : \"warn\"),\n\t\t...managedAuthDiagnostics(managedAuth, managedLevel),\n\t];\n\n\tif (mode === \"plan\" || mode === \"check\" || mode === \"drift\") {\n\t\tui.info(formatMigrationGraph(semantic.graph));\n\t}\n\n\trenderReport(\n\t\tui,\n\t\tsummaryBase,\n\t\tauthPlan,\n\t\toutcome,\n\t\tcombinedDiagnostics,\n\t\tmoduleViews,\n\t);\n\n\tif (planHasBlockingConflicts(plan)) {\n\t\tthrow new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n\t}\n\tif (\n\t\tsemanticBlocked &&\n\t\t(mode === \"check\" || mode === \"drift\" || mode === \"plan\")\n\t) {\n\t\tthrow new MigrationError(\n\t\t\t\"SEMANTIC\",\n\t\t\tformatPreflightFailure(semantic.diagnostics),\n\t\t);\n\t}\n\tif (verification && unknownAuth && authPlan) {\n\t\tthrow new MigrationError(\"HISTORY\", formatUnknownAuthLedgerError(authPlan));\n\t}\n\tif (verification && embeddedConflicts) {\n\t\tthrow new MigrationError(\n\t\t\t\"INTEGRITY\",\n\t\t\t\"Packaged module ledger checksum mismatch.\",\n\t\t);\n\t}\n\tif (verification && embeddedAdopt) {\n\t\tthrow new MigrationError(\n\t\t\t\"INTEGRITY\",\n\t\t\t\"Packaged module ledger reconciliation required.\",\n\t\t);\n\t}\n\tif (managedLevel === \"error\" && managedAuth.drifted) {\n\t\tthrow new MigrationError(\"INTEGRITY\", formatManagedAuthDrift(managedAuth));\n\t}\n\n\treturn {\n\t\t...summaryBase,\n\t\tappliedCount: plan.applied.length,\n\t\tauthPlan,\n\t\tconflicts: plan.conflicts,\n\t\tdiagnostics: combinedDiagnostics,\n\t\tfailedCount: semanticBlocked ? 1 : 0,\n\t\tnewlyApplied: [],\n\t\tpendingCount: plan.pending.length,\n\t\tsemantic,\n\t\tskippedCount: 0,\n\t};\n}\n","import { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type { CliCommand, MigrateAuthSyncCommand } from \"../../types.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport {\n\tensureAthenaProjectLayout,\n\tinspectManagedAuthMigrations,\n\tmaterializeManagedAuthMigrations,\n} from \"../../../migrations/managed-auth.ts\";\n\nexport function parseMigrateAuthSyncFlags(\n\trest: readonly string[],\n): CliCommand {\n\tlet configPath: string | undefined;\n\tlet dryRun = false;\n\tlet json = false;\n\tlet plain = false;\n\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"migrate\" };\n\t\t}\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--plain\" || token === \"--no-color\") {\n\t\t\tplain = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"sync\" || token === \"materialize\") {\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"migrate\");\n\t}\n\n\treturn {\n\t\tcommand: \"migrate-auth-sync\",\n\t\tconfigPath,\n\t\tdryRun,\n\t\tjson,\n\t\tplain,\n\t};\n}\n\nexport async function runMigrateAuthSync(\n\tctx: CommandContext,\n\tparsed: MigrateAuthSyncCommand,\n): Promise<void> {\n\tconst cwd = process.cwd();\n\ttry {\n\t\tawait ensureAthenaProjectLayout({ cwd, dryRun: parsed.dryRun });\n\t\tconst result = await materializeManagedAuthMigrations({\n\t\t\tcwd,\n\t\t\tdryRun: parsed.dryRun,\n\t\t\toverwrite: true,\n\t\t});\n\t\tconst inspection = parsed.dryRun\n\t\t\t? await inspectManagedAuthMigrations({ cwd })\n\t\t\t: undefined;\n\t\tif (parsed.json) {\n\t\t\tctx.log(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tcommand: \"migrate-auth-sync\",\n\t\t\t\t\t\tdryRun: parsed.dryRun,\n\t\t\t\t\t\tdirectory: result.directory,\n\t\t\t\t\t\twritten: result.written,\n\t\t\t\t\t\trestored: result.restored,\n\t\t\t\t\t\tunchanged: result.unchanged,\n\t\t\t\t\t\tunexpected: result.unexpected,\n\t\t\t\t\t\tdrifted: inspection?.drifted ?? false,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst prefix = parsed.dryRun ? \"[dry-run] \" : \"\";\n\t\tctx.log(\n\t\t\t`${prefix}Managed Embedded Auth migrations → athena/managed/auth/migrations`,\n\t\t);\n\t\tctx.log(\n\t\t\t`${prefix}written ${result.written.length} · restored ${result.restored.length} · unchanged ${result.unchanged.length}`,\n\t\t);\n\t\tif (result.unexpected.length > 0) {\n\t\t\tctx.log(\n\t\t\t\t`${prefix}unexpected local files (left in place): ${result.unexpected.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tctx.log(\n\t\t\t`${prefix}These files are a read-only view. Runtime apply uses package-owned SQL.`,\n\t\t);\n\t} catch (error) {\n\t\tlogCliError(\n\t\t\tformatGeneratorError(error, parsed.configPath),\n\t\t\tctx.errorLog,\n\t\t\tctx.capabilities,\n\t\t);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n\nexport const migrateAuthSyncCommand = defineCommand({\n\tpath: [\"migrate\", \"auth\", \"sync\"],\n\taliasPaths: [\n\t\t[\"migrate\", \"auth\", \"materialize\"],\n\t\t[\"migrate\", \"auth\"],\n\t],\n\tlegacy: \"migrate-auth-sync\",\n\tparse: parseMigrateAuthSyncFlags,\n\trun: (ctx, parsed) =>\n\t\trunMigrateAuthSync(ctx, parsed as MigrateAuthSyncCommand),\n\tusage: () => formatCatalogTopicUsage(\"migrate\"),\n});\n","import { checksumMigrationSql } from \"./checksum.ts\";\nimport { planHasBlockingConflicts } from \"./planner.ts\";\nimport type { MigrationConflict, MigrationPlan } from \"./types.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport type MigrationVerifyResult = \"READY\" | \"NOT_READY\";\n\nexport interface MigrationVerifyAuthFacts {\n\tconflictCount: number;\n\tcurrentGeneration: number | null;\n\texpectedGeneration: number;\n\thasBlockingDrift: boolean;\n\tpendingCount: number;\n}\n\nexport interface MigrationVerifyInput {\n\tallowDirty?: boolean;\n\tauth: MigrationVerifyAuthFacts;\n\tdatabaseLabel: string;\n\tdirtyWorktree: boolean;\n\tplan: Pick<MigrationPlan, \"applied\" | \"conflicts\" | \"pending\">;\n\tproviderLabel: string;\n\tsdkVersion?: string;\n\tsemanticBlocked: boolean;\n}\n\nexport interface MigrationVerifyReport {\n\tapplication: \"ok\" | \"conflict\" | \"blocked\";\n\tauth: \"ok\" | \"drift\" | \"conflict\";\n\tdatabase: string;\n\tdirtyWorktree: boolean;\n\tdrift: \"none\" | \"application\" | \"auth\" | \"worktree\";\n\tembeddedAuth: {\n\t\tcurrent: number | null;\n\t\texpected: number;\n\t\tpending: number;\n\t};\n\tok: boolean;\n\tpending: number;\n\tplan: string;\n\tprovider: string;\n\treasons: string[];\n\tresult: MigrationVerifyResult;\n\tsdkVersion: string;\n}\n\nfunction fingerprintPayload(input: MigrationVerifyInput): string {\n\tconst applied = input.plan.applied.map(\n\t\t(entry) =>\n\t\t\t`${entry.migration.version}:${entry.migration.checksum}:${entry.migration.filename}`,\n\t);\n\tconst pending = input.plan.pending.map(\n\t\t(entry) =>\n\t\t\t`${entry.migration.version}:${entry.migration.checksum}:${entry.migration.filename}`,\n\t);\n\tconst conflicts = input.plan.conflicts.map(\n\t\t(conflict: MigrationConflict) =>\n\t\t\t`${conflict.version}:${conflict.kind}`,\n\t);\n\treturn [\n\t\tapplied.join(\"|\"),\n\t\tpending.join(\"|\"),\n\t\tconflicts.join(\"|\"),\n\t\t`auth:${input.auth.expectedGeneration}:${input.auth.currentGeneration ?? \"none\"}:${input.auth.pendingCount}:${input.auth.hasBlockingDrift ? \"1\" : \"0\"}`,\n\t\t`dirty:${input.dirtyWorktree ? \"1\" : \"0\"}`,\n\t\t`semantic:${input.semanticBlocked ? \"1\" : \"0\"}`,\n\t].join(\"\\n\");\n}\n\nexport function evaluateMigrationReadiness(\n\tinput: MigrationVerifyInput,\n): MigrationVerifyReport {\n\tconst reasons: string[] = [];\n\tlet application: MigrationVerifyReport[\"application\"] = \"ok\";\n\tif (planHasBlockingConflicts(input.plan as MigrationPlan)) {\n\t\tapplication = \"conflict\";\n\t\treasons.push(\"application ledger conflicts\");\n\t} else if (input.semanticBlocked) {\n\t\tapplication = \"blocked\";\n\t\treasons.push(\"application schema/preflight blocked\");\n\t}\n\n\tlet auth: MigrationVerifyReport[\"auth\"] = \"ok\";\n\tif (input.auth.hasBlockingDrift) {\n\t\tauth = \"drift\";\n\t\treasons.push(\"Embedded Auth schema drift\");\n\t} else if (input.auth.conflictCount > 0) {\n\t\tauth = \"conflict\";\n\t\treasons.push(\"Embedded Auth ledger conflicts\");\n\t}\n\n\tif (input.dirtyWorktree && !input.allowDirty) {\n\t\treasons.push(\"dirty migration worktree\");\n\t}\n\n\tlet drift: MigrationVerifyReport[\"drift\"] = \"none\";\n\tif (application !== \"ok\") {\n\t\tdrift = \"application\";\n\t} else if (auth !== \"ok\") {\n\t\tdrift = \"auth\";\n\t} else if (input.dirtyWorktree && !input.allowDirty) {\n\t\tdrift = \"worktree\";\n\t}\n\n\tconst ok = reasons.length === 0;\n\tconst plan = checksumMigrationSql(fingerprintPayload(input)).slice(0, 12);\n\n\treturn {\n\t\tapplication,\n\t\tauth,\n\t\tdatabase: input.databaseLabel,\n\t\tdirtyWorktree: input.dirtyWorktree,\n\t\tdrift,\n\t\tembeddedAuth: {\n\t\t\tcurrent: input.auth.currentGeneration,\n\t\t\texpected: input.auth.expectedGeneration,\n\t\t\tpending: input.auth.pendingCount,\n\t\t},\n\t\tok,\n\t\tpending: input.plan.pending.length,\n\t\tplan,\n\t\tprovider: input.providerLabel,\n\t\treasons,\n\t\tresult: ok ? \"READY\" : \"NOT_READY\",\n\t\tsdkVersion: input.sdkVersion ?? PACKAGE_VERSION,\n\t};\n}\n\nexport function formatMigrationVerifyText(report: MigrationVerifyReport): string {\n\tconst authStatus =\n\t\treport.auth === \"ok\"\n\t\t\t? \"✓\"\n\t\t\t: report.auth === \"drift\"\n\t\t\t\t? \"drift\"\n\t\t\t\t: \"conflict\";\n\tconst appStatus =\n\t\treport.application === \"ok\"\n\t\t\t? \"✓\"\n\t\t\t: report.application === \"conflict\"\n\t\t\t\t? \"conflict\"\n\t\t\t\t: \"blocked\";\n\tconst lines = [\n\t\t\"Migration readiness\",\n\t\t\"\",\n\t\t`Database       ${report.database}`,\n\t\t`Provider       ${report.provider}`,\n\t\t`Application    ${appStatus}`,\n\t\t`Embedded Auth  ${authStatus}  (expected ${report.embeddedAuth.expected}${report.embeddedAuth.current != null ? `, ledger ${report.embeddedAuth.current}` : \"\"})`,\n\t\t`Drift          ${report.drift}`,\n\t\t`Pending        ${report.pending}`,\n\t\t`Plan           ${report.plan}`,\n\t\t`Result         ${report.result}`,\n\t];\n\tif (report.reasons.length > 0) {\n\t\tlines.push(\"\", \"Blocked by:\");\n\t\tfor (const reason of report.reasons) {\n\t\t\tlines.push(`  - ${reason}`);\n\t\t}\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nexport async function runMigrationVerify(\n\toptions: import(\"./types.ts\").RunMigrationsOptions = {},\n): Promise<MigrationVerifyReport> {\n\tconst { prepareApplicationMigrationRun } = await import(\n\t\t\"./application/prepare.ts\"\n\t);\n\tconst { assertDirectPostgres, databaseLabel, providerLabel } = await import(\n\t\t\"./application/authority.ts\"\n\t);\n\tconst { blockingSemantic, compileApplicationSemantics } = await import(\n\t\t\"./application/semantics.ts\"\n\t);\n\tconst { loadAuthPlan } = await import(\"./embedded-auth/plan.ts\");\n\tconst { planMigrations } = await import(\"./planner.ts\");\n\tconst { createPostgresMigrationBackend } = await import(\"./postgres.ts\");\n\tconst { ATHENA_AUTH_SCHEMA_GENERATION } = await import(\n\t\t\"../auth/contract/index.ts\"\n\t);\n\n\tconst prepared = await prepareApplicationMigrationRun({\n\t\t...options,\n\t\tdryRun: true,\n\t\tmode: \"verify\",\n\t});\n\tconst pg = assertDirectPostgres(prepared.config);\n\tconst backend =\n\t\t(await options.createBackend?.({\n\t\t\tconnectionString: pg.connectionString,\n\t\t\tdatabase: pg.database,\n\t\t})) ??\n\t\t(await createPostgresMigrationBackend({\n\t\t\tconnectionString: pg.connectionString,\n\t\t\tdatabase: pg.database,\n\t\t}));\n\n\ttry {\n\t\tconst applied = await backend.listAppliedMigrations();\n\t\tconst plan = planMigrations({ applied, local: prepared.local });\n\t\tconst authPlan = await loadAuthPlan(options, pg.connectionString, true);\n\t\tconst semantic = await compileApplicationSemantics({\n\t\t\tauthPlan,\n\t\t\tbackend,\n\t\t\tcacheDir: prepared.cwd,\n\t\t\tlocal: prepared.local,\n\t\t\tmodules: prepared.config.modules,\n\t\t\tplan,\n\t\t\tstrict: options.strict,\n\t\t});\n\t\tconst appliedAuth = authPlan?.entries.filter(\n\t\t\t(entry) => entry.ledgerState === \"applied\" || entry.action === \"none\",\n\t\t);\n\t\tconst currentGeneration =\n\t\t\tappliedAuth && appliedAuth.length > 0\n\t\t\t\t? Math.max(...appliedAuth.map((entry) => entry.version))\n\t\t\t\t: null;\n\t\treturn evaluateMigrationReadiness({\n\t\t\tallowDirty: prepared.allowDirtyMigrations,\n\t\t\tauth: {\n\t\t\t\tconflictCount: authPlan?.conflictCount ?? 0,\n\t\t\t\tcurrentGeneration,\n\t\t\t\texpectedGeneration: ATHENA_AUTH_SCHEMA_GENERATION,\n\t\t\t\thasBlockingDrift: authPlan?.hasBlockingDrift === true,\n\t\t\t\tpendingCount: authPlan?.pendingCount ?? 0,\n\t\t\t},\n\t\t\tdatabaseLabel: databaseLabel(prepared.config),\n\t\t\tdirtyWorktree: prepared.gitWorktree.dirty,\n\t\t\tplan,\n\t\t\tproviderLabel: providerLabel(prepared.config),\n\t\t\tsemanticBlocked: blockingSemantic(semantic),\n\t\t});\n\t} finally {\n\t\tawait backend.close();\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport {\n\tencodeCliJsonSuccess,\n\texitCodeForError,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { MigrateCommand } from \"../../types.ts\";\nimport {\n\tformatMigrationVerifyText,\n\trunMigrationVerify as runMigrationVerifyLive,\n} from \"../../../migrations/verify.ts\";\nimport { defineMigrateCommand } from \"./define.ts\";\n\nexport async function runMigrateVerify(\n\tctx: CommandContext,\n\tparsed: MigrateCommand,\n): Promise<void> {\n\tconst json = ctx.output === \"json\" || parsed.json === true;\n\ttry {\n\t\tconst runVerify = ctx.runtime.runMigrationVerify ?? runMigrationVerifyLive;\n\t\tconst report = await runVerify({\n\t\t\tallowDirty: parsed.allowDirty,\n\t\t\tallowDirtyMigrations: parsed.allowDirty,\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tcwd: ctx.cwd,\n\t\t\tjson,\n\t\t\tplain: parsed.plain,\n\t\t\tstrict: parsed.strict,\n\t\t});\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"migrate.verify\", report)));\n\t\t} else {\n\t\t\tctx.logRaw(formatMigrationVerifyText(report));\n\t\t}\n\t\tif (!report.ok) {\n\t\t\tsetCliExitCode(CliExitCode.Conflict);\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n\nexport const migrateVerifyCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"verify\"],\n\tmode: \"verify\",\n});\n","import { runMigrations } from \"../../../migrations/runner.ts\";\nimport { MigrationError } from \"../../../migrations/types.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { isDebugEnabled } from \"../../debug.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type { CliCommand, MigrateCommand } from \"../../types.ts\";\nimport { parseMigrateAuthSyncFlags } from \"./auth-sync.ts\";\nimport { type MigrateMode, parseMigrateFlags } from \"./flags.ts\";\n\nexport { migrateCatalog, migrateCatalog as catalog } from \"./catalog.ts\";\nexport { parseMigrateFlags } from \"./flags.ts\";\n\nexport const names: readonly string[] = [\"migrate\"];\n\nconst MIGRATE_SUBCOMMANDS = new Set<MigrateMode>([\n\t\"status\",\n\t\"plan\",\n\t\"repair\",\n\t\"check\",\n\t\"graph\",\n\t\"explain\",\n\t\"drift\",\n\t\"reconcile\",\n\t\"verify\",\n]);\n\nexport function parse(rest: string[]): CliCommand {\n\tconst head = rest[0];\n\tif (head === \"auth\") {\n\t\tconst flags =\n\t\t\trest[1] === \"sync\" || rest[1] === \"materialize\"\n\t\t\t\t? rest.slice(2)\n\t\t\t\t: rest.slice(1);\n\t\treturn parseMigrateAuthSyncFlags(flags);\n\t}\n\tif (head && MIGRATE_SUBCOMMANDS.has(head as MigrateMode)) {\n\t\treturn parseMigrateFlags(rest.slice(1), head as MigrateMode);\n\t}\n\treturn parseMigrateFlags(rest, \"apply\");\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"migrate\");\n}\n\nexport function migrateStatusUsage(): string {\n\treturn formatCatalogTopicUsage(\"migrate-status\");\n}\n\nexport function sessionTitle(_parsed: MigrateCommand): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: MigrateCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, presentation, runtime } = ctx;\n\tif (parsed.mode === \"verify\") {\n\t\tconst { runMigrateVerify } = await import(\"./verify.ts\");\n\t\tawait runMigrateVerify(ctx, parsed);\n\t\treturn;\n\t}\n\tconst runMigrate = runtime.runMigrations ?? runMigrations;\n\ttry {\n\t\tif (isDebugEnabled()) {\n\t\t\terrorLog(\n\t\t\t\t`[athena-js] migrate starting (mode=${parsed.mode} dryRun=${parsed.dryRun}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`,\n\t\t\t);\n\t\t}\n\t\tawait runMigrate({\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tallowDirty: parsed.allowDirty,\n\t\t\tallowDirtyMigrations: parsed.allowDirty,\n\t\t\tapplyReconcile: parsed.applyReconcile,\n\t\t\tdryRun: parsed.dryRun || parsed.mode === \"dry-run\",\n\t\t\texplainTarget: parsed.explainTarget,\n\t\t\tjson: parsed.json,\n\t\t\tlog,\n\t\t\tmode: parsed.mode,\n\t\t\tplain: parsed.plain || presentation.noColor === true,\n\t\t\tstrict: parsed.strict,\n\t\t\tyes: parsed.yes,\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof MigrationError) {\n\t\t\tlogCliError(error, errorLog, capabilities);\n\t\t} else {\n\t\t\tlogCliError(\n\t\t\t\tformatGeneratorError(error, parsed.configPath),\n\t\t\t\terrorLog,\n\t\t\t\tcapabilities,\n\t\t\t);\n\t\t}\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand, type RegisteredCommand } from \"../../platform/define-command.ts\";\nimport type { CliCommand, MigrateCommand } from \"../../types.ts\";\nimport { type MigrateMode, parseMigrateFlags } from \"./flags.ts\";\nimport { run as runMigrate, usage, migrateStatusUsage } from \"./index.ts\";\n\nexport function defineMigrateCommand(options: {\n\tpath: readonly string[];\n\tmode: MigrateMode;\n}): RegisteredCommand {\n\treturn defineCommand({\n\t\tpath: options.path,\n\t\tlegacy: \"migrate\",\n\t\tparse: (rest) => parseMigrateFlags(rest, options.mode),\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trunMigrate(ctx, parsed as MigrateCommand),\n\t\tusage: options.mode === \"status\" ? migrateStatusUsage : usage,\n\t});\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { AthenaBillingAuditEntry } from \"./types.ts\";\n\nexport interface AthenaBillingAuditWriter {\n\twrite(entry: AthenaBillingAuditEntry): Promise<void>;\n}\n\nexport interface MemoryBillingAuditSink {\n\tentries: AthenaBillingAuditEntry[];\n}\n\nexport function createMemoryBillingAuditWriter(\n\tsink: MemoryBillingAuditSink,\n): AthenaBillingAuditWriter {\n\treturn {\n\t\tasync write(entry) {\n\t\t\tsink.entries.push({\n\t\t\t\t...entry,\n\t\t\t\tprevious: redactBillingAuditSnapshot(entry.previous),\n\t\t\t\tresult: redactBillingAuditSnapshot(entry.result),\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingAuditWriter(\n\tsql: BillingSqlExecutor,\n): AthenaBillingAuditWriter {\n\treturn {\n\t\tasync write(entry) {\n\t\t\tawait insertAuditLogBilling(sql, entry);\n\t\t},\n\t};\n}\n\nfunction redactBillingAuditSnapshot(value: unknown): unknown {\n\tif (value == null) {\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => redactBillingAuditSnapshot(entry));\n\t}\n\tif (typeof value !== \"object\") {\n\t\treturn value;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst out: Record<string, unknown> = {};\n\tconst drop = new Set([\n\t\t\"email\",\n\t\t\"emailSnapshot\",\n\t\t\"raw\",\n\t\t\"metadata\",\n\t\t\"amount\",\n\t\t\"amountRefunded\",\n\t\t\"description\",\n\t\t\"name\",\n\t\t\"customer\",\n\t\t\"billingAddress\",\n\t\t\"shippingAddress\",\n\t]);\n\tfor (const [key, entry] of Object.entries(record)) {\n\t\tif (drop.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tkey === \"subject\" ||\n\t\t\tkey === \"providerSubject\" ||\n\t\t\tkey === \"result\" ||\n\t\t\tkey === \"previous\"\n\t\t) {\n\t\t\tout[key] = redactBillingAuditSnapshot(entry);\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttypeof entry === \"string\" ||\n\t\t\ttypeof entry === \"number\" ||\n\t\t\ttypeof entry === \"boolean\" ||\n\t\t\tentry == null\n\t\t) {\n\t\t\tout[key] = entry;\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof entry === \"object\") {\n\t\t\tout[key] = redactBillingAuditSnapshot(entry);\n\t\t}\n\t}\n\treturn out;\n}\n\nexport async function insertAuditLogBilling(\n\tsql: BillingSqlExecutor,\n\tentry: AthenaBillingAuditEntry,\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nINSERT INTO athena.audit_log_billing (\n\tid,\n\tevent_id,\n\ttrace_id,\n\tcorrelation_id,\n\tcausation_id,\n\tevent,\n\tactor_kind,\n\tactor_user_id,\n\tconnection_id,\n\tprovider,\n\tsubject_kind,\n\tsubject_id,\n\tprovider_subject_kind,\n\tprovider_subject_id,\n\tprevious,\n\tresult,\n\toutcome,\n\tcreated_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7, $8, $9::uuid, $10, $11, $12, $13, $14,\n\t$15::jsonb, $16::jsonb, $17, now()\n)\n`,\n\t\t[\n\t\t\tentry.id,\n\t\t\tentry.eventId,\n\t\t\tentry.traceId,\n\t\t\tentry.correlationId ?? null,\n\t\t\tentry.causationId ?? null,\n\t\t\tentry.event,\n\t\t\tentry.actor.kind,\n\t\t\tentry.actor.userId ?? null,\n\t\t\tentry.connectionId,\n\t\t\tentry.provider,\n\t\t\tentry.subject?.kind ?? null,\n\t\t\tentry.subject?.id ?? null,\n\t\t\tentry.providerSubject?.kind ?? null,\n\t\t\tentry.providerSubject?.id ?? null,\n\t\t\tJSON.stringify(redactBillingAuditSnapshot(entry.previous ?? null)),\n\t\t\tJSON.stringify(redactBillingAuditSnapshot(entry.result ?? null)),\n\t\t\tentry.outcome,\n\t\t],\n\t);\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n\tAthenaBillingObservabilityConfig,\n\tNormalizedAthenaBillingObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaBillingObservability(\n\tinput?: AthenaBillingObservabilityConfig,\n): NormalizedAthenaBillingObservability {\n\tconst tracesInput = input?.traces;\n\tconst tracesEnabled =\n\t\ttracesInput === undefined\n\t\t\t? true\n\t\t\t: typeof tracesInput === \"boolean\"\n\t\t\t\t? tracesInput\n\t\t\t\t: tracesInput.sampleRate !== 0;\n\tconst sampleRate =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.sampleRate === \"number\" &&\n\t\tNumber.isFinite(tracesInput.sampleRate)\n\t\t\t? Math.min(1, Math.max(0, tracesInput.sampleRate))\n\t\t\t: 1;\n\tconst retentionDays =\n\t\ttypeof tracesInput === \"object\" &&\n\t\ttypeof tracesInput.retentionDays === \"number\" &&\n\t\tNumber.isFinite(tracesInput.retentionDays)\n\t\t\t? Math.max(1, Math.trunc(tracesInput.retentionDays))\n\t\t\t: 30;\n\tconst auditRetentionDays =\n\t\ttypeof input?.auditRetentionDays === \"number\" &&\n\t\tNumber.isFinite(input.auditRetentionDays)\n\t\t\t? Math.max(1, Math.trunc(input.auditRetentionDays))\n\t\t\t: undefined;\n\tconst webhookIngressRetentionDays =\n\t\ttypeof input?.webhookIngressRetentionDays === \"number\" &&\n\t\tNumber.isFinite(input.webhookIngressRetentionDays)\n\t\t\t? Math.max(1, Math.trunc(input.webhookIngressRetentionDays))\n\t\t\t: 30;\n\treturn {\n\t\tauditLog: input?.auditLog !== false,\n\t\tauditRetentionDays,\n\t\ttraces: {\n\t\t\tenabled: tracesEnabled,\n\t\t\tretentionDays,\n\t\t\tsampleRate: tracesEnabled ? sampleRate : 0,\n\t\t},\n\t\twebhookIngressRetentionDays,\n\t};\n}\n\nexport function assertLocalBillingObservability(billing: unknown): void {\n\tif (!billing || typeof billing !== \"object\") {\n\t\treturn;\n\t}\n\tconst raw = billing as Record<string, unknown>;\n\tif (!(\"observability\" in raw) || raw.observability === undefined) {\n\t\treturn;\n\t}\n\tconst mode = (billing as { mode?: unknown }).mode;\n\tif (mode === \"remote\") {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n\t\t\t'billing.observability is an embedded billing capability. Set billing.mode to \"local\" or omit observability for remote Billing.',\n\t\t\t\"billing\",\n\t\t);\n\t}\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type {\n\tAthenaBillingTraceRecord,\n\tAthenaBillingTraceStart,\n\tBillingTracePhase,\n} from \"./types.ts\";\n\nexport interface AthenaBillingActiveTrace {\n\tfailure(error: unknown, phase?: BillingTracePhase): Promise<void>;\n\tphase(name: BillingTracePhase): { finish(): void };\n\tsetCounters(input: {\n\t\tcustomersScanned?: number;\n\t\tpagesProcessed?: number;\n\t}): void;\n\tsuccess(): Promise<void>;\n}\n\nexport interface AthenaBillingTraceRecorder {\n\tstart(input: AthenaBillingTraceStart): AthenaBillingActiveTrace;\n}\n\nconst activeTraceStorage = new AsyncLocalStorage<AthenaBillingActiveTrace>();\n\nexport function currentBillingTrace(): AthenaBillingActiveTrace | undefined {\n\treturn activeTraceStorage.getStore();\n}\n\nexport function runWithBillingTrace<T>(\n\ttrace: AthenaBillingActiveTrace,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\treturn activeTraceStorage.run(trace, fn);\n}\n\nexport interface MemoryBillingTraceSink {\n\trecords: AthenaBillingTraceRecord[];\n}\n\nfunction sampleAllows(sampleRate: number): boolean {\n\tif (sampleRate >= 1) {\n\t\treturn true;\n\t}\n\tif (sampleRate <= 0) {\n\t\treturn false;\n\t}\n\treturn Math.random() < sampleRate;\n}\n\nfunction errorCodeOf(error: unknown): string | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst code = (error as { code?: unknown }).code;\n\treturn typeof code === \"string\" && code.trim() ? code : undefined;\n}\n\nfunction redactMetadata(value: Record<string, unknown>): Record<string, unknown> {\n\tconst next: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (\n\t\t\tnormalized.includes(\"key\") ||\n\t\t\tnormalized.includes(\"secret\") ||\n\t\t\tnormalized.includes(\"token\") ||\n\t\t\tnormalized.includes(\"password\") ||\n\t\t\tnormalized.includes(\"authorization\")\n\t\t) {\n\t\t\tnext[key] = \"[REDACTED]\";\n\t\t\tcontinue;\n\t\t}\n\t\tnext[key] = entry;\n\t}\n\treturn next;\n}\n\nfunction createActiveTrace(\n\tinput: AthenaBillingTraceStart,\n\tpersist: (record: AthenaBillingTraceRecord) => Promise<void>,\n): AthenaBillingActiveTrace {\n\tconst startedAt = input.startedAt ?? new Date();\n\tconst startedMs = performance.now();\n\tconst timings: Partial<Record<BillingTracePhase, number>> = {};\n\tlet pagesProcessed = 0;\n\tlet customersScanned = 0;\n\tlet finished = false;\n\n\tconst persistSafe = async (record: AthenaBillingTraceRecord) => {\n\t\tif (finished) {\n\t\t\treturn;\n\t\t}\n\t\tfinished = true;\n\t\ttry {\n\t\t\tawait persist(record);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[athena-billing] trace persistence failed\", {\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\ttraceId: record.traceId,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst complete = async (\n\t\toutcome: \"failure\" | \"success\",\n\t\terror?: unknown,\n\t\terrorPhase?: BillingTracePhase,\n\t) => {\n\t\tawait persistSafe({\n\t\t\tcausationId: input.causationId,\n\t\t\tcheckpointMs: timings.checkpoint,\n\t\t\tcompletedAt: new Date(),\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.correlationId,\n\t\t\tcustomersScanned,\n\t\t\terrorCode: error ? errorCodeOf(error) : undefined,\n\t\t\terrorPhase,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tleaseMs: timings.lease,\n\t\t\tmetadata: redactMetadata({}),\n\t\t\toperation: input.operation,\n\t\t\toutcome,\n\t\t\tpagesProcessed,\n\t\t\tprojectionMs: timings.document_projection,\n\t\t\tprovider: input.provider,\n\t\t\tproviderMs: timings.provider_fetch,\n\t\t\tresolveMs: timings.candidate_resolution,\n\t\t\tstartedAt,\n\t\t\ttotalMs: performance.now() - startedMs,\n\t\t\ttraceId: input.traceId,\n\t\t\ttransactionMs: timings.apply,\n\t\t\ttrigger: input.trigger,\n\t\t});\n\t};\n\n\treturn {\n\t\tasync failure(error, phase) {\n\t\t\tawait complete(\"failure\", error, phase);\n\t\t},\n\t\tphase(name) {\n\t\t\tconst started = performance.now();\n\t\t\treturn {\n\t\t\t\tfinish() {\n\t\t\t\t\ttimings[name] = (timings[name] ?? 0) + (performance.now() - started);\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tsetCounters(counters) {\n\t\t\tif (typeof counters.customersScanned === \"number\") {\n\t\t\t\tcustomersScanned = counters.customersScanned;\n\t\t\t}\n\t\t\tif (typeof counters.pagesProcessed === \"number\") {\n\t\t\t\tpagesProcessed = counters.pagesProcessed;\n\t\t\t}\n\t\t},\n\t\tasync success() {\n\t\t\tawait complete(\"success\");\n\t\t},\n\t};\n}\n\nexport function createNoopBillingTrace(): AthenaBillingActiveTrace {\n\treturn {\n\t\tasync failure() {},\n\t\tphase() {\n\t\t\treturn { finish() {} };\n\t\t},\n\t\tsetCounters() {},\n\t\tasync success() {},\n\t};\n}\n\nexport function createMemoryBillingTraceRecorder(\n\tsink: MemoryBillingTraceSink,\n\tsampleRate = 1,\n): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopBillingTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, async (record) => {\n\t\t\t\tsink.records.push(record);\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createDisabledBillingTraceRecorder(): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart() {\n\t\t\treturn createNoopBillingTrace();\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingTraceRecorder(\n\tsql: BillingSqlExecutor,\n\tsampleRate = 1,\n): AthenaBillingTraceRecorder {\n\treturn {\n\t\tstart(input) {\n\t\t\tif (!sampleAllows(sampleRate)) {\n\t\t\t\treturn createNoopBillingTrace();\n\t\t\t}\n\t\t\treturn createActiveTrace(input, (record) =>\n\t\t\t\tinsertTraceBilling(sql, record),\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport async function insertTraceBilling(\n\tsql: BillingSqlExecutor,\n\trecord: AthenaBillingTraceRecord,\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nINSERT INTO athena.traces_billing (\n\tid,\n\ttrace_id,\n\tcorrelation_id,\n\tcausation_id,\n\toperation,\n\ttrigger,\n\tconnection_id,\n\tprovider,\n\toutcome,\n\terror_code,\n\terror_phase,\n\tlease_ms,\n\tprovider_ms,\n\tresolve_ms,\n\ttransaction_ms,\n\tprojection_ms,\n\tcheckpoint_ms,\n\ttotal_ms,\n\tpages_processed,\n\tcustomers_scanned,\n\tmetadata,\n\tstarted_at,\n\tcompleted_at\n) VALUES (\n\t$1, $2, $3, $4, $5, $6, $7::uuid, $8, $9, $10, $11,\n\t$12, $13, $14, $15, $16, $17, $18, $19, $20, $21::jsonb, $22, $23\n)\n`,\n\t\t[\n\t\t\trecord.id,\n\t\t\trecord.traceId,\n\t\t\trecord.correlationId ?? null,\n\t\t\trecord.causationId ?? null,\n\t\t\trecord.operation,\n\t\t\trecord.trigger,\n\t\t\trecord.connectionId,\n\t\t\trecord.provider,\n\t\t\trecord.outcome,\n\t\t\trecord.errorCode ?? null,\n\t\t\trecord.errorPhase ?? null,\n\t\t\trecord.leaseMs ?? null,\n\t\t\trecord.providerMs ?? null,\n\t\t\trecord.resolveMs ?? null,\n\t\t\trecord.transactionMs ?? null,\n\t\t\trecord.projectionMs ?? null,\n\t\t\trecord.checkpointMs ?? null,\n\t\t\trecord.totalMs,\n\t\t\trecord.pagesProcessed ?? 0,\n\t\t\trecord.customersScanned ?? 0,\n\t\t\tJSON.stringify(record.metadata ?? {}),\n\t\t\trecord.startedAt,\n\t\t\trecord.completedAt,\n\t\t],\n\t);\n}\n\nexport function billingTraceToDevtoolsEvent(record: AthenaBillingTraceRecord): {\n\tconnectionId: string;\n\tcorrelationId?: string;\n\tdomain: \"billing\";\n\terrorPhase?: string;\n\tevent: string;\n\toperation: string;\n\toutcome: string;\n\tprovider: string;\n\ttimings: {\n\t\tbilling: {\n\t\t\tphaseTimings: {\n\t\t\t\tcheckpointMs?: number;\n\t\t\t\tprojectionMs?: number;\n\t\t\t\tproviderMs?: number;\n\t\t\t\tresolveMs?: number;\n\t\t\t\ttransactionMs?: number;\n\t\t\t};\n\t\t\tproviderResourceId?: string;\n\t\t\tresourceId?: string;\n\t\t\tresourceKind?: string;\n\t\t};\n\t\ttotalMs: number;\n\t};\n\ttraceId: string;\n} {\n\treturn {\n\t\tconnectionId: record.connectionId,\n\t\tcorrelationId: record.correlationId,\n\t\tdomain: \"billing\",\n\t\terrorPhase: record.errorPhase,\n\t\tevent: record.operation,\n\t\toperation: record.operation,\n\t\toutcome: record.outcome,\n\t\tprovider: record.provider,\n\t\ttimings: {\n\t\t\tbilling: {\n\t\t\t\tphaseTimings: {\n\t\t\t\t\tcheckpointMs: record.checkpointMs ?? undefined,\n\t\t\t\t\tprojectionMs: record.projectionMs ?? undefined,\n\t\t\t\t\tproviderMs: record.providerMs ?? undefined,\n\t\t\t\t\tresolveMs: record.resolveMs ?? undefined,\n\t\t\t\t\ttransactionMs: record.transactionMs ?? undefined,\n\t\t\t\t},\n\t\t\t\tproviderResourceId:\n\t\t\t\t\ttypeof record.metadata?.providerResourceId === \"string\"\n\t\t\t\t\t\t? record.metadata.providerResourceId\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresourceId:\n\t\t\t\t\ttypeof record.metadata?.resourceId === \"string\"\n\t\t\t\t\t\t? record.metadata.resourceId\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresourceKind:\n\t\t\t\t\ttypeof record.metadata?.resourceKind === \"string\"\n\t\t\t\t\t\t? record.metadata.resourceKind\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t\ttotalMs: record.totalMs,\n\t\t},\n\t\ttraceId: record.traceId,\n\t};\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\n\nconst storage = new AsyncLocalStorage<BillingReconciliationContext>();\n\nexport function currentBillingReconciliationContext():\n\t| BillingReconciliationContext\n\t| undefined {\n\treturn storage.getStore();\n}\n\nexport function runWithBillingReconciliationContext<T>(\n\tcontext: BillingReconciliationContext,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\treturn storage.run(context, fn);\n}\n\nexport function mintManualBillingReconciliationContext(input: {\n\tconnectionId: string;\n\tprovider: string;\n\trunId?: string;\n\ttrigger?: \"bootstrap\" | \"manual\";\n}): BillingReconciliationContext {\n\tconst runId = input.runId ?? crypto.randomUUID();\n\treturn {\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: runId,\n\t\tprovider: input.provider,\n\t\ttraceId: crypto.randomUUID(),\n\t\ttrigger: input.trigger ?? \"manual\",\n\t};\n}\n\nexport function mintScheduledBillingReconciliationContext(input: {\n\tconnectionId: string;\n\tprovider: string;\n\tschedulerExecutionId: string;\n\trunId?: string;\n}): BillingReconciliationContext {\n\treturn {\n\t\tcausationId: input.schedulerExecutionId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.runId ?? crypto.randomUUID(),\n\t\tprovider: input.provider,\n\t\ttraceId: crypto.randomUUID(),\n\t\ttrigger: \"scheduled\",\n\t};\n}\n\nexport function inheritWebhookBillingReconciliationContext(input: {\n\tcausationId: string;\n\tconnectionId: string;\n\tcorrelationId: string;\n\tprovider: string;\n\ttraceId: string;\n}): BillingReconciliationContext {\n\treturn {\n\t\tcausationId: input.causationId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.correlationId,\n\t\tprovider: input.provider,\n\t\ttraceId: input.traceId,\n\t\ttrigger: \"webhook\",\n\t};\n}\n","import type { AthenaBillingAuditEvent } from \"./types.ts\";\nimport type {\n\tAthenaBillingMutationKind,\n\tAthenaBillingPreviousPolicy,\n\tAthenaBillingResultPolicy,\n} from \"./contract.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport interface AthenaBillingAuditResolveContext {\n\tconnectionId: string;\n\tprevious?: unknown;\n\tprovider: string;\n\tproviderCustomerId?: string;\n\tproviderWebhookId?: string;\n\tresult?: unknown;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface AthenaBillingEventSubject {\n\tid: string;\n\tkind: \"organization\" | \"user\";\n}\n\nexport interface AthenaBillingEventDefinition {\n\taudit: true;\n\tmutationKind: AthenaBillingMutationKind;\n\tprevious: AthenaBillingPreviousPolicy;\n\tresolveProviderSubject: (\n\t\tcontext: AthenaBillingAuditResolveContext,\n\t) => { id: string; kind: \"customer\" | \"webhook\" } | undefined;\n\tresolveSubject: (\n\t\tcontext: AthenaBillingAuditResolveContext,\n\t) => AthenaBillingEventSubject | undefined;\n\tresult: AthenaBillingResultPolicy;\n\tsubjectType: \"billing_subject\" | \"billing_webhook_registration\";\n}\n\nfunction subjectFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): AthenaBillingEventSubject | undefined {\n\tconst subject = context.subject;\n\tif (!subject || subject.id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id: subject.id, kind: subject.kind };\n}\n\nfunction providerCustomerFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): { id: string; kind: \"customer\" } | undefined {\n\tconst id = context.providerCustomerId;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind: \"customer\" };\n}\n\nfunction providerWebhookFrom(\n\tcontext: AthenaBillingAuditResolveContext,\n): { id: string; kind: \"webhook\" } | undefined {\n\tconst id = context.providerWebhookId;\n\tif (typeof id !== \"string\" || id.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind: \"webhook\" };\n}\n\nconst webhookRegistrationIr = {\n\taudit: true as const,\n\tprevious: \"optional\" as const,\n\tresolveProviderSubject: providerWebhookFrom,\n\tresolveSubject: () => undefined,\n\tresult: \"resource\" as const,\n\tsubjectType: \"billing_webhook_registration\" as const,\n};\n\nexport const ATHENA_BILLING_EVENT_DEFINITIONS = {\n\t\"billing.document.ownership.conflict\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.document.ownership.resolved\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.reconciliation.cursor.reset\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: () => undefined,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.reconciliation.failed\": {\n\t\taudit: true,\n\t\tmutationKind: \"action\",\n\t\tprevious: \"optional\",\n\t\tresolveProviderSubject: (context) =>\n\t\t\tproviderCustomerFrom(context) ?? providerWebhookFrom(context),\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.activated\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.conflict\": {\n\t\taudit: true,\n\t\tmutationKind: \"update\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.created\": {\n\t\taudit: true,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"resource\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.subject.binding.revoked\": {\n\t\taudit: true,\n\t\tmutationKind: \"delete\",\n\t\tprevious: \"required\",\n\t\tresolveProviderSubject: providerCustomerFrom,\n\t\tresolveSubject: subjectFrom,\n\t\tresult: \"receipt\",\n\t\tsubjectType: \"billing_subject\",\n\t},\n\t\"billing.webhook.registration.created\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"create\",\n\t\tprevious: \"none\",\n\t},\n\t\"billing.webhook.registration.disabled\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n\t\"billing.webhook.registration.drift_detected\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"action\",\n\t},\n\t\"billing.webhook.registration.secret_rotated\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n\t\"billing.webhook.registration.updated\": {\n\t\t...webhookRegistrationIr,\n\t\tmutationKind: \"update\",\n\t},\n} as const satisfies Record<AthenaBillingAuditEvent, AthenaBillingEventDefinition>;\n\nexport function billingEventDefinition(\n\tevent: AthenaBillingAuditEvent,\n): AthenaBillingEventDefinition {\n\treturn ATHENA_BILLING_EVENT_DEFINITIONS[event];\n}\n","import type { AthenaBillingEventDefinition } from \"./events.ts\";\nimport type { AthenaBillingAuditEntry } from \"./types.ts\";\n\nconst BILLING_AUDIT_UUID =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport class AthenaBillingAuditError extends Error {\n\treadonly code: string;\n\n\tconstructor(code: string) {\n\t\tsuper(code);\n\t\tthis.name = \"AthenaBillingAuditError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport function assertBillingAuditUuid(value: string, code: string): void {\n\tif (!BILLING_AUDIT_UUID.test(value)) {\n\t\tthrow new AthenaBillingAuditError(code);\n\t}\n}\n\nexport function mintBillingAuditIdentity(): {\n\teventId: string;\n\tid: string;\n} {\n\treturn {\n\t\teventId: crypto.randomUUID(),\n\t\tid: crypto.randomUUID(),\n\t};\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\treturn value as Record<string, unknown>;\n}\n\nfunction isPresentSnapshot(value: unknown): boolean {\n\tif (value === undefined || value === null) {\n\t\treturn false;\n\t}\n\tconst record = asRecord(value);\n\tif (record && Object.keys(record).length === 0) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isRunLevelAuditEvent(event: AthenaBillingAuditEntry[\"event\"]): boolean {\n\treturn (\n\t\tevent === \"billing.reconciliation.cursor.reset\" ||\n\t\tevent === \"billing.reconciliation.failed\"\n\t);\n}\n\nexport function validateBillingAuditEntry(\n\tentry: AthenaBillingAuditEntry,\n\tir: Pick<\n\t\tAthenaBillingEventDefinition,\n\t\t\"mutationKind\" | \"previous\" | \"result\" | \"subjectType\"\n\t>,\n): void {\n\tassertBillingAuditUuid(entry.id, \"ATHENA_BILLING_AUDIT_INVALID_ID\");\n\tassertBillingAuditUuid(entry.eventId, \"ATHENA_BILLING_AUDIT_INVALID_EVENT_ID\");\n\tassertBillingAuditUuid(\n\t\tentry.connectionId,\n\t\t\"ATHENA_BILLING_AUDIT_INVALID_CONNECTION_ID\",\n\t);\n\tif (entry.outcome !== \"success\" && entry.outcome !== \"failure\") {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_OUTCOME\");\n\t}\n\tif (!isPresentSnapshot(entry.result)) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_RESULT_REQUIRED\");\n\t}\n\tif (\n\t\tentry.outcome === \"success\" &&\n\t\tir.result === \"resource\" &&\n\t\tasRecord(entry.result) === null\n\t) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_RESULT\");\n\t}\n\tif (\n\t\tentry.outcome === \"success\" &&\n\t\tir.previous === \"required\" &&\n\t\t!isPresentSnapshot(entry.previous)\n\t) {\n\t\tthrow new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_PREVIOUS_REQUIRED\");\n\t}\n\tif (\n\t\t!isRunLevelAuditEvent(entry.event) &&\n\t\tir.subjectType !== \"billing_webhook_registration\"\n\t) {\n\t\tif (\n\t\t\ttypeof entry.subject?.id !== \"string\" ||\n\t\t\tentry.subject.id.length === 0 ||\n\t\t\t(entry.subject.kind !== \"user\" && entry.subject.kind !== \"organization\")\n\t\t) {\n\t\t\tthrow new AthenaBillingAuditError(\n\t\t\t\t\"ATHENA_BILLING_AUDIT_SUBJECT_REQUIRED\",\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\ttypeof entry.connectionId !== \"string\" ||\n\t\tentry.connectionId.length === 0 ||\n\t\ttypeof entry.provider !== \"string\" ||\n\t\tentry.provider.length === 0\n\t) {\n\t\tthrow new AthenaBillingAuditError(\n\t\t\t\"ATHENA_BILLING_AUDIT_CONNECTION_REQUIRED\",\n\t\t);\n\t}\n\tif (ir.subjectType === \"billing_webhook_registration\") {\n\t\tif (\n\t\t\ttypeof entry.providerSubject?.id !== \"string\" ||\n\t\t\tentry.providerSubject.id.length === 0 ||\n\t\t\tentry.providerSubject.kind !== \"webhook\"\n\t\t) {\n\t\t\tthrow new AthenaBillingAuditError(\n\t\t\t\t\"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\",\n\t\t\t);\n\t\t}\n\t} else if (\n\t\t!isRunLevelAuditEvent(entry.event) &&\n\t\t(typeof entry.providerSubject?.id !== \"string\" ||\n\t\t\tentry.providerSubject.id.length === 0 ||\n\t\t\tentry.providerSubject.kind !== \"customer\")\n\t) {\n\t\tthrow new AthenaBillingAuditError(\n\t\t\t\"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\",\n\t\t);\n\t}\n}\n","import type { BillingImportPlan } from \"../import/types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport {\n\tATHENA_BILLING_EVENT_DEFINITIONS,\n\tbillingEventDefinition,\n} from \"../observability/events.ts\";\nimport type {\n\tAthenaBillingAuditEntry,\n\tAthenaBillingAuditEvent,\n\tBillingReconciliationContext,\n} from \"../observability/types.ts\";\nimport {\n\tmintBillingAuditIdentity,\n\tvalidateBillingAuditEntry,\n} from \"../observability/validate.ts\";\nimport type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport async function emitBillingImportSemanticAudit(input: {\n\tapplied: \"activated\" | \"conflict\" | \"created\" | \"noop\";\n\tcontext: BillingReconciliationContext;\n\tplan: BillingImportPlan;\n\tprevious: BillingSubjectBindingRecord | null;\n\tprojectionConflicts: number;\n\twriter: AthenaBillingAuditWriter;\n}): Promise<void> {\n\tconst events: AthenaBillingAuditEvent[] = [];\n\tif (input.applied === \"created\") {\n\t\tevents.push(\"billing.subject.binding.created\");\n\t} else if (input.applied === \"activated\") {\n\t\tevents.push(\"billing.subject.binding.activated\");\n\t} else if (input.applied === \"conflict\") {\n\t\tevents.push(\"billing.subject.binding.conflict\");\n\t}\n\tif (input.projectionConflicts > 0) {\n\t\tevents.push(\"billing.document.ownership.conflict\");\n\t} else if (\n\t\t(input.applied === \"created\" || input.applied === \"activated\") &&\n\t\tinput.plan.subject\n\t) {\n\t\tevents.push(\"billing.document.ownership.resolved\");\n\t}\n\tfor (const event of events) {\n\t\tconst ir = billingEventDefinition(event);\n\t\tconst resolveContext = {\n\t\t\tconnectionId: input.context.connectionId,\n\t\t\tprevious: input.previous,\n\t\t\tprovider: input.context.provider,\n\t\t\tproviderCustomerId: input.plan.providerCustomerId,\n\t\t\tresult: {\n\t\t\t\taction: input.applied,\n\t\t\t\tdecision: input.plan.decision,\n\t\t\t\tsubject: input.plan.subject,\n\t\t\t},\n\t\t\tsubject: input.plan.subject,\n\t\t};\n\t\tconst subject = ir.resolveSubject(resolveContext);\n\t\tconst providerSubject = ir.resolveProviderSubject(resolveContext);\n\t\tconst entry: AthenaBillingAuditEntry = {\n\t\t\tactor: { kind: \"system\" },\n\t\t\tcausationId: input.context.causationId,\n\t\t\tconnectionId: input.context.connectionId,\n\t\t\tcorrelationId: input.context.correlationId,\n\t\t\tevent,\n\t\t\t...mintBillingAuditIdentity(),\n\t\t\toutcome: \"success\",\n\t\t\tprevious: input.previous ?? undefined,\n\t\t\tprovider: input.context.provider,\n\t\t\tproviderSubject,\n\t\t\tresult: resolveContext.result,\n\t\t\tsubject,\n\t\t\ttraceId: input.context.traceId,\n\t\t};\n\t\tvalidateBillingAuditEntry(entry, ir);\n\t\tawait input.writer.write(entry);\n\t}\n}\n\nexport async function emitBillingAuditFailure(input: {\n\tcontext: BillingReconciliationContext;\n\terror: unknown;\n\tproviderCustomerId?: string;\n\tproviderWebhookId?: string;\n\tsubject?: BillingSubjectRef;\n\twriter: AthenaBillingAuditWriter;\n}): Promise<void> {\n\tconst ir = billingEventDefinition(\"billing.reconciliation.failed\");\n\tconst resolveContext = {\n\t\tconnectionId: input.context.connectionId,\n\t\tprovider: input.context.provider,\n\t\tproviderCustomerId: input.providerCustomerId,\n\t\tproviderWebhookId: input.providerWebhookId,\n\t\tresult: {\n\t\t\terror:\n\t\t\t\tinput.error instanceof Error\n\t\t\t\t\t? input.error.message\n\t\t\t\t\t: \"billing operation failed\",\n\t\t},\n\t\tsubject: input.subject,\n\t};\n\tconst entry: AthenaBillingAuditEntry = {\n\t\tactor: { kind: \"system\" },\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.context.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\tevent: \"billing.reconciliation.failed\",\n\t\t...mintBillingAuditIdentity(),\n\t\toutcome: \"failure\",\n\t\tprovider: input.context.provider,\n\t\tproviderSubject: ir.resolveProviderSubject(resolveContext),\n\t\tresult: resolveContext.result,\n\t\tsubject: ir.resolveSubject(resolveContext),\n\t\ttraceId: input.context.traceId,\n\t};\n\tvalidateBillingAuditEntry(entry, ir);\n\tawait input.writer.write(entry);\n}\n\nexport function billingAuditEventCatalogKeys(): readonly string[] {\n\treturn Object.keys(ATHENA_BILLING_EVENT_DEFINITIONS);\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport const BILLING_RECONCILIATION_RESOURCE_CUSTOMERS = \"customers\" as const;\nexport const BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS =\n\t\"webhook_registrations\" as const;\n\nexport interface BillingReconciliationLease {\n\tconnectionId: string;\n\tepoch: number;\n\texpiresAt: Date;\n\townerId: string;\n\tresourceKind: string;\n}\n\nexport interface BillingReconciliationLeaseStore {\n\tacquire(input: {\n\t\tconnectionId: string;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t\tttlMs?: number;\n\t}): Promise<BillingReconciliationLease | null>;\n\theartbeat(input: {\n\t\tconnectionId: string;\n\t\tepoch?: number;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t\tttlMs?: number;\n\t}): Promise<boolean>;\n\trelease(input: {\n\t\tconnectionId: string;\n\t\townerId: string;\n\t\tresourceKind?: string;\n\t}): Promise<void>;\n}\n\nconst DEFAULT_TTL_MS = 120_000;\nexport const BILLING_RECONCILIATION_LEASE_TTL_BUFFER_MS = 30_000;\n\nexport function billingReconciliationLeaseTtlMs(maxDurationMs: number): number {\n\treturn maxDurationMs + BILLING_RECONCILIATION_LEASE_TTL_BUFFER_MS;\n}\n\nexport function createMemoryBillingReconciliationLeaseStore(now?: () => Date): {\n\tleases: Map<string, BillingReconciliationLease>;\n\tstore: BillingReconciliationLeaseStore;\n} {\n\tconst clock = now ?? (() => new Date());\n\tconst leases = new Map<string, BillingReconciliationLease>();\n\tconst keyOf = (connectionId: string, resourceKind: string) =>\n\t\t`${connectionId}:${resourceKind}`;\n\treturn {\n\t\tleases,\n\t\tstore: {\n\t\t\tasync acquire(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tconst instant = clock();\n\t\t\t\tif (existing && existing.expiresAt > instant) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\t\tconst nextEpoch = existing ? existing.epoch + 1 : 1;\n\t\t\t\tconst lease: BillingReconciliationLease = {\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tepoch: nextEpoch,\n\t\t\t\t\texpiresAt: new Date(instant.getTime() + ttlMs),\n\t\t\t\t\townerId: input.ownerId,\n\t\t\t\t\tresourceKind,\n\t\t\t\t};\n\t\t\t\tleases.set(key, lease);\n\t\t\t\treturn lease;\n\t\t\t},\n\t\t\tasync heartbeat(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tif (!existing || existing.ownerId !== input.ownerId) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input.epoch != null && existing.epoch !== input.epoch) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst instant = clock();\n\t\t\t\tif (existing.expiresAt <= instant) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\t\texisting.expiresAt = new Date(instant.getTime() + ttlMs);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tasync release(input) {\n\t\t\t\tconst resourceKind =\n\t\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\t\tconst key = keyOf(input.connectionId, resourceKind);\n\t\t\t\tconst existing = leases.get(key);\n\t\t\t\tif (existing && existing.ownerId === input.ownerId) {\n\t\t\t\t\tleases.delete(key);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingReconciliationLeaseStore(\n\tsql: BillingSqlExecutor,\n): BillingReconciliationLeaseStore {\n\treturn {\n\t\tasync acquire(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_reconciliation_leases (\n\tconnection_id, resource_kind, owner_id, acquired_at, heartbeat_at, expires_at, epoch\n) VALUES (\n\t$1::uuid, $2, $3, now(), now(), now() + ($4::int * interval '1 millisecond'), 1\n)\nON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\towner_id = EXCLUDED.owner_id,\n\tacquired_at = now(),\n\theartbeat_at = now(),\n\texpires_at = EXCLUDED.expires_at,\n\tepoch = billing.billing_reconciliation_leases.epoch + 1\nWHERE billing.billing_reconciliation_leases.expires_at < now()\nRETURNING connection_id::text AS connection_id, owner_id, resource_kind, expires_at, epoch\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId, ttlMs],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tconnectionId: String(row.connection_id),\n\t\t\t\tepoch: Number(row.epoch ?? 0),\n\t\t\t\texpiresAt:\n\t\t\t\t\trow.expires_at instanceof Date\n\t\t\t\t\t\t? row.expires_at\n\t\t\t\t\t\t: new Date(String(row.expires_at)),\n\t\t\t\townerId: String(row.owner_id),\n\t\t\t\tresourceKind: String(row.resource_kind),\n\t\t\t};\n\t\t},\n\t\tasync heartbeat(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tconst ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nUPDATE billing.billing_reconciliation_leases SET\n\theartbeat_at = now(),\n\texpires_at = now() + ($4::int * interval '1 millisecond')\nWHERE connection_id = $1::uuid\n  AND resource_kind = $2\n  AND owner_id = $3\n  AND expires_at > now()\n  AND ($5::bigint IS NULL OR epoch = $5::bigint)\nRETURNING owner_id\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId, ttlMs, input.epoch ?? null],\n\t\t\t);\n\t\t\treturn result.rows.length > 0;\n\t\t},\n\t\tasync release(input) {\n\t\t\tconst resourceKind =\n\t\t\t\tinput.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n\t\t\tawait sql.query(\n\t\t\t\t`\nDELETE FROM billing.billing_reconciliation_leases\nWHERE connection_id = $1::uuid\n  AND resource_kind = $2\n  AND owner_id = $3\n`,\n\t\t\t\t[input.connectionId, resourceKind, input.ownerId],\n\t\t\t);\n\t\t},\n\t};\n}\n","import {\n\tATHENA_BILLING_ERROR_DESCRIPTORS,\n} from \"../../runtime/error/generated/billing.ts\";\n\nexport const ATHENA_BILLING_IMPORT_CONFLICT =\n\t\"ATHENA_BILLING_IMPORT_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT =\n\t\"ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\" as const;\nexport const ATHENA_BILLING_IMPORT_PROVIDER_FAILED =\n\t\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\" as const;\nexport const ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND =\n\t\"ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\" as const;\nexport const ATHENA_BILLING_IMPORT_BINDING_CONFLICT =\n\t\"ATHENA_BILLING_IMPORT_BINDING_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_CURSOR_INVALID =\n\t\"ATHENA_BILLING_IMPORT_CURSOR_INVALID\" as const;\n\nexport type AthenaBillingImportErrorCode =\n\t| typeof ATHENA_BILLING_IMPORT_CONFLICT\n\t| typeof ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\n\t| typeof ATHENA_BILLING_IMPORT_PROVIDER_FAILED\n\t| typeof ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\n\t| typeof ATHENA_BILLING_IMPORT_BINDING_CONFLICT\n\t| typeof ATHENA_BILLING_IMPORT_CURSOR_INVALID;\n\nconst IR_BY_CONSTANT: Record<AthenaBillingImportErrorCode, string> = {\n\tATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT: \"billing_import_ambiguous_subject\",\n\tATHENA_BILLING_IMPORT_BINDING_CONFLICT: \"billing_import_binding_conflict\",\n\tATHENA_BILLING_IMPORT_CONFLICT: \"billing_import_conflict\",\n\tATHENA_BILLING_IMPORT_CURSOR_INVALID: \"billing_import_cursor_invalid\",\n\tATHENA_BILLING_IMPORT_PROVIDER_FAILED: \"billing_import_provider_failed\",\n\tATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND: \"billing_import_subject_not_found\",\n};\n\nexport class AthenaBillingImportError extends Error {\n\treadonly code: AthenaBillingImportErrorCode;\n\treadonly errorNumber: number;\n\treadonly status: number;\n\n\tconstructor(input: { code: AthenaBillingImportErrorCode; message: string }) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingImportError\";\n\t\tthis.code = input.code;\n\t\tconst ir = ATHENA_BILLING_ERROR_DESCRIPTORS.find(\n\t\t\t(entry) => entry.code === IR_BY_CONSTANT[input.code],\n\t\t);\n\t\tthis.errorNumber = ir?.errorNumber ?? 4015;\n\t\tthis.status = ir?.status ?? 409;\n\t}\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport { normalizeBillingProviderConfig } from \"./config.ts\";\nimport type { ConfiguredBillingProviderBinding } from \"./types.ts\";\n\nexport function createConfiguredProviderBinding(input: {\n\tprovider: BillingProviderName;\n\tconfiguredProviders?: BillingProviderConfigMap;\n}): ConfiguredBillingProviderBinding {\n\tconst normalized = normalizeBillingProviderConfig(input.configuredProviders);\n\tif (input.provider === \"mollie\" && normalized.mollie != null) {\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider: \"mollie\",\n\t\t\tcredentials: normalized.mollie.credentials,\n\t\t\tproviderConfig: {\n\t\t\t\tapiBaseUrl: normalized.mollie.apiBaseUrl,\n\t\t\t\tauthority: normalized.mollie.authority,\n\t\t\t\tcredentialKind: normalized.mollie.credentialKind,\n\t\t\t\tprofileId: normalized.mollie.profileId ?? null,\n\t\t\t},\n\t\t};\n\t}\n\tif (input.provider === \"stripe\" && normalized.stripe != null) {\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider: \"stripe\",\n\t\t\tcredentials: normalized.stripe.credentials,\n\t\t\tproviderConfig: {\n\t\t\t\taccountId: normalized.stripe.accountId ?? null,\n\t\t\t\tapiBaseUrl: normalized.stripe.apiBaseUrl,\n\t\t\t\tcredentialKind: normalized.stripe.credentialKind,\n\t\t\t},\n\t\t};\n\t}\n\tthrow new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\tmessage: `Billing provider \"${input.provider}\" is not configured.`,\n\t});\n}\n","import {\n\tresolveBillingCredential,\n\ttype BillingResolvedCredential,\n} from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderExecutionContext,\n} from \"./types.ts\";\n\nexport function createBillingProviderExecutionContext(input: {\n\tbinding: BillingProviderBinding;\n\tidempotencyKey?: string;\n\tingress?: { classicWebhookUrl?: string };\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\tsignal?: AbortSignal;\n\ttarget?: { profileId?: string };\n\ttestMode?: boolean;\n}): BillingProviderExecutionContext {\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst resolved = resolveBillingCredential({\n\t\tprovider: input.binding.provider,\n\t\ttestMode: environment.testMode,\n\t\tbinding: input.binding,\n\t});\n\tconst credential: BillingResolvedCredential = resolved.credential;\n\treturn {\n\t\tprovider: input.binding.provider,\n\t\tenvironment,\n\t\tbinding: input.binding,\n\t\tcredential,\n\t\t...(input.operationScope != null\n\t\t\t? { operationScope: input.operationScope }\n\t\t\t: {}),\n\t\ttarget: {\n\t\t\tprofileId: input.target?.profileId,\n\t\t},\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tsignal: input.signal,\n\t\t...(input.ingress ? { ingress: input.ingress } : {}),\n\t};\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type { BillingProviderRuntime } from \"./types.ts\";\n\nexport function normalizeBillingProviderName(\n\tprovider: string,\n): BillingProviderName {\n\treturn provider.trim().toLowerCase() as BillingProviderName;\n}\n\nexport class BillingProviderRegistry {\n\tingress?: { classicWebhookUrl?: string };\n\tprivate readonly runtimes = new Map<string, BillingProviderRuntime>();\n\n\tconstructor(\n\t\truntimes: readonly BillingProviderRuntime[] = [],\n\t\toptions?: { ingress?: { classicWebhookUrl?: string } },\n\t) {\n\t\tthis.ingress = options?.ingress;\n\t\tfor (const runtime of runtimes) {\n\t\t\tthis.register(runtime);\n\t\t}\n\t}\n\n\tregister(runtime: BillingProviderRuntime): void {\n\t\tconst name = normalizeBillingProviderName(runtime.provider);\n\t\tif (this.runtimes.has(name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Billing provider \"${name}\" is already registered.`,\n\t\t\t);\n\t\t}\n\t\tthis.runtimes.set(name, runtime);\n\t}\n\n\thas(provider: string): boolean {\n\t\treturn this.runtimes.has(normalizeBillingProviderName(provider));\n\t}\n\n\tget(provider: string): BillingProviderRuntime | undefined {\n\t\treturn this.runtimes.get(normalizeBillingProviderName(provider));\n\t}\n\n\trequire(provider: string): BillingProviderRuntime {\n\t\tconst runtime = this.get(provider);\n\t\tif (runtime == null) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n\t\t\t\tmessage: `Billing provider \"${normalizeBillingProviderName(provider)}\" is not registered.`,\n\t\t\t});\n\t\t}\n\t\treturn runtime;\n\t}\n\n\tlist(): readonly BillingProviderRuntime[] {\n\t\treturn Object.freeze([...this.runtimes.values()]);\n\t}\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n\tBillingProviderConfigMap,\n\tMollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { ResolvedBillingProviderConnection } from \"../../../reconciliation/types.ts\";\nimport { createConfiguredProviderBinding } from \"./binding.ts\";\nimport { createBillingProviderExecutionContext } from \"./execution-context.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tPersistedBillingProviderBinding,\n} from \"./types.ts\";\n\nexport function defaultBillingCredentialReference(\n\tprovider: string,\n\tenvironment?: \"test\" | \"live\",\n): string {\n\tconst name = normalizeBillingProviderName(provider);\n\tif (environment === \"live\") {\n\t\treturn `providers.${name}-live`;\n\t}\n\treturn `providers.${name}`;\n}\n\nfunction billingProviderFromCredentialPart(\n\tproviderPart: string,\n\ttrimmed: string,\n): \"mollie\" | \"stripe\" {\n\tconst base = providerPart.replace(/-(test|live)$/, \"\");\n\tif (base !== \"mollie\" && base !== \"stripe\") {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Billing credential_reference \"${trimmed}\" is not a mollie or stripe slot.`,\n\t\t});\n\t}\n\treturn base;\n}\n\nexport function parseBillingCredentialReference(raw: string): {\n\taccountId?: string;\n\tprovider: \"mollie\" | \"stripe\";\n} {\n\tconst trimmed = raw.trim();\n\tif (trimmed.length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"Billing connection credential_reference is empty.\",\n\t\t});\n\t}\n\tconst body = trimmed.startsWith(\"providers.\")\n\t\t? trimmed.slice(\"providers.\".length)\n\t\t: trimmed;\n\tconst colon = body.indexOf(\":\");\n\tconst providerPart = (\n\t\tcolon === -1 ? body : body.slice(0, colon)\n\t).toLowerCase();\n\tconst accountId =\n\t\tcolon === -1 ? undefined : body.slice(colon + 1).trim();\n\tconst provider = billingProviderFromCredentialPart(providerPart, trimmed);\n\tif (colon !== -1 && (accountId == null || accountId.length === 0)) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Billing credential_reference \"${trimmed}\" is missing an account slot.`,\n\t\t});\n\t}\n\treturn accountId != null\n\t\t? { accountId, provider }\n\t\t: { provider };\n}\n\nexport function mollieConfigForCredentialReference(\n\tconfigured: BillingProviderConfigMap | undefined,\n\treference: string,\n): MollieBillingProviderConfig | undefined {\n\tconst parsed = parseBillingCredentialReference(reference);\n\tif (parsed.provider !== \"mollie\") {\n\t\treturn undefined;\n\t}\n\tif (parsed.accountId == null) {\n\t\treturn configured?.mollie;\n\t}\n\treturn configured?.mollieAccounts?.[parsed.accountId];\n}\n\nexport function firstConfiguredMollieProvider(\n\tconfigured?: BillingProviderConfigMap,\n): MollieBillingProviderConfig | undefined {\n\tif (configured?.mollie != null) {\n\t\treturn configured.mollie;\n\t}\n\tconst accounts = configured?.mollieAccounts;\n\tif (accounts == null) {\n\t\treturn undefined;\n\t}\n\tfor (const slot of Object.values(accounts)) {\n\t\tif (slot != null) {\n\t\t\treturn slot;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Process `billing.testMode` defaults to test (`undefined` / `true`).\n * Leftover DB rows in the other environment must not be scheduled.\n */\nexport function billingConnectionMatchesProcessTestMode(\n\tconnectionTestMode: boolean,\n\tprocessTestMode: boolean | undefined,\n): boolean {\n\treturn connectionTestMode === (processTestMode !== false);\n}\n\n/** True when process config has a credential for this connection's environment. */\nexport function billingConnectionHasConfiguredCredential(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnection: Pick<\n\t\tResolvedBillingProviderConnection,\n\t\t\"credentialReference\" | \"provider\" | \"testMode\"\n\t>;\n}): boolean {\n\ttry {\n\t\tconst binding = createPersistedProviderBinding({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnectionId: input.connection.credentialReference,\n\t\t\tcredentialReference: input.connection.credentialReference,\n\t\t\tprovider: input.connection.provider,\n\t\t});\n\t\treturn input.connection.testMode\n\t\t\t? binding.credentials.test != null\n\t\t\t: binding.credentials.live != null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Active rows that match this process environment and have a usable credential. */\nexport function eligibleBillingConnectionsForProcess<\n\tT extends Pick<\n\t\tResolvedBillingProviderConnection,\n\t\t\"credentialReference\" | \"provider\" | \"testMode\"\n\t>,\n>(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnections: readonly T[];\n\tprocessTestMode?: boolean;\n}): T[] {\n\treturn input.connections.filter(\n\t\t(connection) =>\n\t\t\tbillingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.processTestMode,\n\t\t\t) &&\n\t\t\tbillingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t}),\n\t);\n}\n\n/**\n * Classic Mollie webhooks have no connectionId. Prefer the unique default\n * `providers.mollie` slot when more than one eligible row remains.\n */\nexport function pickSoleEligibleBillingConnection<\n\tT extends Pick<ResolvedBillingProviderConnection, \"credentialReference\">,\n>(eligible: readonly T[]): T | undefined {\n\tif (eligible.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (eligible.length === 1) {\n\t\treturn eligible[0];\n\t}\n\tconst defaults = eligible.filter(\n\t\t(connection) => connection.credentialReference === \"providers.mollie\",\n\t);\n\treturn defaults.length === 1 ? defaults[0] : undefined;\n}\n\nexport function createPersistedProviderBinding(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId: string;\n\tcredentialReference: string;\n\tprovider: string;\n}): PersistedBillingProviderBinding {\n\tconst parsed = parseBillingCredentialReference(input.credentialReference);\n\tconst connectionProvider = normalizeBillingProviderName(input.provider);\n\tif (parsed.provider !== connectionProvider) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: `Connection provider \"${connectionProvider}\" does not match credential_reference \"${input.credentialReference}\".`,\n\t\t});\n\t}\n\tconst slotMap = slotConfigMap(\n\t\tparsed.provider,\n\t\tparsed.accountId,\n\t\tinput.configuredProviders,\n\t\tinput.credentialReference,\n\t);\n\tconst configured = createConfiguredProviderBinding({\n\t\tconfiguredProviders: slotMap,\n\t\tprovider: parsed.provider,\n\t});\n\treturn {\n\t\tconnectionId: input.connectionId,\n\t\tcredentialReference: input.credentialReference,\n\t\tcredentials: configured.credentials,\n\t\tkind: \"connection\",\n\t\tprovider: configured.provider,\n\t\tproviderConfig: configured.providerConfig,\n\t};\n}\n\nexport function createConnectionProviderExecutionContext(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnection: ResolvedBillingProviderConnection;\n\tingress?: { classicWebhookUrl?: string };\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n}): BillingProviderExecutionContext {\n\tconst binding = createPersistedProviderBinding({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnectionId: input.connection.id,\n\t\tcredentialReference: input.connection.credentialReference,\n\t\tprovider: input.connection.provider,\n\t});\n\treturn createBillingProviderExecutionContext({\n\t\tbinding,\n\t\t...(input.ingress ? { ingress: input.ingress } : {}),\n\t\t...(input.operationScope != null\n\t\t\t? { operationScope: input.operationScope }\n\t\t\t: {}),\n\t\ttestMode: input.connection.testMode,\n\t});\n}\n\nfunction slotConfigMap(\n\tprovider: \"mollie\" | \"stripe\",\n\taccountId: string | undefined,\n\tconfigured: BillingProviderConfigMap | undefined,\n\treference: string,\n): BillingProviderConfigMap {\n\tif (provider === \"mollie\") {\n\t\tconst mollie =\n\t\t\taccountId == null\n\t\t\t\t? configured?.mollie\n\t\t\t\t: configured?.mollieAccounts?.[accountId];\n\t\tif (mollie == null) {\n\t\t\tthrow missingSlot(reference);\n\t\t}\n\t\treturn { mollie };\n\t}\n\tconst stripe =\n\t\taccountId == null\n\t\t\t? configured?.stripe\n\t\t\t: configured?.stripeAccounts?.[accountId];\n\tif (stripe == null) {\n\t\tthrow missingSlot(reference);\n\t}\n\treturn { stripe };\n}\n\nfunction missingSlot(reference: string): AthenaBillingProviderError {\n\treturn new AthenaBillingProviderError({\n\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\tmessage: `No billing provider config is registered for credential_reference \"${reference}\".`,\n\t});\n}","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\n\nexport interface BillingImportDatabase extends BillingSqlExecutor {\n\ttransaction<T>(fn: (tx: BillingSqlExecutor) => Promise<T>): Promise<T>;\n}\n\nexport function createBillingSqlExecutor(input: {\n\tquery: (\n\t\ttext: string,\n\t\tvalues?: unknown[],\n\t) => Promise<{ rows: unknown[]; rowCount?: number | null }>;\n}): BillingSqlExecutor {\n\treturn {\n\t\tasync query(sql, params) {\n\t\t\tconst result = await input.query(sql, params ? [...params] : undefined);\n\t\t\treturn { rows: result.rows as Record<string, unknown>[] };\n\t\t},\n\t};\n}\n\nexport function createBillingImportDatabase(\n\tpool: AthenaPostgresPool,\n): BillingImportDatabase {\n\tconst root = createBillingSqlExecutor(pool);\n\treturn {\n\t\tquery: root.query.bind(root),\n\t\tasync transaction(fn) {\n\t\t\tconst client = await pool.connect();\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst tx = createBillingSqlExecutor(client);\n\t\t\t\tconst value = await fn(tx);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn value;\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback failure; original error is authoritative\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function wrapBillingSqlExecutorAsDatabase(\n\tsql: BillingSqlExecutor,\n): BillingImportDatabase {\n\treturn {\n\t\tquery: sql.query.bind(sql),\n\t\tasync transaction(fn) {\n\t\t\treturn fn(sql);\n\t\t},\n\t};\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n\tBillingSqlExecutor,\n\tBillingSubjectBindingRecord,\n\tBillingSubjectRepository,\n} from \"./repository.ts\";\n\nexport function isBillingUniqueViolation(error: unknown): boolean {\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\treturn (error as { code?: unknown }).code === \"23505\";\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n\treturn {\n\t\tconnectionId: String(row.connection_id),\n\t\temailSnapshot:\n\t\t\ttypeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n\t\tid: String(row.id),\n\t\tisPrimary: row.is_primary === true,\n\t\tproviderSubjectId: String(row.provider_subject_id),\n\t\tproviderSubjectKind:\n\t\t\trow.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n\t\tsource:\n\t\t\trow.source === \"imported\" || row.source === \"reconciled\"\n\t\t\t\t? row.source\n\t\t\t\t: \"created\",\n\t\tstatus:\n\t\t\trow.status === \"active\" ||\n\t\t\trow.status === \"conflict\" ||\n\t\t\trow.status === \"revoked\"\n\t\t\t\t? row.status\n\t\t\t\t: \"pending\",\n\t\tsubjectId: String(row.subject_id),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nexport function createPostgresBillingSubjectRepository(\n\tsql: BillingSqlExecutor,\n): BillingSubjectRepository {\n\treturn {\n\t\tasync activate(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`UPDATE billing.billing_subject_bindings\n\t\t\t\t SET provider_subject_id = $1,\n\t\t\t\t     status = 'active',\n\t\t\t\t     is_primary = true\n\t\t\t\t WHERE id = $2\n\t\t\t\t RETURNING *`,\n\t\t\t\t[input.providerSubjectId, input.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\tthrow new Error(\"Failed to activate billing subject binding.\");\n\t\t\t}\n\t\t\treturn asBinding(row);\n\t\t},\n\t\tasync getBinding(id) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings WHERE id = $1`,\n\t\t\t\t[id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? asBinding(row) : undefined;\n\t\t},\n\t\tasync listActiveBindings(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND status <> 'revoked'`,\n\t\t\t\t[input.connectionId, input.subject.kind, input.subject.id],\n\t\t\t);\n\t\t\treturn result.rows.map(asBinding);\n\t\t},\n\t\tasync reserve(input) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tis_primary\n\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, 'pending', $6, false)\n\t\t\t\t\tON CONFLICT (connection_id, subject_kind, subject_id, provider_subject_kind)\n\t\t\t\t\t\tWHERE status IN ('pending', 'active')\n\t\t\t\t\tDO NOTHING\n\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t[\n\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t\t\tinput.providerSubjectId ?? `reserve:${input.subject.id}`,\n\t\t\t\t\t\tinput.source,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\tconst inserted = result.rows[0];\n\t\t\t\tif (inserted) {\n\t\t\t\t\treturn { binding: asBinding(inserted), inserted: true };\n\t\t\t\t}\n\t\t} catch (error) {\n\t\t\t\tif (\n\t\t\t\t\t!isBillingUniqueViolation(error) &&\n\t\t\t\t\t(error as { code?: string }).code !== \"42P10\"\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif ((error as { code?: string }).code === \"42P10\") {\n\t\t\t\t\tconst fallback = await sql.query(\n\t\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tis_primary\n\t\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, 'pending', $6, false)\n\t\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t\t\t\tinput.providerSubjectId ?? `reserve:${input.subject.id}`,\n\t\t\t\t\t\t\tinput.source,\n\t\t\t\t\t\t],\n\t\t\t\t\t);\n\t\t\t\t\tconst inserted = fallback.rows[0];\n\t\t\t\t\tif (inserted) {\n\t\t\t\t\t\treturn { binding: asBinding(inserted), inserted: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst existing = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND provider_subject_kind = $4\n\t\t\t\t   AND status IN ('pending', 'active')\n\t\t\t\t ORDER BY CASE status WHEN 'active' THEN 0 ELSE 1 END\n\t\t\t\t LIMIT 1`,\n\t\t\t\t[\n\t\t\t\t\tinput.connectionId,\n\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\tinput.subject.id,\n\t\t\t\t\tinput.providerSubjectKind,\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst row = existing.rows[0];\n\t\t\tif (!row) {\n\t\t\t\tthrow new Error(\"Failed to reserve billing subject binding.\");\n\t\t\t}\n\t\t\treturn { binding: asBinding(row), inserted: false };\n\t\t},\n\t};\n}\n\nexport function subjectFromPrincipalUser(userId: string): BillingSubjectRef {\n\treturn { id: userId, kind: \"user\" };\n}\n","import { ATHENA_AUTH_TABLES } from \"../../auth/contract/index.ts\";\nimport type { ResolvedBillingProviderConnection } from \"../reconciliation/types.ts\";\nimport { isBillingUniqueViolation } from \"../subject/postgres.ts\";\nimport type {\n\tBillingSqlExecutor,\n\tBillingSubjectBindingRecord,\n} from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n\tBillingImportBindingStore,\n\tBillingImportCursorStore,\n\tBillingImportDocumentStore,\n} from \"./apply.ts\";\nimport { wrapBillingSqlExecutorAsDatabase } from \"./database.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n\tAthenaBillingImportError,\n} from \"./errors.ts\";\nimport type {\n\tBillingImportDocumentHint,\n\tBillingSubjectDirectory,\n\tBillingSubjectRecord,\n} from \"./types.ts\";\n\nexport { createBillingSqlExecutor } from \"./database.ts\";\n\nconst DOCUMENT_TABLES = [\n\t\"billing.billing_payments\",\n\t\"billing.billing_subscriptions\",\n\t\"billing.billing_invoices\",\n] as const;\n\nconst CONNECTION_LIST_COLUMNS = `id::text AS id, provider, status, account_reference, environment, credential_reference, metadata`;\n\nfunction connectionEnvironment(value: unknown): \"live\" | \"test\" {\n\treturn value === \"test\" ? \"test\" : \"live\";\n}\n\nfunction webhookIngressTokenFromMetadata(\n\tmetadata: unknown,\n): string | undefined {\n\tif (\n\t\tmetadata == null ||\n\t\ttypeof metadata !== \"object\" ||\n\t\tArray.isArray(metadata)\n\t) {\n\t\treturn undefined;\n\t}\n\tconst token = (metadata as { webhookIngressToken?: unknown })\n\t\t.webhookIngressToken;\n\treturn typeof token === \"string\" && token.length > 0 ? token : undefined;\n}\n\nfunction asResolvedConnection(\n\trow: Record<string, unknown>,\n): ResolvedBillingProviderConnection {\n\tconst environment = connectionEnvironment(row.environment);\n\tconst provider = String(row.provider ?? \"\");\n\tconst credentialReference =\n\t\ttypeof row.credential_reference === \"string\" &&\n\t\t\trow.credential_reference.trim() !== \"\"\n\t\t\t? row.credential_reference.trim()\n\t\t\t: `providers.${provider.toLowerCase() || \"mollie\"}`;\n\tconst webhookIngressToken = webhookIngressTokenFromMetadata(row.metadata);\n\treturn {\n\t\taccountReference: String(row.account_reference ?? \"\"),\n\t\tcredentialReference,\n\t\tenvironment,\n\t\tid: String(row.id),\n\t\tprovider,\n\t\tstatus: String(row.status ?? \"\"),\n\t\ttestMode: environment === \"test\",\n\t\t...(webhookIngressToken ? { webhookIngressToken } : {}),\n\t};\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n\treturn {\n\t\tconnectionId: String(row.connection_id),\n\t\temailSnapshot:\n\t\t\ttypeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n\t\tid: String(row.id),\n\t\tisPrimary: row.is_primary === true,\n\t\tproviderSubjectId: String(row.provider_subject_id),\n\t\tproviderSubjectKind:\n\t\t\trow.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n\t\tsource:\n\t\t\trow.source === \"imported\" || row.source === \"reconciled\"\n\t\t\t\t? row.source\n\t\t\t\t: \"created\",\n\t\tstatus:\n\t\t\trow.status === \"active\" ||\n\t\t\t\trow.status === \"conflict\" ||\n\t\t\t\trow.status === \"revoked\"\n\t\t\t\t? row.status\n\t\t\t\t: \"pending\",\n\t\tsubjectId: String(row.subject_id),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nfunction ownershipStatus(\n\tvalue: unknown,\n): BillingImportDocumentHint[\"ownershipStatus\"] {\n\tif (value === \"resolved\" || value === \"conflict\") {\n\t\treturn value;\n\t}\n\treturn \"unresolved\";\n}\n\nfunction hintFromRow(row: Record<string, unknown>): BillingImportDocumentHint {\n\tconst subjectId =\n\t\ttypeof row.subject_id === \"string\" && row.subject_id.length > 0\n\t\t\t? row.subject_id\n\t\t\t: undefined;\n\tconst subjectKind =\n\t\trow.subject_kind === \"organization\" || row.subject_kind === \"user\"\n\t\t\t? row.subject_kind\n\t\t\t: undefined;\n\treturn {\n\t\tconnectionId: String(row.connection_id ?? \"\"),\n\t\townershipStatus: ownershipStatus(row.ownership_status),\n\t\tproviderCustomerId: String(row.provider_customer_id ?? \"\"),\n\t\tsubject:\n\t\t\tsubjectId && subjectKind\n\t\t\t\t? { id: subjectId, kind: subjectKind }\n\t\t\t\t: undefined,\n\t};\n}\n\nexport type BillingImportConnectionRow = ResolvedBillingProviderConnection;\n\nexport async function listActiveBillingImportConnections(\n\tsql: BillingSqlExecutor,\n\tprovider?: string,\n): Promise<readonly BillingImportConnectionRow[]> {\n\tconst result =\n\t\tprovider != null && provider.trim() !== \"\"\n\t\t\t? await sql.query(\n\t\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t\t\t FROM billing.billing_provider_connections\n\t\t\t\t\t WHERE deleted_at IS NULL\n\t\t\t\t\t   AND status = 'active'\n\t\t\t\t\t   AND lower(provider) = lower($1)\n\t\t\t\t\t ORDER BY created_at ASC`,\n\t\t\t\t[provider],\n\t\t\t)\n\t\t\t: await sql.query(\n\t\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t\t\t FROM billing.billing_provider_connections\n\t\t\t\t\t WHERE deleted_at IS NULL\n\t\t\t\t\t   AND status = 'active'\n\t\t\t\t\t ORDER BY created_at ASC`,\n\t\t\t);\n\treturn result.rows.map((row) => asResolvedConnection(row));\n}\n\nexport async function resolveBillingConnectionIdByWebhookIngressToken(\n\tsql: BillingSqlExecutor,\n\ttoken: string,\n): Promise<string | undefined> {\n\tconst trimmed = token.trim();\n\tif (trimmed.length === 0) {\n\t\treturn undefined;\n\t}\n\tconst result = await sql.query(\n\t\t`SELECT id::text AS id\n\t\t FROM billing.billing_provider_connections\n\t\t WHERE deleted_at IS NULL\n\t\t   AND status = 'active'\n\t\t   AND metadata->>'webhookIngressToken' = $1\n\t\t LIMIT 2`,\n\t\t[trimmed],\n\t);\n\tif (result.rows.length !== 1) {\n\t\treturn undefined;\n\t}\n\tconst id = result.rows[0]?.id;\n\treturn typeof id === \"string\" && id.length > 0 ? id : undefined;\n}\n\nexport async function resolveBillingImportConnection(\n\tsql: BillingSqlExecutor,\n\tinput: { connectionId?: string; provider?: string },\n): Promise<BillingImportConnectionRow> {\n\tif (input.connectionId != null && input.connectionId.trim() !== \"\") {\n\t\tconst result = await sql.query(\n\t\t\t`SELECT ${CONNECTION_LIST_COLUMNS}\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE deleted_at IS NULL\n\t\t\t   AND (id::text = $1 OR account_reference = $1)\n\t\t\t   AND ($2::text IS NULL OR lower(provider) = lower($2))\n\t\t\t LIMIT 2`,\n\t\t\t[input.connectionId, input.provider ?? null],\n\t\t);\n\t\tconst row = result.rows[0];\n\t\tif (!row || result.rows.length !== 1) {\n\t\t\tthrow new Error(\n\t\t\t\tresult.rows.length > 1\n\t\t\t\t\t? \"Multiple billing connections matched --connection. Pass the connection UUID.\"\n\t\t\t\t\t: \"No billing provider connection matched --connection.\",\n\t\t\t);\n\t\t}\n\t\treturn asResolvedConnection(row);\n\t}\n\tconst active = await listActiveBillingImportConnections(sql, input.provider);\n\tif (active.length === 1) {\n\t\tconst only = active[0];\n\t\tif (only) {\n\t\t\treturn only;\n\t\t}\n\t}\n\tif (active.length === 0) {\n\t\tthrow new Error(\n\t\t\t\"No active billing provider connections. Pass --connection <uuid>.\",\n\t\t);\n\t}\n\tthrow new Error(\n\t\t\"Multiple active billing connections. Pass --connection <uuid>.\",\n\t);\n}\n\nexport function createPostgresBillingSubjectDirectory(\n\tsql: BillingSqlExecutor,\n): BillingSubjectDirectory {\n\treturn {\n\t\tasync getById(subject: BillingSubjectRef) {\n\t\t\tif (subject.kind === \"organization\") {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`SELECT id FROM ${ATHENA_AUTH_TABLES.organization} WHERE id = $1`,\n\t\t\t\t\t[subject.id],\n\t\t\t\t);\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\tif (!row) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst record: BillingSubjectRecord = {\n\t\t\t\t\temail: null,\n\t\t\t\t\tsubject,\n\t\t\t\t};\n\t\t\t\treturn record;\n\t\t\t}\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT id, email FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n\t\t\t\t[subject.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\temail: typeof row.email === \"string\" ? row.email : null,\n\t\t\t\tsubject: { id: String(row.id), kind: \"user\" as const },\n\t\t\t};\n\t\t},\n\t\tasync findUsersByEmail(email: string) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT id, email FROM ${ATHENA_AUTH_TABLES.users}\n\t\t\t\t WHERE LOWER(btrim(email)) = LOWER(btrim($1))`,\n\t\t\t\t[email],\n\t\t\t);\n\t\t\treturn result.rows.map((row) => ({\n\t\t\t\temail: typeof row.email === \"string\" ? row.email : null,\n\t\t\t\tsubject: { id: String(row.id), kind: \"user\" as const },\n\t\t\t}));\n\t\t},\n\t};\n}\n\nasync function findBindingByLocator(\n\tsql: BillingSqlExecutor,\n\tinput: { connectionId: string; providerCustomerId: string },\n): Promise<BillingSubjectBindingRecord | null> {\n\tconst result = await sql.query(\n\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t WHERE connection_id = $1::uuid\n\t\t   AND provider_subject_kind = 'customer'\n\t\t   AND provider_subject_id = $2\n\t\t LIMIT 1`,\n\t\t[input.connectionId, input.providerCustomerId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asBinding(row) : null;\n}\n\nexport function createPostgresBillingImportBindingStore(\n\tsql: BillingSqlExecutor,\n): BillingImportBindingStore {\n\treturn {\n\t\tasync findByLocator(input) {\n\t\t\treturn findBindingByLocator(sql, input);\n\t\t},\n\t\tasync findActivePrimary(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT * FROM billing.billing_subject_bindings\n\t\t\t\t WHERE connection_id = $1::uuid\n\t\t\t\t   AND subject_kind = $2\n\t\t\t\t   AND subject_id = $3\n\t\t\t\t   AND provider_subject_kind = 'customer'\n\t\t\t\t   AND status = 'active'\n\t\t\t\t   AND is_primary = true\n\t\t\t\t LIMIT 1`,\n\t\t\t\t[input.connectionId, input.subject.kind, input.subject.id],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? asBinding(row) : null;\n\t\t},\n\t\tasync insertActive(input) {\n\t\t\ttry {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`INSERT INTO billing.billing_subject_bindings (\n\t\t\t\t\t\tconnection_id,\n\t\t\t\t\t\tsubject_kind,\n\t\t\t\t\t\tsubject_id,\n\t\t\t\t\t\tprovider_subject_kind,\n\t\t\t\t\t\tprovider_subject_id,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tis_primary,\n\t\t\t\t\t\temail_snapshot\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t$1::uuid, $2, $3, 'customer', $4, 'active', $5, true, $6\n\t\t\t\t\t)\n\t\t\t\t\tRETURNING *`,\n\t\t\t\t\t[\n\t\t\t\t\t\tinput.connectionId,\n\t\t\t\t\t\tinput.subject.kind,\n\t\t\t\t\t\tinput.subject.id,\n\t\t\t\t\t\tinput.providerCustomerId,\n\t\t\t\t\t\tinput.source,\n\t\t\t\t\t\tinput.emailSnapshot ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\tconst row = result.rows[0];\n\t\t\t\tif (!row) {\n\t\t\t\t\tthrow new Error(\"Failed to insert billing subject binding.\");\n\t\t\t\t}\n\t\t\t\treturn asBinding(row);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isBillingUniqueViolation(error)) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tconst existing = await findBindingByLocator(sql, {\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tproviderCustomerId: input.providerCustomerId,\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\texisting &&\n\t\t\t\t\texisting.subjectId === input.subject.id &&\n\t\t\t\t\texisting.subjectKind === input.subject.kind\n\t\t\t\t) {\n\t\t\t\t\treturn existing;\n\t\t\t\t}\n\t\t\t\tthrow new AthenaBillingImportError({\n\t\t\t\t\tcode: ATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Provider customer locator already bound to a different Athena subject.\",\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync activate(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_subject_bindings SET\n\t\t\t\t\tstatus = 'active',\n\t\t\t\t\tis_primary = true,\n\t\t\t\t\tsource = $2,\n\t\t\t\t\temail_snapshot = COALESCE($3, email_snapshot),\n\t\t\t\t\tupdated_at = now()\n\t\t\t\t WHERE id = $1::uuid`,\n\t\t\t\t[input.id, input.source, input.emailSnapshot ?? null],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingImportCursorStore(\n\tsql: BillingSqlExecutor,\n): BillingImportCursorStore {\n\treturn {\n\t\tasync get(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`SELECT cursor FROM billing.billing_import_state\n\t\t\t\t WHERE connection_id = $1::uuid AND resource_kind = 'customers'`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\tconst cursor = result.rows[0]?.cursor;\n\t\t\treturn typeof cursor === \"string\" && cursor.length > 0 ? cursor : null;\n\t\t},\n\t\tasync set(connectionId, cursor) {\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, cursor, last_completed_at\n\t\t\t\t) VALUES ($1::uuid, 'customers', $2, now())\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tcursor = EXCLUDED.cursor,\n\t\t\t\t\tlast_completed_at = now()`,\n\t\t\t\t[connectionId, cursor],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingImportDocumentStore(\n\tsql: BillingSqlExecutor,\n): BillingImportDocumentStore {\n\treturn {\n\t\tasync hintsForCustomer(input) {\n\t\t\tconst hints: BillingImportDocumentHint[] = [];\n\t\t\tfor (const table of DOCUMENT_TABLES) {\n\t\t\t\tconst result = await sql.query(\n\t\t\t\t\t`SELECT connection_id::text AS connection_id,\n\t\t\t\t\t        ownership_status,\n\t\t\t\t\t        provider_customer_id,\n\t\t\t\t\t        subject_kind,\n\t\t\t\t\t        subject_id\n\t\t\t\t\t FROM ${table}\n\t\t\t\t\t WHERE provider_customer_id = $2\n\t\t\t\t\t   AND (connection_id = $1::uuid OR connection_id IS NULL)`,\n\t\t\t\t\t[input.connectionId, input.providerCustomerId],\n\t\t\t\t);\n\t\t\t\tfor (const row of result.rows) {\n\t\t\t\t\thints.push(hintFromRow(row));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hints;\n\t\t},\n\t\tasync projectForBinding(input) {\n\t\t\tconst params = [\n\t\t\t\tinput.providerCustomerId,\n\t\t\t\tinput.connectionId,\n\t\t\t\tinput.subject.kind,\n\t\t\t\tinput.subject.id,\n\t\t\t];\n\t\t\tconst db = wrapBillingSqlExecutorAsDatabase(sql);\n\t\t\treturn db.transaction(async (tx) => {\n\t\t\t\tlet conflicts = 0;\n\t\t\t\tlet resolved = 0;\n\t\t\t\tfor (const table of DOCUMENT_TABLES) {\n\t\t\t\t\tconst projected = await tx.query(\n\t\t\t\t\t\t`UPDATE ${table} SET\n\t\t\t\t\t\t\tconnection_id = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN connection_id\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $2::uuid\n\t\t\t\t\t\t\t\tELSE connection_id\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\tsubject_kind = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN subject_kind\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $3\n\t\t\t\t\t\t\t\tELSE subject_kind\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\tsubject_id = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN subject_id\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN $4\n\t\t\t\t\t\t\t\tELSE subject_id\n\t\t\t\t\t\t\tEND,\n\t\t\t\t\t\t\townership_status = CASE\n\t\t\t\t\t\t\t\tWHEN ownership_status = 'resolved'\n\t\t\t\t\t\t\t\t  AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t\t  AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t\tTHEN 'conflict'\n\t\t\t\t\t\t\t\tWHEN ownership_status <> 'conflict'\n\t\t\t\t\t\t\t\t  AND (\n\t\t\t\t\t\t\t\t\townership_status = 'unresolved'\n\t\t\t\t\t\t\t\t\tOR subject_id IS NULL\n\t\t\t\t\t\t\t\t\tOR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t\t  )\n\t\t\t\t\t\t\t\tTHEN 'resolved'\n\t\t\t\t\t\t\t\tELSE ownership_status\n\t\t\t\t\t\t\tEND\n\t\t\t\t\t\t WHERE provider_customer_id = $1\n\t\t\t\t\t\t   AND (connection_id = $2::uuid OR connection_id IS NULL)\n\t\t\t\t\t\t   AND (\n\t\t\t\t\t\t\t (\n\t\t\t\t\t\t\t   ownership_status = 'resolved'\n\t\t\t\t\t\t\t   AND subject_id IS NOT NULL\n\t\t\t\t\t\t\t   AND (subject_kind <> $3 OR subject_id <> $4)\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t OR (\n\t\t\t\t\t\t\t   ownership_status <> 'conflict'\n\t\t\t\t\t\t\t   AND (\n\t\t\t\t\t\t\t\t ownership_status = 'unresolved'\n\t\t\t\t\t\t\t\t OR subject_id IS NULL\n\t\t\t\t\t\t\t\t OR (subject_kind = $3 AND subject_id = $4)\n\t\t\t\t\t\t\t   )\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t   )\n\t\t\t\t\t\t RETURNING ownership_status`,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const row of projected.rows) {\n\t\t\t\t\t\tif (row.ownership_status === \"conflict\") {\n\t\t\t\t\t\t\tconflicts += 1;\n\t\t\t\t\t\t} else if (row.ownership_status === \"resolved\") {\n\t\t\t\t\t\t\tresolved += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { conflicts, resolved };\n\t\t\t});\n\t\t},\n\t};\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"./types.ts\";\n\nexport interface BillingWebhookRegistrationStore {\n\tget(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t}): Promise<BillingWebhookRegistrationRecord | null>;\n\tlist(connectionId: string): Promise<readonly BillingWebhookRegistrationRecord[]>;\n\ttouchLastDelivery(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t}): Promise<void>;\n\tupsert(record: BillingWebhookRegistrationRecord): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookRegistrationStore(): {\n\trows: BillingWebhookRegistrationRecord[];\n\tstore: BillingWebhookRegistrationStore;\n} {\n\tconst rows: BillingWebhookRegistrationRecord[] = [];\n\treturn {\n\t\trows,\n\t\tstore: {\n\t\t\tasync get(input) {\n\t\t\t\treturn (\n\t\t\t\t\trows.find(\n\t\t\t\t\t\t(row) =>\n\t\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\t\trow.kind === input.kind,\n\t\t\t\t\t) ?? null\n\t\t\t\t);\n\t\t\t},\n\t\t\tasync list(connectionId) {\n\t\t\t\treturn rows.filter((row) => row.connectionId === connectionId);\n\t\t\t},\n\t\t\tasync touchLastDelivery(input) {\n\t\t\t\tconst row = rows.find(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\tentry.connectionId === input.connectionId &&\n\t\t\t\t\t\tentry.kind === input.kind,\n\t\t\t\t);\n\t\t\t\tif (row) {\n\t\t\t\t\trow.lastDeliveryAt = new Date();\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync upsert(record) {\n\t\t\t\tconst index = rows.findIndex(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === record.connectionId &&\n\t\t\t\t\t\trow.kind === record.kind,\n\t\t\t\t);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\trows[index] = record;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trows.push(record);\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingWebhookRegistrationStore(\n\tsql: BillingSqlExecutor,\n): BillingWebhookRegistrationStore {\n\treturn {\n\t\tasync get(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? mapRow(row) : null;\n\t\t},\n\t\tasync list(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\treturn result.rows.map(mapRow);\n\t\t},\n\t\tasync touchLastDelivery(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_delivery_at = now(), updated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t},\n\t\tasync upsert(record) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_registrations (\n\tid, connection_id, provider, provider_webhook_id, kind, environment,\n\tname, url, event_types, status, config_hash, secret_version, secret_fingerprint,\n\tlast_reconciled_at, last_verified_at, last_delivery_at, last_error, metadata,\n\tcreated_at, updated_at\n) VALUES (\n\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8, $9::jsonb, $10, $11, $12, $13,\n\t$14, $15, $16, $17::jsonb, $18::jsonb, now(), now()\n)\n\tON CONFLICT (connection_id, kind) DO UPDATE SET\n\tprovider_webhook_id = EXCLUDED.provider_webhook_id,\n\tname = EXCLUDED.name,\n\turl = EXCLUDED.url,\n\tevent_types = EXCLUDED.event_types,\n\tstatus = EXCLUDED.status,\n\tconfig_hash = EXCLUDED.config_hash,\n\tsecret_version = EXCLUDED.secret_version,\n\tsecret_fingerprint = EXCLUDED.secret_fingerprint,\n\tlast_reconciled_at = EXCLUDED.last_reconciled_at,\n\tlast_verified_at = EXCLUDED.last_verified_at,\n\tlast_error = EXCLUDED.last_error,\n\tmetadata = EXCLUDED.metadata,\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.connectionId,\n\t\t\t\t\trecord.provider,\n\t\t\t\t\trecord.providerWebhookId ?? null,\n\t\t\t\t\trecord.kind,\n\t\t\t\t\trecord.environment,\n\t\t\t\t\trecord.name,\n\t\t\t\t\trecord.url,\n\t\t\t\t\tJSON.stringify(record.eventTypes),\n\t\t\t\t\trecord.status,\n\t\t\t\t\trecord.configHash,\n\t\t\t\t\trecord.secretVersion ?? null,\n\t\t\t\t\trecord.secretFingerprint ?? null,\n\t\t\t\t\trecord.lastReconciledAt ?? new Date(),\n\t\t\t\t\trecord.lastVerifiedAt ?? null,\n\t\t\t\t\trecord.lastDeliveryAt ?? null,\n\t\t\t\t\tJSON.stringify(record.lastError ?? null),\n\t\t\t\t\tJSON.stringify({}),\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n\nfunction mapRow(row: Record<string, unknown>): BillingWebhookRegistrationRecord {\n\tconst eventTypes = Array.isArray(row.event_types)\n\t\t? row.event_types.filter((entry): entry is string => typeof entry === \"string\")\n\t\t: [];\n\treturn {\n\t\tconfigHash: String(row.config_hash ?? \"\"),\n\t\tconnectionId: String(row.connection_id),\n\t\tenvironment: row.environment === \"live\" ? \"live\" : \"test\",\n\t\teventTypes,\n\t\tid: String(row.id),\n\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\tname: String(row.name ?? \"\"),\n\t\tprovider: String(row.provider),\n\t\tstatus: (row.status as BillingWebhookRegistrationRecord[\"status\"]) ?? \"pending\",\n\t\turl: String(row.url ?? \"\"),\n\t\t...(typeof row.secret_fingerprint === \"string\"\n\t\t\t? { secretFingerprint: row.secret_fingerprint }\n\t\t\t: {}),\n\t\t...(typeof row.secret_version === \"number\"\n\t\t\t? { secretVersion: row.secret_version }\n\t\t\t: {}),\n\t\t...(row.last_verified_at instanceof Date\n\t\t\t? { lastVerifiedAt: row.last_verified_at }\n\t\t\t: typeof row.last_verified_at === \"string\"\n\t\t\t\t? { lastVerifiedAt: new Date(row.last_verified_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_delivery_at instanceof Date\n\t\t\t? { lastDeliveryAt: row.last_delivery_at }\n\t\t\t: typeof row.last_delivery_at === \"string\"\n\t\t\t\t? { lastDeliveryAt: new Date(row.last_delivery_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_reconciled_at instanceof Date\n\t\t\t? { lastReconciledAt: row.last_reconciled_at }\n\t\t\t: typeof row.last_reconciled_at === \"string\"\n\t\t\t\t? { lastReconciledAt: new Date(row.last_reconciled_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_accepted_at instanceof Date\n\t\t\t? { lastAcceptedAt: row.last_accepted_at }\n\t\t\t: typeof row.last_accepted_at === \"string\"\n\t\t\t\t? { lastAcceptedAt: new Date(row.last_accepted_at) }\n\t\t\t\t: {}),\n\t\t...(row.last_rejected_at instanceof Date\n\t\t\t? { lastRejectedAt: row.last_rejected_at }\n\t\t\t: typeof row.last_rejected_at === \"string\"\n\t\t\t\t? { lastRejectedAt: new Date(row.last_rejected_at) }\n\t\t\t\t: {}),\n\t\t...(typeof row.last_rejection_code === \"string\"\n\t\t\t? { lastRejectionCode: row.last_rejection_code }\n\t\t\t: {}),\n\t\t...(row.last_reconciliation_outcome === \"completed\" ||\n\t\trow.last_reconciliation_outcome === \"failed\" ||\n\t\trow.last_reconciliation_outcome === \"skipped\"\n\t\t\t? { lastReconciliationOutcome: row.last_reconciliation_outcome }\n\t\t\t: {}),\n\t\t...(typeof row.last_ingress_stage === \"string\"\n\t\t\t? { lastIngressStage: row.last_ingress_stage }\n\t\t\t: {}),\n\t\t...(row.last_error != null ? { lastError: row.last_error } : {}),\n\t};\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { ResolvedBillingIngressEndpoints } from \"./types.ts\";\n\nexport const BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH =\n\t\"/api/athena/billing/webhook/mollie/classic\";\nexport const BILLING_MOLLIE_EVENTS_WEBHOOK_PATH =\n\t\"/api/athena/billing/webhook/mollie/events\";\nexport const BILLING_WEBHOOK_COMPAT_PATH = \"/api/athena/billing/webhook\";\n\nfunction isLoopbackHostname(hostname: string): boolean {\n\tconst host = hostname.replace(/^\\[(.*)\\]$/u, \"$1\").toLowerCase();\n\treturn (\n\t\thost === \"localhost\" ||\n\t\thost === \"127.0.0.1\" ||\n\t\thost === \"::1\" ||\n\t\thost === \"0.0.0.0\" ||\n\t\thost.endsWith(\".localhost\") ||\n\t\thost.endsWith(\".local\")\n\t);\n}\n\nexport function billingWebhookUrlIsLoopback(value: string): boolean {\n\ttry {\n\t\treturn isLoopbackHostname(new URL(value).hostname);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction trimTrailingSlash(value: string): string {\n\treturn value.replace(/\\/+$/u, \"\");\n}\n\nfunction isHttpsPublicUrl(value: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" && parsed.hostname.length > 0;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function resolveBillingPublicBaseUrl(input: {\n\tappUrl?: string | null;\n\tpublicBaseUrl?: string | null;\n}): string | undefined {\n\tconst candidate = input.publicBaseUrl?.trim() || input.appUrl?.trim();\n\tif (!candidate) {\n\t\treturn undefined;\n\t}\n\treturn trimTrailingSlash(candidate);\n}\n\nexport function resolveBillingIngressEndpoints(input: {\n\tappUrl?: string | null;\n\tpublicBaseUrl?: string | null;\n\twebhookIngressToken?: string;\n}): ResolvedBillingIngressEndpoints | undefined {\n\tconst base = resolveBillingPublicBaseUrl(input);\n\tif (!base) {\n\t\treturn undefined;\n\t}\n\tconst token = input.webhookIngressToken?.trim();\n\tconst suffix =\n\t\ttoken != null && WEBHOOK_INGRESS_BINDING_TOKEN.test(token)\n\t\t\t? `/${token}`\n\t\t\t: \"\";\n\treturn {\n\t\tclassicUrl: `${base}${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}${suffix}`,\n\t\teventsUrl: `${base}${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}${suffix}`,\n\t};\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn (\n\t\t\t(parsed.protocol === \"https:\" || parsed.protocol === \"http:\") &&\n\t\t\tparsed.hostname.length > 0\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function assertStableHttpsBillingPublicUrl(input: {\n\tappUrl?: string | null;\n\tlive?: boolean;\n\tmanagement: \"automatic\" | \"manual\";\n\tpublicBaseUrl?: string | null;\n\twebhooksEnabled: boolean;\n}): string | undefined {\n\tif (!input.webhooksEnabled || input.management !== \"automatic\") {\n\t\treturn resolveBillingPublicBaseUrl(input);\n\t}\n\tconst base = resolveBillingPublicBaseUrl(input);\n\tconst live = input.live === true;\n\tif (!base || !isAbsoluteHttpUrl(base) || (live && !isHttpsPublicUrl(base))) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_PUBLIC_URL_REQUIRED\",\n\t\t\t\"Automatic billing webhook management requires billing.ingestion.webhooks.publicBaseUrl or app.url as a stable public origin (HTTPS when live). Host and X-Forwarded-Host are never used.\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\treturn base;\n}\n\nconst WEBHOOK_INGRESS_BINDING_TOKEN = /^[A-Za-z0-9_-]{16,128}$/;\n\nfunction normalizeWebhookPathname(pathname: string): string {\n\treturn pathname.length > 1 ? pathname.replace(/\\/+$/u, \"\") : pathname;\n}\n\nexport function billingWebhookPathKind(\n\tpathname: string,\n): \"classic\" | \"events\" | \"compat\" {\n\tconst normalized = normalizeWebhookPathname(pathname);\n\tif (\n\t\tnormalized === BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH ||\n\t\tnormalized.startsWith(`${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}/`)\n\t) {\n\t\treturn \"classic\";\n\t}\n\tif (\n\t\tnormalized === BILLING_MOLLIE_EVENTS_WEBHOOK_PATH ||\n\t\tnormalized.startsWith(`${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}/`)\n\t) {\n\t\treturn \"events\";\n\t}\n\treturn \"compat\";\n}\n\n/** Opaque ingress binding from `/classic/<token>` or `/events/<token>`. */\nexport function billingWebhookIngressBindingToken(\n\tpathname: string,\n): string | undefined {\n\tconst normalized = normalizeWebhookPathname(pathname);\n\tconst kind = billingWebhookPathKind(normalized);\n\tconst prefix =\n\t\tkind === \"classic\"\n\t\t\t? BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH\n\t\t\t: kind === \"events\"\n\t\t\t\t? BILLING_MOLLIE_EVENTS_WEBHOOK_PATH\n\t\t\t\t: undefined;\n\tif (prefix == null || normalized === prefix) {\n\t\treturn undefined;\n\t}\n\tconst rest = normalized.slice(prefix.length + 1);\n\tif (rest.includes(\"/\") || !WEBHOOK_INGRESS_BINDING_TOKEN.test(rest)) {\n\t\treturn undefined;\n\t}\n\treturn rest;\n}\n","export type BillingWebhookManagementMode = \"automatic\" | \"manual\";\n\nexport type BillingManagedWebhookEnablement = false | \"auto\" | \"required\";\n\nexport type BillingWebhookKind = \"classic\" | \"next_gen\";\n\nexport type BillingWebhookRegistrationStatus =\n\t| \"pending\"\n\t| \"active\"\n\t| \"drifted\"\n\t| \"degraded\"\n\t| \"disabled\"\n\t| \"error\";\n\nexport type BillingWebhookReconciliationAction =\n\t| \"noop\"\n\t| \"create\"\n\t| \"update\"\n\t| \"replace\"\n\t| \"disable\"\n\t| \"conflict\";\n\nexport type BillingIngestionChannelHealth =\n\t| \"active\"\n\t| \"disabled\"\n\t| \"unsupported\"\n\t| \"error\";\n\nexport type BillingNextGenIngestionHealth =\n\t| BillingIngestionChannelHealth\n\t| \"degraded\";\n\nexport interface BillingConnectionIngestionHealth {\n\tclassic: BillingIngestionChannelHealth;\n\tdrifted: boolean;\n\tlastDeliveryAt?: Date;\n\tlastVerifiedAt?: Date;\n\tnextGen: BillingNextGenIngestionHealth;\n}\n\nexport interface ResolvedBillingIngressEndpoints {\n\tclassicUrl: string;\n\teventsUrl: string;\n}\n\nexport interface AthenaBillingWebhookClassicConfig {\n\tenabled?: boolean;\n}\n\nexport interface AthenaBillingWebhookNextGenConfig {\n\tenabled?: BillingManagedWebhookEnablement;\n\teventTypes?: readonly string[];\n\tpreviousSigningSecrets?: readonly string[];\n\tsigningSecret?: string;\n}\n\nexport interface AthenaBillingMollieWebhookProviderConfig {\n\tclassic?: AthenaBillingWebhookClassicConfig;\n\tnextGen?: AthenaBillingWebhookNextGenConfig;\n\tstrategy?: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface AthenaBillingWebhooksObjectConfig {\n\tenabled?: boolean;\n\texecution?: \"embedded\" | \"external\";\n\tmanagement?: BillingWebhookManagementMode;\n\tproviders?: {\n\t\tmollie?: AthenaBillingMollieWebhookProviderConfig;\n\t};\n\tpublicBaseUrl?: string;\n\t/** Envelope key for provider signing secrets. Prefer env ATHENA_BILLING_WEBHOOK_MASTER_KEY. */\n\tsecretMasterKey?: string;\n}\n\nexport type AthenaBillingWebhooksConfig =\n\t| boolean\n\t| AthenaBillingWebhooksObjectConfig;\n\nexport interface AthenaBillingIngestionConfig {\n\twebhooks?: AthenaBillingWebhooksConfig;\n}\n\nexport const DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES = [\n\t\"payment.paid\",\n\t\"payment.failed\",\n\t\"payment.canceled\",\n\t\"payment.expired\",\n] as const;\n\nexport interface NormalizedMollieWebhookProviderConfig {\n\tclassic: { enabled: boolean };\n\tnextGen: {\n\t\tenabled: BillingManagedWebhookEnablement;\n\t\teventTypes: readonly string[];\n\t\tpreviousSigningSecrets: readonly string[];\n\t\tsigningSecret?: string;\n\t};\n\tstrategy: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface NormalizedAthenaBillingWebhooksConfig {\n\tenabled: boolean;\n\texecution: \"embedded\" | \"external\";\n\tmanagement: BillingWebhookManagementMode;\n\tproviders: {\n\t\tmollie: NormalizedMollieWebhookProviderConfig;\n\t};\n\tpublicBaseUrl?: string;\n\tsecretMasterKey?: string;\n}\n\nexport interface NormalizedAthenaBillingIngestionConfig {\n\twebhooks: NormalizedAthenaBillingWebhooksConfig;\n}\n\nexport interface BillingSigningSecretSet {\n\tcurrent?: string;\n\tprevious: readonly string[];\n}\n\nexport interface BillingWebhookOwnershipMarker {\n\tapplicationId: string;\n\tconnectionId: string;\n\tvalue: string;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { BillingCredentialKind } from \"../runtime/credentials.ts\";\nimport { assertStableHttpsBillingPublicUrl } from \"./urls.ts\";\nimport {\n\tDEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\ttype AthenaBillingIngestionConfig,\n\ttype AthenaBillingWebhooksConfig,\n\ttype BillingManagedWebhookEnablement,\n\ttype BillingSigningSecretSet,\n\ttype NormalizedAthenaBillingIngestionConfig,\n\ttype NormalizedAthenaBillingWebhooksConfig,\n\ttype NormalizedMollieWebhookProviderConfig,\n} from \"./types.ts\";\n\nconst DEFAULT_MOLLIE: NormalizedMollieWebhookProviderConfig = {\n\tclassic: { enabled: true },\n\tnextGen: {\n\t\tenabled: \"auto\",\n\t\teventTypes: DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\t\tpreviousSigningSecrets: [],\n\t},\n\tstrategy: \"hybrid\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeEnablement(\n\tvalue: unknown,\n): BillingManagedWebhookEnablement {\n\tif (value === false) {\n\t\treturn false;\n\t}\n\tif (value === \"required\") {\n\t\treturn \"required\";\n\t}\n\treturn \"auto\";\n}\n\nfunction stringList(value: unknown): readonly string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value.filter(\n\t\t(entry): entry is string => typeof entry === \"string\" && entry.trim() !== \"\",\n\t);\n}\n\nfunction normalizeMollieProvider(\n\traw: unknown,\n): NormalizedMollieWebhookProviderConfig {\n\tif (!isRecord(raw)) {\n\t\treturn { ...DEFAULT_MOLLIE, nextGen: { ...DEFAULT_MOLLIE.nextGen } };\n\t}\n\tconst classic = isRecord(raw.classic) ? raw.classic : {};\n\tconst nextGen = isRecord(raw.nextGen) ? raw.nextGen : {};\n\tconst strategy =\n\t\traw.strategy === \"classic\" || raw.strategy === \"next_gen\"\n\t\t\t? raw.strategy\n\t\t\t: \"hybrid\";\n\tconst eventTypes = stringList(nextGen.eventTypes);\n\treturn {\n\t\tclassic: { enabled: classic.enabled !== false },\n\t\tnextGen: {\n\t\t\tenabled: normalizeEnablement(nextGen.enabled),\n\t\t\teventTypes:\n\t\t\t\teventTypes.length > 0 ? eventTypes : DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n\t\t\tpreviousSigningSecrets: stringList(nextGen.previousSigningSecrets),\n\t\t\t...(typeof nextGen.signingSecret === \"string\" &&\n\t\t\tnextGen.signingSecret.length > 0\n\t\t\t\t? { signingSecret: nextGen.signingSecret }\n\t\t\t\t: {}),\n\t\t},\n\t\tstrategy,\n\t};\n}\n\nexport function normalizeAthenaBillingWebhooks(\n\tinput?: AthenaBillingWebhooksConfig,\n): NormalizedAthenaBillingWebhooksConfig {\n\tif (input === true) {\n\t\treturn {\n\t\t\tenabled: true,\n\t\t\texecution: \"embedded\",\n\t\t\tmanagement: \"automatic\",\n\t\t\tproviders: { mollie: normalizeMollieProvider(undefined) },\n\t\t};\n\t}\n\tif (input === false || input === undefined) {\n\t\treturn {\n\t\t\tenabled: false,\n\t\t\texecution: \"embedded\",\n\t\t\tmanagement: \"manual\",\n\t\t\tproviders: { mollie: normalizeMollieProvider(undefined) },\n\t\t};\n\t}\n\tconst publicBaseUrl =\n\t\ttypeof input.publicBaseUrl === \"string\" && input.publicBaseUrl.trim()\n\t\t\t? input.publicBaseUrl.trim()\n\t\t\t: undefined;\n\tconst secretMasterKey =\n\t\ttypeof input.secretMasterKey === \"string\" && input.secretMasterKey.trim()\n\t\t\t? input.secretMasterKey.trim()\n\t\t\t: undefined;\n\treturn {\n\t\tenabled: input.enabled !== false,\n\t\texecution: input.execution === \"external\" ? \"external\" : \"embedded\",\n\t\tmanagement: input.management === \"manual\" ? \"manual\" : \"automatic\",\n\t\tproviders: {\n\t\t\tmollie: normalizeMollieProvider(input.providers?.mollie),\n\t\t},\n\t\t...(publicBaseUrl ? { publicBaseUrl } : {}),\n\t\t...(secretMasterKey ? { secretMasterKey } : {}),\n\t};\n}\n\nexport function normalizeAthenaBillingIngestion(\n\tinput?: AthenaBillingIngestionConfig,\n): NormalizedAthenaBillingIngestionConfig {\n\treturn {\n\t\twebhooks: normalizeAthenaBillingWebhooks(input?.webhooks),\n\t};\n}\n\nexport function signingSecretsFromWebhookConfig(\n\twebhooks: NormalizedAthenaBillingWebhooksConfig,\n): BillingSigningSecretSet {\n\tconst nextGen = webhooks.providers.mollie.nextGen;\n\treturn {\n\t\tcurrent:\n\t\t\ttypeof nextGen.signingSecret === \"string\"\n\t\t\t\t? nextGen.signingSecret.trim() || undefined\n\t\t\t\t: nextGen.signingSecret,\n\t\tprevious: nextGen.previousSigningSecrets.map((entry) => entry.trim()).filter(\n\t\t\t(entry) => entry.length > 0,\n\t\t),\n\t};\n}\n\nexport function flattenSigningSecrets(\n\tsecrets: BillingSigningSecretSet,\n): readonly string[] {\n\tconst values = [\n\t\t...(secrets.current ? [secrets.current] : []),\n\t\t...secrets.previous,\n\t];\n\treturn [...new Set(values)];\n}\n\nexport function mollieCredentialSupportsManagedNextGen(\n\tkind?: BillingCredentialKind,\n): boolean {\n\treturn (\n\t\tkind === \"advanced_access_token\" ||\n\t\tkind === \"organization_access_token\" ||\n\t\tkind === \"oauth_access_token\"\n\t);\n}\n\nexport function assertAthenaBillingIngestion(input: {\n\tappUrl?: string | null;\n\tcredentialKind?: BillingCredentialKind;\n\tingestion?: AthenaBillingIngestionConfig;\n\tlive?: boolean;\n}): NormalizedAthenaBillingIngestionConfig {\n\tconst normalized = normalizeAthenaBillingIngestion(input.ingestion);\n\tconst webhooks = normalized.webhooks;\n\tif (!webhooks.enabled) {\n\t\treturn normalized;\n\t}\n\tassertStableHttpsBillingPublicUrl({\n\t\tappUrl: input.appUrl,\n\t\tlive: input.live,\n\t\tmanagement: webhooks.management,\n\t\tpublicBaseUrl: webhooks.publicBaseUrl,\n\t\twebhooksEnabled: webhooks.enabled,\n\t});\n\tif (\n\t\twebhooks.providers.mollie.nextGen.enabled === \"required\" &&\n\t\t!mollieCredentialSupportsManagedNextGen(input.credentialKind)\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_NEXT_GEN_REQUIRED\",\n\t\t\t'billing.ingestion.webhooks Mollie nextGen.enabled is \"required\" but the configured credential cannot register managed Next-gen webhooks (API keys are Classic-only).',\n\t\t\t\"billing\",\n\t\t);\n\t}\n\tif (\n\t\twebhooks.providers.mollie.strategy === \"next_gen\" &&\n\t\twebhooks.providers.mollie.nextGen.enabled === false\n\t) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n\t\t\t\"Mollie webhook strategy next_gen cannot disable nextGen.\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\treturn normalized;\n}\n","import { mollieCredentialSupportsManagedNextGen } from \"../../../../ingestion/config.ts\";\nimport type { BillingProviderBinding } from \"../types.ts\";\nimport type { BillingWebhookManagementCapability } from \"../types.ts\";\n\nexport function resolveMollieWebhookManagementCapability(\n\tbinding: BillingProviderBinding,\n): BillingWebhookManagementCapability {\n\tconst live = binding.credentials.live;\n\tconst test = binding.credentials.test;\n\tconst kind = live?.kind ?? test?.kind;\n\tif (kind === \"api_key\" || kind === \"secret_key\" || kind === \"restricted_key\") {\n\t\treturn {\n\t\t\tclassic: true,\n\t\t\tnextGen: {\n\t\t\t\tavailable: false,\n\t\t\t\treason: \"api_key_classic_only\",\n\t\t\t},\n\t\t};\n\t}\n\tif (mollieCredentialSupportsManagedNextGen(kind)) {\n\t\treturn {\n\t\t\tclassic: true,\n\t\t\tnextGen: { available: true },\n\t\t};\n\t}\n\treturn {\n\t\tclassic: true,\n\t\tnextGen: {\n\t\t\tavailable: false,\n\t\t\treason: \"credential_missing_webhooks_write\",\n\t\t},\n\t};\n}\n","import { createHash } from \"node:crypto\";\n\nexport function fingerprintBillingSigningSecret(secret: string): string {\n\treturn createHash(\"sha256\").update(secret, \"utf8\").digest(\"hex\").slice(0, 16);\n}\n\n/**\n * Mollie `POST /v2/webhooks` rejects overlong `name` with 422\n * \"Name provided is too long\". The API does not publish maxLength;\n * 40 was too high (compact `athena:{digest}:billing` is 31 and still 422).\n */\nexport const MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX = 30;\n\nexport function billingWebhookOwnershipMarker(input: {\n\tapplicationId: string;\n\tconnectionId: string;\n}): string {\n\tconst full = `athena:${input.applicationId}:${input.connectionId}:billing`;\n\tif (full.length <= MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX) {\n\t\treturn full;\n\t}\n\tconst digest = createHash(\"sha256\")\n\t\t.update(`${input.applicationId}\\0${input.connectionId}`, \"utf8\")\n\t\t.digest(\"hex\")\n\t\t.slice(0, 16);\n\treturn `athena:${digest}`;\n}\n\nexport function isAthenaOwnedWebhookName(\n\tname: string | undefined,\n\tmarker: string,\n): boolean {\n\tif (name == null || name.length === 0) {\n\t\treturn false;\n\t}\n\treturn name === marker || name.startsWith(`${marker}:`);\n}\n","import { createHash } from \"node:crypto\";\nimport { billingWebhookOwnershipMarker } from \"../ownership.ts\";\nimport type { BillingWebhookDesiredState } from \"./types.ts\";\nimport type { BillingWebhookReconcileInput } from \"./types.ts\";\n\nexport function billingWebhookConfigHash(input: {\n\teventTypes: readonly string[];\n\tkind: string;\n\turl: string;\n}): string {\n\treturn createHash(\"sha256\")\n\t\t.update(\n\t\t\tJSON.stringify({\n\t\t\t\teventTypes: [...input.eventTypes].sort(),\n\t\t\t\tkind: input.kind,\n\t\t\t\turl: input.url,\n\t\t\t}),\n\t\t\t\"utf8\",\n\t\t)\n\t\t.digest(\"hex\")\n\t\t.slice(0, 32);\n}\n\nexport function buildDesiredBillingWebhookState(\n\tinput: BillingWebhookReconcileInput,\n): BillingWebhookDesiredState {\n\tconst marker = billingWebhookOwnershipMarker({\n\t\tapplicationId: input.applicationId,\n\t\tconnectionId: input.connectionId,\n\t});\n\tconst mollie = input.webhooks.providers.mollie;\n\tconst classicEnabled = mollie.classic.enabled && mollie.strategy !== \"next_gen\";\n\tconst nextGenWanted =\n\t\tmollie.nextGen.enabled !== false && mollie.strategy !== \"classic\";\n\tconst nextGenEnabled =\n\t\tnextGenWanted &&\n\t\t(mollie.nextGen.enabled === \"required\" || input.capability.nextGen.available);\n\treturn {\n\t\tmarker,\n\t\t...(classicEnabled\n\t\t\t? {\n\t\t\t\t\tclassic: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\turl: input.endpoints.classicUrl,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(nextGenWanted\n\t\t\t? {\n\t\t\t\t\tnextGen: {\n\t\t\t\t\t\tenabled: nextGenEnabled,\n\t\t\t\t\t\teventTypes: mollie.nextGen.eventTypes,\n\t\t\t\t\t\tname: marker,\n\t\t\t\t\t\trequired: mollie.nextGen.enabled === \"required\",\n\t\t\t\t\t\turl: input.endpoints.eventsUrl,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n","import { isAthenaOwnedWebhookName } from \"../ownership.ts\";\nimport type { BillingProviderWebhook } from \"../../runtime/local/providers/types.ts\";\nimport { billingWebhookUrlIsLoopback } from \"../urls.ts\";\nimport type { BillingWebhookDesiredState } from \"./types.ts\";\nimport type { BillingWebhookReconciliationPlan } from \"./types.ts\";\n\nfunction sameEventTypes(\n\tleft: readonly string[],\n\tright: readonly string[],\n): boolean {\n\tif (left.length !== right.length) {\n\t\treturn false;\n\t}\n\tconst a = [...left].sort();\n\tconst b = [...right].sort();\n\treturn a.every((value, index) => value === b[index]);\n}\n\nexport function planBillingWebhookReconciliation(input: {\n\tactual: readonly BillingProviderWebhook[];\n\tdesired: BillingWebhookDesiredState;\n\tmanagement: \"automatic\" | \"manual\";\n}): {\n\tforeign: readonly BillingProviderWebhook[];\n\tplans: readonly BillingWebhookReconciliationPlan[];\n} {\n\tconst foreign = input.actual.filter(\n\t\t(webhook) => !isAthenaOwnedWebhookName(webhook.name, input.desired.marker),\n\t);\n\tconst owned = input.actual.filter((webhook) =>\n\t\tisAthenaOwnedWebhookName(webhook.name, input.desired.marker),\n\t);\n\tconst plans: BillingWebhookReconciliationPlan[] = [];\n\tconst nextGen = input.desired.nextGen;\n\tif (nextGen) {\n\t\tif (billingWebhookUrlIsLoopback(nextGen.url)) {\n\t\t\tplans.push({\n\t\t\t\taction: \"noop\",\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\towned: true,\n\t\t\t\treason: \"loopback_webhook_url\",\n\t\t\t});\n\t\t} else if (!nextGen.enabled) {\n\t\t\tplans.push({\n\t\t\t\taction: \"noop\",\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\towned: false,\n\t\t\t\treason: \"next_gen_unsupported\",\n\t\t\t});\n\t\t} else {\n\t\t\tconst match = owned.find((webhook) => webhook.url.length > 0);\n\t\t\tif (!match) {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: input.management === \"manual\" ? \"conflict\" : \"create\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\treason: \"owned_webhook_missing\",\n\t\t\t\t});\n\t\t\t} else if (\n\t\t\t\tmatch.url !== nextGen.url ||\n\t\t\t\t!sameEventTypes(match.eventTypes, nextGen.eventTypes) ||\n\t\t\t\tmatch.status === \"disabled\"\n\t\t\t) {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: input.management === \"manual\" ? \"conflict\" : \"update\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\tproviderWebhook: match,\n\t\t\t\t\treason:\n\t\t\t\t\t\tmatch.status === \"disabled\"\n\t\t\t\t\t\t\t? \"registration_disabled\"\n\t\t\t\t\t\t\t: \"owned_webhook_drift\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tplans.push({\n\t\t\t\t\taction: \"noop\",\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\towned: true,\n\t\t\t\t\tproviderWebhook: match,\n\t\t\t\t\treason: \"in_sync\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tif (input.desired.classic) {\n\t\tplans.push({\n\t\t\taction: \"noop\",\n\t\t\tkind: \"classic\",\n\t\t\towned: true,\n\t\t\treason: \"classic_url_injection\",\n\t\t});\n\t}\n\treturn { foreign, plans };\n}\n","import type { AthenaBillingAuditWriter } from \"../../observability/audit.ts\";\nimport { billingEventDefinition } from \"../../observability/events.ts\";\nimport type { AthenaBillingTraceRecorder } from \"../../observability/traces.ts\";\nimport { runWithBillingTrace } from \"../../observability/traces.ts\";\nimport type {\n\tAthenaBillingAuditEntry,\n\tBillingReconciliationContext,\n} from \"../../observability/types.ts\";\nimport {\n\tmintBillingAuditIdentity,\n\tvalidateBillingAuditEntry,\n} from \"../../observability/validate.ts\";\nimport {\n\tBILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\ttype BillingReconciliationLeaseStore,\n\tbillingReconciliationLeaseTtlMs,\n} from \"../../reconciliation/lease.ts\";\nimport { emitBillingAuditFailure } from \"../../reconciliation/semantic-audit.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingWebhooksPort,\n} from \"../../runtime/local/providers/types.ts\";\nimport {\n\tbillingWebhookOwnershipMarker,\n\tfingerprintBillingSigningSecret,\n} from \"../ownership.ts\";\nimport {\n\tbillingWebhookConfigHash,\n\tbuildDesiredBillingWebhookState,\n} from \"./desired-state.ts\";\nimport { planBillingWebhookReconciliation } from \"./planner.ts\";\nimport type { BillingWebhookRegistrationStore } from \"./repository.ts\";\nimport type { BillingWebhookSecretStore } from \"../secrets/types.ts\";\nimport type {\n\tBillingWebhookReconcileInput,\n\tBillingWebhookReconciliationPlan,\n\tBillingWebhookRegistrationRecord,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingWebhooksResult {\n\tforeignUntouched: number;\n\tplans: readonly BillingWebhookReconciliationPlan[];\n\ttraceId: string;\n}\n\nexport async function reconcileBillingWebhookRegistrations(input: {\n\taudit?: AthenaBillingAuditWriter;\n\tcontext: BillingReconciliationContext;\n\tdryRun?: boolean;\n\texecution: BillingProviderExecutionContext;\n\tlease?: BillingReconciliationLeaseStore;\n\tport?: BillingWebhooksPort;\n\treconcile: BillingWebhookReconcileInput;\n\tregistrations?: BillingWebhookRegistrationStore;\n\trememberSigningSecret?: (input: {\n\t\tconnectionId: string;\n\t\tsecret: string;\n\t}) => void;\n\tsecretStore?: BillingWebhookSecretStore;\n\ttraces?: AthenaBillingTraceRecorder;\n}): Promise<ReconcileBillingWebhooksResult> {\n\tconst desired = buildDesiredBillingWebhookState(input.reconcile);\n\tconst trace = input.traces?.start({\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\toperation: \"billing.webhook.reconcile\",\n\t\tprovider: input.reconcile.provider,\n\t\ttraceId: input.context.traceId,\n\t\ttrigger: input.context.trigger,\n\t});\n\tconst ownerId = crypto.randomUUID();\n\tconst run = async (): Promise<ReconcileBillingWebhooksResult> => {\n\t\tlet leaseEpoch: number | undefined;\n\t\tif (!input.dryRun && input.lease) {\n\t\t\tconst leasePhase = trace?.phase(\"lease\");\n\t\t\tconst acquired = await input.lease.acquire({\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(120_000),\n\t\t\t});\n\t\t\tleasePhase?.finish();\n\t\t\tif (!acquired) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Another reconciler holds the webhook_registrations lease.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tleaseEpoch = acquired.epoch;\n\t\t}\n\t\tconst fetchPhase = trace?.phase(\"provider_fetch\");\n\t\tconst listed = input.port\n\t\t\t? await input.port.list(input.execution)\n\t\t\t: { items: [] };\n\t\tfetchPhase?.finish();\n\t\tconst diffPhase = trace?.phase(\"diff\");\n\t\tconst planned = planBillingWebhookReconciliation({\n\t\t\tactual: listed.items,\n\t\t\tdesired,\n\t\t\tmanagement: input.reconcile.management,\n\t\t});\n\t\tdiffPhase?.finish();\n\t\tif (\n\t\t\t!input.dryRun &&\n\t\t\tinput.reconcile.management === \"automatic\" &&\n\t\t\tinput.port\n\t\t) {\n\t\t\tconst applyPhase = trace?.phase(\"apply\");\n\t\t\tif (input.lease && leaseEpoch != null) {\n\t\t\t\tconst held = await input.lease.heartbeat({\n\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\tepoch: leaseEpoch,\n\t\t\t\t\townerId,\n\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(120_000),\n\t\t\t\t});\n\t\t\t\tif (!held) {\n\t\t\t\t\tthrow new Error(\"Reconciliation lease was lost.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const plan of planned.plans) {\n\t\t\t\tif (plan.kind !== \"next_gen\" || !desired.nextGen?.enabled) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (plan.action === \"create\") {\n\t\t\t\t\tconst created = await input.port.create(input.execution, {\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tidempotencyKey: crypto.randomUUID(),\n\t\t\t\t\t\tname: desired.nextGen.name,\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t});\n\t\t\t\t\tif (created.signingSecret) {\n\t\t\t\t\t\tinput.rememberSigningSecret?.({\n\t\t\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\t\t\tsecret: created.signingSecret,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tproviderSigningSecret: created.signingSecret,\n\t\t\t\t\t\tproviderWebhookId: created.id,\n\t\t\t\t\t\tstatus: \"active\",\n\t\t\t\t\t\turl: created.url,\n\t\t\t\t\t\teventTypes: created.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.created\",\n\t\t\t\t\t});\n\t\t\t\t} else if (\n\t\t\t\t\tplan.action === \"update\" &&\n\t\t\t\t\tplan.providerWebhook &&\n\t\t\t\t\tinput.port.update\n\t\t\t\t) {\n\t\t\t\t\tconst updated = await input.port.update(input.execution, {\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tid: plan.providerWebhook.id,\n\t\t\t\t\t\tname: desired.nextGen.name,\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t});\n\t\t\t\t\tif (updated.signingSecret) {\n\t\t\t\t\t\tinput.rememberSigningSecret?.({\n\t\t\t\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\t\t\t\tsecret: updated.signingSecret,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tprevious: {\n\t\t\t\t\t\t\turl: plan.providerWebhook.url,\n\t\t\t\t\t\t\teventTypes: plan.providerWebhook.eventTypes,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproviderSigningSecret: updated.signingSecret,\n\t\t\t\t\t\tproviderWebhookId: updated.id,\n\t\t\t\t\t\tstatus: \"active\",\n\t\t\t\t\t\turl: updated.url,\n\t\t\t\t\t\teventTypes: updated.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.updated\",\n\t\t\t\t\t});\n\t\t\t\t} else if (plan.action === \"conflict\") {\n\t\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\t\tproviderWebhookId: plan.providerWebhook?.id ?? \"unregistered\",\n\t\t\t\t\t\tstatus: \"drifted\",\n\t\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\t\tevent: \"billing.webhook.registration.drift_detected\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tapplyPhase?.finish();\n\t\t} else if (\n\t\t\t!input.dryRun &&\n\t\t\tinput.reconcile.management === \"manual\" &&\n\t\t\tplanned.plans.some((plan) => plan.action === \"conflict\")\n\t\t) {\n\t\t\tconst drifted = planned.plans.find((plan) => plan.action === \"conflict\");\n\t\t\tif (drifted && desired.nextGen) {\n\t\t\t\tawait persistAndAudit(input, {\n\t\t\t\t\tkind: \"next_gen\",\n\t\t\t\t\tproviderWebhookId: drifted.providerWebhook?.id ?? \"unregistered\",\n\t\t\t\t\tstatus: \"drifted\",\n\t\t\t\t\turl: desired.nextGen.url,\n\t\t\t\t\teventTypes: desired.nextGen.eventTypes,\n\t\t\t\t\tevent: \"billing.webhook.registration.drift_detected\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!input.dryRun && desired.classic && input.registrations) {\n\t\t\tawait input.registrations.upsert({\n\t\t\t\tconfigHash: billingWebhookConfigHash({\n\t\t\t\t\teventTypes: [],\n\t\t\t\t\tkind: \"classic\",\n\t\t\t\t\turl: desired.classic.url,\n\t\t\t\t}),\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\tenvironment: input.reconcile.environment,\n\t\t\t\teventTypes: [],\n\t\t\t\tid: crypto.randomUUID(),\n\t\t\t\tkind: \"classic\",\n\t\t\t\tname: desired.marker,\n\t\t\t\tprovider: input.reconcile.provider,\n\t\t\t\tstatus: \"active\",\n\t\t\t\turl: desired.classic.url,\n\t\t\t});\n\t\t}\n\t\tawait trace?.success();\n\t\treturn {\n\t\t\tforeignUntouched: planned.foreign.length,\n\t\t\tplans: planned.plans,\n\t\t\ttraceId: input.context.traceId,\n\t\t};\n\t};\n\ttry {\n\t\treturn await (trace ? runWithBillingTrace(trace, run) : run());\n\t} catch (error) {\n\t\tif (input.audit) {\n\t\t\ttry {\n\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\terror,\n\t\t\t\t\twriter: input.audit,\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t/* persistence of the failure row must not hide the original error */\n\t\t\t}\n\t\t}\n\t\tawait trace?.failure(error, \"apply\");\n\t\tthrow error;\n\t} finally {\n\t\tif (!input.dryRun && input.lease) {\n\t\t\tawait input.lease.release({\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\t\t\t});\n\t\t}\n\t}\n}\n\nasync function persistAndAudit(\n\tinput: {\n\t\taudit?: AthenaBillingAuditWriter;\n\t\tcontext: BillingReconciliationContext;\n\t\treconcile: BillingWebhookReconcileInput;\n\t\tregistrations?: BillingWebhookRegistrationStore;\n\t\tsecretStore?: BillingWebhookSecretStore;\n\t},\n\trecord: {\n\t\tevent: AthenaBillingAuditEntry[\"event\"];\n\t\teventTypes: readonly string[];\n\t\tkind: BillingWebhookRegistrationRecord[\"kind\"];\n\t\tprevious?: unknown;\n\t\tproviderSigningSecret?: string;\n\t\tproviderWebhookId: string;\n\t\tstatus: BillingWebhookRegistrationRecord[\"status\"];\n\t\turl: string;\n\t},\n): Promise<void> {\n\tlet secretFingerprint: string | undefined;\n\tif (record.providerSigningSecret && record.providerSigningSecret.length > 0) {\n\t\tsecretFingerprint = fingerprintBillingSigningSecret(\n\t\t\trecord.providerSigningSecret,\n\t\t);\n\t\tawait input.secretStore?.storeCurrent({\n\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\tfingerprint: secretFingerprint,\n\t\t\tsecret: record.providerSigningSecret,\n\t\t});\n\t} else if (input.secretStore) {\n\t\tconst existing = await input.secretStore.resolve(\n\t\t\tinput.reconcile.connectionId,\n\t\t);\n\t\tif (existing.current) {\n\t\t\tsecretFingerprint = fingerprintBillingSigningSecret(existing.current);\n\t\t}\n\t} else if (input.registrations) {\n\t\tconst existing = await input.registrations.get({\n\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\tkind: record.kind,\n\t\t});\n\t\tsecretFingerprint = existing?.secretFingerprint;\n\t}\n\tconst row: BillingWebhookRegistrationRecord = {\n\t\tconfigHash: billingWebhookConfigHash({\n\t\t\teventTypes: record.eventTypes,\n\t\t\tkind: record.kind,\n\t\t\turl: record.url,\n\t\t}),\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tenvironment: input.reconcile.environment,\n\t\teventTypes: record.eventTypes,\n\t\tid: crypto.randomUUID(),\n\t\tkind: record.kind,\n\t\tname: billingWebhookConfigHash({\n\t\t\teventTypes: record.eventTypes,\n\t\t\tkind: record.kind,\n\t\t\turl: record.url,\n\t\t}),\n\t\tprovider: input.reconcile.provider,\n\t\tproviderWebhookId: record.providerWebhookId,\n\t\tstatus: record.status,\n\t\turl: record.url,\n\t\t...(secretFingerprint ? { secretFingerprint } : {}),\n\t};\n\tif (input.registrations) {\n\t\tawait input.registrations.upsert({\n\t\t\t...row,\n\t\t\tname: billingWebhookOwnershipMarker({\n\t\t\t\tapplicationId: input.reconcile.applicationId,\n\t\t\t\tconnectionId: input.reconcile.connectionId,\n\t\t\t}),\n\t\t});\n\t}\n\tif (!input.audit) {\n\t\treturn;\n\t}\n\tconst ir = billingEventDefinition(record.event);\n\tconst entry: AthenaBillingAuditEntry = {\n\t\tactor: { kind: \"system\" },\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.reconcile.connectionId,\n\t\tcorrelationId: input.context.correlationId,\n\t\tevent: record.event,\n\t\t...mintBillingAuditIdentity(),\n\t\toutcome: \"success\",\n\t\tprevious: record.previous,\n\t\tprovider: input.reconcile.provider,\n\t\tproviderSubject: { id: record.providerWebhookId, kind: \"webhook\" },\n\t\tresult: {\n\t\t\teventTypes: record.eventTypes,\n\t\t\tstatus: record.status,\n\t\t\turl: record.url,\n\t\t},\n\t\ttraceId: input.context.traceId,\n\t};\n\tvalidateBillingAuditEntry(entry, ir);\n\tawait input.audit.write(entry);\n}\n","import { listActiveBillingImportConnections } from \"../import/postgres.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n\tcreateDisabledBillingTraceRecorder,\n\tcreatePostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n} from \"../reconciliation/context.ts\";\nimport { createPostgresBillingReconciliationLeaseStore } from \"../reconciliation/lease.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport {\n\tbillingConnectionHasConfiguredCredential,\n\tbillingConnectionMatchesProcessTestMode,\n\tcreateConnectionProviderExecutionContext,\n} from \"../runtime/local/providers/connection-binding.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"../runtime/local/providers/mollie/webhook-capability.ts\";\nimport type { BillingProviderRegistry } from \"../runtime/local/providers/registry.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { reconcileBillingWebhookRegistrations } from \"./reconciliation/coordinator.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"./reconciliation/repository.ts\";\nimport type { BillingWebhookSecretStore } from \"./secrets/types.ts\";\nimport type { NormalizedAthenaBillingWebhooksConfig } from \"./types.ts\";\nimport {\n\tbillingWebhookUrlIsLoopback,\n\tresolveBillingIngressEndpoints,\n} from \"./urls.ts\";\n\nconst warnedLoopbackWebhookUrls = new Set<string>();\nconst warnedSkippedWebhookConnections = new Set<string>();\n\nexport async function runAutomaticBillingWebhookReconcileIfEnabled(input: {\n\tapplicationId: string;\n\tappUrl?: string | null;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tobservability?: NormalizedAthenaBillingObservability;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n\ttrigger: \"bootstrap\" | \"scheduled\" | \"manual\";\n\twebhooks: NormalizedAthenaBillingWebhooksConfig;\n\trememberSigningSecret?: (input: {\n\t\tconnectionId: string;\n\t\tsecret: string;\n\t}) => void;\n\tsecretStore?: BillingWebhookSecretStore;\n}): Promise<void> {\n\tif (!input.webhooks.enabled) {\n\t\treturn;\n\t}\n\tconst connections = await listActiveBillingImportConnections(\n\t\tinput.sql,\n\t\t\"mollie\",\n\t);\n\tconst observability =\n\t\tinput.observability ?? normalizeAthenaBillingObservability();\n\tconst traces = observability.traces.enabled\n\t\t? createPostgresBillingTraceRecorder(\n\t\t\tinput.sql,\n\t\t\tobservability.traces.sampleRate,\n\t\t)\n\t\t: createDisabledBillingTraceRecorder();\n\tconst audit = observability.auditLog\n\t\t? createPostgresBillingAuditWriter(input.sql)\n\t\t: undefined;\n\tconst mollie = input.configuredProviders?.mollie;\n\tif (mollie == null && input.configuredProviders?.mollieAccounts == null) {\n\t\treturn;\n\t}\n\tconst runtime = input.registry?.get(\"mollie\");\n\tfor (const connection of connections) {\n\t\tif (\n\t\t\t!billingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.testMode,\n\t\t\t)\n\t\t) {\n\t\t\tconst skipKey = `env:${connection.id}`;\n\t\t\tif (!warnedSkippedWebhookConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedWebhookConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping webhook reconciliation; connection environment does not match process billing.testMode\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t\tprocessTestMode: resolveBillingEnvironment({\n\t\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t\t}).testMode,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t!billingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t})\n\t\t) {\n\t\t\tconst skipKey = `cred:${connection.id}`;\n\t\t\tif (!warnedSkippedWebhookConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedWebhookConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping webhook reconciliation; connection environment has no configured credential\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tconst endpoints = resolveBillingIngressEndpoints({\n\t\t\tappUrl: input.appUrl,\n\t\t\tpublicBaseUrl: input.webhooks.publicBaseUrl,\n\t\t\twebhookIngressToken: connection.webhookIngressToken,\n\t\t});\n\t\tif (!endpoints) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst skipProviderWebhookApi = billingWebhookUrlIsLoopback(\n\t\t\tendpoints.eventsUrl,\n\t\t);\n\t\tif (\n\t\t\tskipProviderWebhookApi &&\n\t\t\t!warnedLoopbackWebhookUrls.has(endpoints.eventsUrl)\n\t\t) {\n\t\t\twarnedLoopbackWebhookUrls.add(endpoints.eventsUrl);\n\t\t\tconsole.warn(\n\t\t\t\t\"[athena-billing] skipping Mollie next-gen webhook registration; the public URL is loopback and Mollie cannot reach it\",\n\t\t\t\t{ url: endpoints.eventsUrl },\n\t\t\t);\n\t\t}\n\t\tconst context =\n\t\t\tinput.trigger === \"scheduled\"\n\t\t\t\t? mintScheduledBillingReconciliationContext({\n\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\tschedulerExecutionId: crypto.randomUUID(),\n\t\t\t\t})\n\t\t\t\t: mintManualBillingReconciliationContext({\n\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\ttrigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n\t\t\t\t});\n\t\tconst execution = createConnectionProviderExecutionContext({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnection,\n\t\t\tingress: { classicWebhookUrl: endpoints.classicUrl },\n\t\t\toperationScope: \"organization\",\n\t\t});\n\t\tconst capability = resolveMollieWebhookManagementCapability(\n\t\t\texecution.binding,\n\t\t);\n\t\tawait reconcileBillingWebhookRegistrations({\n\t\t\taudit,\n\t\t\tcontext,\n\t\t\texecution,\n\t\t\tlease: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\tport: skipProviderWebhookApi ? undefined : runtime?.webhooks,\n\t\t\treconcile: {\n\t\t\t\tapplicationId: input.applicationId,\n\t\t\t\tcapability,\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tendpoints,\n\t\t\t\tenvironment: connection.environment,\n\t\t\t\tmanagement: input.webhooks.management,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\twebhooks: input.webhooks,\n\t\t\t},\n\t\t\tregistrations: createPostgresBillingWebhookRegistrationStore(input.sql),\n\t\t\trememberSigningSecret: input.rememberSigningSecret,\n\t\t\tsecretStore: input.secretStore,\n\t\t\ttraces,\n\t\t});\n\t}\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type {\n\tPolicyExpr,\n\tPolicyOperand,\n\tPolicyValue,\n\tSubjectRef,\n} from \"./types.ts\";\n\nexport class AthenaPolicyBindError extends Error {\n\treadonly code = \"ATHENA_POLICY_SUBJECT_MISSING\";\n\treadonly slot: string;\n\n\tconstructor(slot: string) {\n\t\tsuper(\n\t\t\t`ATHENA_POLICY_SUBJECT_MISSING: required subject slot \"${slot}\" is not bound`,\n\t\t);\n\t\tthis.name = \"AthenaPolicyBindError\";\n\t\tthis.slot = slot;\n\t}\n}\n\nfunction slotName(subject: SubjectRef): string {\n\treturn subject.slot === \"claim\" ? `claim:${subject.path}` : subject.slot;\n}\n\nfunction subjectValue(\n\tsubject: SubjectRef,\n\tprincipal: AthenaPrincipal,\n): PolicyValue {\n\tswitch (subject.slot) {\n\t\tcase \"userId\":\n\t\t\tif (!principal.userId) {\n\t\t\t\tthrow new AthenaPolicyBindError(\"userId\");\n\t\t\t}\n\t\t\treturn { type: \"string\", value: principal.userId };\n\t\tcase \"organizationId\":\n\t\t\tif (!principal.organizationId) {\n\t\t\t\tthrow new AthenaPolicyBindError(\"organizationId\");\n\t\t\t}\n\t\t\treturn { type: \"string\", value: principal.organizationId };\n\t\tcase \"sessionId\":\n\t\t\tif (!principal.sessionId) {\n\t\t\t\tthrow new AthenaPolicyBindError(\"sessionId\");\n\t\t\t}\n\t\t\treturn { type: \"string\", value: principal.sessionId };\n\t\tcase \"roles\":\n\t\t\treturn {\n\t\t\t\ttype: \"list\",\n\t\t\t\tvalue: principal.role\n\t\t\t\t\t? [{ type: \"string\", value: principal.role }]\n\t\t\t\t\t: [],\n\t\t\t};\n\t\tcase \"permissions\":\n\t\t\treturn {\n\t\t\t\ttype: \"list\",\n\t\t\t\tvalue: principal.rights.map((right) => ({\n\t\t\t\t\ttype: \"string\" as const,\n\t\t\t\t\tvalue: right,\n\t\t\t\t})),\n\t\t\t};\n\t\tcase \"claim\": {\n\t\t\tconst raw = principal.claims?.[subject.path];\n\t\t\tif (raw === undefined) {\n\t\t\t\tthrow new AthenaPolicyBindError(`claim:${subject.path}`);\n\t\t\t}\n\t\t\tif (raw === null) {\n\t\t\t\treturn { type: \"null\" };\n\t\t\t}\n\t\t\tif (typeof raw === \"boolean\") {\n\t\t\t\treturn { type: \"bool\", value: raw };\n\t\t\t}\n\t\t\tif (typeof raw === \"number\" && Number.isInteger(raw)) {\n\t\t\t\treturn { type: \"integer\", value: raw };\n\t\t\t}\n\t\t\treturn { type: \"string\", value: String(raw) };\n\t\t}\n\t\tdefault:\n\t\t\tthrow new AthenaPolicyBindError(slotName(subject));\n\t}\n}\n\nexport function bindPolicyOperand(\n\toperand: PolicyOperand,\n\tprincipal: AthenaPrincipal,\n): PolicyOperand {\n\tif (operand.kind !== \"subject\") {\n\t\treturn operand;\n\t}\n\treturn {\n\t\tkind: \"literal\",\n\t\tvalue: subjectValue(operand.subject, principal),\n\t};\n}\n\nexport function bindPolicyExpr(\n\texpr: PolicyExpr,\n\tprincipal: AthenaPrincipal,\n): PolicyExpr {\n\tswitch (expr.op) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\t\treturn {\n\t\t\t\t...expr,\n\t\t\t\tleft: bindPolicyOperand(expr.left, principal),\n\t\t\t\tright: bindPolicyOperand(expr.right, principal),\n\t\t\t};\n\t\tcase \"is_null\":\n\t\tcase \"is_not_null\":\n\t\t\treturn {\n\t\t\t\t...expr,\n\t\t\t\toperand: bindPolicyOperand(expr.operand, principal),\n\t\t\t};\n\t\tcase \"in\":\n\t\t\treturn {\n\t\t\t\t...expr,\n\t\t\t\thaystack: expr.haystack.map((item) =>\n\t\t\t\t\tbindPolicyOperand(item, principal),\n\t\t\t\t),\n\t\t\t\tneedle: bindPolicyOperand(expr.needle, principal),\n\t\t\t};\n\t\tcase \"and\":\n\t\tcase \"or\":\n\t\t\treturn {\n\t\t\t\t...expr,\n\t\t\t\texprs: expr.exprs.map((child) => bindPolicyExpr(child, principal)),\n\t\t\t};\n\t\tcase \"not\":\n\t\t\treturn {\n\t\t\t\t...expr,\n\t\t\t\texpr: bindPolicyExpr(expr.expr, principal),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn expr;\n\t}\n}\n","import type { PolicyExpr, PolicyOperand, PolicyValue } from \"./types.ts\";\n\nexport class AthenaPolicyEvalError extends Error {\n\treadonly code = \"ATHENA_POLICY_UNSUPPORTED_EXPRESSION\";\n\n\tconstructor(message: string) {\n\t\tsuper(`ATHENA_POLICY_UNSUPPORTED_EXPRESSION: ${message}`);\n\t\tthis.name = \"AthenaPolicyEvalError\";\n\t}\n}\n\nfunction unwrapValue(value: PolicyValue): unknown {\n\tswitch (value.type) {\n\t\tcase \"null\":\n\t\t\treturn null;\n\t\tcase \"bool\":\n\t\t\treturn value.value;\n\t\tcase \"string\":\n\t\tcase \"uuid\":\n\t\tcase \"date_time\":\n\t\t\treturn value.value;\n\t\tcase \"integer\":\n\t\t\treturn value.value;\n\t\tcase \"list\":\n\t\t\treturn value.value.map(unwrapValue);\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readOperand(\n\toperand: PolicyOperand,\n\trow: Record<string, unknown>,\n): unknown {\n\tif (operand.kind === \"literal\") {\n\t\treturn unwrapValue(operand.value);\n\t}\n\tif (operand.kind === \"subject\") {\n\t\tthrow new AthenaPolicyEvalError(\n\t\t\t`unbound subject slot \"${operand.subject.slot}\"`,\n\t\t);\n\t}\n\tconst logical = operand.column.logical;\n\tconst physical = operand.column.physical;\n\tif (physical && physical in row) {\n\t\treturn row[physical];\n\t}\n\tif (logical in row) {\n\t\treturn row[logical];\n\t}\n\tthrow new AthenaPolicyEvalError(\n\t\t`column \"${physical ?? logical}\" is missing from the row image`,\n\t);\n}\n\nfunction asNumber(value: unknown): number | undefined {\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"bigint\") {\n\t\treturn Number(value);\n\t}\n\tif (\n\t\ttypeof value === \"string\" &&\n\t\tvalue.trim() !== \"\" &&\n\t\t!Number.isNaN(Number(value))\n\t) {\n\t\treturn Number(value);\n\t}\n\treturn undefined;\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n\tif (left === null || left === undefined) {\n\t\treturn right === null || right === undefined;\n\t}\n\tif (right === null || right === undefined) {\n\t\treturn false;\n\t}\n\tif (typeof left === \"boolean\" || typeof right === \"boolean\") {\n\t\treturn Boolean(left) === Boolean(right);\n\t}\n\tconst ln = asNumber(left);\n\tconst rn = asNumber(right);\n\tif (ln !== undefined && rn !== undefined) {\n\t\treturn ln === rn;\n\t}\n\treturn String(left) === String(right);\n}\n\nfunction compareOrd(left: unknown, right: unknown): number | undefined {\n\tconst ln = asNumber(left);\n\tconst rn = asNumber(right);\n\tif (ln !== undefined && rn !== undefined) {\n\t\treturn ln === rn ? 0 : ln < rn ? -1 : 1;\n\t}\n\tif (typeof left === \"string\" && typeof right === \"string\") {\n\t\treturn left.localeCompare(right);\n\t}\n\treturn undefined;\n}\n\nexport function evaluatePolicyExpr(\n\texpr: PolicyExpr,\n\trow: Record<string, unknown>,\n): boolean {\n\tswitch (expr.op) {\n\t\tcase \"and\":\n\t\t\treturn expr.exprs.every((child) => evaluatePolicyExpr(child, row));\n\t\tcase \"or\":\n\t\t\treturn expr.exprs.some((child) => evaluatePolicyExpr(child, row));\n\t\tcase \"not\":\n\t\t\treturn !evaluatePolicyExpr(expr.expr, row);\n\t\tcase \"is_null\": {\n\t\t\tconst value = readOperand(expr.operand, row);\n\t\t\treturn value === null || value === undefined;\n\t\t}\n\t\tcase \"is_not_null\": {\n\t\t\tconst value = readOperand(expr.operand, row);\n\t\t\treturn value !== null && value !== undefined;\n\t\t}\n\t\tcase \"in\": {\n\t\t\tconst needle = readOperand(expr.needle, row);\n\t\t\tif (expr.haystack.length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn expr.haystack.some((item) =>\n\t\t\t\tvaluesEqual(needle, readOperand(item, row)),\n\t\t\t);\n\t\t}\n\t\tcase \"eq\":\n\t\t\treturn valuesEqual(\n\t\t\t\treadOperand(expr.left, row),\n\t\t\t\treadOperand(expr.right, row),\n\t\t\t);\n\t\tcase \"ne\":\n\t\t\treturn !valuesEqual(\n\t\t\t\treadOperand(expr.left, row),\n\t\t\t\treadOperand(expr.right, row),\n\t\t\t);\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"gt\":\n\t\tcase \"gte\": {\n\t\t\tconst ord = compareOrd(\n\t\t\t\treadOperand(expr.left, row),\n\t\t\t\treadOperand(expr.right, row),\n\t\t\t);\n\t\t\tif (ord === undefined) {\n\t\t\t\tthrow new AthenaPolicyEvalError(\n\t\t\t\t\t`cannot compare operands for ${expr.op}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (expr.op === \"lt\") {\n\t\t\t\treturn ord < 0;\n\t\t\t}\n\t\t\tif (expr.op === \"lte\") {\n\t\t\t\treturn ord <= 0;\n\t\t\t}\n\t\t\tif (expr.op === \"gt\") {\n\t\t\t\treturn ord > 0;\n\t\t\t}\n\t\t\treturn ord >= 0;\n\t\t}\n\t\tdefault:\n\t\t\tthrow new AthenaPolicyEvalError(\"unknown operator\");\n\t}\n}\n","import { sha256HexUtf8 } from \"../node-crypto.ts\";\nimport type {\n\tPolicyDefinition,\n\tPolicyIrDocument,\n\tPolicyPrincipal,\n} from \"./types.ts\";\n\nfunction principalSortKey(p: PolicyPrincipal): [number, string] {\n\tswitch (p.kind) {\n\t\tcase \"public\":\n\t\t\treturn [0, \"\"];\n\t\tcase \"anonymous\":\n\t\t\treturn [1, \"\"];\n\t\tcase \"authenticated\":\n\t\t\treturn [2, \"\"];\n\t\tcase \"role\":\n\t\t\treturn [3, p.name];\n\t\tcase \"permission\":\n\t\t\treturn [4, p.name];\n\t\tcase \"service\":\n\t\t\treturn [5, p.name];\n\t\tcase \"admin\":\n\t\t\treturn [6, \"\"];\n\t\tdefault:\n\t\t\treturn [99, \"\"];\n\t}\n}\n\nfunction principalJson(p: PolicyPrincipal): unknown {\n\tswitch (p.kind) {\n\t\tcase \"role\":\n\t\tcase \"permission\":\n\t\tcase \"service\":\n\t\t\treturn { kind: p.kind, name: p.name };\n\t\tdefault:\n\t\t\treturn { kind: p.kind };\n\t}\n}\n\nconst ACTION_NAMES = [\n\t\"select\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"storage.object.read\",\n\t\"storage.object.write\",\n\t\"storage.object.delete\",\n] as const;\nconst ACTION_BITS = [1, 2, 4, 8, 16, 32, 64] as const;\n\nfunction actionsList(mask: number): string[] {\n\tconst out: string[] = [];\n\tfor (let i = 0; i < ACTION_BITS.length; i++) {\n\t\tif (mask & ACTION_BITS[i]) {\n\t\t\tout.push(ACTION_NAMES[i]);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction canonicalizePolicy(policy: PolicyDefinition): unknown {\n\tconst principals = [...policy.principals].sort((a, b) => {\n\t\tconst [ak, an] = principalSortKey(a);\n\t\tconst [bk, bn] = principalSortKey(b);\n\t\treturn ak - bk || an.localeCompare(bn);\n\t});\n\n\treturn {\n\t\tid: policy.id,\n\t\tname: policy.name ?? null,\n\t\tresource: {\n\t\t\tdatabase: policy.resource.database ?? null,\n\t\t\tschema: policy.resource.schema ?? null,\n\t\t\ttable: policy.resource.table,\n\t\t},\n\t\tactions: actionsList(policy.actions),\n\t\tcomposition: policy.composition,\n\t\tprincipals: principals.map(principalJson),\n\t\tvisibility: policy.visibility ?? null,\n\t\tcheck: policy.check ?? null,\n\t\textensions: {},\n\t};\n}\n\n/** Semantic canonical form matching athena-policy-core::canonicalize_document. */\nexport function canonicalizeDocument(doc: PolicyIrDocument): unknown {\n\tconst policies = [...doc.policies]\n\t\t.sort((a, b) => a.id.localeCompare(b.id))\n\t\t.map(canonicalizePolicy);\n\treturn {\n\t\tirVersion: doc.irVersion,\n\t\tpolicies,\n\t};\n}\n\n/** Recursively sort object keys for cross-language stable hashing. */\nfunction sortValue(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(sortValue);\n\t}\n\tif (value && typeof value === \"object\") {\n\t\tconst obj = value as Record<string, unknown>;\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const key of Object.keys(obj).sort()) {\n\t\t\tout[key] = sortValue(obj[key]);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\n/**\n * SHA-256 hex fingerprint of the semantic canonical form.\n * Matches Rust `fingerprint_document` (sorted-key compact JSON + SHA-256).\n */\nexport function fingerprintDocument(doc: PolicyIrDocument): string {\n\tconst canonical = sortValue(canonicalizeDocument(doc));\n\t// Avoid Buffer / node:crypto static imports so DTS emit does not need @types/node.\n\treturn sha256HexUtf8(JSON.stringify(canonical));\n}\n","/**\n * Athena Policy IR types (wire-compatible with athena-policy-core).\n */\n\nimport type {\n  AthenaResourceIdentity,\n  AthenaResourceRef,\n} from \"../schema/resource.ts\";\n\nexport type { AthenaResourceIdentity, AthenaResourceRef };\n\n/** Policy IR binds authorization expressions to {@link AthenaResourceIdentity}. */\nexport type PolicyResourceBinding = AthenaResourceIdentity;\n\nexport type PolicyActionName =\n\t| \"select\"\n\t| \"insert\"\n\t| \"update\"\n\t| \"delete\"\n\t| \"storage.object.read\"\n\t| \"storage.object.write\"\n\t| \"storage.object.delete\";\n\nexport type PolicyCompositionName = \"permissive\" | \"restrictive\";\n\nexport type PolicyPrincipal =\n\t| { kind: \"public\" }\n\t| { kind: \"anonymous\" }\n\t| { kind: \"authenticated\" }\n\t| { kind: \"role\"; name: string }\n\t| { kind: \"permission\"; name: string }\n\t| { kind: \"service\"; name: string }\n\t| { kind: \"admin\" };\n\n/**\n * Policy IR subject slots.\n *\n * `{ slot: \"claim\"; path }` is resolved only against the server trusted-claim\n * store (`TrustedClaims`). Request headers, query params, and body fields are\n * never authoritative claim operands.\n */\nexport type SubjectRef =\n\t| { slot: \"userId\" }\n\t| { slot: \"organizationId\" }\n\t| { slot: \"sessionId\" }\n\t| { slot: \"roles\" }\n\t| { slot: \"permissions\" }\n\t| { slot: \"claim\"; path: string };\n\nexport type PolicyValue =\n\t| { type: \"null\" }\n\t| { type: \"bool\"; value: boolean }\n\t| { type: \"string\"; value: string }\n\t| { type: \"integer\"; value: number }\n\t| { type: \"uuid\"; value: string }\n\t| { type: \"date_time\"; value: string }\n\t| { type: \"list\"; value: PolicyValue[] };\n\nexport interface PolicyColumnRef {\n\tlogical: string;\n\tphysical?: string;\n}\n\nexport type PolicyOperand =\n\t| { kind: \"column\"; column: PolicyColumnRef }\n\t| { kind: \"subject\"; subject: SubjectRef }\n\t| { kind: \"literal\"; value: PolicyValue };\n\nexport type PolicyExpr =\n\t| { op: \"eq\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"ne\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"lt\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"lte\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"gt\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"gte\"; left: PolicyOperand; right: PolicyOperand }\n\t| { op: \"is_null\"; operand: PolicyOperand }\n\t| { op: \"is_not_null\"; operand: PolicyOperand }\n\t| { op: \"in\"; needle: PolicyOperand; haystack: PolicyOperand[] }\n\t| { op: \"and\"; exprs: PolicyExpr[] }\n\t| { op: \"or\"; exprs: PolicyExpr[] }\n\t| { op: \"not\"; expr: PolicyExpr };\n\nexport type PolicyResourceRef = AthenaResourceRef;\n\nexport interface PolicyDefinition {\n\tid: string;\n\tname?: string;\n\tresource: PolicyResourceRef;\n\t/** Action bitmask: select=1, insert=2, update=4, delete=8, storage.object.read=16, write=32, delete=64 */\n\tactions: number;\n\tcomposition: PolicyCompositionName;\n\tprincipals: PolicyPrincipal[];\n\tvisibility?: PolicyExpr;\n\tcheck?: PolicyExpr;\n}\n\nexport interface PolicyIrDocument {\n\tirVersion: number;\n\tpolicies: PolicyDefinition[];\n}\n\nexport const POLICY_IR_VERSION = 1 as const;\n\nexport const ACTION_BITS = {\n\tselect: 1,\n\tinsert: 2,\n\tupdate: 4,\n\tdelete: 8,\n\t\"storage.object.read\": 16,\n\t\"storage.object.write\": 32,\n\t\"storage.object.delete\": 64,\n} as const satisfies Record<PolicyActionName, number>;\n","import {\n\tathenaResourceKeys,\n\ttype AthenaResourceRef,\n} from \"../schema/resource.ts\";\nimport { isKnownPolicyPrincipalKind } from \"./match-principal.ts\";\nimport {\n\tACTION_BITS,\n\ttype PolicyActionName,\n\ttype PolicyDefinition,\n\ttype PolicyExpr,\n\ttype PolicyOperand,\n\ttype PolicyPrincipal,\n} from \"./types.ts\";\n\nconst EXPR_OPS = new Set([\n\t\"eq\",\n\t\"ne\",\n\t\"lt\",\n\t\"lte\",\n\t\"gt\",\n\t\"gte\",\n\t\"is_null\",\n\t\"is_not_null\",\n\t\"in\",\n\t\"and\",\n\t\"or\",\n\t\"not\",\n]);\n\nconst OPERAND_KINDS = new Set([\"column\", \"subject\", \"literal\"]);\n\nexport class AthenaPolicyConfigError extends Error {\n\treadonly code = \"ATHENA_POLICY_INVALID\";\n\n\tconstructor(message: string) {\n\t\tsuper(`ATHENA_POLICY_INVALID: ${message}`);\n\t\tthis.name = \"AthenaPolicyConfigError\";\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction validateOperand(operand: PolicyOperand, path: string): void {\n\tif (!isRecord(operand) || typeof operand.kind !== \"string\") {\n\t\tthrow new AthenaPolicyConfigError(`malformed operand at ${path}`);\n\t}\n\tif (!OPERAND_KINDS.has(operand.kind)) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`unsupported operand kind \"${operand.kind}\" at ${path}`,\n\t\t);\n\t}\n\tif (operand.kind === \"column\" && !operand.column?.logical) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`column operand missing logical name at ${path}`,\n\t\t);\n\t}\n\tif (operand.kind === \"subject\" && !operand.subject?.slot) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`subject operand missing slot at ${path}`,\n\t\t);\n\t}\n}\n\nexport function validatePolicyExpr(expr: PolicyExpr, path = \"expr\"): void {\n\tif (!isRecord(expr) || typeof expr.op !== \"string\") {\n\t\tthrow new AthenaPolicyConfigError(`malformed PolicyExpr at ${path}`);\n\t}\n\tif (!EXPR_OPS.has(expr.op)) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`unsupported operator \"${expr.op}\" at ${path}`,\n\t\t);\n\t}\n\tswitch (expr.op) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\t\tvalidateOperand(expr.left, `${path}.left`);\n\t\t\tvalidateOperand(expr.right, `${path}.right`);\n\t\t\treturn;\n\t\tcase \"is_null\":\n\t\tcase \"is_not_null\":\n\t\t\tvalidateOperand(expr.operand, `${path}.operand`);\n\t\t\treturn;\n\t\tcase \"in\":\n\t\t\tvalidateOperand(expr.needle, `${path}.needle`);\n\t\t\tif (!Array.isArray(expr.haystack)) {\n\t\t\t\tthrow new AthenaPolicyConfigError(`malformed in.haystack at ${path}`);\n\t\t\t}\n\t\t\texpr.haystack.forEach((item, index) => {\n\t\t\t\tvalidateOperand(item, `${path}.haystack[${index}]`);\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"and\":\n\t\tcase \"or\":\n\t\t\tif (!Array.isArray(expr.exprs) || expr.exprs.length === 0) {\n\t\t\t\tthrow new AthenaPolicyConfigError(\n\t\t\t\t\t`malformed ${expr.op}.exprs at ${path}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\texpr.exprs.forEach((item, index) => {\n\t\t\t\tvalidatePolicyExpr(item, `${path}.exprs[${index}]`);\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"not\":\n\t\t\tvalidatePolicyExpr(expr.expr, `${path}.expr`);\n\t}\n}\n\nfunction validatePrincipal(principal: PolicyPrincipal, path: string): void {\n\tif (!isRecord(principal) || typeof principal.kind !== \"string\") {\n\t\tthrow new AthenaPolicyConfigError(`malformed principal at ${path}`);\n\t}\n\tif (!isKnownPolicyPrincipalKind(principal.kind)) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`unknown principal kind \"${principal.kind}\" at ${path}`,\n\t\t);\n\t}\n\tif (\n\t\t(principal.kind === \"role\" ||\n\t\t\tprincipal.kind === \"permission\" ||\n\t\t\tprincipal.kind === \"service\") &&\n\t\t!principal.name?.trim()\n\t) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`${principal.kind} principal missing name at ${path}`,\n\t\t);\n\t}\n}\n\nexport function validatePolicyDefinition(definition: PolicyDefinition): void {\n\tif (!definition?.id?.trim()) {\n\t\tthrow new AthenaPolicyConfigError(\"policy id is required\");\n\t}\n\tif (!definition.resource?.table?.trim()) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`policy ${definition.id} missing resource.table`,\n\t\t);\n\t}\n\tif (\n\t\ttypeof definition.actions !== \"number\" ||\n\t\tdefinition.actions <= 0 ||\n\t\t(definition.actions &\n\t\t\t~(\n\t\t\t\tACTION_BITS.select |\n\t\t\t\tACTION_BITS.insert |\n\t\t\t\tACTION_BITS.update |\n\t\t\t\tACTION_BITS.delete |\n\t\t\t\tACTION_BITS[\"storage.object.read\"] |\n\t\t\t\tACTION_BITS[\"storage.object.write\"] |\n\t\t\t\tACTION_BITS[\"storage.object.delete\"]\n\t\t\t)) !==\n\t\t\t0\n\t) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`policy ${definition.id} has invalid actions`,\n\t\t);\n\t}\n\tif (\n\t\tdefinition.composition !== \"permissive\" &&\n\t\tdefinition.composition !== \"restrictive\"\n\t) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`policy ${definition.id} has unknown composition`,\n\t\t);\n\t}\n\tif (!Array.isArray(definition.principals)) {\n\t\tthrow new AthenaPolicyConfigError(\n\t\t\t`policy ${definition.id} principals must be an array`,\n\t\t);\n\t}\n\tdefinition.principals.forEach((item, index) => {\n\t\tvalidatePrincipal(item, `${definition.id}.principals[${index}]`);\n\t});\n\tif (definition.visibility) {\n\t\tvalidatePolicyExpr(definition.visibility, `${definition.id}.visibility`);\n\t}\n\tif (definition.check) {\n\t\tvalidatePolicyExpr(definition.check, `${definition.id}.check`);\n\t}\n}\n\nexport function actionsFromMask(mask: number): PolicyActionName[] {\n\tconst actions: PolicyActionName[] = [];\n\tif (mask & ACTION_BITS.select) {\n\t\tactions.push(\"select\");\n\t}\n\tif (mask & ACTION_BITS.insert) {\n\t\tactions.push(\"insert\");\n\t}\n\tif (mask & ACTION_BITS.update) {\n\t\tactions.push(\"update\");\n\t}\n\tif (mask & ACTION_BITS.delete) {\n\t\tactions.push(\"delete\");\n\t}\n\tif (mask & ACTION_BITS[\"storage.object.read\"]) {\n\t\tactions.push(\"storage.object.read\");\n\t}\n\tif (mask & ACTION_BITS[\"storage.object.write\"]) {\n\t\tactions.push(\"storage.object.write\");\n\t}\n\tif (mask & ACTION_BITS[\"storage.object.delete\"]) {\n\t\tactions.push(\"storage.object.delete\");\n\t}\n\treturn actions;\n}\n\nexport function resourceKeys(resource: AthenaResourceRef): string[] {\n\treturn athenaResourceKeys(resource);\n}\n","import type { AthenaRuntimeModelIndex } from \"../runtime/data/model-registry.ts\";\nimport type { AthenaPolicyMode } from \"./decision.ts\";\nimport { fingerprintDocument } from \"./fingerprint.ts\";\nimport type {\n\tPolicyActionName,\n\tPolicyDefinition,\n\tPolicyIrDocument,\n} from \"./types.ts\";\nimport {\n\tAthenaPolicyConfigError,\n\tactionsFromMask,\n\tresourceKeys,\n\tvalidatePolicyDefinition,\n} from \"./validate-ir.ts\";\n\nexport interface CreatePolicyRegistryOptions {\n\tdefinitions: unknown;\n\tmode: AthenaPolicyMode;\n\tmodelIndex?: AthenaRuntimeModelIndex;\n}\n\nexport interface AthenaPolicyRegistry {\n\treadonly mode: AthenaPolicyMode;\n\treadonly revision: string;\n\tget(resource: string, action: PolicyActionName): readonly PolicyDefinition[];\n}\n\nfunction isPolicyDocument(value: unknown): value is PolicyIrDocument {\n\treturn Boolean(\n\t\tvalue &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\tArray.isArray((value as PolicyIrDocument).policies),\n\t);\n}\n\nfunction isAuthored(\n\tvalue: unknown,\n): value is { definitions: PolicyDefinition[] } {\n\treturn Boolean(\n\t\tvalue &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\tArray.isArray((value as { definitions?: unknown }).definitions),\n\t);\n}\n\nexport function normalizePolicyDefinitions(input: unknown): PolicyDefinition[] {\n\tif (input == null) {\n\t\treturn [];\n\t}\n\tif (Array.isArray(input)) {\n\t\tconst out: PolicyDefinition[] = [];\n\t\tfor (const item of input) {\n\t\t\tif (isAuthored(item) && !(\"resource\" in item)) {\n\t\t\t\tout.push(...item.definitions);\n\t\t\t} else {\n\t\t\t\tout.push(item as PolicyDefinition);\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\tif (isPolicyDocument(input)) {\n\t\treturn input.policies;\n\t}\n\tif (isAuthored(input)) {\n\t\treturn input.definitions;\n\t}\n\tthrow new AthenaPolicyConfigError(\n\t\t\"policies.definitions must be an array or Policy IR document\",\n\t);\n}\n\nfunction lookupKeys(resource: string): string[] {\n\tconst trimmed = resource.trim();\n\tif (!trimmed) {\n\t\treturn [];\n\t}\n\tconst keys = [trimmed];\n\tif (!trimmed.includes(\".\")) {\n\t\tkeys.push(`public.${trimmed}`);\n\t} else {\n\t\tconst table = trimmed.split(\".\").pop();\n\t\tif (table) {\n\t\t\tkeys.push(table);\n\t\t}\n\t}\n\treturn keys;\n}\n\nexport function createPolicyRegistry(\n\toptions: CreatePolicyRegistryOptions,\n): AthenaPolicyRegistry {\n\tconst definitions = normalizePolicyDefinitions(options.definitions);\n\tif (options.mode === \"enforce\") {\n\t\tfor (const definition of definitions) {\n\t\t\tvalidatePolicyDefinition(definition);\n\t\t}\n\t} else {\n\t\tfor (const definition of definitions) {\n\t\t\ttry {\n\t\t\t\tvalidatePolicyDefinition(definition);\n\t\t\t} catch {\n\t\t\t\tthrow new AthenaPolicyConfigError(\n\t\t\t\t\t`invalid policy in ${options.mode} mode: ${definition?.id ?? \"<missing id>\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.mode === \"enforce\" && options.modelIndex) {\n\t\tfor (const definition of definitions) {\n\t\t\tconst found = resourceKeys(definition.resource).some((key) =>\n\t\t\t\toptions.modelIndex?.get(key),\n\t\t\t);\n\t\t\tif (!found) {\n\t\t\t\tthrow new AthenaPolicyConfigError(\n\t\t\t\t\t`policy ${definition.id} references unknown resource ${definition.resource.schema ? `${definition.resource.schema}.` : \"\"}${definition.resource.table}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst seen = new Set<string>();\n\tfor (const definition of definitions) {\n\t\tif (seen.has(definition.id)) {\n\t\t\tthrow new AthenaPolicyConfigError(`duplicate policy id ${definition.id}`);\n\t\t}\n\t\tseen.add(definition.id);\n\t}\n\n\tconst index = new Map<string, Map<PolicyActionName, PolicyDefinition[]>>();\n\tfor (const definition of definitions) {\n\t\tfor (const action of actionsFromMask(definition.actions)) {\n\t\t\tfor (const key of resourceKeys(definition.resource)) {\n\t\t\t\tlet byAction = index.get(key);\n\t\t\t\tif (!byAction) {\n\t\t\t\t\tbyAction = new Map();\n\t\t\t\t\tindex.set(key, byAction);\n\t\t\t\t}\n\t\t\t\tconst list = byAction.get(action) ?? [];\n\t\t\t\tlist.push(definition);\n\t\t\t\tbyAction.set(action, list);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst frozen = new Map<\n\t\tstring,\n\t\tMap<PolicyActionName, readonly PolicyDefinition[]>\n\t>();\n\tfor (const [resource, byAction] of index) {\n\t\tconst frozenActions = new Map<\n\t\t\tPolicyActionName,\n\t\t\treadonly PolicyDefinition[]\n\t\t>();\n\t\tfor (const [action, list] of byAction) {\n\t\t\tfrozenActions.set(action, Object.freeze([...list]));\n\t\t}\n\t\tfrozen.set(resource, frozenActions);\n\t}\n\n\tconst revision = fingerprintDocument({\n\t\tirVersion: 1,\n\t\tpolicies: definitions,\n\t});\n\n\treturn {\n\t\tmode: options.mode,\n\t\trevision,\n\t\tget(resource, action) {\n\t\t\tfor (const key of lookupKeys(resource)) {\n\t\t\t\tconst list = frozen.get(key)?.get(action);\n\t\t\t\tif (list) {\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Object.freeze([]);\n\t\t},\n\t};\n}\n","import { normalizePolicyDefinitions } from \"./registry.ts\";\nimport {\n\tACTION_BITS,\n\ttype PolicyActionName,\n\ttype PolicyIrDocument,\n} from \"./types.ts\";\nimport { actionsFromMask, resourceKeys } from \"./validate-ir.ts\";\n\nexport type AthenaPolicyCoverageCellKind =\n\t| \"permissive\"\n\t| \"restrictive-only\"\n\t| \"permissive+restrictive\"\n\t| \"none\";\n\nexport type AthenaPolicyCoverageCell = {\n\taction: PolicyActionName;\n\tcell: AthenaPolicyCoverageCellKind;\n\tresource: string;\n};\n\nexport type AthenaPolicyCoverageReport = {\n\tcells: AthenaPolicyCoverageCell[];\n};\n\nconst ACTIONS: readonly PolicyActionName[] = [\n\t\"select\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n];\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n\tif (\n\t\tinput &&\n\t\ttypeof input === \"object\" &&\n\t\tArray.isArray((input as PolicyIrDocument).policies)\n\t) {\n\t\treturn input as PolicyIrDocument;\n\t}\n\treturn {\n\t\tirVersion: 1,\n\t\tpolicies: normalizePolicyDefinitions(input),\n\t};\n}\n\nfunction qualify(resource: { schema?: string; table: string }): string {\n\treturn resource.schema\n\t\t? `${resource.schema}.${resource.table}`\n\t\t: resource.table;\n}\n\nfunction cellKind(\n\tpermissive: boolean,\n\trestrictive: boolean,\n): AthenaPolicyCoverageCellKind {\n\tif (permissive && restrictive) {\n\t\treturn \"permissive+restrictive\";\n\t}\n\tif (permissive) {\n\t\treturn \"permissive\";\n\t}\n\tif (restrictive) {\n\t\treturn \"restrictive-only\";\n\t}\n\treturn \"none\";\n}\n\n/**\n * Coverage **cells** per resource × action — not a binary covered flag.\n */\nexport function coverageAthenaPolicy(\n\tdocument: unknown,\n\toptions?: { resources?: readonly string[] },\n): AthenaPolicyCoverageReport {\n\tconst doc = asDocument(document);\n\tconst resources = new Set<string>(options?.resources ?? []);\n\tfor (const policy of doc.policies) {\n\t\tresources.add(qualify(policy.resource));\n\t\tfor (const key of resourceKeys(policy.resource)) {\n\t\t\tresources.add(key);\n\t\t}\n\t}\n\tif (resources.size === 0) {\n\t\tresources.add(\"invoices\");\n\t}\n\n\tconst cells: AthenaPolicyCoverageCell[] = [];\n\tfor (const resource of [...resources].sort()) {\n\t\tfor (const action of ACTIONS) {\n\t\t\tlet permissive = false;\n\t\t\tlet restrictive = false;\n\t\t\tfor (const policy of doc.policies) {\n\t\t\t\tconst keys = resourceKeys(policy.resource);\n\t\t\t\tconst matches =\n\t\t\t\t\tkeys.includes(resource) ||\n\t\t\t\t\tqualify(policy.resource) === resource ||\n\t\t\t\t\tpolicy.resource.table === resource ||\n\t\t\t\t\tresource.includes(policy.resource.table);\n\t\t\t\tif (!matches) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ((policy.actions & ACTION_BITS[action]) === 0) {\n\t\t\t\t\tif (!actionsFromMask(policy.actions).includes(action)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ((policy.actions & ACTION_BITS[action]) === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (policy.composition === \"restrictive\") {\n\t\t\t\t\trestrictive = true;\n\t\t\t\t} else {\n\t\t\t\t\tpermissive = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcells.push({\n\t\t\t\taction,\n\t\t\t\tcell: cellKind(permissive, restrictive),\n\t\t\t\tresource,\n\t\t\t});\n\t\t}\n\t}\n\treturn { cells };\n}\n","export type AthenaMalformedRightsSource =\n\t| \"athena-session\"\n\t| \"custom-trusted\"\n\t| \"policy\"\n\t| \"principal\"\n\t| \"service\";\n\nexport const ATHENA_MALFORMED_RIGHTS_KIND = \"athena.rights.malformed\" as const;\n\nexport interface AthenaMalformedRightsDiagnostic {\n\tkind: typeof ATHENA_MALFORMED_RIGHTS_KIND;\n\tmalformedKeyCount: number;\n\tsource: AthenaMalformedRightsSource;\n}\n\nexport type AthenaMalformedRightsDiagnosticListener = (\n\tdiagnostic: AthenaMalformedRightsDiagnostic,\n) => void;\n\nconst listeners = new Set<AthenaMalformedRightsDiagnosticListener>();\n\nexport function subscribeAthenaMalformedRightsDiagnostics(\n\tlistener: AthenaMalformedRightsDiagnosticListener,\n): () => void {\n\tlisteners.add(listener);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t};\n}\n\nexport function emitAthenaMalformedRightsDiagnostic(\n\tsource: AthenaMalformedRightsSource,\n\tmalformedKeyCount: number,\n): void {\n\tif (malformedKeyCount <= 0) {\n\t\treturn;\n\t}\n\tconst diagnostic: AthenaMalformedRightsDiagnostic = Object.freeze({\n\t\tkind: ATHENA_MALFORMED_RIGHTS_KIND,\n\t\tmalformedKeyCount,\n\t\tsource,\n\t});\n\tfor (const listener of [...listeners]) {\n\t\tlistener(diagnostic);\n\t}\n\tconsole.warn(\"[athena]\", diagnostic);\n}\n","/**\n * Canonical Local Runtime caller identity (type SSOT).\n *\n * HTTP request → AthenaResolvedPrincipal lives in `src/runtime/authority/`.\n * One semantic principal for Auth, Policy, and execution context.\n * Authority (how it was obtained) is tracked separately so a `userId`\n * is never treated as trusted on its own. Do not add a second principal model.\n */\n\nimport {\n  type AthenaRightKey,\n  tryParseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport {\n  type AthenaMalformedRightsSource,\n  emitAthenaMalformedRightsDiagnostic,\n} from \"./rights-diagnostics.ts\";\n\nexport type {\n  AthenaMalformedRightsDiagnostic,\n  AthenaMalformedRightsSource,\n} from \"./rights-diagnostics.ts\";\nexport {\n  ATHENA_MALFORMED_RIGHTS_KIND,\n  subscribeAthenaMalformedRightsDiagnostics,\n} from \"./rights-diagnostics.ts\";\n\nexport interface AthenaPrincipal {\n  authenticated: boolean;\n  userId?: string;\n  sessionId?: string;\n  organizationId?: string;\n  role?: string;\n  rights: readonly AthenaRightKey[];\n  /** Legacy provenance; never used to satisfy Right checks. */\n  grants: readonly string[];\n  service?: string;\n  claims?: Readonly<Record<string, unknown>>;\n}\n\n/** Wire / session input. `rights` stays a string array at JSON edges. */\nexport type AthenaPrincipalInput = Omit<\n  AthenaPrincipal,\n  \"rights\" | \"grants\"\n> & {\n  grants?: readonly string[];\n  rights?: readonly string[];\n};\n\n/**\n * Role → Rights projection at session lookup. Not a second Rights catalog.\n * Invalid keys are dropped by {@link normalizeAthenaPrincipal}.\n */\nexport interface AthenaPrincipalRightsProjection {\n  defaultRole?: string;\n  /**\n   * @deprecated Compatibility only. Prefer persisted authorization assignments.\n   * `role`: project `user.role` / `defaultRole` through `rightsByRole`.\n   * `stored`: persist `user.rights` / `metadata.rights` only. The two modes\n   * never mix. Do not add new `role` consumers.\n   */\n  mode?: \"role\" | \"stored\";\n  /**\n   * @deprecated Compatibility projection only. Product SSOT is persisted\n   * `authorization_*` assignments. Do not add new `rightsByRole` consumers.\n   */\n  rightsByRole?: Readonly<Record<string, readonly string[]>>;\n  /** Fail closed at client construction when the role table is incomplete. */\n  strictRoles?: boolean;\n};\n\nexport type AthenaPrincipalAuthority =\n  | \"anonymous\"\n  | \"athena-session\"\n  | \"custom-trusted\"\n  | \"service\"\n  | \"jwt\";\n\nexport interface AthenaResolvedPrincipal {\n  authority: AthenaPrincipalAuthority;\n  principal: AthenaPrincipal;\n}\n\nexport interface AthenaPrincipalResolutionInput {\n  headers: Headers;\n  request?: Request;\n  requestId?: string;\n}\n\nexport type AthenaPrincipalResolver = (\n  input: AthenaPrincipalResolutionInput,\n) => Promise<AthenaResolvedPrincipal | null> | AthenaResolvedPrincipal | null;\n\n/** Trusted session lookup result. Never constructed from request identity headers. */\nexport interface AthenaRuntimeSessionLookup {\n  session: {\n    activeOrganizationId?: string | null;\n    expiresAt?: string | Date | null;\n    id: string;\n    revoked?: boolean;\n    userId?: string;\n  };\n  user: {\n    banned?: boolean;\n    grants?: readonly string[];\n    id: string;\n    rights?: readonly string[];\n    role?: string | null;\n  };\n}\n\nexport type AthenaRuntimeOrganizationVerifier = (input: {\n  organizationId: string;\n  userId: string;\n}) => boolean | Promise<boolean>;\n\n/**\n * Duck-typed Athena Auth store surface used by `{ mode: \"athena-session\" }`.\n * Implemented by MemoryAuthStores / PostgresAuthStores. Not a second principal model.\n */\nexport interface AthenaRuntimeAuthSessionStore {\n  getMember?(organizationId: string, userId: string): Promise<unknown>;\n  hasAuthorizationAssignment?(userId: string): Promise<boolean>;\n  resolveEffectiveRights?(input: {\n    activeOrganizationId?: string | null;\n    userId: string;\n  }): Promise<readonly string[]>;\n  getSessionByToken(token: string): Promise<\n    | {\n      active?: boolean;\n      active_organization_id?: string | null;\n      expires_at?: Date | string;\n      id: string;\n      user_id: string;\n    }\n    | undefined\n  >;\n  getUserById(id: string): Promise<\n    | {\n      ban_expires?: Date | string | null;\n      banned?: boolean | null;\n      grants?: readonly string[];\n      id: string;\n      metadata?: Record<string, unknown> | string | null;\n      rights?: readonly string[];\n      role?: string | null;\n    }\n    | undefined\n  >;\n}\n\nexport type AthenaRuntimeSessionLookupFn = (\n  token: string,\n) =>\n  | Promise<AthenaRuntimeSessionLookup | null>\n  | AthenaRuntimeSessionLookup\n  | null;\n\nexport type AthenaRuntimeAuthConfig =\n  | false\n  | {\n    authorization?: AthenaPrincipalRightsProjection;\n    lookupSession?: AthenaRuntimeSessionLookupFn;\n    mode: \"athena-session\";\n    stores?: AthenaRuntimeAuthSessionStore;\n    verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n  }\n  | {\n    mode: \"custom\";\n    resolvePrincipal: AthenaPrincipalResolver;\n  }\n  | {\n    mode: \"service\";\n    principal: AthenaPrincipalInput;\n  };\n\nexport type AthenaRuntimeAuthMaterial =\n  | { mode: false }\n  | {\n    lookupSession: AthenaRuntimeSessionLookupFn;\n    mode: \"athena-session\";\n    verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n  }\n  | {\n    mode: \"custom\";\n    resolvePrincipal: AthenaPrincipalResolver;\n  }\n  | {\n    mode: \"service\";\n    principal: AthenaPrincipal;\n  };\n\nexport function anonymousAthenaPrincipal(): AthenaPrincipal {\n  return {\n    authenticated: false,\n    grants: Object.freeze([]),\n    rights: Object.freeze([]),\n  };\n}\n\nexport function anonymousResolvedPrincipal(): AthenaResolvedPrincipal {\n  return {\n    authority: \"anonymous\",\n    principal: anonymousAthenaPrincipal(),\n  };\n}\n\nfunction parsePrincipalRights(\n  raw: readonly string[] | undefined,\n  source: AthenaMalformedRightsSource,\n): readonly AthenaRightKey[] {\n  const parsed: AthenaRightKey[] = [];\n  let malformedKeyCount = 0;\n  for (const item of raw ?? []) {\n    if (typeof item !== \"string\") {\n      malformedKeyCount += 1;\n      continue;\n    }\n    const key = tryParseAthenaRightKey(item);\n    if (key === undefined) {\n      malformedKeyCount += 1;\n      continue;\n    }\n    parsed.push(key);\n  }\n  emitAthenaMalformedRightsDiagnostic(source, malformedKeyCount);\n  return Object.freeze(parsed);\n}\n\nexport function normalizeAthenaPrincipal(\n  principal: AthenaPrincipalInput,\n  options?: { source?: AthenaMalformedRightsSource },\n): AthenaPrincipal {\n  return {\n    authenticated: principal.authenticated === true,\n    ...(principal.userId ? { userId: principal.userId } : {}),\n    ...(principal.sessionId ? { sessionId: principal.sessionId } : {}),\n    ...(principal.organizationId\n      ? { organizationId: principal.organizationId }\n      : {}),\n    ...(principal.role ? { role: principal.role } : {}),\n    grants: Object.freeze([...(principal.grants ?? [])]),\n    rights: parsePrincipalRights(\n      principal.rights,\n      options?.source ?? \"principal\",\n    ),\n    ...(principal.service ? { service: principal.service } : {}),\n    ...(principal.claims\n      ? { claims: Object.freeze({ ...principal.claims }) }\n      : {}),\n  };\n}\n","import {\n\ttype AthenaPrincipal,\n\ttype AthenaPrincipalInput,\n\tnormalizeAthenaPrincipal,\n} from \"../runtime/data/principal.ts\";\nimport { bindPolicyExpr } from \"./bind.ts\";\nimport { decideAthenaPolicy } from \"./decide.ts\";\nimport { evaluatePolicyExpr } from \"./eval-expr.ts\";\nimport {\n\tcreatePolicyRegistry,\n\tnormalizePolicyDefinitions,\n} from \"./registry.ts\";\nimport type {\n\tPolicyActionName,\n\tPolicyExpr,\n\tPolicyIrDocument,\n} from \"./types.ts\";\n\nexport type AthenaPolicyExplainInput = {\n\taction: PolicyActionName;\n\tdocument: PolicyIrDocument | unknown;\n\tprincipal?: unknown;\n\tresource: string;\n\trow?: Record<string, unknown>;\n};\n\nexport type AthenaPolicyExplainResult = {\n\taction: PolicyActionName;\n\tallowed?: boolean;\n\tbound: false;\n\tcomposition: {\n\t\tpermissive: number;\n\t\trestrictive: number;\n\t};\n\tmatchedPolicyIds: readonly string[];\n\tprincipals: unknown[];\n\treason?: string;\n\tresource: string;\n\tunboundCheck?: PolicyExpr;\n\tunboundVisibility?: PolicyExpr;\n};\n\nexport type AthenaPolicySimulateInput = AthenaPolicyExplainInput & {\n\trow: Record<string, unknown>;\n};\n\nexport type AthenaPolicySimulateResult = {\n\taction: PolicyActionName;\n\tallowed: boolean;\n\tbound: true;\n\tmatchedPolicyIds: readonly string[];\n\treason?: string;\n\tresource: string;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n\tif (\n\t\tinput &&\n\t\ttypeof input === \"object\" &&\n\t\tArray.isArray((input as PolicyIrDocument).policies)\n\t) {\n\t\treturn input as PolicyIrDocument;\n\t}\n\treturn {\n\t\tirVersion: 1,\n\t\tpolicies: normalizePolicyDefinitions(input),\n\t};\n}\n\nfunction principalFromInput(input: unknown): AthenaPrincipal {\n\tif (!input || typeof input !== \"object\") {\n\t\treturn normalizeAthenaPrincipal({ authenticated: false });\n\t}\n\tconst record = input as Record<string, unknown>;\n\tconst kind = typeof record.kind === \"string\" ? record.kind : undefined;\n\tconst authenticated =\n\t\trecord.authenticated === true ||\n\t\tkind === \"authenticated\" ||\n\t\tkind === \"admin\" ||\n\t\tkind === \"role\" ||\n\t\tkind === \"service\";\n\tconst claims =\n\t\trecord.claims && typeof record.claims === \"object\"\n\t\t\t? (record.claims as Record<string, unknown>)\n\t\t\t: undefined;\n\tconst principal: AthenaPrincipalInput = {\n\t\tauthenticated,\n\t\tgrants: Array.isArray(record.grants)\n\t\t\t? record.grants.map((item) => String(item))\n\t\t\t: [],\n\t\trights: Array.isArray(record.rights)\n\t\t\t? record.rights.map((item) => String(item))\n\t\t\t: [],\n\t\t...(typeof record.userId === \"string\" ? { userId: record.userId } : {}),\n\t\t...(typeof record.organizationId === \"string\"\n\t\t\t? { organizationId: record.organizationId }\n\t\t\t: {}),\n\t\t...(typeof record.sessionId === \"string\"\n\t\t\t? { sessionId: record.sessionId }\n\t\t\t: {}),\n\t\t...(typeof record.role === \"string\"\n\t\t\t? { role: record.role }\n\t\t\t: kind === \"role\" && typeof record.name === \"string\"\n\t\t\t\t? { role: record.name }\n\t\t\t\t: {}),\n\t\t...(typeof record.service === \"string\"\n\t\t\t? { service: record.service }\n\t\t\t: {}),\n\t\t...(claims ? { claims } : {}),\n\t};\n\treturn normalizeAthenaPrincipal(principal);\n}\n\n/**\n * Structural interrogation of compiled IR. Does not bind row operands.\n * Passing `row` is ignored so this never claims bound evaluation.\n */\nexport function explainAthenaPolicy(\n\tinput: AthenaPolicyExplainInput,\n): AthenaPolicyExplainResult {\n\tconst document = asDocument(input.document);\n\tconst principal = principalFromInput(input.principal);\n\tconst registry = createPolicyRegistry({\n\t\tdefinitions: document,\n\t\tmode: \"observe\",\n\t});\n\tconst decision = decideAthenaPolicy(registry, {\n\t\taction: input.action,\n\t\tprincipal,\n\t\tresource: input.resource,\n\t});\n\tconst matching = document.policies.filter((item) =>\n\t\tdecision.matchedPolicyIds.includes(item.id),\n\t);\n\treturn {\n\t\taction: input.action,\n\t\tallowed: decision.allowed,\n\t\tbound: false,\n\t\tcomposition: {\n\t\t\tpermissive: matching.filter((item) => item.composition === \"permissive\")\n\t\t\t\t.length,\n\t\t\trestrictive: matching.filter((item) => item.composition === \"restrictive\")\n\t\t\t\t.length,\n\t\t},\n\t\tmatchedPolicyIds: decision.matchedPolicyIds,\n\t\tprincipals: matching.flatMap((item) => item.principals),\n\t\treason: decision.reason,\n\t\tresource: input.resource,\n\t\t...(decision.check ? { unboundCheck: decision.check } : {}),\n\t\t...(decision.visibility ? { unboundVisibility: decision.visibility } : {}),\n\t};\n}\n\n/**\n * Concrete evaluator: binds subject slots and evaluates against `--row`.\n */\nexport function simulateAthenaPolicy(\n\tinput: AthenaPolicySimulateInput,\n): AthenaPolicySimulateResult {\n\tconst document = asDocument(input.document);\n\tconst principal = principalFromInput(input.principal);\n\tconst registry = createPolicyRegistry({\n\t\tdefinitions: document,\n\t\tmode: \"observe\",\n\t});\n\tconst decision = decideAthenaPolicy(registry, {\n\t\taction: input.action,\n\t\tprincipal,\n\t\tresource: input.resource,\n\t});\n\tif (!decision.allowed) {\n\t\treturn {\n\t\t\taction: input.action,\n\t\t\tallowed: false,\n\t\t\tbound: true,\n\t\t\tmatchedPolicyIds: decision.matchedPolicyIds,\n\t\t\treason: decision.reason,\n\t\t\tresource: input.resource,\n\t\t};\n\t}\n\tlet allowed = true;\n\tif (decision.visibility) {\n\t\tconst bound = bindPolicyExpr(decision.visibility, principal);\n\t\tallowed = evaluatePolicyExpr(bound, input.row);\n\t}\n\tif (allowed && decision.check) {\n\t\tconst bound = bindPolicyExpr(decision.check, principal);\n\t\tallowed = evaluatePolicyExpr(bound, input.row);\n\t}\n\treturn {\n\t\taction: input.action,\n\t\tallowed,\n\t\tbound: true,\n\t\tmatchedPolicyIds: decision.matchedPolicyIds,\n\t\treason: allowed ? \"allowed\" : \"row_predicate\",\n\t\tresource: input.resource,\n\t};\n}\n","import { normalizePolicyDefinitions } from \"./registry.ts\";\nimport {\n\tACTION_BITS,\n\ttype PolicyActionName,\n\ttype PolicyDefinition,\n\ttype PolicyExpr,\n\ttype PolicyIrDocument,\n\ttype PolicyOperand,\n} from \"./types.ts\";\n\nexport type AthenaPolicyLintSeverity = \"error\" | \"warning\" | \"info\";\n\nexport type AthenaPolicyLintFinding = {\n\tcode: string;\n\tmessage: string;\n\tpolicyId?: string;\n\tseverity: AthenaPolicyLintSeverity;\n};\n\nexport type AthenaPolicyLintReport = {\n\tfindings: AthenaPolicyLintFinding[];\n};\n\nexport type AthenaPolicyLintOptions = {\n\tcolumnHints?: Record<string, readonly string[]>;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n\tif (\n\t\tinput &&\n\t\ttypeof input === \"object\" &&\n\t\tArray.isArray((input as PolicyIrDocument).policies)\n\t) {\n\t\treturn input as PolicyIrDocument;\n\t}\n\treturn {\n\t\tirVersion: 1,\n\t\tpolicies: normalizePolicyDefinitions(input),\n\t};\n}\n\nfunction walkOperands(\n\texpr: PolicyExpr | undefined,\n\tvisit: (operand: PolicyOperand) => void,\n): void {\n\tif (!expr) {\n\t\treturn;\n\t}\n\tswitch (expr.op) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\t\tvisit(expr.left);\n\t\t\tvisit(expr.right);\n\t\t\treturn;\n\t\tcase \"is_null\":\n\t\tcase \"is_not_null\":\n\t\t\tvisit(expr.operand);\n\t\t\treturn;\n\t\tcase \"in\":\n\t\t\tvisit(expr.needle);\n\t\t\tfor (const item of expr.haystack) {\n\t\t\t\tvisit(item);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"and\":\n\t\tcase \"or\":\n\t\t\tfor (const child of expr.exprs) {\n\t\t\t\twalkOperands(child, visit);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"not\":\n\t\t\twalkOperands(expr.expr, visit);\n\t}\n}\n\nfunction hasAction(definition: PolicyDefinition, action: PolicyActionName): boolean {\n\treturn (definition.actions & ACTION_BITS[action]) !== 0;\n}\n\nfunction isPublicPrincipal(definition: PolicyDefinition): boolean {\n\treturn definition.principals.some((item) => item.kind === \"public\");\n}\n\nfunction hintedColumns(\n\thints: Record<string, readonly string[]> | undefined,\n\ttable: string,\n): Set<string> | undefined {\n\tif (!hints) {\n\t\treturn undefined;\n\t}\n\tconst direct = hints[table];\n\tif (direct) {\n\t\treturn new Set(direct);\n\t}\n\tfor (const [key, columns] of Object.entries(hints)) {\n\t\tif (key === table || key.endsWith(`.${table}`) || table.endsWith(`.${key}`)) {\n\t\t\treturn new Set(columns);\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Lint authored Policy IR by inspecting expressions (and optional column\n * hints from config). Does not read IR authoring sugar.\n */\nexport function lintAthenaPolicy(\n\tdocument: unknown,\n\toptions?: AthenaPolicyLintOptions,\n): AthenaPolicyLintReport {\n\tconst doc = asDocument(document);\n\tconst findings: AthenaPolicyLintFinding[] = [];\n\n\tfor (const definition of doc.policies) {\n\t\tif (hasAction(definition, \"update\") && isPublicPrincipal(definition)) {\n\t\t\tconst conditional = Boolean(definition.visibility || definition.check);\n\t\t\tif (conditional) {\n\t\t\t\tfindings.push({\n\t\t\t\t\tcode: \"POL-PUBLIC-UPDATE-CONDITIONAL\",\n\t\t\t\t\tmessage: `Policy ${definition.id} allows public UPDATE under a row predicate.`,\n\t\t\t\t\tpolicyId: definition.id,\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfindings.push({\n\t\t\t\t\tcode: \"POL-PUBLIC-UPDATE-UNCONDITIONAL\",\n\t\t\t\t\tmessage: `Policy ${definition.id} allows unconditional public UPDATE.`,\n\t\t\t\t\tpolicyId: definition.id,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst columns = hintedColumns(options?.columnHints, definition.resource.table);\n\t\tif (columns) {\n\t\t\tconst visit = (operand: PolicyOperand) => {\n\t\t\t\tif (operand.kind !== \"column\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst logical = operand.column.logical;\n\t\t\t\tconst physical = operand.column.physical;\n\t\t\t\tif (columns.has(logical) || (physical && columns.has(physical))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfindings.push({\n\t\t\t\t\tcode: \"POL-COLUMN-HINT-UNKNOWN\",\n\t\t\t\t\tmessage: `Policy ${definition.id} references column \"${logical}\" not listed in column hints.`,\n\t\t\t\t\tpolicyId: definition.id,\n\t\t\t\t\tseverity: \"info\",\n\t\t\t\t});\n\t\t\t};\n\t\t\twalkOperands(definition.visibility, visit);\n\t\t\twalkOperands(definition.check, visit);\n\t\t}\n\t}\n\n\treturn { findings };\n}\n","import type { SchemaDiffOperation } from \"../schema/diff/types.ts\";\nimport { normalizePolicyDefinitions } from \"./registry.ts\";\nimport type {\n\tPolicyDefinition,\n\tPolicyExpr,\n\tPolicyIrDocument,\n\tPolicyOperand,\n} from \"./types.ts\";\nimport { resourceKeys } from \"./validate-ir.ts\";\n\nexport type AthenaPolicySchemaImpactHit = {\n\tmodel: string;\n\toperations: string[];\n\tpolicyId: string;\n\tresource: string;\n\ttable: string;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n\tif (\n\t\tinput &&\n\t\ttypeof input === \"object\" &&\n\t\tArray.isArray((input as PolicyIrDocument).policies)\n\t) {\n\t\treturn input as PolicyIrDocument;\n\t}\n\treturn {\n\t\tirVersion: 1,\n\t\tpolicies: normalizePolicyDefinitions(input),\n\t};\n}\n\nfunction walkOperands(\n\texpr: PolicyExpr | undefined,\n\tvisit: (operand: PolicyOperand) => void,\n): void {\n\tif (!expr) {\n\t\treturn;\n\t}\n\tswitch (expr.op) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\t\tvisit(expr.left);\n\t\t\tvisit(expr.right);\n\t\t\treturn;\n\t\tcase \"is_null\":\n\t\tcase \"is_not_null\":\n\t\t\tvisit(expr.operand);\n\t\t\treturn;\n\t\tcase \"in\":\n\t\t\tvisit(expr.needle);\n\t\t\tfor (const item of expr.haystack) {\n\t\t\t\tvisit(item);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"and\":\n\t\tcase \"or\":\n\t\t\tfor (const child of expr.exprs) {\n\t\t\t\twalkOperands(child, visit);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"not\":\n\t\t\twalkOperands(expr.expr, visit);\n\t}\n}\n\nfunction columnNames(definition: PolicyDefinition): Set<string> {\n\tconst names = new Set<string>();\n\tconst visit = (operand: PolicyOperand) => {\n\t\tif (operand.kind !== \"column\") {\n\t\t\treturn;\n\t\t}\n\t\tnames.add(operand.column.logical);\n\t\tif (operand.column.physical) {\n\t\t\tnames.add(operand.column.physical);\n\t\t}\n\t};\n\twalkOperands(definition.visibility, visit);\n\twalkOperands(definition.check, visit);\n\treturn names;\n}\n\nfunction tableIdentity(op: SchemaDiffOperation): {\n\tname?: string;\n\tschema?: string;\n} {\n\tif (\n\t\top.kind === \"drop_table\" ||\n\t\top.kind === \"drop_column\" ||\n\t\top.kind === \"rename_column\" ||\n\t\top.kind === \"add_column\" ||\n\t\top.kind === \"alter_column\"\n\t) {\n\t\treturn { name: op.table.name, schema: op.table.schema };\n\t}\n\tif (op.kind === \"rename_table\") {\n\t\treturn { name: op.from.name, schema: op.from.schema };\n\t}\n\tif (op.kind === \"create_table\") {\n\t\treturn { name: op.table.name, schema: op.table.schema };\n\t}\n\treturn {};\n}\n\nfunction policyMatchesTable(\n\tdefinition: PolicyDefinition,\n\ttableName: string | undefined,\n\tschema?: string,\n): boolean {\n\tif (!tableName) {\n\t\treturn false;\n\t}\n\tconst keys = resourceKeys(definition.resource);\n\tif (keys.includes(tableName) || definition.resource.table === tableName) {\n\t\treturn true;\n\t}\n\tif (schema && keys.includes(`${schema}.${tableName}`)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction impactKinds(op: SchemaDiffOperation, columns: Set<string>): boolean {\n\tif (op.kind === \"drop_table\" || op.kind === \"rename_table\") {\n\t\treturn true;\n\t}\n\tif (op.kind === \"drop_column\") {\n\t\treturn columns.has(op.column.name);\n\t}\n\tif (op.kind === \"rename_column\") {\n\t\treturn columns.has(op.from) || columns.has(op.to);\n\t}\n\treturn false;\n}\n\n/**\n * Report authored policies impacted by dropped/renamed tables/columns\n * referenced in policy expressions. Analysis only — not a schema engine.\n */\nexport function reportAthenaPolicySchemaImpact(options: {\n\toperations: readonly SchemaDiffOperation[];\n\tpolicies: unknown;\n}): AthenaPolicySchemaImpactHit[] {\n\tconst document = asDocument(options.policies);\n\tconst hits = new Map<string, AthenaPolicySchemaImpactHit>();\n\n\tfor (const definition of document.policies) {\n\t\tconst columns = columnNames(definition);\n\t\tconst operations: string[] = [];\n\t\tfor (const op of options.operations) {\n\t\t\tconst identity = tableIdentity(op);\n\t\t\tif (!policyMatchesTable(definition, identity.name, identity.schema)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!impactKinds(op, columns) && op.kind !== \"drop_table\" && op.kind !== \"rename_table\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\top.kind === \"drop_table\" ||\n\t\t\t\top.kind === \"rename_table\" ||\n\t\t\t\timpactKinds(op, columns)\n\t\t\t) {\n\t\t\t\toperations.push(op.kind);\n\t\t\t}\n\t\t}\n\t\tif (operations.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst table = definition.resource.table;\n\t\tconst resource = definition.resource.schema\n\t\t\t? `${definition.resource.schema}.${table}`\n\t\t\t: table;\n\t\thits.set(definition.id, {\n\t\t\tmodel: table,\n\t\t\toperations: [...new Set(operations)],\n\t\t\tpolicyId: definition.id,\n\t\t\tresource,\n\t\t\ttable,\n\t\t});\n\t}\n\n\treturn [...hits.values()];\n}\n","/**\n * Athena Policy authoring surface (`@xylex-group/athena/policy`).\n *\n * Browser-safe: expression builders + IR types only.\n * Node-only import/compiler tooling must not be re-exported here (ACT-POL-07).\n */\n\nexport type {\n\tDecisionOutcome,\n\tDecisionReasonKind,\n\tPrincipalKind,\n\tPublicAuthorizationMessage,\n} from \"../authorization/types.ts\";\nexport { publicAuthorizationMessage } from \"../authorization/types.ts\";\nexport { applyAthenaPolicyDecision } from \"./apply.ts\";\nexport { bindPolicyExpr } from \"./bind.ts\";\nexport { coverageAthenaPolicy } from \"./coverage.ts\";\nexport type {\n\tAthenaPolicyCoverageCell,\n\tAthenaPolicyCoverageCellKind,\n\tAthenaPolicyCoverageReport,\n} from \"./coverage.ts\";\nexport { decideAthenaPolicy } from \"./decide.ts\";\nexport { explainAthenaPolicy, simulateAthenaPolicy } from \"./explain.ts\";\nexport type {\n\tAthenaPolicyExplainInput,\n\tAthenaPolicyExplainResult,\n\tAthenaPolicySimulateInput,\n\tAthenaPolicySimulateResult,\n} from \"./explain.ts\";\nexport type {\n\tAthenaPolicyDecision,\n\tAthenaPolicyDecisionReason,\n\tAthenaPolicyMode,\n} from \"./decision.ts\";\nexport { actionFromRuntimeOperation } from \"./decision.ts\";\nexport { definePolicies, serializePolicyIr } from \"./define-policies.ts\";\nexport { evaluatePolicyExpr } from \"./eval-expr.ts\";\nexport type {\n\tPolicyExprNode,\n\tPolicyOperandInput,\n\tPolicyOperandNode,\n} from \"./expr-builders.ts\";\nexport { and, auth, not, or } from \"./expr-builders.ts\";\nexport { canonicalizeDocument, fingerprintDocument } from \"./fingerprint.ts\";\nexport { lintAthenaPolicy } from \"./lint.ts\";\nexport type {\n\tAthenaPolicyLintFinding,\n\tAthenaPolicyLintOptions,\n\tAthenaPolicyLintReport,\n\tAthenaPolicyLintSeverity,\n} from \"./lint.ts\";\nexport {\n\tmatchPolicyPrincipal,\n\tpolicyAppliesToPrincipal,\n} from \"./match-principal.ts\";\nexport type {\n\tAuthoredPolicy,\n\tPolicyActionConfig,\n\tPolicyConfig,\n\tPolicyPrincipalInput,\n} from \"./policy.ts\";\nexport { policy } from \"./policy.ts\";\nexport {\n\tauthenticatedOnly,\n\torganizationScoped,\n\townerOrRole,\n\tpublicRead,\n\troleRestricted,\n\tserviceOnly,\n\ttenantScoped,\n\tuserOwned,\n} from \"./presets.ts\";\nexport { reportAthenaPolicySchemaImpact } from \"./schema-impact.ts\";\nexport type { AthenaPolicySchemaImpactHit } from \"./schema-impact.ts\";\nexport type {\n\tAthenaPolicyRegistry,\n\tCreatePolicyRegistryOptions,\n} from \"./registry.ts\";\nexport {\n\tcreatePolicyRegistry,\n\tnormalizePolicyDefinitions,\n} from \"./registry.ts\";\nexport type { PolicyRowProxy } from \"./row.ts\";\nexport type {\n\tPolicyActionName,\n\tPolicyCompositionName,\n\tPolicyDefinition,\n\tPolicyExpr,\n\tPolicyIrDocument,\n\tPolicyOperand,\n\tPolicyPrincipal,\n\tPolicyResourceBinding,\n\tPolicyResourceRef,\n\tPolicyValue,\n\tSubjectRef,\n\tAthenaResourceIdentity,\n\tAthenaResourceRef,\n} from \"./types.ts\";\nexport {\n\tACTION_BITS,\n\tPOLICY_IR_VERSION,\n} from \"./types.ts\";\n","import { dirname, isAbsolute, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { loadAthenaConfig } from \"../../../generator/config.ts\";\nimport type { AthenaConfig } from \"../../../generator/types.ts\";\nimport {\n\tnormalizePolicyDefinitions,\n\ttype PolicyIrDocument,\n\tPOLICY_IR_VERSION,\n} from \"../../../policy/index.ts\";\n\nexport type LoadedPolicyDocument = {\n\tconfig: AthenaConfig;\n\tconfigPath: string;\n\tdocument: PolicyIrDocument;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n\tif (\n\t\tinput &&\n\t\ttypeof input === \"object\" &&\n\t\tArray.isArray((input as PolicyIrDocument).policies)\n\t) {\n\t\treturn input as PolicyIrDocument;\n\t}\n\treturn {\n\t\tirVersion: POLICY_IR_VERSION,\n\t\tpolicies: normalizePolicyDefinitions(input),\n\t};\n}\n\nfunction pickModuleExport(module: Record<string, unknown>): unknown {\n\tif (module.default !== undefined) {\n\t\tconst exported = module.default;\n\t\tif (exported && typeof exported === \"object\") {\n\t\t\tconst record = exported as Record<string, unknown>;\n\t\t\tif (Array.isArray(record.policies) || Array.isArray(record.definitions)) {\n\t\t\t\treturn exported;\n\t\t\t}\n\t\t\tif (record.policies && typeof record.policies === \"object\") {\n\t\t\t\treturn record.policies;\n\t\t\t}\n\t\t}\n\t\treturn exported;\n\t}\n\tif (module.policies !== undefined) {\n\t\treturn module.policies;\n\t}\n\tif (module.document !== undefined) {\n\t\treturn module.document;\n\t}\n\treturn module;\n}\n\nasync function importPoliciesPath(\n\tconfigPath: string,\n\trelativePath: string,\n): Promise<unknown> {\n\tconst base = dirname(configPath);\n\tconst absolute = isAbsolute(relativePath)\n\t\t? relativePath\n\t\t: resolve(base, relativePath);\n\tconst module = (await import(pathToFileURL(absolute).href)) as Record<\n\t\tstring,\n\t\tunknown\n\t>;\n\treturn pickModuleExport(module);\n}\n\nexport async function loadPolicyDocument(options: {\n\tconfigPath?: string;\n\tcwd: string;\n}): Promise<LoadedPolicyDocument> {\n\tconst loaded = await loadAthenaConfig({\n\t\tconfigPath: options.configPath,\n\t\tcwd: options.cwd,\n\t});\n\tconst project = loaded.config;\n\tif (project.policies != null) {\n\t\tconst definitions = project.policies.definitions ?? project.policies;\n\t\treturn {\n\t\t\tconfig: project,\n\t\t\tconfigPath: loaded.configPath,\n\t\t\tdocument: asDocument(definitions),\n\t\t};\n\t}\n\tconst toolingPath = project.tooling?.policies;\n\tif (!toolingPath) {\n\t\treturn {\n\t\t\tconfig: project,\n\t\t\tconfigPath: loaded.configPath,\n\t\t\tdocument: { irVersion: POLICY_IR_VERSION, policies: [] },\n\t\t};\n\t}\n\tconst imported = await importPoliciesPath(loaded.configPath, toolingPath);\n\treturn {\n\t\tconfig: project,\n\t\tconfigPath: loaded.configPath,\n\t\tdocument: asDocument(imported),\n\t};\n}\n","/**\n * Branded stable id for a schema object. Same {@link SchemaObjectId} plus a\n * changed physical name is a rename, not drop+create.\n */\ndeclare const schemaObjectIdBrand: unique symbol;\n\nexport type SchemaObjectId = string & {\n\treadonly [schemaObjectIdBrand]: \"SchemaObjectId\";\n};\n\nexport interface SchemaNameTriple {\n\treadonly database: string;\n\treadonly namespace: string;\n\treadonly name: string;\n}\n\n/** Logical (Athena) vs physical (backend) identity. */\nexport interface SchemaObjectIdentity {\n\treadonly logical: SchemaNameTriple;\n\treadonly physical: SchemaNameTriple;\n}\n\nexport function asSchemaObjectId(id: string): SchemaObjectId {\n\treturn id as SchemaObjectId;\n}\n\nexport function schemaNameTriple(\n\tdatabase: string,\n\tnamespace: string,\n\tname: string,\n): SchemaNameTriple {\n\treturn { database, namespace, name };\n}\n\nexport function schemaObjectIdentity(\n\tdatabase: string,\n\tnamespace: string,\n\tname: string,\n\tphysical: Partial<SchemaNameTriple> = {},\n): SchemaObjectIdentity {\n\treturn {\n\t\tlogical: schemaNameTriple(database, namespace, name),\n\t\tphysical: schemaNameTriple(\n\t\t\tphysical.database ?? database,\n\t\t\tphysical.namespace ?? namespace,\n\t\t\tphysical.name ?? name,\n\t\t),\n\t};\n}\n\nexport function physicalIdentityKey(identity: SchemaObjectIdentity): string {\n\tconst p = identity.physical;\n\treturn `${p.database}\\u0000${p.namespace}\\u0000${p.name}`;\n}\n","/** Canonical Schema IR document kind. */\nexport const ATHENA_SCHEMA_IR_KIND = \"athena.schema\" as const;\n\n/** Schema IR document version. Bump only on breaking IR shape changes. */\nexport const ATHENA_SCHEMA_IR_VERSION = 2 as const;\n\nexport type AthenaSchemaIrKind = typeof ATHENA_SCHEMA_IR_KIND;\nexport type AthenaSchemaIrVersion = typeof ATHENA_SCHEMA_IR_VERSION;\n","import type { AthenaSchemaIr } from \"./document.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nexport class SchemaIrError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SchemaIrError\";\n\t}\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requireArray(value: unknown, label: string): unknown[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new SchemaIrError(`${label} must be an array`);\n\t}\n\treturn value;\n}\n\nfunction requireNonEmptyId(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new SchemaIrError(`${label}.id is required`);\n\t}\n\treturn value;\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new SchemaIrError(`${label} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction requireOptionalNullableString(value: unknown, label: string): void {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new SchemaIrError(`${label} must be a string or null`);\n\t}\n}\n\nfunction requireStringArray(value: unknown, label: string): string[] {\n\tconst items = requireArray(value, label);\n\treturn items.map((entry, index) =>\n\t\trequireNonEmptyString(entry, `${label}[${index}]`),\n\t);\n}\n\nfunction requireNonEmptyStringArray(value: unknown, label: string): string[] {\n\tconst items = requireStringArray(value, label);\n\tif (items.length === 0) {\n\t\tthrow new SchemaIrError(`${label} is required`);\n\t}\n\treturn items;\n}\n\nfunction requireOptionalIntegerParameter(\n\tvalue: unknown,\n\tlabel: string,\n\tmin: number,\n): void {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\tif (typeof value !== \"number\" || !Number.isInteger(value) || value < min) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label} must be an integer >= ${String(min)} or null`,\n\t\t);\n\t}\n}\n\nfunction requireUniqueId(id: string, seen: Set<string>, label: string): void {\n\tif (seen.has(id)) {\n\t\tthrow new SchemaIrError(`Duplicate ${label} id \"${id}\"`);\n\t}\n\tseen.add(id);\n}\n\nfunction requireIdentity(value: unknown, label: string): void {\n\tif (!isObject(value)) {\n\t\tthrow new SchemaIrError(`${label}.identity is required`);\n\t}\n\tfor (const axis of [\"logical\", \"physical\"] as const) {\n\t\tconst side = value[axis];\n\t\tif (!isObject(side)) {\n\t\t\tthrow new SchemaIrError(`${label}.identity.${axis} is required`);\n\t\t}\n\t\tfor (const key of [\"database\", \"namespace\", \"name\"] as const) {\n\t\t\tif (typeof side[key] !== \"string\") {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`${label}.identity.${axis}.${key} must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (axis === \"physical\") {\n\t\t\trequireNonEmptyString(side.name, `${label}.identity.physical.name`);\n\t\t}\n\t}\n}\n\nfunction physicalTableIdentityKey(identity: unknown): string {\n\tif (!isObject(identity) || !isObject(identity.physical)) {\n\t\treturn \"\";\n\t}\n\tconst physical = identity.physical;\n\tif (\n\t\ttypeof physical.database !== \"string\" ||\n\t\ttypeof physical.namespace !== \"string\" ||\n\t\ttypeof physical.name !== \"string\"\n\t) {\n\t\treturn \"\";\n\t}\n\treturn `${physical.database}\\0${physical.namespace}\\0${physical.name}`;\n}\n\nfunction physicalNamespaceScopeKey(identity: unknown): string {\n\tif (!isObject(identity) || !isObject(identity.physical)) {\n\t\treturn \"\";\n\t}\n\tconst physical = identity.physical;\n\tif (\n\t\ttypeof physical.database !== \"string\" ||\n\t\ttypeof physical.namespace !== \"string\"\n\t) {\n\t\treturn \"\";\n\t}\n\treturn `${physical.database}\\0${physical.namespace}`;\n}\n\nconst TYPE_KINDS = new Set([\"scalar\", \"enum\", \"native\"]);\n\nfunction requireType(\n\tvalue: unknown,\n\tlabel: string,\n\tenumRefs: Array<{ enumId: string; label: string }>,\n): void {\n\tif (!isObject(value)) {\n\t\tthrow new SchemaIrError(`${label}.type is required`);\n\t}\n\tif (typeof value.kind !== \"string\" || !TYPE_KINDS.has(value.kind)) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label}.type.kind \"${String(value.kind)}\" is unsupported`,\n\t\t);\n\t}\n\tif (!isObject(value.native)) {\n\t\tthrow new SchemaIrError(`${label}.type.native is required`);\n\t}\n\tif (\n\t\ttypeof value.native.backend !== \"string\" ||\n\t\tvalue.native.backend.length === 0\n\t) {\n\t\tthrow new SchemaIrError(`${label}.type.native.backend is required`);\n\t}\n\tif (typeof value.native.name !== \"string\" || value.native.name.length === 0) {\n\t\tthrow new SchemaIrError(`${label}.type.native.name is required`);\n\t}\n\tif (\n\t\ttypeof value.native.arrayDimensions !== \"number\" ||\n\t\t!Number.isInteger(value.native.arrayDimensions) ||\n\t\tvalue.native.arrayDimensions < 0\n\t) {\n\t\tthrow new SchemaIrError(\n\t\t\t`${label}.type.native.arrayDimensions must be a nonnegative integer`,\n\t\t);\n\t}\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.length,\n\t\t`${label}.type.native.length`,\n\t\t1,\n\t);\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.precision,\n\t\t`${label}.type.native.precision`,\n\t\t1,\n\t);\n\trequireOptionalIntegerParameter(\n\t\tvalue.native.scale,\n\t\t`${label}.type.native.scale`,\n\t\t0,\n\t);\n\tif (value.kind === \"scalar\") {\n\t\tif (typeof value.semantic !== \"string\" || value.semantic.length === 0) {\n\t\t\tthrow new SchemaIrError(`${label}.type.semantic is required`);\n\t\t}\n\t}\n\tif (value.kind === \"enum\") {\n\t\tif (typeof value.enumId !== \"string\" || value.enumId.length === 0) {\n\t\t\tthrow new SchemaIrError(`${label}.type.enumId is required`);\n\t\t}\n\t\tenumRefs.push({ enumId: value.enumId, label });\n\t}\n}\n\nconst CONSTRAINT_KINDS = new Set([\n\t\"primary_key\",\n\t\"unique\",\n\t\"foreign_key\",\n\t\"check\",\n]);\n\nconst REFERENTIAL_ACTIONS = new Set([\n\t\"no_action\",\n\t\"restrict\",\n\t\"cascade\",\n\t\"set_null\",\n\t\"set_default\",\n]);\n\nconst RELATION_CARDINALITIES = new Set([\"1:1\", \"1:n\", \"n:1\", \"n:n\"]);\nconst INDEX_DIRECTIONS = new Set([\"asc\", \"desc\"]);\n\nfunction requireKnownColumns(\n\tcolumns: string[],\n\tknown: Set<string>,\n\tlabel: string,\n): void {\n\tfor (const column of columns) {\n\t\tif (!known.has(column)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`${label} \"${column}\" does not identify a column`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction requireUniqueColumnNames(columns: string[], label: string): void {\n\tconst seen = new Set<string>();\n\tfor (const column of columns) {\n\t\tif (seen.has(column)) {\n\t\t\tthrow new SchemaIrError(`${label} must not repeat column \"${column}\"`);\n\t\t}\n\t\tseen.add(column);\n\t}\n}\n\nfunction validateConstraint(\n\titem: Record<string, unknown>,\n\tsourceColumns: Set<string>,\n\tpendingFks: Array<{ targetTableId: string; targetColumns: string[] }>,\n): void {\n\tif (typeof item.kind !== \"string\" || item.kind.length === 0) {\n\t\tthrow new SchemaIrError(\"SchemaConstraint.kind is required\");\n\t}\n\tif (!CONSTRAINT_KINDS.has(item.kind)) {\n\t\tthrow new SchemaIrError(\n\t\t\t`SchemaConstraint.kind \"${item.kind}\" is unsupported`,\n\t\t);\n\t}\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaConstraint.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tif (item.kind === \"check\") {\n\t\tif (typeof item.expression !== \"string\" || item.expression.length === 0) {\n\t\t\tthrow new SchemaIrError(\"SchemaConstraint.expression is required\");\n\t\t}\n\t\treturn;\n\t}\n\tconst columns = requireNonEmptyStringArray(\n\t\titem.columns,\n\t\t\"SchemaConstraint.columns\",\n\t);\n\trequireKnownColumns(columns, sourceColumns, \"SchemaConstraint.columns\");\n\trequireUniqueColumnNames(columns, \"SchemaConstraint.columns\");\n\tif (item.kind === \"foreign_key\") {\n\t\tconst targetTableId = requireNonEmptyString(\n\t\t\titem.targetTableId,\n\t\t\t\"SchemaConstraint.targetTableId\",\n\t\t);\n\t\tconst targetColumns = requireNonEmptyStringArray(\n\t\t\titem.targetColumns,\n\t\t\t\"SchemaConstraint.targetColumns\",\n\t\t);\n\t\trequireUniqueColumnNames(targetColumns, \"SchemaConstraint.targetColumns\");\n\t\tif (columns.length !== targetColumns.length) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaConstraint.targetColumns must have the same length as SchemaConstraint.columns\",\n\t\t\t);\n\t\t}\n\t\tif (item.onDelete !== undefined) {\n\t\t\tif (\n\t\t\t\ttypeof item.onDelete !== \"string\" ||\n\t\t\t\t!REFERENTIAL_ACTIONS.has(item.onDelete)\n\t\t\t) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaConstraint.onDelete \"${String(item.onDelete)}\" is unsupported`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (item.onUpdate !== undefined) {\n\t\t\tif (\n\t\t\t\ttypeof item.onUpdate !== \"string\" ||\n\t\t\t\t!REFERENTIAL_ACTIONS.has(item.onUpdate)\n\t\t\t) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaConstraint.onUpdate \"${String(item.onUpdate)}\" is unsupported`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tpendingFks.push({ targetTableId, targetColumns });\n\t}\n}\n\nfunction validateColumn(\n\titem: Record<string, unknown>,\n\tenumRefs: Array<{ enumId: string; label: string }>,\n): void {\n\trequireIdentity(item.identity, \"SchemaColumn\");\n\trequireType(item.type, \"SchemaColumn\", enumRefs);\n\tif (typeof item.nullable !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.nullable must be a boolean\");\n\t}\n\tif (\n\t\titem.default !== undefined &&\n\t\titem.default !== null &&\n\t\ttypeof item.default !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaColumn.default must be a string or null\");\n\t}\n\tif (item.generated !== undefined && typeof item.generated !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.generated must be a boolean\");\n\t}\n\tif (item.isGenerated !== undefined && typeof item.isGenerated !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaColumn.isGenerated must be a boolean\");\n\t}\n}\n\nfunction validateEnum(item: Record<string, unknown>): void {\n\trequireIdentity(item.identity, \"SchemaEnum\");\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaEnum.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tconst labels = requireStringArray(item.labels, \"SchemaEnum.labels\");\n\tconst seen = new Set<string>();\n\tfor (const label of labels) {\n\t\tif (seen.has(label)) {\n\t\t\tthrow new SchemaIrError(`Duplicate SchemaEnum label \"${label}\"`);\n\t\t}\n\t\tseen.add(label);\n\t}\n}\n\ntype TableCatalogEntry = {\n\tcolumns: Set<string>;\n\tconstraints: Set<string>;\n};\n\ntype PendingRelationThrough = {\n\tsourceColumns: string[];\n\ttableId: string;\n\ttargetColumns: string[];\n};\n\ntype PendingRelation = {\n\tbackingConstraintIds: string[];\n\tsourceColumns: string[] | undefined;\n\tsourceTableId: string;\n\ttargetColumns: string[] | undefined;\n\ttargetTableId: string;\n\tthrough: PendingRelationThrough | undefined;\n};\n\nfunction validateRelation(item: Record<string, unknown>): PendingRelation {\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaRelation.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\ttypeof item.cardinality !== \"string\" ||\n\t\t!RELATION_CARDINALITIES.has(item.cardinality)\n\t) {\n\t\tthrow new SchemaIrError(\n\t\t\t`SchemaRelation.cardinality \"${String(item.cardinality)}\" is unsupported`,\n\t\t);\n\t}\n\tconst sourceTableId = requireNonEmptyString(\n\t\titem.sourceTableId,\n\t\t\"SchemaRelation.sourceTableId\",\n\t);\n\tconst targetTableId = requireNonEmptyString(\n\t\titem.targetTableId,\n\t\t\"SchemaRelation.targetTableId\",\n\t);\n\tif (!Array.isArray(item.backingConstraintIds)) {\n\t\tthrow new SchemaIrError(\n\t\t\t\"SchemaRelation.backingConstraintIds must be an array\",\n\t\t);\n\t}\n\tconst backingConstraintIds = item.backingConstraintIds.map(\n\t\t(backingId, index) =>\n\t\t\trequireNonEmptyString(\n\t\t\t\tbackingId,\n\t\t\t\t`SchemaRelation.backingConstraintIds[${index}]`,\n\t\t\t),\n\t);\n\tconst sourceColumns =\n\t\titem.sourceColumns === undefined\n\t\t\t? undefined\n\t\t\t: requireStringArray(item.sourceColumns, \"SchemaRelation.sourceColumns\");\n\tconst targetColumns =\n\t\titem.targetColumns === undefined\n\t\t\t? undefined\n\t\t\t: requireStringArray(item.targetColumns, \"SchemaRelation.targetColumns\");\n\tlet through: PendingRelation[\"through\"];\n\tif (item.cardinality === \"n:n\" || item.through !== undefined) {\n\t\tif (!isObject(item.through)) {\n\t\t\tthrow new SchemaIrError(\"SchemaRelation.through is required\");\n\t\t}\n\t\tthrough = {\n\t\t\ttableId: requireNonEmptyString(\n\t\t\t\titem.through.tableId,\n\t\t\t\t\"SchemaRelation.through.tableId\",\n\t\t\t),\n\t\t\tsourceColumns: requireStringArray(\n\t\t\t\titem.through.sourceColumns,\n\t\t\t\t\"SchemaRelation.through.sourceColumns\",\n\t\t\t),\n\t\t\ttargetColumns: requireStringArray(\n\t\t\t\titem.through.targetColumns,\n\t\t\t\t\"SchemaRelation.through.targetColumns\",\n\t\t\t),\n\t\t};\n\t}\n\treturn {\n\t\tbackingConstraintIds,\n\t\tsourceColumns,\n\t\tsourceTableId,\n\t\ttargetColumns,\n\t\ttargetTableId,\n\t\tthrough,\n\t};\n}\n\nfunction validateIndex(\n\titem: Record<string, unknown>,\n\tsourceColumns: Set<string>,\n\tseenIndexNames: Set<string>,\n\tnamespaceScope: string,\n): void {\n\tconst columns = requireArray(item.columns, \"SchemaIndex.columns\");\n\tif (columns.length === 0) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.columns is required\");\n\t}\n\tconst columnNames: string[] = [];\n\tfor (const [index, raw] of columns.entries()) {\n\t\tconst label = `SchemaIndex.columns[${index}]`;\n\t\tif (typeof raw === \"string\") {\n\t\t\trequireNonEmptyString(raw, `${label}.name`);\n\t\t\trequireKnownColumns([raw], sourceColumns, \"SchemaIndex.columns\");\n\t\t\tcolumnNames.push(raw);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isObject(raw)) {\n\t\t\tthrow new SchemaIrError(`${label} must be a string or object`);\n\t\t}\n\t\tconst name = requireNonEmptyString(raw.name, `${label}.name`);\n\t\trequireKnownColumns([name], sourceColumns, \"SchemaIndex.columns\");\n\t\tcolumnNames.push(name);\n\t\tif (\n\t\t\traw.direction !== undefined &&\n\t\t\traw.direction !== null &&\n\t\t\t(typeof raw.direction !== \"string\" ||\n\t\t\t\t!INDEX_DIRECTIONS.has(raw.direction))\n\t\t) {\n\t\t\tthrow new SchemaIrError(`${label}.direction is unsupported`);\n\t\t}\n\t}\n\trequireUniqueColumnNames(columnNames, \"SchemaIndex.columns\");\n\tif (typeof item.unique !== \"boolean\") {\n\t\tthrow new SchemaIrError(\"SchemaIndex.unique must be a boolean\");\n\t}\n\tif (item.name !== undefined && item.name !== null) {\n\t\tif (typeof item.name !== \"string\" || item.name.length === 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"SchemaIndex.name must be a non-empty string or null\",\n\t\t\t);\n\t\t}\n\t\tconst key = `${namespaceScope}\\0${item.name}`;\n\t\tif (seenIndexNames.has(key)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`Duplicate SchemaIndex.name \"${item.name}\" conflicts with a table or index in the same namespace`,\n\t\t\t);\n\t\t}\n\t\tseenIndexNames.add(key);\n\t}\n\tif (\n\t\titem.predicate !== undefined &&\n\t\titem.predicate !== null &&\n\t\ttypeof item.predicate !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.predicate must be a string or null\");\n\t}\n\tif (\n\t\titem.method !== undefined &&\n\t\titem.method !== null &&\n\t\ttypeof item.method !== \"string\"\n\t) {\n\t\tthrow new SchemaIrError(\"SchemaIndex.method must be a string or null\");\n\t}\n}\n\nfunction columnPhysicalName(item: Record<string, unknown>): string {\n\tif (!isObject(item.identity) || !isObject(item.identity.physical)) {\n\t\treturn \"\";\n\t}\n\treturn typeof item.identity.physical.name === \"string\"\n\t\t? item.identity.physical.name\n\t\t: \"\";\n}\n\nfunction validateNamedObjects(\n\tvalues: unknown[],\n\tlabel: string,\n\tseen: Set<string>,\n\tvalidateItem?: (item: Record<string, unknown>) => void,\n): void {\n\tfor (const raw of values) {\n\t\tif (!isObject(raw)) {\n\t\t\tthrow new SchemaIrError(`${label} must be an object`);\n\t\t}\n\t\tconst id = requireNonEmptyId(raw.id, label);\n\t\trequireUniqueId(id, seen, label);\n\t\tvalidateItem?.(raw);\n\t}\n}\n\n/**\n * Fail-closed validation for Athena Schema IR v2.\n * Requires `kind: \"athena.schema\"`, `irVersion: 2`, and `databases[]`.\n * Nested tables, columns, constraints, relations, and indexes must be\n * complete objects with unique non-empty ids.\n */\nexport function validateAthenaSchemaIr(doc: unknown): AthenaSchemaIr {\n\tif (!isObject(doc)) {\n\t\tthrow new SchemaIrError(\"AthenaSchemaIr must be an object\");\n\t}\n\tif (doc.kind !== ATHENA_SCHEMA_IR_KIND) {\n\t\tthrow new SchemaIrError(\n\t\t\t`AthenaSchemaIr.kind must be \"${ATHENA_SCHEMA_IR_KIND}\"`,\n\t\t);\n\t}\n\tif (doc.irVersion !== ATHENA_SCHEMA_IR_VERSION) {\n\t\tthrow new SchemaIrError(\n\t\t\t`AthenaSchemaIr.irVersion must be ${ATHENA_SCHEMA_IR_VERSION}`,\n\t\t);\n\t}\n\tif (!(\"databases\" in doc) || !Array.isArray(doc.databases)) {\n\t\tthrow new SchemaIrError(\"AthenaSchemaIr.databases[] is required\");\n\t}\n\n\tconst seenIds = new Set<string>();\n\tconst seenPhysicalTables = new Set<string>();\n\tconst enumIds = new Set<string>();\n\tconst pendingEnumRefs: Array<{ enumId: string; label: string }> = [];\n\tconst tablesById = new Map<string, TableCatalogEntry>();\n\tconst pendingFks: Array<{ targetTableId: string; targetColumns: string[] }> =\n\t\t[];\n\tconst pendingRelations: PendingRelation[] = [];\n\tconst seenIndexNames = new Set<string>();\n\tfor (const rawDb of doc.databases) {\n\t\tif (!isObject(rawDb)) {\n\t\t\tthrow new SchemaIrError(\"SchemaDatabase must be an object\");\n\t\t}\n\t\tconst dbId = requireNonEmptyId(rawDb.id, \"SchemaDatabase\");\n\t\trequireUniqueId(dbId, seenIds, \"SchemaDatabase\");\n\t\trequireIdentity(rawDb.identity, \"SchemaDatabase\");\n\t\trequireOptionalNullableString(rawDb.backend, \"SchemaDatabase.backend\");\n\t\tif (rawDb.enums !== undefined) {\n\t\t\tvalidateNamedObjects(\n\t\t\t\trequireArray(rawDb.enums, \"SchemaDatabase.enums\"),\n\t\t\t\t\"SchemaEnum\",\n\t\t\t\tseenIds,\n\t\t\t\t(item) => {\n\t\t\t\t\tvalidateEnum(item);\n\t\t\t\t\tenumIds.add(String(item.id));\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst namespaces = rawDb.namespaces ?? rawDb.schemas;\n\t\trequireArray(namespaces, \"SchemaDatabase.namespaces\");\n\t\tfor (const rawNs of namespaces as unknown[]) {\n\t\t\tif (!isObject(rawNs)) {\n\t\t\t\tthrow new SchemaIrError(\"SchemaNamespace must be an object\");\n\t\t\t}\n\t\t\tconst nsId = requireNonEmptyId(rawNs.id, \"SchemaNamespace\");\n\t\t\trequireUniqueId(nsId, seenIds, \"SchemaNamespace\");\n\t\t\trequireIdentity(rawNs.identity, \"SchemaNamespace\");\n\t\t\tconst namespaceScope = physicalNamespaceScopeKey(rawNs.identity);\n\t\t\tif (rawNs.enums !== undefined) {\n\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\trequireArray(rawNs.enums, \"SchemaNamespace.enums\"),\n\t\t\t\t\t\"SchemaEnum\",\n\t\t\t\t\tseenIds,\n\t\t\t\t\t(item) => {\n\t\t\t\t\t\tvalidateEnum(item);\n\t\t\t\t\t\tenumIds.add(String(item.id));\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst tables = requireArray(rawNs.tables, \"SchemaNamespace.tables\");\n\t\t\tfor (const rawTable of tables) {\n\t\t\t\tif (!isObject(rawTable)) {\n\t\t\t\t\tthrow new SchemaIrError(\"SchemaTable must be an object\");\n\t\t\t\t}\n\t\t\t\tconst tableId = requireNonEmptyId(rawTable.id, \"SchemaTable\");\n\t\t\t\trequireUniqueId(tableId, seenIds, \"SchemaTable\");\n\t\t\t\trequireIdentity(rawTable.identity, \"SchemaTable\");\n\t\t\t\tconst tableNamespaceScope =\n\t\t\t\t\tphysicalNamespaceScopeKey(rawTable.identity) || namespaceScope;\n\t\t\t\tconst physicalKey = physicalTableIdentityKey(rawTable.identity);\n\t\t\t\tif (physicalKey.length > 0) {\n\t\t\t\t\tif (seenPhysicalTables.has(physicalKey)) {\n\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t`Duplicate SchemaTable physical identity \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tseenPhysicalTables.add(physicalKey);\n\t\t\t\t\tif (seenIndexNames.has(physicalKey)) {\n\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t`SchemaTable physical name conflicts with an index in the same namespace \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tseenIndexNames.add(physicalKey);\n\t\t\t\t}\n\t\t\t\tconst columns = requireArray(rawTable.columns, \"SchemaTable.columns\");\n\t\t\t\tvalidateNamedObjects(columns, \"SchemaColumn\", seenIds, (item) => {\n\t\t\t\t\tvalidateColumn(item, pendingEnumRefs);\n\t\t\t\t});\n\t\t\t\tconst sourceColumns = new Set<string>();\n\t\t\t\tfor (const rawColumn of columns) {\n\t\t\t\t\tif (isObject(rawColumn)) {\n\t\t\t\t\t\tconst name = columnPhysicalName(rawColumn);\n\t\t\t\t\t\tif (name.length > 0) {\n\t\t\t\t\t\t\tif (sourceColumns.has(name)) {\n\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t`Duplicate SchemaColumn physical name \"${name}\"`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsourceColumns.add(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst tableConstraintIds = new Set<string>();\n\t\t\t\tif (rawTable.constraints !== undefined) {\n\t\t\t\t\tlet primaryKeyCount = 0;\n\t\t\t\t\tconst tableConstraintNames = new Set<string>();\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.constraints, \"SchemaTable.constraints\"),\n\t\t\t\t\t\t\"SchemaConstraint\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\ttableConstraintIds.add(String(item.id));\n\t\t\t\t\t\t\tvalidateConstraint(item, sourceColumns, pendingFks);\n\t\t\t\t\t\t\tif (typeof item.name === \"string\" && item.name.length > 0) {\n\t\t\t\t\t\t\t\tif (tableConstraintNames.has(item.name)) {\n\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t`Duplicate SchemaConstraint.name \"${item.name}\"`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttableConstraintNames.add(item.name);\n\t\t\t\t\t\t\t\tif (item.kind === \"primary_key\" || item.kind === \"unique\") {\n\t\t\t\t\t\t\t\t\tconst key = `${tableNamespaceScope}\\0${item.name}`;\n\t\t\t\t\t\t\t\t\tif (seenIndexNames.has(key)) {\n\t\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t\t`SchemaConstraint.name \"${item.name}\" conflicts with a table or index in the same namespace`,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tseenIndexNames.add(key);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.kind === \"primary_key\") {\n\t\t\t\t\t\t\t\tprimaryKeyCount += 1;\n\t\t\t\t\t\t\t\tif (primaryKeyCount > 1) {\n\t\t\t\t\t\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t\t\t\t\t\t\"SchemaTable may declare at most one primary_key constraint\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttablesById.set(tableId, {\n\t\t\t\t\tcolumns: sourceColumns,\n\t\t\t\t\tconstraints: tableConstraintIds,\n\t\t\t\t});\n\t\t\t\tif (rawTable.relations !== undefined) {\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.relations, \"SchemaTable.relations\"),\n\t\t\t\t\t\t\"SchemaRelation\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\tpendingRelations.push(validateRelation(item));\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (rawTable.indexes !== undefined) {\n\t\t\t\t\tvalidateNamedObjects(\n\t\t\t\t\t\trequireArray(rawTable.indexes, \"SchemaTable.indexes\"),\n\t\t\t\t\t\t\"SchemaIndex\",\n\t\t\t\t\t\tseenIds,\n\t\t\t\t\t\t(item) => {\n\t\t\t\t\t\t\tvalidateIndex(\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tsourceColumns,\n\t\t\t\t\t\t\t\tseenIndexNames,\n\t\t\t\t\t\t\t\ttableNamespaceScope,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const ref of pendingEnumRefs) {\n\t\tif (!enumIds.has(ref.enumId)) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`${ref.label}.type.enumId \"${ref.enumId}\" does not identify an enum`,\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const fk of pendingFks) {\n\t\tconst target = tablesById.get(fk.targetTableId);\n\t\tif (!target) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaConstraint.targetTableId \"${fk.targetTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\trequireKnownColumns(\n\t\t\tfk.targetColumns,\n\t\t\ttarget.columns,\n\t\t\t\"SchemaConstraint.targetColumns\",\n\t\t);\n\t}\n\n\tfor (const relation of pendingRelations) {\n\t\tconst source = tablesById.get(relation.sourceTableId);\n\t\tif (!source) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaRelation.sourceTableId \"${relation.sourceTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\tconst target = tablesById.get(relation.targetTableId);\n\t\tif (!target) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`SchemaRelation.targetTableId \"${relation.targetTableId}\" does not identify a table`,\n\t\t\t);\n\t\t}\n\t\tif (relation.sourceColumns !== undefined) {\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.sourceColumns,\n\t\t\t\tsource.columns,\n\t\t\t\t\"SchemaRelation.sourceColumns\",\n\t\t\t);\n\t\t}\n\t\tif (relation.targetColumns !== undefined) {\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.targetColumns,\n\t\t\t\ttarget.columns,\n\t\t\t\t\"SchemaRelation.targetColumns\",\n\t\t\t);\n\t\t}\n\t\tfor (const backingId of relation.backingConstraintIds) {\n\t\t\tlet found = false;\n\t\t\tfor (const table of tablesById.values()) {\n\t\t\t\tif (table.constraints.has(backingId)) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaRelation.backingConstraintIds \"${backingId}\" does not identify a constraint`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (relation.through !== undefined) {\n\t\t\tconst through = tablesById.get(relation.through.tableId);\n\t\t\tif (!through) {\n\t\t\t\tthrow new SchemaIrError(\n\t\t\t\t\t`SchemaRelation.through.tableId \"${relation.through.tableId}\" does not identify a table`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.through.sourceColumns,\n\t\t\t\tthrough.columns,\n\t\t\t\t\"SchemaRelation.through.sourceColumns\",\n\t\t\t);\n\t\t\trequireKnownColumns(\n\t\t\t\trelation.through.targetColumns,\n\t\t\t\tthrough.columns,\n\t\t\t\t\"SchemaRelation.through.targetColumns\",\n\t\t\t);\n\t\t}\n\t}\n\n\treturn doc as unknown as AthenaSchemaIr;\n}\n","import type { SchemaColumn } from \"./column.ts\";\nimport type {\n\tSchemaConstraint,\n\tSchemaReferentialAction,\n} from \"./constraint.ts\";\nimport type { SchemaDatabase } from \"./database.ts\";\nimport type { AthenaSchemaIr } from \"./document.ts\";\nimport { asSchemaObjectId, type SchemaObjectIdentity } from \"./identity.ts\";\nimport type { SchemaIndex } from \"./indexes.ts\";\nimport type { SchemaMetadata } from \"./metadata.ts\";\nimport type { SchemaEnum, SchemaNamespace } from \"./namespace.ts\";\nimport type { SchemaRelation } from \"./relation.ts\";\nimport type { SchemaTable } from \"./table.ts\";\nimport type { NativeTypeDescriptor, SchemaType } from \"./type.ts\";\nimport { validateAthenaSchemaIr } from \"./validate.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction canonOptionalFiniteNumber(value: unknown): number | null {\n\tif (value === null) {\n\t\treturn null;\n\t}\n\tif (typeof value === \"number\" && Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\tthrow new Error(\n\t\t\"native length, precision, and scale must be finite numbers or null\",\n\t);\n}\n\nfunction asString(value: unknown, fallback = \"\"): string {\n\treturn typeof value === \"string\" ? value : fallback;\n}\n\nconst REFERENTIAL_ACTIONS = new Set<SchemaReferentialAction>([\n\t\"no_action\",\n\t\"restrict\",\n\t\"cascade\",\n\t\"set_null\",\n\t\"set_default\",\n]);\n\nfunction asReferentialAction(\n\tvalue: unknown,\n\tlabel: string,\n): SchemaReferentialAction | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof value === \"string\" &&\n\t\tREFERENTIAL_ACTIONS.has(value as SchemaReferentialAction)\n\t) {\n\t\treturn value as SchemaReferentialAction;\n\t}\n\tthrow new Error(`${label} \"${String(value)}\" is unsupported`);\n}\n\nfunction compareId(a: { id: string }, b: { id: string }): number {\n\treturn a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\nfunction canonIdentity(raw: unknown): SchemaObjectIdentity {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst logical = isObject(obj.logical) ? obj.logical : {};\n\tconst physical = isObject(obj.physical) ? obj.physical : logical;\n\tconst database = asString(logical.database);\n\tconst namespace = asString(logical.namespace);\n\tconst name = asString(logical.name);\n\treturn {\n\t\tlogical: { database, namespace, name },\n\t\tphysical: {\n\t\t\tdatabase: asString(physical.database, database),\n\t\t\tnamespace: asString(physical.namespace, namespace),\n\t\t\tname: asString(physical.name, name),\n\t\t},\n\t};\n}\n\nfunction canonNative(raw: unknown): NativeTypeDescriptor {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst dims =\n\t\ttypeof obj.arrayDimensions === \"number\" &&\n\t\tNumber.isFinite(obj.arrayDimensions)\n\t\t\t? obj.arrayDimensions\n\t\t\t: 0;\n\tconst native: NativeTypeDescriptor = {\n\t\tbackend: asString(obj.backend, \"postgresql\"),\n\t\tname: asString(obj.name),\n\t\tarrayDimensions: dims,\n\t};\n\tconst withLength =\n\t\tobj.length === undefined\n\t\t\t? native\n\t\t\t: { ...native, length: canonOptionalFiniteNumber(obj.length) };\n\tconst withPrecision =\n\t\tobj.precision === undefined\n\t\t\t? withLength\n\t\t\t: {\n\t\t\t\t\t...withLength,\n\t\t\t\t\tprecision: canonOptionalFiniteNumber(obj.precision),\n\t\t\t\t};\n\tif (obj.scale === undefined) {\n\t\treturn withPrecision;\n\t}\n\treturn {\n\t\t...withPrecision,\n\t\tscale: canonOptionalFiniteNumber(obj.scale),\n\t};\n}\n\nfunction canonType(raw: unknown): SchemaType {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst native = canonNative(obj.native);\n\tif (obj.kind === \"enum\" || typeof obj.enumId === \"string\") {\n\t\treturn {\n\t\t\tkind: \"enum\",\n\t\t\tenumId: asString(obj.enumId),\n\t\t\tnative,\n\t\t};\n\t}\n\tif (obj.kind === \"native\") {\n\t\treturn { kind: \"native\", native };\n\t}\n\treturn {\n\t\tkind: \"scalar\",\n\t\tsemantic: asString(obj.semantic, native.name),\n\t\tnative,\n\t};\n}\n\nfunction canonColumn(raw: unknown): SchemaColumn {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst nullable = obj.nullable === true;\n\tconst column: SchemaColumn = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\ttype: canonType(obj.type),\n\t\tnullable,\n\t};\n\tconst withDefault =\n\t\tobj.default === undefined\n\t\t\t? column\n\t\t\t: {\n\t\t\t\t\t...column,\n\t\t\t\t\tdefault: obj.default === null ? null : asString(obj.default),\n\t\t\t\t};\n\tif (obj.generated === undefined && obj.isGenerated === undefined) {\n\t\treturn withDefault;\n\t}\n\treturn {\n\t\t...withDefault,\n\t\tgenerated: obj.generated === true || obj.isGenerated === true,\n\t};\n}\n\nfunction canonConstraint(raw: unknown): SchemaConstraint {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst id = asSchemaObjectId(asString(obj.id));\n\tconst kindRaw = asString(obj.kind).toLowerCase();\n\tconst columns = Array.isArray(obj.columns)\n\t\t? obj.columns.map((c) => asString(c))\n\t\t: [];\n\tconst name =\n\t\tobj.name === undefined\n\t\t\t? undefined\n\t\t\t: obj.name === null\n\t\t\t\t? null\n\t\t\t\t: asString(obj.name);\n\n\tif (kindRaw === \"check\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"check\",\n\t\t\texpression: asString(obj.expression),\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t};\n\t}\n\tif (kindRaw === \"unique\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"unique\",\n\t\t\tcolumns,\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t};\n\t}\n\tif (kindRaw === \"foreign_key\" || kindRaw === \"fk\") {\n\t\treturn {\n\t\t\tid,\n\t\t\tkind: \"foreign_key\",\n\t\t\tcolumns,\n\t\t\ttargetTableId: asString(obj.targetTableId),\n\t\t\ttargetColumns: Array.isArray(obj.targetColumns)\n\t\t\t\t? obj.targetColumns.map((c) => asString(c))\n\t\t\t\t: [],\n\t\t\t...(name === undefined ? {} : { name }),\n\t\t\t...(obj.onDelete === undefined\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tonDelete: asReferentialAction(\n\t\t\t\t\t\t\tobj.onDelete,\n\t\t\t\t\t\t\t\"SchemaConstraint.onDelete\",\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t...(obj.onUpdate === undefined\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tonUpdate: asReferentialAction(\n\t\t\t\t\t\t\tobj.onUpdate,\n\t\t\t\t\t\t\t\"SchemaConstraint.onUpdate\",\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t};\n\t}\n\treturn {\n\t\tid,\n\t\tkind: \"primary_key\",\n\t\tcolumns,\n\t\t...(name === undefined ? {} : { name }),\n\t};\n}\n\nfunction canonRelation(raw: unknown): SchemaRelation {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst through = isObject(obj.through)\n\t\t? {\n\t\t\t\ttableId: asString(obj.through.tableId),\n\t\t\t\tsourceColumns: Array.isArray(obj.through.sourceColumns)\n\t\t\t\t\t? obj.through.sourceColumns.map((c) => asString(c))\n\t\t\t\t\t: [],\n\t\t\t\ttargetColumns: Array.isArray(obj.through.targetColumns)\n\t\t\t\t\t? obj.through.targetColumns.map((c) => asString(c))\n\t\t\t\t\t: [],\n\t\t\t}\n\t\t: undefined;\n\tconst relation: SchemaRelation = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tcardinality: asString(obj.cardinality) as SchemaRelation[\"cardinality\"],\n\t\tsourceTableId: asString(obj.sourceTableId),\n\t\ttargetTableId: asString(obj.targetTableId),\n\t\tbackingConstraintIds: Array.isArray(obj.backingConstraintIds)\n\t\t\t? [...obj.backingConstraintIds].map((c) => asString(c)).sort()\n\t\t\t: [],\n\t};\n\tconst withSource =\n\t\tobj.sourceColumns === undefined\n\t\t\t? relation\n\t\t\t: {\n\t\t\t\t\t...relation,\n\t\t\t\t\tsourceColumns: Array.isArray(obj.sourceColumns)\n\t\t\t\t\t\t? obj.sourceColumns.map((c) => asString(c))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\tconst withCols =\n\t\tobj.targetColumns === undefined\n\t\t\t? withSource\n\t\t\t: {\n\t\t\t\t\t...withSource,\n\t\t\t\t\ttargetColumns: Array.isArray(obj.targetColumns)\n\t\t\t\t\t\t? obj.targetColumns.map((c) => asString(c))\n\t\t\t\t\t\t: [],\n\t\t\t\t};\n\tconst withThrough =\n\t\tthrough === undefined ? withCols : { ...withCols, through };\n\tif (obj.name === undefined) {\n\t\treturn withThrough;\n\t}\n\treturn {\n\t\t...withThrough,\n\t\tname: obj.name === null ? null : asString(obj.name),\n\t};\n}\n\nfunction canonIndex(raw: unknown): SchemaIndex {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst columns = Array.isArray(obj.columns)\n\t\t? obj.columns.map((col) => {\n\t\t\t\tif (typeof col === \"string\") {\n\t\t\t\t\treturn { name: col, direction: \"asc\" as const };\n\t\t\t\t}\n\t\t\t\tconst c = isObject(col) ? col : {};\n\t\t\t\tconst direction =\n\t\t\t\t\tc.direction === \"desc\" ? (\"desc\" as const) : (\"asc\" as const);\n\t\t\t\treturn { name: asString(c.name), direction };\n\t\t\t})\n\t\t: [];\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tcolumns,\n\t\tunique: obj.unique === true,\n\t\t...(obj.name === undefined\n\t\t\t? {}\n\t\t\t: { name: obj.name === null ? null : asString(obj.name) }),\n\t\t...(obj.predicate === undefined\n\t\t\t? {}\n\t\t\t: { predicate: obj.predicate === null ? null : asString(obj.predicate) }),\n\t\t...(obj.method === undefined\n\t\t\t? {}\n\t\t\t: { method: obj.method === null ? null : asString(obj.method) }),\n\t};\n}\n\nfunction canonEnum(raw: unknown): SchemaEnum {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst labels = Array.isArray(obj.labels)\n\t\t? obj.labels.map((l) => asString(l))\n\t\t: Array.isArray(obj.values)\n\t\t\t? obj.values.map((l) => asString(l))\n\t\t\t: [];\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tlabels,\n\t\t...(obj.name === undefined\n\t\t\t? {}\n\t\t\t: { name: obj.name === null ? null : asString(obj.name) }),\n\t};\n}\n\nfunction canonTable(raw: unknown): SchemaTable {\n\tconst obj = isObject(raw) ? raw : {};\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tcolumns: (Array.isArray(obj.columns) ? obj.columns : [])\n\t\t\t.map(canonColumn)\n\t\t\t.sort(compareId),\n\t\tconstraints: (Array.isArray(obj.constraints) ? obj.constraints : [])\n\t\t\t.map(canonConstraint)\n\t\t\t.sort(compareId),\n\t\trelations: (Array.isArray(obj.relations) ? obj.relations : [])\n\t\t\t.map(canonRelation)\n\t\t\t.sort(compareId),\n\t\tindexes: (Array.isArray(obj.indexes) ? obj.indexes : [])\n\t\t\t.map(canonIndex)\n\t\t\t.sort(compareId),\n\t};\n}\n\nfunction canonNamespace(raw: unknown): SchemaNamespace {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst enums = (Array.isArray(obj.enums) ? obj.enums : [])\n\t\t.map(canonEnum)\n\t\t.sort(compareId);\n\treturn {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tenums,\n\t\ttables: (Array.isArray(obj.tables) ? obj.tables : [])\n\t\t\t.map(canonTable)\n\t\t\t.sort(compareId),\n\t};\n}\n\nfunction canonDatabase(raw: unknown): SchemaDatabase {\n\tconst obj = isObject(raw) ? raw : {};\n\tconst namespacesRaw = obj.namespaces ?? obj.schemas;\n\tconst db: SchemaDatabase = {\n\t\tid: asSchemaObjectId(asString(obj.id)),\n\t\tidentity: canonIdentity(obj.identity),\n\t\tnamespaces: (Array.isArray(namespacesRaw) ? namespacesRaw : [])\n\t\t\t.map(canonNamespace)\n\t\t\t.sort(compareId),\n\t};\n\tconst withEnums = Array.isArray(obj.enums)\n\t\t? { ...db, enums: obj.enums.map(canonEnum).sort(compareId) }\n\t\t: db;\n\tif (obj.backend === undefined) {\n\t\treturn withEnums;\n\t}\n\treturn {\n\t\t...withEnums,\n\t\tbackend: obj.backend === null ? null : asString(obj.backend),\n\t};\n}\n\nfunction canonMetadata(raw: unknown): SchemaMetadata {\n\tif (!isObject(raw)) {\n\t\treturn {};\n\t}\n\tconst provenance = isObject(raw.provenance)\n\t\t? {\n\t\t\t\t...(raw.provenance.source === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { source: asString(raw.provenance.source) }),\n\t\t\t\t...(raw.provenance.generatedAt === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { generatedAt: asString(raw.provenance.generatedAt) }),\n\t\t\t\t...(raw.provenance.generator === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { generator: asString(raw.provenance.generator) }),\n\t\t\t\t...(raw.provenance.backend === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tbackend:\n\t\t\t\t\t\t\t\traw.provenance.backend === null\n\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t: asString(raw.provenance.backend),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t: undefined;\n\tconst extensions = isObject(raw.extensions)\n\t\t? { ...raw.extensions }\n\t\t: undefined;\n\treturn {\n\t\t...(provenance === undefined ? {} : { provenance }),\n\t\t...(extensions === undefined ? {} : { extensions }),\n\t};\n}\n\n/**\n * Normalize document structure (stable array order by id, folded aliases).\n * Idempotent: canonicalize(canonicalize(doc)) === canonicalize(doc).\n */\nexport function canonicalizeAthenaSchemaIr(doc: unknown): AthenaSchemaIr {\n\tvalidateAthenaSchemaIr(doc);\n\tconst obj = doc as Record<string, unknown>;\n\tconst canonical: AthenaSchemaIr = {\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: (Array.isArray(obj.databases) ? obj.databases : [])\n\t\t\t.map(canonDatabase)\n\t\t\t.sort(compareId),\n\t\tmetadata: canonMetadata(obj.metadata),\n\t};\n\treturn canonical;\n}\n","/**\n * v1 snapshot ↔ Schema IR v2 lifts and authoring/introspection adapters.\n * IntrospectionSnapshot / ModelMetadataBase are allowed here only.\n */\n\nimport {\n\tnormalizeReferentialAction,\n\tparseSchemaTypeString,\n} from \"../diff/normalize.ts\";\nimport {\n\tATHENA_SCHEMA_SNAPSHOT_VERSION,\n\ttype AthenaSchemaSnapshot,\n\ttype SchemaColumn as V1Column,\n\ttype SchemaColumnType as V1ColumnType,\n\ttype SchemaForeignKey as V1ForeignKey,\n\ttype SchemaIndex as V1Index,\n\ttype SchemaTable as V1Table,\n\ttype SchemaUniqueConstraint as V1Unique,\n} from \"../diff/types.ts\";\nimport { collectModelsFromSqlInput, type ModelSqlInput } from \"../model-sql.ts\";\nimport type {\n\tIntrospectionColumn,\n\tIntrospectionRelation,\n\tIntrospectionSnapshot,\n\tIntrospectionTable,\n\tModelColumnKind,\n\tModelRelationKind,\n\tModelRelationMetadata,\n} from \"../types.ts\";\nimport { canonicalizeAthenaSchemaIr } from \"./canonicalize.ts\";\nimport type { SchemaColumn } from \"./column.ts\";\nimport type {\n\tSchemaConstraint,\n\tSchemaReferentialAction,\n} from \"./constraint.ts\";\nimport type { SchemaDatabase } from \"./database.ts\";\nimport type { AthenaSchemaIr } from \"./document.ts\";\nimport {\n\tasSchemaObjectId,\n\ttype SchemaObjectId,\n\tschemaObjectIdentity,\n} from \"./identity.ts\";\nimport type { SchemaIndex } from \"./indexes.ts\";\nimport type { SchemaEnum, SchemaNamespace } from \"./namespace.ts\";\nimport type {\n\tSchemaRelation,\n\tSchemaRelationCardinality,\n\tSchemaRelationThrough,\n} from \"./relation.ts\";\nimport type { SchemaTable } from \"./table.ts\";\nimport type { NativeTypeDescriptor, SchemaType } from \"./type.ts\";\nimport { validateAthenaSchemaIr } from \"./validate.ts\";\nimport { ATHENA_SCHEMA_IR_KIND, ATHENA_SCHEMA_IR_VERSION } from \"./version.ts\";\n\nconst INTERNAL_SCHEMAS = new Set([\"athena\"]);\nconst DEFAULT_DATABASE = \"default\";\nconst DEFAULT_SCHEMA = \"public\";\nconst DEFAULT_BACKEND = \"postgresql\";\n\nexport interface SchemaIrFromModelsOptions {\n\treadonly backend?: string | null;\n\treadonly defaultSchema?: string;\n\treadonly defaultDatabase?: string;\n}\n\nexport interface SchemaIrFromIntrospectionOptions {\n\treadonly schemas?: readonly string[];\n\treadonly excludeInternal?: boolean;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isAthenaSchemaIr(value: unknown): value is AthenaSchemaIr {\n\treturn (\n\t\tisObject(value) &&\n\t\tvalue.kind === ATHENA_SCHEMA_IR_KIND &&\n\t\tvalue.irVersion === ATHENA_SCHEMA_IR_VERSION &&\n\t\tArray.isArray(value.databases)\n\t);\n}\n\nfunction id(value: string): SchemaObjectId {\n\treturn asSchemaObjectId(value);\n}\n\nfunction nativeFromV1(\n\ttype: V1ColumnType,\n\tbackend: string,\n): NativeTypeDescriptor {\n\treturn {\n\t\tbackend,\n\t\tname: type.name,\n\t\tarrayDimensions: type.arrayDimensions,\n\t\t...(type.length === undefined ? {} : { length: type.length }),\n\t\t...(type.precision === undefined ? {} : { precision: type.precision }),\n\t\t...(type.scale === undefined ? {} : { scale: type.scale }),\n\t};\n}\n\nfunction typeFromV1Column(\n\ttype: V1ColumnType,\n\tbackend: string,\n\tenumId?: string,\n): SchemaType {\n\tconst native = nativeFromV1(type, backend);\n\tif (enumId) {\n\t\treturn { kind: \"enum\", enumId, native };\n\t}\n\treturn { kind: \"scalar\", semantic: type.name, native };\n}\n\nfunction tableStableId(database: string, schema: string, name: string): string {\n\treturn `tbl:${database}.${schema}.${name}`;\n}\n\nfunction columnStableId(\n\tdatabase: string,\n\tschema: string,\n\ttable: string,\n\tname: string,\n): string {\n\treturn `col:${database}.${schema}.${table}.${name}`;\n}\n\nfunction enumStableId(\n\tdatabase: string,\n\tschema: string,\n\ttable: string,\n\tname: string,\n): string {\n\treturn `enum:${database}.${schema}.${table}.${name}`;\n}\n\nfunction fkStableId(\n\ttableId: string,\n\tsourceColumns: readonly string[],\n\ttargetTableId: string,\n\ttargetColumns: readonly string[],\n): string {\n\treturn `cst:${tableId}:fk:${sourceColumns.join(\",\")}:${targetTableId}:${targetColumns.join(\",\")}`;\n}\n\nfunction mapAuthoredColumns(\n\tnames: readonly string[],\n\tlogicalToPhysical: Map<string, string> | undefined,\n): string[] {\n\treturn names.map((name) => logicalToPhysical?.get(name) ?? name);\n}\n\nfunction snapshotDatabaseName(\n\tvalue: string | undefined,\n\tfallback: string,\n): string {\n\tconst trimmed = value?.trim();\n\treturn trimmed && trimmed.length > 0 ? trimmed : fallback;\n}\n\nfunction snapshotTableDatabase(table: V1Table, fallback: string): string {\n\treturn snapshotDatabaseName(table.database, fallback);\n}\n\nexport function schemaIrFromSnapshot(\n\tsnapshot: AthenaSchemaSnapshot,\n\toptions: { database?: string } = {},\n): AthenaSchemaIr {\n\tconst backend = snapshot.backend ?? DEFAULT_BACKEND;\n\tconst fallbackDatabase = options.database?.trim() || DEFAULT_DATABASE;\n\ttype NamespaceBucket = {\n\t\tenums: SchemaEnum[];\n\t\ttables: SchemaTable[];\n\t\tseenEnums: Set<string>;\n\t};\n\tconst databases = new Map<string, Map<string, NamespaceBucket>>();\n\n\tconst namespaceBucket = (dbName: string, nsName: string): NamespaceBucket => {\n\t\tlet namespaces = databases.get(dbName);\n\t\tif (!namespaces) {\n\t\t\tnamespaces = new Map();\n\t\t\tdatabases.set(dbName, namespaces);\n\t\t}\n\t\tlet bucket = namespaces.get(nsName);\n\t\tif (!bucket) {\n\t\t\tbucket = { enums: [], tables: [], seenEnums: new Set() };\n\t\t\tnamespaces.set(nsName, bucket);\n\t\t}\n\t\treturn bucket;\n\t};\n\n\tfor (const ns of snapshot.schemas) {\n\t\tif (ns.tables.length === 0) {\n\t\t\tnamespaceBucket(\n\t\t\t\tsnapshotDatabaseName(ns.database, fallbackDatabase),\n\t\t\t\tns.name,\n\t\t\t);\n\t\t}\n\n\t\tfor (const table of ns.tables) {\n\t\t\tconst databaseName = snapshotTableDatabase(table, fallbackDatabase);\n\t\t\tconst bucket = namespaceBucket(databaseName, table.schema || ns.name);\n\t\t\tconst { enums, tables, seenEnums } = bucket;\n\t\t\tconst tableId = tableStableId(databaseName, table.schema, table.name);\n\t\t\tconst columns: SchemaColumn[] = [];\n\t\t\tfor (const column of table.columns) {\n\t\t\t\tlet enumId: string | undefined;\n\t\t\t\tif (column.type.enumValues && column.type.enumValues.length > 0) {\n\t\t\t\t\tenumId = introspectedEnumStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.type.name,\n\t\t\t\t\t);\n\t\t\t\t\tif (!seenEnums.has(enumId)) {\n\t\t\t\t\t\tseenEnums.add(enumId);\n\t\t\t\t\t\tenums.push({\n\t\t\t\t\t\t\tid: id(enumId),\n\t\t\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\t\t\tcolumn.type.name,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlabels: [...column.type.enumValues],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcolumns.push({\n\t\t\t\t\tid: id(\n\t\t\t\t\t\tcolumnStableId(databaseName, table.schema, table.name, column.name),\n\t\t\t\t\t),\n\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.name,\n\t\t\t\t\t),\n\t\t\t\t\ttype: typeFromV1Column(\n\t\t\t\t\t\tcolumn.type,\n\t\t\t\t\t\tbackend ?? DEFAULT_BACKEND,\n\t\t\t\t\t\tenumId,\n\t\t\t\t\t),\n\t\t\t\t\tnullable: column.nullable,\n\t\t\t\t\tdefault: column.default,\n\t\t\t\t\tgenerated: column.isGenerated,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst constraints: SchemaConstraint[] = [];\n\t\t\tif (table.primaryKey && table.primaryKey.columns.length > 0) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\t\tkind: \"primary_key\",\n\t\t\t\t\tcolumns: [...table.primaryKey.columns],\n\t\t\t\t\tname: table.primaryKey.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const unique of table.uniqueConstraints) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n\t\t\t\t\tkind: \"unique\",\n\t\t\t\t\tcolumns: [...unique.columns],\n\t\t\t\t\tname: unique.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst relations: SchemaRelation[] = [];\n\t\t\tfor (const fk of table.foreignKeys) {\n\t\t\t\tconst targetDatabase = snapshotDatabaseName(\n\t\t\t\t\tfk.target.database,\n\t\t\t\t\tdatabaseName,\n\t\t\t\t);\n\t\t\t\tconst targetId = tableStableId(\n\t\t\t\t\ttargetDatabase,\n\t\t\t\t\tfk.target.schema,\n\t\t\t\t\tfk.target.name,\n\t\t\t\t);\n\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\ttableId,\n\t\t\t\t\tfk.columns,\n\t\t\t\t\ttargetId,\n\t\t\t\t\tfk.targetColumns,\n\t\t\t\t);\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(fkId),\n\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\tcolumns: [...fk.columns],\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\ttargetColumns: [...fk.targetColumns],\n\t\t\t\t\tname: fk.name ?? null,\n\t\t\t\t\tonDelete: fk.onDelete,\n\t\t\t\t\tonUpdate: fk.onUpdate,\n\t\t\t\t});\n\t\t\t\trelations.push({\n\t\t\t\t\tid: id(`rel:${tableId}:${fk.columns.join(\",\")}:${targetId}`),\n\t\t\t\t\tcardinality: \"n:1\",\n\t\t\t\t\tsourceTableId: tableId,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\tsourceColumns: [...fk.columns],\n\t\t\t\t\ttargetColumns: [...fk.targetColumns],\n\t\t\t\t\tbackingConstraintIds: [fkId],\n\t\t\t\t\tname: fk.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst indexes: SchemaIndex[] = table.indexes.map((ix, index) => ({\n\t\t\t\tid: id(`idx:${tableId}:${ix.name ?? index}`),\n\t\t\t\tcolumns: ix.columns.map((c) => ({\n\t\t\t\t\tname: c.name,\n\t\t\t\t\tdirection: c.direction ?? \"asc\",\n\t\t\t\t})),\n\t\t\t\tunique: ix.unique,\n\t\t\t\tname: ix.name ?? null,\n\t\t\t\tpredicate: ix.predicate ?? null,\n\t\t\t\tmethod: ix.method ?? null,\n\t\t\t}));\n\n\t\t\ttables.push({\n\t\t\t\tid: id(tableId),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, table.schema, table.name),\n\t\t\t\tcolumns,\n\t\t\t\tconstraints,\n\t\t\t\trelations,\n\t\t\t\tindexes,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst lifted: SchemaDatabase[] = [...databases.entries()].map(\n\t\t([dbName, namespaces]) => ({\n\t\t\tid: id(`db:${dbName}`),\n\t\t\tidentity: schemaObjectIdentity(dbName, DEFAULT_SCHEMA, dbName),\n\t\t\tnamespaces: [...namespaces.entries()].map(([nsName, bucket]) => ({\n\t\t\t\tid: id(`ns:${dbName}.${nsName}`),\n\t\t\t\tidentity: schemaObjectIdentity(dbName, nsName, nsName),\n\t\t\t\tenums: bucket.enums,\n\t\t\t\ttables: bucket.tables,\n\t\t\t})),\n\t\t\tbackend,\n\t\t}),\n\t);\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: lifted,\n\t\tmetadata: {\n\t\t\tprovenance: {\n\t\t\t\tsource: \"snapshot\",\n\t\t\t\tbackend,\n\t\t\t},\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nfunction collectIrTables(ir: AthenaSchemaIr): SchemaTable[] {\n\tconst tables: SchemaTable[] = [];\n\tfor (const db of ir.databases) {\n\t\tfor (const ns of db.namespaces) {\n\t\t\ttables.push(...ns.tables);\n\t\t}\n\t}\n\treturn tables;\n}\n\nfunction collectIrNamespaceNames(ir: AthenaSchemaIr): Set<string> {\n\tconst names = new Set<string>();\n\tfor (const identity of collectIrNamespaceIdentities(ir).values()) {\n\t\tnames.add(identity.schema);\n\t}\n\treturn names;\n}\n\nfunction collectIrNamespaceIdentities(\n\tir: AthenaSchemaIr,\n): Map<string, { database: string; schema: string }> {\n\tconst identities = new Map<string, { database: string; schema: string }>();\n\tfor (const db of ir.databases) {\n\t\tconst database = db.identity.physical.database;\n\t\tfor (const ns of db.namespaces) {\n\t\t\tconst schema = ns.identity.physical.namespace;\n\t\t\tidentities.set(`${database}\\0${schema}`, { database, schema });\n\t\t}\n\t}\n\treturn identities;\n}\n\nfunction collectIrEnums(ir: AthenaSchemaIr): Map<string, SchemaEnum> {\n\tconst map = new Map<string, SchemaEnum>();\n\tfor (const db of ir.databases) {\n\t\tfor (const item of db.enums ?? []) {\n\t\t\tmap.set(item.id, item);\n\t\t}\n\t\tfor (const ns of db.namespaces) {\n\t\t\tfor (const item of ns.enums ?? []) {\n\t\t\t\tmap.set(item.id, item);\n\t\t\t}\n\t\t}\n\t}\n\treturn map;\n}\n\nfunction projectType(\n\ttype: SchemaType,\n\tenums: Map<string, SchemaEnum>,\n\tincludeEnumValues: boolean,\n): V1ColumnType {\n\tconst native = type.native;\n\tconst projected: V1ColumnType = {\n\t\tname: native.name,\n\t\tarrayDimensions: native.arrayDimensions,\n\t\t...(native.length === undefined ? {} : { length: native.length }),\n\t\t...(native.precision === undefined ? {} : { precision: native.precision }),\n\t\t...(native.scale === undefined ? {} : { scale: native.scale }),\n\t};\n\tif (includeEnumValues && type.kind === \"enum\") {\n\t\tconst labels = enums.get(type.enumId)?.labels;\n\t\tif (labels && labels.length > 0) {\n\t\t\treturn { ...projected, enumValues: [...labels] };\n\t\t}\n\t}\n\treturn projected;\n}\n\nfunction projectTable(\n\ttable: SchemaTable,\n\tir: AthenaSchemaIr,\n\tincludeEnumValues: boolean,\n): V1Table {\n\tconst enums = collectIrEnums(ir);\n\tconst tablesById = new Map(\n\t\tcollectIrTables(ir).map((item) => [item.id as string, item]),\n\t);\n\tconst schema = table.identity.physical.namespace;\n\tconst name = table.identity.physical.name;\n\tconst columns: V1Column[] = table.columns.map((column) => ({\n\t\tname: column.identity.physical.name,\n\t\ttype: projectType(column.type, enums, includeEnumValues),\n\t\tnullable: column.nullable,\n\t\tdefault: column.default ?? null,\n\t\tisGenerated: column.generated === true,\n\t}));\n\n\tlet primaryKey: V1Table[\"primaryKey\"] = null;\n\tconst uniqueConstraints: V1Unique[] = [];\n\tconst foreignKeys: V1ForeignKey[] = [];\n\n\tfor (const constraint of table.constraints) {\n\t\tif (constraint.kind === \"primary_key\") {\n\t\t\tprimaryKey = {\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t};\n\t\t} else if (constraint.kind === \"unique\") {\n\t\t\tuniqueConstraints.push({\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t});\n\t\t} else if (constraint.kind === \"foreign_key\") {\n\t\t\tconst target = tablesById.get(String(constraint.targetTableId));\n\t\t\tconst targetSchema =\n\t\t\t\ttarget?.identity.physical.namespace ??\n\t\t\t\tString(constraint.targetTableId).split(\":\")[1]?.split(\".\")[0] ??\n\t\t\t\tschema;\n\t\t\tconst targetName =\n\t\t\t\ttarget?.identity.physical.name ??\n\t\t\t\tString(constraint.targetTableId).split(\".\").pop() ??\n\t\t\t\tString(constraint.targetTableId);\n\t\t\tconst targetDatabase =\n\t\t\t\ttarget?.identity.physical.database ??\n\t\t\t\ttable.identity.physical.database;\n\t\t\tforeignKeys.push({\n\t\t\t\tname: constraint.name ?? null,\n\t\t\t\tcolumns: [...constraint.columns],\n\t\t\t\ttarget: {\n\t\t\t\t\tschema: targetSchema,\n\t\t\t\t\tname: targetName,\n\t\t\t\t\t...(targetDatabase ? { database: targetDatabase } : {}),\n\t\t\t\t},\n\t\t\t\ttargetColumns: [...constraint.targetColumns],\n\t\t\t\tonDelete: constraint.onDelete ?? \"no_action\",\n\t\t\t\tonUpdate: constraint.onUpdate ?? \"no_action\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst indexes: V1Index[] = table.indexes.map((ix) => ({\n\t\tname: ix.name ?? null,\n\t\tunique: ix.unique,\n\t\tpredicate: ix.predicate ?? null,\n\t\tmethod: ix.method ?? null,\n\t\tcolumns: ix.columns.map((c) => ({\n\t\t\tname: c.name,\n\t\t\tdirection: c.direction ?? \"asc\",\n\t\t})),\n\t}));\n\n\tconst database = table.identity.physical.database;\n\treturn {\n\t\tschema,\n\t\tname,\n\t\t...(database ? { database } : {}),\n\t\tcolumns,\n\t\tprimaryKey,\n\t\tuniqueConstraints,\n\t\tforeignKeys,\n\t\tindexes,\n\t};\n}\n\n/**\n * Lossy v1 projection. CHECK / semantic relations / first-class enums may drop.\n * Must not be used as the structural SSOT.\n */\nexport function schemaSnapshotFromIr(ir: AthenaSchemaIr): AthenaSchemaSnapshot {\n\tconst canonical = canonicalizeAthenaSchemaIr(ir);\n\tvalidateAthenaSchemaIr(canonical);\n\tconst includeEnumValues =\n\t\tcanonical.metadata.provenance?.source !== \"models\" &&\n\t\tcanonical.metadata.provenance?.source !== \"table\";\n\tconst backend =\n\t\tcanonical.databases[0]?.backend ??\n\t\tcanonical.metadata.provenance?.backend ??\n\t\tnull;\n\n\tconst byNamespace = new Map<\n\t\tstring,\n\t\t{ database: string; name: string; tables: V1Table[] }\n\t>();\n\tfor (const identity of collectIrNamespaceIdentities(canonical).values()) {\n\t\tconst key = `${identity.database}\\0${identity.schema}`;\n\t\tif (!byNamespace.has(key)) {\n\t\t\tbyNamespace.set(key, {\n\t\t\t\tdatabase: identity.database,\n\t\t\t\tname: identity.schema,\n\t\t\t\ttables: [],\n\t\t\t});\n\t\t}\n\t}\n\tfor (const table of collectIrTables(canonical)) {\n\t\tconst projected = projectTable(table, canonical, includeEnumValues);\n\t\tconst database = table.identity.physical.database;\n\t\tconst key = `${database}\\0${projected.schema}`;\n\t\tconst bucket = byNamespace.get(key) ?? {\n\t\t\tdatabase,\n\t\t\tname: projected.schema,\n\t\t\ttables: [],\n\t\t};\n\t\tbucket.tables.push(projected);\n\t\tbyNamespace.set(key, bucket);\n\t}\n\n\tconst schemas = [...byNamespace.values()].map((ns) => ({\n\t\tname: ns.name,\n\t\ttables: ns.tables,\n\t\t...(ns.database ? { database: ns.database } : {}),\n\t}));\n\n\treturn {\n\t\tversion: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n\t\tbackend,\n\t\tschemas,\n\t};\n}\n\nfunction semanticFromKind(kind: ModelColumnKind): string {\n\tswitch (kind) {\n\t\tcase \"boolean\":\n\t\t\treturn \"boolean\";\n\t\tcase \"number\":\n\t\t\treturn \"float\";\n\t\tcase \"decimal\":\n\t\t\treturn \"decimal\";\n\t\tcase \"json\":\n\t\t\treturn \"json\";\n\t\tcase \"enumeration\":\n\t\t\treturn \"enum\";\n\t\tdefault:\n\t\t\treturn \"string\";\n\t}\n}\n\nfunction sqlTypeFromKind(\n\tkind: ModelColumnKind,\n\tisSoleGeneratedPk: boolean,\n\tprecision?: number,\n\tscale?: number,\n): string {\n\tif (isSoleGeneratedPk && kind === \"number\") {\n\t\treturn \"bigint\";\n\t}\n\tswitch (kind) {\n\t\tcase \"boolean\":\n\t\t\treturn \"boolean\";\n\t\tcase \"number\":\n\t\t\treturn \"double precision\";\n\t\tcase \"decimal\":\n\t\t\tif (typeof precision === \"number\" && typeof scale === \"number\") {\n\t\t\t\treturn `numeric(${precision}, ${scale})`;\n\t\t\t}\n\t\t\tif (typeof precision === \"number\") {\n\t\t\t\treturn `numeric(${precision})`;\n\t\t\t}\n\t\t\treturn \"numeric\";\n\t\tcase \"json\":\n\t\t\treturn \"jsonb\";\n\t\tcase \"enumeration\":\n\t\t\treturn \"text\";\n\t\tdefault:\n\t\t\treturn \"text\";\n\t}\n}\n\nfunction cardinalityFromKind(\n\tkind: ModelRelationKind,\n): SchemaRelationCardinality {\n\tswitch (kind) {\n\t\tcase \"one-to-one\":\n\t\t\treturn \"1:1\";\n\t\tcase \"one-to-many\":\n\t\t\treturn \"1:n\";\n\t\tcase \"many-to-many\":\n\t\t\treturn \"n:n\";\n\t\tdefault:\n\t\t\treturn \"n:1\";\n\t}\n}\n\nfunction nativeFromParsed(\n\tparsed: V1ColumnType,\n\tbackend: string,\n): NativeTypeDescriptor {\n\treturn nativeFromV1(parsed, backend);\n}\n\nexport function schemaIrFromModels(\n\tmodels: unknown,\n\toptions: SchemaIrFromModelsOptions = {},\n): AthenaSchemaIr {\n\tconst defaultSchema = options.defaultSchema?.trim() || DEFAULT_SCHEMA;\n\tconst defaultDatabase = options.defaultDatabase?.trim() || DEFAULT_DATABASE;\n\tconst backend =\n\t\toptions.backend === undefined ? DEFAULT_BACKEND : options.backend;\n\tconst resolved = collectModelsFromSqlInput(models as ModelSqlInput);\n\n\tconst physicalByTableId = new Map<string, Map<string, string>>();\n\tfor (const table of resolved) {\n\t\tconst schemaName = table.schemaName?.trim() || defaultSchema;\n\t\tconst databaseName =\n\t\t\t(table.model.meta as { database?: string }).database?.trim() ||\n\t\t\tdefaultDatabase;\n\t\tconst logicalName =\n\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName;\n\t\tphysicalByTableId.set(\n\t\t\ttableStableId(databaseName, schemaName, logicalName),\n\t\t\tnew Map(table.columns.map((column) => [column.logicalName, column.name])),\n\t\t);\n\t}\n\n\tconst databases = new Map<\n\t\tstring,\n\t\tMap<string, { enums: SchemaEnum[]; tables: SchemaTable[] }>\n\t>();\n\n\tconst ensureNs = (databaseName: string, schemaName: string) => {\n\t\tlet bySchema = databases.get(databaseName);\n\t\tif (!bySchema) {\n\t\t\tbySchema = new Map();\n\t\t\tdatabases.set(databaseName, bySchema);\n\t\t}\n\t\tlet bucket = bySchema.get(schemaName);\n\t\tif (!bucket) {\n\t\t\tbucket = { enums: [], tables: [] };\n\t\t\tbySchema.set(schemaName, bucket);\n\t\t}\n\t\treturn bucket;\n\t};\n\n\tfor (const table of resolved) {\n\t\tconst schemaName = table.schemaName?.trim() || defaultSchema;\n\t\tconst databaseName =\n\t\t\t(table.model.meta as { database?: string }).database?.trim() ||\n\t\t\tdefaultDatabase;\n\t\tconst bucket = ensureNs(databaseName, schemaName);\n\t\tconst logicalName =\n\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName;\n\t\tconst tableId = tableStableId(databaseName, schemaName, logicalName);\n\t\tconst logicalToPhysical = new Map(\n\t\t\ttable.columns.map((column) => [column.logicalName, column.name]),\n\t\t);\n\t\tconst mapPhysical = (name: string): string =>\n\t\t\tlogicalToPhysical.get(name) ?? name;\n\t\tconst soleAuthoredPk =\n\t\t\ttable.primaryKey.length === 1 ? table.primaryKey[0] : undefined;\n\t\tconst solePk =\n\t\t\tsoleAuthoredPk === undefined ? undefined : mapPhysical(soleAuthoredPk);\n\t\tconst soleGeneratedPk =\n\t\t\tsolePk !== undefined &&\n\t\t\ttable.columns.some(\n\t\t\t\t(c) => c.name === solePk && c.isGenerated && c.kind === \"number\",\n\t\t\t);\n\n\t\tconst columns: SchemaColumn[] = [];\n\t\tconst constraints: SchemaConstraint[] = [];\n\n\t\tfor (const column of table.columns) {\n\t\t\tconst isSoleGeneratedPk = Boolean(\n\t\t\t\tsoleGeneratedPk && column.name === solePk && column.kind === \"number\",\n\t\t\t);\n\t\t\tconst sqlType = sqlTypeFromKind(\n\t\t\t\tcolumn.kind,\n\t\t\t\tisSoleGeneratedPk,\n\t\t\t\tcolumn.precision,\n\t\t\t\tcolumn.scale,\n\t\t\t);\n\t\t\tconst parsed = parseSchemaTypeString(sqlType, 0);\n\t\t\tlet enumId: string | undefined;\n\t\t\tif (column.kind === \"enumeration\" && column.enumValues?.length) {\n\t\t\t\tenumId = enumStableId(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\tlogicalName,\n\t\t\t\t\tcolumn.name,\n\t\t\t\t);\n\t\t\t\tbucket.enums.push({\n\t\t\t\t\tid: id(enumId),\n\t\t\t\t\tidentity: schemaObjectIdentity(databaseName, schemaName, column.name),\n\t\t\t\t\tlabels: [...column.enumValues],\n\t\t\t\t});\n\t\t\t\tconst quoted = column.enumValues\n\t\t\t\t\t.map((v) => `'${String(v).replaceAll(\"'\", \"''\")}'`)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:${column.name}:check`),\n\t\t\t\t\tkind: \"check\",\n\t\t\t\t\texpression: `${column.name} IN (${quoted})`,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst native = nativeFromParsed(parsed, backend ?? DEFAULT_BACKEND);\n\t\t\tconst type: SchemaType = enumId\n\t\t\t\t? { kind: \"enum\", enumId, native }\n\t\t\t\t: {\n\t\t\t\t\t\tkind: \"scalar\",\n\t\t\t\t\t\tsemantic: isSoleGeneratedPk\n\t\t\t\t\t\t\t? \"bigint\"\n\t\t\t\t\t\t\t: semanticFromKind(column.kind),\n\t\t\t\t\t\tnative,\n\t\t\t\t\t};\n\n\t\t\tlet defaultExpr: string | null = null;\n\t\t\tlet generated = column.isGenerated;\n\t\t\tif (isSoleGeneratedPk) {\n\t\t\t\tconst seqName = `${table.tableName}_${column.name}_seq`;\n\t\t\t\tdefaultExpr = `nextval('${seqName}'::regclass)`;\n\t\t\t\tgenerated = false;\n\t\t\t}\n\n\t\t\tconst logicalColumnName = column.logicalName || column.name;\n\t\t\tcolumns.push({\n\t\t\t\tid: id(\n\t\t\t\t\tcolumnStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\tlogicalName,\n\t\t\t\t\t\tlogicalColumnName,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\tlogicalColumnName,\n\t\t\t\t\t{ name: column.name },\n\t\t\t\t),\n\t\t\t\ttype,\n\t\t\t\tnullable: column.nullable,\n\t\t\t\tdefault: defaultExpr,\n\t\t\t\tgenerated,\n\t\t\t});\n\t\t}\n\n\t\tif (table.primaryKey.length > 0) {\n\t\t\tconstraints.push({\n\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\tkind: \"primary_key\",\n\t\t\t\tcolumns: table.primaryKey.map(mapPhysical),\n\t\t\t\tname: null,\n\t\t\t});\n\t\t}\n\n\t\tconst relations: SchemaRelation[] = [];\n\t\tconst authoredRelations = table.model.meta.relations ?? {};\n\t\tfor (const [relName, relation] of Object.entries(authoredRelations) as [\n\t\t\tstring,\n\t\t\tModelRelationMetadata,\n\t\t][]) {\n\t\t\tconst targetId = tableStableId(\n\t\t\t\trelation.targetDatabase ?? databaseName,\n\t\t\t\trelation.targetSchema,\n\t\t\t\trelation.targetModel,\n\t\t\t);\n\t\t\tif (!physicalByTableId.has(targetId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst isFk =\n\t\t\t\t(relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\") &&\n\t\t\t\t!relation.through;\n\t\t\tconst backing: string[] = [];\n\t\t\tconst sourcePhysical = mapAuthoredColumns(\n\t\t\t\trelation.sourceColumns,\n\t\t\t\tlogicalToPhysical,\n\t\t\t);\n\t\t\tconst targetPhysical = mapAuthoredColumns(\n\t\t\t\trelation.targetColumns,\n\t\t\t\tphysicalByTableId.get(targetId),\n\t\t\t);\n\t\t\tif (isFk) {\n\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\ttableId,\n\t\t\t\t\tsourcePhysical,\n\t\t\t\t\ttargetId,\n\t\t\t\t\ttargetPhysical,\n\t\t\t\t);\n\t\t\t\tbacking.push(fkId);\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(fkId),\n\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\tcolumns: sourcePhysical,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\ttargetColumns: targetPhysical,\n\t\t\t\t\tname: null,\n\t\t\t\t\tonDelete: \"no_action\",\n\t\t\t\t\tonUpdate: \"no_action\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet through: SchemaRelationThrough | undefined;\n\t\t\tif (relation.through) {\n\t\t\t\tconst throughTableId = tableStableId(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\trelation.through.schema,\n\t\t\t\t\trelation.through.model,\n\t\t\t\t);\n\t\t\t\tif (!physicalByTableId.has(throughTableId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst throughMap = physicalByTableId.get(throughTableId);\n\t\t\t\tthrough = {\n\t\t\t\t\ttableId: throughTableId,\n\t\t\t\t\tsourceColumns: mapAuthoredColumns(\n\t\t\t\t\t\trelation.through.sourceColumns,\n\t\t\t\t\t\tthroughMap,\n\t\t\t\t\t),\n\t\t\t\t\ttargetColumns: mapAuthoredColumns(\n\t\t\t\t\t\trelation.through.targetColumns,\n\t\t\t\t\t\tthroughMap,\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t\trelations.push({\n\t\t\t\tid: id(`rel:${tableId}:${relName}`),\n\t\t\t\tcardinality: cardinalityFromKind(relation.kind),\n\t\t\t\tsourceTableId: tableId,\n\t\t\t\ttargetTableId: targetId,\n\t\t\t\tsourceColumns: sourcePhysical,\n\t\t\t\ttargetColumns: targetPhysical,\n\t\t\t\tbackingConstraintIds: backing,\n\t\t\t\tname: relName,\n\t\t\t\tthrough,\n\t\t\t});\n\t\t}\n\n\t\tbucket.tables.push({\n\t\t\tid: id(tableId),\n\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\tdatabaseName,\n\t\t\t\tschemaName,\n\t\t\t\t(table.model.meta.model ?? table.tableName).trim() || table.tableName,\n\t\t\t\t{ name: table.tableName },\n\t\t\t),\n\t\t\tcolumns,\n\t\t\tconstraints,\n\t\t\trelations,\n\t\t\tindexes: [],\n\t\t});\n\t}\n\n\tconst emittedDatabases: SchemaDatabase[] = [...databases.entries()].map(\n\t\t([databaseName, bySchema]) => ({\n\t\t\tid: id(`db:${databaseName}`),\n\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\tdatabaseName,\n\t\t\t\tDEFAULT_SCHEMA,\n\t\t\t\tdatabaseName,\n\t\t\t),\n\t\t\tnamespaces: [...bySchema.entries()].map(([schemaName, bucket]) => ({\n\t\t\t\tid: id(`ns:${databaseName}.${schemaName}`),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, schemaName, schemaName),\n\t\t\t\tenums: bucket.enums,\n\t\t\t\ttables: bucket.tables,\n\t\t\t})),\n\t\t\tbackend,\n\t\t}),\n\t);\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: emittedDatabases,\n\t\tmetadata: {\n\t\t\tprovenance: { source: \"models\", backend },\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nexport function schemaIrFromTable(tableDef: unknown): AthenaSchemaIr {\n\tif (isObject(tableDef) && tableDef.ir != null) {\n\t\treturn canonicalizeAthenaSchemaIr(tableDef.ir);\n\t}\n\treturn schemaIrFromModels([tableDef], { defaultDatabase: DEFAULT_DATABASE });\n}\n\nfunction columnTypeFromIntrospection(\n\tcolumn: IntrospectionColumn,\n\tbackend: string,\n\tenumId?: string,\n): SchemaType {\n\tconst parsedUdt = parseSchemaTypeString(\n\t\tcolumn.udtName || column.dataType,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tconst formatted = parseSchemaTypeString(\n\t\tcolumn.dataType || column.udtName,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tconst name =\n\t\tparsedUdt.name.length <= formatted.name.length\n\t\t\t? parsedUdt.name\n\t\t\t: formatted.name;\n\tconst native: NativeTypeDescriptor = {\n\t\tbackend,\n\t\tname,\n\t\tarrayDimensions: formatted.arrayDimensions || parsedUdt.arrayDimensions,\n\t\tlength: formatted.length ?? parsedUdt.length,\n\t\tprecision: formatted.precision ?? parsedUdt.precision,\n\t\tscale: formatted.scale ?? parsedUdt.scale,\n\t};\n\tif (enumId || column.typeKind === \"enum\") {\n\t\treturn {\n\t\t\tkind: \"enum\",\n\t\t\tenumId:\n\t\t\t\tenumId ??\n\t\t\t\tenumStableId(\"default\", \"_\", \"_\", column.udtName || column.name),\n\t\t\tnative,\n\t\t};\n\t}\n\treturn { kind: \"scalar\", semantic: name, native };\n}\n\nfunction isOutboundFkRelation(relation: IntrospectionRelation): boolean {\n\treturn relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\";\n}\n\nfunction introspectedEnumStableId(\n\tdatabase: string,\n\tschema: string,\n\tname: string,\n): string {\n\treturn `enum:${database}.${schema}.${name}`;\n}\n\nfunction lookupIntrospectionTable(\n\tsnapshot: IntrospectionSnapshot,\n\tschema: string,\n\tname: string,\n): IntrospectionTable | undefined {\n\tconst ns = snapshot.schemas[schema];\n\tif (!ns) {\n\t\treturn undefined;\n\t}\n\tconst direct = ns.tables[name];\n\tif (direct) {\n\t\treturn direct;\n\t}\n\treturn Object.values(ns.tables).find((table) => table.name === name);\n}\n\nfunction collectIntrospectionTables(\n\tsnapshot: IntrospectionSnapshot,\n\tselectedNamespaces: ReadonlySet<string>,\n): Map<string, IntrospectionTable> {\n\tconst included = new Map<string, IntrospectionTable>();\n\tconst tableKey = (schema: string, name: string) => `${schema}\\u0000${name}`;\n\tconst includeTable = (schema: string, name: string): void => {\n\t\tconst key = tableKey(schema, name);\n\t\tif (included.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tconst table = lookupIntrospectionTable(snapshot, schema, name);\n\t\tif (!table) {\n\t\t\treturn;\n\t\t}\n\t\tincluded.set(key, table);\n\t\tfor (const relation of Object.values(table.relations)) {\n\t\t\tincludeTable(relation.targetSchema, relation.targetModel);\n\t\t\tif (relation.through) {\n\t\t\t\tincludeTable(relation.through.schema, relation.through.model);\n\t\t\t}\n\t\t}\n\t};\n\tfor (const nsName of selectedNamespaces) {\n\t\tconst ns = snapshot.schemas[nsName];\n\t\tif (!ns) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const table of Object.values(ns.tables)) {\n\t\t\tincludeTable(table.schema || nsName, table.name);\n\t\t}\n\t}\n\treturn included;\n}\n\nexport function schemaIrFromIntrospection(\n\tsnapshot: IntrospectionSnapshot,\n\toptions: SchemaIrFromIntrospectionOptions = {},\n): AthenaSchemaIr {\n\tconst excludeInternal = options.excludeInternal !== false;\n\tconst allow = options.schemas ? new Set(options.schemas) : null;\n\tconst databaseName = snapshot.database?.trim() || DEFAULT_DATABASE;\n\tconst backend = snapshot.backend || DEFAULT_BACKEND;\n\n\tconst selectedNamespaces = new Set<string>();\n\tfor (const ns of Object.values(snapshot.schemas)) {\n\t\tif (allow && !allow.has(ns.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (excludeInternal && INTERNAL_SCHEMAS.has(ns.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tselectedNamespaces.add(ns.name);\n\t}\n\tconst includedTables = collectIntrospectionTables(\n\t\tsnapshot,\n\t\tselectedNamespaces,\n\t);\n\n\tconst namespaces: SchemaNamespace[] = [];\n\n\tfor (const ns of Object.values(snapshot.schemas)) {\n\t\tconst schemaTables = [...includedTables.values()].filter(\n\t\t\t(table) => (table.schema || ns.name) === ns.name,\n\t\t);\n\t\tif (schemaTables.length === 0) {\n\t\t\tif (!selectedNamespaces.has(ns.name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnamespaces.push({\n\t\t\t\tid: id(`ns:${databaseName}.${ns.name}`),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n\t\t\t\tenums: [],\n\t\t\t\ttables: [],\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst enums: SchemaEnum[] = [];\n\t\tconst seenEnums = new Set<string>();\n\t\tconst tables: SchemaTable[] = [];\n\n\t\tfor (const table of schemaTables) {\n\t\t\tconst tableId = tableStableId(databaseName, table.schema, table.name);\n\t\t\tconst columns: SchemaColumn[] = [];\n\t\t\tfor (const column of Object.values(table.columns)) {\n\t\t\t\tlet enumId: string | undefined;\n\t\t\t\tif (column.enumValues && column.enumValues.length > 0) {\n\t\t\t\t\tconst enumName = column.udtName || column.dataType || column.name;\n\t\t\t\t\tenumId = introspectedEnumStableId(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tenumName,\n\t\t\t\t\t);\n\t\t\t\t\tif (!seenEnums.has(enumId)) {\n\t\t\t\t\t\tseenEnums.add(enumId);\n\t\t\t\t\t\tenums.push({\n\t\t\t\t\t\t\tid: id(enumId),\n\t\t\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\t\t\tenumName,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tlabels: [...column.enumValues],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst defaultExpr =\n\t\t\t\t\tcolumn.defaultExpression === undefined\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: column.defaultExpression;\n\t\t\t\tcolumns.push({\n\t\t\t\t\tid: id(\n\t\t\t\t\t\tcolumnStableId(databaseName, table.schema, table.name, column.name),\n\t\t\t\t\t),\n\t\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\ttable.schema,\n\t\t\t\t\t\tcolumn.name,\n\t\t\t\t\t),\n\t\t\t\t\ttype: columnTypeFromIntrospection(column, backend, enumId),\n\t\t\t\t\tnullable: column.isNullable,\n\t\t\t\t\tdefault: defaultExpr,\n\t\t\t\t\tgenerated: column.isGenerated,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst constraints: SchemaConstraint[] = [];\n\t\t\tif (table.primaryKey.length > 0) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:pk`),\n\t\t\t\t\tkind: \"primary_key\",\n\t\t\t\t\tcolumns: [...table.primaryKey],\n\t\t\t\t\tname: null,\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const unique of table.uniqueConstraints ?? []) {\n\t\t\t\tconstraints.push({\n\t\t\t\t\tid: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n\t\t\t\t\tkind: \"unique\",\n\t\t\t\t\tcolumns: [...unique.columns],\n\t\t\t\t\tname: unique.name ?? null,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst relations: SchemaRelation[] = [];\n\t\t\tconst seenFk = new Set<string>();\n\t\t\tfor (const [relName, relation] of Object.entries(table.relations)) {\n\t\t\t\tconst targetId = tableStableId(\n\t\t\t\t\trelation.targetDatabase ?? databaseName,\n\t\t\t\t\trelation.targetSchema,\n\t\t\t\t\trelation.targetModel,\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\t!includedTables.has(\n\t\t\t\t\t\t`${relation.targetSchema}\\u0000${relation.targetModel}`,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (relation.through) {\n\t\t\t\t\tconst throughKey = `${relation.through.schema}\\u0000${relation.through.model}`;\n\t\t\t\t\tif (!includedTables.has(throughKey)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst backing: string[] = [];\n\t\t\t\tif (isOutboundFkRelation(relation) && !relation.through) {\n\t\t\t\t\tconst key = [\n\t\t\t\t\t\trelation.sourceColumns.join(\",\"),\n\t\t\t\t\t\trelation.targetSchema,\n\t\t\t\t\t\trelation.targetModel,\n\t\t\t\t\t\trelation.targetColumns.join(\",\"),\n\t\t\t\t\t].join(\"\\0\");\n\t\t\t\t\tif (!seenFk.has(key)) {\n\t\t\t\t\t\tseenFk.add(key);\n\t\t\t\t\t\tconst fkId = fkStableId(\n\t\t\t\t\t\t\ttableId,\n\t\t\t\t\t\t\trelation.sourceColumns,\n\t\t\t\t\t\t\ttargetId,\n\t\t\t\t\t\t\trelation.targetColumns,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbacking.push(fkId);\n\t\t\t\t\t\tconstraints.push({\n\t\t\t\t\t\t\tid: id(fkId),\n\t\t\t\t\t\t\tkind: \"foreign_key\",\n\t\t\t\t\t\t\tcolumns: [...relation.sourceColumns],\n\t\t\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\t\t\ttargetColumns: [...relation.targetColumns],\n\t\t\t\t\t\t\tname: relation.name ?? null,\n\t\t\t\t\t\t\tonDelete: normalizeReferentialAction(\n\t\t\t\t\t\t\t\trelation.onDelete,\n\t\t\t\t\t\t\t) as SchemaReferentialAction,\n\t\t\t\t\t\t\tonUpdate: normalizeReferentialAction(\n\t\t\t\t\t\t\t\trelation.onUpdate,\n\t\t\t\t\t\t\t) as SchemaReferentialAction,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trelations.push({\n\t\t\t\t\tid: id(`rel:${tableId}:${relName}`),\n\t\t\t\t\tcardinality: cardinalityFromKind(relation.kind),\n\t\t\t\t\tsourceTableId: tableId,\n\t\t\t\t\ttargetTableId: targetId,\n\t\t\t\t\tsourceColumns: [...relation.sourceColumns],\n\t\t\t\t\ttargetColumns: [...relation.targetColumns],\n\t\t\t\t\tbackingConstraintIds: backing,\n\t\t\t\t\tname: relation.name ?? relName,\n\t\t\t\t\t...(relation.through\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tthrough: {\n\t\t\t\t\t\t\t\t\ttableId: tableStableId(\n\t\t\t\t\t\t\t\t\t\tdatabaseName,\n\t\t\t\t\t\t\t\t\t\trelation.through.schema,\n\t\t\t\t\t\t\t\t\t\trelation.through.model,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tsourceColumns: [...relation.through.sourceColumns],\n\t\t\t\t\t\t\t\t\ttargetColumns: [...relation.through.targetColumns],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst indexes: SchemaIndex[] = (table.indexes ?? []).map((ix, index) => {\n\t\t\t\tconst directions = ix.columnDirections ?? [];\n\t\t\t\treturn {\n\t\t\t\t\tid: id(`idx:${tableId}:${ix.name ?? index}`),\n\t\t\t\t\tunique: Boolean(ix.unique),\n\t\t\t\t\tname: ix.name ?? null,\n\t\t\t\t\tpredicate: ix.predicate ?? null,\n\t\t\t\t\tmethod: ix.method ?? null,\n\t\t\t\t\tcolumns: ix.columns.map((colName, i) => ({\n\t\t\t\t\t\tname: colName,\n\t\t\t\t\t\tdirection:\n\t\t\t\t\t\t\tdirections[i] === \"desc\" ? (\"desc\" as const) : (\"asc\" as const),\n\t\t\t\t\t})),\n\t\t\t\t};\n\t\t\t});\n\n\t\t\ttables.push({\n\t\t\t\tid: id(tableId),\n\t\t\t\tidentity: schemaObjectIdentity(databaseName, table.schema, table.name),\n\t\t\t\tcolumns,\n\t\t\t\tconstraints,\n\t\t\t\trelations,\n\t\t\t\tindexes,\n\t\t\t});\n\t\t}\n\n\t\tnamespaces.push({\n\t\t\tid: id(`ns:${databaseName}.${ns.name}`),\n\t\t\tidentity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n\t\t\tenums,\n\t\t\ttables,\n\t\t});\n\t}\n\n\treturn canonicalizeAthenaSchemaIr({\n\t\tkind: ATHENA_SCHEMA_IR_KIND,\n\t\tirVersion: ATHENA_SCHEMA_IR_VERSION,\n\t\tdatabases: [\n\t\t\t{\n\t\t\t\tid: id(`db:${databaseName}`),\n\t\t\t\tidentity: schemaObjectIdentity(\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tDEFAULT_SCHEMA,\n\t\t\t\t\tdatabaseName,\n\t\t\t\t),\n\t\t\t\tnamespaces,\n\t\t\t\tbackend,\n\t\t\t},\n\t\t],\n\t\tmetadata: {\n\t\t\tprovenance: {\n\t\t\t\tsource: \"introspection\",\n\t\t\t\tgeneratedAt: snapshot.generatedAt,\n\t\t\t\tbackend,\n\t\t\t},\n\t\t\textensions: {},\n\t\t},\n\t});\n}\n\nfunction irDatabaseNames(ir: AthenaSchemaIr): string[] {\n\tconst names = new Set<string>();\n\tfor (const db of ir.databases) {\n\t\tnames.add(db.identity.physical.database || DEFAULT_DATABASE);\n\t}\n\treturn [...names];\n}\n\nfunction rewriteIrDatabaseName(\n\tir: AthenaSchemaIr,\n\tfrom: string,\n\tto: string,\n): AthenaSchemaIr {\n\tif (from === to) {\n\t\treturn ir;\n\t}\n\tconst rewritten: unknown = JSON.parse(JSON.stringify(ir), (key, value) => {\n\t\tif (key === \"database\" && value === from) {\n\t\t\treturn to;\n\t\t}\n\t\tif (typeof value !== \"string\") {\n\t\t\treturn value;\n\t\t}\n\t\tif (value === `db:${from}`) {\n\t\t\treturn `db:${to}`;\n\t\t}\n\t\tif (\n\t\t\tkey === \"id\" ||\n\t\t\tkey === \"enumId\" ||\n\t\t\tkey === \"targetTableId\" ||\n\t\t\tkey.endsWith(\"Id\")\n\t\t) {\n\t\t\treturn value.replaceAll(`:${from}.`, `:${to}.`).replaceAll(\n\t\t\t\t`db:${from}`,\n\t\t\t\t`db:${to}`,\n\t\t\t);\n\t\t}\n\t\treturn value;\n\t});\n\treturn rewritten as AthenaSchemaIr;\n}\n\n/**\n * Authored models omit a catalog name and lift as `default`. A live\n * introspection snapshot names that same catalog. When each document has\n * exactly one database and one side is `default`, treat them as the same\n * catalog so serial/enum models do not drop+create against the live DB.\n * Distinct named catalogs (multi-tenant) are left alone.\n */\nexport function alignSingletonDefaultDatabase(\n\tfrom: AthenaSchemaIr,\n\tto: AthenaSchemaIr,\n): { from: AthenaSchemaIr; to: AthenaSchemaIr } {\n\tconst fromNames = irDatabaseNames(from);\n\tconst toNames = irDatabaseNames(to);\n\tif (fromNames.length !== 1 || toNames.length !== 1) {\n\t\treturn { from, to };\n\t}\n\tconst fromDb = fromNames[0];\n\tconst toDb = toNames[0];\n\tif (!fromDb || !toDb || fromDb === toDb) {\n\t\treturn { from, to };\n\t}\n\tif (toDb === DEFAULT_DATABASE) {\n\t\treturn { from, to: rewriteIrDatabaseName(to, DEFAULT_DATABASE, fromDb) };\n\t}\n\tif (fromDb === DEFAULT_DATABASE) {\n\t\treturn { from: rewriteIrDatabaseName(from, DEFAULT_DATABASE, toDb), to };\n\t}\n\treturn { from, to };\n}\n\nexport {\n\tcollectIrNamespaceIdentities,\n\tcollectIrNamespaceNames,\n\tcollectIrTables,\n\tprojectTable,\n};\n","import type {\n\tSchemaForeignKey,\n\tSchemaIndex,\n\tSchemaTableIdentity,\n\tSchemaUniqueConstraint,\n} from \"./types.ts\";\n\n/** Stable map key for a schema-qualified table. */\nexport function tableIdentityKey(identity: SchemaTableIdentity): string {\n\treturn `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nexport function tableIdentityKeyParts(schema: string, name: string): string {\n\treturn tableIdentityKey({ schema, name });\n}\n\n/** Structural unique key: ordered columns (names ignored). */\nexport function uniqueStructuralKey(\n\tunique: Pick<SchemaUniqueConstraint, \"columns\">,\n): string {\n\treturn `u:${unique.columns.join(\"\\u0000\")}`;\n}\n\n/** Structural FK key: columns + target + target columns + actions. */\nexport function foreignKeyStructuralKey(\n\tfk: Pick<\n\t\tSchemaForeignKey,\n\t\t\"columns\" | \"target\" | \"targetColumns\" | \"onDelete\" | \"onUpdate\"\n\t>,\n): string {\n\treturn [\n\t\t\"fk\",\n\t\tfk.columns.join(\",\"),\n\t\ttableIdentityKey(fk.target),\n\t\tfk.targetColumns.join(\",\"),\n\t\tfk.onDelete,\n\t\tfk.onUpdate,\n\t].join(\"\\u0000\");\n}\n\n/**\n * Structural FK identity for match-before-alter (columns + target only).\n * Referential action changes become alter_foreign_key, not drop+add.\n */\nexport interface ForeignKeyMatchKeyInput {\n\treadonly columns: readonly string[];\n\treadonly target: SchemaTableIdentity;\n\treadonly targetColumns: readonly string[];\n}\n\nexport function foreignKeyMatchKey(fk: ForeignKeyMatchKeyInput): string {\n\treturn [\n\t\t\"fkm\",\n\t\tfk.columns.join(\",\"),\n\t\ttableIdentityKey(fk.target),\n\t\tfk.targetColumns.join(\",\"),\n\t].join(\"\\u0000\");\n}\n\n/** Structural index key: unique flag + ordered columns + directions + predicate. */\nexport function indexStructuralKey(\n\tindex: Pick<SchemaIndex, \"columns\" | \"unique\" | \"predicate\" | \"method\">,\n): string {\n\tconst cols = index.columns\n\t\t.map((c) => `${c.name}:${c.direction ?? \"asc\"}`)\n\t\t.join(\",\");\n\treturn [\n\t\t\"ix\",\n\t\tindex.unique ? \"1\" : \"0\",\n\t\tcols,\n\t\tindex.predicate ?? \"\",\n\t\tindex.method ?? \"\",\n\t].join(\"\\u0000\");\n}\n\nexport function compareStrings(a: string, b: string): number {\n\treturn a < b ? -1 : a > b ? 1 : 0;\n}\n\nexport function compareTableIdentity(\n\ta: SchemaTableIdentity,\n\tb: SchemaTableIdentity,\n): number {\n\tconst schemaCmp = compareStrings(a.schema, b.schema);\n\tif (schemaCmp !== 0) {\n\t\treturn schemaCmp;\n\t}\n\treturn compareStrings(a.name, b.name);\n}\n","import type {\n  SchemaDiffOperation,\n  SchemaDiffSummary,\n} from \"./types.ts\";\n\nconst EMPTY_SUMMARY: SchemaDiffSummary = {\n  schemasAdded: 0,\n  schemasRemoved: 0,\n  tablesAdded: 0,\n  tablesRemoved: 0,\n  tablesRenamed: 0,\n  columnsAdded: 0,\n  columnsRemoved: 0,\n  columnsRenamed: 0,\n  columnsChanged: 0,\n  primaryKeysAdded: 0,\n  primaryKeysRemoved: 0,\n  uniquesAdded: 0,\n  uniquesRemoved: 0,\n  foreignKeysAdded: 0,\n  foreignKeysRemoved: 0,\n  foreignKeysChanged: 0,\n  indexesAdded: 0,\n  indexesRemoved: 0,\n  totalOperations: 0,\n};\n\n/** Derive a lightweight summary from operations (no duplicate mutable state). */\nexport function summarizeSchemaDiffOperations(\n  operations: readonly SchemaDiffOperation[]\n): SchemaDiffSummary {\n  const summary: {\n    -readonly [K in keyof SchemaDiffSummary]: SchemaDiffSummary[K];\n  } = { ...EMPTY_SUMMARY, totalOperations: operations.length };\n\n  for (const op of operations) {\n    switch (op.kind) {\n      case \"create_schema\":\n        summary.schemasAdded += 1;\n        break;\n      case \"drop_schema\":\n        summary.schemasRemoved += 1;\n        break;\n      case \"create_table\":\n        summary.tablesAdded += 1;\n        break;\n      case \"drop_table\":\n        summary.tablesRemoved += 1;\n        break;\n      case \"rename_table\":\n        summary.tablesRenamed += 1;\n        break;\n      case \"add_column\":\n        summary.columnsAdded += 1;\n        break;\n      case \"drop_column\":\n        summary.columnsRemoved += 1;\n        break;\n      case \"rename_column\":\n        summary.columnsRenamed += 1;\n        break;\n      case \"alter_column\":\n        summary.columnsChanged += 1;\n        break;\n      case \"add_primary_key\":\n        summary.primaryKeysAdded += 1;\n        break;\n      case \"drop_primary_key\":\n        summary.primaryKeysRemoved += 1;\n        break;\n      case \"add_unique_constraint\":\n        summary.uniquesAdded += 1;\n        break;\n      case \"drop_unique_constraint\":\n        summary.uniquesRemoved += 1;\n        break;\n      case \"add_foreign_key\":\n        summary.foreignKeysAdded += 1;\n        break;\n      case \"drop_foreign_key\":\n        summary.foreignKeysRemoved += 1;\n        break;\n      case \"alter_foreign_key\":\n        summary.foreignKeysChanged += 1;\n        break;\n      case \"add_index\":\n        summary.indexesAdded += 1;\n        break;\n      case \"drop_index\":\n        summary.indexesRemoved += 1;\n        break;\n      default: {\n        const _exhaustive: never = op;\n        void _exhaustive;\n      }\n    }\n  }\n\n  return summary;\n}\n","/**\n * Typed errors for invalid schema snapshots and diff inputs.\n */\n\nexport type SchemaDiffErrorCode =\n\t| \"duplicate_schema\"\n\t| \"duplicate_table\"\n\t| \"duplicate_column\"\n\t| \"duplicate_unique\"\n\t| \"duplicate_foreign_key\"\n\t| \"duplicate_index\"\n\t| \"missing_pk_column\"\n\t| \"missing_unique_column\"\n\t| \"missing_fk_column\"\n\t| \"missing_index_column\"\n\t| \"fk_arity_mismatch\"\n\t| \"invalid_snapshot\"\n\t| \"unsupported_snapshot_version\";\n\nexport class SchemaDiffError extends Error {\n\treadonly code: SchemaDiffErrorCode;\n\treadonly details?: Readonly<Record<string, unknown>>;\n\n\tconstructor(\n\t\tcode: SchemaDiffErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Readonly<Record<string, unknown>>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"SchemaDiffError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n}\n","import { SchemaDiffError } from \"./errors.ts\";\nimport { foreignKeyMatchKey, indexStructuralKey, uniqueStructuralKey } from \"./identity.ts\";\nimport {\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  type AthenaSchemaSnapshot,\n  type SchemaTable,\n} from \"./types.ts\";\n\nfunction validateTable(table: SchemaTable): void {\n  const tableLabel = `${table.schema}.${table.name}`;\n  const columnNames = new Set<string>();\n\n  for (const column of table.columns) {\n    if (columnNames.has(column.name)) {\n      throw new SchemaDiffError(\n        \"duplicate_column\",\n        `Duplicate column \"${column.name}\" on table ${tableLabel}`,\n        { table: tableLabel, column: column.name }\n      );\n    }\n    columnNames.add(column.name);\n  }\n\n  if (table.primaryKey) {\n    for (const col of table.primaryKey.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_pk_column\",\n          `Primary key column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const uniqueKeys = new Set<string>();\n  for (const unique of table.uniqueConstraints) {\n    const key = uniqueStructuralKey(unique);\n    if (uniqueKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_unique\",\n        `Duplicate unique constraint on ${tableLabel}: (${unique.columns.join(\", \")})`,\n        { table: tableLabel, columns: unique.columns }\n      );\n    }\n    uniqueKeys.add(key);\n    for (const col of unique.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_unique_column\",\n          `Unique constraint column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const fkKeys = new Set<string>();\n  for (const fk of table.foreignKeys) {\n    if (fk.columns.length !== fk.targetColumns.length) {\n      throw new SchemaDiffError(\n        \"fk_arity_mismatch\",\n        `Foreign key arity mismatch on ${tableLabel}`,\n        {\n          table: tableLabel,\n          columns: fk.columns,\n          targetColumns: fk.targetColumns,\n        }\n      );\n    }\n    const key = foreignKeyMatchKey(fk);\n    if (fkKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_foreign_key\",\n        `Duplicate foreign key on ${tableLabel}`,\n        { table: tableLabel, columns: fk.columns }\n      );\n    }\n    fkKeys.add(key);\n    for (const col of fk.columns) {\n      if (!columnNames.has(col)) {\n        throw new SchemaDiffError(\n          \"missing_fk_column\",\n          `Foreign key column \"${col}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col }\n        );\n      }\n    }\n  }\n\n  const indexKeys = new Set<string>();\n  for (const index of table.indexes) {\n    const key = indexStructuralKey(index);\n    if (indexKeys.has(key)) {\n      throw new SchemaDiffError(\n        \"duplicate_index\",\n        `Duplicate index on ${tableLabel}`,\n        { table: tableLabel, columns: index.columns.map((c) => c.name) }\n      );\n    }\n    indexKeys.add(key);\n    for (const col of index.columns) {\n      if (!columnNames.has(col.name)) {\n        throw new SchemaDiffError(\n          \"missing_index_column\",\n          `Index column \"${col.name}\" missing on table ${tableLabel}`,\n          { table: tableLabel, column: col.name }\n        );\n      }\n    }\n  }\n}\n\n/**\n * Fail-closed validation of snapshot invariants before diffing.\n * Does not require FK targets to exist (cross-boundary / unmanaged targets allowed).\n */\nexport function validateSchemaSnapshot(snapshot: AthenaSchemaSnapshot): void {\n  if (!snapshot || typeof snapshot !== \"object\") {\n    throw new SchemaDiffError(\n      \"invalid_snapshot\",\n      \"Schema snapshot must be an object\"\n    );\n  }\n\n  if (snapshot.version !== ATHENA_SCHEMA_SNAPSHOT_VERSION) {\n    throw new SchemaDiffError(\n      \"unsupported_snapshot_version\",\n      `Unsupported schema snapshot version: ${String(\n        (snapshot as { version?: unknown }).version\n      )}`,\n      { version: (snapshot as { version?: unknown }).version }\n    );\n  }\n\n  if (!Array.isArray(snapshot.schemas)) {\n    throw new SchemaDiffError(\n      \"invalid_snapshot\",\n      \"Schema snapshot.schemas must be an array\"\n    );\n  }\n\n  const schemaNames = new Set<string>();\n  for (const ns of snapshot.schemas) {\n    if (schemaNames.has(ns.name)) {\n      throw new SchemaDiffError(\n        \"duplicate_schema\",\n        `Duplicate schema namespace \"${ns.name}\"`,\n        { schema: ns.name }\n      );\n    }\n    schemaNames.add(ns.name);\n\n    const tableNames = new Set<string>();\n    for (const table of ns.tables) {\n      if (table.schema !== ns.name) {\n        throw new SchemaDiffError(\n          \"invalid_snapshot\",\n          `Table ${table.schema}.${table.name} nested under schema \"${ns.name}\"`,\n          { schema: ns.name, table: `${table.schema}.${table.name}` }\n        );\n      }\n      const tableKey = table.name;\n      if (tableNames.has(tableKey)) {\n        throw new SchemaDiffError(\n          \"duplicate_table\",\n          `Duplicate table \"${ns.name}.${table.name}\"`,\n          { schema: ns.name, table: table.name }\n        );\n      }\n      tableNames.add(tableKey);\n      validateTable(table);\n    }\n  }\n}\n","import { canonicalizeAthenaSchemaIr } from \"../ir/canonicalize.ts\";\nimport {\n\talignSingletonDefaultDatabase,\n\tcollectIrNamespaceIdentities,\n\tcollectIrTables,\n\tisAthenaSchemaIr,\n\tprojectTable,\n\tschemaIrFromSnapshot,\n\tschemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport { physicalIdentityKey } from \"../ir/identity.ts\";\nimport type { SchemaTable as IrSchemaTable } from \"../ir/table.ts\";\nimport { SchemaIrError, validateAthenaSchemaIr } from \"../ir/validate.ts\";\nimport {\n\tforeignKeyMatchKey,\n\tindexStructuralKey,\n\tuniqueStructuralKey,\n} from \"./identity.ts\";\nimport {\n\tcolumnsEqual,\n\tcolumnTypesEqual,\n\tnormalizeSchemaSnapshot,\n\tprimaryKeysEqual,\n} from \"./normalize.ts\";\nimport { summarizeSchemaDiffOperations } from \"./summary.ts\";\nimport type {\n\tAthenaSchemaSnapshot,\n\tDiffSchemasInput,\n\tDiffSchemasOptions,\n\tSchemaColumn,\n\tSchemaDiff,\n\tSchemaDiffOperation,\n\tSchemaForeignKey,\n\tSchemaIndex,\n\tSchemaTable,\n\tSchemaTableIdentity,\n\tSchemaUniqueConstraint,\n} from \"./types.ts\";\nimport { validateSchemaSnapshot } from \"./validate.ts\";\n\nconst OPERATION_KIND_ORDER: Readonly<\n\tRecord<SchemaDiffOperation[\"kind\"], number>\n> = {\n\tcreate_schema: 4,\n\trename_table: 5,\n\tdrop_foreign_key: 10,\n\tdrop_index: 20,\n\tdrop_unique_constraint: 30,\n\tdrop_primary_key: 40,\n\tdrop_column: 50,\n\tdrop_table: 60,\n\tdrop_schema: 70,\n\tcreate_table: 90,\n\trename_column: 100,\n\tadd_column: 110,\n\talter_column: 130,\n\tadd_primary_key: 140,\n\tadd_unique_constraint: 150,\n\tadd_index: 160,\n\tadd_foreign_key: 170,\n\talter_foreign_key: 180,\n};\n\nfunction tableId(table: SchemaTable): SchemaTableIdentity {\n\tconst database = table.database?.trim();\n\treturn {\n\t\tschema: table.schema,\n\t\tname: table.name,\n\t\t...(database ? { database } : {}),\n\t};\n}\n\nfunction operationSortKey(op: SchemaDiffOperation): string {\n\tconst kindOrder = String(OPERATION_KIND_ORDER[op.kind]).padStart(3, \"0\");\n\tswitch (op.kind) {\n\t\tcase \"create_schema\":\n\t\tcase \"drop_schema\":\n\t\t\treturn `${kindOrder}\\u0000${op.database ?? \"\"}\\u0000${op.schema}`;\n\t\tcase \"create_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"drop_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"rename_table\":\n\t\t\treturn `${kindOrder}\\u0000${op.from.schema}\\u0000${op.from.name}\\u0000${op.to.name}`;\n\t\tcase \"add_column\":\n\t\tcase \"drop_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column.name}`;\n\t\tcase \"rename_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n\t\tcase \"alter_column\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column}`;\n\t\tcase \"add_primary_key\":\n\t\tcase \"drop_primary_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.primaryKey.columns.join(\",\")}`;\n\t\tcase \"add_unique_constraint\":\n\t\tcase \"drop_unique_constraint\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.unique.columns.join(\",\")}`;\n\t\tcase \"add_foreign_key\":\n\t\tcase \"drop_foreign_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.foreignKey)}`;\n\t\tcase \"alter_foreign_key\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.before)}`;\n\t\tcase \"add_index\":\n\t\tcase \"drop_index\":\n\t\t\treturn `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${indexStructuralKey(op.index)}`;\n\t\tdefault: {\n\t\t\tconst _never: never = op;\n\t\t\treturn kindOrder + String(_never);\n\t\t}\n\t}\n}\n\nfunction sortOperations(\n\toperations: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\treturn operations\n\t\t.map((op, index) => ({ index, op }))\n\t\t.sort((a, b) => {\n\t\t\tconst ka = operationSortKey(a.op);\n\t\t\tconst kb = operationSortKey(b.op);\n\t\t\tif (ka < kb) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (ka > kb) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn a.index - b.index;\n\t\t})\n\t\t.map((item) => item.op);\n}\n\nfunction indexColumns(table: SchemaTable): Map<string, SchemaColumn> {\n\tconst map = new Map<string, SchemaColumn>();\n\tfor (const column of table.columns) {\n\t\tmap.set(column.name, column);\n\t}\n\treturn map;\n}\n\nfunction indexUniques(table: SchemaTable): Map<string, SchemaUniqueConstraint> {\n\tconst map = new Map<string, SchemaUniqueConstraint>();\n\tfor (const unique of table.uniqueConstraints) {\n\t\tmap.set(uniqueStructuralKey(unique), unique);\n\t}\n\treturn map;\n}\n\nfunction indexForeignKeys(table: SchemaTable): Map<string, SchemaForeignKey> {\n\tconst map = new Map<string, SchemaForeignKey>();\n\tfor (const fk of table.foreignKeys) {\n\t\tmap.set(foreignKeyMatchKey(fk), fk);\n\t}\n\treturn map;\n}\n\nfunction indexIndexes(table: SchemaTable): Map<string, SchemaIndex> {\n\tconst map = new Map<string, SchemaIndex>();\n\tfor (const index of table.indexes) {\n\t\tmap.set(indexStructuralKey(index), index);\n\t}\n\treturn map;\n}\n\nfunction diffColumns(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromCols = indexColumns(fromTable);\n\tconst toCols = indexColumns(toTable);\n\n\tfor (const [name, fromCol] of fromCols) {\n\t\tif (!toCols.has(name)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_column\",\n\t\t\t\ttable: identity,\n\t\t\t\tcolumn: fromCol,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [name, toCol] of toCols) {\n\t\tconst fromCol = fromCols.get(name);\n\t\tif (!fromCol) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_column\",\n\t\t\t\ttable: identity,\n\t\t\t\tcolumn: toCol,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (columnsEqual(fromCol, toCol)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst changes: {\n\t\t\ttype?: { from: SchemaColumn[\"type\"]; to: SchemaColumn[\"type\"] };\n\t\t\tnullable?: { from: boolean; to: boolean };\n\t\t\tdefault?: { from: string | null; to: string | null };\n\t\t\tisGenerated?: { from: boolean; to: boolean };\n\t\t} = {};\n\n\t\t// Include enumValues (and all other type fields) so enum-label-only\n\t\t// changes populate the explicit `changes.type` delta for planners.\n\t\tif (!columnTypesEqual(fromCol.type, toCol.type)) {\n\t\t\tchanges.type = { from: fromCol.type, to: toCol.type };\n\t\t}\n\t\tif (fromCol.nullable !== toCol.nullable) {\n\t\t\tchanges.nullable = { from: fromCol.nullable, to: toCol.nullable };\n\t\t}\n\t\tif (fromCol.default !== toCol.default) {\n\t\t\tchanges.default = { from: fromCol.default, to: toCol.default };\n\t\t}\n\t\tif (fromCol.isGenerated !== toCol.isGenerated) {\n\t\t\tchanges.isGenerated = {\n\t\t\t\tfrom: fromCol.isGenerated,\n\t\t\t\tto: toCol.isGenerated,\n\t\t\t};\n\t\t}\n\n\t\tops.push({\n\t\t\tkind: \"alter_column\",\n\t\t\ttable: identity,\n\t\t\tcolumn: name,\n\t\t\tbefore: fromCol,\n\t\t\tafter: toCol,\n\t\t\tchanges,\n\t\t});\n\t}\n}\n\nfunction diffPrimaryKey(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tif (primaryKeysEqual(fromTable.primaryKey, toTable.primaryKey)) {\n\t\treturn;\n\t}\n\tif (fromTable.primaryKey) {\n\t\tops.push({\n\t\t\tkind: \"drop_primary_key\",\n\t\t\ttable: identity,\n\t\t\tprimaryKey: fromTable.primaryKey,\n\t\t});\n\t}\n\tif (toTable.primaryKey) {\n\t\tops.push({\n\t\t\tkind: \"add_primary_key\",\n\t\t\ttable: identity,\n\t\t\tprimaryKey: toTable.primaryKey,\n\t\t});\n\t}\n}\n\nfunction diffUniques(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexUniques(fromTable);\n\tconst toMap = indexUniques(toTable);\n\n\tfor (const [key, unique] of fromMap) {\n\t\tif (!toMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_unique_constraint\",\n\t\t\t\ttable: identity,\n\t\t\t\tunique,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, unique] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_unique_constraint\",\n\t\t\t\ttable: identity,\n\t\t\t\tunique,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction foreignKeysEqual(a: SchemaForeignKey, b: SchemaForeignKey): boolean {\n\treturn (\n\t\tforeignKeyMatchKey(a) === foreignKeyMatchKey(b) &&\n\t\ta.onDelete === b.onDelete &&\n\t\ta.onUpdate === b.onUpdate\n\t);\n}\n\nfunction diffForeignKeys(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexForeignKeys(fromTable);\n\tconst toMap = indexForeignKeys(toTable);\n\n\tfor (const [key, fromFk] of fromMap) {\n\t\tconst toFk = toMap.get(key);\n\t\tif (!toFk) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tforeignKey: fromFk,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!foreignKeysEqual(fromFk, toFk)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"alter_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tbefore: fromFk,\n\t\t\t\tafter: toFk,\n\t\t\t});\n\t\t}\n\t}\n\n\tfor (const [key, toFk] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_foreign_key\",\n\t\t\t\ttable: identity,\n\t\t\t\tforeignKey: toFk,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction diffIndexes(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tconst identity = tableId(toTable);\n\tconst fromMap = indexIndexes(fromTable);\n\tconst toMap = indexIndexes(toTable);\n\n\tfor (const [key, index] of fromMap) {\n\t\tif (!toMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_index\",\n\t\t\t\ttable: identity,\n\t\t\t\tindex,\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, index] of toMap) {\n\t\tif (!fromMap.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"add_index\",\n\t\t\t\ttable: identity,\n\t\t\t\tindex,\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction rewriteColumnName(\n\tname: string,\n\trenameMap: Map<string, string>,\n): string {\n\treturn renameMap.get(name) ?? name;\n}\n\nfunction alignProjectedTableAfterColumnRenames(\n\ttable: SchemaTable,\n\trenameMap: Map<string, string>,\n\tdroppedNames: Set<string>,\n): SchemaTable {\n\tif (renameMap.size === 0 && droppedNames.size === 0) {\n\t\treturn table;\n\t}\n\treturn {\n\t\t...table,\n\t\tcolumns: table.columns\n\t\t\t.filter((column) => !droppedNames.has(column.name))\n\t\t\t.map((column) => ({\n\t\t\t\t...column,\n\t\t\t\tname: rewriteColumnName(column.name, renameMap),\n\t\t\t})),\n\t\tprimaryKey: table.primaryKey\n\t\t\t? {\n\t\t\t\t\t...table.primaryKey,\n\t\t\t\t\tcolumns: table.primaryKey.columns.map((name) =>\n\t\t\t\t\t\trewriteColumnName(name, renameMap),\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t: table.primaryKey,\n\t\tuniqueConstraints: table.uniqueConstraints.map((unique) => ({\n\t\t\t...unique,\n\t\t\tcolumns: unique.columns.map((name) => rewriteColumnName(name, renameMap)),\n\t\t})),\n\t\tforeignKeys: table.foreignKeys.map((fk) => ({\n\t\t\t...fk,\n\t\t\tcolumns: fk.columns.map((name) => rewriteColumnName(name, renameMap)),\n\t\t})),\n\t\tindexes: table.indexes.map((index) => ({\n\t\t\t...index,\n\t\t\tcolumns: index.columns.map((column) => ({\n\t\t\t\t...column,\n\t\t\t\tname: rewriteColumnName(column.name, renameMap),\n\t\t\t})),\n\t\t})),\n\t};\n}\n\nfunction tableIdentityKey(identity: SchemaTableIdentity): string {\n\treturn `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nfunction relationNameKey(\n\ttable: SchemaTableIdentity,\n\tname: string,\n): string {\n\treturn `${table.database ?? \"\"}\\u0000${table.schema}\\u0000${name}`;\n}\n\nfunction droppedRelationNameKey(op: SchemaDiffOperation): string | null {\n\tlet name: string | null | undefined;\n\tswitch (op.kind) {\n\t\tcase \"drop_index\":\n\t\t\tname = op.index.name;\n\t\t\tbreak;\n\t\tcase \"drop_unique_constraint\":\n\t\t\tname = op.unique.name;\n\t\t\tbreak;\n\t\tcase \"drop_primary_key\":\n\t\t\tname = op.primaryKey.name;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n\tif (typeof name !== \"string\" || name.length === 0) {\n\t\treturn null;\n\t}\n\treturn relationNameKey(op.table, name);\n}\n\nfunction droppedRelationTableKey(op: SchemaDiffOperation): string | null {\n\tswitch (op.kind) {\n\t\tcase \"drop_index\":\n\t\tcase \"drop_unique_constraint\":\n\t\tcase \"drop_primary_key\":\n\t\t\treturn tableIdentityKey(op.table);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction relationNameFromDroppedTable(\n\ttable: SchemaTableIdentity,\n\tname: string | null | undefined,\n): string | null {\n\tif (typeof name !== \"string\" || name.length === 0) {\n\t\treturn null;\n\t}\n\treturn relationNameKey(table, name);\n}\n\nfunction relationNamesOwnedByDroppedTable(op: SchemaDiffOperation): string[] {\n\tif (op.kind !== \"drop_table\" || !op.previous) {\n\t\treturn [];\n\t}\n\tconst names: string[] = [];\n\tconst add = (name: string | null | undefined) => {\n\t\tconst key = relationNameFromDroppedTable(op.table, name);\n\t\tif (key !== null) {\n\t\t\tnames.push(key);\n\t\t}\n\t};\n\tadd(op.previous.primaryKey?.name);\n\tfor (const unique of op.previous.uniqueConstraints) {\n\t\tadd(unique.name);\n\t}\n\tfor (const index of op.previous.indexes) {\n\t\tadd(index.name);\n\t}\n\treturn names;\n}\n\nfunction unusedTableName(\n\tidentity: SchemaTableIdentity,\n\treserved: Set<string>,\n): string {\n\tconst safeFrom = identity.name.replace(/[^A-Za-z0-9_]/g, \"_\");\n\tlet name = `__athena_rename_${safeFrom}`;\n\tlet n = 2;\n\twhile (reserved.has(tableIdentityKey({ ...identity, name }))) {\n\t\tname = `__athena_rename_${safeFrom}_${n}`;\n\t\tn += 1;\n\t}\n\treserved.add(tableIdentityKey({ ...identity, name }));\n\treturn name;\n}\n\nfunction isDependencyRemovalForDroppedTable(\n\top: SchemaDiffOperation,\n\tdest: string,\n): boolean {\n\treturn (\n\t\top.kind === \"drop_foreign_key\" &&\n\t\ttableIdentityKey(op.foreignKey.target) === dest\n\t);\n}\n\nfunction extractPendingMatching(\n\tpending: SchemaDiffOperation[],\n\tpredicate: (op: SchemaDiffOperation) => boolean,\n): SchemaDiffOperation[] {\n\tconst extracted: SchemaDiffOperation[] = [];\n\tconst kept: SchemaDiffOperation[] = [];\n\tfor (const op of pending) {\n\t\tif (predicate(op)) {\n\t\t\textracted.push(op);\n\t\t} else {\n\t\t\tkept.push(op);\n\t\t}\n\t}\n\tpending.length = 0;\n\tpending.push(...kept);\n\treturn extracted;\n}\n\nfunction applyTableIdentityScheduling(\n\tops: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\tconst occupied = new Set<string>();\n\tconst reserved = new Set<string>();\n\tfor (const op of ops) {\n\t\tif (op.kind === \"drop_table\") {\n\t\t\toccupied.add(tableIdentityKey(op.table));\n\t\t\treserved.add(tableIdentityKey(op.table));\n\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(op)) {\n\t\t\t\toccupied.add(relation);\n\t\t\t\treserved.add(relation);\n\t\t\t}\n\t\t}\n\t\tif (op.kind === \"rename_table\") {\n\t\t\toccupied.add(tableIdentityKey(op.from));\n\t\t\treserved.add(tableIdentityKey(op.from));\n\t\t\treserved.add(tableIdentityKey(op.to));\n\t\t}\n\t\tif (op.kind === \"create_table\") {\n\t\t\treserved.add(tableIdentityKey(tableId(op.table)));\n\t\t}\n\t\tconst droppedRelation = droppedRelationNameKey(op);\n\t\tconst dropTableKey = droppedRelationTableKey(op);\n\t\tif (droppedRelation !== null && dropTableKey !== null) {\n\t\t\treserved.add(droppedRelation);\n\t\t\tif (dropTableKey !== droppedRelation) {\n\t\t\t\toccupied.add(droppedRelation);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pending = [...ops];\n\tconst out: SchemaDiffOperation[] = [];\n\twhile (pending.length > 0) {\n\t\tconst op = pending[0];\n\t\tif (op === undefined) {\n\t\t\tbreak;\n\t\t}\n\t\tif (op.kind === \"rename_table\") {\n\t\t\tconst dest = tableIdentityKey(op.to);\n\t\t\tif (occupied.has(dest)) {\n\t\t\t\tconst dropIdx = pending.findIndex(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.kind === \"drop_table\" &&\n\t\t\t\t\t\t(tableIdentityKey(candidate.table) === dest ||\n\t\t\t\t\t\t\trelationNamesOwnedByDroppedTable(candidate).includes(dest)),\n\t\t\t\t);\n\t\t\t\tif (dropIdx >= 0) {\n\t\t\t\t\tconst drop = pending.splice(dropIdx, 1)[0];\n\t\t\t\t\tif (drop?.kind === \"drop_table\") {\n\t\t\t\t\t\tconst removals = extractPendingMatching(pending, (candidate) =>\n\t\t\t\t\t\t\tisDependencyRemovalForDroppedTable(candidate, dest),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tout.push(...removals, drop);\n\t\t\t\t\t\toccupied.delete(dest);\n\t\t\t\t\t\toccupied.delete(tableIdentityKey(drop.table));\n\t\t\t\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(drop)) {\n\t\t\t\t\t\t\toccupied.delete(relation);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst dropRelationIdx = pending.findIndex((candidate) => {\n\t\t\t\t\tconst key = droppedRelationNameKey(candidate);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tkey === dest && droppedRelationTableKey(candidate) !== dest\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tif (dropRelationIdx >= 0) {\n\t\t\t\t\tconst dropRelation = pending.splice(dropRelationIdx, 1)[0];\n\t\t\t\t\tif (dropRelation !== undefined) {\n\t\t\t\t\t\tout.push(dropRelation);\n\t\t\t\t\t\toccupied.delete(dest);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst occupantIdx = pending.findIndex((candidate, index) => {\n\t\t\t\t\tif (index === 0 || candidate.kind !== \"rename_table\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttableIdentityKey(candidate.from) === dest &&\n\t\t\t\t\t\t!occupied.has(tableIdentityKey(candidate.to))\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tif (occupantIdx > 0) {\n\t\t\t\t\tconst [occupant] = pending.splice(occupantIdx, 1);\n\t\t\t\t\tif (occupant) {\n\t\t\t\t\t\tpending.unshift(occupant);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst tempName = unusedTableName(op.from, reserved);\n\t\t\t\tconst tempIdentity: SchemaTableIdentity = {\n\t\t\t\t\tname: tempName,\n\t\t\t\t\tschema: op.from.schema,\n\t\t\t\t};\n\t\t\t\tout.push({\n\t\t\t\t\tkind: \"rename_table\",\n\t\t\t\t\tfrom: op.from,\n\t\t\t\t\tto: tempIdentity,\n\t\t\t\t});\n\t\t\t\toccupied.delete(tableIdentityKey(op.from));\n\t\t\t\toccupied.add(tableIdentityKey(tempIdentity));\n\t\t\t\tpending[0] = {\n\t\t\t\t\tkind: \"rename_table\",\n\t\t\t\t\tfrom: tempIdentity,\n\t\t\t\t\tto: op.to,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tpending.shift();\n\t\t\tout.push(op);\n\t\t\toccupied.delete(tableIdentityKey(op.from));\n\t\t\toccupied.add(dest);\n\t\t\tcontinue;\n\t\t}\n\t\tpending.shift();\n\t\tif (op.kind === \"drop_table\") {\n\t\t\toccupied.delete(tableIdentityKey(op.table));\n\t\t\tfor (const relation of relationNamesOwnedByDroppedTable(op)) {\n\t\t\t\toccupied.delete(relation);\n\t\t\t}\n\t\t}\n\t\tconst droppedRelation = droppedRelationNameKey(op);\n\t\tif (droppedRelation !== null) {\n\t\t\toccupied.delete(droppedRelation);\n\t\t}\n\t\tif (op.kind === \"create_table\") {\n\t\t\toccupied.add(tableIdentityKey(tableId(op.table)));\n\t\t}\n\t\tout.push(op);\n\t}\n\treturn out;\n}\n\nfunction unusedPhysicalName(base: string, reserved: Set<string>): string {\n\tlet name = base;\n\tlet n = 2;\n\twhile (reserved.has(name)) {\n\t\tname = `${base}_${n}`;\n\t\tn += 1;\n\t}\n\treserved.add(name);\n\treturn name;\n}\n\nfunction linearizeColumnRenames(\n\trenames: Array<{ from: string; to: string }>,\n\toccupied: Set<string>,\n\treservedNames: Set<string>,\n): Array<{ from: string; to: string }> {\n\tconst remaining = new Map<string, string>();\n\tfor (const rename of renames) {\n\t\tif (rename.from !== rename.to) {\n\t\t\tremaining.set(rename.from, rename.to);\n\t\t}\n\t}\n\tconst reserved = new Set(reservedNames);\n\tfor (const to of remaining.values()) {\n\t\treserved.add(to);\n\t}\n\n\tconst seen = new Set<string>();\n\tfor (const start of remaining.keys()) {\n\t\tif (seen.has(start)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst stack: string[] = [];\n\t\tconst onStack = new Set<string>();\n\t\tlet node: string | undefined = start;\n\t\twhile (node !== undefined && remaining.has(node)) {\n\t\t\tif (onStack.has(node)) {\n\t\t\t\tconst dest = remaining.get(node);\n\t\t\t\tif (dest === undefined) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst safeFrom = node.replace(/[^A-Za-z0-9_]/g, \"_\");\n\t\t\t\tconst temp = unusedPhysicalName(`__athena_rename_${safeFrom}`, reserved);\n\t\t\t\tremaining.set(node, temp);\n\t\t\t\tremaining.set(temp, dest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (seen.has(node)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tonStack.add(node);\n\t\t\tstack.push(node);\n\t\t\tnode = remaining.get(node);\n\t\t}\n\t\tfor (const item of stack) {\n\t\t\tseen.add(item);\n\t\t}\n\t}\n\n\tconst live = new Set(occupied);\n\tconst ordered: Array<{ from: string; to: string }> = [];\n\tconst pending = [...remaining.entries()].map(([from, to]) => ({ from, to }));\n\twhile (pending.length > 0) {\n\t\tconst idx = pending.findIndex((item) => !live.has(item.to));\n\t\tif (idx < 0) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t\"Column rename cycle could not be linearized\",\n\t\t\t);\n\t\t}\n\t\tconst item = pending.splice(idx, 1)[0];\n\t\tif (!item) {\n\t\t\tbreak;\n\t\t}\n\t\tordered.push(item);\n\t\tlive.delete(item.from);\n\t\tlive.add(item.to);\n\t}\n\treturn ordered;\n}\n\nfunction emitColumnRenamesByIrId(\n\tfromIrTable: IrSchemaTable,\n\ttoIrTable: IrSchemaTable,\n\tfromProjected: SchemaTable,\n\ttableIdentity: SchemaTableIdentity,\n\tops: SchemaDiffOperation[],\n): { droppedNames: Set<string>; renameMap: Map<string, string> } {\n\tconst toById = new Map(\n\t\ttoIrTable.columns.map((column) => [String(column.id), column]),\n\t);\n\tconst fromProjectedByName = indexColumns(fromProjected);\n\tconst planned: Array<{ from: string; to: string }> = [];\n\tconst renameMap = new Map<string, string>();\n\tconst occupied = new Set<string>();\n\tconst reserved = new Set<string>();\n\tconst droppedNames = new Set<string>();\n\tfor (const fromCol of fromIrTable.columns) {\n\t\tconst fromName = fromCol.identity.physical.name;\n\t\treserved.add(fromName);\n\t\tconst toCol = toById.get(String(fromCol.id));\n\t\tif (!toCol) {\n\t\t\tdroppedNames.add(fromName);\n\t\t\tconst column = fromProjectedByName.get(fromName);\n\t\t\tif (column) {\n\t\t\t\tops.push({\n\t\t\t\t\tkind: \"drop_column\",\n\t\t\t\t\ttable: tableIdentity,\n\t\t\t\t\tcolumn,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\toccupied.add(fromName);\n\t\tconst toName = toCol.identity.physical.name;\n\t\tif (fromName === toName) {\n\t\t\tcontinue;\n\t\t}\n\t\trenameMap.set(fromName, toName);\n\t\tplanned.push({ from: fromName, to: toName });\n\t}\n\tfor (const toCol of toIrTable.columns) {\n\t\treserved.add(toCol.identity.physical.name);\n\t}\n\tfor (const rename of linearizeColumnRenames(planned, occupied, reserved)) {\n\t\tops.push({\n\t\t\tkind: \"rename_column\",\n\t\t\ttable: tableIdentity,\n\t\t\tfrom: rename.from,\n\t\t\tto: rename.to,\n\t\t});\n\t}\n\treturn { droppedNames, renameMap };\n}\n\nfunction diffTable(\n\tfromTable: SchemaTable,\n\ttoTable: SchemaTable,\n\tops: SchemaDiffOperation[],\n): void {\n\tdiffColumns(fromTable, toTable, ops);\n\tdiffPrimaryKey(fromTable, toTable, ops);\n\tdiffUniques(fromTable, toTable, ops);\n\tdiffForeignKeys(fromTable, toTable, ops);\n\tdiffIndexes(fromTable, toTable, ops);\n}\n\nfunction liftToIr(\n\tvalue: AthenaSchemaSnapshot | AthenaSchemaIr,\n\tshouldValidate: boolean,\n): AthenaSchemaIr {\n\tif (isAthenaSchemaIr(value)) {\n\t\tconst canonical = canonicalizeAthenaSchemaIr(value);\n\t\tif (shouldValidate) {\n\t\t\tvalidateAthenaSchemaIr(canonical);\n\t\t}\n\t\treturn canonical;\n\t}\n\tconst normalized = normalizeSchemaSnapshot(value);\n\tif (shouldValidate) {\n\t\tvalidateSchemaSnapshot(normalized);\n\t}\n\treturn schemaIrFromSnapshot(normalized);\n}\n\nfunction normalizeProjectedTable(\n\ttable: SchemaTable,\n\tbackend: string | null | undefined,\n): SchemaTable {\n\tconst snapshot = normalizeSchemaSnapshot({\n\t\tversion: 1,\n\t\tbackend: backend ?? null,\n\t\tschemas: [{ name: table.schema, tables: [table] }],\n\t});\n\treturn snapshot.schemas[0]?.tables[0] ?? table;\n}\n\n/**\n * Compare two schema documents.\n *\n * Direction: operations transform `from` (actual) → `to` (desired).\n * Consumes AthenaSchemaIr; v1 snapshots are lifted at this boundary.\n * Same SchemaObjectId + changed physical name is `rename_table`.\n */\nexport function diffSchemas(\n\tinput: DiffSchemasInput,\n\toptions: DiffSchemasOptions = {},\n): SchemaDiff {\n\tconst shouldValidate = options.validate !== false;\n\tconst lifted = alignSingletonDefaultDatabase(\n\t\tliftToIr(input.from, shouldValidate),\n\t\tliftToIr(input.to, shouldValidate),\n\t);\n\tconst fromIr = lifted.from;\n\tconst toIr = lifted.to;\n\n\tconst fromProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(fromIr));\n\tconst toProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(toIr));\n\tconst backend = toProjected.backend ?? fromProjected.backend;\n\n\tconst ops: SchemaDiffOperation[] = [];\n\tconst fromIrTables = collectIrTables(fromIr);\n\tconst toIrTables = collectIrTables(toIr);\n\tconst fromById = new Map(\n\t\tfromIrTables.map((table) => [String(table.id), table]),\n\t);\n\tconst toById = new Map(toIrTables.map((table) => [String(table.id), table]));\n\n\tconst fromSchemas = collectIrNamespaceIdentities(fromIr);\n\tconst toSchemas = collectIrNamespaceIdentities(toIr);\n\n\tfor (const [key, identity] of fromSchemas) {\n\t\tif (!toSchemas.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"drop_schema\",\n\t\t\t\tschema: identity.schema,\n\t\t\t\t...(identity.database ? { database: identity.database } : {}),\n\t\t\t});\n\t\t}\n\t}\n\tfor (const [key, identity] of toSchemas) {\n\t\tif (!fromSchemas.has(key)) {\n\t\t\tops.push({\n\t\t\t\tkind: \"create_schema\",\n\t\t\t\tschema: identity.schema,\n\t\t\t\t...(identity.database ? { database: identity.database } : {}),\n\t\t\t});\n\t\t}\n\t}\n\n\tconst pairedToIds = new Set<string>();\n\tconst pairs: Array<{\n\t\tfromTable: IrSchemaTable;\n\t\ttoTable: IrSchemaTable;\n\t}> = [];\n\n\tfor (const [tableObjectId, fromTable] of fromById) {\n\t\tconst toTable = toById.get(tableObjectId);\n\t\tif (toTable) {\n\t\t\tpairs.push({ fromTable, toTable });\n\t\t\tpairedToIds.add(tableObjectId);\n\t\t}\n\t}\n\n\tconst unmatchedFrom = [...fromById.entries()].filter(\n\t\t([id]) => !toById.has(id),\n\t);\n\tconst unmatchedTo = [...toById.entries()].filter(\n\t\t([id]) => !pairedToIds.has(id),\n\t);\n\tconst toByPhysical = new Map<string, IrSchemaTable[]>();\n\tfor (const [, table] of unmatchedTo) {\n\t\tconst key = physicalIdentityKey(table.identity);\n\t\tconst list = toByPhysical.get(key) ?? [];\n\t\tlist.push(table);\n\t\ttoByPhysical.set(key, list);\n\t}\n\n\tconst physicallyPairedFrom = new Set<string>();\n\tfor (const [fromId, fromTable] of unmatchedFrom) {\n\t\tconst candidates = toByPhysical.get(\n\t\t\tphysicalIdentityKey(fromTable.identity),\n\t\t);\n\t\tconst toTable = candidates?.shift();\n\t\tif (toTable) {\n\t\t\tpairs.push({ fromTable, toTable });\n\t\t\tphysicallyPairedFrom.add(fromId);\n\t\t\tpairedToIds.add(String(toTable.id));\n\t\t}\n\t}\n\n\tfor (const [fromId, fromTable] of unmatchedFrom) {\n\t\tif (physicallyPairedFrom.has(fromId)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst projected = normalizeProjectedTable(\n\t\t\tprojectTable(fromTable, fromIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tops.push({\n\t\t\tkind: \"drop_table\",\n\t\t\ttable: tableId(projected),\n\t\t\tprevious: projected,\n\t\t});\n\t}\n\n\tfor (const [tableObjectId, toTable] of toById) {\n\t\tif (pairedToIds.has(tableObjectId)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst toProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(toTable, toIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tops.push({\n\t\t\tkind: \"create_table\",\n\t\t\ttable: toProjectedTable,\n\t\t});\n\t}\n\n\tfor (const { fromTable, toTable } of pairs) {\n\t\tconst toProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(toTable, toIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tconst fromProjectedTable = normalizeProjectedTable(\n\t\t\tprojectTable(fromTable, fromIr, true),\n\t\t\tbackend,\n\t\t);\n\t\tconst fromIdentity = tableId(fromProjectedTable);\n\t\tconst toIdentity = tableId(toProjectedTable);\n\t\tconst fromDatabase = fromTable.identity.physical.database;\n\t\tconst toDatabase = toTable.identity.physical.database;\n\t\tif (fromDatabase !== toDatabase) {\n\t\t\tthrow new SchemaIrError(\n\t\t\t\t`Cross-database table moves are unsupported (${fromDatabase} → ${toDatabase})`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tfromIdentity.schema !== toIdentity.schema ||\n\t\t\tfromIdentity.name !== toIdentity.name\n\t\t) {\n\t\t\tops.push({\n\t\t\t\tkind: \"rename_table\",\n\t\t\t\tfrom: fromIdentity,\n\t\t\t\tto: toIdentity,\n\t\t\t});\n\t\t}\n\t\tconst { droppedNames, renameMap: columnRenames } =\n\t\t\temitColumnRenamesByIrId(\n\t\t\t\tfromTable,\n\t\t\t\ttoTable,\n\t\t\t\tfromProjectedTable,\n\t\t\t\ttoIdentity,\n\t\t\t\tops,\n\t\t\t);\n\t\tconst fromAligned = alignProjectedTableAfterColumnRenames(\n\t\t\tfromProjectedTable,\n\t\t\tcolumnRenames,\n\t\t\tdroppedNames,\n\t\t);\n\t\tdiffTable(fromAligned, toProjectedTable, ops);\n\t}\n\n\tconst operations = expandDroppedTableColumns(\n\t\tapplyTableIdentityScheduling(sortOperations(ops)),\n\t);\n\tconst summary = summarizeSchemaDiffOperations(operations);\n\treturn {\n\t\toperations,\n\t\tsummary,\n\t\tisEmpty: operations.length === 0,\n\t};\n}\n\nfunction expandDroppedTableColumns(\n\toperations: SchemaDiffOperation[],\n): SchemaDiffOperation[] {\n\tconst extra: SchemaDiffOperation[] = [];\n\tconst seen = new Set<string>();\n\tfor (const op of operations) {\n\t\tif (op.kind === \"drop_column\") {\n\t\t\tseen.add(`${tableIdentityKey(op.table)}.${op.column.name}`);\n\t\t}\n\t}\n\tfor (const op of operations) {\n\t\tif (op.kind !== \"drop_table\" || !op.previous) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const column of op.previous.columns) {\n\t\t\tconst key = `${tableIdentityKey(op.table)}.${column.name}`;\n\t\t\tif (seen.has(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tseen.add(key);\n\t\t\textra.push({\n\t\t\t\tcolumn,\n\t\t\t\tkind: \"drop_column\",\n\t\t\t\ttable: op.table,\n\t\t\t});\n\t\t}\n\t}\n\treturn extra.length === 0 ? operations : [...operations, ...extra];\n}\n\n/** Convenience: true when normalized snapshots are equivalent. */\nexport function isSchemaDiffEmpty(diff: SchemaDiff): boolean {\n\treturn diff.isEmpty;\n}\n\n/**\n * Build an empty Athena schema snapshot (useful for tests / baselines).\n */\nexport function emptySchemaSnapshot(\n\tbackend: string | null = null,\n): AthenaSchemaSnapshot {\n\treturn normalizeSchemaSnapshot({\n\t\tversion: 1,\n\t\tbackend,\n\t\tschemas: [],\n\t});\n}\n","import {\n\tschemaIrFromIntrospection,\n\tschemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport type { IntrospectionSnapshot } from \"../types.ts\";\nimport { normalizeSchemaSnapshot } from \"./normalize.ts\";\nimport type { AthenaSchemaSnapshot } from \"./types.ts\";\n\n/**\n * Athena bookkeeping schema excluded from managed-application diffs by default.\n * Verified against packages/athena-js/docs/migrations.md (`athena.schema_migrations`).\n */\nexport const ATHENA_INTERNAL_SCHEMAS = new Set([\"athena\", \"athena_internal\"]);\n\nexport interface SchemaSnapshotFromIntrospectionOptions {\n\t/**\n\t * Schema names to include. When omitted, all introspected schemas are kept\n\t * except {@link ATHENA_INTERNAL_SCHEMAS} when `excludeInternal` is true.\n\t */\n\treadonly schemas?: readonly string[];\n\t/** Drop Athena internal namespaces (default true). */\n\treadonly excludeInternal?: boolean;\n}\n\n/**\n * Public structural emit is {@link AthenaSchemaIr} via\n * {@link schemaIrFromIntrospection}. This helper is the lossy v1 projection.\n */\nexport function schemaSnapshotFromIntrospection(\n\tsnapshot: IntrospectionSnapshot,\n\toptions: SchemaSnapshotFromIntrospectionOptions = {},\n): AthenaSchemaSnapshot {\n\tconst ir: AthenaSchemaIr = schemaIrFromIntrospection(snapshot, {\n\t\tschemas: options.schemas,\n\t\texcludeInternal: options.excludeInternal,\n\t});\n\treturn normalizeSchemaSnapshot(schemaSnapshotFromIr(ir));\n}\n","/**\n * Production-grade Athena-managed schema snapshot + structured schema diff.\n *\n * Pipeline:\n *   AthenaModels | Postgres introspection\n *        → AthenaSchemaSnapshot\n *        → normalizeSchemaSnapshot\n *        → diffSchemas({ from: actual, to: desired })\n *        → SchemaDiff (operations + summary)\n *\n * Does not generate SQL, classify risk, plan migrations, or detect drift policy.\n */\n\nexport {\n\tdiffSchemas,\n\temptySchemaSnapshot,\n\tisSchemaDiffEmpty,\n} from \"./diff.ts\";\nexport { SchemaDiffError, type SchemaDiffErrorCode } from \"./errors.ts\";\nexport {\n\tATHENA_INTERNAL_SCHEMAS,\n\ttype SchemaSnapshotFromIntrospectionOptions,\n\tschemaSnapshotFromIntrospection,\n} from \"./from-introspection.ts\";\nexport {\n\ttype SchemaSnapshotFromModelsOptions,\n\tschemaSnapshotFromModels,\n} from \"./from-models.ts\";\nexport {\n\tcompareStrings,\n\tcompareTableIdentity,\n\tforeignKeyMatchKey,\n\tforeignKeyStructuralKey,\n\tindexStructuralKey,\n\ttableIdentityKey,\n\ttableIdentityKeyParts,\n\tuniqueStructuralKey,\n} from \"./identity.ts\";\nexport {\n\tcolumnsEqual,\n\tcolumnTypesEqual,\n\tnormalizeDefaultExpression,\n\tnormalizeReferentialAction,\n\tnormalizeSchemaColumnType,\n\tnormalizeSchemaSnapshot,\n\tparseSchemaTypeString,\n\tprimaryKeysEqual,\n} from \"./normalize.ts\";\nexport { summarizeSchemaDiffOperations } from \"./summary.ts\";\nexport {\n\ttype AddColumnOperation,\n\ttype AddForeignKeyOperation,\n\ttype AddIndexOperation,\n\ttype AddPrimaryKeyOperation,\n\ttype AddUniqueConstraintOperation,\n\ttype AlterColumnOperation,\n\ttype AlterForeignKeyOperation,\n\tATHENA_SCHEMA_SNAPSHOT_VERSION,\n\ttype AthenaSchemaSnapshot,\n\ttype CreateSchemaOperation,\n\ttype CreateTableOperation,\n\ttype DiffSchemasInput,\n\ttype DiffSchemasOptions,\n\ttype DropColumnOperation,\n\ttype DropForeignKeyOperation,\n\ttype DropIndexOperation,\n\ttype DropPrimaryKeyOperation,\n\ttype DropSchemaOperation,\n\ttype DropTableOperation,\n\ttype DropUniqueConstraintOperation,\n\ttype RenameColumnOperation,\n\ttype RenameTableOperation,\n\ttype SchemaColumn,\n\ttype SchemaColumnChange,\n\ttype SchemaColumnChanges,\n\ttype SchemaColumnType,\n\ttype SchemaDiff,\n\ttype SchemaDiffOperation,\n\ttype SchemaDiffOperationKind,\n\ttype SchemaDiffSummary,\n\ttype SchemaForeignKey,\n\ttype SchemaIndex,\n\ttype SchemaIndexColumn,\n\ttype SchemaNamespace,\n\ttype SchemaPrimaryKey,\n\ttype SchemaReferentialAction,\n\ttype SchemaTable,\n\ttype SchemaTableIdentity,\n\ttype SchemaUniqueConstraint,\n} from \"./types.ts\";\nexport { validateSchemaSnapshot } from \"./validate.ts\";\n","import type {\n\tSchemaColumnType,\n\tSchemaDiff,\n\tSchemaDiffOperation,\n\tSchemaTableIdentity,\n} from \"../../../schema/diff/index.ts\";\n\nexport const DESTRUCTIVE_SCHEMA_KINDS = new Set<SchemaDiffOperation[\"kind\"]>([\n\t\"drop_schema\",\n\t\"drop_table\",\n\t\"drop_column\",\n\t\"drop_primary_key\",\n\t\"drop_unique_constraint\",\n\t\"drop_foreign_key\",\n\t\"drop_index\",\n]);\n\nexport function isDestructiveSchemaOperation(\n\toperation: SchemaDiffOperation,\n): boolean {\n\treturn DESTRUCTIVE_SCHEMA_KINDS.has(operation.kind);\n}\n\nexport function formatColumnType(type: SchemaColumnType): string {\n\tif (type.length != null) {\n\t\treturn `${type.name}(${type.length})`;\n\t}\n\tif (type.precision != null && type.scale != null) {\n\t\treturn `${type.name}(${type.precision},${type.scale})`;\n\t}\n\tif (type.arrayDimensions > 0) {\n\t\treturn `${type.name}${\"[]\".repeat(type.arrayDimensions)}`;\n\t}\n\treturn type.name;\n}\n\nfunction tableKey(table: SchemaTableIdentity): string {\n\treturn table.schema === \"public\" ? table.name : `${table.schema}.${table.name}`;\n}\n\nfunction operationTable(operation: SchemaDiffOperation): string {\n\tswitch (operation.kind) {\n\t\tcase \"create_schema\":\n\t\tcase \"drop_schema\":\n\t\t\treturn operation.schema;\n\t\tcase \"create_table\":\n\t\t\treturn tableKey(operation.table);\n\t\tcase \"drop_table\":\n\t\t\treturn tableKey(operation.table);\n\t\tcase \"rename_table\":\n\t\t\treturn tableKey(operation.from);\n\t\tcase \"add_column\":\n\t\tcase \"drop_column\":\n\t\tcase \"rename_column\":\n\t\tcase \"alter_column\":\n\t\tcase \"add_primary_key\":\n\t\tcase \"drop_primary_key\":\n\t\tcase \"add_unique_constraint\":\n\t\tcase \"drop_unique_constraint\":\n\t\tcase \"add_foreign_key\":\n\t\tcase \"drop_foreign_key\":\n\t\tcase \"alter_foreign_key\":\n\t\tcase \"add_index\":\n\t\tcase \"drop_index\":\n\t\t\treturn tableKey(operation.table);\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = operation;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nfunction formatOperationLine(operation: SchemaDiffOperation): string {\n\tswitch (operation.kind) {\n\t\tcase \"create_schema\":\n\t\t\treturn \"+ schema\";\n\t\tcase \"drop_schema\":\n\t\t\treturn \"- schema\";\n\t\tcase \"create_table\":\n\t\t\treturn \"+ table\";\n\t\tcase \"drop_table\":\n\t\t\treturn \"- table\";\n\t\tcase \"rename_table\":\n\t\t\treturn `~ ${operation.from.name} → ${operation.to.name}`;\n\t\tcase \"add_column\":\n\t\t\treturn `+ ${operation.column.name} ${formatColumnType(operation.column.type)}`;\n\t\tcase \"drop_column\":\n\t\t\treturn `- ${operation.column.name}`;\n\t\tcase \"rename_column\":\n\t\t\treturn `~ ${operation.from} → ${operation.to}`;\n\t\tcase \"alter_column\": {\n\t\t\tconst typeChange = operation.changes.type;\n\t\t\tif (typeChange) {\n\t\t\t\treturn `~ ${operation.column} ${formatColumnType(typeChange.from)} → ${formatColumnType(typeChange.to)}`;\n\t\t\t}\n\t\t\treturn `~ ${operation.column}`;\n\t\t}\n\t\tcase \"add_primary_key\":\n\t\t\treturn `+ primary key (${operation.primaryKey.columns.join(\", \")})`;\n\t\tcase \"drop_primary_key\":\n\t\t\treturn `- primary key`;\n\t\tcase \"add_unique_constraint\":\n\t\t\treturn `+ unique (${operation.unique.columns.join(\", \")})`;\n\t\tcase \"drop_unique_constraint\":\n\t\t\treturn `- unique (${operation.unique.columns.join(\", \")})`;\n\t\tcase \"add_foreign_key\":\n\t\t\treturn `+ foreign key (${operation.foreignKey.columns.join(\", \")})`;\n\t\tcase \"drop_foreign_key\":\n\t\t\treturn `- foreign key (${operation.foreignKey.columns.join(\", \")})`;\n\t\tcase \"alter_foreign_key\":\n\t\t\treturn `~ foreign key`;\n\t\tcase \"add_index\":\n\t\t\treturn `+ index (${operation.index.columns.map((column) => column.name).join(\", \")})`;\n\t\tcase \"drop_index\":\n\t\t\treturn `- index (${operation.index.columns.map((column) => column.name).join(\", \")})`;\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = operation;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nexport function formatSchemaDiffText(diff: SchemaDiff): string {\n\tif (diff.operations.length === 0) {\n\t\treturn [\"Athena schema diff\", \"\", \"No changes.\", \"\"].join(\"\\n\");\n\t}\n\n\tconst grouped = new Map<string, SchemaDiffOperation[]>();\n\tfor (const operation of diff.operations) {\n\t\tconst key = operationTable(operation);\n\t\tconst list = grouped.get(key) ?? [];\n\t\tlist.push(operation);\n\t\tgrouped.set(key, list);\n\t}\n\n\tconst lines: string[] = [\"Athena schema diff\", \"\"];\n\tfor (const [table, operations] of grouped) {\n\t\tlines.push(table);\n\t\tfor (const operation of operations) {\n\t\t\tlines.push(`  ${formatOperationLine(operation)}`);\n\t\t}\n\t\tlines.push(\"\");\n\t}\n\n\tconst destructive = diff.operations.filter(isDestructiveSchemaOperation).length;\n\tlines.push(`${diff.summary.totalOperations} change${diff.summary.totalOperations === 1 ? \"\" : \"s\"}`);\n\tif (destructive > 0) {\n\t\tlines.push(\n\t\t\t`${destructive} potentially destructive`,\n\t\t);\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatProposedMigration(diff: SchemaDiff): string {\n\tconst lines = [\n\t\t\"-- Proposed Athena schema migration (not applied).\",\n\t\t\"-- Generated by `athena-js schema diff --migration`.\",\n\t\t\"-- Review, then author SQL under athena/migrations/.\",\n\t\t\"\",\n\t];\n\tif (diff.operations.length === 0) {\n\t\tlines.push(\"-- No operations.\");\n\t\treturn `${lines.join(\"\\n\")}\\n`;\n\t}\n\tfor (const operation of diff.operations) {\n\t\tconst risk = isDestructiveSchemaOperation(operation)\n\t\t\t? \"destructive\"\n\t\t\t: \"additive\";\n\t\tlines.push(`-- [${risk}] ${operation.kind} ${operationTable(operation)}`);\n\t\tlines.push(`--   ${formatOperationLine(operation)}`);\n\t}\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n","import { join } from \"node:path\";\n\nexport const DEFAULT_SCHEMA_SNAPSHOT_PATH = \"athena/schema.snapshot.json\";\n\nexport function resolveSchemaSnapshotPath(\n\tcwd: string,\n\texplicit?: string,\n): string {\n\tif (!explicit) {\n\t\treturn join(cwd, DEFAULT_SCHEMA_SNAPSHOT_PATH);\n\t}\n\tif (explicit.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(explicit)) {\n\t\treturn explicit;\n\t}\n\treturn join(cwd, explicit);\n}\n","import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { loadGeneratorConfig } from \"../../../generator/config.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { resolveGeneratorProvider } from \"../../../generator/providers.ts\";\nimport { resolveProviderSchemas } from \"../../../generator/schema-selection.ts\";\nimport {\n\ttype AthenaSchemaSnapshot,\n\tdiffSchemas,\n\tnormalizeSchemaSnapshot,\n\tschemaSnapshotFromIntrospection,\n\tvalidateSchemaSnapshot,\n} from \"../../../schema/diff/index.ts\";\nimport { reportAthenaPolicySchemaImpact } from \"../../../policy/schema-impact.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport { loadPolicyDocument } from \"../policy/load.ts\";\nimport {\n\tformatProposedMigration,\n\tformatSchemaDiffText,\n\tisDestructiveSchemaOperation,\n} from \"./format.ts\";\nimport { resolveSchemaSnapshotPath } from \"./paths.ts\";\n\nexport interface SchemaDiffReport {\n\tfromPath?: string;\n\t/** True when this run wrote the first snapshot because none existed. */\n\tbaselineWritten?: boolean;\n\tdestructiveCount: number;\n\tdiff: ReturnType<typeof diffSchemas>;\n\tok: boolean;\n\tpolicyImpact?: ReturnType<typeof reportAthenaPolicySchemaImpact>;\n\tproposedMigration?: string;\n\ttext: string;\n}\n\nexport async function inspectPhysicalSchemaSnapshot(options: {\n\tconfigPath?: string;\n\tcwd: string;\n\tinspect?: () => Promise<AthenaSchemaSnapshot>;\n}): Promise<AthenaSchemaSnapshot> {\n\tif (options.inspect) {\n\t\treturn normalizeSchemaSnapshot(await options.inspect());\n\t}\n\n\tconst loaded = await loadGeneratorConfig({\n\t\tconfigPath: options.configPath,\n\t\tcwd: options.cwd,\n\t});\n\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\tapplyProjectEnv: false,\n\t\tcwd: options.cwd,\n\t\tloaded,\n\t\tmode: \"direct\",\n\t});\n\ttry {\n\t\tconst provider = resolveGeneratorProvider(\n\t\t\tauthority.provider,\n\t\t\tloaded.config.experimental,\n\t\t);\n\t\tconst introspection = await provider.inspect({\n\t\t\tschemas:\n\t\t\t\tauthority.provider.kind === \"postgres\"\n\t\t\t\t\t? resolveProviderSchemas(authority.provider)\n\t\t\t\t\t: undefined,\n\t\t});\n\t\treturn schemaSnapshotFromIntrospection(introspection);\n\t} finally {\n\t\tauthority.restoreEnv();\n\t}\n}\n\nexport function readSchemaSnapshotFile(path: string): AthenaSchemaSnapshot {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(readFileSync(path, \"utf8\"));\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\t\"code\" in error &&\n\t\t\t(error as { code?: string }).code === \"ENOENT\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new AthenaCliError({\n\t\t\tcode: \"SCHEMA001\",\n\t\t\texitCode: CliExitCode.Configuration,\n\t\t\tmessage: `Could not read schema snapshot \"${path}\".`,\n\t\t\thint: error instanceof Error ? error.message : String(error),\n\t\t});\n\t}\n\tvalidateSchemaSnapshot(parsed as AthenaSchemaSnapshot);\n\treturn normalizeSchemaSnapshot(parsed as AthenaSchemaSnapshot);\n}\n\nexport function writeSchemaSnapshotFile(\n\tpath: string,\n\tsnapshot: AthenaSchemaSnapshot,\n): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(`${path}`, `${JSON.stringify(snapshot, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function runSchemaDiff(options: {\n\tconfigPath?: string;\n\tcwd: string;\n\tfromPath?: string;\n\tinspect?: () => Promise<AthenaSchemaSnapshot>;\n\tmigration?: boolean;\n\tpolicies?: unknown;\n\tpolicyImpact?: boolean;\n}): Promise<SchemaDiffReport> {\n\tconst fromPath = resolveSchemaSnapshotPath(options.cwd, options.fromPath);\n\tlet from: AthenaSchemaSnapshot;\n\ttry {\n\t\tfrom = readSchemaSnapshotFile(fromPath);\n\t} catch (error) {\n\t\tconst missing =\n\t\t\terror instanceof Error &&\n\t\t\t\"code\" in error &&\n\t\t\t(error as { code?: string }).code === \"ENOENT\";\n\t\tif (missing) {\n\t\t\tconst current = await inspectPhysicalSchemaSnapshot(options);\n\t\t\twriteSchemaSnapshotFile(fromPath, current);\n\t\t\tconst diff = diffSchemas({ from: current, to: current });\n\t\t\treturn {\n\t\t\t\tfromPath,\n\t\t\t\tbaselineWritten: true,\n\t\t\t\tdestructiveCount: 0,\n\t\t\t\tdiff,\n\t\t\t\tok: true,\n\t\t\t\ttext: [\n\t\t\t\t\t\"Wrote first schema snapshot\",\n\t\t\t\t\t`  ${fromPath}`,\n\t\t\t\t\t\"No prior snapshot — captured the physical database as the baseline (0 operations).\",\n\t\t\t\t\t\"\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t};\n\t\t}\n\t\tif (error instanceof AthenaCliError && error.code === \"SCHEMA001\") {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"SCHEMA002\",\n\t\t\t\texitCode: CliExitCode.Configuration,\n\t\t\t\tmessage: `No schema snapshot at \"${fromPath}\".`,\n\t\t\t\thint: \"Run `athena-js schema snapshot` to capture the physical database, then diff again.\",\n\t\t\t});\n\t\t}\n\t\tthrow error;\n\t}\n\tconst to = await inspectPhysicalSchemaSnapshot(options);\n\tconst diff = diffSchemas({ from, to });\n\tconst destructiveCount = diff.operations.filter(\n\t\tisDestructiveSchemaOperation,\n\t).length;\n\tlet policyImpact: SchemaDiffReport[\"policyImpact\"];\n\tif (options.policyImpact) {\n\t\tconst policies =\n\t\t\toptions.policies ??\n\t\t\t(await loadPolicyDocument({\n\t\t\t\tconfigPath: options.configPath,\n\t\t\t\tcwd: options.cwd,\n\t\t\t})).document;\n\t\tpolicyImpact = reportAthenaPolicySchemaImpact({\n\t\t\toperations: diff.operations,\n\t\t\tpolicies,\n\t\t});\n\t}\n\treturn {\n\t\tfromPath,\n\t\tdestructiveCount,\n\t\tdiff,\n\t\tok: diff.operations.length === 0,\n\t\t...(options.policyImpact\n\t\t\t? { policyImpact: policyImpact ?? [] }\n\t\t\t: {}),\n\t\tproposedMigration: options.migration\n\t\t\t? formatProposedMigration(diff)\n\t\t\t: undefined,\n\t\ttext: formatSchemaDiffText(diff),\n\t};\n}\n\nexport async function runSchemaSnapshot(options: {\n\tcheck?: boolean;\n\tconfigPath?: string;\n\tcwd: string;\n\tinspect?: () => Promise<AthenaSchemaSnapshot>;\n\toutPath?: string;\n}): Promise<{\n\tcheck: boolean;\n\tdestructiveCount: number;\n\tdiff?: ReturnType<typeof diffSchemas>;\n\tok: boolean;\n\tpath: string;\n\ttext: string;\n}> {\n\tconst path = resolveSchemaSnapshotPath(options.cwd, options.outPath);\n\tconst current = await inspectPhysicalSchemaSnapshot(options);\n\tif (options.check) {\n\t\tlet committed: AthenaSchemaSnapshot;\n\t\ttry {\n\t\t\tcommitted = readSchemaSnapshotFile(path);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\t\"code\" in error &&\n\t\t\t\t(error as { code?: string }).code === \"ENOENT\"\n\t\t\t) {\n\t\t\t\tthrow new AthenaCliError({\n\t\t\t\t\tcode: \"SCHEMA002\",\n\t\t\t\t\texitCode: CliExitCode.Configuration,\n\t\t\t\t\tmessage: `No schema snapshot at \"${path}\".`,\n\t\t\t\t\thint: \"Run `athena-js schema snapshot` first.\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tconst diff = diffSchemas({ from: committed, to: current });\n\t\tconst destructiveCount = diff.operations.filter(\n\t\t\tisDestructiveSchemaOperation,\n\t\t).length;\n\t\treturn {\n\t\t\tcheck: true,\n\t\t\tdestructiveCount,\n\t\t\tdiff,\n\t\t\tok: diff.operations.length === 0,\n\t\t\tpath,\n\t\t\ttext: formatSchemaDiffText(diff),\n\t\t};\n\t}\n\twriteSchemaSnapshotFile(path, current);\n\treturn {\n\t\tcheck: false,\n\t\tdestructiveCount: 0,\n\t\tok: true,\n\t\tpath,\n\t\ttext: `Wrote schema snapshot\\n  ${path}\\n`,\n\t};\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { expandEqualsArgv, peelPresentationFlags } from \"./argv.ts\";\nimport type { CommandContext } from \"./command-context.ts\";\nimport { renderUsage } from \"./commands/help/index.ts\";\nimport { CLI_COMMAND_REGISTRY } from \"./commands/register.ts\";\nimport { AthenaCliError } from \"./errors.ts\";\nimport { setCliExitCode } from \"./exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"./format-error.ts\";\nimport { parseCommand } from \"./parse-command.ts\";\nimport {\n\tdispatchRegistered,\n\tencodeCliJsonFailure,\n\texitCodeForError,\n\tpeelGlobalFlags,\n\tsessionTitleFor,\n\tstringifyCliJson,\n} from \"./platform/index.ts\";\nimport type { CliRuntime, HelpCommand } from \"./types.ts\";\nimport { resolveCliCapabilities } from \"./ui/capabilities.ts\";\nimport { colorizeTaggedLine } from \"./ui/help.ts\";\nimport { railBar, railEnd, railStart, usesRail } from \"./ui/rail.ts\";\nimport type { CliCapabilities } from \"./ui/types.ts\";\n\nexport {\n\ttype CatalogHelpTopic,\n\tCLI_COMMAND_CATALOG,\n\ttype CliCatalogFlag,\n\ttype CliCommandEntry,\n\ttype CommandsListFormat,\n\tcatalogHelpTopic,\n\tcatalogOptionFlags,\n\tcatalogOptionHelpHint,\n\tcatalogRootCommands,\n\tcatalogSubcommands,\n\tformatCommandsCatalog,\n\tformatExpectedCommandsLine,\n\tlistCliCommands,\n} from \"./commands-catalog.ts\";\nexport { CliExitCode } from \"./exit-code.ts\";\nexport { logCliError } from \"./format-error.ts\";\nexport { parseCommand } from \"./parse-command.ts\";\nexport {\n\tCLI_JSON_SCHEMA_VERSION,\n\tdefineCommand,\n\ttype CliJsonEnvelope,\n\ttype CommandResult,\n\ttype RegisteredCommand,\n} from \"./platform/index.ts\";\nexport type { CliRuntime } from \"./types.ts\";\n\nexport function usage(\n\ttopic: HelpCommand[\"topic\"] = \"root\",\n\tcapabilities?: CliCapabilities,\n): string {\n\treturn renderUsage(topic, capabilities);\n}\n\nfunction resolveCwd(explicit?: string): string {\n\tif (explicit && explicit.length > 0) {\n\t\treturn explicit;\n\t}\n\tconst proc = (globalThis as { process?: { cwd?: () => string } }).process;\n\treturn proc?.cwd?.() ?? \".\";\n}\n\n/**\n * CLI entrypoint used by `bin/athena-js.js`.\n *\n * This graph must stay pure Node. Do not import `server.ts`, `next/*`,\n * `auth/server-entry.ts`, or any module that loads the `server-only` package.\n *\n * Generator failures are logged with diagnostics (code, remote, cause chain)\n * and exit with a stable {@link CliExitCode} instead of only throwing a bare message.\n */\nexport async function runCLI(\n\targv: string[],\n\truntime: CliRuntime = {},\n): Promise<void> {\n\tconst { argv: peeled, presentation } = peelPresentationFlags(argv);\n\tlet globals: ReturnType<typeof peelGlobalFlags>[\"globals\"];\n\ttry {\n\t\tglobals = peelGlobalFlags(expandEqualsArgv(peeled)).globals;\n\t} catch (error) {\n\t\tsetCliExitCode(exitCodeForError(error));\n\t\tlogCliError(\n\t\t\tformatGeneratorError(error),\n\t\t\truntime.errorLog ?? console.error,\n\t\t);\n\t\treturn;\n\t}\n\tconst json = globals.output === \"json\" || globals.output === \"ndjson\";\n\tconst writingFile = Boolean(globals.outputPath);\n\tconst capabilities = resolveCliCapabilities({\n\t\tforceColor: writingFile ? false : presentation.forceColor,\n\t\tisTty: writingFile\n\t\t\t? false\n\t\t\t: (runtime.isTty ?? (runtime.log !== undefined ? false : undefined)),\n\t\tjson,\n\t\tnoColor: writingFile || presentation.noColor,\n\t\tplain: globals.plain || presentation.noColor || writingFile,\n\t\tquiet: globals.verbosity === \"quiet\",\n\t\tverbose:\n\t\t\tglobals.verbosity === \"verbose\" || globals.verbosity === \"debug\",\n\t});\n\tconst captured: string[] = [];\n\tconst capture = (message: string) => {\n\t\tif (!writingFile) {\n\t\t\treturn;\n\t\t}\n\t\tcaptured.push(message.endsWith(\"\\n\") ? message : `${message}\\n`);\n\t};\n\tconst emit = runtime.log ?? console.log;\n\tconst emitErr = runtime.errorLog ?? console.error;\n\tlet sessionActive = false;\n\tconst logRaw = (message: string) => {\n\t\temit(message);\n\t\tcapture(message);\n\t};\n\tconst errorLog = (message: string) => {\n\t\temitErr(message);\n\t\tcapture(message);\n\t};\n\tconst log = (message: string) => {\n\t\tif (json || !sessionActive) {\n\t\t\tlogRaw(json ? message : colorizeTaggedLine(message, capabilities));\n\t\t\treturn;\n\t\t}\n\t\tfor (const part of message.split(\"\\n\")) {\n\t\t\tlogRaw(railBar(colorizeTaggedLine(part, capabilities), capabilities));\n\t\t}\n\t};\n\tconst beginSession = (title: string) => {\n\t\tif (json || !usesRail(capabilities)) {\n\t\t\treturn;\n\t\t}\n\t\tsessionActive = true;\n\t\tlogRaw(railStart(title, capabilities));\n\t};\n\tconst endSession = () => {\n\t\tif (!sessionActive) {\n\t\t\treturn;\n\t\t}\n\t\tsessionActive = false;\n\t\tlogRaw(railEnd(\"\", capabilities));\n\t};\n\n\tconst cwd = resolveCwd(globals.cwd ?? runtime.cwd);\n\n\ttry {\n\t\tlet parsed: ReturnType<typeof parseCommand>;\n\t\ttry {\n\t\t\tparsed = parseCommand(argv);\n\t\t} catch (error) {\n\t\t\tsetCliExitCode(exitCodeForError(error));\n\t\t\tif (json) {\n\t\t\t\tconst code = error instanceof AthenaCliError ? error.code : \"CLI001\";\n\t\t\t\tconst message =\n\t\t\t\t\terror instanceof Error ? error.message : \"Unknown CLI error.\";\n\t\t\t\tlogRaw(\n\t\t\t\t\tstringifyCliJson(\n\t\t\t\t\t\tencodeCliJsonFailure(\"athena-js\", {\n\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\thint: error instanceof AthenaCliError ? error.hint : undefined,\n\t\t\t\t\t\t\tdetails:\n\t\t\t\t\t\t\t\terror instanceof AthenaCliError ? error.metadata : undefined,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst sessionTitle = sessionTitleFor(CLI_COMMAND_REGISTRY, parsed);\n\t\tif (sessionTitle) {\n\t\t\tbeginSession(sessionTitle);\n\t\t}\n\n\t\tconst ctx: CommandContext = {\n\t\t\tcapabilities,\n\t\t\tcwd,\n\t\t\terrorLog,\n\t\t\tglobals,\n\t\t\tlog,\n\t\t\tlogRaw,\n\t\t\toutput: globals.output,\n\t\t\tpresentation,\n\t\t\truntime: {\n\t\t\t\t...runtime,\n\t\t\t\tcwd,\n\t\t\t},\n\t\t\tverbosity: globals.verbosity,\n\t\t};\n\n\t\tawait dispatchRegistered(CLI_COMMAND_REGISTRY, ctx, parsed);\n\t} finally {\n\t\tendSession();\n\t\tif (globals.outputPath) {\n\t\t\tconst dest = resolve(cwd, globals.outputPath);\n\t\t\tawait mkdir(dirname(dest), { recursive: true });\n\t\t\tawait writeFile(dest, captured.join(\"\"), \"utf8\");\n\t\t}\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n\ttype CatalogHelpTopic,\n\tcatalogHelpTopic,\n\tformatCatalogTopicUsage,\n} from \"../../commands-catalog.ts\";\nimport { unknownCommandError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, HelpCommand } from \"../../types.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { styleHelpText } from \"../../ui/help.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\n\nexport { helpCatalog, helpCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"help\"];\n\nexport function renderUsage(\n\ttopic: CatalogHelpTopic = \"root\",\n\tcapabilities?: CliCapabilities,\n): string {\n\treturn styleHelpText(\n\t\tformatCatalogTopicUsage(topic),\n\t\tcapabilities ?? resolveCliCapabilities({ plain: true }),\n\t);\n}\n\nexport function topicForCommand(\n\tcommand: string,\n\trest: readonly string[],\n): HelpCommand[\"topic\"] | undefined {\n\treturn catalogHelpTopic(command, rest);\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tif (rest.length === 0) {\n\t\treturn { command: \"help\", topic: \"root\" };\n\t}\n\tconst topic = topicForCommand(rest[0] ?? \"\", rest.slice(1));\n\tif (topic) {\n\t\treturn { command: \"help\", topic };\n\t}\n\tthrow unknownCommandError(rest[0] ?? \"help\");\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"root\");\n}\n\nexport function sessionTitle(): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: HelpCommand,\n): Promise<void> {\n\tctx.logRaw(renderUsage(parsed.topic, ctx.capabilities));\n}\n","import type { CommandContext } from \"../command-context.ts\";\nimport {\n\tdefineCommand,\n\ttype RegisteredCommand,\n} from \"../platform/define-command.ts\";\nimport { CommandRegistry } from \"../platform/registry.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport * as apiKeyCommand from \"./api-key/index.ts\";\nimport { authCommands } from \"./auth/commands.ts\";\nimport * as commandsCommand from \"./commands/index.ts\";\nimport { doctorBundleCommand } from \"./doctor/bundle.ts\";\nimport * as doctorCommand from \"./doctor/index.ts\";\nimport * as envCommand from \"./env/index.ts\";\nimport * as generateCommand from \"./generate/index.ts\";\nimport * as helpCommand from \"./help/index.ts\";\nimport * as initCommand from \"./init/index.ts\";\nimport { migrateCommands } from \"./migrate/commands.ts\";\nimport { billingCommands } from \"./billing/commands.ts\";\nimport { policyCommands } from \"./policy/commands.ts\";\nimport * as rightsCommand from \"./rights/index.ts\";\nimport { schemaCommands } from \"./schema/commands.ts\";\nimport * as validateCommand from \"./validate/index.ts\";\nimport * as versionCommand from \"./version/index.ts\";\n\nfunction adapt(options: {\n\tpath: readonly string[];\n\taliases?: readonly string[];\n\taliasPaths?: readonly (readonly string[])[];\n\tlegacy: RegisteredCommand[\"legacy\"];\n\tparse: (rest: string[]) => CliCommand;\n\trun: (ctx: CommandContext, parsed: CliCommand) => Promise<void>;\n\tusage: () => string;\n\tsessionTitle?: (parsed: CliCommand) => string | undefined;\n}): RegisteredCommand {\n\treturn defineCommand(options);\n}\n\nexport const CLI_REGISTERED_COMMANDS: RegisteredCommand[] = [\n\tadapt({\n\t\tpath: [\"help\"],\n\t\tlegacy: \"help\",\n\t\tparse: helpCommand.parse,\n\t\trun: (ctx, parsed) => helpCommand.run(ctx, parsed as never),\n\t\tusage: helpCommand.usage,\n\t}),\n\tadapt({\n\t\tpath: [\"version\"],\n\t\taliases: versionCommand.names,\n\t\tlegacy: \"version\",\n\t\tparse: versionCommand.parse,\n\t\trun: (ctx, parsed) => versionCommand.run(ctx, parsed as never),\n\t\tusage: versionCommand.usage,\n\t}),\n\tadapt({\n\t\tpath: [\"commands\"],\n\t\taliases: commandsCommand.names,\n\t\tlegacy: \"commands\",\n\t\tparse: commandsCommand.parse,\n\t\trun: (ctx, parsed) => commandsCommand.run(ctx, parsed as never),\n\t\tusage: commandsCommand.usage,\n\t}),\n\tadapt({\n\t\tpath: [\"init\"],\n\t\tlegacy: \"init\",\n\t\tparse: initCommand.parse,\n\t\trun: (ctx, parsed) => initCommand.run(ctx, parsed as never),\n\t\tusage: initCommand.usage,\n\t\tsessionTitle: (parsed) => initCommand.sessionTitle(parsed as never),\n\t}),\n\tadapt({\n\t\tpath: [\"generate\"],\n\t\tlegacy: \"generate\",\n\t\tparse: generateCommand.parse,\n\t\trun: (ctx, parsed) => generateCommand.run(ctx, parsed as never),\n\t\tusage: generateCommand.usage,\n\t\tsessionTitle: (parsed) => generateCommand.sessionTitle(parsed as never),\n\t}),\n\t...schemaCommands,\n\t...policyCommands,\n\t...billingCommands,\n\t...migrateCommands,\n\t...authCommands,\n\tadapt({\n\t\tpath: [\"env\"],\n\t\taliasPaths: [\n\t\t\t[\"env\", \"check\"],\n\t\t\t[\"env\", \"validate\"],\n\t\t],\n\t\tlegacy: \"env\",\n\t\tparse: envCommand.parse,\n\t\trun: (ctx, parsed) => envCommand.run(ctx, parsed as never),\n\t\tusage: envCommand.usage,\n\t}),\n\tadapt({\n\t\tpath: [\"validate\"],\n\t\taliasPaths: [[\"validate\", \"local\"]],\n\t\tlegacy: \"validate\",\n\t\tparse: validateCommand.parse,\n\t\trun: (ctx, parsed) => validateCommand.run(ctx, parsed as never),\n\t\tusage: validateCommand.usage,\n\t}),\n\tadapt({\n\t\tpath: [\"doctor\"],\n\t\tlegacy: \"doctor\",\n\t\tparse: doctorCommand.parse,\n\t\trun: (ctx, parsed) => doctorCommand.run(ctx, parsed as never),\n\t\tusage: doctorCommand.usage,\n\t}),\n\tdoctorBundleCommand,\n\tadapt({\n\t\tpath: [\"api-key\"],\n\t\taliases: [\"key\"],\n\t\tlegacy: [\"api-key-generate\", \"api-key-list\", \"api-key-create\"],\n\t\tparse: apiKeyCommand.parse,\n\t\trun: (ctx, parsed) => apiKeyCommand.run(ctx, parsed as never),\n\t\tusage: apiKeyCommand.usage,\n\t\tsessionTitle: (parsed) => apiKeyCommand.sessionTitle(parsed as never),\n\t}),\n\tadapt({\n\t\tpath: [\"rights\"],\n\t\tlegacy: [\"rights-list\", \"rights-catalog\", \"rights-create\"],\n\t\tparse: rightsCommand.parse,\n\t\trun: (ctx, parsed) => rightsCommand.run(ctx, parsed as never),\n\t\tusage: rightsCommand.usage,\n\t\tsessionTitle: (parsed) => rightsCommand.sessionTitle(parsed as never),\n\t}),\n];\n\nexport const CLI_COMMAND_REGISTRY = new CommandRegistry(\n\tCLI_REGISTERED_COMMANDS,\n);\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n\tcatalogSubcommands,\n\tcatalogSubcommandTokens,\n\tformatCatalogTopicUsage,\n\tformatExpectedCommandsLine,\n} from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport {\n\tcreateGatewayApiKey,\n\tformatApiKeyRecords,\n\tformatCreatedApiKey,\n\tlistGatewayApiKeys,\n\tresolveGatewayAdminCredentials,\n} from \"../../gateway-admin.ts\";\nimport {\n\thelpOrRejectUnknownFlags,\n\tparseGatewayAdminFlags,\n\tunknownOptionError,\n} from \"../../parse-helpers.ts\";\nimport { parseAthenaRightKey } from \"../../../rights/key.ts\";\nimport { closestMatches, formatDidYouMean } from \"../../suggest.ts\";\nimport type {\n\tApiKeyCreateCommand,\n\tApiKeyGenerateCommand,\n\tApiKeyListCommand,\n\tCliCommand,\n} from \"../../types.ts\";\nimport {\n\tassertGenerateDoesNotWriteGatewayAppKey,\n\tGENERATE_DEFAULT_ENV_KEY,\n\tgenerateApiKey,\n\twriteApiKeyToEnvFile,\n} from \"./secret.ts\";\n\nexport { apiKeyCatalog, apiKeyCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"api-key\", \"key\"];\n\nfunction parseApiKeyGenerateFlags(\n\trest: string[],\n\tstartIndex: number,\n): CliCommand {\n\tlet index = startIndex;\n\tlet bytes = 32;\n\tlet prefix = \"\";\n\tlet write = false;\n\tlet force = false;\n\tlet envFile: string | undefined;\n\tlet envKey = GENERATE_DEFAULT_ENV_KEY;\n\n\twhile (index < rest.length) {\n\t\tconst token = rest[index];\n\t\tindex += 1;\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"api-key\" };\n\t\t}\n\t\tif (token === \"--write\") {\n\t\t\twrite = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--force\") {\n\t\t\tforce = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--bytes\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --bytes option.\");\n\t\t\t}\n\t\t\tconst parsed = Number(nextValue);\n\t\t\tif (!Number.isInteger(parsed)) {\n\t\t\t\tthrow new Error(`Invalid --bytes value \"${nextValue}\".`);\n\t\t\t}\n\t\t\tbytes = parsed;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--prefix\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (nextValue === undefined || nextValue.startsWith(\"-\")) {\n\t\t\t\tif (nextValue === \"\") {\n\t\t\t\t\tprefix = \"\";\n\t\t\t\t\tindex += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Missing value for --prefix option.\");\n\t\t\t}\n\t\t\tprefix = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env-file\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --env-file option.\");\n\t\t\t}\n\t\t\tenvFile = nextValue;\n\t\t\twrite = true;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env-key\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --env-key option.\");\n\t\t\t}\n\t\t\tenvKey = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"api-key generate\");\n\t}\n\n\treturn {\n\t\tcommand: \"api-key-generate\",\n\t\tbytes,\n\t\tenvFile,\n\t\tenvKey,\n\t\tforce,\n\t\tprefix,\n\t\twrite,\n\t};\n}\n\nfunction parseApiKeyCreateFlags(\n\trest: string[],\n\tstartIndex: number,\n): CliCommand {\n\tlet index = startIndex;\n\tlet name: string | undefined;\n\tlet clientName: string | undefined;\n\tlet description: string | undefined;\n\tlet expiresAt: string | undefined;\n\tlet rights: string[] = [];\n\tlet write = false;\n\tlet force = false;\n\tlet envFile: string | undefined;\n\tlet envKey = \"ATHENA_API_KEY\";\n\tlet json = false;\n\tlet url: string | undefined;\n\tlet adminKey: string | undefined;\n\n\twhile (index < rest.length) {\n\t\tconst token = rest[index];\n\t\tindex += 1;\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"api-key\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--write\") {\n\t\t\twrite = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--force\") {\n\t\t\tforce = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--name\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --name option.\");\n\t\t\t}\n\t\t\tname = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--client-name\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --client-name option.\");\n\t\t\t}\n\t\t\tclientName = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--description\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --description option.\");\n\t\t\t}\n\t\t\tdescription = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--expires-at\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --expires-at option.\");\n\t\t\t}\n\t\t\texpiresAt = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--rights\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --rights option.\");\n\t\t\t}\n\t\t\trights = nextValue.split(\",\").map((token) => parseAthenaRightKey(token));\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--url\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --url option.\");\n\t\t\t}\n\t\t\turl = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--admin-key\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --admin-key option.\");\n\t\t\t}\n\t\t\tadminKey = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env-file\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --env-file option.\");\n\t\t\t}\n\t\t\tenvFile = nextValue;\n\t\t\twrite = true;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--env-key\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --env-key option.\");\n\t\t\t}\n\t\t\tenvKey = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"api-key create\");\n\t}\n\n\tif (!name) {\n\t\tthrow new Error(\n\t\t\t\"api-key create requires --name <name>. Example: athena-js api-key create --name app --rights gateway.query\",\n\t\t);\n\t}\n\n\treturn {\n\t\tcommand: \"api-key-create\",\n\t\tadminKey,\n\t\tclientName,\n\t\tdescription,\n\t\tenvFile,\n\t\tenvKey,\n\t\texpiresAt,\n\t\tforce,\n\t\tjson,\n\t\tname,\n\t\trights,\n\t\turl,\n\t\twrite,\n\t};\n}\n\nfunction parseApiKeyListFlags(rest: string[], startIndex: number): CliCommand {\n\tconst common = parseGatewayAdminFlags(rest, startIndex);\n\tconst help = helpOrRejectUnknownFlags(\n\t\trest,\n\t\tcommon.index,\n\t\t\"api-key list\",\n\t\t\"api-key\",\n\t);\n\tif (help) {\n\t\treturn help;\n\t}\n\treturn {\n\t\tcommand: \"api-key-list\",\n\t\tadminKey: common.adminKey,\n\t\tjson: common.json,\n\t\turl: common.url,\n\t};\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tif (\n\t\trest.length === 0 ||\n\t\trest[0] === \"help\" ||\n\t\trest[0] === \"--help\" ||\n\t\trest[0] === \"-h\"\n\t) {\n\t\treturn { command: \"help\", topic: \"api-key\" };\n\t}\n\n\tconst sub = rest[0];\n\tif (sub === \"generate\" || sub === \"gen\" || sub === \"new\") {\n\t\treturn parseApiKeyGenerateFlags(rest, 1);\n\t}\n\tif (sub === \"create\") {\n\t\treturn parseApiKeyCreateFlags(rest, 1);\n\t}\n\tif (sub === \"list\" || sub === \"ls\") {\n\t\treturn parseApiKeyListFlags(rest, 1);\n\t}\n\tif (sub.startsWith(\"-\")) {\n\t\treturn parseApiKeyGenerateFlags(rest, 0);\n\t}\n\n\tthrow new Error(\n\t\t[\n\t\t\t`Unknown api-key subcommand \"${sub}\".`,\n\t\t\tformatDidYouMean(closestMatches(sub, catalogSubcommandTokens(\"api-key\"))),\n\t\t\tformatExpectedCommandsLine(catalogSubcommands(\"api-key\")),\n\t\t]\n\t\t\t.filter((line) => line.length > 0)\n\t\t\t.join(\"\\n\"),\n\t);\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"api-key\");\n}\n\nexport function sessionTitle(\n\t_parsed: ApiKeyGenerateCommand | ApiKeyListCommand | ApiKeyCreateCommand,\n): string {\n\treturn \"athena-js api-key\";\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: ApiKeyGenerateCommand | ApiKeyListCommand | ApiKeyCreateCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, runtime } = ctx;\n\ttry {\n\t\tif (parsed.command === \"api-key-generate\") {\n\t\t\tconst generated = generateApiKey({\n\t\t\t\tbytes: parsed.bytes,\n\t\t\t\tprefix: parsed.prefix,\n\t\t\t});\n\t\t\tif (parsed.write) {\n\t\t\t\tassertGenerateDoesNotWriteGatewayAppKey(parsed.envKey);\n\t\t\t\tconst written = writeApiKeyToEnvFile({\n\t\t\t\t\tcwd: runtime.cwd,\n\t\t\t\t\tenvKey: parsed.envKey,\n\t\t\t\t\tfilePath: parsed.envFile,\n\t\t\t\t\tforce: parsed.force,\n\t\t\t\t\tkey: generated.key,\n\t\t\t\t});\n\t\t\t\tlog(\n\t\t\t\t\t`Static admin secret ${written.action} in ${written.absolutePath} (${written.envKey})`,\n\t\t\t\t);\n\t\t\t\tlog(\n\t\t\t\t\t\"Set the same value on the gateway process. This is not a store-backed ATHENA_API_KEY.\",\n\t\t\t\t);\n\t\t\t\tlog(\n\t\t\t\t\t\"For a registered app key: athena-js api-key create --name <name> --rights gateway.query --write\",\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlog(generated.key);\n\t\t\t\tlog(\n\t\t\t\t\t\"Tip: athena-js api-key generate --write  # saves to .env.local as ATHENA_KEY_12\",\n\t\t\t\t);\n\t\t\t\tlog(\n\t\t\t\t\t\"For a store-backed gateway app key: athena-js api-key create --name <name> --rights gateway.query --write\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst credentials = resolveGatewayAdminCredentials({\n\t\t\tadminKey: parsed.adminKey,\n\t\t\tbaseUrl: parsed.url,\n\t\t\tcwd: runtime.cwd,\n\t\t});\n\t\tconst clientOptions = {\n\t\t\t...credentials,\n\t\t\tfetchImpl: runtime.fetchImpl,\n\t\t};\n\n\t\tif (parsed.command === \"api-key-list\") {\n\t\t\tconst records = await listGatewayApiKeys(clientOptions);\n\t\t\tif (parsed.json) {\n\t\t\t\tlog(JSON.stringify({ api_keys: records }, null, 2));\n\t\t\t} else {\n\t\t\t\tlog(\n\t\t\t\t\t`[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`,\n\t\t\t\t);\n\t\t\t\tlog(formatApiKeyRecords(records));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst created = await createGatewayApiKey({\n\t\t\t...clientOptions,\n\t\t\tinput: {\n\t\t\t\tclient_name: parsed.clientName,\n\t\t\t\tdescription: parsed.description,\n\t\t\t\texpires_at: parsed.expiresAt,\n\t\t\t\tname: parsed.name,\n\t\t\t\trights: parsed.rights,\n\t\t\t},\n\t\t});\n\t\tif (parsed.write && created.api_key) {\n\t\t\tconst written = writeApiKeyToEnvFile({\n\t\t\t\tcwd: runtime.cwd,\n\t\t\t\tenvKey: parsed.envKey,\n\t\t\t\tfilePath: parsed.envFile,\n\t\t\t\tforce: parsed.force,\n\t\t\t\tkey: created.api_key,\n\t\t\t});\n\t\t\tif (parsed.json) {\n\t\t\t\tlog(\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...created,\n\t\t\t\t\t\t\tenvWrite: written,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlog(formatCreatedApiKey(created));\n\t\t\t\tlog(\n\t\t\t\t\t`Saved plaintext to ${written.absolutePath} as ${written.envKey} (${written.action})`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (parsed.json) {\n\t\t\tlog(JSON.stringify(created, null, 2));\n\t\t} else {\n\t\t\tlog(formatCreatedApiKey(created));\n\t\t\tif (parsed.write && !created.api_key) {\n\t\t\t\tlog(\n\t\t\t\t\t\"Warning: response had no plaintext api_key; nothing written to env file.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","/**\n * Gateway admin HTTP helpers for the athena-js CLI.\n *\n * Targets static-admin-key routes:\n * - `GET/POST /admin/api-keys`\n * - `GET/POST /admin/api-key-rights`\n * - `GET /admin/rights/catalog`\n *\n * Auth: `X-Athena-Key` with `ATHENA_KEY_12` / `ATHENA_P12_KEY` / `ATHENA_ADMIN_KEY`\n * (same gate as other Athena admin surfaces). This is **not** the runtime\n * gateway app key (`ATHENA_API_KEY`) and not Auth `POST /api-key/create`.\n */\n\nimport { normalizeAthenaGatewayBaseUrl } from \"../gateway/url.ts\";\nimport { parseAthenaRightKey } from \"../rights/key.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport { loadProjectEnv } from \"./commands/env/project-env.ts\";\n\nexport const ADMIN_KEY_ENV_KEYS = [\n  \"ATHENA_KEY_12\",\n  \"ATHENA_P12_KEY\",\n  \"ATHENA_ADMIN_KEY\",\n] as const;\n\nexport const ADMIN_URL_ENV_KEYS = [\n  \"ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"ATHENA_GENERATOR_URL\",\n  \"NEXT_PUBLIC_ATHENA_URL\",\n] as const;\n\nexport class GatewayAdminError extends Error {\n  readonly body: unknown;\n  readonly endpoint: string;\n  readonly method: string;\n  readonly status: number;\n\n  constructor(input: {\n    body: unknown;\n    endpoint: string;\n    message: string;\n    method: string;\n    status: number;\n  }) {\n    super(input.message);\n    this.name = \"GatewayAdminError\";\n    this.body = input.body;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.status = input.status;\n  }\n}\n\nexport interface GatewayAdminCredentials {\n  adminKey: string;\n  adminKeySource: string;\n  baseUrl: string;\n  urlSource: string;\n}\n\nexport interface ResolveGatewayAdminOptions {\n  adminKey?: string;\n  baseUrl?: string;\n  cwd?: string;\n  processEnv?: Record<string, string | undefined>;\n}\n\nfunction pickEnv(\n  values: Map<string, { value: string; sourceKey: string }>,\n  keys: readonly string[]\n): { sourceKey: string; value: string } | undefined {\n  for (const key of keys) {\n    const hit = values.get(key);\n    if (hit?.value) {\n      return { sourceKey: key, value: hit.value };\n    }\n  }\n  return undefined;\n}\n\n/**\n * Resolve gateway base URL + static admin key from flags / project env / process.\n */\nexport function resolveGatewayAdminCredentials(\n  options: ResolveGatewayAdminOptions = {}\n): GatewayAdminCredentials {\n  const loaded = loadProjectEnv({\n    cwd: options.cwd,\n    processEnv: options.processEnv,\n  });\n\n  const values = new Map<string, { sourceKey: string; value: string }>();\n  for (const [key, entry] of loaded.values.entries()) {\n    values.set(key, { sourceKey: entry.sourceKey, value: entry.value });\n  }\n\n  const urlHit = options.baseUrl?.trim()\n    ? { sourceKey: \"--url\", value: options.baseUrl.trim() }\n    : pickEnv(values, ADMIN_URL_ENV_KEYS);\n\n  const keyHit = options.adminKey?.trim()\n    ? { sourceKey: \"--admin-key\", value: options.adminKey.trim() }\n    : pickEnv(values, ADMIN_KEY_ENV_KEYS);\n\n  if (!urlHit) {\n    throw new Error(\n      `Missing Athena gateway URL. Set ${ADMIN_URL_ENV_KEYS[0]} (or pass --url).`\n    );\n  }\n  if (!keyHit) {\n    throw new Error(\n      `Missing static admin key. Set ${ADMIN_KEY_ENV_KEYS.join(\" / \")} (or pass --admin-key). ` +\n        \"This is the server admin secret (ATHENA_KEY_12), not ATHENA_API_KEY.\"\n    );\n  }\n\n  const baseUrl = normalizeAthenaGatewayBaseUrl(urlHit.value, {\n    label: \"Athena gateway URL\",\n  }).replace(/\\/+$/, \"\");\n\n  return {\n    adminKey: keyHit.value,\n    adminKeySource: keyHit.sourceKey,\n    baseUrl,\n    urlSource: urlHit.sourceKey,\n  };\n}\n\nexport interface GatewayAdminClientOptions extends GatewayAdminCredentials {\n  fetchImpl?: typeof fetch;\n}\n\nexport interface GatewayApiKeyRecord {\n  client_name?: string | null;\n  created_at?: string;\n  description?: string | null;\n  expires_at?: string | null;\n  id?: string;\n  is_active?: boolean;\n  last_used_at?: string | null;\n  name?: string;\n  public_id?: string;\n  rights?: string[];\n  updated_at?: string;\n}\n\nexport interface GatewayApiKeyRightRecord {\n  created_at?: string;\n  description?: string | null;\n  id?: string;\n  name: string;\n  updated_at?: string;\n}\n\nexport interface CreateGatewayApiKeyInput {\n  client_name?: string | null;\n  description?: string | null;\n  expires_at?: string | null;\n  name: string;\n  rights?: string[];\n}\n\nexport interface CreateGatewayApiKeyResult {\n  api_key?: string;\n  record?: GatewayApiKeyRecord;\n  /** Raw envelope when shape differs. */\n  raw: unknown;\n}\n\nexport interface RightsCatalogEntry {\n  action?: string;\n  description?: string | null;\n  id?: string;\n  isPattern?: boolean;\n  key: string;\n  kind?: string;\n  resource?: string;\n  source?: string;\n}\n\nexport interface RightsCatalogData {\n  apiKeyRightsStatus?: string;\n  counts?: {\n    dynamicApiKeyRights?: number;\n    native?: number;\n    total?: number;\n  };\n  dynamicApiKeyRights?: RightsCatalogEntry[];\n  nativeRights?: RightsCatalogEntry[];\n  sources?: Record<string, string>;\n}\n\nfunction unwrapData(body: unknown): unknown {\n  if (!body || typeof body !== \"object\") {\n    return body;\n  }\n  const record = body as Record<string, unknown>;\n  if (\"data\" in record) {\n    return record.data;\n  }\n  return body;\n}\n\nfunction extractErrorMessage(body: unknown, fallback: string): string {\n  if (!body || typeof body !== \"object\") {\n    return fallback;\n  }\n  const record = body as Record<string, unknown>;\n  if (typeof record.message === \"string\" && record.message.trim()) {\n    return record.message;\n  }\n  if (typeof record.error === \"string\" && record.error.trim()) {\n    return record.error;\n  }\n  if (\n    record.error &&\n    typeof record.error === \"object\" &&\n    typeof (record.error as { message?: unknown }).message === \"string\"\n  ) {\n    return String((record.error as { message: string }).message);\n  }\n  return fallback;\n}\n\nexport async function gatewayAdminRequest(\n  options: GatewayAdminClientOptions & {\n    body?: unknown;\n    method: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n    path: string;\n  }\n): Promise<unknown> {\n  const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n  if (typeof fetchImpl !== \"function\") {\n    throw new Error(\n      \"fetch is not available in this runtime. Use Node.js 18+ or provide fetchImpl.\"\n    );\n  }\n\n  const url = `${options.baseUrl}${options.path.startsWith(\"/\") ? \"\" : \"/\"}${options.path}`;\n  const headers: Record<string, string> = {\n    Accept: \"application/json\",\n    \"Content-Type\": \"application/json\",\n    \"User-Agent\": `athena-js-cli/${PACKAGE_VERSION}`,\n    \"X-Athena-Key\": options.adminKey,\n    apikey: options.adminKey,\n  };\n\n  const response = await fetchImpl(url, {\n    body:\n      options.body === undefined ? undefined : JSON.stringify(options.body),\n    headers,\n    method: options.method,\n  });\n\n  const text = await response.text();\n  let parsed: unknown = undefined;\n  if (text.trim()) {\n    try {\n      parsed = JSON.parse(text) as unknown;\n    } catch {\n      parsed = text;\n    }\n  }\n\n  if (!response.ok) {\n    throw new GatewayAdminError({\n      body: parsed,\n      endpoint: options.path,\n      message: extractErrorMessage(\n        parsed,\n        `Gateway admin ${options.method} ${options.path} failed (${response.status})`\n      ),\n      method: options.method,\n      status: response.status,\n    });\n  }\n\n  return parsed;\n}\n\nexport async function listGatewayApiKeys(\n  options: GatewayAdminClientOptions\n): Promise<GatewayApiKeyRecord[]> {\n  const body = await gatewayAdminRequest({\n    ...options,\n    method: \"GET\",\n    path: \"/admin/api-keys\",\n  });\n  const data = unwrapData(body);\n  if (Array.isArray(data)) {\n    return data as GatewayApiKeyRecord[];\n  }\n  if (data && typeof data === \"object\") {\n    const record = data as Record<string, unknown>;\n    if (Array.isArray(record.api_keys)) {\n      return record.api_keys as GatewayApiKeyRecord[];\n    }\n    if (Array.isArray(record.keys)) {\n      return record.keys as GatewayApiKeyRecord[];\n    }\n  }\n  if (body && typeof body === \"object\") {\n    const record = body as Record<string, unknown>;\n    if (Array.isArray(record.api_keys)) {\n      return record.api_keys as GatewayApiKeyRecord[];\n    }\n  }\n  return [];\n}\n\nexport async function createGatewayApiKey(\n  options: GatewayAdminClientOptions & { input: CreateGatewayApiKeyInput }\n): Promise<CreateGatewayApiKeyResult> {\n  const rights = (options.input.rights ?? []).map((raw) =>\n    parseAthenaRightKey(raw)\n  );\n  const body = await gatewayAdminRequest({\n    ...options,\n    body: {\n      client_name: options.input.client_name ?? undefined,\n      description: options.input.description ?? undefined,\n      expires_at: options.input.expires_at ?? undefined,\n      name: options.input.name,\n      rights,\n    },\n    method: \"POST\",\n    path: \"/admin/api-keys\",\n  });\n\n  const data = unwrapData(body);\n  if (data && typeof data === \"object\") {\n    const record = data as Record<string, unknown>;\n    return {\n      api_key:\n        typeof record.api_key === \"string\"\n          ? record.api_key\n          : typeof record.key === \"string\"\n            ? record.key\n            : undefined,\n      raw: body,\n      record:\n        record.record && typeof record.record === \"object\"\n          ? (record.record as GatewayApiKeyRecord)\n          : undefined,\n    };\n  }\n\n  if (body && typeof body === \"object\") {\n    const record = body as Record<string, unknown>;\n    return {\n      api_key:\n        typeof record.api_key === \"string\" ? record.api_key : undefined,\n      raw: body,\n      record:\n        record.record && typeof record.record === \"object\"\n          ? (record.record as GatewayApiKeyRecord)\n          : undefined,\n    };\n  }\n\n  return { raw: body };\n}\n\nexport async function listGatewayApiKeyRights(\n  options: GatewayAdminClientOptions\n): Promise<GatewayApiKeyRightRecord[]> {\n  const body = await gatewayAdminRequest({\n    ...options,\n    method: \"GET\",\n    path: \"/admin/api-key-rights\",\n  });\n  const data = unwrapData(body);\n  if (Array.isArray(data)) {\n    return data as GatewayApiKeyRightRecord[];\n  }\n  if (data && typeof data === \"object\") {\n    const record = data as Record<string, unknown>;\n    if (Array.isArray(record.rights)) {\n      return record.rights as GatewayApiKeyRightRecord[];\n    }\n  }\n  if (body && typeof body === \"object\") {\n    const record = body as Record<string, unknown>;\n    if (Array.isArray(record.rights)) {\n      return record.rights as GatewayApiKeyRightRecord[];\n    }\n  }\n  return [];\n}\n\nexport async function createGatewayApiKeyRight(\n  options: GatewayAdminClientOptions & {\n    input: { description?: string | null; name: string };\n  }\n): Promise<GatewayApiKeyRightRecord> {\n  const body = await gatewayAdminRequest({\n    ...options,\n    body: {\n      description: options.input.description ?? undefined,\n      name: parseAthenaRightKey(options.input.name),\n    },\n    method: \"POST\",\n    path: \"/admin/api-key-rights\",\n  });\n  const data = unwrapData(body);\n  if (data && typeof data === \"object\") {\n    const record = data as Record<string, unknown>;\n    if (record.right && typeof record.right === \"object\") {\n      return record.right as GatewayApiKeyRightRecord;\n    }\n    if (typeof record.name === \"string\") {\n      return data as GatewayApiKeyRightRecord;\n    }\n  }\n  if (body && typeof body === \"object\") {\n    const record = body as Record<string, unknown>;\n    if (record.right && typeof record.right === \"object\") {\n      return record.right as GatewayApiKeyRightRecord;\n    }\n  }\n  return { name: options.input.name };\n}\n\nexport async function listGatewayRightsCatalog(\n  options: GatewayAdminClientOptions\n): Promise<RightsCatalogData> {\n  const body = await gatewayAdminRequest({\n    ...options,\n    method: \"GET\",\n    path: \"/admin/rights/catalog\",\n  });\n  const data = unwrapData(body);\n  if (data && typeof data === \"object\") {\n    return data as RightsCatalogData;\n  }\n  return {};\n}\n\nexport function formatApiKeyRecords(records: GatewayApiKeyRecord[]): string {\n  if (records.length === 0) {\n    return \"No API keys found.\";\n  }\n  const lines = [\n    `API keys (${records.length})`,\n    \"name\\tpublic_id\\tactive\\tclient\\trights\",\n  ];\n  for (const row of records) {\n    const rights = Array.isArray(row.rights) ? row.rights.join(\",\") : \"-\";\n    lines.push(\n      [\n        row.name ?? \"-\",\n        row.public_id ?? row.id ?? \"-\",\n        row.is_active === false ? \"no\" : \"yes\",\n        row.client_name ?? \"-\",\n        rights || \"-\",\n      ].join(\"\\t\")\n    );\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function formatApiKeyRights(\n  rights: GatewayApiKeyRightRecord[]\n): string {\n  if (rights.length === 0) {\n    return \"No API key rights found in the auth store.\";\n  }\n  const lines = [`API key rights (${rights.length})`, \"name\\tdescription\\tid\"];\n  for (const right of rights) {\n    lines.push(\n      [\n        right.name,\n        right.description?.replace(/\\s+/g, \" \") ?? \"-\",\n        right.id ?? \"-\",\n      ].join(\"\\t\")\n    );\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function formatRightsCatalog(catalog: RightsCatalogData): string {\n  const native = catalog.nativeRights ?? [];\n  const dynamic = catalog.dynamicApiKeyRights ?? [];\n  const lines = [\n    \"Athena rights catalog\",\n    `counts: native=${catalog.counts?.native ?? native.length} dynamic=${catalog.counts?.dynamicApiKeyRights ?? dynamic.length} total=${catalog.counts?.total ?? native.length + dynamic.length}`,\n    `apiKeyRightsStatus: ${catalog.apiKeyRightsStatus ?? \"unknown\"}`,\n    \"\",\n    `Native rights (${native.length})`,\n    \"key\\tsource\\tkind\\tpattern\\tdescription\",\n  ];\n  for (const entry of native) {\n    lines.push(\n      [\n        entry.key,\n        entry.source ?? \"-\",\n        entry.kind ?? \"-\",\n        entry.isPattern ? \"yes\" : \"no\",\n        (entry.description ?? \"-\").replace(/\\s+/g, \" \"),\n      ].join(\"\\t\")\n    );\n  }\n  lines.push(\"\", `Dynamic API key rights (${dynamic.length})`, \"key\\tsource\\tid\");\n  for (const entry of dynamic) {\n    lines.push(\n      [entry.key, entry.source ?? \"-\", entry.id ?? \"-\"].join(\"\\t\")\n    );\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function formatCreatedApiKey(result: CreateGatewayApiKeyResult): string {\n  const lines = [\"Created gateway API key\"];\n  if (result.api_key) {\n    lines.push(`plaintext (shown once): ${result.api_key}`);\n  } else {\n    lines.push(\"plaintext: (not present in response)\");\n  }\n  if (result.record) {\n    lines.push(\n      `record: name=${result.record.name ?? \"-\"} public_id=${result.record.public_id ?? result.record.id ?? \"-\"} client=${result.record.client_name ?? \"-\"} rights=${(result.record.rights ?? []).join(\",\") || \"-\"}`\n    );\n  }\n  lines.push(\n    \"Store the plaintext secret now — it cannot be retrieved again from the API.\"\n  );\n  return lines.join(\"\\n\");\n}","/**\n * Project env-file loading and validation for the athena-js CLI.\n *\n * Load order matches the generator (`loadGeneratorConfig`):\n * `.env` → `.env.local` → `.env.<NODE_ENV>` → `.env.<NODE_ENV>.local`\n * Shell / process env wins over file values for the same key.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport {\n\tATHENA_ENV_API_KEY_KEYS,\n\tATHENA_ENV_CLIENT_KEYS,\n\tATHENA_ENV_DB_URL_KEYS,\n\tATHENA_ENV_PRIMARY_KEYS,\n\tATHENA_ENV_URL_KEYS,\n} from \"../../../env/index.ts\";\nimport { PACKAGE_VERSION } from \"../../../sdk-version.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { paint } from \"../../ui/colors.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\n\nconst PROJECT_ENV_FILENAMES = [\".env\", \".env.local\"] as const;\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n\t\"ATHENA_GENERATOR_PG_URL\",\n\t\"DATABASE_URL\",\n\t\"PG_URL\",\n\t\"POSTGRES_URL\",\n\t\"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_ENV_KEYS = [\n\t...ATHENA_ENV_URL_KEYS,\n\t...ATHENA_ENV_DB_URL_KEYS,\n\t\"ATHENA_GENERATOR_URL\",\n] as const;\n\nconst GATEWAY_API_KEY_ENV_KEYS = [\n\t...ATHENA_ENV_API_KEY_KEYS,\n\t\"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\nconst PLACEHOLDER_VALUE_RE =\n\t/\\$\\{[A-Za-z_][A-Za-z0-9_]*\\}|<\\w+>|your[-_ ].+|changeme|xxx+|todo|replace[-_ ]me|example\\.com\\/api/i;\n\nexport const ENV_CHECK_MODES = [\"auto\", \"direct\", \"gateway\"] as const;\nexport type EnvCheckMode = (typeof ENV_CHECK_MODES)[number];\nexport type EnvCheckSeverity = \"ok\" | \"warn\" | \"error\";\nexport type EnvValueSource = \"process\" | \"file\" | \"missing\";\n\nexport interface EnvFileEntry {\n\tabsolutePath: string;\n\tfilename: string;\n\tkeys: string[];\n}\n\nexport interface EnvFieldCheck {\n\tfield: string;\n\tkeysTried: readonly string[];\n\tmessage: string;\n\tseverity: EnvCheckSeverity;\n\tsource?: EnvValueSource;\n\tsourceKey?: string;\n\tsourcePath?: string;\n\t/** Redacted preview when a value is present. */\n\tvaluePreview?: string;\n}\n\nexport interface EnvCheckResult {\n\tchecks: EnvFieldCheck[];\n\tcwd: string;\n\terrorCount: number;\n\tfiles: EnvFileEntry[];\n\tmode: EnvCheckMode;\n\tresolvedMode: \"direct\" | \"gateway\" | \"none\";\n\tsdkVersion: string;\n\twarnCount: number;\n}\n\nexport interface LoadProjectEnvOptions {\n\tcwd?: string;\n\t/** Explicit env file paths (relative to cwd or absolute). When set, only these are read. */\n\tfiles?: string[];\n\t/** Optional process env override (defaults to process.env). */\n\tprocessEnv?: Record<string, string | undefined>;\n}\n\n/** Resolved env value after process env wins over files. */\nexport interface LoadedProjectEnvValue {\n\tsource: Exclude<EnvValueSource, \"missing\">;\n\tsourceKey: string;\n\tsourcePath?: string;\n\tvalue: string;\n}\n\nexport interface LoadedProjectEnv {\n\t/** Absolute paths that existed and were parsed. */\n\tfiles: EnvFileEntry[];\n\t/** key → { value, source, sourcePath?, sourceKey } with process winning. */\n\tvalues: Map<string, LoadedProjectEnvValue>;\n}\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n\tif (\n\t\trawValue.startsWith('\"') &&\n\t\trawValue.endsWith('\"') &&\n\t\trawValue.length >= 2\n\t) {\n\t\tconst inner = rawValue.slice(1, -1);\n\t\treturn inner\n\t\t\t.replace(/\\\\n/g, \"\\n\")\n\t\t\t.replace(/\\\\r/g, \"\\r\")\n\t\t\t.replace(/\\\\t/g, \"\\t\")\n\t\t\t.replace(/\\\\\"/g, '\"')\n\t\t\t.replace(/\\\\\\\\/g, \"\\\\\");\n\t}\n\n\tif (\n\t\trawValue.startsWith(\"'\") &&\n\t\trawValue.endsWith(\"'\") &&\n\t\trawValue.length >= 2\n\t) {\n\t\treturn rawValue.slice(1, -1);\n\t}\n\n\tconst commentIndex = rawValue.search(/\\s+#/);\n\tconst withoutComment =\n\t\tcommentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n\treturn withoutComment.trim();\n}\n\nexport function parseEnvLine(\n\tline: string,\n): [key: string, value: string] | undefined {\n\tconst trimmed = line.trim();\n\tif (!trimmed || trimmed.startsWith(\"#\")) {\n\t\treturn undefined;\n\t}\n\n\tconst match = trimmed.match(\n\t\t/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\n\tconst [, key, rawValue] = match;\n\treturn [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readEnvFile(absolutePath: string): {\n\tentries: Map<string, string>;\n\tkeys: string[];\n} {\n\tconst content = readFileSync(absolutePath, \"utf8\");\n\tconst entries = new Map<string, string>();\n\tconst keys: string[] = [];\n\tfor (const line of content.split(/\\r?\\n/g)) {\n\t\tconst parsed = parseEnvLine(line);\n\t\tif (!parsed) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst [key, value] = parsed;\n\t\tif (!entries.has(key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t\tentries.set(key, value);\n\t}\n\treturn { entries, keys };\n}\n\nfunction defaultEnvFilenames(\n\tprocessEnv: Record<string, string | undefined>,\n): string[] {\n\tconst nodeEnv = processEnv.NODE_ENV?.trim();\n\treturn [\n\t\t...PROJECT_ENV_FILENAMES,\n\t\t...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n\t];\n}\n\nexport function loadProjectEnv(\n\toptions: LoadProjectEnvOptions = {},\n): LoadedProjectEnv {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst processEnv = options.processEnv ?? process.env;\n\tconst filenames =\n\t\toptions.files && options.files.length > 0\n\t\t\t? options.files\n\t\t\t: defaultEnvFilenames(processEnv);\n\n\tconst fileLayers: Array<{\n\t\tabsolutePath: string;\n\t\tentries: Map<string, string>;\n\t\tfilename: string;\n\t\tkeys: string[];\n\t}> = [];\n\n\tfor (const filename of filenames) {\n\t\tconst absolutePath = resolve(cwd, filename);\n\t\tif (!existsSync(absolutePath)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst { entries, keys } = readEnvFile(absolutePath);\n\t\tfileLayers.push({ absolutePath, entries, filename, keys });\n\t}\n\n\tconst values: LoadedProjectEnv[\"values\"] = new Map();\n\n\t// Later files override earlier files (same as generator apply order).\n\tfor (const layer of fileLayers) {\n\t\tfor (const [key, value] of layer.entries.entries()) {\n\t\t\tvalues.set(key, {\n\t\t\t\tsource: \"file\",\n\t\t\t\tsourceKey: key,\n\t\t\t\tsourcePath: layer.absolutePath,\n\t\t\t\tvalue,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Process env wins.\n\tfor (const [key, raw] of Object.entries(processEnv)) {\n\t\tif (typeof raw !== \"string\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst trimmed = raw.trim();\n\t\tif (!trimmed) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalues.set(key, {\n\t\t\tsource: \"process\",\n\t\t\tsourceKey: key,\n\t\t\tvalue: trimmed,\n\t\t});\n\t}\n\n\treturn {\n\t\tfiles: fileLayers.map((layer) => ({\n\t\t\tabsolutePath: layer.absolutePath,\n\t\t\tfilename: layer.filename,\n\t\t\tkeys: layer.keys,\n\t\t})),\n\t\tvalues,\n\t};\n}\n\nfunction redactSecret(value: string): string {\n\tif (value.length <= 8) {\n\t\treturn \"*\".repeat(Math.min(value.length, 4));\n\t}\n\treturn `${value.slice(0, 4)}…${value.slice(-2)} (len=${value.length})`;\n}\n\nfunction isPlaceholderValue(value: string): boolean {\n\treturn PLACEHOLDER_VALUE_RE.test(value.trim());\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst url = new URL(value);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isPostgresConnectionString(value: string): boolean {\n\ttry {\n\t\tconst url = new URL(value);\n\t\treturn (\n\t\t\turl.protocol === \"postgres:\" ||\n\t\t\turl.protocol === \"postgresql:\" ||\n\t\t\t// allow bare driver URLs some hosts use\n\t\t\turl.protocol === \"pg:\"\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction pickFirst(\n\tloaded: LoadedProjectEnv,\n\tkeys: readonly string[],\n): LoadedProjectEnvValue | undefined {\n\tfor (const key of keys) {\n\t\tconst hit = loaded.values.get(key);\n\t\tif (hit?.value) {\n\t\t\treturn hit;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction fieldCheck(input: {\n\tfield: string;\n\tkeysTried: readonly string[];\n\tmessage: string;\n\tseverity: EnvCheckSeverity;\n\thit?: LoadedProjectEnvValue;\n\tpreviewAsSecret?: boolean;\n}): EnvFieldCheck {\n\tif (!input.hit) {\n\t\treturn {\n\t\t\tfield: input.field,\n\t\t\tkeysTried: input.keysTried,\n\t\t\tmessage: input.message,\n\t\t\tseverity: input.severity,\n\t\t\tsource: \"missing\",\n\t\t};\n\t}\n\n\treturn {\n\t\tfield: input.field,\n\t\tkeysTried: input.keysTried,\n\t\tmessage: input.message,\n\t\tseverity: input.severity,\n\t\tsource: input.hit.source,\n\t\tsourceKey: input.hit.sourceKey,\n\t\tsourcePath: input.hit.sourcePath,\n\t\tvaluePreview: input.previewAsSecret\n\t\t\t? redactSecret(input.hit.value)\n\t\t\t: input.hit.value.length > 80\n\t\t\t\t? `${input.hit.value.slice(0, 77)}…`\n\t\t\t\t: input.hit.value,\n\t};\n}\n\nexport interface ValidateProjectEnvOptions extends LoadProjectEnvOptions {\n\tmode?: EnvCheckMode;\n\t/**\n\t * When true, missing optional companion keys become errors.\n\t * Default false (warnings for optional / incomplete pairs).\n\t */\n\tstrict?: boolean;\n}\n\n/**\n * Validate Athena-related keys and URLs from project env files + process env.\n */\nexport function validateProjectEnv(\n\toptions: ValidateProjectEnvOptions = {},\n): EnvCheckResult {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst mode = options.mode ?? \"auto\";\n\tconst strict = options.strict === true;\n\tconst loaded = loadProjectEnv({\n\t\tcwd,\n\t\tfiles: options.files,\n\t\tprocessEnv: options.processEnv,\n\t});\n\n\tconst checks: EnvFieldCheck[] = [];\n\tconst gatewayUrl = pickFirst(loaded, GATEWAY_URL_ENV_KEYS);\n\tconst apiKey = pickFirst(loaded, GATEWAY_API_KEY_ENV_KEYS);\n\tconst databaseUrl = pickFirst(loaded, DIRECT_CONNECTION_STRING_ENV_KEYS);\n\tconst client = pickFirst(loaded, ATHENA_ENV_CLIENT_KEYS);\n\tconst authUrl = pickFirst(loaded, [\n\t\tATHENA_ENV_PRIMARY_KEYS.authUrl,\n\t\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n\t]);\n\n\tlet resolvedMode: EnvCheckResult[\"resolvedMode\"] = \"none\";\n\tif (mode === \"direct\") {\n\t\tresolvedMode = \"direct\";\n\t} else if (mode === \"gateway\") {\n\t\tresolvedMode = \"gateway\";\n\t} else if (databaseUrl && !(gatewayUrl && apiKey)) {\n\t\tresolvedMode = \"direct\";\n\t} else if (gatewayUrl || apiKey) {\n\t\tresolvedMode = \"gateway\";\n\t} else if (databaseUrl) {\n\t\tresolvedMode = \"direct\";\n\t}\n\n\t// Gateway URL\n\tif (gatewayUrl) {\n\t\tif (isPlaceholderValue(gatewayUrl.value)) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"gatewayUrl\",\n\t\t\t\t\thit: gatewayUrl,\n\t\t\t\t\tkeysTried: GATEWAY_URL_ENV_KEYS,\n\t\t\t\t\tmessage: `Looks like an unexpanded placeholder or sample value in ${gatewayUrl.sourceKey}.`,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (!isAbsoluteHttpUrl(gatewayUrl.value)) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"gatewayUrl\",\n\t\t\t\t\thit: gatewayUrl,\n\t\t\t\t\tkeysTried: GATEWAY_URL_ENV_KEYS,\n\t\t\t\t\tmessage: `${gatewayUrl.sourceKey} must be an absolute http(s) URL.`,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"gatewayUrl\",\n\t\t\t\t\thit: gatewayUrl,\n\t\t\t\t\tkeysTried: GATEWAY_URL_ENV_KEYS,\n\t\t\t\t\tmessage: `Resolved from ${gatewayUrl.sourceKey} (${gatewayUrl.source}).`,\n\t\t\t\t\tseverity: \"ok\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} else if (resolvedMode === \"gateway\" || mode === \"gateway\") {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"gatewayUrl\",\n\t\t\t\tkeysTried: GATEWAY_URL_ENV_KEYS,\n\t\t\t\tmessage: `Missing gateway URL. Set ${ATHENA_ENV_PRIMARY_KEYS.url} (or ATHENA_GATEWAY_URL).`,\n\t\t\t\tseverity: \"error\",\n\t\t\t}),\n\t\t);\n\t} else {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"gatewayUrl\",\n\t\t\t\tkeysTried: GATEWAY_URL_ENV_KEYS,\n\t\t\t\tmessage: \"No gateway URL set (optional for direct Postgres mode).\",\n\t\t\t\tseverity: \"warn\",\n\t\t\t}),\n\t\t);\n\t}\n\n\t// API key\n\tif (apiKey) {\n\t\tif (isPlaceholderValue(apiKey.value)) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"apiKey\",\n\t\t\t\t\thit: apiKey,\n\t\t\t\t\tkeysTried: GATEWAY_API_KEY_ENV_KEYS,\n\t\t\t\t\tmessage: `Looks like an unexpanded placeholder or sample value in ${apiKey.sourceKey}.`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (apiKey.value.length < 8) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"apiKey\",\n\t\t\t\t\thit: apiKey,\n\t\t\t\t\tkeysTried: GATEWAY_API_KEY_ENV_KEYS,\n\t\t\t\t\tmessage: `${apiKey.sourceKey} is unusually short (< 8 chars).`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: strict ? \"error\" : \"warn\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"apiKey\",\n\t\t\t\t\thit: apiKey,\n\t\t\t\t\tkeysTried: GATEWAY_API_KEY_ENV_KEYS,\n\t\t\t\t\tmessage: `Resolved from ${apiKey.sourceKey} (${apiKey.source}).`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: \"ok\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} else if (resolvedMode === \"gateway\" || mode === \"gateway\") {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"apiKey\",\n\t\t\t\tkeysTried: GATEWAY_API_KEY_ENV_KEYS,\n\t\t\t\tmessage: `Missing API key. Set ${ATHENA_ENV_PRIMARY_KEYS.apiKey} with: athena-js api-key create --name app --rights gateway.query --write.`,\n\t\t\t\tseverity: \"error\",\n\t\t\t}),\n\t\t);\n\t} else {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"apiKey\",\n\t\t\t\tkeysTried: GATEWAY_API_KEY_ENV_KEYS,\n\t\t\t\tmessage: \"No API key set (required for gateway mode).\",\n\t\t\t\tseverity: \"warn\",\n\t\t\t}),\n\t\t);\n\t}\n\n\t// Database URL (direct)\n\tif (databaseUrl) {\n\t\tif (isPlaceholderValue(databaseUrl.value)) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"databaseUrl\",\n\t\t\t\t\thit: databaseUrl,\n\t\t\t\t\tkeysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t\t\tmessage: `Looks like an unexpanded placeholder or sample value in ${databaseUrl.sourceKey}.`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (!isPostgresConnectionString(databaseUrl.value)) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"databaseUrl\",\n\t\t\t\t\thit: databaseUrl,\n\t\t\t\t\tkeysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t\t\tmessage: `${databaseUrl.sourceKey} must be a postgres/postgresql connection URL.`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"databaseUrl\",\n\t\t\t\t\thit: databaseUrl,\n\t\t\t\t\tkeysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t\t\tmessage: `Resolved from ${databaseUrl.sourceKey} (${databaseUrl.source}).`,\n\t\t\t\t\tpreviewAsSecret: true,\n\t\t\t\t\tseverity: \"ok\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t} else if (resolvedMode === \"direct\" || mode === \"direct\") {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"databaseUrl\",\n\t\t\t\tkeysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Missing DATABASE_URL (or PG_URL / POSTGRES_URL) for direct mode.\",\n\t\t\t\tseverity: \"error\",\n\t\t\t}),\n\t\t);\n\t} else {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"databaseUrl\",\n\t\t\t\tkeysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t\tmessage: \"No direct Postgres URL set (optional for gateway mode).\",\n\t\t\t\tseverity: \"warn\",\n\t\t\t}),\n\t\t);\n\t}\n\n\t// Optional companions\n\tif (client) {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"client\",\n\t\t\t\thit: client,\n\t\t\t\tkeysTried: ATHENA_ENV_CLIENT_KEYS,\n\t\t\t\tmessage: `Resolved from ${client.sourceKey} (${client.source}).`,\n\t\t\t\tseverity: \"ok\",\n\t\t\t}),\n\t\t);\n\t} else if (resolvedMode === \"gateway\") {\n\t\tchecks.push(\n\t\t\tfieldCheck({\n\t\t\t\tfield: \"client\",\n\t\t\t\tkeysTried: ATHENA_ENV_CLIENT_KEYS,\n\t\t\t\tmessage:\n\t\t\t\t\t\"ATHENA_CLIENT not set (optional X-Athena-Client registry name).\",\n\t\t\t\tseverity: \"warn\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (authUrl) {\n\t\tif (\n\t\t\t!isAbsoluteHttpUrl(authUrl.value) ||\n\t\t\tisPlaceholderValue(authUrl.value)\n\t\t) {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"authUrl\",\n\t\t\t\t\thit: authUrl,\n\t\t\t\t\tkeysTried: [\n\t\t\t\t\t\tATHENA_ENV_PRIMARY_KEYS.authUrl,\n\t\t\t\t\t\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n\t\t\t\t\t],\n\t\t\t\t\tmessage: `${authUrl.sourceKey} must be an absolute http(s) URL.`,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tchecks.push(\n\t\t\t\tfieldCheck({\n\t\t\t\t\tfield: \"authUrl\",\n\t\t\t\t\thit: authUrl,\n\t\t\t\t\tkeysTried: [\n\t\t\t\t\t\tATHENA_ENV_PRIMARY_KEYS.authUrl,\n\t\t\t\t\t\t\"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n\t\t\t\t\t],\n\t\t\t\t\tmessage: `Resolved from ${authUrl.sourceKey} (${authUrl.source}).`,\n\t\t\t\t\tseverity: \"ok\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tif (loaded.files.length === 0) {\n\t\tchecks.push({\n\t\t\tfield: \"envFiles\",\n\t\t\tkeysTried: options.files ?? defaultEnvFilenames(options.processEnv ?? {}),\n\t\t\tmessage:\n\t\t\t\t\"No project env files found (.env / .env.local). Only process env was checked.\",\n\t\t\tseverity: \"warn\",\n\t\t\tsource: \"missing\",\n\t\t});\n\t}\n\n\tif (resolvedMode === \"none\") {\n\t\tchecks.push({\n\t\t\tfield: \"mode\",\n\t\t\tkeysTried: [\n\t\t\t\t...GATEWAY_URL_ENV_KEYS,\n\t\t\t\t...DIRECT_CONNECTION_STRING_ENV_KEYS,\n\t\t\t],\n\t\t\tmessage:\n\t\t\t\t\"Could not infer mode. Set ATHENA_URL + ATHENA_API_KEY (gateway) or DATABASE_URL (direct).\",\n\t\t\tseverity: \"error\",\n\t\t\tsource: \"missing\",\n\t\t});\n\t}\n\n\tconst errorCount = checks.filter((c) => c.severity === \"error\").length;\n\tconst warnCount = checks.filter((c) => c.severity === \"warn\").length;\n\n\treturn {\n\t\tchecks,\n\t\tcwd,\n\t\terrorCount,\n\t\tfiles: loaded.files,\n\t\tmode,\n\t\tresolvedMode,\n\t\tsdkVersion: PACKAGE_VERSION,\n\t\twarnCount,\n\t};\n}\n\nexport function formatEnvCheckReport(\n\tresult: EnvCheckResult,\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n): string {\n\tconst files =\n\t\tresult.files.length > 0\n\t\t\t? result.files.map((f) => f.filename).join(\", \")\n\t\t\t: \"(none)\";\n\tconst lines: string[] = [\n\t\tpaint(\"athena-js · env check\", \"bold\", capabilities),\n\t\t\"\",\n\t\t`  ${paint(\"SDK        \", \"dim\", capabilities)}${result.sdkVersion}`,\n\t\t`  ${paint(\"cwd        \", \"dim\", capabilities)}${result.cwd}`,\n\t\t`  ${paint(\"mode       \", \"dim\", capabilities)}${result.mode} → ${result.resolvedMode}`,\n\t\t`  ${paint(\"files      \", \"dim\", capabilities)}${files}`,\n\t\t\"\",\n\t];\n\n\tfor (const check of result.checks) {\n\t\tconst tag =\n\t\t\tcheck.severity === \"ok\"\n\t\t\t\t? \"ok   \"\n\t\t\t\t: check.severity === \"warn\"\n\t\t\t\t\t? \"warn \"\n\t\t\t\t\t: \"error\";\n\t\tconst tagColor =\n\t\t\tcheck.severity === \"ok\"\n\t\t\t\t? \"green\"\n\t\t\t\t: check.severity === \"warn\"\n\t\t\t\t\t? \"yellow\"\n\t\t\t\t\t: \"red\";\n\t\tconst preview = check.valuePreview ? `  value=${check.valuePreview}` : \"\";\n\t\tconst key = check.sourceKey ? `  key=${check.sourceKey}` : \"\";\n\t\tlines.push(\n\t\t\t`  ${paint(`[${tag}]`, tagColor, capabilities)} ${check.field}${key}${preview}`,\n\t\t);\n\t\tlines.push(paint(`         ${check.message}`, \"dim\", capabilities));\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\n\t\tpaint(\n\t\t\t`  ${result.errorCount} error(s) · ${result.warnCount} warning(s)`,\n\t\t\t\"dim\",\n\t\t\tcapabilities,\n\t\t),\n\t);\n\tif (result.errorCount === 0) {\n\t\tlines.push(paint(\"result: OK\", \"green\", capabilities));\n\t} else {\n\t\tlines.push(paint(\"result: FAILED\", \"red\", capabilities));\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n","/**\n * Local API key material helpers for the athena-js CLI.\n *\n * Offline `api-key generate` scaffolds a static admin / P12 secret\n * (`ATHENA_KEY_12`). It does **not** mint a store-backed gateway API key\n * (`ath_<publicId>.<secret>` / `ATHENA_API_KEY`) — use `api-key create`.\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { ATHENA_ENV_API_KEY_KEYS } from \"../../../env/index.ts\";\nimport { parseEnvLine } from \"../env/project-env.ts\";\n\nconst DEFAULT_BYTES = 32;\nconst DEFAULT_PREFIX = \"\";\n\nexport const GENERATE_DEFAULT_ENV_KEY = \"ATHENA_KEY_12\";\n\nconst GATEWAY_APP_KEY_ENV_KEYS = new Set<string>(ATHENA_ENV_API_KEY_KEYS);\n\nexport function gatewayAppKeyGenerateWriteError(envKey: string): string {\n\treturn [\n\t\t`athena-js api-key generate cannot write ${envKey}.`,\n\t\t\"That variable is a store-backed gateway API key (`ath_<publicId>.<secret>`).\",\n\t\t\"The gateway looks up the public ID in its API key store; this offline command registers no record.\",\n\t\t\"Create a usable app key with:\",\n\t\t\"  athena-js api-key create --name <name> --rights gateway.query --write\",\n\t\t\"Use generate only for the static admin secret (ATHENA_KEY_12 / ATHENA_P12_KEY), which must also be set on the gateway process.\",\n\t].join(\"\\n\");\n}\n\nexport function assertGenerateDoesNotWriteGatewayAppKey(envKey: string): void {\n\tif (GATEWAY_APP_KEY_ENV_KEYS.has(envKey)) {\n\t\tthrow new Error(gatewayAppKeyGenerateWriteError(envKey));\n\t}\n}\n\nfunction getRandomBytes(size: number): Uint8Array {\n\treturn randomBytes(size);\n}\n\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n\treturn Buffer.from(bytes)\n\t\t.toString(\"base64\")\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/g, \"\");\n}\n\nexport interface GenerateApiKeyOptions {\n\t/** Entropy bytes before encoding. Default 32. */\n\tbytes?: number;\n\t/** Prefix applied to the secret. Default empty. */\n\tprefix?: string;\n}\n\nexport interface GeneratedApiKey {\n\t/** Full secret including prefix. */\n\tkey: string;\n\tprefix: string;\n\t/** Secret portion without prefix. */\n\tsecret: string;\n}\n\n/**\n * Generate a cryptographically strong offline secret.\n *\n * Format: `{prefix}{base64url(randomBytes)}`. Default prefix is empty so the\n * value is not mistaken for a store-backed `ath_<publicId>.<secret>` key.\n */\nexport function generateApiKey(\n\toptions: GenerateApiKeyOptions = {},\n): GeneratedApiKey {\n\tconst bytes = options.bytes ?? DEFAULT_BYTES;\n\tif (!Number.isInteger(bytes) || bytes < 16 || bytes > 64) {\n\t\tthrow new Error(\"--bytes must be an integer between 16 and 64.\");\n\t}\n\n\tconst prefix =\n\t\toptions.prefix === undefined ? DEFAULT_PREFIX : String(options.prefix);\n\tconst secret = bytesToBase64Url(getRandomBytes(bytes));\n\treturn {\n\t\tkey: `${prefix}${secret}`,\n\t\tprefix,\n\t\tsecret,\n\t};\n}\n\nexport interface WriteApiKeyToEnvOptions {\n\t/** Absolute or cwd-relative env file path. Default `.env.local`. */\n\tfilePath?: string;\n\tcwd?: string;\n\t/** Env key to set. Default `ATHENA_KEY_12`. */\n\tenvKey?: string;\n\t/** Generated or provided key value. */\n\tkey: string;\n\t/** Overwrite when the key already exists. Default false. */\n\tforce?: boolean;\n}\n\nexport interface WriteApiKeyToEnvResult {\n\tabsolutePath: string;\n\taction: \"created\" | \"updated\" | \"unchanged\";\n\tenvKey: string;\n\tpreviousPresent: boolean;\n}\n\n/**\n * Upsert an API key into a dotenv file without clobbering other keys.\n */\nexport function writeApiKeyToEnvFile(\n\toptions: WriteApiKeyToEnvOptions,\n): WriteApiKeyToEnvResult {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst relative = options.filePath ?? \".env.local\";\n\tconst absolutePath = resolve(cwd, relative);\n\tconst envKey = options.envKey ?? GENERATE_DEFAULT_ENV_KEY;\n\tconst force = options.force === true;\n\tconst lineValue = options.key.includes(\" \")\n\t\t? `\"${options.key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n\t\t: options.key;\n\tconst assignment = `${envKey}=${lineValue}`;\n\n\tif (!existsSync(absolutePath)) {\n\t\tconst body = `# Generated by athena-js api-key generate (static admin secret)\\n${assignment}\\n`;\n\t\twriteFileSync(absolutePath, body, \"utf8\");\n\t\treturn {\n\t\t\tabsolutePath,\n\t\t\taction: \"created\",\n\t\t\tenvKey,\n\t\t\tpreviousPresent: false,\n\t\t};\n\t}\n\n\tconst original = readFileSync(absolutePath, \"utf8\");\n\tconst lines = original.split(/\\r?\\n/);\n\tlet previousPresent = false;\n\tlet replaced = false;\n\tlet existingValue: string | undefined;\n\tconst nextLines = lines.map((line) => {\n\t\tconst parsed = parseEnvLine(line);\n\t\tif (!parsed || parsed[0] !== envKey) {\n\t\t\treturn line;\n\t\t}\n\t\tpreviousPresent = true;\n\t\texistingValue = parsed[1];\n\t\tif (parsed[1] === options.key) {\n\t\t\treturn line;\n\t\t}\n\t\tif (!force) {\n\t\t\treturn line;\n\t\t}\n\t\treplaced = true;\n\t\t// Preserve export prefix if present.\n\t\tif (/^\\s*export\\s+/.test(line)) {\n\t\t\treturn `export ${assignment}`;\n\t\t}\n\t\treturn assignment;\n\t});\n\n\tif (previousPresent && !replaced) {\n\t\tif (existingValue === options.key) {\n\t\t\treturn {\n\t\t\t\tabsolutePath,\n\t\t\t\taction: \"unchanged\",\n\t\t\t\tenvKey,\n\t\t\t\tpreviousPresent: true,\n\t\t\t};\n\t\t}\n\t\tthrow new Error(\n\t\t\t`${envKey} already set in ${relative}. Re-run with --force to overwrite.`,\n\t\t);\n\t}\n\n\tif (!previousPresent) {\n\t\tconst needsNewline =\n\t\t\toriginal.length > 0 &&\n\t\t\t!original.endsWith(\"\\n\") &&\n\t\t\t!original.endsWith(\"\\r\");\n\t\tconst suffix = `${needsNewline ? \"\\n\" : \"\"}${assignment}\\n`;\n\t\twriteFileSync(absolutePath, `${original}${suffix}`, \"utf8\");\n\t\treturn {\n\t\t\tabsolutePath,\n\t\t\taction: \"updated\",\n\t\t\tenvKey,\n\t\t\tpreviousPresent: false,\n\t\t};\n\t}\n\n\twriteFileSync(absolutePath, `${nextLines.join(\"\\n\")}`, \"utf8\");\n\treturn {\n\t\tabsolutePath,\n\t\taction: \"updated\",\n\t\tenvKey,\n\t\tpreviousPresent: true,\n\t};\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type { CliCommand } from \"../../types.ts\";\nimport { parse, run, usage } from \"./index.ts\";\n\nfunction adapt(\n\tpath: readonly string[],\n\tlegacy: CliCommand[\"command\"],\n\tprefix: string[] = [],\n) {\n\treturn defineCommand({\n\t\tpath,\n\t\tlegacy,\n\t\tparse: (rest) => parse([...prefix, ...rest]),\n\t\trun: (ctx: CommandContext, parsed: CliCommand) => run(ctx, parsed as never),\n\t\tusage,\n\t});\n}\n\nexport const authCommands = [\n\tadapt([\"auth\"], \"auth\"),\n\tadapt([\"auth\", \"status\"], \"auth-status\", [\"status\"]),\n\tadapt([\"auth\", \"doctor\"], \"auth-doctor\", [\"doctor\"]),\n\tadapt([\"auth\", \"capabilities\"], \"auth-capabilities\", [\"capabilities\"]),\n\tadapt([\"auth\", \"audit\"], \"auth-audit\", [\"audit\"]),\n\tadapt([\"auth\", \"traces\"], \"auth-traces\", [\"traces\"]),\n];\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n\tencodeCliJsonSuccess,\n\texitCodeForError,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type {\n\tAuthAuditCommand,\n\tAuthCapabilitiesCommand,\n\tAuthDoctorCommand,\n\tAuthStatusCommand,\n\tAuthTracesCommand,\n\tCliCommand,\n} from \"../../types.ts\";\nimport {\n\tbuildAuthCapabilityMatrix,\n\tformatAuthCapabilityMatrix,\n} from \"./capabilities-report.ts\";\nimport {\n\tinspectLocalAuthStatus,\n\tqueryLocalAuthAudit,\n\tqueryLocalAuthTraces,\n} from \"./inspect-local.ts\";\nimport {\n\tbuildAuthStatusReport,\n\tformatAuthStatusText,\n} from \"./status-report.ts\";\n\nexport { authCatalog, authCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"auth\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tconst head = rest[0];\n\tif (\n\t\thead === undefined ||\n\t\thead === \"help\" ||\n\t\thead === \"--help\" ||\n\t\thead === \"-h\"\n\t) {\n\t\treturn { command: \"auth\" };\n\t}\n\tif (head === \"status\") {\n\t\treturn parseFlagCommand(\"auth-status\", rest.slice(1));\n\t}\n\tif (head === \"doctor\") {\n\t\treturn parseFlagCommand(\"auth-doctor\", rest.slice(1));\n\t}\n\tif (head === \"capabilities\") {\n\t\treturn parseFlagCommand(\"auth-capabilities\", rest.slice(1));\n\t}\n\tif (head === \"audit\") {\n\t\treturn parseObservability(\"auth-audit\", rest.slice(1));\n\t}\n\tif (head === \"traces\") {\n\t\treturn parseObservability(\"auth-traces\", rest.slice(1));\n\t}\n\tthrow unknownOptionError(head, \"auth\");\n}\n\nfunction parseFlagCommand(\n\tcommand: \"auth-status\" | \"auth-doctor\" | \"auth-capabilities\",\n\trest: readonly string[],\n): CliCommand {\n\tlet json = false;\n\tlet strict = false;\n\tfor (const token of rest) {\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"auth\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--strict\" && command === \"auth-doctor\") {\n\t\t\tstrict = true;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, command.replace(\"-\", \" \"));\n\t}\n\tif (command === \"auth-doctor\") {\n\t\treturn { command, json, strict };\n\t}\n\treturn { command, json };\n}\n\nfunction parseObservability(\n\tcommand: \"auth-audit\" | \"auth-traces\",\n\trest: readonly string[],\n): CliCommand {\n\tlet json = false;\n\tlet errors = false;\n\tlet limit = 20;\n\tlet action: \"list\" | \"show\" = \"list\";\n\tlet target: string | undefined;\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"auth\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--errors\") {\n\t\t\terrors = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--limit\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --limit option.\");\n\t\t\t}\n\t\t\tlimit = Number(nextValue);\n\t\t\tif (!Number.isInteger(limit) || limit < 1) {\n\t\t\t\tthrow new Error(`Invalid --limit value \"${nextValue}\".`);\n\t\t\t}\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"list\" || token === \"show\") {\n\t\t\taction = token;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token && !token.startsWith(\"-\") && !target) {\n\t\t\taction = \"show\";\n\t\t\ttarget = token;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", command.replace(\"-\", \" \"));\n\t}\n\treturn { command, action, errors, json, limit, target };\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"auth\");\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: { json?: boolean }): boolean {\n\treturn ctx.output === \"json\" || parsed.json === true;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed:\n\t\t| AuthStatusCommand\n\t\t| AuthDoctorCommand\n\t\t| AuthCapabilitiesCommand\n\t\t| AuthAuditCommand\n\t\t| AuthTracesCommand\n\t\t| { command: \"auth\" },\n): Promise<void> {\n\ttry {\n\t\tif (parsed.command === \"auth\") {\n\t\t\tctx.logRaw(usage());\n\t\t\treturn;\n\t\t}\n\t\tconst json = wantsJson(ctx, parsed);\n\t\tif (parsed.command === \"auth-capabilities\") {\n\t\t\tconst rows = buildAuthCapabilityMatrix();\n\t\t\tif (json) {\n\t\t\t\tctx.log(\n\t\t\t\t\tstringifyCliJson(\n\t\t\t\t\t\tencodeCliJsonSuccess(\"auth.capabilities\", { rows }),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tctx.logRaw(formatAuthCapabilityMatrix(rows, ctx.capabilities));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tparsed.command === \"auth-status\" ||\n\t\t\tparsed.command === \"auth-doctor\"\n\t\t) {\n\t\t\tconst facts = ctx.runtime.inspectAuthStatus\n\t\t\t\t? await ctx.runtime.inspectAuthStatus({ cwd: ctx.cwd })\n\t\t\t\t: await inspectLocalAuthStatus({\n\t\t\t\t\t\tconfigPath: ctx.globals.configPath,\n\t\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\t});\n\t\t\tconst status = buildAuthStatusReport(facts);\n\t\t\tif (json) {\n\t\t\t\tctx.log(\n\t\t\t\t\tstringifyCliJson(\n\t\t\t\t\t\tencodeCliJsonSuccess(\n\t\t\t\t\t\t\tparsed.command === \"auth-doctor\" ? \"auth.doctor\" : \"auth.status\",\n\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tctx.logRaw(formatAuthStatusText(status, ctx.capabilities));\n\t\t\t}\n\t\t\tif (parsed.command === \"auth-doctor\" && !status.ok) {\n\t\t\t\tsetCliExitCode(CliExitCode.Validation);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (parsed.command === \"auth-audit\") {\n\t\t\tconst query = ctx.runtime.queryAuthAudit ?? queryLocalAuthAudit;\n\t\t\tconst rows = await query({\n\t\t\t\taction: parsed.action,\n\t\t\t\tconfigPath: ctx.globals.configPath,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tlimit: parsed.limit,\n\t\t\t\ttarget: parsed.target,\n\t\t\t});\n\t\t\tif (json) {\n\t\t\t\tctx.log(\n\t\t\t\t\tstringifyCliJson(encodeCliJsonSuccess(\"auth.audit\", { rows })),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tctx.log(`${row.at}  ${row.event}  ${row.actor ?? \"\"}`.trimEnd());\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst query = ctx.runtime.queryAuthTraces ?? queryLocalAuthTraces;\n\t\tconst rows = await query({\n\t\t\taction: parsed.action,\n\t\t\tconfigPath: ctx.globals.configPath,\n\t\t\tcwd: ctx.cwd,\n\t\t\terrorsOnly: parsed.errors,\n\t\t\tlimit: parsed.limit,\n\t\t\ttarget: parsed.target,\n\t\t});\n\t\tif (json) {\n\t\t\tctx.log(\n\t\t\t\tstringifyCliJson(encodeCliJsonSuccess(\"auth.traces\", { rows })),\n\t\t\t);\n\t\t} else {\n\t\t\tfor (const row of rows) {\n\t\t\t\tctx.log(\n\t\t\t\t\t`${row.method} ${row.path}  ${row.statusCode ?? \"\"} · ${row.totalMs ?? \"?\"}ms`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import { ATHENA_AUTH_SCHEMA_GENERATION } from \"../../../auth/contract/index.ts\";\nimport { ATHENA_AUTH_OPERATIONS } from \"../../../auth/contract/operations.generated.ts\";\nimport type { AthenaAuthOperationDefinition } from \"../../../auth/contract/operations.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { paint } from \"../../ui/colors.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\n\nexport type AuthRuntimeSupportMark = \"yes\" | \"partial\" | \"no\";\n\nexport interface AuthCapabilityRow {\n\tcapability: string;\n\tembedded: AuthRuntimeSupportMark;\n\trust: AuthRuntimeSupportMark;\n}\n\nconst CAPABILITY_ORDER = [\n\t\"password\",\n\t\"organizations\",\n\t\"invitations\",\n\t\"apiKeys\",\n\t\"twoFactor\",\n\t\"passkeys\",\n\t\"social\",\n\t\"jwt\",\n\t\"oidc\",\n] as const;\n\nfunction mark(\n\toperations: readonly AthenaAuthOperationDefinition[],\n\tside: \"rust\" | \"embedded\",\n): AuthRuntimeSupportMark {\n\tconst portable = operations.filter(\n\t\t(operation) => operation.nonportable !== true,\n\t);\n\tif (portable.length === 0) {\n\t\treturn \"no\";\n\t}\n\tconst supported = portable.filter(\n\t\t(operation) => operation[side] === \"supported\",\n\t);\n\tif (supported.length === portable.length) {\n\t\treturn \"yes\";\n\t}\n\tif (supported.length === 0) {\n\t\treturn \"no\";\n\t}\n\treturn \"partial\";\n}\n\nexport function buildAuthCapabilityMatrix(\n\toperations: readonly AthenaAuthOperationDefinition[] = ATHENA_AUTH_OPERATIONS,\n): AuthCapabilityRow[] {\n\tconst seen = new Set<string>();\n\tconst rows: AuthCapabilityRow[] = [];\n\tconst ordered = [\n\t\t...CAPABILITY_ORDER,\n\t\t...operations.map((operation) => operation.capability),\n\t];\n\tfor (const capability of ordered) {\n\t\tif (seen.has(capability)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(capability);\n\t\tconst subset = operations.filter(\n\t\t\t(operation) => operation.capability === capability,\n\t\t);\n\t\tif (subset.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\trows.push({\n\t\t\tcapability,\n\t\t\tembedded: mark(subset, \"embedded\"),\n\t\t\trust: mark(subset, \"rust\"),\n\t\t});\n\t}\n\treturn rows;\n}\n\nfunction glyph(value: AuthRuntimeSupportMark): string {\n\tif (value === \"yes\") {\n\t\treturn \"✓\";\n\t}\n\tif (value === \"partial\") {\n\t\treturn \"partial\";\n\t}\n\treturn \"no\";\n}\n\nfunction markColor(\n\tvalue: AuthRuntimeSupportMark,\n): \"green\" | \"yellow\" | \"dim\" {\n\tif (value === \"yes\") {\n\t\treturn \"green\";\n\t}\n\tif (value === \"partial\") {\n\t\treturn \"yellow\";\n\t}\n\treturn \"dim\";\n}\n\nexport function formatAuthCapabilityMatrix(\n\trows: readonly AuthCapabilityRow[] = buildAuthCapabilityMatrix(),\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n\toptions: { framed?: boolean } = {},\n): string {\n\tconst lines = [\n\t\tpaint(\"Athena Auth capabilities\", \"bold\", capabilities),\n\t\t\"\",\n\t\t`${paint(\"Embedded schema generation\", \"dim\", capabilities)}  ${paint(String(ATHENA_AUTH_SCHEMA_GENERATION), \"cyan\", capabilities)}`,\n\t\t\"\",\n\t\tpaint(\"Capability          Embedded       Rust\", \"dim\", capabilities),\n\t];\n\tfor (const row of rows) {\n\t\tconst name = row.capability.padEnd(19);\n\t\tconst embedded = paint(\n\t\t\tglyph(row.embedded).padEnd(14),\n\t\t\tmarkColor(row.embedded),\n\t\t\tcapabilities,\n\t\t);\n\t\tconst rust = paint(glyph(row.rust), markColor(row.rust), capabilities);\n\t\tlines.push(`${name} ${embedded} ${rust}`);\n\t}\n\tconst body = `${lines.join(\"\\n\")}\\n`;\n\tif (options.framed === false) {\n\t\treturn body;\n\t}\n\treturn `${frameBlock(body.trimEnd(), capabilities)}\\n`;\n}\n","import {\n\ttype AthenaAuthDatabase,\n\tcreatePostgresAuthDatabase,\n} from \"../../../auth/local/database.ts\";\nimport { planAthenaAuthSchema } from \"../../../auth/local/schema.ts\";\nimport { loadGeneratorConfig } from \"../../../generator/config.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport {\n\tdatabaseLabel,\n\tproviderLabel,\n} from \"../../../migrations/application/authority.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport type { AuthAuditRow, AuthTraceRow } from \"../../types.ts\";\nimport type { AuthStatusFacts } from \"./status-report.ts\";\n\nexport interface LocalAuthInspectOptions {\n\tconfigPath?: string;\n\tcwd?: string;\n}\n\ninterface DirectAuthConnection {\n\tconnectionString: string;\n\tdatabaseLabel: string;\n\tproviderLabel: string;\n}\n\nasync function resolveDirectAuthConnection(\n\toptions: LocalAuthInspectOptions,\n): Promise<DirectAuthConnection> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst loaded = await loadGeneratorConfig({\n\t\tconfigPath: options.configPath,\n\t\tcwd,\n\t});\n\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\tapplyProjectEnv: false,\n\t\tcwd,\n\t\tloaded,\n\t\tmode: \"direct\",\n\t});\n\tconst config = {\n\t\t...loaded.config,\n\t\tprovider: authority.provider,\n\t};\n\tauthority.restoreEnv();\n\tconst { provider } = config;\n\tif (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n\t\tthrow new AthenaCliError({\n\t\t\tcode: \"AUTH001\",\n\t\t\texitCode: CliExitCode.Runtime,\n\t\t\tmessage: `Embedded Auth CLI requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n\t\t\thint: \"Use the same athena.config.ts / DATABASE_URL that `athena-js migrate` uses.\",\n\t\t});\n\t}\n\tif (!provider.connectionString) {\n\t\tthrow new AthenaCliError({\n\t\t\tcode: \"AUTH001\",\n\t\t\texitCode: CliExitCode.Runtime,\n\t\t\tmessage: \"auth commands require a reachable Embedded Auth database.\",\n\t\t\thint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n\t\t});\n\t}\n\treturn {\n\t\tconnectionString: provider.connectionString,\n\t\tdatabaseLabel: databaseLabel(config),\n\t\tproviderLabel: providerLabel(config),\n\t};\n}\n\nasync function tableExists(\n\tdatabase: { query: AthenaAuthDatabase[\"query\"] },\n\tqualified: string,\n): Promise<boolean> {\n\tconst result = await database.query(\"SELECT to_regclass($1) AS name\", [\n\t\tqualified,\n\t]);\n\tconst name = result.rows[0]?.name;\n\treturn typeof name === \"string\" && name.length > 0;\n}\n\nexport async function inspectLocalAuthStatus(\n\toptions: LocalAuthInspectOptions = {},\n): Promise<AuthStatusFacts> {\n\tconst connection = await resolveDirectAuthConnection(options);\n\tconst database = await createPostgresAuthDatabase(connection.connectionString);\n\ttry {\n\t\tconst plan = await planAthenaAuthSchema(database, { inspectSchema: false });\n\t\tconst applied = plan.entries.filter((entry) => entry.action !== \"apply\");\n\t\tconst currentGeneration =\n\t\t\tapplied.length === 0\n\t\t\t\t? null\n\t\t\t\t: Math.max(...applied.map((entry) => entry.version));\n\t\tconst auditLog = await tableExists(database, \"athena.audit_log_auth\");\n\t\tconst traces = await tableExists(database, \"athena.traces_auth\");\n\t\treturn {\n\t\t\tauditLog,\n\t\t\tcurrentGeneration,\n\t\t\tdatabaseLabel: connection.databaseLabel,\n\t\t\tmode: \"embedded\",\n\t\t\tproviderLabel: connection.providerLabel,\n\t\t\ttraces,\n\t\t};\n\t} finally {\n\t\tawait database.close?.();\n\t}\n}\n\nexport async function queryLocalAuthAudit(\n\toptions: LocalAuthInspectOptions & {\n\t\taction: \"list\" | \"show\";\n\t\tlimit: number;\n\t\ttarget?: string;\n\t},\n): Promise<AuthAuditRow[]> {\n\tconst connection = await resolveDirectAuthConnection(options);\n\tconst database = await createPostgresAuthDatabase(connection.connectionString);\n\ttry {\n\t\tif (!(await tableExists(database, \"athena.audit_log_auth\"))) {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"AUTH001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\tmessage: \"auth audit requires table athena.audit_log_auth.\",\n\t\t\t\thint: \"Run `athena-js migrate` so Embedded Auth generation 023+ is applied.\",\n\t\t\t});\n\t\t}\n\t\tconst result = options.target\n\t\t\t? await database.query<{\n\t\t\t\t\tactor_user_id: string | null;\n\t\t\t\t\tcreated_at: Date | string;\n\t\t\t\t\tevent: string;\n\t\t\t\t\tid: string;\n\t\t\t\t}>(\n\t\t\t\t\t`\nSELECT id, event, actor_user_id, created_at\nFROM athena.audit_log_auth\nWHERE id = $1 OR event_id = $1\nLIMIT 1\n`,\n\t\t\t\t\t[options.target],\n\t\t\t\t)\n\t\t\t: await database.query<{\n\t\t\t\t\tactor_user_id: string | null;\n\t\t\t\t\tcreated_at: Date | string;\n\t\t\t\t\tevent: string;\n\t\t\t\t\tid: string;\n\t\t\t\t}>(\n\t\t\t\t\t`\nSELECT id, event, actor_user_id, created_at\nFROM athena.audit_log_auth\nORDER BY created_at DESC\nLIMIT $1\n`,\n\t\t\t\t\t[options.limit],\n\t\t\t\t);\n\t\treturn result.rows.map((row) => ({\n\t\t\tactor: row.actor_user_id ?? undefined,\n\t\t\tat:\n\t\t\t\trow.created_at instanceof Date\n\t\t\t\t\t? row.created_at.toISOString()\n\t\t\t\t\t: String(row.created_at),\n\t\t\tevent: row.event,\n\t\t\tid: row.id,\n\t\t}));\n\t} finally {\n\t\tawait database.close?.();\n\t}\n}\n\nexport async function queryLocalAuthTraces(\n\toptions: LocalAuthInspectOptions & {\n\t\taction: \"list\" | \"show\";\n\t\terrorsOnly: boolean;\n\t\tlimit: number;\n\t\ttarget?: string;\n\t},\n): Promise<AuthTraceRow[]> {\n\tconst connection = await resolveDirectAuthConnection(options);\n\tconst database = await createPostgresAuthDatabase(connection.connectionString);\n\ttry {\n\t\tif (!(await tableExists(database, \"athena.traces_auth\"))) {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"AUTH002\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\tmessage: \"auth traces requires table athena.traces_auth.\",\n\t\t\t\thint: \"Run `athena-js migrate` so Embedded Auth observability is applied.\",\n\t\t\t});\n\t\t}\n\t\tconst result = options.target\n\t\t\t? await database.query<{\n\t\t\t\t\tmethod: string;\n\t\t\t\t\tpath: string;\n\t\t\t\t\tstatus_code: number | null;\n\t\t\t\t\ttotal_ms: number | null;\n\t\t\t\t\ttrace_id: string | null;\n\t\t\t\t}>(\n\t\t\t\t\t`\nSELECT method, path, status_code, total_ms, trace_id\nFROM athena.traces_auth\nWHERE id = $1 OR trace_id = $1\nLIMIT 1\n`,\n\t\t\t\t\t[options.target],\n\t\t\t\t)\n\t\t\t: await database.query<{\n\t\t\t\t\tmethod: string;\n\t\t\t\t\tpath: string;\n\t\t\t\t\tstatus_code: number | null;\n\t\t\t\t\ttotal_ms: number | null;\n\t\t\t\t\ttrace_id: string | null;\n\t\t\t\t}>(\n\t\t\t\t\toptions.errorsOnly\n\t\t\t\t\t\t? `\nSELECT method, path, status_code, total_ms, trace_id\nFROM athena.traces_auth\nWHERE outcome <> 'success' OR COALESCE(status_code, 0) >= 400\nORDER BY started_at DESC\nLIMIT $1\n`\n\t\t\t\t\t\t: `\nSELECT method, path, status_code, total_ms, trace_id\nFROM athena.traces_auth\nORDER BY started_at DESC\nLIMIT $1\n`,\n\t\t\t\t\t[options.limit],\n\t\t\t\t);\n\t\treturn result.rows.map((row) => ({\n\t\t\tmethod: row.method,\n\t\t\tpath: row.path,\n\t\t\tstatusCode: row.status_code ?? undefined,\n\t\t\ttotalMs: row.total_ms ?? undefined,\n\t\t\ttraceId: row.trace_id ?? undefined,\n\t\t}));\n\t} finally {\n\t\tawait database.close?.();\n\t}\n}\n","import { ATHENA_AUTH_SCHEMA_GENERATION } from \"../../../auth/contract/index.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { paint } from \"../../ui/colors.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\nimport {\n\ttype AuthCapabilityRow,\n\tbuildAuthCapabilityMatrix,\n\tformatAuthCapabilityMatrix,\n} from \"./capabilities-report.ts\";\n\nexport interface AuthStatusFacts {\n\tauditLog?: boolean;\n\tcurrentGeneration?: number | null;\n\tdatabaseLabel?: string;\n\tmode?: \"embedded\" | \"remote\" | \"unknown\";\n\tproviderLabel?: string;\n\ttraces?: boolean;\n}\n\nexport interface AuthStatusReport {\n\tcapabilities: AuthCapabilityRow[];\n\tcurrentGeneration: number | null;\n\tdatabaseLabel?: string;\n\texpectedGeneration: number;\n\tmode: \"embedded\" | \"remote\" | \"unknown\";\n\tok: boolean;\n\tproviderLabel?: string;\n\tobservability: {\n\t\tauditLog: boolean | \"unknown\";\n\t\ttraces: boolean | \"unknown\";\n\t};\n}\n\nexport function buildAuthStatusReport(\n\tfacts: AuthStatusFacts = {},\n): AuthStatusReport {\n\tconst current =\n\t\tfacts.currentGeneration === undefined ? null : facts.currentGeneration;\n\tconst generationOk =\n\t\tcurrent == null || current === ATHENA_AUTH_SCHEMA_GENERATION;\n\treturn {\n\t\tcapabilities: buildAuthCapabilityMatrix(),\n\t\tcurrentGeneration: current,\n\t\tdatabaseLabel: facts.databaseLabel,\n\t\texpectedGeneration: ATHENA_AUTH_SCHEMA_GENERATION,\n\t\tmode: facts.mode ?? \"unknown\",\n\t\tok: generationOk,\n\t\tproviderLabel: facts.providerLabel,\n\t\tobservability: {\n\t\t\tauditLog: facts.auditLog ?? \"unknown\",\n\t\t\ttraces: facts.traces ?? \"unknown\",\n\t\t},\n\t};\n}\n\nfunction obs(\n\tvalue: boolean | \"unknown\",\n\tcapabilities: CliCapabilities,\n): string {\n\tif (value === true) {\n\t\treturn paint(\"✓\", \"green\", capabilities);\n\t}\n\tif (value === false) {\n\t\treturn paint(\"missing\", \"red\", capabilities);\n\t}\n\treturn paint(\"unknown\", \"dim\", capabilities);\n}\n\nfunction modeColor(\n\tmode: AuthStatusReport[\"mode\"],\n): \"green\" | \"cyan\" | \"yellow\" {\n\tif (mode === \"embedded\") {\n\t\treturn \"green\";\n\t}\n\tif (mode === \"remote\") {\n\t\treturn \"cyan\";\n\t}\n\treturn \"yellow\";\n}\n\nexport function formatAuthStatusText(\n\treport: AuthStatusReport,\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n): string {\n\tconst generationValue = report.currentGeneration ?? \"n/a\";\n\tconst generationColor =\n\t\treport.currentGeneration == null\n\t\t\t? \"yellow\"\n\t\t\t: report.ok\n\t\t\t\t? \"green\"\n\t\t\t\t: \"red\";\n\tconst label = (text: string) => paint(text.padEnd(18), \"dim\", capabilities);\n\tconst lines = [\n\t\tpaint(\"Athena Auth status\", \"bold\", capabilities),\n\t\t\"\",\n\t\t`${label(\"Mode\")}${paint(report.mode, modeColor(report.mode), capabilities)}`,\n\t];\n\tif (report.providerLabel) {\n\t\tlines.push(`${label(\"Database\")}${report.providerLabel}`);\n\t}\n\tif (report.databaseLabel) {\n\t\tlines.push(`${label(\"Target\")}${report.databaseLabel}`);\n\t}\n\tlines.push(\n\t\t`${label(\"Schema generation\")}${paint(String(generationValue), generationColor, capabilities)} ${paint(`(expected ${report.expectedGeneration})`, \"dim\", capabilities)}`,\n\t\t\"\",\n\t\tformatAuthCapabilityMatrix(report.capabilities, capabilities, {\n\t\t\tframed: false,\n\t\t}).trimEnd(),\n\t\t\"\",\n\t\tpaint(\"Observability\", \"bold\", capabilities),\n\t\t`  ${paint(\"audit_log_auth\", \"dim\", capabilities)}  ${obs(report.observability.auditLog, capabilities)}`,\n\t\t`  ${paint(\"traces_auth\", \"dim\", capabilities)}     ${obs(report.observability.traces, capabilities)}`,\n\t);\n\treturn `${frameBlock(lines.join(\"\\n\"), capabilities)}\\n`;\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n\ttype CommandsListFormat,\n\tformatCatalogTopicUsage,\n\tformatCommandsCatalog,\n} from \"../../commands-catalog.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, CommandsCommand } from \"../../types.ts\";\n\nexport { commandsCatalog, commandsCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\n\t\"--commands\",\n\t\"--list-commands\",\n\t\"--cmds\",\n\t\"-C\",\n\t\"commands\",\n\t\"list-commands\",\n\t\"cmds\",\n];\n\nfunction parseCommandsFormat(rest: string[]): CommandsListFormat {\n\tlet format: CommandsListFormat = \"full\";\n\tfor (const token of rest) {\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tformat = \"json\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--plain\") {\n\t\t\tformat = \"plain\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--groups\") {\n\t\t\tformat = \"groups\";\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"commands\");\n\t}\n\treturn format;\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tif (rest.includes(\"--help\") || rest.includes(\"-h\")) {\n\t\treturn { command: \"help\", topic: \"commands\" };\n\t}\n\treturn {\n\t\tcommand: \"commands\",\n\t\tformat: parseCommandsFormat(rest),\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"commands\");\n}\n\nexport function sessionTitle(_parsed: CommandsCommand): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: CommandsCommand,\n): Promise<void> {\n\tctx.logRaw(\n\t\tformatCommandsCatalog({\n\t\t\tcapabilities: ctx.capabilities,\n\t\t\tformat: parsed.format,\n\t\t}),\n\t);\n}\n","import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { PACKAGE_VERSION } from \"../../../sdk-version.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { redactValue } from \"../../logging/redact.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport {\n\tencodeCliJsonSuccess,\n\texitCodeForError,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { CliCommand, DoctorBundleCommand } from \"../../types.ts\";\nimport { runCliDoctor } from \"./doctor.ts\";\n\nexport function parseDoctorBundle(rest: readonly string[]): CliCommand {\n\tlet json = false;\n\tlet outDir: string | undefined;\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"doctor\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--out\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --out option.\");\n\t\t\t}\n\t\t\toutDir = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"doctor bundle\");\n\t}\n\treturn { command: \"doctor-bundle\", json, outDir };\n}\n\nfunction stamp(): string {\n\treturn new Date().toISOString().replace(/[:.]/g, \"\").slice(0, 15);\n}\n\nexport async function runDoctorBundle(\n\tctx: CommandContext,\n\tparsed: DoctorBundleCommand,\n): Promise<void> {\n\ttry {\n\t\tconst doctor =\n\t\t\tctx.runtime.runCliDoctor ??\n\t\t\t((options: Parameters<typeof runCliDoctor>[0]) => runCliDoctor(options));\n\t\tconst report = await doctor({\n\t\t\tcwd: ctx.cwd,\n\t\t\tjson: true,\n\t\t\tplain: true,\n\t\t\tskipRuntime: false,\n\t\t\tstrict: false,\n\t\t});\n\t\tconst files: Record<string, unknown> = {\n\t\t\t\"cli-version.txt\": PACKAGE_VERSION,\n\t\t\t\"doctor.json\": report,\n\t\t\t\"environment-summary.json\": {\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tnode: process.version,\n\t\t\t\tplatform: process.platform,\n\t\t\t},\n\t\t};\n\t\tif (ctx.runtime.inspectAuthStatus) {\n\t\t\tfiles[\"auth-status.json\"] = await ctx.runtime.inspectAuthStatus({\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t});\n\t\t}\n\t\tif (ctx.runtime.runMigrationVerify) {\n\t\t\tfiles[\"migration-status.json\"] = await ctx.runtime.runMigrationVerify({\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t});\n\t\t}\n\t\tconst sanitized = redactValue(files) as Record<string, unknown>;\n\t\tconst directory = parsed.outDir\n\t\t\t? parsed.outDir\n\t\t\t: join(ctx.cwd, `athena-diagnostics-${stamp()}`);\n\t\tmkdirSync(directory, { recursive: true });\n\t\tfor (const [name, body] of Object.entries(sanitized)) {\n\t\t\tconst content =\n\t\t\t\ttypeof body === \"string\" ? `${body}\\n` : `${JSON.stringify(body, null, 2)}\\n`;\n\t\t\twriteFileSync(join(directory, name), content, \"utf8\");\n\t\t}\n\t\twriteFileSync(\n\t\t\tjoin(directory, \"bundle.json\"),\n\t\t\t`${JSON.stringify(sanitized, null, 2)}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\t\tif (ctx.output === \"json\" || parsed.json) {\n\t\t\tctx.log(\n\t\t\t\tstringifyCliJson(\n\t\t\t\t\tencodeCliJsonSuccess(\"doctor.bundle\", {\n\t\t\t\t\t\tdirectory,\n\t\t\t\t\t\tfiles: Object.keys(sanitized),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tctx.log(`Wrote diagnostic bundle\\n  ${directory}\\n`);\n\t\t\tctx.log(\"Secrets (passwords, API keys, tokens) are redacted.\");\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n\nexport const doctorBundleCommand = defineCommand({\n\tpath: [\"doctor\", \"bundle\"],\n\tlegacy: \"doctor-bundle\",\n\tparse: (rest) => parseDoctorBundle(rest),\n\trun: (ctx, parsed) =>\n\t\trunDoctorBundle(ctx, parsed as DoctorBundleCommand),\n\tusage: () => formatCatalogTopicUsage(\"doctor\"),\n});\n","export function redactSecrets(input: string): string {\n  let output = input;\n  // postgresql://user:password@host → keep user, mask password\n  output = output.replace(\n    /(postgres(?:ql)?:\\/\\/[^:/\\s]+):([^@/\\s]+)@/gi,\n    \"$1:***@\"\n  );\n  output = output.replace(/(authorization\\s*:\\s*bearer\\s+)\\S+/gi, \"$1***\");\n  output = output.replace(/(ATHENA_API_KEY\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  output = output.replace(/(api[_-]?key\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  output = output.replace(/(cookie\\s*[=:]\\s*)[^\\n;]+/gi, \"$1***\");\n  output = output.replace(/(password\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  output = output.replace(/(secret\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  // Keys/fields: bridgeCode, bridge_code, bridge-code\n  output = output.replace(/(bridge[_-]?code\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  output = output.replace(/(session[_-]?token\\s*[=:]\\s*)\\S+/gi, \"$1***\");\n  return output;\n}\n\nexport function redactValue(value: unknown): unknown {\n  if (typeof value === \"string\") {\n    return redactSecrets(value);\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => redactValue(item));\n  }\n  if (value && typeof value === \"object\") {\n    const out: Record<string, unknown> = {};\n    for (const [key, nested] of Object.entries(value)) {\n      if (\n        /password|secret|token|authorization|cookie|api.?key|bridge[_-]?code|session[_-]?token|^code$/i.test(\n          key\n        )\n      ) {\n        out[key] = \"***\";\n      } else {\n        out[key] = redactValue(nested);\n      }\n    }\n    return out;\n  }\n  return value;\n}\n","/**\n * Project health check for the athena-js CLI (`athena-js doctor`).\n *\n * Aggregates tooling, config, env, and optional local Data Runtime inspect.\n * Read-only: never writes config or applies migrations.\n */\nimport { existsSync } from \"node:fs\";\nimport { relative, resolve } from \"node:path\";\nimport { findGeneratorConfigPath, loadAthenaConfig } from \"../../../generator/config.ts\";\nimport { PACKAGE_VERSION } from \"../../../sdk-version.ts\";\nimport {\n\tformatModuleEnablement,\n\tresolveAthenaJsPackageRoot,\n} from \"../../identity.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { paint } from \"../../ui/colors.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\nimport { type EnvCheckResult, validateProjectEnv } from \"../env/project-env.ts\";\nimport {\n\ttype ValidationCheck,\n\ttype ValidationReport,\n\tvalidateLocalRuntime,\n} from \"../validate/validate-local.ts\";\n\nconst MIN_NODE_MAJOR = 18;\n\nexport type DoctorSeverity = \"ok\" | \"warn\" | \"error\" | \"skip\";\nexport type DoctorGroup = \"tooling\" | \"project\" | \"env\" | \"runtime\";\n\nexport interface DoctorCheck {\n\tdetail?: string;\n\tgroup: DoctorGroup;\n\tid: string;\n\tstatus: DoctorSeverity;\n\ttitle: string;\n}\n\nexport interface DoctorReport {\n\tchecks: DoctorCheck[];\n\tcwd: string;\n\terrorCount: number;\n\tok: boolean;\n\tresolvedMode: \"direct\" | \"gateway\" | \"none\";\n\tsdkVersion: string;\n\ttitle: string;\n\twarnCount: number;\n}\n\nexport interface DoctorOptions {\n\tconfigPath?: string;\n\tcwd?: string;\n\tjson?: boolean;\n\tplain?: boolean;\n\tskipRuntime?: boolean;\n\tstrict?: boolean;\n\tvalidateEnv?: typeof validateProjectEnv;\n\tvalidateLocal?: typeof validateLocalRuntime;\n}\n\nfunction nodeMajor(version: string): number {\n\tconst major = Number.parseInt(version.split(\".\")[0] ?? \"0\", 10);\n\treturn Number.isFinite(major) ? major : 0;\n}\n\nfunction displayPath(cwd: string, absolutePath: string): string {\n\tconst rel = relative(cwd, absolutePath);\n\tif (!rel || rel.startsWith(\"..\")) {\n\t\treturn absolutePath;\n\t}\n\treturn rel.replace(/\\\\/g, \"/\");\n}\n\nfunction tag(status: DoctorSeverity, capabilities: CliCapabilities): string {\n\tconst raw =\n\t\tstatus === \"ok\"\n\t\t\t? \"ok  \"\n\t\t\t: status === \"warn\"\n\t\t\t\t? \"warn\"\n\t\t\t\t: status === \"skip\"\n\t\t\t\t\t? \"skip\"\n\t\t\t\t\t: \"err \";\n\tconst color =\n\t\tstatus === \"ok\"\n\t\t\t? \"green\"\n\t\t\t: status === \"warn\"\n\t\t\t\t? \"yellow\"\n\t\t\t\t: status === \"skip\"\n\t\t\t\t\t? \"dim\"\n\t\t\t\t\t: \"red\";\n\treturn paint(raw, color, capabilities);\n}\n\nfunction toDoctorStatus(status: ValidationCheck[\"status\"]): DoctorSeverity {\n\treturn status;\n}\n\nexport function formatDoctorReport(\n\treport: DoctorReport,\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n): string {\n\tconst lines: string[] = [paint(report.title, \"bold\", capabilities), \"\"];\n\tlines.push(\n\t\t`  ${paint(\"SDK        \", \"dim\", capabilities)}${report.sdkVersion}`,\n\t);\n\tlines.push(\n\t\t`  ${paint(\"CLI package\", \"dim\", capabilities)}${resolveAthenaJsPackageRoot()}`,\n\t);\n\tlines.push(`  ${paint(\"cwd        \", \"dim\", capabilities)}${report.cwd}`);\n\tlines.push(\n\t\t`  ${paint(\"mode       \", \"dim\", capabilities)}${report.resolvedMode}`,\n\t);\n\tlines.push(\"\");\n\n\tconst titles: Record<DoctorGroup, string> = {\n\t\tenv: \"Environment\",\n\t\tproject: \"Project\",\n\t\truntime: \"Local runtime\",\n\t\ttooling: \"Tooling\",\n\t};\n\tlet currentGroup: DoctorGroup | undefined;\n\tfor (const check of report.checks) {\n\t\tif (check.group !== currentGroup) {\n\t\t\tif (currentGroup) {\n\t\t\t\tlines.push(\"\");\n\t\t\t}\n\t\t\tcurrentGroup = check.group;\n\t\t\tlines.push(paint(titles[check.group], \"bold\", capabilities));\n\t\t\tlines.push(\"\");\n\t\t}\n\t\tlines.push(`  [${tag(check.status, capabilities)}] ${check.title}`);\n\t\tif (check.detail) {\n\t\t\tfor (const line of check.detail.split(\"\\n\")) {\n\t\t\t\tlines.push(paint(`         ${line}`, \"dim\", capabilities));\n\t\t\t}\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\n\t\tpaint(\n\t\t\t`  ${report.errorCount} error(s) · ${report.warnCount} warning(s)`,\n\t\t\t\"dim\",\n\t\t\tcapabilities,\n\t\t),\n\t);\n\tlines.push(report.ok ? \"result: OK\" : \"result: FAILED\");\n\treturn lines.join(\"\\n\");\n}\n\nfunction pushEnvChecks(checks: DoctorCheck[], env: EnvCheckResult): void {\n\tfor (const field of env.checks) {\n\t\tchecks.push({\n\t\t\tdetail: field.message,\n\t\t\tgroup: \"env\",\n\t\t\tid: `env.${field.field}`,\n\t\t\tstatus: field.severity,\n\t\t\ttitle: field.sourceKey\n\t\t\t\t? `${field.field} (${field.sourceKey})`\n\t\t\t\t: field.field,\n\t\t});\n\t}\n}\n\nfunction pushRuntimeChecks(\n\tchecks: DoctorCheck[],\n\truntime: ValidationReport,\n): void {\n\tfor (const check of runtime.checks) {\n\t\tchecks.push({\n\t\t\tdetail: check.detail,\n\t\t\tgroup: \"runtime\",\n\t\t\tid: `runtime.${check.id}`,\n\t\t\tstatus: toDoctorStatus(check.status),\n\t\t\ttitle: check.title,\n\t\t});\n\t}\n}\n\nexport async function runCliDoctor(\n\toptions: DoctorOptions = {},\n): Promise<DoctorReport> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst checks: DoctorCheck[] = [];\n\tconst runEnv = options.validateEnv ?? validateProjectEnv;\n\tconst runLocal = options.validateLocal ?? validateLocalRuntime;\n\n\tchecks.push({\n\t\tdetail: resolveAthenaJsPackageRoot(),\n\t\tgroup: \"tooling\",\n\t\tid: \"cli.sdk\",\n\t\tstatus: \"ok\",\n\t\ttitle: `@xylex-group/athena ${PACKAGE_VERSION}`,\n\t});\n\n\tconst major = nodeMajor(process.versions.node);\n\tchecks.push({\n\t\tdetail:\n\t\t\tmajor >= MIN_NODE_MAJOR\n\t\t\t\t? `Required: >=${MIN_NODE_MAJOR}.0.0`\n\t\t\t\t: `Athena JS requires Node.js ${MIN_NODE_MAJOR} or newer.`,\n\t\tgroup: \"tooling\",\n\t\tid: \"cli.node\",\n\t\tstatus: major >= MIN_NODE_MAJOR ? \"ok\" : \"error\",\n\t\ttitle: `Node.js ${process.versions.node}`,\n\t});\n\n\tconst configuredPath = options.configPath\n\t\t? resolve(cwd, options.configPath)\n\t\t: findGeneratorConfigPath(cwd);\n\tif (configuredPath && existsSync(configuredPath)) {\n\t\tchecks.push({\n\t\t\tdetail: displayPath(cwd, configuredPath),\n\t\t\tgroup: \"project\",\n\t\t\tid: \"project.config\",\n\t\t\tstatus: \"ok\",\n\t\t\ttitle: \"Generator config found\",\n\t\t});\n\t} else if (options.configPath) {\n\t\tchecks.push({\n\t\t\tdetail: `Missing ${options.configPath}. Pass a real --config path or run athena-js init.`,\n\t\t\tgroup: \"project\",\n\t\t\tid: \"project.config\",\n\t\t\tstatus: \"error\",\n\t\t\ttitle: \"Generator config missing\",\n\t\t});\n\t} else {\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\t\"No athena.config.ts (or compatible file) in cwd. Env-only generate still works; run athena-js init to commit one.\",\n\t\t\tgroup: \"project\",\n\t\t\tid: \"project.config\",\n\t\t\tstatus: \"warn\",\n\t\t\ttitle: \"Generator config not found\",\n\t\t});\n\t}\n\n\tif (configuredPath && existsSync(configuredPath)) {\n\t\ttry {\n\t\t\tconst loaded = await loadAthenaConfig({\n\t\t\t\tconfigPath: configuredPath,\n\t\t\t\tcwd,\n\t\t\t});\n\t\t\tchecks.push({\n\t\t\t\tdetail: formatModuleEnablement(loaded.config.modules).join(\"\\n\"),\n\t\t\t\tgroup: \"project\",\n\t\t\t\tid: \"project.modules\",\n\t\t\t\tstatus: \"ok\",\n\t\t\t\ttitle: \"Packaged migrate modules\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tchecks.push({\n\t\t\t\tdetail:\n\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t: \"Could not load athena.config.ts modules.\",\n\t\t\t\tgroup: \"project\",\n\t\t\t\tid: \"project.modules\",\n\t\t\t\tstatus: \"warn\",\n\t\t\t\ttitle: \"Packaged migrate modules\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst env = runEnv({\n\t\tcwd,\n\t\tmode: \"auto\",\n\t\tstrict: options.strict,\n\t});\n\tpushEnvChecks(checks, env);\n\n\tif (options.skipRuntime) {\n\t\tchecks.push({\n\t\t\tdetail: \"Skipped (--skip-runtime).\",\n\t\t\tgroup: \"runtime\",\n\t\t\tid: \"runtime.inspect\",\n\t\t\tstatus: \"skip\",\n\t\t\ttitle: \"Local runtime inspect\",\n\t\t});\n\t} else if (env.resolvedMode === \"none\") {\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\t\"No DATABASE_URL / ATHENA_URL profile. Set env or config, then re-run doctor.\",\n\t\t\tgroup: \"runtime\",\n\t\t\tid: \"runtime.inspect\",\n\t\t\tstatus: \"skip\",\n\t\t\ttitle: \"Local runtime inspect\",\n\t\t});\n\t} else if (env.resolvedMode === \"gateway\") {\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\t\"Gateway mode: local Data Runtime inspect is skipped. Use generate against the gateway.\",\n\t\t\tgroup: \"runtime\",\n\t\t\tid: \"runtime.inspect\",\n\t\t\tstatus: \"skip\",\n\t\t\ttitle: \"Local runtime inspect\",\n\t\t});\n\t} else {\n\t\ttry {\n\t\t\tconst runtime = await runLocal({\n\t\t\t\tconfigPath: options.configPath,\n\t\t\t\tcwd,\n\t\t\t\tjson: options.json,\n\t\t\t\tplain: options.plain,\n\t\t\t\tstrict: options.strict,\n\t\t\t});\n\t\t\tpushRuntimeChecks(checks, runtime);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: \"Unknown runtime inspect error.\";\n\t\t\tchecks.push({\n\t\t\t\tdetail: message,\n\t\t\t\tgroup: \"runtime\",\n\t\t\t\tid: \"runtime.inspect\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\ttitle: \"Local runtime inspect failed\",\n\t\t\t});\n\t\t}\n\t}\n\n\tconst errorCount = checks.filter((check) => check.status === \"error\").length;\n\tconst warnCount = checks.filter((check) => check.status === \"warn\").length;\n\treturn {\n\t\tchecks,\n\t\tcwd,\n\t\terrorCount,\n\t\tok: errorCount === 0,\n\t\tresolvedMode: env.resolvedMode,\n\t\tsdkVersion: PACKAGE_VERSION,\n\t\ttitle: \"Athena JS · doctor\",\n\t\twarnCount,\n\t};\n}\n","import { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport function resolveAthenaJsPackageRoot(): string {\n\treturn join(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\");\n}\n\nexport function formatModuleEnablement(\n\tmodules:\n\t\t| {\n\t\t\tauth?: boolean;\n\t\t\tbilling?: boolean;\n\t\t\tchat?: boolean;\n\t\t\teventIngress?: boolean;\n\t\t}\n\t\t| undefined,\n): readonly string[] {\n\tconst auth =\n\t\tmodules == null\n\t\t\t? \"enabled (default)\"\n\t\t\t: modules.auth === true\n\t\t\t\t? \"enabled\"\n\t\t\t\t: \"disabled\";\n\tconst flag = (value: boolean | undefined): string =>\n\t\tvalue === true ? \"enabled\" : \"disabled\";\n\treturn [\n\t\t`  Auth            ${auth}`,\n\t\t`  Chat            ${flag(modules?.chat)}`,\n\t\t`  Event Ingress   ${flag(modules?.eventIngress)}`,\n\t\t`  Billing         ${flag(modules?.billing)}`,\n\t];\n}\n\nexport function resolveCliExecutionMode(): \"workspace-source\" | \"packed-dist\" {\n\tconst href = import.meta.url.replace(/\\\\/g, \"/\");\n\treturn href.includes(\"/src/cli/\") ? \"workspace-source\" : \"packed-dist\";\n}\n\nexport function formatCliIdentity(input: {\n\tconfigPath?: string | null;\n\tmodules?: {\n\t\tauth?: boolean;\n\t\tbilling?: boolean;\n\t\tchat?: boolean;\n\t\teventIngress?: boolean;\n\t};\n}): string {\n\treturn [\n\t\t`CLI version     ${PACKAGE_VERSION}`,\n\t\t`CLI source      ${resolveCliExecutionMode()}`,\n\t\t`CLI package     ${resolveAthenaJsPackageRoot()}`,\n\t\t`Config path     ${input.configPath ?? \"(none)\"}`,\n\t\t\"Modules:\",\n\t\t...formatModuleEnablement(input.modules),\n\t].join(\"\\n\");\n}\n","/**\n * Local Data Runtime + Embedded Auth (+ passkey) validation for the CLI.\n * Read-only: never applies migrations.\n */\nimport { resolveAthenaAppIdentity } from \"../../../auth/app-identity.ts\";\nimport { createPostgresAuthDatabase } from \"../../../auth/local/database.ts\";\nimport type { AthenaAuthMigrationPlan } from \"../../../auth/local/schema.ts\";\nimport { planAthenaAuthSchema } from \"../../../auth/local/schema.ts\";\nimport { createPasskeyRelyingPartySnapshot } from \"../../../auth/passkey/server/relying-party.ts\";\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport { loadGeneratorConfig } from \"../../../generator/config.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { discoverMigrations } from \"../../../migrations/discovery.ts\";\nimport {\n\tplanHasBlockingConflicts,\n\tplanMigrations,\n} from \"../../../migrations/planner.ts\";\nimport { createPostgresMigrationBackend } from \"../../../migrations/postgres.ts\";\nimport type {\n\tAppliedMigration,\n\tMigrationPlan,\n} from \"../../../migrations/types.ts\";\nimport type { AthenaPrincipalRightsProjection } from \"../../../runtime/data/principal.ts\";\nimport { validateAthenaRightsProjection } from \"../../../runtime/data/rights-resolution.ts\";\nimport { resolveCliCapabilities } from \"../../ui/capabilities.ts\";\nimport { paint } from \"../../ui/colors.ts\";\nimport type { CliCapabilities } from \"../../ui/types.ts\";\nimport { loadProjectEnv } from \"../env/project-env.ts\";\nimport {\n\tcollectBillingIngressRouteChecks,\n\tcollectEmbeddedSchemaDatabaseChecks,\n\tcollectLocalBillingValidationChecks,\n\tisValidateLedgerTable,\n\ttype LocalBillingValidateInput,\n\ttype VALIDATE_LEDGER_TABLES,\n} from \"./validate-billing.ts\";\n\nexport type ValidationSeverity = \"ok\" | \"warn\" | \"error\" | \"skip\";\n\nexport interface ValidationCheck {\n\tdetail?: string;\n\tgroup: \"data\" | \"auth\" | \"passkey\" | \"billing\";\n\tid: string;\n\tstatus: ValidationSeverity;\n\ttitle: string;\n}\n\nexport interface ValidationReport {\n\tchecks: ValidationCheck[];\n\terrorCount: number;\n\tok: boolean;\n\ttarget?: { database: string; provider: string };\n\ttitle: string;\n\twarnCount: number;\n}\n\nexport interface ValidateLocalInspect {\n\tapplicationPlan?: () => Promise<MigrationPlan>;\n\tauthPlan?: () => Promise<AthenaAuthMigrationPlan>;\n\tcolumns?: (schema: string, table: string) => Promise<readonly string[]>;\n\tappliedLedgerVersions?: (\n\t\tledger: (typeof VALIDATE_LEDGER_TABLES)[number],\n\t) => Promise<readonly number[]>;\n\tauthorization?: () => AthenaPrincipalRightsProjection;\n\tbilling?: () => LocalBillingValidateInput | null | undefined;\n\tmodules?: () => {\n\t\tbilling?: boolean;\n\t\tchat?: boolean;\n\t\teventIngress?: boolean;\n\t};\n\tpasskey?: () => {\n\t\tenabled?: boolean;\n\t\torigins?: readonly string[];\n\t\trelatedOrigins?: readonly string[];\n\t\trpId?: string | null;\n\t\trpName?: string | null;\n\t};\n\tping?: () => Promise<void>;\n\ttables?: (schema: string) => Promise<readonly string[]>;\n\ttarget?: () => Promise<{\n\t\tdatabase: string;\n\t\tdirectory: string;\n\t\tprovider: string;\n\t}>;\n}\n\nexport interface ValidateLocalOptions {\n\tconfigPath?: string;\n\tcwd?: string;\n\tenvironment?: \"development\" | \"production\";\n\tinspect?: ValidateLocalInspect;\n\tjson?: boolean;\n\tplain?: boolean;\n\tstrict?: boolean;\n}\n\nfunction tag(\n\tstatus: ValidationSeverity,\n\tcapabilities: CliCapabilities,\n): string {\n\tconst raw =\n\t\tstatus === \"ok\"\n\t\t\t? \"ok  \"\n\t\t\t: status === \"warn\"\n\t\t\t\t? \"warn\"\n\t\t\t\t: status === \"skip\"\n\t\t\t\t\t? \"skip\"\n\t\t\t\t\t: \"err \";\n\tconst color =\n\t\tstatus === \"ok\"\n\t\t\t? \"green\"\n\t\t\t: status === \"warn\"\n\t\t\t\t? \"yellow\"\n\t\t\t\t: status === \"skip\"\n\t\t\t\t\t? \"dim\"\n\t\t\t\t\t: \"red\";\n\treturn paint(raw, color, capabilities);\n}\n\nexport function formatValidationReport(\n\treport: ValidationReport,\n\tcapabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n): string {\n\tconst lines: string[] = [paint(report.title, \"bold\", capabilities), \"\"];\n\tif (report.target) {\n\t\tlines.push(paint(\"Target\", \"bold\", capabilities), \"\");\n\t\tlines.push(\n\t\t\t`  ${paint(\"Provider    \", \"dim\", capabilities)}${report.target.provider}`,\n\t\t);\n\t\tlines.push(\n\t\t\t`  ${paint(\"Database    \", \"dim\", capabilities)}${report.target.database}`,\n\t\t);\n\t\tlines.push(\"\");\n\t}\n\n\tlet currentGroup: ValidationCheck[\"group\"] | undefined;\n\tconst titles: Record<ValidationCheck[\"group\"], string> = {\n\t\tauth: \"Embedded Auth\",\n\t\tbilling: \"Billing\",\n\t\tdata: \"Data runtime\",\n\t\tpasskey: \"Passkeys\",\n\t};\n\tfor (const check of report.checks) {\n\t\tif (check.group !== currentGroup) {\n\t\t\tif (currentGroup) {\n\t\t\t\tlines.push(\"\");\n\t\t\t}\n\t\t\tcurrentGroup = check.group;\n\t\t\tlines.push(paint(titles[check.group], \"bold\", capabilities), \"\");\n\t\t}\n\t\tlines.push(`  [${tag(check.status, capabilities)}] ${check.title}`);\n\t\tif (check.detail) {\n\t\t\tfor (const line of check.detail.split(\"\\n\")) {\n\t\t\t\tlines.push(paint(`         ${line}`, \"dim\", capabilities));\n\t\t\t}\n\t\t}\n\t}\n\n\tlines.push(\"\");\n\tlines.push(\n\t\tpaint(\n\t\t\t`  ${report.errorCount} error(s) · ${report.warnCount} warning(s)`,\n\t\t\t\"dim\",\n\t\t\tcapabilities,\n\t\t),\n\t);\n\tlines.push(report.ok ? \"result: OK\" : \"result: FAILED\");\n\treturn lines.join(\"\\n\");\n}\n\nfunction push(\n\tchecks: ValidationCheck[],\n\tcheck: ValidationCheck,\n\tstrict: boolean,\n): void {\n\tif (strict && check.status === \"warn\") {\n\t\tchecks.push({ ...check, status: \"error\" });\n\t\treturn;\n\t}\n\tchecks.push(check);\n}\n\nasync function defaultInspect(\n\toptions: ValidateLocalOptions,\n): Promise<ValidateLocalInspect> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst loaded = await loadGeneratorConfig({\n\t\tconfigPath: options.configPath,\n\t\tcwd,\n\t});\n\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\tapplyProjectEnv: false,\n\t\tcwd,\n\t\tloaded,\n\t\tmode: \"direct\",\n\t});\n\tconst provider = authority.provider;\n\tauthority.restoreEnv();\n\tif (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n\t\tthrow new Error(\n\t\t\t`Local validate requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n\t\t);\n\t}\n\tconst connectionString = provider.connectionString;\n\tconst database =\n\t\tprovider.database ??\n\t\t(() => {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(\n\t\t\t\t\tconnectionString.replace(/^postgresql:/i, \"postgres:\"),\n\t\t\t\t);\n\t\t\t\treturn (\n\t\t\t\t\tdecodeURIComponent(url.pathname.replace(/^\\//, \"\")) || \"postgres\"\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\treturn \"postgres\";\n\t\t\t}\n\t\t})();\n\tconst directory = loaded.config.migrations.directory || \"athena/migrations\";\n\n\treturn {\n\t\tasync applicationPlan() {\n\t\t\tconst backend = await createPostgresMigrationBackend({\n\t\t\t\tconnectionString,\n\t\t\t\tdatabase,\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst local = await discoverMigrations({ cwd, directory });\n\t\t\t\tlet applied: AppliedMigration[] = [];\n\t\t\t\ttry {\n\t\t\t\t\tapplied = await backend.listAppliedMigrations();\n\t\t\t\t} catch {\n\t\t\t\t\tapplied = [];\n\t\t\t\t}\n\t\t\t\treturn planMigrations({ applied, local });\n\t\t\t} finally {\n\t\t\t\tawait backend.close();\n\t\t\t}\n\t\t},\n\t\tasync authPlan() {\n\t\t\tconst db = await createPostgresAuthDatabase(connectionString);\n\t\t\ttry {\n\t\t\t\treturn await planAthenaAuthSchema(db, { inspectSchema: true });\n\t\t\t} finally {\n\t\t\t\tawait db.close?.();\n\t\t\t}\n\t\t},\n\t\tasync columns(schema, table) {\n\t\t\tconst db = await createPostgresAuthDatabase(connectionString);\n\t\t\ttry {\n\t\t\t\tconst result = await db.query<{ column_name: string }>(\n\t\t\t\t\t`SELECT column_name\n           FROM information_schema.columns\n           WHERE table_schema = $1 AND table_name = $2`,\n\t\t\t\t\t[schema, table],\n\t\t\t\t);\n\t\t\t\treturn result.rows.map((row) => row.column_name);\n\t\t\t} finally {\n\t\t\t\tawait db.close?.();\n\t\t\t}\n\t\t},\n\t\tasync ping() {\n\t\t\tconst db = await createPostgresAuthDatabase(connectionString);\n\t\t\ttry {\n\t\t\t\tawait db.query(\"SELECT 1 AS ok\");\n\t\t\t} finally {\n\t\t\t\tawait db.close?.();\n\t\t\t}\n\t\t},\n\t\tasync tables(schema) {\n\t\t\tconst db = await createPostgresAuthDatabase(connectionString);\n\t\t\ttry {\n\t\t\t\tconst result = await db.query<{ table_name: string }>(\n\t\t\t\t\t`SELECT table_name\n           FROM information_schema.tables\n           WHERE table_schema = $1`,\n\t\t\t\t\t[schema],\n\t\t\t\t);\n\t\t\t\treturn result.rows.map((row) => row.table_name);\n\t\t\t} finally {\n\t\t\t\tawait db.close?.();\n\t\t\t}\n\t\t},\n\t\tasync appliedLedgerVersions(ledger) {\n\t\t\tif (!isValidateLedgerTable(ledger)) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst db = await createPostgresAuthDatabase(connectionString);\n\t\t\ttry {\n\t\t\t\tconst result = await db.query<{ version: number }>(\n\t\t\t\t\t`SELECT version FROM ${ledger} ORDER BY version`,\n\t\t\t\t);\n\t\t\t\treturn result.rows.map((row) => Number(row.version));\n\t\t\t} catch {\n\t\t\t\treturn [];\n\t\t\t} finally {\n\t\t\t\tawait db.close?.();\n\t\t\t}\n\t\t},\n\t\tbilling() {\n\t\t\treturn loaded.config.modules?.billing === true ? {} : null;\n\t\t},\n\t\tpasskey() {\n\t\t\tconst loadedEnv = loadProjectEnv({ cwd });\n\t\t\tconst env: Record<string, string | undefined> = {};\n\t\t\tfor (const [key, entry] of loadedEnv.values) {\n\t\t\t\tenv[key] = entry.value;\n\t\t\t}\n\t\t\tconst identity = resolveAthenaAppIdentity({ env });\n\t\t\tif (!identity) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\torigins: [identity.origin],\n\t\t\t\trpId: identity.hostname,\n\t\t\t\trpName: identity.name,\n\t\t\t};\n\t\t},\n\t\tmodules() {\n\t\t\treturn {\n\t\t\t\tbilling: loaded.config.modules?.billing === true,\n\t\t\t\tchat: loaded.config.modules?.chat === true,\n\t\t\t\teventIngress:\n\t\t\t\t\tloaded.config.modules?.eventIngress === true ||\n\t\t\t\t\tloaded.config.modules?.billing === true,\n\t\t\t};\n\t\t},\n\t\tasync target() {\n\t\t\treturn {\n\t\t\t\tdatabase,\n\t\t\t\tdirectory,\n\t\t\t\tprovider: `postgres/${provider.mode}`,\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport async function validateLocalRuntime(\n\toptions: ValidateLocalOptions = {},\n): Promise<ValidationReport> {\n\tconst strict = Boolean(options.strict);\n\tconst environment =\n\t\toptions.environment ??\n\t\t(process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n\tconst checks: ValidationCheck[] = [];\n\tlet inspect: ValidateLocalInspect;\n\tlet target: ValidationReport[\"target\"];\n\n\ttry {\n\t\tinspect = options.inspect ?? (await defaultInspect(options));\n\t\ttarget = await inspect.target?.();\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tgroup: \"data\",\n\t\t\t\tid: \"data.config\",\n\t\t\t\tstatus: \"ok\",\n\t\t\t\ttitle: \"Generator config\",\n\t\t\t\tdetail: target\n\t\t\t\t\t? `${target.provider} · ${target.database}`\n\t\t\t\t\t: \"postgres/direct\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tdetail: message,\n\t\t\t\tgroup: \"data\",\n\t\t\t\tid: \"data.config\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\ttitle: \"Generator config\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t\treturn finalize(checks, target);\n\t}\n\n\ttry {\n\t\tawait inspect.ping?.();\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tgroup: \"data\",\n\t\t\t\tid: \"data.connect\",\n\t\t\t\tstatus: \"ok\",\n\t\t\t\ttitle: \"Database connection\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tdetail: message,\n\t\t\t\tgroup: \"data\",\n\t\t\t\tid: \"data.connect\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\ttitle: \"Database connection\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t\treturn finalize(checks, target);\n\t}\n\n\tif (inspect.applicationPlan) {\n\t\ttry {\n\t\t\tconst plan = await inspect.applicationPlan();\n\t\t\tif (planHasBlockingConflicts(plan)) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${plan.conflicts.length} history conflict(s). Restore applied files or add a forward migration.`,\n\t\t\t\t\t\tgroup: \"data\",\n\t\t\t\t\t\tid: \"data.migrations\",\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\ttitle: \"Application migrations\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else if (plan.pending.length > 0) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${plan.pending.length} pending. Run athena-js migrate.`,\n\t\t\t\t\t\tgroup: \"data\",\n\t\t\t\t\t\tid: \"data.migrations\",\n\t\t\t\t\t\tstatus: \"warn\",\n\t\t\t\t\t\ttitle: \"Application migrations\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${plan.applied.length} applied`,\n\t\t\t\t\t\tgroup: \"data\",\n\t\t\t\t\t\tid: \"data.migrations\",\n\t\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\t\ttitle: \"Application migrations\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail: message,\n\t\t\t\t\tgroup: \"data\",\n\t\t\t\t\tid: \"data.migrations\",\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\ttitle: \"Application migrations\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t}\n\t}\n\n\tlet authPlan: AthenaAuthMigrationPlan | undefined;\n\tif (inspect.authPlan) {\n\t\ttry {\n\t\t\tauthPlan = await inspect.authPlan();\n\t\t\tif (authPlan.conflictCount > 0 || authPlan.hasBlockingDrift) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${authPlan.conflictCount} conflict(s), ${authPlan.driftCount} drift. Use athena-js migrate repair --yes after inspecting.`,\n\t\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\t\tid: \"auth.schema\",\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\ttitle: \"Embedded Auth schema\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else if (authPlan.pendingCount > 0) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${authPlan.pendingCount} pending / ${authPlan.appliedCount} applied. Run athena-js migrate.`,\n\t\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\t\tid: \"auth.schema\",\n\t\t\t\t\t\tstatus: \"warn\",\n\t\t\t\t\t\ttitle: \"Embedded Auth schema\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `${authPlan.appliedCount} applied`,\n\t\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\t\tid: \"auth.schema\",\n\t\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\t\ttitle: \"Embedded Auth schema\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail: message,\n\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\tid: \"auth.schema\",\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\ttitle: \"Embedded Auth schema\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t}\n\t}\n\n\tif (inspect.authorization) {\n\t\tconst projection = inspect.authorization();\n\t\tconst mapping = validateAthenaRightsProjection(projection);\n\t\tconst firstIssue = mapping.issues[0];\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tdetail: firstIssue?.message,\n\t\t\t\tgroup: \"auth\",\n\t\t\t\tid: \"auth.authorization.mapping\",\n\t\t\t\tstatus: mapping.ok ? \"ok\" : \"error\",\n\t\t\t\ttitle: \"Authorization role mapping\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t}\n\n\tconst tables = inspect.tables\n\t\t? new Set(\n\t\t\t(await inspect.tables(\"athena\").catch(() => [] as const)).map((name) =>\n\t\t\t\tname.toLowerCase(),\n\t\t\t),\n\t\t)\n\t\t: undefined;\n\n\tif (tables) {\n\t\tif (tables.has(\"users\") && tables.has(\"sessions\")) {\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail: \"athena.users + athena.sessions\",\n\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\tid: \"auth.core-tables\",\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\ttitle: \"Core Auth tables\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t} else {\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail:\n\t\t\t\t\t\t\"Expected athena.users and athena.sessions. Run athena-js migrate.\",\n\t\t\t\t\tgroup: \"auth\",\n\t\t\t\t\tid: \"auth.core-tables\",\n\t\t\t\t\tstatus: tables.size === 0 ? \"warn\" : \"error\",\n\t\t\t\t\ttitle: \"Core Auth tables\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t}\n\n\t\tif (tables.has(\"verifications\")) {\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail: \"Used for passkey challenge consume (DELETE … RETURNING)\",\n\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\tid: \"passkey.challenges\",\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\ttitle: \"Challenge store\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t} else {\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail:\n\t\t\t\t\t\t\"athena.verifications missing — passkey challenges cannot persist.\",\n\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\tid: \"passkey.challenges\",\n\t\t\t\t\tstatus: authPlan && authPlan.pendingCount > 0 ? \"warn\" : \"error\",\n\t\t\t\t\ttitle: \"Challenge store\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t}\n\n\t\tif (tables.has(\"passkeys\")) {\n\t\t\tconst columns = new Set(\n\t\t\t\t(\n\t\t\t\t\t(await inspect.columns?.(\"athena\", \"passkeys\").catch(() => [])) ?? []\n\t\t\t\t).map((name) => name.toLowerCase()),\n\t\t\t);\n\t\t\tconst required = [\"credential_id\", \"counter\", \"user_id\", \"public_key\"];\n\t\t\tconst missingRequired = required.filter((name) => !columns.has(name));\n\t\t\tif (missingRequired.length > 0) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: `Missing columns: ${missingRequired.join(\", \")}`,\n\t\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\t\tid: \"passkey.table\",\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\ttitle: \"Passkeys table\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else if (!columns.has(\"updated_at\")) {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\"updated_at missing. Run athena-js migrate (Auth generation 22).\",\n\t\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\t\tid: \"passkey.table\",\n\t\t\t\t\t\tstatus: \"warn\",\n\t\t\t\t\t\ttitle: \"Passkeys table\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush(\n\t\t\t\t\tchecks,\n\t\t\t\t\t{\n\t\t\t\t\t\tdetail: \"athena.passkeys with updated_at\",\n\t\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\t\tid: \"passkey.table\",\n\t\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\t\ttitle: \"Passkeys table\",\n\t\t\t\t\t},\n\t\t\t\t\tstrict,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tpush(\n\t\t\t\tchecks,\n\t\t\t\t{\n\t\t\t\t\tdetail:\n\t\t\t\t\t\t\"athena.passkeys missing until Embedded Auth migrations apply.\",\n\t\t\t\t\tgroup: \"passkey\",\n\t\t\t\t\tid: \"passkey.table\",\n\t\t\t\t\tstatus: \"warn\",\n\t\t\t\t\ttitle: \"Passkeys table\",\n\t\t\t\t},\n\t\t\t\tstrict,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst passkey = inspect.passkey?.();\n\tconst envRpId =\n\t\tprocess.env.PASSKEY_RP_ID?.trim() ||\n\t\tprocess.env.ATHENA_PASSKEY_RP_ID?.trim() ||\n\t\tnull;\n\ttry {\n\t\tconst snapshot = createPasskeyRelyingPartySnapshot({\n\t\t\tenvironment,\n\t\t\tpasskey: {\n\t\t\t\torigins: [...(passkey?.origins ?? [])],\n\t\t\t\trelatedOrigins: [...(passkey?.relatedOrigins ?? [])],\n\t\t\t\trpId: passkey?.rpId ?? envRpId,\n\t\t\t\trpName: passkey?.rpName ?? null,\n\t\t\t},\n\t\t\ttrustedOrigins: [],\n\t\t});\n\t\tconst usingDevDefault =\n\t\t\tsnapshot.id === \"localhost\" && environment !== \"production\";\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tdetail: usingDevDefault\n\t\t\t\t\t? `rpId=${snapshot.id} (development default). Set passkey.rpId for production.`\n\t\t\t\t\t: `rpId=${snapshot.id} · ${snapshot.origins.length} origin(s)`,\n\t\t\t\tgroup: \"passkey\",\n\t\t\t\tid: \"passkey.rp\",\n\t\t\t\tstatus: usingDevDefault ? \"warn\" : \"ok\",\n\t\t\t\ttitle: \"Relying party\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof AthenaConfigurationError\n\t\t\t\t? error.message\n\t\t\t\t: error instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: String(error);\n\t\tpush(\n\t\t\tchecks,\n\t\t\t{\n\t\t\t\tdetail: message,\n\t\t\t\tgroup: \"passkey\",\n\t\t\t\tid: \"passkey.rp\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\ttitle: \"Relying party\",\n\t\t\t},\n\t\t\tstrict,\n\t\t);\n\t}\n\n\tconst billingInput = inspect.billing?.();\n\tfor (const check of collectLocalBillingValidationChecks(billingInput)) {\n\t\tpush(checks, check, strict);\n\t}\n\n\tconst modules = inspect.modules?.() ?? {};\n\tfor (const check of collectBillingIngressRouteChecks({\n\t\tbillingEnabled: modules.billing === true,\n\t\tcwd: options.cwd ?? process.cwd(),\n\t})) {\n\t\tpush(checks, check, strict);\n\t}\n\n\tif (\n\t\tinspect.tables &&\n\t\t(modules.billing || modules.chat || modules.eventIngress)\n\t) {\n\t\tconst [billingTables, publicTables, athenaTables] = await Promise.all([\n\t\t\tinspect.tables(\"billing\").catch(() => [] as const),\n\t\t\tinspect.tables(\"public\").catch(() => [] as const),\n\t\t\tinspect.tables(\"athena\").catch(() => [] as const),\n\t\t]);\n\t\tconst billingLedgerVersions = inspect.appliedLedgerVersions\n\t\t\t? await inspect\n\t\t\t\t.appliedLedgerVersions(\"athena_billing_migrations\")\n\t\t\t\t.catch(() => [] as const)\n\t\t\t: [];\n\t\tconst chatLedgerVersions = inspect.appliedLedgerVersions\n\t\t\t? await inspect\n\t\t\t\t.appliedLedgerVersions(\"athena_chat_schema_migrations\")\n\t\t\t\t.catch(() => [] as const)\n\t\t\t: [];\n\t\tconst eventIngressLedgerVersions = inspect.appliedLedgerVersions\n\t\t\t? await inspect\n\t\t\t\t.appliedLedgerVersions(\"athena_event_ingress_migrations\")\n\t\t\t\t.catch(() => [] as const)\n\t\t\t: [];\n\t\tfor (const check of collectEmbeddedSchemaDatabaseChecks({\n\t\t\tathenaTables,\n\t\t\tbillingEnabled: modules.billing === true,\n\t\t\tbillingLedgerVersions,\n\t\t\tbillingTables,\n\t\t\tchatEnabled: modules.chat === true,\n\t\t\tchatLedgerVersions,\n\t\t\teventIngressEnabled: modules.eventIngress === true,\n\t\t\teventIngressLedgerVersions,\n\t\t\tpublicTables,\n\t\t})) {\n\t\t\tpush(checks, check, strict);\n\t\t}\n\t}\n\n\treturn finalize(checks, target);\n}\n\nfunction finalize(\n\tchecks: ValidationCheck[],\n\ttarget: ValidationReport[\"target\"],\n): ValidationReport {\n\tconst errorCount = checks.filter((check) => check.status === \"error\").length;\n\tconst warnCount = checks.filter((check) => check.status === \"warn\").length;\n\treturn {\n\t\tchecks,\n\t\terrorCount,\n\t\tok: errorCount === 0,\n\t\ttarget,\n\t\ttitle: \"Athena JS · validate local\",\n\t\twarnCount,\n\t};\n}\n","import type { AthenaAppIdentity } from \"../../app-identity.ts\";\nimport { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { NormalizedAthenaAuthConfig } from \"../../config.ts\";\nimport type { AthenaPasskeyRelyingParty } from \"./types.ts\";\n\n/**\n * Trusted RP snapshot source (INV-PK-09).\n * Never arbitrary Host / x-forwarded-host.\n */\nexport interface PasskeyRelyingPartyResolver {\n  resolve(): AthenaPasskeyRelyingParty;\n}\n\nexport const ATHENA_PASSKEY_DEFAULT_RP_NAME = \"Athena\";\n\nexport const ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS = Object.freeze([\n  \"http://localhost\",\n  \"http://localhost:3000\",\n  \"http://127.0.0.1\",\n  \"http://127.0.0.1:3000\",\n] as const);\n\nconst EMPTY_RELATED_ORIGINS: readonly string[] = Object.freeze([]);\n\nexport const ATHENA_PASSKEY_DEV_DEFAULT_RELYING_PARTY: AthenaPasskeyRelyingParty =\n  Object.freeze({\n    id: \"localhost\",\n    name: ATHENA_PASSKEY_DEFAULT_RP_NAME,\n    origins: ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS,\n    relatedOrigins: EMPTY_RELATED_ORIGINS,\n  });\n\nexport type PasskeyRelyingPartySnapshotInput = {\n  appIdentity?: AthenaAppIdentity | null;\n  environment: \"production\" | \"development\";\n  passkey: Pick<\n    NormalizedAthenaAuthConfig[\"passkey\"],\n    \"origins\" | \"relatedOrigins\" | \"rpId\" | \"rpName\"\n  >;\n  /** Production + passkeys + no origin uses ATHENA_PASSKEY_APP_ORIGIN_REQUIRED. */\n  required?: boolean;\n  trustedOrigins: readonly string[];\n};\n\nfunction passkeyRpConfigError(\n  message: string,\n  code:\n    | \"ATHENA_RUNTIME_CONFIG_INVALID\"\n    | \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n    | \"ATHENA_PASSKEY_RP_AMBIGUOUS\" = \"ATHENA_RUNTIME_CONFIG_INVALID\",\n): AthenaConfigurationError {\n  return new AthenaConfigurationError(code, message, \"auth\");\n}\n\nfunction isExactAbsoluteOrigin(value: string): boolean {\n  if (value.length === 0 || value.includes(\"*\")) {\n    return false;\n  }\n  try {\n    const url = new URL(value);\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      return false;\n    }\n    if (!url.hostname || url.hostname.includes(\"*\")) {\n      return false;\n    }\n    return value === url.origin || value === `${url.origin}/`;\n  } catch {\n    return false;\n  }\n}\n\nfunction assertExactOrigins(origins: readonly string[]): void {\n  for (const origin of origins) {\n    if (!isExactAbsoluteOrigin(origin)) {\n      throw passkeyRpConfigError(\n        \"Passkey origins must be exact absolute origins (no wildcards, empty members, or relative hosts).\"\n      );\n    }\n  }\n}\n\nfunction uniqueTrustedHostname(\n  trustedOrigins: readonly string[]\n): string | null {\n  if (trustedOrigins.length === 0) {\n    return null;\n  }\n  const hosts = new Set<string>();\n  for (const origin of trustedOrigins) {\n    if (!isExactAbsoluteOrigin(origin)) {\n      return null;\n    }\n    hosts.add(new URL(origin).hostname);\n  }\n  if (hosts.size !== 1) {\n    return null;\n  }\n  const [hostname] = hosts;\n  return hostname ?? null;\n}\n\nfunction trimmedNonEmpty(value: string | null | undefined): string | undefined {\n  if (typeof value !== \"string\") {\n    return undefined;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\n/**\n * Freeze one immutable domain RP at Auth init.\n * Precedence: explicit passkey origins / app identity → unique-host\n * trustedOrigins for rpId only → documented localhost/dev defaults\n * (non-production only). Trusted origins never become ceremony origins.\n */\nexport function createPasskeyRelyingPartySnapshot(\n  input: PasskeyRelyingPartySnapshotInput\n): AthenaPasskeyRelyingParty {\n  const { appIdentity, environment, passkey, required, trustedOrigins } = input;\n  const explicitOrigins = passkey.origins;\n  const explicitRelated = passkey.relatedOrigins;\n\n  if (explicitOrigins.length > 0) {\n    assertExactOrigins(explicitOrigins);\n  }\n  if (explicitRelated.length > 0) {\n    assertExactOrigins(explicitRelated);\n  }\n\n  let id = trimmedNonEmpty(passkey.rpId);\n  let name = trimmedNonEmpty(passkey.rpName) ?? trimmedNonEmpty(appIdentity?.name);\n  let origins: readonly string[] =\n    explicitOrigins.length > 0\n      ? explicitOrigins\n      : appIdentity\n        ? [appIdentity.origin]\n        : [];\n  const relatedOrigins: readonly string[] =\n    explicitRelated.length > 0 ? explicitRelated : [];\n\n  if (!id && appIdentity) {\n    id = appIdentity.hostname;\n  }\n  if (!id && origins.length > 0) {\n    const hosts = new Set<string>();\n    for (const origin of origins) {\n      if (isExactAbsoluteOrigin(origin)) {\n        hosts.add(new URL(origin).hostname);\n      }\n    }\n    if (hosts.size === 1) {\n      const [hostname] = hosts;\n      id = hostname ?? undefined;\n    } else if (hosts.size > 1) {\n      throw passkeyRpConfigError(\n        \"Passkey relying party is ambiguous: multiple WebAuthn hostnames require an explicit passkey.rpId.\",\n        \"ATHENA_PASSKEY_RP_AMBIGUOUS\",\n      );\n    }\n  }\n  if (!id) {\n    const trustedHost = uniqueTrustedHostname(trustedOrigins);\n    if (trustedHost) {\n      id = trustedHost;\n    }\n  }\n  if (!name) {\n    name = ATHENA_PASSKEY_DEFAULT_RP_NAME;\n  }\n\n  if (!id) {\n    if (environment === \"production\") {\n      throw passkeyRpConfigError(\n        required\n          ? \"Passkeys require a trusted application origin (createClient app.url or APP_URL). Production does not default to localhost.\"\n          : \"Passkey relying party requires a trusted rpId (explicit passkey.rpId or a unique hostname in security.trustedOrigins). Production does not default to localhost.\",\n        required ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\" : \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      );\n    }\n    id = \"localhost\";\n  }\n\n  if (origins.length === 0) {\n    if (environment === \"production\") {\n      throw passkeyRpConfigError(\n        required\n          ? \"Passkeys require a trusted application origin (createClient app.url or APP_URL).\"\n          : \"Passkey relying party requires at least one exact origin in production.\",\n        required ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\" : \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      );\n    }\n    origins = ATHENA_PASSKEY_DEV_DEFAULT_ORIGINS;\n  }\n\n  assertExactOrigins(origins);\n  if (relatedOrigins.length > 0) {\n    assertExactOrigins(relatedOrigins);\n  }\n\n  const frozenOrigins = Object.freeze([...origins]);\n  const frozenRelated = Object.freeze([...relatedOrigins]);\n  return Object.freeze({\n    id,\n    name,\n    origins: frozenOrigins,\n    relatedOrigins: frozenRelated,\n  });\n}\n\nexport function createPasskeyRelyingPartyResolver(\n  snapshot: AthenaPasskeyRelyingParty\n): PasskeyRelyingPartyResolver {\n  return {\n    resolve() {\n      return snapshot;\n    },\n  };\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipalRightsProjection } from \"./principal.ts\";\n\n/**\n * Legacy `rightsByRole` / `mode: \"role\"` projection. Persisted authorization\n * assignments are the product SSOT. Do not add new consumers of this path.\n */\n\nexport type AthenaRightsResolutionMode = \"role\" | \"stored\";\n\nexport type AthenaRightsResolutionSource =\n\t| \"role\"\n\t| \"default-role\"\n\t| \"stored\"\n\t| \"none\";\n\nexport type AthenaRightsResolutionReason =\n\t| \"role_not_mapped\"\n\t| \"default_role_not_mapped\"\n\t| \"no_rights_configured\";\n\nexport type AthenaRightsResolution =\n\t| {\n\t\tok: true;\n\t\trole: string;\n\t\tsource: Exclude<AthenaRightsResolutionSource, \"none\">;\n\t\trights: readonly string[];\n\t}\n\t| {\n\t\tok: false;\n\t\treason: AthenaRightsResolutionReason;\n\t\trole: string;\n\t\trights: readonly [];\n\t\tsource: \"none\";\n\t};\n\nexport const ATHENA_RIGHTS_RESOLUTION_KIND =\n\t\"athena_rights_resolution\" as const;\n\nexport interface AthenaRightsResolutionDiagnostic {\n\tkind: typeof ATHENA_RIGHTS_RESOLUTION_KIND;\n\tuserId: string;\n\tstoredRole?: string;\n\tdefaultRole?: string;\n\tselectedRole?: string;\n\tconfiguredRoles: readonly string[];\n\tsource: AthenaRightsResolutionSource;\n\teffectiveRights: readonly string[];\n\teffectiveRightCount: number;\n\tmode: AthenaRightsResolutionMode;\n\treason?: AthenaRightsResolutionReason;\n}\n\nexport type AthenaRightsResolutionDiagnosticListener = (\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n) => void;\n\nexport interface AthenaRightsProjectionValidationIssue {\n\tmessage: string;\n\tpath: string;\n}\n\nexport interface AthenaRightsProjectionValidation {\n\tissues: readonly AthenaRightsProjectionValidationIssue[];\n\tok: boolean;\n}\n\nconst listeners = new Set<AthenaRightsResolutionDiagnosticListener>();\nlet lastDiagnostic: AthenaRightsResolutionDiagnostic | undefined;\n\nexport function subscribeAthenaRightsResolutionDiagnostics(\n\tlistener: AthenaRightsResolutionDiagnosticListener,\n): () => void {\n\tlisteners.add(listener);\n\treturn () => {\n\t\tlisteners.delete(listener);\n\t};\n}\n\nexport function getLastAthenaRightsResolutionDiagnostic():\n\t| AthenaRightsResolutionDiagnostic\n\t| undefined {\n\treturn lastDiagnostic;\n}\n\nexport function resetAthenaRightsResolutionDiagnostics(): void {\n\tlastDiagnostic = undefined;\n}\n\nexport function defineAthenaRights(\n\tkeys: readonly string[],\n): readonly AthenaRightKey[] {\n\treturn Object.freeze(keys.map((key) => parseAthenaRightKey(key)));\n}\n\nexport function resolveAuthorizationMode(\n\tauthorization?: AthenaPrincipalRightsProjection,\n): AthenaRightsResolutionMode {\n\treturn authorization?.mode === \"stored\" ? \"stored\" : \"role\";\n}\n\nexport function configuredRoleNames(\n\tauthorization?: AthenaPrincipalRightsProjection,\n): readonly string[] {\n\treturn Object.keys(authorization?.rightsByRole ?? {});\n}\n\nexport function resolveStoredUserRightsResolution(\n\tuser: {\n\t\tmetadata?: unknown;\n\t\trights?: readonly string[];\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n\toptions?: { userId?: string },\n): AthenaRightsResolution {\n\tconst mode = resolveAuthorizationMode(authorization);\n\tconst resolution =\n\t\tmode === \"stored\"\n\t\t\t? resolveStoredMode(user)\n\t\t\t: resolveRoleMode(user, authorization);\n\temitAthenaRightsResolutionDiagnostic(\n\t\tdiagnosticFromResolution(resolution, user, authorization, options?.userId),\n\t);\n\treturn resolution;\n}\n\nexport function effectiveRightsFromResolution(\n\tresolution: AthenaRightsResolution,\n): readonly string[] {\n\treturn resolution.rights;\n}\n\nexport function validateAthenaRightsProjection(\n\tauthorization: AthenaPrincipalRightsProjection | undefined,\n): AthenaRightsProjectionValidation {\n\tconst issues: AthenaRightsProjectionValidationIssue[] = [];\n\tif (!authorization) {\n\t\treturn { issues, ok: true };\n\t}\n\tconst mode = resolveAuthorizationMode(authorization);\n\tif (mode === \"stored\") {\n\t\treturn { issues, ok: true };\n\t}\n\tconst table = authorization.rightsByRole;\n\tconst roles = configuredRoleNames(authorization);\n\tif (!table || roles.length === 0) {\n\t\treturn { issues, ok: true };\n\t}\n\tconst defaultRole = authorization.defaultRole?.trim();\n\tif (defaultRole && (!table || !Object.hasOwn(table, defaultRole))) {\n\t\tissues.push({\n\t\t\tmessage: `defaultRole \"${defaultRole}\" is not present in rightsByRole`,\n\t\t\tpath: \"auth.authorization.defaultRole\",\n\t\t});\n\t}\n\tif (table) {\n\t\tfor (const role of roles) {\n\t\t\tconst mapped = table[role];\n\t\t\tif (!Array.isArray(mapped)) {\n\t\t\t\tissues.push({\n\t\t\t\t\tmessage: `rightsByRole.${role} must be a string array`,\n\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const [index, entry] of mapped.entries()) {\n\t\t\t\tif (typeof entry !== \"string\") {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage: `rightsByRole.${role}[${index}] is not a string`,\n\t\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tparseAthenaRightKey(entry);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tissues.push({\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\terror instanceof Error ? error.message : `invalid right ${entry}`,\n\t\t\t\t\t\tpath: `auth.authorization.rightsByRole.${role}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn { issues, ok: issues.length === 0 };\n}\n\nexport function formatAthenaRightsResolutionDiagnostic(\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n): string {\n\tconst lines = [\n\t\t\"Auth authorization\",\n\t\t`Stored role ........ ${diagnostic.storedRole ?? \"(absent)\"}`,\n\t\t`Configured roles ... ${diagnostic.configuredRoles.length > 0\n\t\t\t? diagnostic.configuredRoles.join(\", \")\n\t\t\t: \"(none)\"\n\t\t}`,\n\t\t`Selected role ...... ${diagnostic.selectedRole ?? \"none\"}`,\n\t\t`Effective rights ... ${String(diagnostic.effectiveRightCount)}`,\n\t];\n\tif (diagnostic.reason) {\n\t\tlines.push(`Reason .............. ${diagnostic.reason}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function projectAthenaRightsResolutionForDevtools(\n\tdiagnostic: AthenaRightsResolutionDiagnostic | undefined,\n): {\n\tconfiguredRoles: readonly string[];\n\tdefaultRole: string | null;\n\teffectiveRights: readonly string[];\n\tmode: AthenaRightsResolutionMode;\n\treason: AthenaRightsResolutionReason | null;\n\tselectedRole: string | null;\n\tsource: AthenaRightsResolutionSource;\n\tstoredRole: string | null;\n} | null {\n\tif (!diagnostic) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tconfiguredRoles: diagnostic.configuredRoles,\n\t\tdefaultRole: diagnostic.defaultRole ?? null,\n\t\teffectiveRights: diagnostic.effectiveRights,\n\t\tmode: diagnostic.mode,\n\t\treason: diagnostic.reason ?? null,\n\t\tselectedRole: diagnostic.selectedRole ?? null,\n\t\tsource: diagnostic.source,\n\t\tstoredRole: diagnostic.storedRole ?? null,\n\t};\n}\n\nexport function formatAthenaRightsProjectionValidateDetail(\n\tauthorization: AthenaPrincipalRightsProjection,\n): string {\n\tconst mode = resolveAuthorizationMode(authorization);\n\tconst roles = configuredRoleNames(authorization);\n\tconst defaultRole = authorization.defaultRole?.trim() ?? \"\";\n\tconst table = authorization.rightsByRole ?? {};\n\tconst mapped =\n\t\tdefaultRole.length > 0 && Object.hasOwn(table, defaultRole) ? \"yes\" : \"no\";\n\tconst lines = [\n\t\t`Mode ................ ${mode}`,\n\t\t`Default role ......... ${defaultRole || \"(none)\"}`,\n\t\t`Configured roles ..... ${roles.length > 0 ? roles.join(\", \") : \"(none)\"}`,\n\t];\n\tif (mode === \"role\") {\n\t\tlines.push(`Default role mapped .. ${mapped}`);\n\t\tlines.push(\"Rights\");\n\t\tif (roles.length === 0) {\n\t\t\tlines.push(\"  (none)\");\n\t\t} else {\n\t\t\tfor (const role of roles) {\n\t\t\t\tconst count = asStringList(table[role]).length;\n\t\t\t\tlines.push(\n\t\t\t\t\t`  ${role} ${\".\".repeat(Math.max(1, 18 - role.length))} ${String(count)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction resolveRoleMode(\n\tuser: {\n\t\trole?: string | null;\n\t},\n\tauthorization?: AthenaPrincipalRightsProjection,\n): AthenaRightsResolution {\n\tconst storedRole = user.role?.trim() ?? \"\";\n\tconst table = authorization?.rightsByRole;\n\tif (storedRole) {\n\t\tconst mapped = lookupMappedRights(table, storedRole);\n\t\tif (mapped !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\trights: mapped,\n\t\t\t\trole: storedRole,\n\t\t\t\tsource: \"role\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: \"role_not_mapped\",\n\t\t\trights: [],\n\t\t\trole: storedRole,\n\t\t\tsource: \"none\",\n\t\t};\n\t}\n\tconst defaultRole = authorization?.defaultRole?.trim() ?? \"\";\n\tif (defaultRole) {\n\t\tconst mapped = lookupMappedRights(table, defaultRole);\n\t\tif (mapped !== undefined) {\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\trights: mapped,\n\t\t\t\trole: defaultRole,\n\t\t\t\tsource: \"default-role\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: \"default_role_not_mapped\",\n\t\t\trights: [],\n\t\t\trole: defaultRole,\n\t\t\tsource: \"none\",\n\t\t};\n\t}\n\treturn {\n\t\tok: false,\n\t\treason: \"no_rights_configured\",\n\t\trights: [],\n\t\trole: \"\",\n\t\tsource: \"none\",\n\t};\n}\n\nfunction resolveStoredMode(user: {\n\tmetadata?: unknown;\n\trights?: readonly string[];\n}): AthenaRightsResolution {\n\tif (user.rights !== undefined) {\n\t\tconst rights = asStringList(user.rights);\n\t\treturn {\n\t\t\tok: true,\n\t\t\trights,\n\t\t\trole: \"\",\n\t\t\tsource: \"stored\",\n\t\t};\n\t}\n\tconst metaRights = metadataRecord(user.metadata)?.rights;\n\tif (metaRights !== undefined) {\n\t\treturn {\n\t\t\tok: true,\n\t\t\trights: asStringList(metaRights),\n\t\t\trole: \"\",\n\t\t\tsource: \"stored\",\n\t\t};\n\t}\n\treturn {\n\t\tok: false,\n\t\treason: \"no_rights_configured\",\n\t\trights: [],\n\t\trole: \"\",\n\t\tsource: \"none\",\n\t};\n}\n\nfunction lookupMappedRights(\n\ttable: Readonly<Record<string, readonly string[]>> | undefined,\n\trole: string,\n): readonly string[] | undefined {\n\tif (!table || !Object.hasOwn(table, role)) {\n\t\treturn undefined;\n\t}\n\treturn asStringList(table[role]);\n}\n\nfunction asStringList(value: unknown): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter(Boolean);\n}\n\nfunction metadataRecord(\n\tmetadata: unknown,\n): Record<string, unknown> | undefined {\n\tif (metadata && typeof metadata === \"object\" && !Array.isArray(metadata)) {\n\t\treturn metadata as Record<string, unknown>;\n\t}\n\tif (typeof metadata === \"string\" && metadata.trim()) {\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(metadata);\n\t\t\tif (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n\t\t\t\treturn parsed as Record<string, unknown>;\n\t\t\t}\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction diagnosticFromResolution(\n\tresolution: AthenaRightsResolution,\n\tuser: { role?: string | null },\n\tauthorization: AthenaPrincipalRightsProjection | undefined,\n\tuserId: string | undefined,\n): AthenaRightsResolutionDiagnostic {\n\tconst storedRole = user.role?.trim() || undefined;\n\tconst defaultRole = authorization?.defaultRole?.trim() || undefined;\n\tconst selectedRole =\n\t\tresolution.source === \"none\" || resolution.role.length === 0\n\t\t\t? undefined\n\t\t\t: resolution.role;\n\treturn Object.freeze({\n\t\tconfiguredRoles: configuredRoleNames(authorization),\n\t\tdefaultRole,\n\t\teffectiveRightCount: resolution.rights.length,\n\t\teffectiveRights: resolution.rights,\n\t\tkind: ATHENA_RIGHTS_RESOLUTION_KIND,\n\t\tmode: resolveAuthorizationMode(authorization),\n\t\treason: resolution.ok ? undefined : resolution.reason,\n\t\tselectedRole,\n\t\tsource: resolution.source,\n\t\tstoredRole,\n\t\tuserId: userId?.trim() || \"unknown\",\n\t});\n}\n\nfunction emitAthenaRightsResolutionDiagnostic(\n\tdiagnostic: AthenaRightsResolutionDiagnostic,\n): void {\n\tlastDiagnostic = diagnostic;\n\tfor (const listener of [...listeners]) {\n\t\tlistener(diagnostic);\n\t}\n\tif (diagnostic.reason) {\n\t\tconsole.warn(\n\t\t\t\"[athena]\",\n\t\t\tformatAthenaRightsResolutionDiagnostic(diagnostic),\n\t\t);\n\t}\n}\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../safety/money.ts\";\nimport type {\n\tAthenaBillingCatalogConfig,\n\tBillingPrice,\n\tBillingProduct,\n} from \"../../../types.ts\";\n\nexport interface NormalizedAthenaBillingCatalog {\n\tprices: readonly BillingPrice[] | null;\n\tproducts: readonly BillingProduct[] | null;\n}\n\nfunction nonEmptyId(value: unknown, label: string): string {\n\tif (typeof value !== \"string\" || value.trim().length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: `billing.catalog ${label} requires a non-empty id.`,\n\t\t});\n\t}\n\treturn value.trim();\n}\n\nexport function normalizeAthenaBillingCatalog(\n\tcatalog?: AthenaBillingCatalogConfig,\n): NormalizedAthenaBillingCatalog | undefined {\n\tif (catalog == null) {\n\t\treturn undefined;\n\t}\n\tconst productsConfigured = Array.isArray(catalog.products);\n\tconst pricesConfigured = Array.isArray(catalog.prices);\n\tif (!productsConfigured && !pricesConfigured) {\n\t\treturn undefined;\n\t}\n\n\tconst products: BillingProduct[] = [];\n\tconst productIds = new Set<string>();\n\tif (productsConfigured) {\n\t\tfor (const entry of catalog.products ?? []) {\n\t\t\tconst id = nonEmptyId(entry.id, \"product\");\n\t\t\tif (productIds.has(id)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog product id ${id} is duplicated.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (typeof entry.name !== \"string\" || entry.name.trim().length === 0) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog product ${id} requires a name.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tproductIds.add(id);\n\t\t\tproducts.push({\n\t\t\t\tdescription: entry.description,\n\t\t\t\tid,\n\t\t\t\tmetadata: entry.metadata ?? {},\n\t\t\t\tname: entry.name.trim(),\n\t\t\t\traw: entry,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst prices: BillingPrice[] = [];\n\tconst priceIds = new Set<string>();\n\tif (pricesConfigured) {\n\t\tfor (const entry of catalog.prices ?? []) {\n\t\t\tconst id = nonEmptyId(entry.id, \"price\");\n\t\t\tif (priceIds.has(id)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog price id ${id} is duplicated.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst productId = nonEmptyId(entry.productId, \"price.productId\");\n\t\t\tif (productsConfigured && !productIds.has(productId)) {\n\t\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\t\t\tmessage: `billing.catalog price ${id} references unknown product ${productId}.`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tpriceIds.add(id);\n\t\t\tprices.push({\n\t\t\t\tamount: normalizeBillingMoney(entry.amount),\n\t\t\t\tid,\n\t\t\t\tinterval: entry.interval,\n\t\t\t\tmetadata: entry.metadata ?? {},\n\t\t\t\tproductId,\n\t\t\t\traw: entry,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tprices: pricesConfigured ? prices : null,\n\t\tproducts: productsConfigured ? products : null,\n\t};\n}\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { normalizeAthenaBillingCatalog } from \"../../../billing/runtime/local/catalog/normalize.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../../billing/types.ts\";\nimport {\n\tAUTH_UI_BILLING_PRESET_TABLES,\n\tEMBEDDED_BILLING_MIGRATIONS,\n\tEMBEDDED_BILLING_REQUIRED_TABLES,\n} from \"../../../migrations/embedded-billing/catalog.ts\";\nimport { EMBEDDED_CHAT_REQUIRED_TABLES } from \"../../../migrations/embedded-chat/catalog.ts\";\nimport { EMBEDDED_EVENT_INGRESS_REQUIRED_TABLES } from \"../../../migrations/embedded-event-ingress/catalog.ts\";\n\ntype BillingValidationCheck = {\n\tdetail?: string;\n\tgroup: \"billing\";\n\tid: string;\n\tstatus: \"ok\" | \"warn\" | \"error\" | \"skip\";\n\ttitle: string;\n};\n\nexport interface LocalBillingValidateInput {\n\tcatalog?: AthenaBillingCatalogConfig;\n\tproviders?: {\n\t\tmollie?: unknown;\n\t\tstripe?: unknown;\n\t};\n}\n\nexport function collectLocalBillingValidationChecks(\n\tinput: LocalBillingValidateInput | null | undefined,\n): BillingValidationCheck[] {\n\tif (input == null) {\n\t\treturn [];\n\t}\n\tconst hasProviders =\n\t\tinput.providers?.mollie != null || input.providers?.stripe != null;\n\tconst hasCatalog = input.catalog != null;\n\tif (!hasProviders && !hasCatalog) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdetail:\n\t\t\t\t\t\"athena.config.ts modules.billing enables packaged SQL only. Mollie credentials and billing.catalog live on createClient({ billing }) and are not visible to validate.\",\n\t\t\t\tgroup: \"billing\",\n\t\t\t\tid: \"billing.runtime.createClient\",\n\t\t\t\tstatus: \"skip\",\n\t\t\t\ttitle: \"Runtime billing\",\n\t\t\t},\n\t\t];\n\t}\n\tconst checks: BillingValidationCheck[] = [];\n\tconst mollieConfigured = input.providers?.mollie != null;\n\tconst stripeConfigured = input.providers?.stripe != null;\n\tchecks.push({\n\t\tdetail: mollieConfigured\n\t\t\t? \"configured\"\n\t\t\t: stripeConfigured\n\t\t\t\t? \"not configured (Stripe is registered separately)\"\n\t\t\t\t: \"not configured\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.provider.mollie\",\n\t\tstatus: mollieConfigured || stripeConfigured ? \"ok\" : \"warn\",\n\t\ttitle: \"Provider · Mollie\",\n\t});\n\tif (stripeConfigured) {\n\t\tchecks.push({\n\t\t\tdetail: \"configured\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.provider.stripe\",\n\t\t\tstatus: \"ok\",\n\t\t\ttitle: \"Provider · Stripe\",\n\t\t});\n\t}\n\n\tlet productsCount = 0;\n\tlet pricesCount = 0;\n\tlet catalogNormalized = false;\n\ttry {\n\t\tconst normalized = normalizeAthenaBillingCatalog(input.catalog);\n\t\tcatalogNormalized = normalized != null;\n\t\tproductsCount = normalized?.products?.length ?? 0;\n\t\tpricesCount = normalized?.prices?.length ?? 0;\n\t\tchecks.push({\n\t\t\tdetail: catalogNormalized\n\t\t\t\t? `${productsCount} configured`\n\t\t\t\t: \"billing.catalog.products is not configured\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.catalog.products\",\n\t\t\tstatus: catalogNormalized ? \"ok\" : \"warn\",\n\t\t\ttitle: \"Catalog · Products\",\n\t\t});\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\tcatalogNormalized && normalized?.prices != null\n\t\t\t\t\t? `${pricesCount} configured`\n\t\t\t\t\t: \"billing.catalog.prices is not configured\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.catalog.prices\",\n\t\t\tstatus: catalogNormalized && normalized?.prices != null ? \"ok\" : \"warn\",\n\t\t\ttitle: \"Catalog · Prices\",\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tchecks.push({\n\t\t\tdetail: message,\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.catalog\",\n\t\t\tstatus: \"error\",\n\t\t\ttitle: \"Catalog\",\n\t\t});\n\t\treturn checks;\n\t}\n\n\tconst productsAvailable =\n\t\tcatalogNormalized && input.catalog?.products != null;\n\tconst pricesAvailable = catalogNormalized && input.catalog?.prices != null;\n\tchecks.push({\n\t\tdetail: productsAvailable\n\t\t\t? \"available\"\n\t\t\t: \"unavailable · billing.catalog.products is not configured\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.capability.products.list\",\n\t\tstatus: productsAvailable ? \"ok\" : \"warn\",\n\t\ttitle: \"Capabilities · products.list\",\n\t});\n\tchecks.push({\n\t\tdetail: pricesAvailable\n\t\t\t? \"available\"\n\t\t\t: \"unavailable · billing.catalog.prices is not configured\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.capability.prices.list\",\n\t\tstatus: pricesAvailable ? \"ok\" : \"warn\",\n\t\ttitle: \"Capabilities · prices.list\",\n\t});\n\tchecks.push({\n\t\tdetail: mollieConfigured ? \"available\" : \"unavailable\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.capability.invoices.list\",\n\t\tstatus: mollieConfigured ? \"ok\" : \"warn\",\n\t\ttitle: \"Capabilities · invoices.list\",\n\t});\n\tchecks.push({\n\t\tdetail: mollieConfigured ? \"available\" : \"unavailable\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.capability.subscriptions.list\",\n\t\tstatus: mollieConfigured ? \"ok\" : \"warn\",\n\t\ttitle: \"Capabilities · subscriptions.list\",\n\t});\n\tconst hasFinality = EMBEDDED_BILLING_MIGRATIONS.some(\n\t\t(migration) => migration.version === 3,\n\t);\n\tchecks.push({\n\t\tdetail: hasFinality\n\t\t\t? `embedded catalog ${EMBEDDED_BILLING_REQUIRED_TABLES.join(\", \")}`\n\t\t\t: \"missing 0003 billing subject finality\",\n\t\tgroup: \"billing\",\n\t\tid: \"billing.schema.embedded-manifest\",\n\t\tstatus: hasFinality ? \"ok\" : \"error\",\n\t\ttitle: \"Schema · embedded billing tables\",\n\t});\n\tconst missingPresetTables = AUTH_UI_BILLING_PRESET_TABLES.filter(\n\t\t(name) =>\n\t\t\t!(EMBEDDED_BILLING_REQUIRED_TABLES as readonly string[]).includes(name),\n\t);\n\tchecks.push({\n\t\tdetail:\n\t\t\tmissingPresetTables.length === 0\n\t\t\t\t? AUTH_UI_BILLING_PRESET_TABLES.join(\", \")\n\t\t\t\t: `Auth UI presets missing from catalog: ${missingPresetTables.join(\", \")}`,\n\t\tgroup: \"billing\",\n\t\tid: \"billing.schema.auth-ui-presets\",\n\t\tstatus: missingPresetTables.length === 0 ? \"ok\" : \"error\",\n\t\ttitle: \"Catalog · Auth UI billing tables\",\n\t});\n\treturn checks;\n}\n\nexport const VALIDATE_LEDGER_TABLES = [\n\t\"athena_billing_migrations\",\n\t\"athena_chat_schema_migrations\",\n\t\"athena_event_ingress_migrations\",\n] as const;\n\nexport type ValidateLedgerTable = (typeof VALIDATE_LEDGER_TABLES)[number];\n\nexport function isValidateLedgerTable(\n\tname: string,\n): name is ValidateLedgerTable {\n\treturn (VALIDATE_LEDGER_TABLES as readonly string[]).includes(name);\n}\n\nexport interface EmbeddedSchemaInspectInput {\n\tathenaTables: readonly string[];\n\tbillingEnabled: boolean;\n\tbillingLedgerVersions: readonly number[];\n\tbillingTables: readonly string[];\n\tchatEnabled: boolean;\n\tchatLedgerVersions: readonly number[];\n\teventIngressEnabled: boolean;\n\teventIngressLedgerVersions: readonly number[];\n\tpublicTables: readonly string[];\n}\n\nfunction missingNames(\n\trequired: readonly string[],\n\tpresent: ReadonlySet<string>,\n): string[] {\n\treturn required.filter((name) => !present.has(name));\n}\n\nexport function collectEmbeddedSchemaDatabaseChecks(\n\tinput: EmbeddedSchemaInspectInput,\n): BillingValidationCheck[] {\n\tconst checks: BillingValidationCheck[] = [];\n\tconst billingPresent = new Set(\n\t\tinput.billingTables.map((name) => name.toLowerCase()),\n\t);\n\tconst publicPresent = new Set(\n\t\tinput.publicTables.map((name) => name.toLowerCase()),\n\t);\n\tconst athenaPresent = new Set(\n\t\tinput.athenaTables.map((name) => name.toLowerCase()),\n\t);\n\n\tif (input.billingEnabled) {\n\t\tconst missingTables = missingNames(\n\t\t\tEMBEDDED_BILLING_REQUIRED_TABLES,\n\t\t\tbillingPresent,\n\t\t);\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\tmissingTables.length === 0\n\t\t\t\t\t? EMBEDDED_BILLING_REQUIRED_TABLES.join(\", \")\n\t\t\t\t\t: `missing ${missingTables.join(\", \")}`,\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.tables\",\n\t\t\tstatus: missingTables.length === 0 ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · billing tables\",\n\t\t});\n\t\tconst expectedVersions = EMBEDDED_BILLING_MIGRATIONS.map(\n\t\t\t(migration) => migration.version,\n\t\t);\n\t\tconst missingVersions = expectedVersions.filter(\n\t\t\t(version) => !input.billingLedgerVersions.includes(version),\n\t\t);\n\t\tconst ledgerPresent = publicPresent.has(\"athena_billing_migrations\");\n\t\tchecks.push({\n\t\t\tdetail: ledgerPresent\n\t\t\t\t? missingVersions.length === 0\n\t\t\t\t\t? `athena_billing_migrations ${[...input.billingLedgerVersions].sort((a, b) => a - b).join(\",\")}`\n\t\t\t\t\t: `ledger missing versions ${missingVersions.join(\", \")}`\n\t\t\t\t: \"athena_billing_migrations is missing\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.ledger\",\n\t\t\tstatus: ledgerPresent && missingVersions.length === 0 ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · billing ledger\",\n\t\t});\n\t}\n\n\tif (input.billingEnabled || input.eventIngressEnabled) {\n\t\tconst missingIngress = missingNames(\n\t\t\tEMBEDDED_EVENT_INGRESS_REQUIRED_TABLES,\n\t\t\tathenaPresent,\n\t\t);\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\tmissingIngress.length === 0\n\t\t\t\t\t? \"athena.event_ingress, event_ledger, event_outbox\"\n\t\t\t\t\t: `missing ${missingIngress.join(\", \")}`,\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.event-ingress\",\n\t\t\tstatus: missingIngress.length === 0 ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · event ingress\",\n\t\t});\n\t\tconst ingressLedgerOk =\n\t\t\tpublicPresent.has(\"athena_event_ingress_migrations\") &&\n\t\t\tinput.eventIngressLedgerVersions.includes(1);\n\t\tchecks.push({\n\t\t\tdetail: ingressLedgerOk\n\t\t\t\t? \"athena_event_ingress_migrations version 1\"\n\t\t\t\t: \"event-ingress ledger is empty or missing\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.event-ingress-ledger\",\n\t\t\tstatus: ingressLedgerOk ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · event-ingress ledger\",\n\t\t});\n\t}\n\n\tif (input.chatEnabled) {\n\t\tconst missingChat = missingNames(\n\t\t\tEMBEDDED_CHAT_REQUIRED_TABLES,\n\t\t\tathenaPresent,\n\t\t);\n\t\tchecks.push({\n\t\t\tdetail:\n\t\t\t\tmissingChat.length === 0\n\t\t\t\t\t? \"nine chat runtime tables\"\n\t\t\t\t\t: `missing ${missingChat.join(\", \")}`,\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.chat\",\n\t\t\tstatus: missingChat.length === 0 ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · chat schema\",\n\t\t});\n\t\tconst chatLedgerOk =\n\t\t\tpublicPresent.has(\"athena_chat_schema_migrations\") &&\n\t\t\tinput.chatLedgerVersions.includes(1);\n\t\tchecks.push({\n\t\t\tdetail: chatLedgerOk\n\t\t\t\t? \"athena_chat_schema_migrations version 1\"\n\t\t\t\t: \"chat ledger is empty or missing\",\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.schema.chat-ledger\",\n\t\t\tstatus: chatLedgerOk ? \"ok\" : \"error\",\n\t\t\ttitle: \"Database · chat ledger\",\n\t\t});\n\t}\n\n\treturn checks;\n}\n\nconst NEXT_CONFIG_FILES = [\n\t\"next.config.ts\",\n\t\"next.config.mjs\",\n\t\"next.config.js\",\n\t\"next.config.mts\",\n] as const;\n\nconst BILLING_INGRESS_ROUTE_CANDIDATES = [\n\t\"src/app/api/athena/billing/webhook/[[...path]]/route.ts\",\n\t\"app/api/athena/billing/webhook/[[...path]]/route.ts\",\n\t\"src/app/api/athena/billing/webhook/[...path]/route.ts\",\n\t\"app/api/athena/billing/webhook/[...path]/route.ts\",\n] as const;\n\nfunction isNextApp(cwd: string): boolean {\n\treturn NEXT_CONFIG_FILES.some((name) => existsSync(join(cwd, name)));\n}\n\nfunction readIfExists(path: string): string | undefined {\n\tif (!existsSync(path)) {\n\t\treturn undefined;\n\t}\n\treturn readFileSync(path, \"utf8\");\n}\n\nfunction collectRouteSources(dir: string, acc: string[]): void {\n\tif (!existsSync(dir)) {\n\t\treturn;\n\t}\n\tfor (const entry of readdirSync(dir, { withFileTypes: true })) {\n\t\tif (\n\t\t\tentry.name === \"node_modules\" ||\n\t\t\tentry.name === \".next\" ||\n\t\t\tentry.name === \"dist\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst full = join(dir, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tcollectRouteSources(full, acc);\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.name === \"route.ts\" || entry.name === \"route.js\") {\n\t\t\tacc.push(readFileSync(full, \"utf8\"));\n\t\t}\n\t}\n}\n\nfunction usesUnifiedAthenaNextHandler(cwd: string): boolean {\n\tconst sources: string[] = [];\n\tcollectRouteSources(join(cwd, \"src\", \"app\"), sources);\n\tcollectRouteSources(join(cwd, \"app\"), sources);\n\treturn sources.some((source) =>\n\t\t/\\bcreateAthenaNextHandler\\s*\\(/.test(source),\n\t);\n}\n\nfunction billingIngressRouteMount(cwd: string): {\n\tdetail: string;\n\tok: boolean;\n} {\n\tfor (const relative of BILLING_INGRESS_ROUTE_CANDIDATES) {\n\t\tconst source = readIfExists(join(cwd, relative));\n\t\tif (source === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\bbillingIngress\\b/.test(source)) {\n\t\t\treturn { detail: relative, ok: true };\n\t\t}\n\t\tif (/\\bexport const \\{ POST \\} = billing\\b/.test(source)) {\n\t\t\treturn {\n\t\t\t\tdetail: `${relative} mounts Billing RPC instead of BillingIngress.`,\n\t\t\t\tok: false,\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdetail: [\n\t\t\t\"billing.ingestion.webhooks.enabled=true but no BillingIngress\",\n\t\t\t\"route was detected.\",\n\t\t\t\"\",\n\t\t\t\"Expected:\",\n\t\t\t\"app/api/athena/billing/webhook/[[...path]]/route.ts\",\n\t\t\t\"\",\n\t\t\t\"or use the unified Athena handler.\",\n\t\t].join(\"\\n\"),\n\t\tok: false,\n\t};\n}\n\nexport function collectBillingIngressRouteChecks(input: {\n\tbillingEnabled: boolean;\n\tcwd?: string;\n}): BillingValidationCheck[] {\n\tconst cwd = input.cwd;\n\tif (!input.billingEnabled || cwd == null || cwd === \"\") {\n\t\treturn [];\n\t}\n\tif (!isNextApp(cwd)) {\n\t\treturn [];\n\t}\n\tif (usesUnifiedAthenaNextHandler(cwd)) {\n\t\treturn [\n\t\t\t{\n\t\t\t\tdetail:\n\t\t\t\t\t\"createAthenaNextHandler dispatches /webhook before Billing RPC\",\n\t\t\t\tgroup: \"billing\",\n\t\t\t\tid: \"billing.ingress.route\",\n\t\t\t\tstatus: \"ok\",\n\t\t\t\ttitle: \"Billing webhook ingress\",\n\t\t\t},\n\t\t];\n\t}\n\tconst mount = billingIngressRouteMount(cwd);\n\treturn [\n\t\t{\n\t\t\tdetail: mount.detail,\n\t\t\tgroup: \"billing\",\n\t\t\tid: \"billing.ingress.route\",\n\t\t\tstatus: mount.ok ? \"ok\" : \"error\",\n\t\t\ttitle: \"Billing webhook ingress\",\n\t\t},\n\t];\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, DoctorCommand } from \"../../types.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport { formatDoctorReport, runCliDoctor } from \"./doctor.ts\";\n\nexport { doctorCatalog, doctorCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"doctor\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet json = false;\n\tlet plain = false;\n\tlet skipRuntime = false;\n\tlet strict = false;\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"doctor\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--plain\") {\n\t\t\tplain = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--strict\") {\n\t\t\tstrict = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--skip-runtime\") {\n\t\t\tskipRuntime = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"doctor\");\n\t}\n\treturn {\n\t\tcommand: \"doctor\",\n\t\tconfigPath,\n\t\tjson,\n\t\tplain,\n\t\tskipRuntime,\n\t\tstrict,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"doctor\");\n}\n\nexport function sessionTitle(): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: DoctorCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, logRaw, presentation, runtime } = ctx;\n\ttry {\n\t\tconst executeDoctor = runtime.runCliDoctor ?? runCliDoctor;\n\t\tconst report = await executeDoctor({\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tcwd: runtime.cwd,\n\t\t\tjson: parsed.json,\n\t\t\tplain: parsed.plain || presentation.noColor === true,\n\t\t\tskipRuntime: parsed.skipRuntime,\n\t\t\tstrict: parsed.strict,\n\t\t\tvalidateLocal: runtime.validateLocal,\n\t\t});\n\t\tif (parsed.json) {\n\t\t\tlog(JSON.stringify(report, null, 2));\n\t\t} else {\n\t\t\tlogRaw(\n\t\t\t\tframeBlock(formatDoctorReport(report, capabilities), capabilities),\n\t\t\t);\n\t\t}\n\t\tif (!report.ok) {\n\t\t\tsetCliExitCode(CliExitCode.Validation);\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, EnvCommand } from \"../../types.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport {\n\ttype EnvCheckMode,\n\tformatEnvCheckReport,\n\tvalidateProjectEnv,\n} from \"./project-env.ts\";\n\nexport { envCatalog, envCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"env\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tlet mode: EnvCheckMode = \"auto\";\n\tlet strict = false;\n\tlet json = false;\n\tconst files: string[] = [];\n\n\tlet index = 0;\n\tif (rest[0] === \"check\" || rest[0] === \"validate\") {\n\t\tindex = 1;\n\t} else if (rest[0] === \"help\") {\n\t\treturn { command: \"help\", topic: \"env\" };\n\t}\n\n\twhile (index < rest.length) {\n\t\tconst token = rest[index];\n\t\tindex += 1;\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"env\" };\n\t\t}\n\t\tif (token === \"--strict\") {\n\t\t\tstrict = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--mode\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Missing value for --mode option. Expected auto, direct, or gateway.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnextValue !== \"auto\" &&\n\t\t\t\tnextValue !== \"direct\" &&\n\t\t\t\tnextValue !== \"gateway\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid --mode value \"${nextValue}\". Expected auto, direct, or gateway.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tmode = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--file\" || token === \"-f\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --file option.\");\n\t\t\t}\n\t\t\tfiles.push(nextValue);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"env\");\n\t}\n\n\treturn {\n\t\tcommand: \"env\",\n\t\tfiles,\n\t\tjson,\n\t\tmode,\n\t\tstrict,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"env\");\n}\n\nexport function sessionTitle(_parsed: EnvCommand): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: EnvCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, logRaw, runtime } = ctx;\n\ttry {\n\t\tconst result = validateProjectEnv({\n\t\t\tcwd: runtime.cwd,\n\t\t\tfiles: parsed.files.length > 0 ? parsed.files : undefined,\n\t\t\tmode: parsed.mode,\n\t\t\tstrict: parsed.strict,\n\t\t});\n\t\tif (parsed.json) {\n\t\t\tlog(JSON.stringify(result, null, 2));\n\t\t} else {\n\t\t\tlogRaw(\n\t\t\t\tframeBlock(formatEnvCheckReport(result, capabilities), capabilities),\n\t\t\t);\n\t\t}\n\t\tif (result.errorCount > 0) {\n\t\t\tsetCliExitCode(CliExitCode.Validation);\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import {\n\tisCurrentAthenaGeneratedPath,\n\tisLegacyFlatAthenaGeneratedPath,\n} from \"../../../generator/config.ts\";\nimport { runSchemaGenerator } from \"../../../generator/pipeline.ts\";\nimport type {\n\tRunGeneratorResult,\n\tSkippedGeneratedArtifact,\n\tWrittenGeneratedArtifact,\n} from \"../../../generator/types.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { isDebugEnabled } from \"../../debug.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type { CliCommand, GenerateCommand } from \"../../types.ts\";\n\nexport { generateCatalog, generateCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"generate\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet dryRun = false;\n\tlet writeConfig = true;\n\tlet discoverSchemas = true;\n\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"generate\" };\n\t\t}\n\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--no-write-config\") {\n\t\t\twriteConfig = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--write-config\") {\n\t\t\twriteConfig = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--no-discover-schemas\") {\n\t\t\tdiscoverSchemas = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow unknownOptionError(token, \"generate\");\n\t}\n\n\treturn {\n\t\tcommand: \"generate\",\n\t\tconfigPath,\n\t\tdiscoverSchemas,\n\t\tdryRun,\n\t\twriteConfig,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"generate\");\n}\n\nfunction normalizePath(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction isLegacyConfigRegistryTarget(target: string): boolean {\n\treturn isLegacyFlatAthenaGeneratedPath(target);\n}\n\nfunction isFlatSchemaTarget(target: string): boolean {\n\treturn normalizePath(target) === \"athena/schema.ts\";\n}\n\nfunction isCanonicalRegistryTarget(target: string): boolean {\n\treturn isCurrentAthenaGeneratedPath(target);\n}\n\nfunction formatProviderLine(result: RunGeneratorResult): string {\n\tconst { provider } = result.config;\n\tif (provider.kind === \"postgres\") {\n\t\tconst schemaList = Array.isArray(provider.schemas)\n\t\t\t? provider.schemas.join(\",\")\n\t\t\t: typeof provider.schemas === \"string\"\n\t\t\t\t? provider.schemas\n\t\t\t\t: \"public\";\n\t\tconst database = provider.database ? ` database=${provider.database}` : \"\";\n\t\tconst backend =\n\t\t\tprovider.mode === \"gateway\" && provider.backend\n\t\t\t\t? ` backend=${provider.backend}`\n\t\t\t\t: \"\";\n\t\treturn `[provider] kind=${provider.kind} mode=${provider.mode}${database}${backend} schemas=${schemaList}`;\n\t}\n\n\tconst datacenter = provider.datacenter\n\t\t? ` datacenter=${provider.datacenter}`\n\t\t: \"\";\n\treturn `[provider] kind=${provider.kind} mode=${provider.mode} keyspace=${provider.keyspace} contactPoints=${provider.contactPoints.join(\",\")}${datacenter}`;\n}\n\nfunction formatFilterLine(result: RunGeneratorResult): string | undefined {\n\tconst { includeTables, excludeTables } = result.config.filter;\n\tif (includeTables.length === 0 && excludeTables.length === 0) {\n\t\treturn;\n\t}\n\n\treturn `[filter] include=${includeTables.length > 0 ? includeTables.join(\",\") : \"-\"} exclude=${excludeTables.length > 0 ? excludeTables.join(\",\") : \"-\"}`;\n}\n\nfunction formatGeneratorModeLines(result: RunGeneratorResult): string[] {\n\tconst lines = [\n\t\t`[mode] preset=${result.config.output.preset} format=${result.config.output.format} modelTarget=${result.config.output.targets.model}`,\n\t\tformatProviderLine(result),\n\t\t`[targets] schema=${result.config.output.targets.schema} database=${result.config.output.targets.database} registry=${result.config.output.targets.registry}`,\n\t];\n\tconst filterLine = formatFilterLine(result);\n\tif (filterLine) {\n\t\tlines.push(filterLine);\n\t}\n\n\tif (result.config.output.format === \"define-model\") {\n\t\tlines.push(\n\t\t\t'[note] Legacy define-model compatibility output is active. Set output.format=\"table-builder\" or ATHENA_GENERATOR_OUTPUT_FORMAT=table-builder to emit table(...).schema(...).columns(...).primaryKey(...).',\n\t\t);\n\t}\n\n\tif (result.config.output.preset === \"legacy\") {\n\t\tlines.push(\n\t\t\t'[note] Legacy (N-1) preset is active — flat athena/* output. Prefer output.preset=\"athena-direct\" for athena/generated/* (or src/lib/athena/generated/*).',\n\t\t);\n\t}\n\n\tlines.push(\n\t\t\"[note] Default generator mode is preset=athena-direct + format=table-builder → athena/generated/ (next to athena/migrations). src/lib/athena/generated remains accepted. findManyAst only affects runtime findMany(...) transport and does not enable generator table output.\",\n\t);\n\n\tif (\n\t\tisLegacyConfigRegistryTarget(result.config.output.targets.registry) &&\n\t\t!isCanonicalRegistryTarget(result.config.output.targets.registry)\n\t) {\n\t\tlines.push(\n\t\t\t'[warn] Registry target is a legacy N-1 path (flat athena/*). Prefer athena/generated/registry.ts (or src/lib/athena/generated/registry.ts).',\n\t\t);\n\t}\n\n\tif (isFlatSchemaTarget(result.config.output.targets.schema)) {\n\t\tlines.push(\n\t\t\t\"[warn] Schema target points at athena/schema.ts. Prefer schema-scoped output under athena/generated/schema/{schema_kebab}.ts.\",\n\t\t);\n\t}\n\n\treturn lines;\n}\n\nfunction formatSkippedArtifactLine(artifact: SkippedGeneratedArtifact): string {\n\tif (artifact.reason === \"protected-existing-file\") {\n\t\treturn ` [skip] ${artifact.path} (existing ${artifact.kind} artifacts are protected from overwrite; set output.artifactWrite.${artifact.kind}=\"merge\"|\"overwrite\" or delete/retarget the file)`;\n\t}\n\n\tif (artifact.reason === \"already-current\") {\n\t\tconst custom =\n\t\t\tartifact.preservedCustom && artifact.preservedCustom.length > 0\n\t\t\t\t? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n\t\t\t\t: \"\";\n\t\treturn ` [ok] ${artifact.path} (already current${custom})`;\n\t}\n\n\tif (artifact.reason === \"merge-conflict\") {\n\t\treturn ` [skip] ${artifact.path} (merge conflict: ${artifact.detail ?? \"see conflicts\"}; file left unchanged)`;\n\t}\n\n\tif (artifact.reason === \"merge-lint-failed\") {\n\t\treturn ` [skip] ${artifact.path} (merge lint failed: ${artifact.detail ?? \"invalid merged TypeScript\"}; file left unchanged)`;\n\t}\n\n\tif (artifact.reason === \"merge-unparseable\") {\n\t\treturn ` [skip] ${artifact.path} (existing ${artifact.kind} artifact is not mergeable; delete, retarget, or set output.artifactWrite.${artifact.kind}=\"overwrite\")`;\n\t}\n\n\treturn ` [skip] ${artifact.path}`;\n}\n\nfunction formatWrittenArtifactLine(artifact: WrittenGeneratedArtifact): string {\n\tif (artifact.reason === \"merged\") {\n\t\tconst added =\n\t\t\tartifact.added && artifact.added.length > 0\n\t\t\t\t? ` +${artifact.added.length}: ${artifact.added.slice(0, 4).join(\", \")}${artifact.added.length > 4 ? \"…\" : \"\"}`\n\t\t\t\t: \"\";\n\t\tconst custom =\n\t\t\tartifact.preservedCustom && artifact.preservedCustom.length > 0\n\t\t\t\t? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n\t\t\t\t: \"\";\n\t\treturn ` [merge] ${artifact.path}${added}${custom}`;\n\t}\n\n\tif (artifact.reason === \"overwritten\") {\n\t\treturn ` [write] ${artifact.path} (overwritten)`;\n\t}\n\n\treturn ` - ${artifact.path}`;\n}\n\nfunction formatCustomPreserveWarnings(result: RunGeneratorResult): string[] {\n\tconst lines: string[] = [];\n\tfor (const artifact of result.writtenDetails) {\n\t\tif (artifact.preservedCustom && artifact.preservedCustom.length > 0) {\n\t\t\tlines.push(\n\t\t\t\t` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`,\n\t\t\t);\n\t\t}\n\t}\n\tfor (const artifact of result.skippedFiles) {\n\t\tif (\n\t\t\tartifact.reason === \"already-current\" &&\n\t\t\tartifact.preservedCustom &&\n\t\t\tartifact.preservedCustom.length > 0\n\t\t) {\n\t\t\tlines.push(\n\t\t\t\t` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`,\n\t\t\t);\n\t\t}\n\t}\n\treturn lines;\n}\n\nfunction formatConfigEnsureLines(result: RunGeneratorResult): string[] {\n\tif (!result.configEnsure) {\n\t\treturn [];\n\t}\n\n\tconst { action, path, schemas, reason, changes } = result.configEnsure;\n\tconst lines = [\n\t\t`[config] ${action} ${path} schemas=${schemas.join(\",\") || \"-\"}`,\n\t];\n\tif (reason) {\n\t\tlines.push(`[config] reason: ${reason}`);\n\t}\n\tif (changes.length > 0 && action !== \"unchanged\") {\n\t\tlines.push(\n\t\t\t`[config] changes: ${changes.slice(0, 4).join(\"; \")}${changes.length > 4 ? \"…\" : \"\"}`,\n\t\t);\n\t}\n\treturn lines;\n}\n\nexport function sessionTitle(parsed: GenerateCommand): string {\n\treturn parsed.dryRun ? \"athena-js generate · dry-run\" : \"athena-js generate\";\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: GenerateCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, runtime } = ctx;\n\tconst runGenerator = runtime.runGenerator ?? runSchemaGenerator;\n\tlet result: RunGeneratorResult;\n\ttry {\n\t\tif (isDebugEnabled()) {\n\t\t\terrorLog(\n\t\t\t\t`[athena-js] generate starting (dryRun=${parsed.dryRun} writeConfig=${parsed.writeConfig} discoverSchemas=${parsed.discoverSchemas}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`,\n\t\t\t);\n\t\t}\n\t\tresult = await runGenerator({\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tdiscoverSchemas: parsed.discoverSchemas,\n\t\t\tdryRun: parsed.dryRun,\n\t\t\twriteConfig: parsed.writeConfig,\n\t\t});\n\t} catch (error) {\n\t\tconst formatted = formatGeneratorError(error, parsed.configPath);\n\t\tlogCliError(formatted, errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t\treturn;\n\t}\n\n\tif (parsed.dryRun) {\n\t\tlog(\n\t\t\t`[dry-run] Generated ${result.files.length} files from ${result.configPath}`,\n\t\t);\n\t\tfor (const line of formatGeneratorModeLines(result)) {\n\t\t\tlog(line);\n\t\t}\n\t\tfor (const line of formatConfigEnsureLines(result)) {\n\t\t\tlog(line);\n\t\t}\n\t\tfor (const file of result.files) {\n\t\t\tlog(` - ${file.path}`);\n\t\t}\n\t\tif (result.writtenDetails?.length || result.skippedFiles?.length) {\n\t\t\tfor (const artifact of result.writtenDetails ?? []) {\n\t\t\t\tif (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n\t\t\t\t\tlog(formatWrittenArtifactLine(artifact));\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const artifact of result.skippedFiles ?? []) {\n\t\t\t\tif (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n\t\t\t\t\tlog(formatSkippedArtifactLine(artifact));\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const line of formatCustomPreserveWarnings(result)) {\n\t\t\t\tlog(line);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tlog(\n\t\t`Generated ${result.writtenFiles.length} files from ${result.configPath}`,\n\t);\n\tfor (const line of formatGeneratorModeLines(result)) {\n\t\tlog(line);\n\t}\n\tfor (const line of formatConfigEnsureLines(result)) {\n\t\tlog(line);\n\t}\n\tconst detailByPath = new Map<string, WrittenGeneratedArtifact>();\n\tfor (const detail of result.writtenDetails ?? []) {\n\t\tdetailByPath.set(detail.path, detail);\n\t}\n\tfor (const filePath of result.writtenFiles) {\n\t\tconst detail = detailByPath.get(filePath);\n\t\tif (\n\t\t\tdetail &&\n\t\t\t(detail.reason === \"merged\" || detail.reason === \"overwritten\")\n\t\t) {\n\t\t\tlog(formatWrittenArtifactLine(detail));\n\t\t} else {\n\t\t\tlog(` - ${filePath}`);\n\t\t}\n\t}\n\tfor (const artifact of result.skippedFiles) {\n\t\tlog(formatSkippedArtifactLine(artifact));\n\t}\n\tfor (const line of formatCustomPreserveWarnings(result)) {\n\t\tlog(line);\n\t}\n}\n","import type {\n  GeneratedArtifact,\n  GeneratorArtifactKind,\n  GeneratorArtifactWritePolicy,\n  SkippedGeneratedArtifactReason,\n  WrittenGeneratedArtifactReason,\n} from \"./types.ts\";\n\nexport interface ArtifactMergeResult {\n  action: \"write\" | \"unchanged\" | \"skip\";\n  added: string[];\n  conflicts: string[];\n  content?: string;\n  detail?: string;\n  lintErrors: string[];\n  preservedCustom: string[];\n  skipReason?: SkippedGeneratedArtifactReason;\n  writeReason?: WrittenGeneratedArtifactReason;\n}\n\ninterface StyleFingerprint {\n  indent: string;\n  newline: \"\\n\" | \"\\r\\n\";\n  quote: \"'\" | '\"';\n  semicolons: boolean;\n  trailingComma: boolean;\n}\n\ninterface NamedImport {\n  end: number;\n  module: string;\n  names: string[];\n  raw: string;\n  start: number;\n}\n\ninterface ObjectEntry {\n  key: string;\n  raw: string;\n  value: string;\n}\n\ninterface DefineBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  callName: string;\n  entries: ObjectEntry[];\n  exportName: string;\n  fullEnd: number;\n  fullStart: number;\n  kind: \"database\" | \"registry\";\n  raw: string;\n}\n\ninterface MetaBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  entries: ObjectEntry[];\n  fullEnd: number;\n  fullStart: number;\n  raw: string;\n}\n\nconst IMPORT_RE =\n  /^import\\s+(?:type\\s+)?(?:\\{([^}]*)\\}|([A-Za-z_$][\\w$]*))\\s+from\\s+(['\"])([^'\"]+)\\3\\s*;?\\s*$/gm;\n\nconst DEFINE_EXPORT_RE =\n  /export\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*(define(?:Database|Registry))\\s*\\(\\s*\\{/g;\n\nconst META_EXPORT_RE = /export\\s+const\\s+__athena_schema_meta\\s*=\\s*\\{/g;\n\nconst KNOWN_META_KEYS = new Set([\n  \"schemaVersion\",\n  \"generatedAt\",\n  \"database\",\n  \"outputPreset\",\n  \"outputFormat\",\n]);\n\nfunction detectNewline(source: string): \"\\n\" | \"\\r\\n\" {\n  return source.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction detectStyle(source: string): StyleFingerprint {\n  const newline = detectNewline(source);\n  const single = (source.match(/'/g) ?? []).length;\n  const double = (source.match(/\"/g) ?? []).length;\n  const quote: \"'\" | '\"' = double > single ? '\"' : \"'\";\n\n  const importLines = source\n    .split(/\\r?\\n/)\n    .filter((line) => line.trimStart().startsWith(\"import \"));\n  const semicolons =\n    importLines.length > 0\n      ? importLines.filter((line) => line.trimEnd().endsWith(\";\")).length >=\n        importLines.length / 2\n      : false;\n\n  const objectLines = source\n    .split(/\\r?\\n/)\n    .map((line) => line.trim())\n    .filter((line) => /^[A-Za-z0-9_'\"]+\\s*:\\s*.+/.test(line));\n  const trailingComma =\n    objectLines.length > 0\n      ? objectLines.filter((line) => line.endsWith(\",\")).length >=\n        Math.ceil(objectLines.length / 2)\n      : true;\n\n  const indentMatch = source.match(/\\n([ \\t]+)\\S/);\n  const indent = indentMatch?.[1] ?? \"  \";\n\n  return { indent, newline, quote, semicolons, trailingComma };\n}\n\nfunction quoteString(value: string, quote: \"'\" | '\"'): string {\n  const escaped = value\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(new RegExp(quote, \"g\"), `\\\\${quote}`);\n  return `${quote}${escaped}${quote}`;\n}\n\nfunction parseNamedImports(source: string): NamedImport[] {\n  const imports: NamedImport[] = [];\n  IMPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = IMPORT_RE.exec(source);\n  while (match !== null) {\n    const named = match[1];\n    const defaultName = match[2];\n    const module = match[4];\n    const names = named\n      ? named\n          .split(\",\")\n          .map((part) => part.trim())\n          .filter(Boolean)\n          .map((part) => {\n            const alias = part.split(/\\s+as\\s+/);\n            return (alias[1] ?? alias[0]).trim();\n          })\n      : defaultName\n        ? [defaultName]\n        : [];\n\n    imports.push({\n      end: match.index + match[0].length,\n      module,\n      names,\n      raw: match[0],\n      start: match.index,\n    });\n    match = IMPORT_RE.exec(source);\n  }\n  return imports;\n}\n\nfunction findMatchingBrace(source: string, openIndex: number): number {\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplate = false;\n  let escaped = false;\n\n  for (let i = openIndex; i < source.length; i += 1) {\n    const ch = source[i];\n    if (escaped) {\n      escaped = false;\n      continue;\n    }\n    if (ch === \"\\\\\" && (inSingle || inDouble || inTemplate)) {\n      escaped = true;\n      continue;\n    }\n    if (!(inDouble || inTemplate) && ch === \"'\") {\n      inSingle = !inSingle;\n      continue;\n    }\n    if (!(inSingle || inTemplate) && ch === '\"') {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!(inSingle || inDouble) && ch === \"`\") {\n      inTemplate = !inTemplate;\n      continue;\n    }\n    if (inSingle || inDouble || inTemplate) {\n      continue;\n    }\n    if (ch === \"{\") {\n      depth += 1;\n    } else if (ch === \"}\") {\n      depth -= 1;\n      if (depth === 0) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nfunction parseObjectEntries(body: string): ObjectEntry[] {\n  const entries: ObjectEntry[] = [];\n  const lines = body.split(/\\r?\\n/);\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"//\") || trimmed.startsWith(\"/*\")) {\n      continue;\n    }\n    const withoutComma = trimmed.endsWith(\",\")\n      ? trimmed.slice(0, -1).trimEnd()\n      : trimmed;\n    const match = withoutComma.match(\n      /^([A-Za-z_$][\\w$]*|['\"][^'\"]+['\"])\\s*:\\s*(.+)$/\n    );\n    if (!match) {\n      continue;\n    }\n    const keyRaw = match[1];\n    const key =\n      keyRaw.startsWith(\"'\") || keyRaw.startsWith('\"')\n        ? keyRaw.slice(1, -1)\n        : keyRaw;\n    entries.push({\n      key,\n      raw: trimmed,\n      value: match[2].trim(),\n    });\n  }\n  return entries;\n}\n\nfunction parseDefineBlocks(source: string): DefineBlock[] {\n  const blocks: DefineBlock[] = [];\n  DEFINE_EXPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = DEFINE_EXPORT_RE.exec(source);\n  while (match !== null) {\n    const exportName = match[1];\n    const callName = match[2];\n    const openBrace = match.index + match[0].lastIndexOf(\"{\");\n    const closeBrace = findMatchingBrace(source, openBrace);\n    if (closeBrace >= 0) {\n      const body = source.slice(openBrace + 1, closeBrace);\n      const fullEnd = (() => {\n        let i = closeBrace + 1;\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \")\") {\n          i += 1;\n        }\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \";\") {\n          i += 1;\n        }\n        return i;\n      })();\n      blocks.push({\n        bodyEnd: closeBrace,\n        bodyStart: openBrace + 1,\n        callName,\n        entries: parseObjectEntries(body),\n        exportName,\n        fullEnd,\n        fullStart: match.index,\n        kind: callName === \"defineDatabase\" ? \"database\" : \"registry\",\n        raw: source.slice(match.index, fullEnd),\n      });\n    }\n    match = DEFINE_EXPORT_RE.exec(source);\n  }\n  return blocks;\n}\n\nfunction parseMetaBlock(source: string): MetaBlock | undefined {\n  META_EXPORT_RE.lastIndex = 0;\n  const match = META_EXPORT_RE.exec(source);\n  if (!match) {\n    return;\n  }\n  const openBrace = match.index + match[0].lastIndexOf(\"{\");\n  const closeBrace = findMatchingBrace(source, openBrace);\n  if (closeBrace < 0) {\n    return;\n  }\n  let fullEnd = closeBrace + 1;\n  const after = source.slice(fullEnd);\n  const asConst = after.match(/^\\s*as\\s+const\\s*;?/);\n  if (asConst) {\n    fullEnd += asConst[0].length;\n  } else if (source[fullEnd] === \";\") {\n    fullEnd += 1;\n  }\n  return {\n    bodyEnd: closeBrace,\n    bodyStart: openBrace + 1,\n    entries: parseObjectEntries(source.slice(openBrace + 1, closeBrace)),\n    fullEnd,\n    fullStart: match.index,\n    raw: source.slice(match.index, fullEnd),\n  };\n}\n\nfunction hasImportBinding(\n  imports: NamedImport[],\n  name: string,\n  module?: string\n): boolean {\n  return imports.some(\n    (item) =>\n      item.names.includes(name) &&\n      (module === undefined ||\n        normalizeModulePath(item.module) === normalizeModulePath(module))\n  );\n}\n\nfunction findImportForName(\n  imports: NamedImport[],\n  name: string\n): NamedImport | undefined {\n  return imports.find((item) => item.names.includes(name));\n}\n\nfunction normalizeModulePath(modulePath: string): string {\n  return modulePath\n    .replace(/\\\\/g, \"/\")\n    .replace(/^\\.\\//, \"\")\n    .replace(/\\.ts$/, \"\");\n}\n\nfunction formatImport(\n  names: string[],\n  modulePath: string,\n  style: StyleFingerprint\n): string {\n  const body = `import { ${names.join(\", \")} } from ${quoteString(modulePath, style.quote)}`;\n  return style.semicolons ? `${body};` : body;\n}\n\nfunction formatObjectEntry(\n  key: string,\n  value: string,\n  style: StyleFingerprint,\n  isLast: boolean\n): string {\n  const needsQuote = !/^[A-Za-z_$][\\w$]*$/.test(key);\n  const renderedKey = needsQuote ? quoteString(key, style.quote) : key;\n  const trimmedValue = value.trim();\n  const canShorthand =\n    !needsQuote && renderedKey === key && trimmedValue === key;\n  const comma = !isLast || style.trailingComma ? \",\" : \"\";\n  const property = canShorthand\n    ? renderedKey\n    : `${renderedKey}: ${trimmedValue}`;\n  return `${style.indent}${property}${comma}`;\n}\n\nfunction replaceRange(\n  source: string,\n  start: number,\n  end: number,\n  insertion: string\n): string {\n  return source.slice(0, start) + insertion + source.slice(end);\n}\n\nfunction collectDuplicateKeys(entries: ObjectEntry[]): string[] {\n  const seen = new Set<string>();\n  const dupes: string[] = [];\n  for (const entry of entries) {\n    if (seen.has(entry.key)) {\n      dupes.push(entry.key);\n    }\n    seen.add(entry.key);\n  }\n  return dupes;\n}\n\nfunction collectDuplicateImportBindings(imports: NamedImport[]): string[] {\n  const seen = new Set<string>();\n  const dupes: string[] = [];\n  for (const item of imports) {\n    for (const name of item.names) {\n      if (seen.has(name)) {\n        dupes.push(name);\n      }\n      seen.add(name);\n    }\n  }\n  return dupes;\n}\n\nfunction lintArtifactSource(\n  source: string,\n  kind: \"database\" | \"registry\"\n): string[] {\n  const errors: string[] = [];\n  const imports = parseNamedImports(source);\n  const dupImports = collectDuplicateImportBindings(imports);\n  if (dupImports.length > 0) {\n    errors.push(`duplicate import bindings: ${dupImports.join(\", \")}`);\n  }\n\n  const blocks = parseDefineBlocks(source).filter(\n    (block) => block.kind === kind\n  );\n  if (blocks.length === 0) {\n    errors.push(\n      `missing export const … = define${kind === \"database\" ? \"Database\" : \"Registry\"}({…})`\n    );\n    return errors;\n  }\n  if (blocks.length > 1) {\n    errors.push(\n      `multiple define${kind === \"database\" ? \"Database\" : \"Registry\"} exports found`\n    );\n  }\n\n  const block = blocks[0];\n  const dupKeys = collectDuplicateKeys(block.entries);\n  if (dupKeys.length > 0) {\n    errors.push(`duplicate object keys: ${dupKeys.join(\", \")}`);\n  }\n\n  for (const entry of block.entries) {\n    const valueId = entry.value.match(/^[A-Za-z_$][\\w$]*$/)?.[0];\n    // value should be imported (schema const / database const)\n    if (\n      valueId &&\n      !hasImportBinding(imports, valueId) &&\n      valueId !== block.exportName &&\n      !(\n        source.includes(`const ${valueId}`) ||\n        source.includes(`function ${valueId}`)\n      )\n    ) {\n      errors.push(`value \"${valueId}\" for key \"${entry.key}\" is not imported`);\n    }\n  }\n\n  if (kind === \"database\" && !hasImportBinding(imports, \"defineDatabase\")) {\n    errors.push(\"missing defineDatabase import\");\n  }\n  if (kind === \"registry\" && !hasImportBinding(imports, \"defineRegistry\")) {\n    errors.push(\"missing defineRegistry import\");\n  }\n\n  return errors;\n}\n\nfunction preservedCustomUnits(\n  existing: string,\n  generated: string,\n  kind: \"database\" | \"registry\"\n): string[] {\n  const custom: string[] = [];\n  const existingImports = parseNamedImports(existing);\n  const generatedImports = parseNamedImports(generated);\n  const generatedModules = new Set(\n    generatedImports.map((item) => normalizeModulePath(item.module))\n  );\n  const generatedNames = new Set(\n    generatedImports.flatMap((item) => item.names)\n  );\n\n  for (const item of existingImports) {\n    const moduleNorm = normalizeModulePath(item.module);\n    if (moduleNorm.includes(\"@xylex-group/athena\")) {\n      continue;\n    }\n    const unexpectedNames = item.names.filter(\n      (name) => !generatedNames.has(name)\n    );\n    if (unexpectedNames.length > 0 && !generatedModules.has(moduleNorm)) {\n      custom.push(\n        `import { ${unexpectedNames.join(\", \")} } from '${item.module}'`\n      );\n    } else if (unexpectedNames.length > 0) {\n      custom.push(`import binding(s): ${unexpectedNames.join(\", \")}`);\n    }\n  }\n\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === kind\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === kind\n  );\n  const generatedKeys = new Set(\n    generatedBlocks[0]?.entries.map((entry) => entry.key) ?? []\n  );\n  for (const entry of existingBlocks[0]?.entries ?? []) {\n    if (!generatedKeys.has(entry.key)) {\n      custom.push(`${kind} entry: ${entry.key}: ${entry.value}`);\n    }\n  }\n\n  if (kind === \"registry\") {\n    const existingMeta = parseMetaBlock(existing);\n    const generatedMeta = parseMetaBlock(generated);\n    const generatedMetaKeys = new Set(\n      generatedMeta?.entries.map((entry) => entry.key) ?? []\n    );\n    for (const entry of existingMeta?.entries ?? []) {\n      if (\n        !(generatedMetaKeys.has(entry.key) || KNOWN_META_KEYS.has(entry.key))\n      ) {\n        custom.push(`meta entry: ${entry.key}: ${entry.value}`);\n      }\n    }\n  }\n\n  // Extra top-level export const lines not in generated output\n  const exportConstRe = /^export\\s+const\\s+([A-Za-z_$][\\w$]*)\\b/gm;\n  const generatedExports = new Set<string>();\n  let match: RegExpExecArray | null;\n  exportConstRe.lastIndex = 0;\n  match = exportConstRe.exec(generated);\n  while (match !== null) {\n    generatedExports.add(match[1]);\n    match = exportConstRe.exec(generated);\n  }\n  exportConstRe.lastIndex = 0;\n  match = exportConstRe.exec(existing);\n  while (match !== null) {\n    if (\n      !generatedExports.has(match[1]) &&\n      match[1] !== \"__athena_schema_meta\"\n    ) {\n      custom.push(`export const ${match[1]}`);\n    }\n    match = exportConstRe.exec(existing);\n  }\n\n  return custom;\n}\n\nfunction insertImportAfterPackageImports(\n  source: string,\n  importLine: string,\n  style: StyleFingerprint\n): string {\n  const imports = parseNamedImports(source);\n  if (imports.length === 0) {\n    return `${importLine}${style.newline}${source}`;\n  }\n\n  // Prefer inserting after the last local/relative import; if none, after last import.\n  let anchor = imports.at(-1);\n  for (let i = imports.length - 1; i >= 0; i -= 1) {\n    if (imports[i].module.startsWith(\".\")) {\n      anchor = imports[i];\n      break;\n    }\n  }\n\n  if (!anchor) {\n    return `${importLine}${style.newline}${source}`;\n  }\n\n  const insertAt = anchor.end;\n  const before = source.slice(0, insertAt);\n  const after = source.slice(insertAt);\n  const needsLeadingNl = !before.endsWith(\"\\n\");\n  const prefix = needsLeadingNl ? style.newline : \"\";\n  return `${before}${prefix}${importLine}${after.startsWith(\"\\n\") || after.startsWith(\"\\r\\n\") ? \"\" : style.newline}${after}`;\n}\n\nfunction rewriteObjectBody(\n  entries: ObjectEntry[],\n  style: StyleFingerprint\n): string {\n  if (entries.length === 0) {\n    return style.newline;\n  }\n  const lines = entries.map((entry, index) =>\n    formatObjectEntry(\n      entry.key,\n      entry.value,\n      style,\n      index === entries.length - 1\n    )\n  );\n  return `${style.newline}${lines.join(style.newline)}${style.newline}`;\n}\n\nfunction mergeDatabaseArtifact(\n  existing: string,\n  generated: string\n): ArtifactMergeResult {\n  const style = detectStyle(existing);\n  const generatedStyle = detectStyle(generated);\n  const effectiveStyle: StyleFingerprint = {\n    ...style,\n    // Prefer existing fingerprint; fall back to generated if existing is empty-ish\n    quote:\n      existing.includes('\"') || existing.includes(\"'\")\n        ? style.quote\n        : generatedStyle.quote,\n  };\n\n  const generatedImports = parseNamedImports(generated);\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === \"database\"\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === \"database\"\n  );\n\n  if (existingBlocks.length === 0 || generatedBlocks.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"could not locate defineDatabase({…}) export for merge\",\n      lintErrors: [],\n      preservedCustom: [],\n      skipReason: \"merge-unparseable\",\n    };\n  }\n\n  const generatedBlock = generatedBlocks[0];\n  const conflicts: string[] = [];\n  const added: string[] = [];\n  let next = existing;\n\n  // Ensure defineDatabase import\n  if (!hasImportBinding(parseNamedImports(next), \"defineDatabase\")) {\n    const pkgImport = generatedImports.find((item) =>\n      item.names.includes(\"defineDatabase\")\n    );\n    if (pkgImport) {\n      const line = formatImport(\n        [\"defineDatabase\"],\n        pkgImport.module,\n        effectiveStyle\n      );\n      next = insertImportAfterPackageImports(next, line, effectiveStyle);\n      added.push(\"import defineDatabase\");\n    }\n  }\n\n  // Re-parse after possible import insert\n  let workingImports = parseNamedImports(next);\n  let workingBlocks = parseDefineBlocks(next).filter(\n    (block) => block.kind === \"database\"\n  );\n  let workingBlock = workingBlocks[0];\n  const entryMap = new Map(\n    workingBlock.entries.map((entry) => [entry.key, entry])\n  );\n\n  for (const desired of generatedBlock.entries) {\n    const existingEntry = entryMap.get(desired.key);\n    if (existingEntry) {\n      if (existingEntry.value !== desired.value) {\n        conflicts.push(\n          `key \"${desired.key}\" maps to ${existingEntry.value} (existing) vs ${desired.value} (generated)`\n        );\n      }\n      continue;\n    }\n\n    // Find generated import for the schema const\n    const desiredImport = generatedImports.find((item) =>\n      item.names.includes(desired.value)\n    );\n    if (desiredImport) {\n      const existingForName = findImportForName(workingImports, desired.value);\n      if (existingForName) {\n        if (\n          normalizeModulePath(existingForName.module) !==\n          normalizeModulePath(desiredImport.module)\n        ) {\n          conflicts.push(\n            `binding \"${desired.value}\" imported from '${existingForName.module}' vs '${desiredImport.module}'`\n          );\n          continue;\n        }\n      } else {\n        const line = formatImport(\n          [desired.value],\n          desiredImport.module,\n          effectiveStyle\n        );\n        next = insertImportAfterPackageImports(next, line, effectiveStyle);\n        added.push(`import ${desired.value}`);\n        workingImports = parseNamedImports(next);\n      }\n    }\n\n    // Re-locate block after import edits\n    workingBlocks = parseDefineBlocks(next).filter(\n      (block) => block.kind === \"database\"\n    );\n    workingBlock = workingBlocks[0];\n    const nextEntries = [\n      ...workingBlock.entries,\n      { key: desired.key, raw: \"\", value: desired.value },\n    ];\n    const body = rewriteObjectBody(nextEntries, effectiveStyle);\n    next = replaceRange(\n      next,\n      workingBlock.bodyStart,\n      workingBlock.bodyEnd,\n      body\n    );\n    entryMap.set(desired.key, {\n      key: desired.key,\n      raw: \"\",\n      value: desired.value,\n    });\n    added.push(`database entry: ${desired.key}`);\n  }\n\n  if (conflicts.length > 0 && added.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts,\n      detail: conflicts.join(\"; \"),\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, \"database\"),\n      skipReason: \"merge-conflict\",\n    };\n  }\n\n  const lintErrors = lintArtifactSource(next, \"database\");\n  if (lintErrors.length > 0) {\n    return {\n      action: \"skip\",\n      added,\n      conflicts,\n      detail: lintErrors.join(\"; \"),\n      lintErrors,\n      preservedCustom: preservedCustomUnits(existing, generated, \"database\"),\n      skipReason: \"merge-lint-failed\",\n    };\n  }\n\n  const preservedCustom = preservedCustomUnits(next, generated, \"database\");\n  if (\n    next === existing ||\n    next.replace(/\\r\\n/g, \"\\n\") === existing.replace(/\\r\\n/g, \"\\n\")\n  ) {\n    return {\n      action: \"unchanged\",\n      added: [],\n      conflicts,\n      content: existing,\n      detail: conflicts.length > 0 ? conflicts.join(\"; \") : undefined,\n      lintErrors: [],\n      preservedCustom,\n      skipReason: \"already-current\",\n    };\n  }\n\n  return {\n    action: \"write\",\n    added,\n    conflicts,\n    content: next.endsWith(\"\\n\") ? next : `${next}${effectiveStyle.newline}`,\n    lintErrors: [],\n    preservedCustom,\n    writeReason: \"merged\",\n  };\n}\n\nfunction mergeMetaFields(\n  existingMeta: MetaBlock | undefined,\n  generatedMeta: MetaBlock | undefined\n): { entries: ObjectEntry[]; changed: boolean; added: string[] } {\n  const added: string[] = [];\n  if (!generatedMeta) {\n    return { added, changed: false, entries: existingMeta?.entries ?? [] };\n  }\n  if (!existingMeta) {\n    return {\n      added: generatedMeta.entries.map((entry) => `meta entry: ${entry.key}`),\n      changed: true,\n      entries: generatedMeta.entries,\n    };\n  }\n\n  const map = new Map(existingMeta.entries.map((entry) => [entry.key, entry]));\n  let changed = false;\n\n  for (const desired of generatedMeta.entries) {\n    const current = map.get(desired.key);\n    if (!current) {\n      map.set(desired.key, desired);\n      added.push(`meta entry: ${desired.key}`);\n      changed = true;\n      continue;\n    }\n    // Refresh known meta fields when they differ (except generatedAt — only if other meta missing was handled).\n    // Always refresh generatedAt / schemaVersion / output fields when values differ so registry stays truthful.\n    if (KNOWN_META_KEYS.has(desired.key) && current.value !== desired.value) {\n      map.set(desired.key, desired);\n      added.push(`meta refresh: ${desired.key}`);\n      changed = true;\n    }\n  }\n\n  // Preserve order: existing keys first, then newly added known keys in generated order\n  const ordered: ObjectEntry[] = [];\n  const seen = new Set<string>();\n  for (const entry of existingMeta.entries) {\n    const next = map.get(entry.key);\n    if (next) {\n      ordered.push(next);\n      seen.add(entry.key);\n    }\n  }\n  for (const entry of generatedMeta.entries) {\n    if (!seen.has(entry.key)) {\n      const next = map.get(entry.key);\n      if (next) {\n        ordered.push(next);\n        seen.add(entry.key);\n      }\n    }\n  }\n  for (const [key, entry] of map) {\n    if (!seen.has(key)) {\n      ordered.push(entry);\n    }\n  }\n\n  return { added, changed, entries: ordered };\n}\n\nfunction mergeRegistryArtifact(\n  existing: string,\n  generated: string\n): ArtifactMergeResult {\n  const style = detectStyle(existing);\n  const effectiveStyle = style;\n  const generatedImports = parseNamedImports(generated);\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === \"registry\"\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === \"registry\"\n  );\n\n  if (existingBlocks.length === 0 || generatedBlocks.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"could not locate defineRegistry({…}) export for merge\",\n      lintErrors: [],\n      preservedCustom: [],\n      skipReason: \"merge-unparseable\",\n    };\n  }\n\n  const existingBlock = existingBlocks[0];\n  const generatedBlock = generatedBlocks[0];\n  const conflicts: string[] = [];\n  const added: string[] = [];\n  let next = existing;\n\n  if (!hasImportBinding(parseNamedImports(next), \"defineRegistry\")) {\n    const pkgImport = generatedImports.find((item) =>\n      item.names.includes(\"defineRegistry\")\n    );\n    if (pkgImport) {\n      next = insertImportAfterPackageImports(\n        next,\n        formatImport([\"defineRegistry\"], pkgImport.module, effectiveStyle),\n        effectiveStyle\n      );\n      added.push(\"import defineRegistry\");\n    }\n  }\n\n  // Database const import from generated (prefer existing const name if entry already present)\n  const preferredDbValue =\n    existingBlock.entries[0]?.value ?? generatedBlock.entries[0]?.value;\n  const generatedDbImport =\n    generatedImports.find((item) =>\n      item.names.includes(generatedBlock.entries[0]?.value ?? \"\")\n    ) ?? generatedImports.find((item) => item.module.startsWith(\".\"));\n\n  if (preferredDbValue && generatedDbImport) {\n    const existingForName = findImportForName(\n      parseNamedImports(next),\n      preferredDbValue\n    );\n    if (!existingForName) {\n      const modulePath = generatedDbImport.module;\n      const importName =\n        findImportForName(generatedImports, preferredDbValue)?.names[0] ??\n        generatedBlock.entries[0]?.value ??\n        preferredDbValue;\n      if (!hasImportBinding(parseNamedImports(next), importName)) {\n        next = insertImportAfterPackageImports(\n          next,\n          formatImport([importName], modulePath, effectiveStyle),\n          effectiveStyle\n        );\n        added.push(`import ${importName}`);\n      }\n    } else if (\n      normalizeModulePath(existingForName.module) !==\n      normalizeModulePath(generatedDbImport.module)\n    ) {\n      conflicts.push(\n        `binding \"${preferredDbValue}\" imported from '${existingForName.module}' vs '${generatedDbImport.module}'`\n      );\n    }\n  }\n\n  // Merge defineRegistry entries (additive)\n  let workingBlocks = parseDefineBlocks(next).filter(\n    (block) => block.kind === \"registry\"\n  );\n  let workingBlock = workingBlocks[0];\n  const entryMap = new Map(\n    workingBlock.entries.map((entry) => [entry.key, entry])\n  );\n\n  for (const desired of generatedBlock.entries) {\n    // Prefer existing value name for same key if present\n    const existingEntry = entryMap.get(desired.key);\n    if (existingEntry) {\n      // Keep existing value (const name); only conflict if we cannot reconcile\n      continue;\n    }\n\n    // Use desired key with existing imported database const if any\n    const dbImport = parseNamedImports(next).find(\n      (item) =>\n        item.module.startsWith(\".\") &&\n        item.names.some((name) => name !== \"defineRegistry\")\n    );\n    const value = dbImport?.names[0] ?? desired.value;\n    const nextEntries = [\n      ...workingBlock.entries,\n      { key: desired.key, raw: \"\", value },\n    ];\n    const body = rewriteObjectBody(nextEntries, effectiveStyle);\n    next = replaceRange(\n      next,\n      workingBlock.bodyStart,\n      workingBlock.bodyEnd,\n      body\n    );\n    entryMap.set(desired.key, { key: desired.key, raw: \"\", value });\n    added.push(`registry entry: ${desired.key}`);\n    workingBlocks = parseDefineBlocks(next).filter(\n      (block) => block.kind === \"registry\"\n    );\n    workingBlock = workingBlocks[0];\n  }\n\n  // Meta merge — only refresh meta when structural adds happened OR known fields are missing.\n  // To avoid dirty git on pure no-ops: if nothing else changed, only fill missing meta keys\n  // (do not bump generatedAt alone).\n  const existingMeta = parseMetaBlock(next);\n  const generatedMeta = parseMetaBlock(generated);\n  const structuralAdded = added.length > 0;\n\n  if (generatedMeta) {\n    if (existingMeta) {\n      const desiredEntries = structuralAdded\n        ? generatedMeta.entries\n        : generatedMeta.entries.filter((entry) => {\n            // Only add missing keys; do not refresh generatedAt when nothing else changed\n            return !existingMeta.entries.some(\n              (current) => current.key === entry.key\n            );\n          });\n\n      if (structuralAdded) {\n        const merged = mergeMetaFields(existingMeta, generatedMeta);\n        if (merged.changed) {\n          // re-parse meta on next\n          const metaNow = parseMetaBlock(next);\n          if (metaNow) {\n            const body = rewriteObjectBody(merged.entries, effectiveStyle);\n            next = replaceRange(next, metaNow.bodyStart, metaNow.bodyEnd, body);\n            added.push(...merged.added);\n          }\n        }\n      } else if (desiredEntries.length > 0) {\n        const map = new Map(\n          existingMeta.entries.map((entry) => [entry.key, entry])\n        );\n        for (const entry of desiredEntries) {\n          map.set(entry.key, entry);\n          added.push(`meta entry: ${entry.key}`);\n        }\n        const ordered = [\n          ...existingMeta.entries.map((entry) => map.get(entry.key)!),\n          ...desiredEntries.filter(\n            (entry) => !existingMeta.entries.some((e) => e.key === entry.key)\n          ),\n        ];\n        const metaNow = parseMetaBlock(next);\n        if (metaNow) {\n          const body = rewriteObjectBody(ordered, effectiveStyle);\n          next = replaceRange(next, metaNow.bodyStart, metaNow.bodyEnd, body);\n        }\n      }\n    } else {\n      // Insert meta before defineRegistry export\n      const blocks = parseDefineBlocks(next).filter(\n        (block) => block.kind === \"registry\"\n      );\n      const insertAt = blocks[0]?.fullStart ?? next.length;\n      const metaBody = rewriteObjectBody(generatedMeta.entries, effectiveStyle);\n      const metaBlock = `export const __athena_schema_meta = {${metaBody}} as const${effectiveStyle.semicolons ? \";\" : \"\"}${effectiveStyle.newline}${effectiveStyle.newline}`;\n      next = replaceRange(next, insertAt, insertAt, metaBlock);\n      added.push(\"__athena_schema_meta\");\n    }\n  }\n\n  if (conflicts.length > 0 && added.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts,\n      detail: conflicts.join(\"; \"),\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, \"registry\"),\n      skipReason: \"merge-conflict\",\n    };\n  }\n\n  const lintErrors = lintArtifactSource(next, \"registry\");\n  if (lintErrors.length > 0) {\n    return {\n      action: \"skip\",\n      added,\n      conflicts,\n      detail: lintErrors.join(\"; \"),\n      lintErrors,\n      preservedCustom: preservedCustomUnits(existing, generated, \"registry\"),\n      skipReason: \"merge-lint-failed\",\n    };\n  }\n\n  const preservedCustom = preservedCustomUnits(next, generated, \"registry\");\n  if (next.replace(/\\r\\n/g, \"\\n\") === existing.replace(/\\r\\n/g, \"\\n\")) {\n    return {\n      action: \"unchanged\",\n      added: [],\n      conflicts,\n      content: existing,\n      lintErrors: [],\n      preservedCustom,\n      skipReason: \"already-current\",\n    };\n  }\n\n  return {\n    action: \"write\",\n    added,\n    conflicts,\n    content: next.endsWith(\"\\n\") ? next : `${next}${effectiveStyle.newline}`,\n    lintErrors: [],\n    preservedCustom,\n    writeReason: \"merged\",\n  };\n}\n\n/**\n * Merge generated database/registry content into an existing on-disk file.\n * Additive only: never deletes imports or object keys.\n */\nexport function mergeProtectedArtifact(\n  kind: Extract<GeneratorArtifactKind, \"database\" | \"registry\">,\n  existing: string,\n  generated: string,\n  policy: GeneratorArtifactWritePolicy\n): ArtifactMergeResult {\n  if (policy === \"overwrite\") {\n    if (existing.replace(/\\r\\n/g, \"\\n\") === generated.replace(/\\r\\n/g, \"\\n\")) {\n      return {\n        action: \"unchanged\",\n        added: [],\n        conflicts: [],\n        content: existing,\n        lintErrors: [],\n        preservedCustom: [],\n        skipReason: \"already-current\",\n      };\n    }\n    return {\n      action: \"write\",\n      added: [\"full overwrite\"],\n      conflicts: [],\n      content: generated,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: \"overwritten\",\n    };\n  }\n\n  if (policy === \"skip\") {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"artifactWrite policy is skip\",\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, kind),\n      skipReason: \"protected-existing-file\",\n    };\n  }\n\n  return kind === \"database\"\n    ? mergeDatabaseArtifact(existing, generated)\n    : mergeRegistryArtifact(existing, generated);\n}\n\n/**\n * Plan write action for any generated artifact (used by pipeline).\n */\nexport function resolveArtifactWritePlan(\n  file: GeneratedArtifact,\n  existingContent: string | null,\n  policy: GeneratorArtifactWritePolicy | \"always\"\n): ArtifactMergeResult {\n  if (existingContent === null) {\n    return {\n      action: \"write\",\n      added: [\"created\"],\n      conflicts: [],\n      content: file.content,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: \"created\",\n    };\n  }\n\n  if (file.kind === \"model\" || file.kind === \"schema\" || policy === \"always\") {\n    if (\n      existingContent.replace(/\\r\\n/g, \"\\n\") ===\n      file.content.replace(/\\r\\n/g, \"\\n\")\n    ) {\n      return {\n        action: \"unchanged\",\n        added: [],\n        conflicts: [],\n        content: existingContent,\n        lintErrors: [],\n        preservedCustom: [],\n        skipReason: \"already-current\",\n      };\n    }\n    return {\n      action: \"write\",\n      added: [\"overwritten\"],\n      conflicts: [],\n      content: file.content,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: existingContent ? \"overwritten\" : \"created\",\n    };\n  }\n\n  return mergeProtectedArtifact(\n    file.kind,\n    existingContent,\n    file.content,\n    policy\n  );\n}\n","import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport { resolveArtifactWritePlan } from \"./artifact-merge.ts\";\nimport { GENERATED_MANIFEST_REL, loadGeneratorConfig } from \"./config.ts\";\nimport { ensureGeneratorConfigFile } from \"./config-file.ts\";\nimport { resolveGeneratorProvider } from \"./providers.ts\";\nimport { generateArtifactsFromSnapshot } from \"./renderer.ts\";\nimport {\n\tdiscoverPostgresSchemas,\n\tmergeSchemaSelections,\n} from \"./schema-discovery.ts\";\nimport { resolveProviderSchemas } from \"./schema-selection.ts\";\nimport type {\n\tGeneratedArtifact,\n\tGeneratedManifest,\n\tGeneratorConfigEnsureSummary,\n\tLoadGeneratorConfigOptions,\n\tNormalizedAthenaGeneratorConfig,\n\tRunGeneratorOptions,\n\tRunGeneratorResult,\n\tSkippedGeneratedArtifact,\n\tWrittenGeneratedArtifact,\n} from \"./types.ts\";\n\nconst GENERATOR_VERSION = \"4.0.0\";\n\nfunction toPosixRel(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction buildGeneratedManifest(input: {\n\tconfigPath: string;\n\tcwd: string;\n\tfiles: GeneratedArtifact[];\n}): GeneratedManifest {\n\tconst configRel =\n\t\tinput.configPath === \"[environment defaults]\"\n\t\t\t? \"athena.config.ts\"\n\t\t\t: toPosixRel(relative(input.cwd, input.configPath));\n\tconst outputs = [\n\t\t...new Set(input.files.map((file) => toPosixRel(file.path))),\n\t].sort();\n\treturn {\n\t\tconfig: configRel.startsWith(\"..\") ? \"athena.config.ts\" : configRel,\n\t\tgeneratorVersion: GENERATOR_VERSION,\n\t\toutputs,\n\t};\n}\n\nasync function writeGeneratedManifest(\n\tcwd: string,\n\tmanifest: GeneratedManifest,\n\tdryRun: boolean,\n): Promise<string> {\n\tconst rel = GENERATED_MANIFEST_REL;\n\tconst absolutePath = resolve(cwd, rel);\n\tconst body = `${JSON.stringify(manifest, null, 2)}\\n`;\n\tif (!dryRun) {\n\t\tawait mkdir(dirname(absolutePath), { recursive: true });\n\t\tawait writeFile(absolutePath, body, \"utf8\");\n\t}\n\treturn rel;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function readExisting(path: string): Promise<string | null> {\n\ttry {\n\t\treturn await readFile(path, \"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction policyForArtifact(\n\tfile: GeneratedArtifact,\n\tconfig: NormalizedAthenaGeneratorConfig,\n):\n\t| \"always\"\n\t| NormalizedAthenaGeneratorConfig[\"output\"][\"artifactWrite\"][\"database\"] {\n\tif (file.kind === \"model\" || file.kind === \"schema\") {\n\t\treturn \"always\";\n\t}\n\tif (file.kind === \"database\") {\n\t\treturn config.output.artifactWrite.database;\n\t}\n\treturn config.output.artifactWrite.registry;\n}\n\nasync function writeArtifacts(\n\tfiles: GeneratedArtifact[],\n\tcwd: string,\n\tconfig: NormalizedAthenaGeneratorConfig,\n\tdryRun: boolean,\n): Promise<{\n\twrittenFiles: string[];\n\twrittenDetails: WrittenGeneratedArtifact[];\n\tskippedFiles: SkippedGeneratedArtifact[];\n}> {\n\tconst writtenFiles: string[] = [];\n\tconst writtenDetails: WrittenGeneratedArtifact[] = [];\n\tconst skippedFiles: SkippedGeneratedArtifact[] = [];\n\n\tfor (const file of files) {\n\t\tconst absolutePath = resolve(cwd, file.path);\n\t\tconst exists = await fileExists(absolutePath);\n\t\tconst existingContent = exists ? await readExisting(absolutePath) : null;\n\t\tconst policy = policyForArtifact(file, config);\n\t\tconst plan = resolveArtifactWritePlan(file, existingContent, policy);\n\n\t\tif (plan.action === \"skip\" || plan.action === \"unchanged\") {\n\t\t\tskippedFiles.push({\n\t\t\t\tconflicts: plan.conflicts.length > 0 ? plan.conflicts : undefined,\n\t\t\t\tdetail: plan.detail,\n\t\t\t\tkind: file.kind,\n\t\t\t\tlintErrors: plan.lintErrors.length > 0 ? plan.lintErrors : undefined,\n\t\t\t\tpath: file.path,\n\t\t\t\tpreservedCustom:\n\t\t\t\t\tplan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n\t\t\t\treason: plan.skipReason ?? \"already-current\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(plan.content && plan.writeReason)) {\n\t\t\tskippedFiles.push({\n\t\t\t\tdetail: \"merge produced no content\",\n\t\t\t\tkind: file.kind,\n\t\t\t\tlintErrors: plan.lintErrors,\n\t\t\t\tpath: file.path,\n\t\t\t\treason: \"merge-lint-failed\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!dryRun) {\n\t\t\tawait mkdir(dirname(absolutePath), { recursive: true });\n\t\t\tawait writeFile(absolutePath, plan.content, \"utf8\");\n\t\t}\n\n\t\twrittenFiles.push(file.path);\n\t\twrittenDetails.push({\n\t\t\tadded: plan.added.length > 0 ? plan.added : undefined,\n\t\t\tkind: file.kind,\n\t\t\tpath: file.path,\n\t\t\tpreservedCustom:\n\t\t\t\tplan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n\t\t\treason: plan.writeReason,\n\t\t});\n\t}\n\n\treturn {\n\t\tskippedFiles,\n\t\twrittenDetails,\n\t\twrittenFiles,\n\t};\n}\n\nfunction withPostgresSchemas(\n\tconfig: NormalizedAthenaGeneratorConfig,\n\tschemas: string[],\n): NormalizedAthenaGeneratorConfig {\n\tif (config.provider.kind !== \"postgres\") {\n\t\treturn config;\n\t}\n\n\treturn {\n\t\t...config,\n\t\tprovider: {\n\t\t\t...config.provider,\n\t\t\tschemas,\n\t\t},\n\t};\n}\n\n/**\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\n *\n * When `writeConfig` is enabled (default), also ensures `athena.config.ts` exists and\n * auto-fills discovered schemas without clobbering custom config fields.\n */\nexport async function runSchemaGenerator(\n\toptions: RunGeneratorOptions = {},\n): Promise<RunGeneratorResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst dryRun = options.dryRun === true;\n\tconst writeConfig = options.writeConfig !== false;\n\tconst discoverSchemas = options.discoverSchemas !== false;\n\tconst configOptions: LoadGeneratorConfigOptions = {\n\t\tconfigPath: options.configPath,\n\t\tcwd,\n\t};\n\n\tconst loaded = await loadGeneratorConfig(configOptions);\n\tlet { configPath, config } = loaded;\n\tlet configEnsure: GeneratorConfigEnsureSummary | undefined;\n\n\t// Expand schemas from live discovery before introspection so gateway/direct\n\t// multi-schema databases generate fully without requiring a hand-maintained list.\n\t// Injected test/custom providers skip live discovery to avoid real network I/O.\n\tlet effectiveSchemas = resolveProviderSchemas(config.provider);\n\tconst canDiscoverLive =\n\t\tdiscoverSchemas && config.provider.kind === \"postgres\" && !options.provider;\n\n\tif (canDiscoverLive) {\n\t\ttry {\n\t\t\tconst discovered = await discoverPostgresSchemas(config.provider);\n\t\t\tif (discovered.length > 0) {\n\t\t\t\teffectiveSchemas = mergeSchemaSelections(effectiveSchemas, discovered);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Discovery is best-effort during generate; configured schemas still run.\n\t\t}\n\t}\n\n\tconfig = withPostgresSchemas(config, effectiveSchemas);\n\n\t// Intelligent config ensure: create when missing, patch schemas when expanded.\n\t// Skip when a custom provider is injected (unit tests / programmatic overrides).\n\tconst shouldEnsureConfig =\n\t\twriteConfig && config.provider.kind === \"postgres\" && !options.provider;\n\n\tif (shouldEnsureConfig) {\n\t\tconst ensureResult = await ensureGeneratorConfigFile({\n\t\t\tconfigPath: options.configPath,\n\t\t\tcwd,\n\t\t\t// Schemas already resolved above — avoid a second discovery round-trip.\n\t\t\tdiscoverSchemas: false,\n\t\t\tdryRun,\n\t\t\tloaded: { config, configPath },\n\t\t\tmode: config.provider.mode,\n\t\t\tprovider: config.provider,\n\t\t\tschemas: effectiveSchemas,\n\t\t});\n\n\t\tconfigEnsure = {\n\t\t\taction: ensureResult.action,\n\t\t\tchanges: ensureResult.changes,\n\t\t\tdiscoveryError: ensureResult.discoveryError,\n\t\t\tpath: ensureResult.path,\n\t\t\treason: ensureResult.reason,\n\t\t\tschemaProvenance: ensureResult.schemaProvenance,\n\t\t\tschemas: ensureResult.schemas,\n\t\t};\n\n\t\t// Prefer the durable config path once a real file was created/updated.\n\t\tif (\n\t\t\tensureResult.action === \"created\" ||\n\t\t\tensureResult.action === \"updated\" ||\n\t\t\t(ensureResult.action === \"unchanged\" &&\n\t\t\t\tconfigPath === \"[environment defaults]\")\n\t\t) {\n\t\t\tconfigPath = ensureResult.absolutePath;\n\t\t\tif (ensureResult.schemas.length > 0) {\n\t\t\t\teffectiveSchemas = ensureResult.schemas;\n\t\t\t\tconfig = withPostgresSchemas(config, effectiveSchemas);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst provider =\n\t\toptions.provider ??\n\t\tresolveGeneratorProvider(config.provider, config.experimental);\n\n\tconst snapshot = await provider.inspect({\n\t\tschemas: effectiveSchemas,\n\t});\n\n\tconst generated = generateArtifactsFromSnapshot(snapshot, config);\n\tconst writeResult = await writeArtifacts(\n\t\tgenerated.files,\n\t\tcwd,\n\t\tconfig,\n\t\tdryRun,\n\t);\n\n\tconst generatedManifest = buildGeneratedManifest({\n\t\tconfigPath,\n\t\tcwd,\n\t\tfiles: generated.files,\n\t});\n\tconst generatedManifestPath = await writeGeneratedManifest(\n\t\tcwd,\n\t\tgeneratedManifest,\n\t\tdryRun,\n\t);\n\n\treturn {\n\t\t...generated,\n\t\tconfig,\n\t\tconfigEnsure,\n\t\tconfigPath,\n\t\tgeneratedManifest,\n\t\tgeneratedManifestPath,\n\t\tskippedFiles: writeResult.skippedFiles,\n\t\twrittenDetails: writeResult.writtenDetails,\n\t\twrittenFiles: writeResult.writtenFiles,\n\t};\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n\tDEFAULT_MIGRATIONS_DIRECTORY,\n\tfindGeneratorConfigPath,\n\tloadGeneratorConfig,\n} from \"./config.ts\";\nimport {\n\tensureAthenaProjectLayout,\n\tmaterializeManagedAuthMigrations,\n} from \"../migrations/managed-auth.ts\";\nimport {\n\tdetectAuthorityMode,\n\tformatSchemaFallbackMessages,\n\ttype GeneratorSchemaProvenance,\n\tresolveGeneratorDatabaseAuthority,\n} from \"./database-authority.ts\";\nimport {\n\tdiscoverPostgresSchemas,\n\tmergeSchemaSelections,\n\tschemasEqual,\n} from \"./schema-discovery.ts\";\nimport {\n\tDEFAULT_POSTGRES_SCHEMAS,\n\tnormalizeSchemaSelection,\n} from \"./schema-selection.ts\";\nimport type {\n\tGeneratorProviderConfig,\n\tGeneratorProviderInputConfig,\n\tLoadedGeneratorConfig,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorConfigFileAction =\n\t| \"created\"\n\t| \"updated\"\n\t| \"unchanged\"\n\t| \"skipped\";\n\nexport type GeneratorConfigProviderMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport interface EnsureGeneratorConfigFileOptions {\n\t/** Explicit path relative to cwd or absolute. Defaults to discovered path or `athena.config.ts`. */\n\tconfigPath?: string;\n\tcwd?: string;\n\t/**\n\t * Discover live schemas and auto-fill `provider.schemas`.\n\t * Defaults to true.\n\t */\n\tdiscoverSchemas?: boolean;\n\t/**\n\t * Test/programmatic seam for live schema discovery (defaults to\n\t * `discoverPostgresSchemas`).\n\t */\n\tdiscoverSchemasImpl?: (\n\t\tprovider: GeneratorProviderConfig,\n\t) => Promise<string[]>;\n\t/**\n\t * When false, never write to disk (report would-be action only).\n\t * Defaults to false.\n\t */\n\tdryRun?: boolean;\n\t/**\n\t * When true, rewrite the full modern template even if a file already exists.\n\t * Defaults to false (intelligent surgical update only).\n\t */\n\tforce?: boolean;\n\t/**\n\t * Optional pre-loaded config (skips a second disk load).\n\t */\n\tloaded?: LoadedGeneratorConfig;\n\t/** Provider mode preference when creating a new file. */\n\tmode?: GeneratorConfigProviderMode;\n\t/**\n\t * Pre-resolved provider used for schema discovery (avoids re-normalizing).\n\t */\n\tprovider?: GeneratorProviderConfig;\n\t/**\n\t * Explicit schemas to write when discovery is disabled or fails.\n\t */\n\tschemas?: readonly string[];\n}\n\nexport interface EnsureGeneratorConfigFileResult {\n\tabsolutePath: string;\n\taction: GeneratorConfigFileAction;\n\tchanges: string[];\n\tcontent?: string;\n\tdiscoveryError?: string;\n\tmode: \"direct\" | \"gateway\";\n\tpath: string;\n\treason?: string;\n\t/** How `schemas` were chosen for this ensure pass. */\n\tschemaProvenance: GeneratorSchemaProvenance;\n\tschemas: string[];\n}\n\ntype DetectedMode = \"direct\" | \"gateway\";\n\n/**\n * Picks a provider mode from env when the caller did not force one.\n * Prefers direct when a connection string is present; otherwise gateway.\n * Callers that need `.env*` awareness should apply project env first\n * (`applyGeneratorProjectEnv` / `resolveGeneratorDatabaseAuthority`).\n */\nexport function detectGeneratorProviderMode(\n\tpreferred: GeneratorConfigProviderMode = \"auto\",\n): DetectedMode {\n\treturn detectAuthorityMode(preferred);\n}\n\nfunction formatStringArray(values: readonly string[], indent: string): string {\n\tif (values.length === 0) {\n\t\treturn \"[]\";\n\t}\n\tconst inner = values\n\t\t.map((value) => `${indent}  ${JSON.stringify(value)}`)\n\t\t.join(\",\\n\");\n\treturn `[\\n${inner},\\n${indent}]`;\n}\n\nfunction buildDirectProviderBlock(schemas: readonly string[]): string {\n\treturn `  provider: {\n    kind: \"postgres\",\n    mode: \"direct\",\n    connectionString: generatorEnv(\"DATABASE_URL\"),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { optional: true }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\nfunction buildGatewayProviderBlock(schemas: readonly string[]): string {\n\treturn `  provider: {\n    kind: \"postgres\",\n    mode: \"gateway\",\n    gatewayUrl: generatorEnv(\"ATHENA_URL\"),\n    apiKey: generatorEnv(\"ATHENA_API_KEY\"),\n    client: generatorEnv(\"ATHENA_CLIENT\", { optional: true }),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { default: \"postgres\" }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\n/**\n * Renders a modern, typed `athena.config.ts` using `defineGeneratorConfig` + `generatorEnv`.\n * Secrets stay env-backed so gateway and direct modes both work without hardcoding keys.\n */\nexport function renderGeneratorConfigFile(options: {\n\tmode: DetectedMode;\n\tschemas?: readonly string[];\n}): string {\n\tconst schemas =\n\t\toptions.schemas && options.schemas.length > 0\n\t\t\t? [...options.schemas]\n\t\t\t: [...DEFAULT_POSTGRES_SCHEMAS];\n\n\tconst providerBlock =\n\t\toptions.mode === \"gateway\"\n\t\t\t? buildGatewayProviderBlock(schemas)\n\t\t\t: buildDirectProviderBlock(schemas);\n\n\treturn `import { defineAthenaConfig, generatorEnv } from \"@xylex-group/athena\";\n\nexport default defineAthenaConfig({\n${providerBlock},\n  migrations: {\n    directory: \"athena/migrations\",\n  },\n  output: {\n    format: \"table-builder\",\n    preset: \"athena-direct\",\n    targets: {\n      model: \"athena/generated/models/{schema_kebab}/{model_kebab}.ts\",\n      schema: \"athena/generated/schema/{schema_kebab}.ts\",\n      database: \"athena/generated/relations.ts\",\n      registry: \"athena/generated/registry.ts\",\n    },\n    placeholderMap: {\n      namespace: \"athena\",\n    },\n  },\n  naming: {\n    modelType: \"pascal\",\n    modelConst: \"camel\",\n    schemaConst: \"camel\",\n    databaseConst: \"camel\",\n    registryConst: \"camel\",\n  },\n  features: {\n    emitRelations: true,\n    emitRegistry: true,\n  },\n  experimental: {\n    postgresGatewayIntrospection: false,\n    scyllaProviderContracts: true,\n  },\n});\n`;\n}\n\nfunction resolveConfigPath(\n\tcwd: string,\n\tconfigPath?: string,\n): {\n\tabsolutePath: string;\n\trelativePath: string;\n\texists: boolean;\n} {\n\tif (configPath) {\n\t\tconst absolutePath = resolve(cwd, configPath);\n\t\treturn {\n\t\t\tabsolutePath,\n\t\t\texists: existsSync(absolutePath),\n\t\t\trelativePath: configPath.replace(/\\\\/g, \"/\"),\n\t\t};\n\t}\n\n\tconst discovered = findGeneratorConfigPath(cwd);\n\tif (discovered) {\n\t\tconst relativePath = discovered.startsWith(cwd)\n\t\t\t? discovered\n\t\t\t\t\t.slice(cwd.length)\n\t\t\t\t\t.replace(/^[/\\\\]/, \"\")\n\t\t\t\t\t.replace(/\\\\/g, \"/\")\n\t\t\t: \"athena.config.ts\";\n\t\treturn {\n\t\t\tabsolutePath: discovered,\n\t\t\texists: true,\n\t\t\trelativePath,\n\t\t};\n\t}\n\n\tconst absolutePath = resolve(cwd, \"athena.config.ts\");\n\treturn {\n\t\tabsolutePath,\n\t\texists: false,\n\t\trelativePath: \"athena.config.ts\",\n\t};\n}\n\nfunction providerModeFromConfig(\n\tprovider: GeneratorProviderConfig | GeneratorProviderInputConfig | undefined,\n\tpreferred: GeneratorConfigProviderMode,\n): DetectedMode {\n\tif (provider && provider.kind === \"postgres\") {\n\t\tif (provider.mode === \"gateway\") {\n\t\t\treturn \"gateway\";\n\t\t}\n\t\tif (provider.mode === \"direct\") {\n\t\t\treturn \"direct\";\n\t\t}\n\t}\n\treturn detectGeneratorProviderMode(preferred);\n}\n\nfunction schemasFromNormalized(\n\tconfig: NormalizedAthenaGeneratorConfig,\n): string[] {\n\tif (config.provider.kind !== \"postgres\") {\n\t\treturn [...DEFAULT_POSTGRES_SCHEMAS];\n\t}\n\treturn normalizeSchemaSelection(config.provider.schemas);\n}\n\n/**\n * Updates only the `schemas:` value inside an existing TypeScript config source.\n * Supports:\n * - `schemas: [\"public\", \"athena\"]`\n * - `schemas: generatorEnv.list(\"...\", { default: [\"public\"] })`\n *\n * Returns undefined when the file cannot be updated surgically (caller may full-render).\n */\nexport function patchSchemasInConfigSource(\n\tsource: string,\n\tschemas: readonly string[],\n): string | undefined {\n\tconst formattedInline = `[${schemas.map((value) => JSON.stringify(value)).join(\", \")}]`;\n\tconst formattedMultiline = formatStringArray(schemas, \"    \");\n\n\t// Prefer generatorEnv.list default updates so env override still works.\n\tconst listDefaultPattern =\n\t\t/(schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*)(\\[[^\\]]*\\])/m;\n\tif (listDefaultPattern.test(source)) {\n\t\treturn source.replace(listDefaultPattern, `$1${formattedInline}`);\n\t}\n\n\t// Literal array assignment on provider.schemas.\n\tconst literalPattern = /(schemas\\s*:\\s*)(\\[[^\\]]*\\])/m;\n\tif (literalPattern.test(source)) {\n\t\tconst usesMultiline = /schemas\\s*:\\s*\\[\\s*\\n/.test(source);\n\t\treturn source.replace(\n\t\t\tliteralPattern,\n\t\t\t`$1${usesMultiline ? formattedMultiline : formattedInline}`,\n\t\t);\n\t}\n\n\t// Missing schemas field: inject after kind/mode block if we can find provider mode.\n\tconst modeLine = /(mode\\s*:\\s*[\"'](?:direct|gateway)[\"']\\s*,)/m;\n\tif (modeLine.test(source)) {\n\t\treturn source.replace(modeLine, `$1\\n    schemas: ${formattedInline},`);\n\t}\n\treturn undefined;\n}\n\nfunction extractLiteralSchemas(source: string): string[] | undefined {\n\tconst listDefaultMatch = source.match(\n\t\t/schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*(\\[[^\\]]*\\])/m,\n\t);\n\tconst literalMatch =\n\t\tlistDefaultMatch ?? source.match(/schemas\\s*:\\s*(\\[[^\\]]*\\])/m);\n\tif (!literalMatch) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(literalMatch[1].replace(/'/g, '\"')) as unknown;\n\t\tif (!Array.isArray(parsed)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn parsed\n\t\t\t.map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n\t\t\t.filter((value) => value.length > 0);\n\t} catch {\n\t\t// Malformed JSON array literal — treat as no schemas.\n\t}\n\treturn undefined;\n}\n\ninterface SchemaResolution {\n\tdiscoveryError?: string;\n\tprovenance: GeneratorSchemaProvenance;\n\tschemas: string[];\n}\n\nasync function resolveDiscoveredSchemas(options: {\n\tcwd: string;\n\tdiscoverSchemas: boolean;\n\tdiscoverSchemasImpl?: (\n\t\tprovider: GeneratorProviderConfig,\n\t) => Promise<string[]>;\n\tprovider?: GeneratorProviderConfig;\n\tloaded?: LoadedGeneratorConfig;\n\texplicit?: readonly string[];\n\tmode: GeneratorConfigProviderMode;\n}): Promise<SchemaResolution> {\n\tif (options.explicit && options.explicit.length > 0) {\n\t\treturn {\n\t\t\tprovenance: \"explicit\",\n\t\t\tschemas: normalizeSchemaSelection(options.explicit),\n\t\t};\n\t}\n\n\tif (!options.discoverSchemas) {\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tprovenance: \"configured\",\n\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tprovenance: \"fallback\",\n\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t};\n\t}\n\n\tlet restoreEnv = () => {};\n\ttry {\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\t// When a loaded/explicit provider is already normalized, env was applied\n\t\t\t// during load — still apply here for environment-probe so `.env*` works.\n\t\t\tapplyProjectEnv: true,\n\t\t\tcwd: options.cwd,\n\t\t\tloaded: options.loaded,\n\t\t\tmode: options.mode,\n\t\t\tprovider: options.provider,\n\t\t});\n\t\trestoreEnv = authority.restoreEnv;\n\n\t\tconst discover = options.discoverSchemasImpl ?? discoverPostgresSchemas;\n\t\tconst discovered = await discover(authority.provider);\n\t\tif (discovered.length === 0) {\n\t\t\tif (options.loaded) {\n\t\t\t\treturn {\n\t\t\t\t\tprovenance: \"configured\",\n\t\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdiscoveryError:\n\t\t\t\t\t\"live catalog returned no non-system schemas with base tables\",\n\t\t\t\tprovenance: \"fallback\",\n\t\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t\t};\n\t\t}\n\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tprovenance: \"discovered\",\n\t\t\t\tschemas: mergeSchemaSelections(\n\t\t\t\t\tschemasFromNormalized(options.loaded.config),\n\t\t\t\t\tdiscovered,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\treturn { provenance: \"discovered\", schemas: discovered };\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tif (options.loaded) {\n\t\t\treturn {\n\t\t\t\tdiscoveryError: message,\n\t\t\t\tprovenance: \"configured\",\n\t\t\t\tschemas: schemasFromNormalized(options.loaded.config),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tdiscoveryError: message,\n\t\t\tprovenance: \"fallback\",\n\t\t\tschemas: [...DEFAULT_POSTGRES_SCHEMAS],\n\t\t};\n\t} finally {\n\t\trestoreEnv();\n\t}\n}\n\n/**\n * Creates or intelligently updates `athena.config.ts`.\n *\n * Intelligence rules:\n * - missing file → write modern direct/gateway template with env-backed secrets\n * - existing file + force → full rewrite\n * - existing file → only patch `provider.schemas` when auto-fill finds new values\n * - skip write when content/schemas already match (no churn, safe for typecheck CI)\n * - never removes user-listed schemas that discovery did not return\n * - gateway mode uses the same template surface as direct (generatorEnv for url/key)\n */\nexport async function ensureGeneratorConfigFile(\n\toptions: EnsureGeneratorConfigFileOptions = {},\n): Promise<EnsureGeneratorConfigFileResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst dryRun = options.dryRun === true;\n\tconst discoverSchemas = options.discoverSchemas !== false;\n\tconst force = options.force === true;\n\tconst preferredMode = options.mode ?? \"auto\";\n\n\tconst pathInfo = resolveConfigPath(cwd, options.configPath);\n\tconst changes: string[] = [];\n\n\tlet loaded = options.loaded;\n\tif (!loaded && pathInfo.exists && !force) {\n\t\ttry {\n\t\t\tloaded = await loadGeneratorConfig({\n\t\t\t\tconfigPath: pathInfo.absolutePath,\n\t\t\t\tcwd,\n\t\t\t});\n\t\t} catch {\n\t\t\t// Fall through to create/replace when existing file is unloadable and force is off:\n\t\t\t// only patch if we can read text; otherwise report skipped with reason.\n\t\t}\n\t}\n\n\tconst migrationsRelative =\n\t\tloaded?.config.migrations.directory || DEFAULT_MIGRATIONS_DIRECTORY;\n\tconst layout = await ensureAthenaProjectLayout({\n\t\tapplicationDirectory: resolve(cwd, migrationsRelative),\n\t\tcwd,\n\t\tdryRun,\n\t});\n\tif (layout.createdApplicationMigrations) {\n\t\tchanges.push(`created-migrations-directory: ${migrationsRelative}`);\n\t}\n\tif (layout.createdManagedAuthMigrations) {\n\t\tchanges.push(\n\t\t\t\"created-managed-auth-migrations-directory: athena/managed/auth/migrations\",\n\t\t);\n\t}\n\tif (!dryRun) {\n\t\tconst materialized = await materializeManagedAuthMigrations({\n\t\t\tcwd,\n\t\t\toverwrite: false,\n\t\t});\n\t\tif (materialized.written.length > 0) {\n\t\t\tchanges.push(\n\t\t\t\t`materialized-managed-auth-migrations: ${materialized.written.length}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Resolve mode with the same project-env authority migrate uses, so\n\t// `.env` / `.env.local` DATABASE_URL is visible before discovery.\n\tlet mode: DetectedMode = providerModeFromConfig(\n\t\tloaded?.config.provider ?? options.provider,\n\t\tpreferredMode,\n\t);\n\ttry {\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\tapplyProjectEnv: true,\n\t\t\tcwd,\n\t\t\tloaded,\n\t\t\tmode: preferredMode,\n\t\t\tprovider: options.provider ?? loaded?.config.provider,\n\t\t});\n\t\tmode = authority.mode;\n\t\tauthority.restoreEnv();\n\t} catch {\n\t\t// Mode probe may fail when connection info is missing; keep preferred/default.\n\t\tmode = providerModeFromConfig(\n\t\t\tloaded?.config.provider ?? options.provider,\n\t\t\tpreferredMode,\n\t\t);\n\t}\n\n\tconst schemaResolution = await resolveDiscoveredSchemas({\n\t\tcwd,\n\t\tdiscoverSchemas,\n\t\tdiscoverSchemasImpl: options.discoverSchemasImpl,\n\t\texplicit: options.schemas,\n\t\tloaded,\n\t\tmode: preferredMode,\n\t\tprovider: options.provider ?? loaded?.config.provider,\n\t});\n\n\tif (schemaResolution.provenance === \"discovered\") {\n\t\tchanges.push(`schemas-discovered: ${schemaResolution.schemas.join(\",\")}`);\n\t} else if (schemaResolution.provenance === \"fallback\") {\n\t\tchanges.push(\n\t\t\t...formatSchemaFallbackMessages({\n\t\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\t\texpectedLiveSchemas: [\"public\", \"athena\"],\n\t\t\t\tschemas: schemaResolution.schemas,\n\t\t\t}),\n\t\t);\n\t} else if (schemaResolution.discoveryError) {\n\t\tchanges.push(`schema-discovery-failed: ${schemaResolution.discoveryError}`);\n\t}\n\n\t// --- Create path ---\n\tif (!pathInfo.exists || force) {\n\t\tconst content = renderGeneratorConfigFile({\n\t\t\tmode,\n\t\t\tschemas: schemaResolution.schemas,\n\t\t});\n\n\t\tif (pathInfo.exists) {\n\t\t\tchanges.push(\"force-rewrote-config\");\n\t\t} else {\n\t\t\tchanges.push(\"created-modern-config\");\n\t\t}\n\n\t\tif (!dryRun) {\n\t\t\tawait mkdir(dirname(pathInfo.absolutePath), { recursive: true });\n\t\t\tawait writeFile(pathInfo.absolutePath, content, \"utf8\");\n\t\t}\n\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: pathInfo.exists ? \"updated\" : \"created\",\n\t\t\tchanges,\n\t\t\tcontent,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: pathInfo.exists ? \"force rewrite\" : \"config file missing\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: schemaResolution.schemas,\n\t\t};\n\t}\n\n\t// --- Update path (intelligent, non-destructive) ---\n\tconst existingSource = await readFile(pathInfo.absolutePath, \"utf8\");\n\tconst existingLiteralSchemas = extractLiteralSchemas(existingSource);\n\tconst existingSchemas =\n\t\texistingLiteralSchemas ??\n\t\t(loaded\n\t\t\t? schemasFromNormalized(loaded.config)\n\t\t\t: [...DEFAULT_POSTGRES_SCHEMAS]);\n\n\tif (schemasEqual(existingSchemas, schemaResolution.schemas)) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"unchanged\",\n\t\t\tchanges: changes.length > 0 ? changes : [\"schemas-already-current\"],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: \"schemas already match discovered/configured set\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tconst patched = patchSchemasInConfigSource(\n\t\texistingSource,\n\t\tschemaResolution.schemas,\n\t);\n\tif (!patched) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"skipped\",\n\t\t\tchanges: [\n\t\t\t\t...changes,\n\t\t\t\t\"could-not-patch-schemas-surgically\",\n\t\t\t\t\"re-run with force=true to rewrite full template\",\n\t\t\t],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason:\n\t\t\t\t\"existing config schemas could not be updated surgically without risking a destructive rewrite\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tif (patched === existingSource) {\n\t\treturn {\n\t\t\tabsolutePath: pathInfo.absolutePath,\n\t\t\taction: \"unchanged\",\n\t\t\tchanges: [...changes, \"patch-noop\"],\n\t\t\tcontent: existingSource,\n\t\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\t\tmode,\n\t\t\tpath: pathInfo.relativePath,\n\t\t\treason: \"patch produced identical content\",\n\t\t\tschemaProvenance: schemaResolution.provenance,\n\t\t\tschemas: existingSchemas,\n\t\t};\n\t}\n\n\tchanges.push(\n\t\t`schemas-updated: ${existingSchemas.join(\",\")} -> ${schemaResolution.schemas.join(\",\")}`,\n\t);\n\n\tif (!dryRun) {\n\t\tawait writeFile(pathInfo.absolutePath, patched, \"utf8\");\n\t}\n\n\treturn {\n\t\tabsolutePath: pathInfo.absolutePath,\n\t\taction: \"updated\",\n\t\tchanges,\n\t\tcontent: patched,\n\t\tdiscoveryError: schemaResolution.discoveryError,\n\t\tmode,\n\t\tpath: pathInfo.relativePath,\n\t\treason: \"auto-filled provider.schemas\",\n\t\tschemaProvenance: schemaResolution.provenance,\n\t\tschemas: schemaResolution.schemas,\n\t};\n}\n","import { withPostgresLibpqCompatConnectionString } from \"../postgres/connection-string.ts\";\nimport { createClient } from \"../v3-client-core.ts\";\nimport type {\n\tGeneratorProviderConfig,\n\tPostgresDirectProviderConfig,\n\tPostgresGatewayProviderConfig,\n} from \"./types.ts\";\n\n/**\n * SQL that lists non-system PostgreSQL schemas that contain base tables.\n * Used by both direct (`pg`) and gateway (`/gateway/query`) discovery paths.\n */\nexport const DISCOVER_POSTGRES_SCHEMAS_SQL = `\n  SELECT DISTINCT n.nspname AS schema_name\n  FROM pg_namespace n\n  JOIN pg_class c ON c.relnamespace = n.oid\n  WHERE c.relkind IN ('r', 'p')\n    AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n    AND n.nspname NOT LIKE 'pg_toast%'\n    AND n.nspname NOT LIKE 'pg_temp_%'\n    AND n.nspname NOT LIKE 'pg_toast_temp_%'\n  ORDER BY n.nspname;\n`.trim();\n\nconst SYSTEM_SCHEMA_PREFIXES = [\"pg_\"] as const;\nconst SYSTEM_SCHEMAS = new Set([\"pg_catalog\", \"information_schema\"]);\n\ninterface SchemaNameRow {\n\tnspname?: unknown;\n\tschema_name?: unknown;\n\tschemaName?: unknown;\n}\n\n/**\n * Filters and normalizes a raw list of schema names into a stable, unique array.\n * Drops empty strings and PostgreSQL system/catalog namespaces.\n */\nexport function normalizeDiscoveredSchemas(input: readonly string[]): string[] {\n\tconst schemas: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of input) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (SYSTEM_SCHEMAS.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (SYSTEM_SCHEMA_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tschemas.push(schema);\n\t}\n\n\treturn schemas;\n}\n\n/**\n * Merges configured schemas with discovered ones without dropping user intent.\n * - preserves configured order first\n * - appends newly discovered schemas\n * - never removes a configured schema that discovery did not return\n */\nexport function mergeSchemaSelections(\n\tconfigured: readonly string[] | undefined,\n\tdiscovered: readonly string[],\n): string[] {\n\tconst result: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const value of configured ?? []) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tresult.push(schema);\n\t}\n\n\tfor (const value of discovered) {\n\t\tconst schema = value.trim();\n\t\tif (!schema || seen.has(schema)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(schema);\n\t\tresult.push(schema);\n\t}\n\n\treturn result.length > 0 ? result : [\"public\"];\n}\n\n/**\n * True when two schema lists select the same set (order-insensitive).\n */\nexport function schemasEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tconst a = normalizeDiscoveredSchemas(left ?? []);\n\tconst b = normalizeDiscoveredSchemas(right ?? []);\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tconst set = new Set(a);\n\treturn b.every((schema) => set.has(schema));\n}\n\nfunction coerceSchemaName(row: SchemaNameRow): string | undefined {\n\tconst raw = row.schema_name ?? row.schemaName ?? row.nspname;\n\tif (typeof raw !== \"string\") {\n\t\treturn;\n\t}\n\tconst trimmed = raw.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function loadPgPoolConstructor(): Promise<\n\tnew (config: {\n\t\tconnectionString: string;\n\t}) => {\n\t\tquery: <T extends Record<string, unknown>>(\n\t\t\tsql: string,\n\t\t) => Promise<{ rows: T[] }>;\n\t\tend: () => Promise<void>;\n\t}\n> {\n\tconst module = await import(\"pg\");\n\tconst poolConstructor =\n\t\t(\n\t\t\tmodule as {\n\t\t\t\tPool?: new (config: {\n\t\t\t\t\tconnectionString: string;\n\t\t\t\t}) => {\n\t\t\t\t\tquery: <T extends Record<string, unknown>>(\n\t\t\t\t\t\tsql: string,\n\t\t\t\t\t) => Promise<{ rows: T[] }>;\n\t\t\t\t\tend: () => Promise<void>;\n\t\t\t\t};\n\t\t\t}\n\t\t).Pool ??\n\t\t(\n\t\t\tmodule as {\n\t\t\t\tdefault?: {\n\t\t\t\t\tPool?: new (config: {\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t}) => {\n\t\t\t\t\t\tquery: <T extends Record<string, unknown>>(\n\t\t\t\t\t\t\tsql: string,\n\t\t\t\t\t\t) => Promise<{ rows: T[] }>;\n\t\t\t\t\t\tend: () => Promise<void>;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\t\t).default?.Pool;\n\n\tif (!poolConstructor) {\n\t\tthrow new Error(\n\t\t\t'@xylex-group/athena: Unable to load the PostgreSQL driver for schema discovery. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.',\n\t\t);\n\t}\n\n\treturn poolConstructor;\n}\n\nasync function discoverDirectSchemas(\n\tconfig: PostgresDirectProviderConfig,\n): Promise<string[]> {\n\tconst PoolConstructor = await loadPgPoolConstructor();\n\tconst pool = new PoolConstructor({\n\t\tconnectionString: withPostgresLibpqCompatConnectionString(\n\t\t\tconfig.connectionString,\n\t\t),\n\t});\n\ttry {\n\t\tconst result = await pool.query(DISCOVER_POSTGRES_SCHEMAS_SQL);\n\t\tconst names = (result.rows as SchemaNameRow[])\n\t\t\t.map(coerceSchemaName)\n\t\t\t.filter((value): value is string => Boolean(value));\n\t\treturn normalizeDiscoveredSchemas(names);\n\t} finally {\n\t\tawait pool.end();\n\t}\n}\n\nasync function discoverGatewaySchemas(\n\tconfig: PostgresGatewayProviderConfig,\n): Promise<string[]> {\n\t// Avoid ReturnType<typeof createClient> — it overflows TS instantiation depth.\n\tinterface GatewayQueryClient {\n\t\tquery: <T>(sql: string) => Promise<{\n\t\t\tdata?: T[] | null;\n\t\t\terror?: { message?: string } | null;\n\t\t\tstatus: number;\n\t\t}>;\n\t}\n\tconst client = (\n\t\tcreateClient as unknown as (c: unknown) => GatewayQueryClient\n\t)({\n\t\tbackend: {\n\t\t\ttype: config.backend ?? \"postgresql\",\n\t\t},\n\t\tclient: config.client,\n\t\tdb: { url: config.gatewayUrl },\n\t\tenv: typeof process === \"undefined\" ? undefined : process.env,\n\t\tkey: config.apiKey,\n\t});\n\n\tconst result = await client.query<SchemaNameRow>(\n\t\tDISCOVER_POSTGRES_SCHEMAS_SQL,\n\t);\n\tif (result.error || result.status < 200 || result.status >= 300) {\n\t\tthrow new Error(\n\t\t\tresult.error?.message ??\n\t\t\t\t`Gateway schema discovery failed with status ${result.status}`,\n\t\t);\n\t}\n\n\tconst names = (result.data ?? [])\n\t\t.map(coerceSchemaName)\n\t\t.filter((value): value is string => Boolean(value));\n\treturn normalizeDiscoveredSchemas(names);\n}\n\n/**\n * Discovers application-owned PostgreSQL schemas for generator config auto-fill.\n * Supports both direct Postgres and Athena gateway providers.\n */\nexport async function discoverPostgresSchemas(\n\tprovider: GeneratorProviderConfig,\n): Promise<string[]> {\n\tif (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n\t\treturn discoverDirectSchemas(provider);\n\t}\n\n\tif (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n\t\treturn discoverGatewaySchemas(provider);\n\t}\n\n\tthrow new Error(\n\t\t`Schema discovery is only implemented for postgres direct/gateway providers (received ${provider.kind}/${\"mode\" in provider ? provider.mode : \"unknown\"}).`,\n\t);\n}\n","import type { IntrospectionSnapshot } from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n\tcomposeGeneratorArtifacts,\n\ttype ModelArtifactDescriptorBase,\n\trenderObjectKey,\n\trenderRelationLiteral,\n\tresolveOutputPath,\n} from \"./render-shared.ts\";\nimport { generateTableBuilderArtifactsFromSnapshot } from \"./table-builder-renderer.ts\";\nimport { filterIntrospectionSnapshot } from \"./table-selection.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n\trowTypeName: string;\n\tinsertTypeName: string;\n\tupdateTypeName: string;\n\tmodelConstName: string;\n};\n\nfunction renderModelArtifact(\n\tdatabaseName: string,\n\tdescriptor: ModelRenderDescriptor,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n\tconst columnLines = Object.values(descriptor.table.columns)\n\t\t.map((column) => {\n\t\t\tconst propertyName = escapeTypePropertyName(column.name);\n\t\t\tconst baseType = resolvePostgresColumnType(column);\n\t\t\tconst isOptional = column.isNullable;\n\t\t\tconst typeWithNullability = column.isNullable\n\t\t\t\t? `${baseType} | null`\n\t\t\t\t: baseType;\n\t\t\treturn `  ${propertyName}${isOptional ? \"?\" : \"\"}: ${typeWithNullability}`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst nullableLines = Object.values(descriptor.table.columns)\n\t\t.map(\n\t\t\t(column) =>\n\t\t\t\t`      ${renderObjectKey(column.name)}: ${column.isNullable ? \"true\" : \"false\"}`,\n\t\t)\n\t\t.join(\",\\n\");\n\n\tconst relationEntries = Object.entries(descriptor.table.relations);\n\tconst relationBlock =\n\t\tconfig.features.emitRelations && relationEntries.length > 0\n\t\t\t? `,\n    relations: {\n${relationEntries\n\t.map(\n\t\t([relationKey, relationValue]) =>\n\t\t\t`      ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`,\n\t)\n\t.join(\",\\n\")}\n    }`\n\t\t\t: \"\";\n\n\tconst content = `import { defineModel } from '@xylex-group/athena'\n\nexport interface ${descriptor.rowTypeName} {\n${columnLines}\n}\n\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\n\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\n  meta: {\n    database: ${escapeStringLiteral(databaseName)},\n    schema: ${escapeStringLiteral(descriptor.schemaName)},\n    model: ${escapeStringLiteral(descriptor.tableName)},\n    tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\n    primaryKey: [${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")}],\n    nullable: {\n${nullableLines}\n    }${relationBlock}\n  }\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"model\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\n/**\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\n */\nexport function generateArtifactsFromSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tconfig: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n\tconst normalizedConfig =\n\t\t\"internal\" in config\n\t\t\t? (config as NormalizedAthenaGeneratorConfig)\n\t\t\t: normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n\tconst filteredSnapshot = filterIntrospectionSnapshot(\n\t\tsnapshot,\n\t\tnormalizedConfig.filter,\n\t);\n\tif (normalizedConfig.output.format === \"table-builder\") {\n\t\treturn generateTableBuilderArtifactsFromSnapshot(\n\t\t\tfilteredSnapshot,\n\t\t\tnormalizedConfig,\n\t\t);\n\t}\n\treturn composeGeneratorArtifacts({\n\t\tconfig: normalizedConfig,\n\t\tcreateModelDescriptor({\n\t\t\tproviderName,\n\t\t\tdatabaseName,\n\t\t\tschemaName,\n\t\t\ttableName,\n\t\t\ttable,\n\t\t}) {\n\t\t\tconst modelConstName = toSafeIdentifier(\n\t\t\t\t`${schemaName} ${tableName} model`,\n\t\t\t\tnormalizedConfig.naming.modelConst,\n\t\t\t\t\"model\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\texportConstName: modelConstName,\n\t\t\t\tfilePath: resolveOutputPath(\n\t\t\t\t\tnormalizedConfig.output.targets.model,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\t\tkind: \"model\",\n\t\t\t\t\t\tmodel: tableName,\n\t\t\t\t\t\tprovider: providerName,\n\t\t\t\t\t\tschema: schemaName,\n\t\t\t\t\t},\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t),\n\t\t\t\tinsertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n\t\t\t\tmodelConstName,\n\t\t\t\trowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n\t\t\t\tschemaName,\n\t\t\t\ttable,\n\t\t\t\ttableName,\n\t\t\t\tupdateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n\t\t\t};\n\t\t},\n\t\trenderModelArtifact: (descriptor) =>\n\t\t\trenderModelArtifact(\n\t\t\t\tfilteredSnapshot.database,\n\t\t\t\tdescriptor,\n\t\t\t\tnormalizedConfig,\n\t\t\t),\n\t\tsnapshot: filteredSnapshot,\n\t});\n}\n","export function slugify(input: string): string {\n\treturn input\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 64);\n}\n","import { slugify } from \"../utils/slugify.ts\";\nimport type { NamingStyle } from \"./types.ts\";\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED_IDENTIFIERS = new Set([\n\t\"break\",\n\t\"case\",\n\t\"catch\",\n\t\"class\",\n\t\"const\",\n\t\"continue\",\n\t\"debugger\",\n\t\"default\",\n\t\"delete\",\n\t\"do\",\n\t\"else\",\n\t\"enum\",\n\t\"export\",\n\t\"extends\",\n\t\"false\",\n\t\"finally\",\n\t\"for\",\n\t\"function\",\n\t\"if\",\n\t\"import\",\n\t\"in\",\n\t\"instanceof\",\n\t\"new\",\n\t\"null\",\n\t\"return\",\n\t\"super\",\n\t\"switch\",\n\t\"this\",\n\t\"throw\",\n\t\"true\",\n\t\"try\",\n\t\"typeof\",\n\t\"var\",\n\t\"void\",\n\t\"while\",\n\t\"with\",\n\t\"as\",\n\t\"implements\",\n\t\"interface\",\n\t\"let\",\n\t\"package\",\n\t\"private\",\n\t\"protected\",\n\t\"public\",\n\t\"static\",\n\t\"yield\",\n\t\"any\",\n\t\"boolean\",\n\t\"constructor\",\n\t\"declare\",\n\t\"get\",\n\t\"module\",\n\t\"require\",\n\t\"number\",\n\t\"set\",\n\t\"string\",\n\t\"symbol\",\n\t\"type\",\n\t\"from\",\n\t\"of\",\n]);\n\nfunction splitWords(input: string): string[] {\n\treturn input\n\t\t.trim()\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n\t\t.replace(/[^A-Za-z0-9]+/g, \" \")\n\t\t.split(\" \")\n\t\t.map((word) => word.trim())\n\t\t.filter((word) => word.length > 0);\n}\n\nfunction capitalize(word: string): string {\n\treturn word.length > 0\n\t\t? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`\n\t\t: word;\n}\n\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\n\tconst normalized = candidate.length > 0 ? candidate : fallback;\n\tconst prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized;\n\tif (RESERVED_IDENTIFIERS.has(prefixed)) {\n\t\treturn `${prefixed}_value`;\n\t}\n\treturn prefixed;\n}\n\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\n\tconst words = splitWords(input);\n\tif (words.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tswitch (style) {\n\t\tcase \"preserve\":\n\t\t\treturn input;\n\t\tcase \"camel\": {\n\t\t\tconst [first, ...rest] = words;\n\t\t\treturn `${first.toLowerCase()}${rest.map(capitalize).join(\"\")}`;\n\t\t}\n\t\tcase \"pascal\":\n\t\t\treturn words.map(capitalize).join(\"\");\n\t\tcase \"snake\":\n\t\t\treturn words.map((word) => word.toLowerCase()).join(\"_\");\n\t\tcase \"kebab\":\n\t\t\treturn slugify(words.join(\"-\"));\n\t\tdefault:\n\t\t\treturn input;\n\t}\n}\n\nexport function toSafeIdentifier(\n\tinput: string,\n\tstyle: NamingStyle,\n\tfallback = \"value\",\n): string {\n\tconst transformed = applyNamingStyle(input, style);\n\tconst normalized = transformed\n\t\t.replace(/[^A-Za-z0-9_$]+/g, \"_\")\n\t\t.replace(/^_+|_+$/g, \"\");\n\tconst fallbackValue = splitWords(input).join(\"\");\n\treturn ensureValidIdentifier(\n\t\tnormalized.length > 0 ? normalized : fallbackValue,\n\t\tfallback,\n\t);\n}\n\n/**\n * Render an object/type property key.\n *\n * Quotes only when the name is not a valid ECMAScript IdentifierName.\n * Reserved words such as `public` stay unquoted — they are legal as property\n * names in object literals and type members (unlike bare binding identifiers).\n */\nexport function escapeTypePropertyName(propertyName: string): string {\n\tif (IDENTIFIER_PATTERN.test(propertyName)) {\n\t\treturn propertyName;\n\t}\n\treturn `'${propertyName.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapeStringLiteral(value: string): string {\n\treturn `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n","import type { IntrospectionColumn } from \"../schema/types.ts\";\n\nconst NUMBER_TYPES = new Set([\n\t\"int2\",\n\t\"int4\",\n\t\"float4\",\n\t\"float8\",\n\t\"smallint\",\n\t\"integer\",\n\t\"real\",\n\t\"double precision\",\n]);\n\nconst STRING_NUMERIC_TYPES = new Set([\n\t\"int8\",\n\t\"bigint\",\n\t\"serial8\",\n\t\"bigserial\",\n\t\"numeric\",\n\t\"decimal\",\n\t\"money\",\n]);\n\nconst TEXT_TYPES = new Set([\n\t\"char\",\n\t\"bpchar\",\n\t\"varchar\",\n\t\"character varying\",\n\t\"text\",\n\t\"citext\",\n\t\"name\",\n\t\"uuid\",\n\t\"date\",\n\t\"time\",\n\t\"timetz\",\n\t\"timestamp\",\n\t\"timestamptz\",\n\t\"interval\",\n\t\"inet\",\n\t\"cidr\",\n\t\"macaddr\",\n\t\"macaddr8\",\n\t\"point\",\n\t\"line\",\n\t\"lseg\",\n\t\"box\",\n\t\"path\",\n\t\"polygon\",\n\t\"circle\",\n\t\"bit\",\n\t\"varbit\",\n\t\"xml\",\n\t\"tsvector\",\n\t\"tsquery\",\n\t\"jsonpath\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n\tconst preferred = (column.udtName || column.dataType).toLowerCase().trim();\n\tif (column.arrayDimensions > 0 && preferred.startsWith(\"_\")) {\n\t\treturn preferred.slice(1);\n\t}\n\treturn preferred;\n}\n\nfunction wrapArrayType(baseType: string, depth: number): string {\n\tlet wrapped = baseType;\n\tfor (let index = 0; index < depth; index += 1) {\n\t\twrapped = `Array<${wrapped}>`;\n\t}\n\treturn wrapped;\n}\n\nfunction resolveScalarType(column: IntrospectionColumn): string {\n\tconst label = normalizeTypeLabel(column);\n\n\tif (NUMBER_TYPES.has(label)) {\n\t\treturn \"number\";\n\t}\n\n\tif (STRING_NUMERIC_TYPES.has(label)) {\n\t\treturn \"string\";\n\t}\n\n\tif (label === \"bool\" || label === \"boolean\") {\n\t\treturn \"boolean\";\n\t}\n\n\tif (label === \"bytea\") {\n\t\treturn \"Buffer\";\n\t}\n\n\tif (label === \"json\" || label === \"jsonb\") {\n\t\treturn \"Record<string, unknown>\";\n\t}\n\n\tif (TEXT_TYPES.has(label)) {\n\t\treturn \"string\";\n\t}\n\n\tif (label.endsWith(\"range\") || label.endsWith(\"multirange\")) {\n\t\treturn \"string\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\n\tif (column.typeKind === \"enum\") {\n\t\tconst values = column.enumValues ?? [];\n\t\tif (values.length === 0) {\n\t\t\treturn \"string\";\n\t\t}\n\t\treturn values\n\t\t\t.map((value) => `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`)\n\t\t\t.join(\" | \");\n\t}\n\n\tif (column.typeKind === \"composite\") {\n\t\treturn \"Record<string, unknown>\";\n\t}\n\n\tif (\n\t\tcolumn.typeKind === \"domain\" ||\n\t\tcolumn.typeKind === \"range\" ||\n\t\tcolumn.typeKind === \"multirange\"\n\t) {\n\t\treturn \"string\";\n\t}\n\n\treturn resolveScalarType(column);\n}\n\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\n\tconst baseType = resolveKindAwareType(column);\n\tif (!column.arrayDimensions || column.arrayDimensions <= 0) {\n\t\treturn baseType;\n\t}\n\treturn wrapArrayType(baseType, column.arrayDimensions);\n}\n","export interface RenderGeneratedFileHeaderOptions {\n\t/** Config / authority path shown in the header. Defaults to `athena.config.ts`. */\n\tsource?: string;\n}\n\nconst DEFAULT_GENERATED_HEADER_SOURCE = \"athena.config.ts\";\n\n/**\n * Leading Athena generated-file header (legacy + current).\n * Matches one or more consecutive Athena banners so re-runs cannot stack them.\n */\nconst ATHENA_GENERATED_HEADER_RE =\n\t/^(?:\\uFEFF?\\s*\\/\\*\\*[\\s\\S]*?(?:@generated|Generated by Athena)[\\s\\S]*?\\*\\/\\s*)+/;\n\n/**\n * Exact leading prefix shared by every Athena-generated TypeScript artifact.\n * Prefer {@link isAthenaGeneratedSource} over path/filename heuristics.\n */\nexport const ATHENA_GENERATED_FILE_PREFIX =\n\t\"/**\\n * @generated\\n * Generated by Athena.\" as const;\n\n/**\n * Canonical header for every Athena-generated TypeScript artifact.\n * Prefer {@link renderGeneratedFileHeader} over copying this string.\n */\nexport function renderGeneratedFileHeader(\n\toptions: RenderGeneratedFileHeaderOptions = {},\n): string {\n\tconst source = (options.source ?? DEFAULT_GENERATED_HEADER_SOURCE).trim();\n\tconst sourceLine =\n\t\tsource.length > 0 ? source : DEFAULT_GENERATED_HEADER_SOURCE;\n\treturn `${ATHENA_GENERATED_FILE_PREFIX}\n *\n * DO NOT EDIT MANUALLY.\n * Changes will be overwritten by \\`athena-js generate\\`.\n *\n * Source: ${sourceLine}\n */\n`;\n}\n\n/**\n * True when `source` begins with the canonical Athena `@generated` header.\n * This is the stable detection invariant for models, schemas, relations,\n * registry files, and future policy/codegen output.\n */\nexport function isAthenaGeneratedSource(source: string): boolean {\n\treturn source.replace(/^\\uFEFF/, \"\").startsWith(ATHENA_GENERATED_FILE_PREFIX);\n}\n\n/**\n * Banner required on every generated Athena artifact (Architecture 4.0).\n * @deprecated Prefer {@link renderGeneratedFileHeader}. Kept as the default\n * rendered header for existing imports.\n */\nexport const GENERATED_FILE_BANNER = renderGeneratedFileHeader();\n\n/** Strip any leading Athena generated header(s) from file content. */\nexport function stripGeneratedFileHeader(content: string): string {\n\treturn content.replace(ATHENA_GENERATED_HEADER_RE, \"\");\n}\n\n/**\n * Ensure content starts with exactly one canonical Athena generated header.\n * Idempotent across legacy and current wording (never stacks duplicates).\n */\nexport function withGeneratedFileBanner(\n\tcontent: string,\n\toptions: RenderGeneratedFileHeaderOptions = {},\n): string {\n\tconst body = stripGeneratedFileHeader(content.replace(/^\\uFEFF?/, \"\")).replace(\n\t\t/^\\s*\\n/,\n\t\t\"\",\n\t);\n\treturn `${renderGeneratedFileHeader(options)}\\n${body}`;\n}\n","import { applyNamingStyle } from \"./naming.ts\";\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from \"./types.ts\";\n\nexport interface PlaceholderContext {\n\tdatabase: string;\n\tkind: GeneratorArtifactKind;\n\tmodel: string;\n\tprovider: string;\n\tschema: string;\n}\n\nfunction createStyleTokens(\n\tprefix: string,\n\tvalue: string,\n): Record<string, string> {\n\treturn {\n\t\t[prefix]: value,\n\t\t[`${prefix}_camel`]: applyNamingStyle(value, \"camel\"),\n\t\t[`${prefix}_pascal`]: applyNamingStyle(value, \"pascal\"),\n\t\t[`${prefix}_snake`]: applyNamingStyle(value, \"snake\"),\n\t\t[`${prefix}_kebab`]: applyNamingStyle(value, \"kebab\"),\n\t};\n}\n\nfunction renderTemplate(\n\ttemplate: string,\n\ttokenMap: Record<string, string>,\n): string {\n\treturn template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\n\t\tif (!(token in tokenMap)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown placeholder token \"${token}\" in template \"${template}\"`,\n\t\t\t);\n\t\t}\n\t\treturn tokenMap[token];\n\t});\n}\n\nfunction resolvePlaceholderMap(\n\tbaseTokens: Record<string, string>,\n\toutputConfig: GeneratorOutputConfig,\n): Record<string, string> {\n\tconst resolved: Record<string, string> = {\n\t\t...baseTokens,\n\t};\n\tconst reservedTokenKeys = new Set(Object.keys(baseTokens));\n\n\tconst entries = Object.entries(outputConfig.placeholderMap ?? {});\n\tfor (const [key, value] of entries) {\n\t\tif (reservedTokenKeys.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet current = value;\n\t\tfor (let depth = 0; depth < 8; depth += 1) {\n\t\t\tconst next = renderTemplate(current, resolved);\n\t\t\tif (next === current) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = next;\n\t\t}\n\t\tresolved[key] = current;\n\t}\n\n\treturn resolved;\n}\n\nexport function renderOutputPath(\n\ttemplate: string,\n\tcontext: PlaceholderContext,\n\toutputConfig: GeneratorOutputConfig,\n): string {\n\tconst baseTokens: Record<string, string> = {\n\t\tkind: context.kind,\n\t\tprovider: context.provider,\n\t\t...createStyleTokens(\"database\", context.database),\n\t\t...createStyleTokens(\"schema\", context.schema),\n\t\t...createStyleTokens(\"model\", context.model),\n\t};\n\n\tconst tokens = resolvePlaceholderMap(baseTokens, outputConfig);\n\treturn renderTemplate(template, tokens);\n}\n","import { posix } from \"node:path\";\nimport type {\n\tIntrospectionRelation,\n\tIntrospectionSnapshot,\n\tIntrospectionTable,\n} from \"../schema/types.ts\";\nimport {\n\tATHENA_GENERATED_FILE_PREFIX,\n\tGENERATED_FILE_BANNER,\n\tisAthenaGeneratedSource,\n\trenderGeneratedFileHeader,\n\tstripGeneratedFileHeader,\n\twithGeneratedFileBanner,\n\ttype RenderGeneratedFileHeaderOptions,\n} from \"./generated-file-header.ts\";\nimport {\n\tapplyNamingStyle,\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { renderOutputPath } from \"./placeholders.ts\";\nimport type {\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport {\n\tATHENA_GENERATED_FILE_PREFIX,\n\tGENERATED_FILE_BANNER,\n\tisAthenaGeneratedSource,\n\trenderGeneratedFileHeader,\n\tstripGeneratedFileHeader,\n\twithGeneratedFileBanner,\n};\nexport type { RenderGeneratedFileHeaderOptions };\n\ntype OutputPathKind = \"model\" | \"schema\" | \"database\" | \"registry\";\n\ninterface OutputPathTokens {\n\tdatabase: string;\n\tkind: OutputPathKind;\n\tmodel: string;\n\tprovider: string;\n\tschema: string;\n}\n\ninterface SchemaScopedPathDescriptor {\n\tfilePath: string;\n\tschemaName: string;\n}\n\ninterface DatabaseArtifactDescriptor<\n\tTSchema extends SchemaArtifactDescriptor = SchemaArtifactDescriptor,\n> {\n\tdatabaseConstName: string;\n\tfilePath: string;\n\tschemas: TSchema[];\n}\n\ninterface ComposeGeneratorArtifactsInput<\n\tTModel extends ModelArtifactDescriptorBase,\n> {\n\tconfig: NormalizedAthenaGeneratorConfig;\n\tcreateModelDescriptor: (input: {\n\t\tproviderName: string;\n\t\tdatabaseName: string;\n\t\tschemaName: string;\n\t\ttableName: string;\n\t\ttable: IntrospectionTable;\n\t}) => TModel;\n\trenderModelArtifact: (descriptor: TModel) => GeneratedArtifact;\n\tsnapshot: IntrospectionSnapshot;\n}\n\nexport interface ModelArtifactDescriptorBase\n\textends SchemaScopedPathDescriptor {\n\texportConstName: string;\n\ttable: IntrospectionTable;\n\ttableName: string;\n}\n\nexport interface SchemaArtifactDescriptor<\n\tTModel extends ModelArtifactDescriptorBase = ModelArtifactDescriptorBase,\n> extends SchemaScopedPathDescriptor {\n\tmodels: TModel[];\n\tschemaConstName: string;\n}\n\nexport function normalizePath(pathValue: string): string {\n\treturn pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction withoutTypeScriptExtension(pathValue: string): string {\n\treturn pathValue.replace(/\\.tsx?$/i, \"\");\n}\n\nexport function toModuleImportPath(\n\tfromFile: string,\n\ttargetFile: string,\n): string {\n\tconst relativePath = withoutTypeScriptExtension(\n\t\tnormalizePath(posix.relative(posix.dirname(fromFile), targetFile)),\n\t);\n\treturn relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n\nexport function resolveOutputPath(\n\ttarget: string,\n\ttokens: OutputPathTokens,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): string {\n\treturn normalizePath(renderOutputPath(target, tokens, config.output));\n}\n\nconst IDENTIFIER_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nexport function renderObjectKey(key: string): string {\n\treturn escapeTypePropertyName(key);\n}\n\nexport interface RenderObjectPropertyOptions {\n\t/** Indentation prefix. Defaults to two spaces. */\n\tindent?: string;\n}\n\n/**\n * Render one object-literal property with Athena generator style.\n * Emits ES shorthand when the unquoted key equals the value identifier:\n * `accounts` instead of `accounts: accounts`.\n */\nexport function renderObjectProperty(\n\tkey: string,\n\tvalue: string,\n\toptions: RenderObjectPropertyOptions = {},\n): string {\n\tconst indent = options.indent ?? \"  \";\n\tconst renderedKey = renderObjectKey(key);\n\tconst trimmedValue = value.trim();\n\tconst canShorthand =\n\t\tIDENTIFIER_NAME_PATTERN.test(key) &&\n\t\trenderedKey === key &&\n\t\ttrimmedValue === key;\n\treturn `${indent}${canShorthand ? renderedKey : `${renderedKey}: ${trimmedValue}`}`;\n}\n\nexport interface RenderObjectLiteralOptions\n\textends RenderObjectPropertyOptions {\n\t/**\n\t * When true (default), every property line ends with a trailing comma —\n\t * including the last entry — matching Athena generated TS style.\n\t */\n\ttrailingCommas?: boolean;\n}\n\n/**\n * Render a multi-line object-literal body (one property per line).\n */\nexport function renderObjectLiteral(\n\tentries: ReadonlyArray<{ key: string; value: string }>,\n\toptions: RenderObjectLiteralOptions = {},\n): string {\n\tconst trailingCommas = options.trailingCommas !== false;\n\treturn entries\n\t\t.map((entry) => {\n\t\t\tconst property = renderObjectProperty(entry.key, entry.value, options);\n\t\t\treturn trailingCommas ? `${property},` : property;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nexport function renderRelationLiteral(relation: IntrospectionRelation): string {\n\tconst through = relation.through\n\t\t? `,\n      through: {\n        schema: ${escapeStringLiteral(relation.through.schema)},\n        model: ${escapeStringLiteral(relation.through.model)},\n        sourceColumns: [${relation.through.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n        targetColumns: [${relation.through.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      }`\n\t\t: \"\";\n\n\treturn `{\n      kind: ${escapeStringLiteral(relation.kind)},\n      sourceColumns: [${relation.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      targetSchema: ${escapeStringLiteral(relation.targetSchema)},\n      targetModel: ${escapeStringLiteral(relation.targetModel)},\n      targetColumns: [${relation.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}]${through}\n    }`;\n}\n\nexport function renderSchemaArtifact<\n\tTModel extends ModelArtifactDescriptorBase,\n>(descriptor: SchemaArtifactDescriptor<TModel>): GeneratedArtifact {\n\tconst importLines = descriptor.models\n\t\t.map((modelDescriptor) => {\n\t\t\tconst importPath = toModuleImportPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tmodelDescriptor.filePath,\n\t\t\t);\n\t\t\treturn `import { ${modelDescriptor.exportConstName} } from '${importPath}'`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst modelEntries = renderObjectLiteral(\n\t\tdescriptor.models.map((modelDescriptor) => ({\n\t\t\tkey: modelDescriptor.tableName,\n\t\t\tvalue: modelDescriptor.exportConstName,\n\t\t})),\n\t);\n\n\tconst content = `import { defineSchema } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.schemaConstName} = defineSchema({\n${modelEntries}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"schema\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function renderDatabaseArtifact<\n\tTSchema extends SchemaArtifactDescriptor,\n>(descriptor: DatabaseArtifactDescriptor<TSchema>): GeneratedArtifact {\n\tconst importLines = descriptor.schemas\n\t\t.map((schemaDescriptor) => {\n\t\t\tconst importPath = toModuleImportPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tschemaDescriptor.filePath,\n\t\t\t);\n\t\t\treturn `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\tconst schemaEntries = renderObjectLiteral(\n\t\tdescriptor.schemas.map((schemaDescriptor) => ({\n\t\t\tkey: schemaDescriptor.schemaName,\n\t\t\tvalue: schemaDescriptor.schemaConstName,\n\t\t})),\n\t);\n\n\tconst content = `import { defineDatabase } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.databaseConstName} = defineDatabase({\n${schemaEntries}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"database\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function renderRegistryArtifact(\n\tregistryPath: string,\n\tdatabasePath: string,\n\tdatabaseConstName: string,\n\tregistryConstName: string,\n\tdatabaseName: string,\n\tgeneratedAt: string,\n\toutputPreset: NormalizedAthenaGeneratorConfig[\"output\"][\"preset\"],\n\toutputFormat: NormalizedAthenaGeneratorConfig[\"output\"][\"format\"],\n\tschemaVersion: number,\n): GeneratedArtifact {\n\tconst databaseImportPath = toModuleImportPath(registryPath, databasePath);\n\tconst content = `import { defineRegistry } from '@xylex-group/athena'\nimport { ${databaseConstName} } from '${databaseImportPath}'\n\nexport const __athena_schema_meta = {\n  schemaVersion: ${schemaVersion},\n  generatedAt: ${escapeStringLiteral(generatedAt)},\n  database: ${escapeStringLiteral(databaseName)},\n  outputPreset: ${escapeStringLiteral(outputPreset)},\n  outputFormat: ${escapeStringLiteral(outputFormat)},\n} as const\n\nexport const ${registryConstName} = defineRegistry({\n${renderObjectProperty(databaseName, databaseConstName)}\n})\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"registry\",\n\t\tpath: registryPath,\n\t};\n}\n\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n\tconst seen = new Map<string, GeneratedArtifact>();\n\tfor (const file of files) {\n\t\tconst existing = seen.get(file.path);\n\t\tif (existing) {\n\t\t\tthrow new Error(\n\t\t\t\t[\n\t\t\t\t\t`Generator output collision detected for path: ${file.path}`,\n\t\t\t\t\t`Collision: ${existing.kind} and ${file.kind}.`,\n\t\t\t\t\t\"Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.\",\n\t\t\t\t].join(\" \"),\n\t\t\t);\n\t\t}\n\t\tseen.set(file.path, file);\n\t}\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n\tconst normalizedPath = normalizePath(pathValue);\n\tconst parsedPath = posix.parse(normalizedPath);\n\tconst schemaSegment = applyNamingStyle(schemaName, \"kebab\");\n\tif (!schemaSegment) {\n\t\treturn normalizedPath;\n\t}\n\n\tconst dir =\n\t\tparsedPath.dir.length > 0\n\t\t\t? `${parsedPath.dir}/${schemaSegment}`\n\t\t\t: schemaSegment;\n\treturn normalizePath(posix.join(dir, parsedPath.base));\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n\tTDescriptor extends SchemaScopedPathDescriptor,\n>(descriptors: TDescriptor[]): TDescriptor[] {\n\tconst nextDescriptors = descriptors.map((descriptor) => ({ ...descriptor }));\n\tconst duplicates = new Map<string, number[]>();\n\n\tfor (let index = 0; index < nextDescriptors.length; index += 1) {\n\t\tconst descriptor = nextDescriptors[index];\n\t\tconst indexes = duplicates.get(descriptor.filePath) ?? [];\n\t\tindexes.push(index);\n\t\tduplicates.set(descriptor.filePath, indexes);\n\t}\n\n\tlet appliedSchemaScoping = false;\n\tfor (const indexes of duplicates.values()) {\n\t\tif (indexes.length <= 1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst schemaNames = new Set(\n\t\t\tindexes.map((index) => nextDescriptors[index].schemaName),\n\t\t);\n\t\tif (schemaNames.size <= 1) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const index of indexes) {\n\t\t\tconst descriptor = nextDescriptors[index];\n\t\t\tdescriptor.filePath = addSchemaSegmentToPath(\n\t\t\t\tdescriptor.filePath,\n\t\t\t\tdescriptor.schemaName,\n\t\t\t);\n\t\t}\n\t\tappliedSchemaScoping = true;\n\t}\n\n\tif (!appliedSchemaScoping) {\n\t\treturn nextDescriptors;\n\t}\n\n\tconst normalizedPaths = new Set<string>();\n\tfor (const descriptor of nextDescriptors) {\n\t\tif (normalizedPaths.has(descriptor.filePath)) {\n\t\t\tthrow new Error(\n\t\t\t\t[\n\t\t\t\t\t`Generator output collision detected for path: ${descriptor.filePath}`,\n\t\t\t\t\t\"Automatic schema path scoping was applied but collisions remain.\",\n\t\t\t\t\t\"Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.\",\n\t\t\t\t].join(\" \"),\n\t\t\t);\n\t\t}\n\t\tnormalizedPaths.add(descriptor.filePath);\n\t}\n\n\treturn nextDescriptors;\n}\n\nexport function composeGeneratorArtifacts<\n\tTModel extends ModelArtifactDescriptorBase,\n>(input: ComposeGeneratorArtifactsInput<TModel>): GeneratedArtifacts {\n\tconst { snapshot, config, createModelDescriptor, renderModelArtifact } =\n\t\tinput;\n\tconst providerName = snapshot.backend;\n\tconst databaseName = snapshot.database;\n\tconst modelDescriptors: TModel[] = [];\n\n\tfor (const schemaName of Object.keys(snapshot.schemas).sort()) {\n\t\tconst schema = snapshot.schemas[schemaName];\n\t\tfor (const tableName of Object.keys(schema.tables).sort()) {\n\t\t\tmodelDescriptors.push(\n\t\t\t\tcreateModelDescriptor({\n\t\t\t\t\tdatabaseName,\n\t\t\t\t\tproviderName,\n\t\t\t\t\tschemaName,\n\t\t\t\t\ttable: schema.tables[tableName],\n\t\t\t\t\ttableName,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tconst scopedModelDescriptors =\n\t\tscopeDuplicateDescriptorPathsBySchema(modelDescriptors);\n\n\tlet schemaDescriptors: SchemaArtifactDescriptor<TModel>[] = Object.keys(\n\t\tsnapshot.schemas,\n\t)\n\t\t.sort()\n\t\t.map((schemaName) => ({\n\t\t\tfilePath: resolveOutputPath(\n\t\t\t\tconfig.output.targets.schema,\n\t\t\t\t{\n\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\tkind: \"schema\",\n\t\t\t\t\tmodel: \"index\",\n\t\t\t\t\tprovider: providerName,\n\t\t\t\t\tschema: schemaName,\n\t\t\t\t},\n\t\t\t\tconfig,\n\t\t\t),\n\t\t\tmodels: scopedModelDescriptors.filter(\n\t\t\t\t(model) => model.schemaName === schemaName,\n\t\t\t),\n\t\t\tschemaConstName: toSafeIdentifier(\n\t\t\t\t`${schemaName} schema`,\n\t\t\t\tconfig.naming.schemaConst,\n\t\t\t\t\"schema\",\n\t\t\t),\n\t\t\tschemaName,\n\t\t}));\n\n\tschemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors);\n\n\tconst databaseDescriptor: DatabaseArtifactDescriptor<\n\t\tSchemaArtifactDescriptor<TModel>\n\t> = {\n\t\tdatabaseConstName: toSafeIdentifier(\n\t\t\t`${databaseName} database`,\n\t\t\tconfig.naming.databaseConst,\n\t\t\t\"database\",\n\t\t),\n\t\tfilePath: resolveOutputPath(\n\t\t\tconfig.output.targets.database,\n\t\t\t{\n\t\t\t\tdatabase: databaseName,\n\t\t\t\tkind: \"database\",\n\t\t\t\tmodel: \"index\",\n\t\t\t\tprovider: providerName,\n\t\t\t\tschema: \"index\",\n\t\t\t},\n\t\t\tconfig,\n\t\t),\n\t\tschemas: schemaDescriptors,\n\t};\n\n\tconst files: GeneratedArtifact[] = [];\n\n\tfor (const modelDescriptor of scopedModelDescriptors) {\n\t\tfiles.push(renderModelArtifact(modelDescriptor));\n\t}\n\n\tfor (const schemaDescriptor of schemaDescriptors) {\n\t\tfiles.push(renderSchemaArtifact(schemaDescriptor));\n\t}\n\n\tfiles.push(renderDatabaseArtifact(databaseDescriptor));\n\n\tif (config.features.emitRegistry) {\n\t\tconst registryPath = resolveOutputPath(\n\t\t\tconfig.output.targets.registry,\n\t\t\t{\n\t\t\t\tdatabase: databaseName,\n\t\t\t\tkind: \"registry\",\n\t\t\t\tmodel: \"index\",\n\t\t\t\tprovider: providerName,\n\t\t\t\tschema: \"index\",\n\t\t\t},\n\t\t\tconfig,\n\t\t);\n\t\tfiles.push(\n\t\t\trenderRegistryArtifact(\n\t\t\t\tregistryPath,\n\t\t\t\tdatabaseDescriptor.filePath,\n\t\t\t\tdatabaseDescriptor.databaseConstName,\n\t\t\t\ttoSafeIdentifier(\"registry\", config.naming.registryConst, \"registry\"),\n\t\t\t\tdatabaseName,\n\t\t\t\tsnapshot.generatedAt,\n\t\t\t\tconfig.output.preset,\n\t\t\t\tconfig.output.format,\n\t\t\t\tconfig.internal.schemaVersion,\n\t\t\t),\n\t\t);\n\t}\n\n\tassertNoDuplicatePaths(files);\n\n\treturn {\n\t\tfiles: files.map((file) => ({\n\t\t\t...file,\n\t\t\tcontent: withGeneratedFileBanner(file.content),\n\t\t})),\n\t\tsnapshot,\n\t};\n}\n","import { parseSchemaTypeString } from \"../schema/diff/normalize.ts\";\nimport type {\n\tIntrospectionColumn,\n\tIntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n\tescapeStringLiteral,\n\tescapeTypePropertyName,\n\ttoSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n\tcomposeGeneratorArtifacts,\n\ttype ModelArtifactDescriptorBase,\n\trenderObjectKey,\n\trenderRelationLiteral,\n\tresolveOutputPath,\n} from \"./render-shared.ts\";\nimport type {\n\tAthenaGeneratorConfig,\n\tGeneratedArtifact,\n\tGeneratedArtifacts,\n\tNormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n\trowTypeName: string;\n\tinsertTypeName: string;\n\tupdateTypeName: string;\n\tformValuesTypeName: string;\n\ttableConstName: string;\n};\n\nconst SAFE_NUMBER_TYPES = new Set([\n\t\"int2\",\n\t\"int4\",\n\t\"float4\",\n\t\"float8\",\n\t\"smallint\",\n\t\"integer\",\n\t\"real\",\n\t\"double precision\",\n]);\n\nconst JSON_TYPES = new Set([\"json\", \"jsonb\"]);\nconst BOOLEAN_TYPES = new Set([\"bool\", \"boolean\"]);\n/** Exact-numeric PG types → `decimal()` (string-backed, precision-safe). */\nconst DECIMAL_TYPES = new Set([\"numeric\", \"decimal\", \"money\"]);\n/** Wide integers / opaque bytes stay string until dedicated primitives land. */\nconst STRING_TYPES = new Set([\n\t\"int8\",\n\t\"bigint\",\n\t\"serial8\",\n\t\"bigserial\",\n\t\"bytea\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n\tconst preferred = (column.udtName || column.dataType).toLowerCase().trim();\n\t// Strip format_type params: \"numeric(12,2)\" → \"numeric\"\n\tconst bare = preferred.replace(/\\s*\\([^)]*\\)\\s*$/, \"\").trim();\n\tif (column.arrayDimensions > 0 && bare.startsWith(\"_\")) {\n\t\treturn bare.slice(1);\n\t}\n\treturn bare;\n}\n\nfunction resolveExactNumericBounds(column: IntrospectionColumn): {\n\tprecision?: number;\n\tscale?: number;\n} {\n\tif (\n\t\ttypeof column.numericPrecision === \"number\" ||\n\t\ttypeof column.numericScale === \"number\"\n\t) {\n\t\treturn {\n\t\t\t...(typeof column.numericPrecision === \"number\"\n\t\t\t\t? { precision: column.numericPrecision }\n\t\t\t\t: {}),\n\t\t\t...(typeof column.numericScale === \"number\"\n\t\t\t\t? { scale: column.numericScale }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\tconst parsed = parseSchemaTypeString(\n\t\tcolumn.dataType,\n\t\tcolumn.arrayDimensions ?? 0,\n\t);\n\tif (parsed.name !== \"numeric\") {\n\t\treturn {};\n\t}\n\treturn {\n\t\t...(typeof parsed.precision === \"number\"\n\t\t\t? { precision: parsed.precision }\n\t\t\t: {}),\n\t\t...(typeof parsed.scale === \"number\" ? { scale: parsed.scale } : {}),\n\t};\n}\n\nfunction renderDecimalBuilder(column: IntrospectionColumn): string {\n\tconst { precision, scale } = resolveExactNumericBounds(column);\n\n\tif (precision === undefined && scale === undefined) {\n\t\treturn \"decimal()\";\n\t}\n\n\tconst options: string[] = [];\n\tif (precision !== undefined) {\n\t\toptions.push(`precision: ${precision}`);\n\t}\n\tif (scale !== undefined) {\n\t\toptions.push(`scale: ${scale}`);\n\t}\n\treturn `decimal({ ${options.join(\", \")} })`;\n}\n\nfunction renderColumnBuilder(column: IntrospectionColumn): {\n\thelper: \"boolean\" | \"number\" | \"string\" | \"json\" | \"enumeration\" | \"decimal\";\n\texpression: string;\n} {\n\tconst label = normalizeTypeLabel(column);\n\tlet helper:\n\t\t| \"boolean\"\n\t\t| \"number\"\n\t\t| \"string\"\n\t\t| \"json\"\n\t\t| \"enumeration\"\n\t\t| \"decimal\";\n\tlet expression: string;\n\n\tif (\n\t\tcolumn.typeKind === \"enum\" &&\n\t\tcolumn.enumValues &&\n\t\tcolumn.enumValues.length > 0\n\t) {\n\t\thelper = \"enumeration\";\n\t\texpression = `enumeration([${column.enumValues.map((value) => escapeStringLiteral(value)).join(\", \")}] as const)`;\n\t} else if (\n\t\tcolumn.arrayDimensions > 0 ||\n\t\tJSON_TYPES.has(label) ||\n\t\tcolumn.typeKind === \"composite\"\n\t) {\n\t\thelper = \"json\";\n\t\texpression = `json<${resolvePostgresColumnType(column)}>()`;\n\t} else if (BOOLEAN_TYPES.has(label)) {\n\t\thelper = \"boolean\";\n\t\texpression = \"boolean()\";\n\t} else if (SAFE_NUMBER_TYPES.has(label)) {\n\t\thelper = \"number\";\n\t\texpression = \"number()\";\n\t} else if (DECIMAL_TYPES.has(label)) {\n\t\thelper = \"decimal\";\n\t\texpression = renderDecimalBuilder(column);\n\t} else if (STRING_TYPES.has(label)) {\n\t\thelper = \"string\";\n\t\texpression = \"string()\";\n\t} else {\n\t\thelper = \"string\";\n\t\texpression = \"string()\";\n\t}\n\n\tif (column.isNullable) {\n\t\texpression = `${expression}.optional()`;\n\t}\n\tif (column.hasDefault) {\n\t\texpression = `${expression}.defaulted()`;\n\t}\n\tif (column.isGenerated) {\n\t\texpression = `${expression}.generated()`;\n\t}\n\n\treturn { expression, helper };\n}\n\nfunction renderModelArtifact(\n\tdescriptor: ModelRenderDescriptor,\n\tconfig: NormalizedAthenaGeneratorConfig,\n): GeneratedArtifact {\n\tconst helperImports = new Set<string>([\"table\"]);\n\tconst columnLines = Object.entries(descriptor.table.columns)\n\t\t.map(([columnName, column]) => {\n\t\t\tconst propertyName = escapeTypePropertyName(columnName);\n\t\t\tconst rendered = renderColumnBuilder(column);\n\t\t\thelperImports.add(rendered.helper);\n\t\t\treturn `    ${propertyName}: ${rendered.expression}`;\n\t\t})\n\t\t.join(\",\\n\");\n\n\tconst helperImportLine = Array.from(helperImports).sort().join(\", \");\n\tconst rowSchemaConstName = `${descriptor.tableConstName}_row_schema`;\n\tconst insertSchemaConstName = `${descriptor.tableConstName}_insert_schema`;\n\tconst updateSchemaConstName = `${descriptor.tableConstName}_update_schema`;\n\tconst formSchemaConstName = `${descriptor.tableConstName}_form_schema`;\n\n\tconst relationEntries = Object.entries(descriptor.table.relations);\n\tconst relationsAssignment =\n\t\tconfig.features.emitRelations && relationEntries.length > 0\n\t\t\t? `\nObject.assign(${descriptor.tableConstName}.meta, {\n  relations: {\n${relationEntries\n\t.map(\n\t\t([relationKey, relationValue]) =>\n\t\t\t`    ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`,\n\t)\n\t.join(\",\\n\")}\n  }\n})\n`\n\t\t\t: \"\";\n\n\tconst content = `import { ${helperImportLine} } from '@xylex-group/athena'\nimport type { FormValuesOf, InsertOf, RowOf, UpdateOf } from '@xylex-group/athena'\n\nexport const ${descriptor.tableConstName} = table(${escapeStringLiteral(descriptor.tableName)})\n  .schema(${escapeStringLiteral(descriptor.schemaName)})\n  .columns({\n${columnLines}\n  })\n  ${\n\t\tdescriptor.table.primaryKey.length > 0\n\t\t\t? `.primaryKey(${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")})`\n\t\t\t: \".withoutPrimaryKey()\"\n\t}\n${relationsAssignment ? `${relationsAssignment}` : \"\"}\nexport type ${descriptor.rowTypeName} = RowOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.insertTypeName} = InsertOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.updateTypeName} = UpdateOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.formValuesTypeName} = FormValuesOf<typeof ${descriptor.tableConstName}>\n\nexport const ${rowSchemaConstName} = ${descriptor.tableConstName}.schemas.row\nexport const ${insertSchemaConstName} = ${descriptor.tableConstName}.schemas.insert\nexport const ${updateSchemaConstName} = ${descriptor.tableConstName}.schemas.update\nexport const ${formSchemaConstName} = ${descriptor.tableConstName}.schemas.form\n`;\n\n\treturn {\n\t\tcontent,\n\t\tkind: \"model\",\n\t\tpath: descriptor.filePath,\n\t};\n}\n\nexport function generateTableBuilderArtifactsFromSnapshot(\n\tsnapshot: IntrospectionSnapshot,\n\tconfig: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\n): GeneratedArtifacts {\n\tconst normalizedConfig =\n\t\t\"internal\" in config\n\t\t\t? (config as NormalizedAthenaGeneratorConfig)\n\t\t\t: normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n\treturn composeGeneratorArtifacts({\n\t\tconfig: normalizedConfig,\n\t\tcreateModelDescriptor({\n\t\t\tproviderName,\n\t\t\tdatabaseName,\n\t\t\tschemaName,\n\t\t\ttableName,\n\t\t\ttable,\n\t\t}) {\n\t\t\tconst tableConstName = toSafeIdentifier(tableName, \"preserve\", \"table\");\n\t\t\treturn {\n\t\t\t\texportConstName: tableConstName,\n\t\t\t\tfilePath: resolveOutputPath(\n\t\t\t\t\tnormalizedConfig.output.targets.model,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatabase: databaseName,\n\t\t\t\t\t\tkind: \"model\",\n\t\t\t\t\t\tmodel: tableName,\n\t\t\t\t\t\tprovider: providerName,\n\t\t\t\t\t\tschema: schemaName,\n\t\t\t\t\t},\n\t\t\t\t\tnormalizedConfig,\n\t\t\t\t),\n\t\t\t\tformValuesTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}FormValues`,\n\t\t\t\tinsertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n\t\t\t\trowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n\t\t\t\tschemaName,\n\t\t\t\ttable,\n\t\t\t\ttableConstName,\n\t\t\t\ttableName,\n\t\t\t\tupdateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n\t\t\t};\n\t\t},\n\t\trenderModelArtifact: (descriptor) =>\n\t\t\trenderModelArtifact(descriptor, normalizedConfig),\n\t\tsnapshot,\n\t});\n}\n","import { ensureGeneratorConfigFile } from \"../../../generator/config-file.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { isDebugEnabled } from \"../../debug.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, InitCommand } from \"../../types.ts\";\n\nexport { initCatalog, initCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"init\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet dryRun = false;\n\tlet force = false;\n\tlet mode: InitCommand[\"mode\"] = \"auto\";\n\tlet discoverSchemas = true;\n\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"init\" };\n\t\t}\n\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--force\") {\n\t\t\tforce = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--no-discover-schemas\") {\n\t\t\tdiscoverSchemas = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--mode\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Missing value for --mode option. Expected direct or gateway.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnextValue !== \"direct\" &&\n\t\t\t\tnextValue !== \"gateway\" &&\n\t\t\t\tnextValue !== \"auto\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid --mode value \"${nextValue}\". Expected direct, gateway, or auto.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tmode = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow unknownOptionError(token, \"init\");\n\t}\n\n\treturn {\n\t\tcommand: \"init\",\n\t\tconfigPath,\n\t\tdiscoverSchemas,\n\t\tdryRun,\n\t\tforce,\n\t\tmode,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"init\");\n}\n\nexport function sessionTitle(parsed: InitCommand): string {\n\treturn parsed.dryRun ? \"athena-js init · dry-run\" : \"athena-js init\";\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: InitCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, runtime } = ctx;\n\tconst ensureConfig = runtime.ensureConfig ?? ensureGeneratorConfigFile;\n\ttry {\n\t\tif (isDebugEnabled()) {\n\t\t\terrorLog(\n\t\t\t\t`[athena-js] init starting (dryRun=${parsed.dryRun} force=${parsed.force} mode=${parsed.mode}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`,\n\t\t\t);\n\t\t}\n\t\tconst result = await ensureConfig({\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tdiscoverSchemas: parsed.discoverSchemas,\n\t\t\tdryRun: parsed.dryRun,\n\t\t\tforce: parsed.force,\n\t\t\tmode: parsed.mode,\n\t\t});\n\t\tconst prefix = parsed.dryRun ? \"[dry-run] \" : \"\";\n\t\tconst provenance = result.schemaProvenance ?? \"configured\";\n\t\tlog(\n\t\t\t`${prefix}Config ${result.action}: ${result.path} (mode=${result.mode} schemas=${result.schemas.join(\",\") || \"-\"} provenance=${provenance})`,\n\t\t);\n\t\tif (result.reason) {\n\t\t\tlog(`${prefix}reason: ${result.reason}`);\n\t\t}\n\t\tfor (const change of result.changes) {\n\t\t\tif (\n\t\t\t\tprovenance === \"fallback\" &&\n\t\t\t\t!change.startsWith(\"created-\") &&\n\t\t\t\t!change.startsWith(\"force-\")\n\t\t\t) {\n\t\t\t\tlog(`${prefix}${change}`);\n\t\t\t} else {\n\t\t\t\tlog(`${prefix}- ${change}`);\n\t\t\t}\n\t\t}\n\t\tif (parsed.dryRun && result.content && result.action !== \"unchanged\") {\n\t\t\tlog(`${prefix}--- planned content ---`);\n\t\t\tlog(result.content);\n\t\t}\n\t} catch (error) {\n\t\tconst formatted = formatGeneratorError(error, parsed.configPath);\n\t\tlogCliError(formatted, errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateApplyCommand = defineMigrateCommand({\n\tpath: [\"migrate\"],\n\tmode: \"apply\",\n});\n","import { migrateApplyCommand } from \"./apply.ts\";\nimport { migrateAuthSyncCommand } from \"./auth-sync.ts\";\nimport { migrateCheckCommand } from \"./check.ts\";\nimport { migrateDriftCommand } from \"./drift.ts\";\nimport { migrateExplainCommand } from \"./explain.ts\";\nimport { migrateGraphCommand } from \"./graph.ts\";\nimport { migratePlanCommand } from \"./plan.ts\";\nimport { migrateReconcileCommand } from \"./reconcile.ts\";\nimport { migrateRepairCommand } from \"./repair.ts\";\nimport { migrateStatusCommand } from \"./status.ts\";\nimport { migrateVerifyCommand } from \"./verify.ts\";\n\nexport const migrateCommands = [\n\tmigrateAuthSyncCommand,\n\tmigrateStatusCommand,\n\tmigratePlanCommand,\n\tmigrateCheckCommand,\n\tmigrateGraphCommand,\n\tmigrateExplainCommand,\n\tmigrateDriftCommand,\n\tmigrateReconcileCommand,\n\tmigrateRepairCommand,\n\tmigrateVerifyCommand,\n\tmigrateApplyCommand,\n] as const;\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateCheckCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"check\"],\n\tmode: \"check\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateDriftCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"drift\"],\n\tmode: \"drift\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateExplainCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"explain\"],\n\tmode: \"explain\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateGraphCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"graph\"],\n\tmode: \"graph\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migratePlanCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"plan\"],\n\tmode: \"plan\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateReconcileCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"reconcile\"],\n\tmode: \"reconcile\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateRepairCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"repair\"],\n\tmode: \"repair\",\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateStatusCommand = defineMigrateCommand({\n\tpath: [\"migrate\", \"status\"],\n\tmode: \"status\",\n});\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type {\n\tBillingIngressReplayCommand,\n\tBillingWebhooksCommand,\n\tCliCommand,\n} from \"../../types.ts\";\nimport {\n\ttype BillingReconcileSubjectsCommand,\n\tparse,\n\tparseBillingIngressReplay,\n\tparseBillingWebhooksFlags,\n\trun,\n\tusage,\n} from \"./index.ts\";\n\nexport const billingCommands = [\n\tdefineCommand({\n\t\tlegacy: \"billing-reconcile-subjects\" as CliCommand[\"command\"],\n\t\tparse,\n\t\tpath: [\"billing\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(\n\t\t\t\tctx,\n\t\t\t\tparsed as\n\t\t\t\t\t| BillingReconcileSubjectsCommand\n\t\t\t\t\t| BillingWebhooksCommand\n\t\t\t\t\t| BillingIngressReplayCommand,\n\t\t\t),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-reconcile-subjects\" as CliCommand[\"command\"],\n\t\tparse,\n\t\tpath: [\"billing\", \"reconcile-subjects\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingReconcileSubjectsCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-webhooks\" as CliCommand[\"command\"],\n\t\tparse: (rest) => parseBillingWebhooksFlags(\"status\", rest),\n\t\tpath: [\"billing\", \"webhooks\", \"status\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingWebhooksCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-webhooks\" as CliCommand[\"command\"],\n\t\tparse: (rest) => parseBillingWebhooksFlags(\"reconcile\", rest),\n\t\tpath: [\"billing\", \"webhooks\", \"reconcile\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingWebhooksCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-webhooks\" as CliCommand[\"command\"],\n\t\tparse: (rest) => parseBillingWebhooksFlags(\"status\", rest),\n\t\tpath: [\"billing\", \"ingestion\", \"health\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingWebhooksCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-webhooks\" as CliCommand[\"command\"],\n\t\tparse: (rest) => parseBillingWebhooksFlags(\"verify\", rest),\n\t\tpath: [\"billing\", \"webhooks\", \"verify\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingWebhooksCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tlegacy: \"billing-ingress-replay\" as CliCommand[\"command\"],\n\t\tparse: parseBillingIngressReplay,\n\t\tpath: [\"billing\", \"ingress\", \"replay\"],\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as BillingIngressReplayCommand),\n\t\tusage,\n\t}),\n];\n","import type { BillingImportPlan, BillingImportRunReport } from \"./types.ts\";\n\nfunction evidenceLine(plan: BillingImportPlan): string {\n\tif (plan.evidence.length === 0) {\n\t\treturn \"    (none)\";\n\t}\n\treturn plan.evidence\n\t\t.map((item) => `    - ${item.kind}${item.value ? `: ${item.value}` : \"\"}`)\n\t\t.join(\"\\n\");\n}\n\nfunction actionLine(plan: BillingImportPlan): string {\n\tswitch (plan.action) {\n\t\tcase \"create_active_binding\":\n\t\t\treturn \"create active binding\";\n\t\tcase \"noop\":\n\t\t\treturn \"noop\";\n\t\tcase \"resume_pending\":\n\t\t\treturn \"resume pending binding\";\n\t\tcase \"mark_conflict\":\n\t\t\treturn \"mark conflict\";\n\t\tcase \"none\":\n\t\t\treturn \"no automatic binding\";\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = plan.action;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nexport function formatBillingImportPlan(plan: BillingImportPlan): string {\n\tif (plan.decision === \"conflict\" && plan.candidates.length > 1) {\n\t\tconst candidateLines = plan.candidates\n\t\t\t.map((subject) => `    - ${subject.id}`)\n\t\t\t.join(\"\\n\");\n\t\treturn [\n\t\t\tplan.providerCustomerId,\n\t\t\t\"  → no automatic binding\",\n\t\t\t\"  candidates:\",\n\t\t\tcandidateLines,\n\t\t\t`  reason:`,\n\t\t\t`    ${plan.reason}`,\n\t\t].join(\"\\n\");\n\t}\n\tconst target = plan.subject?.id ?? \"no automatic binding\";\n\treturn [\n\t\tplan.providerCustomerId,\n\t\t`  → ${target}`,\n\t\t`  confidence: ${plan.confidence}`,\n\t\t\"  evidence:\",\n\t\tevidenceLine(plan),\n\t\t\"  action:\",\n\t\t`    ${actionLine(plan)}`,\n\t\t`  reason:`,\n\t\t`    ${plan.reason}`,\n\t].join(\"\\n\");\n}\n\nexport function formatBillingImportReport(report: BillingImportRunReport): string {\n\tconst summary = [\n\t\treport.runId ? `run ID: ${report.runId}` : null,\n\t\treport.traceId ? `trace ID: ${report.traceId}` : null,\n\t\t`connection: ${report.connectionId}`,\n\t\treport.provider\n\t\t\t? `provider: ${report.provider}${report.environment ? `/${report.environment}` : \"\"}`\n\t\t\t: null,\n\t\treport.pagesProcessed != null ? `pages: ${report.pagesProcessed}` : null,\n\t\t`scanned: ${report.customersScanned}`,\n\t\t`bound: ${report.bindingsCreated + report.bindingsActivated}`,\n\t\t`conflicts: ${report.conflicts}`,\n\t\treport.status\n\t\t\t? `checkpoint: ${report.hasMore ? \"checkpointed\" : \"caught-up\"} (${report.status})`\n\t\t\t: null,\n\t]\n\t\t.filter((line): line is string => line != null)\n\t\t.join(\"\\n\");\n\tif (report.plans.length === 0) {\n\t\tif (report.pagesProcessed != null || report.traceId) {\n\t\t\treturn `${summary}\\nNo subject candidates. Email is never auto-merged.`;\n\t\t}\n\t\treturn \"No subject candidates. Email is never auto-merged.\";\n\t}\n\treturn `${summary}\\n\\n${report.plans.map(formatBillingImportPlan).join(\"\\n\\n\")}`;\n}\n","import { formatBillingImportReport } from \"../../../billing/import/report.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { AthenaCliError, formatAthenaCliError } from \"../../errors.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n\tencodeCliJsonSuccess,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type {\n\tBillingIngressReplayCommand,\n\tBillingWebhooksCommand,\n\tCliCommand,\n} from \"../../types.ts\";\nimport {\n\texecuteBillingIngressReplay,\n\texecuteBillingReconcileSubjects,\n\texecuteBillingWebhooks,\n} from \"./execute.ts\";\n\nexport { billingCatalog, billingCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"billing\"];\n\nexport interface BillingReconcileSubjectsCommand {\n\tapply: boolean;\n\tcommand: \"billing-reconcile-subjects\";\n\tconfigPath?: string;\n\tconnectionId?: string;\n\tcursor?: string;\n\tcustomerId?: string;\n\tdryRun: boolean;\n\tincludeAmbiguous: boolean;\n\tjson: boolean;\n\tlimit?: number;\n\tmaxCustomers?: number;\n\tmaxDurationMs?: number;\n\tmaxPages?: number;\n\tprovider?: string;\n\tsubjectId?: string;\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tconst head = rest[0];\n\tif (\n\t\thead === undefined ||\n\t\thead === \"help\" ||\n\t\thead === \"--help\" ||\n\t\thead === \"-h\"\n\t) {\n\t\treturn { command: \"help\", topic: \"billing\" };\n\t}\n\tif (\n\t\thead !== \"reconcile-subjects\" &&\n\t\thead !== \"webhooks\" &&\n\t\thead !== \"ingestion\" &&\n\t\thead !== \"ingress\"\n\t) {\n\t\tthrow unknownOptionError(head, \"billing\");\n\t}\n\tif (head === \"ingress\") {\n\t\tif (rest[1] !== \"replay\") {\n\t\t\tthrow unknownOptionError(rest[1] ?? \"ingress\", \"billing ingress\");\n\t\t}\n\t\treturn parseBillingIngressReplay(rest.slice(2));\n\t}\n\tif (head === \"ingestion\") {\n\t\tif (rest[1] !== \"health\") {\n\t\t\tthrow unknownOptionError(rest[1] ?? \"ingestion\", \"billing ingestion\");\n\t\t}\n\t\treturn parseBillingWebhooksFlags(\"status\", rest.slice(2));\n\t}\n\tif (head === \"webhooks\") {\n\t\treturn parseBillingWebhooks(rest.slice(1));\n\t}\n\tlet apply = false;\n\tlet configPath: string | undefined;\n\tlet connectionId: string | undefined;\n\tlet cursor: string | undefined;\n\tlet customerId: string | undefined;\n\tlet dryRun = true;\n\tlet includeAmbiguous = false;\n\tlet json = false;\n\tlet limit: number | undefined;\n\tlet maxCustomers: number | undefined;\n\tlet maxDurationMs: number | undefined;\n\tlet maxPages: number | undefined;\n\tlet provider: string | undefined;\n\tlet subjectId: string | undefined;\n\tconst flags = rest.slice(1);\n\tfor (let index = 0; index < flags.length; index += 1) {\n\t\tconst token = flags[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"billing\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--apply\") {\n\t\t\tapply = true;\n\t\t\tdryRun = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tapply = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--include-ambiguous\") {\n\t\t\tincludeAmbiguous = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttoken === \"--config\" ||\n\t\t\ttoken === \"--connection\" ||\n\t\t\ttoken === \"--subject\" ||\n\t\t\ttoken === \"--provider\" ||\n\t\t\ttoken === \"--customer\" ||\n\t\t\ttoken === \"--limit\" ||\n\t\t\ttoken === \"--max-pages\" ||\n\t\t\ttoken === \"--max-customers\" ||\n\t\t\ttoken === \"--max-duration\" ||\n\t\t\ttoken === \"--cursor\"\n\t\t) {\n\t\t\tconst nextValue = flags[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(`Missing value for ${token} option.`);\n\t\t\t}\n\t\t\tif (token === \"--config\") {\n\t\t\t\tconfigPath = nextValue;\n\t\t\t} else if (token === \"--connection\") {\n\t\t\t\tconnectionId = nextValue;\n\t\t\t} else if (token === \"--subject\") {\n\t\t\t\tsubjectId = nextValue;\n\t\t\t} else if (token === \"--provider\") {\n\t\t\t\tprovider = nextValue;\n\t\t\t} else if (token === \"--customer\") {\n\t\t\t\tcustomerId = nextValue;\n\t\t\t} else if (token === \"--limit\") {\n\t\t\t\tconst parsedLimit = Number.parseInt(nextValue, 10);\n\t\t\t\tif (!Number.isFinite(parsedLimit) || parsedLimit < 1) {\n\t\t\t\t\tthrow new Error(\"Missing value for --limit option.\");\n\t\t\t\t}\n\t\t\t\tlimit = parsedLimit;\n\t\t\t} else if (token === \"--max-pages\") {\n\t\t\t\tconst parsedPages = Number.parseInt(nextValue, 10);\n\t\t\t\tif (!Number.isFinite(parsedPages) || parsedPages < 1) {\n\t\t\t\t\tthrow new Error(\"Missing value for --max-pages option.\");\n\t\t\t\t}\n\t\t\t\tmaxPages = parsedPages;\n\t\t\t} else if (token === \"--max-customers\") {\n\t\t\t\tconst parsedCustomers = Number.parseInt(nextValue, 10);\n\t\t\t\tif (!Number.isFinite(parsedCustomers) || parsedCustomers < 1) {\n\t\t\t\t\tthrow new Error(\"Missing value for --max-customers option.\");\n\t\t\t\t}\n\t\t\t\tmaxCustomers = parsedCustomers;\n\t\t\t} else if (token === \"--max-duration\") {\n\t\t\t\tconst parsedDuration = Number.parseInt(nextValue, 10);\n\t\t\t\tif (!Number.isFinite(parsedDuration) || parsedDuration < 1) {\n\t\t\t\t\tthrow new Error(\"Missing value for --max-duration option.\");\n\t\t\t\t}\n\t\t\t\tmaxDurationMs = parsedDuration;\n\t\t\t} else {\n\t\t\t\tcursor = nextValue;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"billing reconcile-subjects\");\n\t}\n\treturn {\n\t\tapply,\n\t\tcommand: \"billing-reconcile-subjects\",\n\t\tconfigPath,\n\t\tconnectionId,\n\t\tcursor,\n\t\tcustomerId,\n\t\tdryRun,\n\t\tincludeAmbiguous,\n\t\tjson,\n\t\tlimit,\n\t\tmaxCustomers,\n\t\tmaxDurationMs,\n\t\tmaxPages,\n\t\tprovider,\n\t\tsubjectId,\n\t} as CliCommand;\n}\n\nfunction parseBillingWebhooks(rest: string[]): BillingWebhooksCommand {\n\tconst actionToken = rest[0];\n\tif (\n\t\tactionToken !== \"status\" &&\n\t\tactionToken !== \"reconcile\" &&\n\t\tactionToken !== \"verify\"\n\t) {\n\t\tthrow unknownOptionError(actionToken ?? \"webhooks\", \"billing webhooks\");\n\t}\n\treturn parseBillingWebhooksFlags(actionToken, rest.slice(1));\n}\n\nexport function parseBillingIngressReplay(\n\tflags: readonly string[],\n): CliCommand {\n\tlet classifyOnly = false;\n\tlet configPath: string | undefined;\n\tlet dryRun = false;\n\tlet json = false;\n\tlet limit: number | undefined;\n\tfor (let index = 0; index < flags.length; index += 1) {\n\t\tconst token = flags[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"billing\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--classify-only\") {\n\t\t\tclassifyOnly = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\" || token === \"--limit\") {\n\t\t\tconst nextValue = flags[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(`Missing value for ${token} option.`);\n\t\t\t}\n\t\t\tif (token === \"--config\") {\n\t\t\t\tconfigPath = nextValue;\n\t\t\t} else {\n\t\t\t\tconst parsedLimit = Number.parseInt(nextValue, 10);\n\t\t\t\tif (!Number.isFinite(parsedLimit) || parsedLimit < 1) {\n\t\t\t\t\tthrow new Error(\"Missing value for --limit option.\");\n\t\t\t\t}\n\t\t\t\tlimit = parsedLimit;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"billing ingress replay\");\n\t}\n\treturn {\n\t\tclassifyOnly,\n\t\tcommand: \"billing-ingress-replay\",\n\t\tconfigPath,\n\t\tdryRun,\n\t\tjson,\n\t\tlimit,\n\t};\n}\n\nexport function parseBillingWebhooksFlags(\n\taction: \"status\" | \"reconcile\" | \"verify\",\n\tflags: readonly string[],\n): BillingWebhooksCommand {\n\tlet configPath: string | undefined;\n\tlet connectionId: string | undefined;\n\tlet dryRun = action === \"reconcile\";\n\tlet json = false;\n\tlet provider: string | undefined;\n\tfor (let index = 0; index < flags.length; index += 1) {\n\t\tconst token = flags[index];\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--dry-run\") {\n\t\t\tdryRun = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--apply\") {\n\t\t\tdryRun = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\ttoken === \"--config\" ||\n\t\t\ttoken === \"--connection\" ||\n\t\t\ttoken === \"--provider\"\n\t\t) {\n\t\t\tconst nextValue = flags[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(`Missing value for ${token} option.`);\n\t\t\t}\n\t\t\tif (token === \"--config\") {\n\t\t\t\tconfigPath = nextValue;\n\t\t\t} else if (token === \"--connection\") {\n\t\t\t\tconnectionId = nextValue;\n\t\t\t} else {\n\t\t\t\tprovider = nextValue;\n\t\t\t}\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"billing webhooks\");\n\t}\n\treturn {\n\t\taction: action,\n\t\tcommand: \"billing-webhooks\",\n\t\tconfigPath,\n\t\tconnectionId,\n\t\tdryRun,\n\t\tjson,\n\t\tprovider,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"billing\");\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed:\n\t\t| BillingReconcileSubjectsCommand\n\t\t| BillingWebhooksCommand\n\t\t| BillingIngressReplayCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, runtime } = ctx;\n\ttry {\n\t\tif (parsed.command === \"billing-ingress-replay\") {\n\t\t\tconst report = await executeBillingIngressReplay({\n\t\t\t\tcwd: runtime.cwd ?? ctx.cwd,\n\t\t\t\tparsed,\n\t\t\t});\n\t\t\tif (parsed.json || ctx.output === \"json\") {\n\t\t\t\tlog(\n\t\t\t\t\tstringifyCliJson(\n\t\t\t\t\t\tencodeCliJsonSuccess(\"billing.ingress.replay\", report),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.logRaw(JSON.stringify(report, null, 2));\n\t\t\treturn;\n\t\t}\n\t\tif (parsed.command === \"billing-webhooks\") {\n\t\t\tconst report = await executeBillingWebhooks({\n\t\t\t\tcwd: runtime.cwd ?? ctx.cwd,\n\t\t\t\tparsed,\n\t\t\t});\n\t\t\tif (parsed.json || ctx.output === \"json\") {\n\t\t\t\tlog(stringifyCliJson(encodeCliJsonSuccess(\"billing.webhooks\", report)));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.logRaw(\n\t\t\t\ttypeof report === \"string\" ? report : JSON.stringify(report, null, 2),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst execute =\n\t\t\truntime.runBillingReconcileSubjects ?? executeBillingReconcileSubjects;\n\t\tconst report = await execute({\n\t\t\tcwd: runtime.cwd ?? ctx.cwd,\n\t\t\tparsed,\n\t\t});\n\t\tif (parsed.json || ctx.output === \"json\") {\n\t\t\tlog(\n\t\t\t\tstringifyCliJson(\n\t\t\t\t\tencodeCliJsonSuccess(\"billing.reconcile-subjects\", report),\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(formatBillingImportReport(report));\n\t} catch (error) {\n\t\tsetCliExitCode(exitCodeForError(error));\n\t\tif (error instanceof AthenaCliError) {\n\t\t\tlogCliError(formatAthenaCliError(error), errorLog, capabilities);\n\t\t\treturn;\n\t\t}\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t}\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport type { AthenaBillingConfig } from \"../create-client-config.ts\";\nimport {\n\tATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\tAthenaBillingCredentialError,\n} from \"../errors.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n\tcreateDisabledBillingTraceRecorder,\n\tcreatePostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n\treconcileBillingCustomer,\n\treconcileBillingCustomers,\n} from \"../reconciliation/index.ts\";\nimport { createPostgresBillingReconciliationLeaseStore } from \"../reconciliation/lease.ts\";\nimport { resolveBillingReconciliationLimits } from \"../reconciliation/policy.ts\";\nimport type { BillingReconciliationLimits } from \"../reconciliation/types.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport {\n\tbillingConnectionHasConfiguredCredential,\n\tbillingConnectionMatchesProcessTestMode,\n\tcreateConnectionProviderExecutionContext,\n\tmollieConfigForCredentialReference,\n\tparseBillingCredentialReference,\n} from \"../runtime/local/providers/connection-binding.ts\";\nimport { normalizeMollieRuntimeConfig } from \"../runtime/local/providers/mollie/config.ts\";\nimport { MollieSdkClientPool } from \"../runtime/local/providers/mollie/sdk/client-factory.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { createPostgresBillingImportAuditStore } from \"./audit.ts\";\nimport { shouldAutomaticallyImportBillingCustomers } from \"./automatic.ts\";\nimport {\n\ttype BillingImportDatabase,\n\tcreateBillingImportDatabase,\n\twrapBillingSqlExecutorAsDatabase,\n} from \"./database.ts\";\nimport { runBillingCustomerImportPage } from \"./importer.ts\";\nimport {\n\tcreatePostgresBillingImportBindingStore,\n\tcreatePostgresBillingImportCursorStore,\n\tcreatePostgresBillingImportDocumentStore,\n\tcreatePostgresBillingSubjectDirectory,\n\tlistActiveBillingImportConnections,\n\tresolveBillingImportConnection,\n} from \"./postgres.ts\";\nimport { createMollieBillingCustomerImportPort } from \"./providers/mollie.ts\";\nimport {\n\ttype BillingImportPolicy,\n\ttype BillingImportRunReport,\n\tDEFAULT_BILLING_IMPORT_POLICY,\n} from \"./types.ts\";\n\nexport function importPolicyFromBillingConfig(\n\tbilling?: AthenaBillingConfig,\n): BillingImportPolicy {\n\treturn {\n\t\tallowSecondaryBindings:\n\t\t\tDEFAULT_BILLING_IMPORT_POLICY.allowSecondaryBindings,\n\t\tallowUniqueEmailAutoBind:\n\t\t\tbilling?.import?.customers?.allowUniqueEmailAutoBind === true,\n\t};\n}\n\nfunction isDefaultMollieCredentialReference(reference: string): boolean {\n\ttry {\n\t\tconst parsed = parseBillingCredentialReference(reference);\n\t\treturn parsed.provider === \"mollie\" && parsed.accountId == null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction mollieConfigFromProviders(\n\tconfigured?: BillingProviderConfigMap,\n): NonNullable<BillingProviderConfigMap[\"mollie\"]> | undefined {\n\treturn configured?.mollie;\n}\n\nfunction databaseFromSql(\n\tsql: BillingSqlExecutor | BillingImportDatabase,\n\tpool?: AthenaPostgresPool,\n): BillingImportDatabase {\n\tif (pool) {\n\t\treturn createBillingImportDatabase(pool);\n\t}\n\tif (\"transaction\" in sql && typeof sql.transaction === \"function\") {\n\t\treturn sql;\n\t}\n\treturn wrapBillingSqlExecutorAsDatabase(sql);\n}\n\nfunction toImportReport(\n\tresult: Awaited<ReturnType<typeof reconcileBillingCustomers>>,\n): BillingImportRunReport {\n\treturn {\n\t\tbindingsActivated: result.bindingsActivated,\n\t\tbindingsCreated: result.bindingsCreated,\n\t\tconflicts: result.conflicts,\n\t\tconnectionId: result.connectionId,\n\t\tcorrelationId: result.correlationId,\n\t\tcursorAfter: result.cursorAfter,\n\t\tcursorBefore: result.cursorBefore,\n\t\tcustomersScanned: result.customersScanned,\n\t\tdryRun: result.dryRun,\n\t\tenvironment: result.environment,\n\t\terrors: result.errors,\n\t\thasMore: result.hasMore,\n\t\tpagesProcessed: result.pagesProcessed,\n\t\tplans: result.plans,\n\t\tprovider: result.provider,\n\t\trunId: result.runId,\n\t\tskipped: result.skipped,\n\t\tstatus: result.status,\n\t\ttraceId: result.traceId,\n\t};\n}\n\nexport async function runBillingCustomerImportWithPostgres(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tconnectionId?: string;\n\tcursor?: string;\n\tcustomerId?: string;\n\tdatabase?: BillingImportDatabase;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\tlimit?: number;\n\tlimits?: Partial<BillingReconciliationLimits>;\n\tpolicy?: BillingImportPolicy;\n\tpool?: AthenaPostgresPool;\n\tprovider?: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId?: string;\n\ttestMode?: boolean;\n\ttrigger?: \"bootstrap\" | \"manual\" | \"scheduled\" | \"webhook\";\n\tobservability?: NormalizedAthenaBillingObservability;\n\treconciliationContext?: import(\"../observability/types.ts\").BillingReconciliationContext;\n}): Promise<BillingImportRunReport> {\n\tconst connection = await resolveBillingImportConnection(input.sql, {\n\t\tconnectionId: input.connectionId,\n\t\tprovider: input.provider,\n\t});\n\tif (input.testMode !== undefined && input.testMode !== connection.testMode) {\n\t\tthrow new AthenaBillingCredentialError({\n\t\t\tcode: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n\t\t\tenvironment: connection.environment,\n\t\t\tmessage:\n\t\t\t\t\"billing.testMode does not match billing_provider_connections.environment.\",\n\t\t\tprovider: connection.provider,\n\t\t});\n\t}\n\tconst providerName = (input.provider ?? connection.provider)\n\t\t.trim()\n\t\t.toLowerCase();\n\tif (providerName !== \"mollie\") {\n\t\tthrow new Error(\n\t\t\t`Billing customer import supports Mollie in this slice (got \"${providerName}\").`,\n\t\t);\n\t}\n\tconst mollie =\n\t\tmollieConfigForCredentialReference(\n\t\t\tinput.configuredProviders,\n\t\t\tconnection.credentialReference,\n\t\t) ??\n\t\t(isDefaultMollieCredentialReference(connection.credentialReference)\n\t\t\t? mollieConfigFromProviders(input.configuredProviders)\n\t\t\t: undefined);\n\tif (mollie == null) {\n\t\tthrow new Error(\n\t\t\t`Mollie is not configured for credential_reference \"${connection.credentialReference}\". Set billing.providers.mollie or billing.providers.mollieAccounts.`,\n\t\t);\n\t}\n\tconst normalized = normalizeMollieRuntimeConfig(mollie);\n\tconst pool = new MollieSdkClientPool(normalized);\n\tconst execution = createConnectionProviderExecutionContext({\n\t\tconfiguredProviders: {\n\t\t\t...input.configuredProviders,\n\t\t\tmollie,\n\t\t},\n\t\tconnection,\n\t\toperationScope: \"organization\",\n\t});\n\tconst discovery = createMollieBillingCustomerImportPort({\n\t\tconnection,\n\t\tcontext: execution,\n\t\tpool,\n\t});\n\tconst database = input.database ?? databaseFromSql(input.sql, input.pool);\n\tconst policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n\tconst observability =\n\t\tinput.observability ?? normalizeAthenaBillingObservability();\n\tconst traces = observability.traces.enabled\n\t\t? createPostgresBillingTraceRecorder(\n\t\t\tinput.sql,\n\t\t\tobservability.traces.sampleRate,\n\t\t)\n\t\t: createDisabledBillingTraceRecorder();\n\tconst semanticAudit =\n\t\tinput.dryRun || observability.auditLog === false\n\t\t\t? undefined\n\t\t\t: createPostgresBillingAuditWriter(input.sql);\n\tconst context =\n\t\tinput.reconciliationContext ??\n\t\t(input.trigger === \"scheduled\"\n\t\t\t? mintScheduledBillingReconciliationContext({\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\tschedulerExecutionId: crypto.randomUUID(),\n\t\t\t})\n\t\t\t: mintManualBillingReconciliationContext({\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tprovider: connection.provider,\n\t\t\t\ttrigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n\t\t\t}));\n\tconst limits = resolveBillingReconciliationLimits({\n\t\tpageSize: input.limit ?? input.limits?.pageSize,\n\t\tmaxCustomers: input.limits?.maxCustomers,\n\t\tmaxDurationMs: input.limits?.maxDurationMs,\n\t\tmaxPages: input.limits?.maxPages,\n\t});\n\tconst result =\n\t\tinput.customerId != null\n\t\t\t? await reconcileBillingCustomer({\n\t\t\t\tconnection,\n\t\t\t\tcontext,\n\t\t\t\tdryRun: input.dryRun,\n\t\t\t\tlease: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\t\trootSql: input.sql,\n\t\t\t\trunTargetedPage: (sql) =>\n\t\t\t\t\trunBillingCustomerImportPage({\n\t\t\t\t\t\taudit: input.dryRun\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: createPostgresBillingImportAuditStore(sql),\n\t\t\t\t\t\tbindings: createPostgresBillingImportBindingStore(sql),\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tcursors: createPostgresBillingImportCursorStore(sql),\n\t\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\t\tdirectory: createPostgresBillingSubjectDirectory(sql),\n\t\t\t\t\t\tdiscovery,\n\t\t\t\t\t\tdocuments: createPostgresBillingImportDocumentStore(sql),\n\t\t\t\t\t\tdryRun: input.dryRun,\n\t\t\t\t\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\t\t\t\t\tlimit: limits.pageSize,\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\t\tsemanticAudit:\n\t\t\t\t\t\t\tsemanticAudit == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: createPostgresBillingAuditWriter(sql),\n\t\t\t\t\t\tskipCursorAdvance: true,\n\t\t\t\t\t\tsubjectId: input.subjectId,\n\t\t\t\t\t}),\n\t\t\t\tsemanticAudit,\n\t\t\t\ttraces,\n\t\t\t\ttransaction: (fn) => database.transaction(fn),\n\t\t\t})\n\t\t\t: await reconcileBillingCustomers({\n\t\t\t\taudit: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingImportAuditStore(input.sql),\n\t\t\t\tconnection,\n\t\t\t\tcontext,\n\t\t\t\tcursors: createPostgresBillingImportCursorStore(input.sql),\n\t\t\t\tdryRun: input.dryRun,\n\t\t\t\tlease: input.dryRun\n\t\t\t\t\t? undefined\n\t\t\t\t\t: createPostgresBillingReconciliationLeaseStore(input.sql),\n\t\t\t\tlimits,\n\t\t\t\trootSql: input.sql,\n\t\t\t\trunPage: ({ cursor, limit, sql }) =>\n\t\t\t\t\trunBillingCustomerImportPage({\n\t\t\t\t\t\taudit: input.dryRun\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: createPostgresBillingImportAuditStore(sql),\n\t\t\t\t\t\tbindings: createPostgresBillingImportBindingStore(sql),\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tcursor: cursor ?? undefined,\n\t\t\t\t\t\tcursors: createPostgresBillingImportCursorStore(sql),\n\t\t\t\t\t\tdirectory: createPostgresBillingSubjectDirectory(sql),\n\t\t\t\t\t\tdiscovery,\n\t\t\t\t\t\tdocuments: createPostgresBillingImportDocumentStore(sql),\n\t\t\t\t\t\tdryRun: input.dryRun,\n\t\t\t\t\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\t\t\t\t\tlimit,\n\t\t\t\t\t\tpolicy,\n\t\t\t\t\t\tprovider: connection.provider,\n\t\t\t\t\t\tsemanticAudit:\n\t\t\t\t\t\t\tsemanticAudit == null\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: createPostgresBillingAuditWriter(sql),\n\t\t\t\t\t\tsubjectId: input.subjectId,\n\t\t\t\t\t}),\n\t\t\t\tsemanticAudit,\n\t\t\t\ttraces,\n\t\t\t\ttransaction: (fn) => database.transaction(fn),\n\t\t\t});\n\treturn toImportReport(result);\n}\n\nconst warnedSkippedImportConnections = new Set<string>();\n\nexport async function runAutomaticBillingCustomerImportIfEnabled(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tcustomerImport?: AthenaBillingConfig[\"import\"];\n\tdatabase?: BillingImportDatabase;\n\tobservability?: NormalizedAthenaBillingObservability;\n\tpool?: AthenaPostgresPool;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n\ttrigger?: \"bootstrap\" | \"scheduled\";\n}): Promise<readonly BillingImportRunReport[]> {\n\tif (\n\t\t!shouldAutomaticallyImportBillingCustomers(input.customerImport?.customers)\n\t) {\n\t\treturn [];\n\t}\n\tconst connections = await listActiveBillingImportConnections(\n\t\tinput.sql,\n\t\t\"mollie\",\n\t);\n\tconst reports: BillingImportRunReport[] = [];\n\tconst policy = importPolicyFromBillingConfig({\n\t\timport: input.customerImport,\n\t});\n\tconst limits = input.customerImport?.customers?.limits;\n\tfor (const connection of connections) {\n\t\tif (\n\t\t\t!billingConnectionMatchesProcessTestMode(\n\t\t\t\tconnection.testMode,\n\t\t\t\tinput.testMode,\n\t\t\t)\n\t\t) {\n\t\t\tconst skipKey = `env:${connection.id}`;\n\t\t\tif (!warnedSkippedImportConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedImportConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping customer import; connection environment does not match process billing.testMode\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t\tprocessTestMode: resolveBillingEnvironment({\n\t\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t\t}).testMode,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t!billingConnectionHasConfiguredCredential({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnection,\n\t\t\t})\n\t\t) {\n\t\t\tconst skipKey = `cred:${connection.id}`;\n\t\t\tif (!warnedSkippedImportConnections.has(skipKey)) {\n\t\t\t\twarnedSkippedImportConnections.add(skipKey);\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[athena-billing] skipping customer import; connection environment has no configured credential\",\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectionId: connection.id,\n\t\t\t\t\t\tenvironment: connection.environment,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treports.push(\n\t\t\tawait runBillingCustomerImportWithPostgres({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tconnectionId: connection.id,\n\t\t\t\tdatabase: input.database,\n\t\t\t\tdryRun: false,\n\t\t\t\tlimits,\n\t\t\t\tpolicy,\n\t\t\t\tpool: input.pool,\n\t\t\t\tprovider: \"mollie\",\n\t\t\t\tsql: input.sql,\n\t\t\t\ttestMode: connection.testMode,\n\t\t\t\ttrigger: input.trigger ?? \"bootstrap\",\n\t\t\t\tobservability: input.observability,\n\t\t\t}),\n\t\t);\n\t}\n\treturn reports;\n}\n","export {\n\tcurrentBillingReconciliationContext,\n\tinheritWebhookBillingReconciliationContext,\n\tmintManualBillingReconciliationContext,\n\tmintScheduledBillingReconciliationContext,\n\trunWithBillingReconciliationContext,\n} from \"./context.ts\";\nexport {\n\treconcileBillingCustomer,\n\treconcileBillingCustomers,\n} from \"./coordinator.ts\";\nexport {\n\tBILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\tBILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n\ttype BillingReconciliationLeaseStore,\n\tcreateMemoryBillingReconciliationLeaseStore,\n} from \"./lease.ts\";\nexport {\n\treconciliationBudgetExhausted,\n\tresolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nexport {\n\tAthenaBillingReconciliationError,\n\tbillingReconciliationBackoff,\n\tclassifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nexport {\n\ttype BillingImportExecutionMode,\n\tregisterBillingReconciliationScheduler,\n} from \"./scheduler.ts\";\nexport {\n\ttype BillingImportPageResult,\n\ttype BillingImportRunStatus,\n\ttype BillingReconciliationFailureKind,\n\ttype BillingReconciliationLimits,\n\ttype BillingReconciliationRunResult,\n\tDEFAULT_BILLING_RECONCILIATION_LIMITS,\n\ttype ResolvedBillingProviderConnection,\n} from \"./types.ts\";\nexport { billingReconciliationContextFromIngress } from \"./webhook.ts\";\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { BillingImportAuditStore } from \"../import/audit.ts\";\nimport type { BillingImportCursorStore } from \"../import/apply.ts\";\nimport type { BillingImportPageResult } from \"./types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type {\n\tAthenaBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport { runWithBillingTrace } from \"../observability/traces.ts\";\nimport { runWithBillingReconciliationContext } from \"./context.ts\";\nimport { emitBillingAuditFailure } from \"./semantic-audit.ts\";\nimport type { BillingReconciliationLeaseStore } from \"./lease.ts\";\nimport {\n\tBILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\tbillingReconciliationLeaseTtlMs,\n} from \"./lease.ts\";\nimport {\n\treconciliationBudgetExhausted,\n\tresolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nimport {\n\tAthenaBillingReconciliationError,\n\tclassifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nimport type {\n\tBillingImportRunStatus,\n\tBillingReconciliationLimits,\n\tBillingReconciliationRunResult,\n\tResolvedBillingProviderConnection,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingCustomersInput {\n\taudit?: BillingImportAuditStore;\n\tconnection: ResolvedBillingProviderConnection;\n\tcontext: BillingReconciliationContext;\n\tcursors?: BillingImportCursorStore;\n\tdryRun?: boolean;\n\tlease?: BillingReconciliationLeaseStore;\n\tlimits?: Partial<BillingReconciliationLimits>;\n\townerId?: string;\n\trootSql: BillingSqlExecutor;\n\trunPage: (input: {\n\t\tcursor: string | null;\n\t\tlimit: number;\n\t\tsql: BillingSqlExecutor;\n\t}) => Promise<BillingImportPageResult>;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\ttraces?: AthenaBillingTraceRecorder;\n\ttransaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}\n\nexport async function reconcileBillingCustomers(\n\tinput: ReconcileBillingCustomersInput,\n): Promise<BillingReconciliationRunResult> {\n\tconst limits = resolveBillingReconciliationLimits(input.limits);\n\tconst dryRun = input.dryRun === true;\n\tconst ownerId = input.ownerId ?? crypto.randomUUID();\n\tconst startedMs = performance.now();\n\tconst cursorBefore =\n\t\t(await input.cursors?.get(input.connection.id)) ?? null;\n\tconst trace = input.traces?.start({\n\t\tcausationId: input.context.causationId,\n\t\tconnectionId: input.connection.id,\n\t\tcorrelationId: input.context.correlationId,\n\t\toperation: \"customer.reconcile\",\n\t\tprovider: input.connection.provider,\n\t\ttraceId: input.context.traceId,\n\t\ttrigger: input.context.trigger,\n\t});\n\n\tconst run = async (): Promise<BillingReconciliationRunResult> => {\n\t\tlet leaseEpoch: number | undefined;\n\t\tif (!dryRun && input.lease) {\n\t\t\tconst leasePhase = trace?.phase(\"lease\");\n\t\t\tconst acquired = await input.lease.acquire({\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\townerId,\n\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n\t\t\t});\n\t\t\tleasePhase?.finish();\n\t\t\tif (!acquired) {\n\t\t\t\tthrow new AthenaBillingReconciliationError({\n\t\t\t\t\tkind: \"lease_lost\",\n\t\t\t\t\tmessage: \"Another reconciler holds the customers lease.\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tleaseEpoch = acquired.epoch;\n\t\t}\n\n\t\tlet runId: string | undefined;\n\t\tif (!dryRun && input.audit) {\n\t\t\tconst started = await input.audit.startRun({\n\t\t\t\tcausationId: input.context.causationId,\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\tcursorBefore,\n\t\t\t\tprovider: input.connection.provider,\n\t\t\t\tstatus: \"running\",\n\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\ttrigger: input.context.trigger,\n\t\t\t});\n\t\t\trunId = started.id;\n\t\t}\n\n\t\tlet pagesProcessed = 0;\n\t\tlet customersScanned = 0;\n\t\tlet bindingsCreated = 0;\n\t\tlet bindingsActivated = 0;\n\t\tlet conflicts = 0;\n\t\tlet skipped = 0;\n\t\tlet cursor = cursorBefore;\n\t\tlet cursorAfter = cursorBefore;\n\t\tlet hasMore = true;\n\t\tconst plans: BillingImportPageResult[\"plans\"][number][] = [];\n\t\tlet status: BillingImportRunStatus = \"running\";\n\n\t\ttry {\n\t\t\twhile (hasMore) {\n\t\t\t\tif (\n\t\t\t\t\tpagesProcessed > 0 &&\n\t\t\t\t\treconciliationBudgetExhausted({\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\telapsedMs: performance.now() - startedMs,\n\t\t\t\t\t\tlimits,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstatus = \"checkpointed\";\n\t\t\t\t\thasMore = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst runOnce = async (sql: BillingSqlExecutor) => {\n\t\t\t\t\tif (!dryRun && input.lease) {\n\t\t\t\t\t\tconst held = await input.lease.heartbeat({\n\t\t\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\t\t\t...(leaseEpoch != null ? { epoch: leaseEpoch } : {}),\n\t\t\t\t\t\t\townerId,\n\t\t\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\t\t\t\tttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!held) {\n\t\t\t\t\t\t\tthrow new AthenaBillingReconciliationError({\n\t\t\t\t\t\t\t\tkind: \"lease_lost\",\n\t\t\t\t\t\t\t\tmessage: \"Reconciliation lease was lost.\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn input.runPage({\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tlimit: limits.pageSize,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tconst page = input.transaction\n\t\t\t\t\t? await input.transaction(runOnce)\n\t\t\t\t\t: await runOnce(input.rootSql);\n\n\t\t\t\tpagesProcessed += 1;\n\t\t\t\tcustomersScanned += page.customersScanned;\n\t\t\t\tbindingsCreated += page.bindingsCreated;\n\t\t\t\tbindingsActivated += page.bindingsActivated;\n\t\t\t\tconflicts += page.conflicts;\n\t\t\t\tskipped += page.skipped;\n\t\t\t\tplans.push(...page.plans);\n\t\t\t\tcursor = page.cursorAfter;\n\t\t\t\tcursorAfter = page.cursorAfter;\n\t\t\t\thasMore = page.hasMore;\n\t\t\t\ttrace?.setCounters({ customersScanned, pagesProcessed });\n\n\t\t\t\tif (!hasMore) {\n\t\t\t\t\tstatus =\n\t\t\t\t\t\tconflicts > 0 ? \"completed_with_conflicts\" : \"completed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treconciliationBudgetExhausted({\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\telapsedMs: performance.now() - startedMs,\n\t\t\t\t\t\tlimits,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstatus = \"checkpointed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result: BillingReconciliationRunResult = {\n\t\t\t\tbindingsActivated,\n\t\t\t\tbindingsCreated,\n\t\t\t\tconflicts,\n\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\tcursorAfter,\n\t\t\t\tcursorBefore,\n\t\t\t\tcustomersScanned,\n\t\t\t\tdryRun,\n\t\t\t\tenvironment: input.connection.environment,\n\t\t\t\terrors: 0,\n\t\t\t\thasMore: status === \"checkpointed\" ? true : hasMore,\n\t\t\t\tpagesProcessed,\n\t\t\t\tplans,\n\t\t\t\tprovider: input.connection.provider,\n\t\t\t\trunId,\n\t\t\t\tskipped,\n\t\t\t\tstatus: dryRun ? \"dry_run\" : status,\n\t\t\t\ttraceId: input.context.traceId,\n\t\t\t};\n\t\t\tif (!dryRun && input.audit && runId) {\n\t\t\t\tawait input.audit.completeRun({\n\t\t\t\t\tid: runId,\n\t\t\t\t\treport: {\n\t\t\t\t\t\tbindingsActivated,\n\t\t\t\t\t\tbindingsCreated,\n\t\t\t\t\t\tconflicts,\n\t\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\t\tcorrelationId: input.context.correlationId,\n\t\t\t\t\t\tcursorAfter,\n\t\t\t\t\t\tcursorBefore,\n\t\t\t\t\t\tcustomersScanned,\n\t\t\t\t\t\tdryRun,\n\t\t\t\t\t\terrors: 0,\n\t\t\t\t\t\thasMore: result.hasMore,\n\t\t\t\t\t\tpagesProcessed,\n\t\t\t\t\t\tplans,\n\t\t\t\t\t\trunId,\n\t\t\t\t\t\tskipped,\n\t\t\t\t\t\tstatus: result.status,\n\t\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait trace?.success();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[athena-billing] trace persistence failed\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (!dryRun && input.audit && runId) {\n\t\t\t\tconst message =\n\t\t\t\t\terror instanceof Error ? error.message : \"reconciliation failed\";\n\t\t\t\tawait input.audit.failRun({ error: message, id: runId });\n\t\t\t}\n\t\t\tif (!dryRun && input.semanticAudit) {\n\t\t\t\ttry {\n\t\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\t\tcontext: input.context,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t\t});\n\t\t\t\t} catch (auditError) {\n\t\t\t\t\tconsole.error(\"[athena-billing] failure audit persistence failed\", {\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\tauditError instanceof Error\n\t\t\t\t\t\t\t\t? auditError.message\n\t\t\t\t\t\t\t\t: String(auditError),\n\t\t\t\t\t\ttraceId: input.context.traceId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst kind = classifyBillingReconciliationFailure(error);\n\t\t\tawait trace?.failure(error, kind === \"lease_lost\" ? \"lease\" : \"apply\");\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (!dryRun && input.lease) {\n\t\t\t\tawait input.lease.release({\n\t\t\t\t\tconnectionId: input.connection.id,\n\t\t\t\t\townerId,\n\t\t\t\t\tresourceKind: BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\treturn runWithBillingReconciliationContext(input.context, () =>\n\t\ttrace ? runWithBillingTrace(trace, run) : run(),\n\t);\n}\n\nexport async function reconcileBillingCustomer(input: {\n\tconnection: ResolvedBillingProviderConnection;\n\tcontext: BillingReconciliationContext;\n\tdryRun?: boolean;\n\tlease?: BillingReconciliationLeaseStore;\n\trunTargetedPage: (sql: BillingSqlExecutor) => Promise<BillingImportPageResult>;\n\trootSql: BillingSqlExecutor;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\ttraces?: AthenaBillingTraceRecorder;\n\ttransaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}): Promise<BillingReconciliationRunResult> {\n\treturn reconcileBillingCustomers({\n\t\tconnection: input.connection,\n\t\tcontext: input.context,\n\t\tdryRun: input.dryRun,\n\t\tlease: input.lease,\n\t\tlimits: { maxCustomers: 1, maxDurationMs: 30_000, maxPages: 1, pageSize: 1 },\n\t\trootSql: input.rootSql,\n\t\trunPage: async ({ sql }) => input.runTargetedPage(sql),\n\t\tsemanticAudit: input.semanticAudit,\n\t\ttraces: input.traces,\n\t\ttransaction: input.transaction,\n\t});\n}\n","export type BillingImportRunStatus =\n\t| \"cancelled\"\n\t| \"checkpointed\"\n\t| \"completed\"\n\t| \"completed_with_conflicts\"\n\t| \"failed\"\n\t| \"queued\"\n\t| \"running\";\n\nexport type BillingReconciliationFailureKind =\n\t| \"cursor_invalid\"\n\t| \"database_unavailable\"\n\t| \"internal\"\n\t| \"lease_lost\"\n\t| \"provider_auth_failed\"\n\t| \"provider_rate_limited\"\n\t| \"provider_unavailable\";\n\nexport interface BillingReconciliationLimits {\n\tmaxCustomers: number;\n\tmaxDurationMs: number;\n\tmaxPages: number;\n\tpageSize: number;\n}\n\nexport const DEFAULT_BILLING_RECONCILIATION_LIMITS: BillingReconciliationLimits =\n\t{\n\t\tmaxCustomers: 5000,\n\t\tmaxDurationMs: 120_000,\n\t\tmaxPages: 100,\n\t\tpageSize: 100,\n\t};\n\nexport interface ResolvedBillingProviderConnection {\n\taccountReference: string;\n\tcredentialReference: string;\n\tenvironment: \"live\" | \"test\";\n\tid: string;\n\tprovider: string;\n\tstatus: string;\n\ttestMode: boolean;\n\twebhookIngressToken?: string;\n}\n\nexport interface BillingImportPageResult {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tcursorAfter: string | null;\n\tcursorBefore: string | null;\n\tcustomersScanned: number;\n\thasMore: boolean;\n\tplans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n\tskipped: number;\n}\n\nexport interface BillingReconciliationRunResult {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tconnectionId: string;\n\tcorrelationId: string;\n\tcursorAfter: string | null;\n\tcursorBefore: string | null;\n\tcustomersScanned: number;\n\tdryRun: boolean;\n\tenvironment: \"live\" | \"test\";\n\terrors: number;\n\thasMore: boolean;\n\tpagesProcessed: number;\n\tplans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n\tprovider: string;\n\trunId?: string;\n\tskipped: number;\n\tstatus: BillingImportRunStatus | \"dry_run\";\n\ttraceId: string;\n}\n\nexport interface BillingBackoffDecision {\n\tdelayMs: number;\n\tkind: BillingReconciliationFailureKind;\n\tretry: boolean;\n}\n","import type { BillingReconciliationLimits } from \"./types.ts\";\nimport { DEFAULT_BILLING_RECONCILIATION_LIMITS } from \"./types.ts\";\n\nexport function resolveBillingReconciliationLimits(\n\tinput?: Partial<BillingReconciliationLimits>,\n): BillingReconciliationLimits {\n\treturn {\n\t\tmaxCustomers:\n\t\t\tinput?.maxCustomers ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxCustomers,\n\t\tmaxDurationMs:\n\t\t\tinput?.maxDurationMs ??\n\t\t\tDEFAULT_BILLING_RECONCILIATION_LIMITS.maxDurationMs,\n\t\tmaxPages: input?.maxPages ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxPages,\n\t\tpageSize: input?.pageSize ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.pageSize,\n\t};\n}\n\nexport function reconciliationBudgetExhausted(input: {\n\tcustomersScanned: number;\n\telapsedMs: number;\n\tlimits: BillingReconciliationLimits;\n\tpagesProcessed: number;\n}): boolean {\n\treturn (\n\t\tinput.pagesProcessed >= input.limits.maxPages ||\n\t\tinput.customersScanned >= input.limits.maxCustomers ||\n\t\tinput.elapsedMs >= input.limits.maxDurationMs\n\t);\n}\n","import {\n\tisAthenaBillingCredentialError,\n\tisAthenaBillingProviderRequestError,\n} from \"../errors.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_CURSOR_INVALID,\n\tAthenaBillingImportError,\n} from \"../import/errors.ts\";\nimport type {\n\tBillingBackoffDecision,\n\tBillingReconciliationFailureKind,\n} from \"./types.ts\";\n\nexport class AthenaBillingReconciliationError extends Error {\n\treadonly kind: BillingReconciliationFailureKind;\n\treadonly retryAfterMs?: number;\n\n\tconstructor(input: {\n\t\tkind: BillingReconciliationFailureKind;\n\t\tmessage: string;\n\t\tretryAfterMs?: number;\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaBillingReconciliationError\";\n\t\tthis.kind = input.kind;\n\t\tthis.retryAfterMs = input.retryAfterMs;\n\t}\n}\n\nconst MAX_DELAY_MS = 60 * 60 * 1000;\nconst BASE_DELAY_MS = 60_000;\n\nexport function classifyBillingReconciliationFailure(\n\terror: unknown,\n): BillingReconciliationFailureKind {\n\tif (error instanceof AthenaBillingReconciliationError) {\n\t\treturn error.kind;\n\t}\n\tif (error instanceof AthenaBillingImportError) {\n\t\tif (error.code === ATHENA_BILLING_IMPORT_CURSOR_INVALID) {\n\t\t\treturn \"cursor_invalid\";\n\t\t}\n\t\treturn \"provider_unavailable\";\n\t}\n\tif (isAthenaBillingCredentialError(error)) {\n\t\treturn \"provider_auth_failed\";\n\t}\n\tif (isAthenaBillingProviderRequestError(error)) {\n\t\tif (error.status === 401 || error.status === 403) {\n\t\t\treturn \"provider_auth_failed\";\n\t\t}\n\t\tif (error.status === 429 || error.kind === \"rate_limited\") {\n\t\t\treturn \"provider_rate_limited\";\n\t\t}\n\t\tif (\n\t\t\terror.kind === \"network\" ||\n\t\t\terror.kind === \"timeout\" ||\n\t\t\terror.kind === \"provider_unavailable\" ||\n\t\t\t(typeof error.status === \"number\" && error.status >= 500)\n\t\t) {\n\t\t\treturn \"provider_unavailable\";\n\t\t}\n\t\tif (error.kind === \"authentication\" || error.kind === \"authorization\") {\n\t\t\treturn \"provider_auth_failed\";\n\t\t}\n\t}\n\tif (error instanceof Error && \"code\" in error) {\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (\n\t\t\tcode === \"ECONNREFUSED\" ||\n\t\t\tcode === \"ECONNRESET\" ||\n\t\t\tcode === \"ENOTFOUND\" ||\n\t\t\tcode === \"ETIMEDOUT\" ||\n\t\t\tcode === \"EPIPE\"\n\t\t) {\n\t\t\treturn \"database_unavailable\";\n\t\t}\n\t}\n\treturn \"internal\";\n}\n\nexport function isTransientBillingReconciliationFailure(\n\tkind: BillingReconciliationFailureKind,\n): boolean {\n\treturn (\n\t\tkind === \"provider_rate_limited\" ||\n\t\tkind === \"provider_unavailable\" ||\n\t\tkind === \"database_unavailable\"\n\t);\n}\n\nexport function billingReconciliationBackoff(input: {\n\tattempt: number;\n\terror: unknown;\n\tkind?: BillingReconciliationFailureKind;\n}): BillingBackoffDecision {\n\tconst kind = input.kind ?? classifyBillingReconciliationFailure(input.error);\n\tconst retry = isTransientBillingReconciliationFailure(kind);\n\tif (!retry) {\n\t\treturn { delayMs: 0, kind, retry: false };\n\t}\n\tconst retryAfter =\n\t\tinput.error instanceof AthenaBillingReconciliationError\n\t\t\t? input.error.retryAfterMs\n\t\t\t: undefined;\n\tconst headerMs = readRetryAfterMs(input.error);\n\tconst exp = Math.min(\n\t\tMAX_DELAY_MS,\n\t\tBASE_DELAY_MS * 2 ** Math.max(0, input.attempt),\n\t);\n\tconst jitter = Math.floor(Math.random() * Math.max(1000, exp * 0.2));\n\treturn {\n\t\tdelayMs: retryAfter ?? headerMs ?? Math.min(MAX_DELAY_MS, exp + jitter),\n\t\tkind,\n\t\tretry: true,\n\t};\n}\n\nfunction readRetryAfterMs(error: unknown): number | undefined {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst details = (error as { details?: unknown }).details;\n\tif (!details || typeof details !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst retryAfter = (details as { retryAfter?: unknown }).retryAfter;\n\tif (typeof retryAfter === \"number\" && Number.isFinite(retryAfter)) {\n\t\treturn Math.max(0, retryAfter * 1000);\n\t}\n\tif (typeof retryAfter === \"string\") {\n\t\tconst parsed = Number.parseInt(retryAfter, 10);\n\t\tif (Number.isFinite(parsed)) {\n\t\t\treturn Math.max(0, parsed * 1000);\n\t\t}\n\t}\n\treturn undefined;\n}\n","import { inheritWebhookBillingReconciliationContext } from \"./context.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\n\nexport function billingReconciliationContextFromIngress(input: {\n\tconnectionId: string;\n\tingressId: string;\n\tcorrelationId?: string;\n\tprovider: string;\n\ttraceId?: string;\n}): BillingReconciliationContext {\n\treturn inheritWebhookBillingReconciliationContext({\n\t\tcausationId: input.ingressId,\n\t\tconnectionId: input.connectionId,\n\t\tcorrelationId: input.correlationId ?? input.ingressId,\n\t\tprovider: input.provider,\n\t\ttraceId: input.traceId ?? input.ingressId,\n\t});\n}\n","import type {\n\tMollieBillingProviderConfig,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport { normalizeMollieBillingProviderConfig } from \"../config.ts\";\n\nfunction isNormalizedMollieConfig(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n): config is NormalizedMollieBillingProviderConfig {\n\treturn \"provider\" in config && config.provider === \"mollie\";\n}\n\nexport function normalizeMollieRuntimeConfig(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n): NormalizedMollieBillingProviderConfig {\n\tif (isNormalizedMollieConfig(config)) {\n\t\treturn config;\n\t}\n\treturn normalizeMollieBillingProviderConfig(config);\n}\n","import { AthenaBillingCapabilityError } from \"../../../../errors.ts\";\nimport type { MollieBillingCredentialKind } from \"../../../../providers/types.ts\";\nimport type { BillingPayment } from \"../../../../types.ts\";\n\nexport function resolveMollieRequestProfileId(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind: MollieBillingCredentialKind;\n\trequestedProfileId?: string | null;\n}): string | undefined {\n\tif (input.credentialKind === \"api_key\") {\n\t\treturn undefined;\n\t}\n\tconst requested = input.requestedProfileId;\n\tif (requested != null && requested.length > 0) {\n\t\treturn requested;\n\t}\n\tconst configured = input.configuredProfileId;\n\tif (configured != null && configured.length > 0) {\n\t\treturn configured;\n\t}\n\treturn undefined;\n}\n\nexport function mollieCreateHasProfileSelector(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind?: string | null;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tif (input.credentialKind == null || input.credentialKind === \"api_key\") {\n\t\treturn true;\n\t}\n\treturn (\n\t\tresolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId: input.configuredProfileId,\n\t\t\tcredentialKind: \"advanced_access_token\",\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t}) != null\n\t);\n}\n\nexport function requestedMollieProfileId(\n\trequestedProfileId?: string | null,\n): string | undefined {\n\tif (requestedProfileId != null && requestedProfileId.length > 0) {\n\t\treturn requestedProfileId;\n\t}\n\treturn undefined;\n}\n\nexport function rejectUnenforcedMollieProfileTarget(input: {\n\toperation: string;\n\trequestedProfileId?: string | null;\n}): void {\n\tif (requestedMollieProfileId(input.requestedProfileId) == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: input.operation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nexport function assertMolliePaymentMatchesSelectedProfile(input: {\n\toperation: string;\n\tpayment: BillingPayment;\n\tselectedProfileId: string | undefined;\n}): void {\n\tif (input.selectedProfileId == null) {\n\t\treturn;\n\t}\n\tif (input.payment.providerProfileId !== input.selectedProfileId) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"missing_provider_scope\",\n\t\t});\n\t}\n}\n","import {\n\tAthenaBillingProviderRequestError,\n\tbillingProviderErrorKindFromHttp,\n} from \"../../../../errors.ts\";\nimport type { BillingProviderErrorKind } from \"../../../../errors.ts\";\nimport type { BillingOperation } from \"../../../capabilities.ts\";\nimport { BILLING_OPERATION_SAFETY } from \"../../../../safety/registry.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type { BillingRequestDispatchState } from \"../../../../safety/types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value\n\t\t: undefined;\n}\n\nfunction sanitizeDetails(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => sanitizeDetails(entry));\n\t}\n\tif (!isRecord(value)) {\n\t\treturn value;\n\t}\n\tconst next: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (\n\t\t\tnormalized.includes(\"authorization\") ||\n\t\t\tnormalized.includes(\"api_key\") ||\n\t\t\tnormalized.includes(\"apikey\") ||\n\t\t\tnormalized.includes(\"secret\") ||\n\t\t\tnormalized.includes(\"token\") ||\n\t\t\tnormalized.includes(\"password\")\n\t\t) {\n\t\t\tnext[key] = \"[REDACTED]\";\n\t\t\tcontinue;\n\t\t}\n\t\tnext[key] = sanitizeDetails(entry);\n\t}\n\treturn next;\n}\n\nfunction isBillingOperation(operation: string): operation is BillingOperation {\n\treturn Object.hasOwn(BILLING_OPERATION_SAFETY, operation);\n}\n\nfunction asBillingOperation(operation?: string): BillingOperation {\n\tif (operation != null && isBillingOperation(operation)) {\n\t\treturn operation;\n\t}\n\treturn \"payments.get\";\n}\n\nfunction inferDispatchState(\n\tkind: BillingProviderErrorKind,\n\texplicit?: BillingRequestDispatchState,\n): BillingRequestDispatchState {\n\tif (explicit != null) {\n\t\treturn explicit;\n\t}\n\tswitch (kind) {\n\t\tcase \"network\":\n\t\tcase \"timeout\":\n\t\tcase \"provider_unavailable\":\n\t\t\treturn \"unknown\";\n\t\tcase \"serialization\":\n\t\t\treturn \"dispatched\";\n\t\tdefault:\n\t\t\treturn \"not_dispatched\";\n\t}\n}\n\nexport function createMollieProviderRequestError(input: {\n\tstatus?: number;\n\tbody?: unknown;\n\toperation?: string;\n\tfallbackMessage: string;\n\tkind?: BillingProviderErrorKind;\n\tidempotencyKeyPresent?: boolean;\n\trequestDispatchState?: BillingRequestDispatchState;\n}): AthenaBillingProviderRequestError {\n\tconst body = isRecord(input.body) ? input.body : undefined;\n\tconst detail =\n\t\tasString(body?.detail) ??\n\t\tasString(body?.title) ??\n\t\tinput.fallbackMessage;\n\tconst kind =\n\t\tinput.kind ??\n\t\tbillingProviderErrorKindFromHttp({\n\t\t\tdetail,\n\t\t\tkey: asString(body?.type) ?? asString(body?.title),\n\t\t\tstatus: input.status,\n\t\t});\n\tconst operation = asBillingOperation(input.operation);\n\treturn new AthenaBillingProviderRequestError({\n\t\tdetails: sanitizeDetails(body ?? {}),\n\t\tkind,\n\t\tmessage: detail,\n\t\toperation: input.operation,\n\t\tprovider: \"mollie\",\n\t\tretry: billingRetryDisposition({\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent === true,\n\t\t\tkind,\n\t\t\toperation,\n\t\t\trequestDispatchState: inferDispatchState(\n\t\t\t\tkind,\n\t\t\t\tinput.requestDispatchState,\n\t\t\t),\n\t\t}),\n\t\tstatus: input.status,\n\t});\n}\n","import type { BillingProviderErrorKind } from \"../errors.ts\";\nimport type { BillingRetryDisposition } from \"../errors.ts\";\n\nimport { BILLING_OPERATION_SAFETY } from \"./registry.ts\";\nimport type {\n\tBillingExecutionCertainty,\n\tBillingOperationSafetyProfile,\n\tBillingRequestDispatchState,\n\tBillingRetryDispositionInput,\n} from \"./types.ts\";\n\nconst TRANSIENT_KINDS = new Set<string>([\n\t\"network\",\n\t\"timeout\",\n\t\"rate_limited\",\n\t\"provider_unavailable\",\n]);\n\nfunction profileFor(\n\toperation: string,\n): BillingOperationSafetyProfile | undefined {\n\tconst table: Record<string, BillingOperationSafetyProfile> =\n\t\tBILLING_OPERATION_SAFETY;\n\treturn table[operation];\n}\n\nexport function billingExecutionCertainty(input: {\n\tkind: string;\n\trequestDispatchState: BillingRequestDispatchState;\n}): BillingExecutionCertainty {\n\tif (input.requestDispatchState === \"not_dispatched\") {\n\t\treturn \"definitely_not_executed\";\n\t}\n\tswitch (input.kind) {\n\t\tcase \"authentication\":\n\t\tcase \"authorization\":\n\t\tcase \"invalid_request\":\n\t\tcase \"not_found\":\n\t\tcase \"unsupported_operation\":\n\t\tcase \"unsupported_currency\":\n\t\tcase \"unsupported_payment_method\":\n\t\t\treturn \"definitely_not_executed\";\n\t\tcase \"customer_action_required\":\n\t\tcase \"payment_declined\":\n\t\tcase \"idempotency_conflict\":\n\t\tcase \"resource_state_conflict\":\n\t\tcase \"conflict\":\n\t\t\treturn \"definitely_executed\";\n\t\tcase \"serialization\":\n\t\t\treturn input.requestDispatchState === \"dispatched\"\n\t\t\t\t? \"definitely_executed\"\n\t\t\t\t: \"definitely_not_executed\";\n\t\tcase \"rate_limited\":\n\t\t\treturn input.requestDispatchState === \"unknown\"\n\t\t\t\t? \"outcome_unknown\"\n\t\t\t\t: \"definitely_not_executed\";\n\t\tcase \"timeout\":\n\t\tcase \"network\":\n\t\tcase \"provider_unavailable\":\n\t\tcase \"unknown\":\n\t\t\treturn \"outcome_unknown\";\n\t\tdefault:\n\t\t\treturn input.requestDispatchState === \"dispatched\"\n\t\t\t\t? \"outcome_unknown\"\n\t\t\t\t: \"definitely_not_executed\";\n\t}\n}\n\nfunction isFinancialWrite(profile: BillingOperationSafetyProfile): boolean {\n\treturn (\n\t\tprofile.mutationClass === \"financial_create\" ||\n\t\tprofile.mutationClass === \"financial_cancel\"\n\t);\n}\n\n/**\n * Operation-aware retry policy. Kind-only helpers are forbidden.\n */\nexport function billingRetryDisposition(\n\tinput: BillingRetryDispositionInput,\n): BillingRetryDisposition {\n\tconst kind = input.kind as BillingProviderErrorKind;\n\tif (kind === \"customer_action_required\" || kind === \"payment_declined\") {\n\t\treturn \"customer_action_required\";\n\t}\n\tif (kind === \"idempotency_conflict\" || kind === \"resource_state_conflict\") {\n\t\treturn \"reconcile_first\";\n\t}\n\tconst certainty = billingExecutionCertainty({\n\t\tkind: input.kind,\n\t\trequestDispatchState: input.requestDispatchState,\n\t});\n\tconst profile = profileFor(input.operation);\n\tconst transient = TRANSIENT_KINDS.has(input.kind);\n\tif (profile?.mutationClass === \"read\" && transient) {\n\t\treturn \"safe\";\n\t}\n\tif (certainty === \"definitely_not_executed\" && transient) {\n\t\treturn \"safe\";\n\t}\n\tif (certainty === \"definitely_executed\") {\n\t\treturn \"never\";\n\t}\n\tif (certainty === \"outcome_unknown\") {\n\t\tconst replayOk =\n\t\t\tprofile?.replayGuarantee === \"provider_same_key\" &&\n\t\t\tinput.idempotencyKeyPresent === true;\n\t\tif (profile != null && isFinancialWrite(profile)) {\n\t\t\tif (profile.mutationClass === \"financial_create\" && replayOk) {\n\t\t\t\treturn \"safe\";\n\t\t\t}\n\t\t\treturn \"reconcile_first\";\n\t\t}\n\t\tif (replayOk) {\n\t\t\treturn \"safe\";\n\t\t}\n\t\treturn \"reconcile_first\";\n\t}\n\treturn \"never\";\n}\n","import type {\n\tMollieSdkAdapterFactory,\n\tMollieSdkClient,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tMollieSdkResourcePort,\n} from \"../../../../../providers/types.ts\";\n\nexport type {\n\tMollieSdkAdapterFactory,\n\tMollieSdkClient,\n\tMollieSdkClientOptions,\n\tMollieSdkConstructor,\n\tMollieSdkResourcePort,\n};\n\nexport const MOLLIE_SDK_REQUIRED_RESOURCES = [\n\t\"payments\",\n\t\"customers\",\n\t\"refunds\",\n\t\"paymentLinks\",\n\t\"subscriptions\",\n] as const;\n\nexport type MollieSdkRequiredResource =\n\t(typeof MOLLIE_SDK_REQUIRED_RESOURCES)[number];\n\n/** Methods Athena actually invokes on each required resource. */\nexport const MOLLIE_SDK_REQUIRED_METHODS = {\n\tcustomers: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n\tpaymentLinks: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n\tpayments: [\"cancel\", \"create\", \"get\", \"list\"],\n\trefunds: [\"cancel\", \"create\", \"get\", \"list\"],\n\tsubscriptions: [\"cancel\", \"create\", \"get\", \"list\", \"update\"],\n} as const satisfies Record<MollieSdkRequiredResource, readonly string[]>;\n\nexport const MOLLIE_SDK_INVOICE_REQUIRED_METHODS = [\"get\", \"list\"] as const;\n","import { createMollieProviderRequestError } from \"../errors.ts\";\nimport {\n\tMOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n\tMOLLIE_SDK_REQUIRED_METHODS,\n\tMOLLIE_SDK_REQUIRED_RESOURCES,\n\ttype MollieSdkClient,\n} from \"./contracts.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction hasResourcePort(value: unknown): value is Record<string, unknown> {\n\treturn isRecord(value);\n}\n\nfunction hasFunctionMethod(resource: Record<string, unknown>, method: string): boolean {\n\treturn typeof resource[method] === \"function\";\n}\n\nfunction assertRequiredMethods(\n\tresource: Record<string, unknown>,\n\tlabel: string,\n\tmethods: readonly string[],\n\toperation: string,\n): void {\n\tfor (const method of methods) {\n\t\tif (!hasFunctionMethod(resource, method)) {\n\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${label}.${method} for ${operation}.`,\n\t\t\t\tkind: \"unsupported_operation\",\n\t\t\t\toperation,\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function assertMollieSdkClient(\n\tclient: unknown,\n\toperation: string,\n): MollieSdkClient {\n\tif (!isRecord(client)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is not an object for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\tfor (const name of MOLLIE_SDK_REQUIRED_RESOURCES) {\n\t\tconst resource = client[name];\n\t\tif (!hasResourcePort(resource)) {\n\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${name} for ${operation}.`,\n\t\t\t\tkind: \"unsupported_operation\",\n\t\t\t\toperation,\n\t\t\t});\n\t\t}\n\t\tassertRequiredMethods(\n\t\t\tresource,\n\t\t\tname,\n\t\t\tMOLLIE_SDK_REQUIRED_METHODS[name],\n\t\t\toperation,\n\t\t);\n\t}\n\tif (!hasResourcePort(client.salesInvoices)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing salesInvoices for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\tassertRequiredMethods(\n\t\tclient.salesInvoices,\n\t\t\"salesInvoices\",\n\t\tMOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n\t\toperation,\n\t);\n\treturn client as unknown as MollieSdkClient;\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../../providers/types.ts\";\nimport type { BillingResolvedCredential } from \"../../../../credentials.ts\";\nimport { resolveMollieRequestProfileId } from \"../profile-target.ts\";\nimport { assertMollieSdkClient } from \"./assertions.ts\";\nimport type { MollieSdkClient, MollieSdkClientOptions } from \"./types.ts\";\n\nexport class MollieSdkClientPool {\n\tprivate readonly clients = new Map<string, MollieSdkClient>();\n\n\tconstructor(private readonly config: NormalizedMollieBillingProviderConfig) {}\n\n\tapiBaseUrl(): string {\n\t\treturn this.config.apiBaseUrl;\n\t}\n\n\tprivate construct(options: MollieSdkClientOptions): MollieSdkClient {\n\t\tconst created =\n\t\t\tthis.config.adapter != null\n\t\t\t\t? this.config.adapter(options)\n\t\t\t\t: new this.config.sdk(options);\n\t\treturn assertMollieSdkClient(created, \"mollie.sdk.construct\");\n\t}\n\n\tclientFor(input: {\n\t\tcredential: BillingResolvedCredential;\n\t\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\t\trequestedProfileId?: string | null;\n\t}): MollieSdkClient {\n\t\tconst options = mollieSdkClientOptions({\n\t\t\tconfig: this.config,\n\t\t\tcredential: input.credential,\n\t\t\toperationScope: input.operationScope,\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t});\n\t\tconst key = mollieSdkClientKey(options);\n\t\tconst existing = this.clients.get(key);\n\t\tif (existing != null) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created = this.construct(options);\n\t\tthis.clients.set(key, created);\n\t\treturn created;\n\t}\n}\n\nexport function mollieSdkClientOptions(input: {\n\tconfig: NormalizedMollieBillingProviderConfig;\n\tcredential: BillingResolvedCredential;\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\trequestedProfileId?: string | null;\n}): MollieSdkClientOptions {\n\tconst secret = input.credential.revealForProviderRuntime();\n\tconst kind = input.config.credentialKind;\n\tif (kind === \"api_key\") {\n\t\treturn {\n\t\t\tsecurity: { apiKey: secret },\n\t\t\tserverURL: input.config.apiBaseUrl,\n\t\t};\n\t}\n\tconst security =\n\t\tkind === \"advanced_access_token\"\n\t\t\t? { advancedAccessToken: secret }\n\t\t\t: { oAuth: secret };\n\tconst scope = input.operationScope ?? \"automatic\";\n\tconst profileId =\n\t\tscope === \"organization\"\n\t\t\t? undefined\n\t\t\t: resolveMollieRequestProfileId({\n\t\t\t\t\tconfiguredProfileId:\n\t\t\t\t\t\tinput.config.profileId ?? input.config.defaultProfileId,\n\t\t\t\t\tcredentialKind: kind,\n\t\t\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t\t\t});\n\treturn {\n\t\t...(profileId != null ? { profileId } : {}),\n\t\tsecurity,\n\t\tserverURL: input.config.apiBaseUrl,\n\t\ttestmode: input.credential.environment === \"test\",\n\t};\n}\n\nexport function mollieSdkClientKey(options: MollieSdkClientOptions): string {\n\tconst security = options.security ?? {};\n\tconst scheme = security.apiKey\n\t\t? \"apiKey\"\n\t\t: security.advancedAccessToken\n\t\t\t? \"advancedAccessToken\"\n\t\t\t: \"oAuth\";\n\treturn [\n\t\tscheme,\n\t\toptions.testmode === true ? \"test\" : \"live\",\n\t\toptions.profileId ?? \"\",\n\t\toptions.serverURL ?? \"\",\n\t].join(\":\");\n}\n","import type { BillingImportPlan, BillingImportRunReport } from \"./types.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport interface BillingImportAuditStore {\n\tcompleteRun(input: {\n\t\tid: string;\n\t\treport: BillingImportRunReport;\n\t}): Promise<void>;\n\tfailRun(input: { id: string; error: string }): Promise<void>;\n\trecordCandidate(input: {\n\t\tbindingId?: string;\n\t\tcorrelationId?: string;\n\t\tplan: BillingImportPlan;\n\t\trunId: string;\n\t\ttraceId?: string;\n\t}): Promise<void>;\n\tstartRun(input: {\n\t\tcausationId?: string;\n\t\tconnectionId: string;\n\t\tcorrelationId?: string;\n\t\tcursorBefore?: string | null;\n\t\tprovider: string;\n\t\tstatus: \"running\" | \"dry_run\";\n\t\ttraceId?: string;\n\t\ttrigger?: string;\n\t}): Promise<{ id: string }>;\n}\n\nlet nextAuditId = 1;\n\nexport function createMemoryBillingImportAuditStore(): BillingImportAuditStore & {\n\tcandidates: BillingImportPlan[];\n\truns: Array<{\n\t\tcompleted?: BillingImportRunReport;\n\t\terror?: string;\n\t\tid: string;\n\t\tstatus: string;\n\t}>;\n} {\n\tconst runs: Array<{\n\t\tcompleted?: BillingImportRunReport;\n\t\terror?: string;\n\t\tid: string;\n\t\tstatus: string;\n\t}> = [];\n\tconst candidates: BillingImportPlan[] = [];\n\treturn {\n\t\tcandidates,\n\t\truns,\n\t\tasync startRun(input) {\n\t\t\tnextAuditId += 1;\n\t\t\tconst id = `run_${nextAuditId}`;\n\t\t\truns.push({ id, status: input.status });\n\t\t\treturn { id };\n\t\t},\n\t\tasync recordCandidate(input) {\n\t\t\tcandidates.push(input.plan);\n\t\t},\n\t\tasync completeRun(input) {\n\t\t\tconst row = runs.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status =\n\t\t\t\tinput.report.status ??\n\t\t\t\t(input.report.dryRun ? \"dry_run\" : \"completed\");\n\t\t\trow.completed = input.report;\n\t\t},\n\t\tasync failRun(input) {\n\t\t\tconst row = runs.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status = \"failed\";\n\t\t\trow.error = input.error;\n\t\t},\n\t};\n}\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nexport function createPostgresBillingImportAuditStore(\n\tsql: BillingSqlExecutor,\n): BillingImportAuditStore {\n\treturn {\n\t\tasync startRun(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_runs (\n\t\t\t\t\tconnection_id, provider, status, cursor_before, metadata,\n\t\t\t\t\ttrace_id, correlation_id, causation_id, trigger\n\t\t\t\t) VALUES ($1::uuid, $2, $3, $4, '{}'::jsonb, $5, $6, $7, $8)\n\t\t\t\tRETURNING id`,\n\t\t\t\t[\n\t\t\t\t\tinput.connectionId,\n\t\t\t\t\tinput.provider,\n\t\t\t\t\tinput.status,\n\t\t\t\t\tinput.cursorBefore ?? null,\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.causationId ?? null,\n\t\t\t\t\tinput.trigger ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst id = result.rows[0]?.id;\n\t\t\tif (typeof id !== \"string\" || id.length === 0) {\n\t\t\t\tthrow new Error(\"Failed to start billing import run.\");\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, last_started_at, last_error\n\t\t\t\t) VALUES ($1::uuid, 'customers', now(), NULL)\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tlast_started_at = now(),\n\t\t\t\t\tlast_error = NULL`,\n\t\t\t\t[input.connectionId],\n\t\t\t);\n\t\t\treturn { id };\n\t\t},\n\t\tasync recordCandidate(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_candidates (\n\t\t\t\t\timport_run_id,\n\t\t\t\t\tconnection_id,\n\t\t\t\t\tprovider_customer_id,\n\t\t\t\t\tsubject_kind,\n\t\t\t\t\tsubject_id,\n\t\t\t\t\tconfidence,\n\t\t\t\t\tdecision,\n\t\t\t\t\tevidence,\n\t\t\t\t\treason,\n\t\t\t\t\tresolved_at,\n\t\t\t\t\ttrace_id,\n\t\t\t\t\tcorrelation_id,\n\t\t\t\t\tbinding_id\n\t\t\t\t) VALUES (\n\t\t\t\t\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8::jsonb, $9,\n\t\t\t\t\tCASE WHEN $10 THEN now() ELSE NULL END,\n\t\t\t\t\t$11, $12, $13::uuid\n\t\t\t\t)`,\n\t\t\t\t[\n\t\t\t\t\tinput.runId,\n\t\t\t\t\tinput.plan.connectionId,\n\t\t\t\t\tinput.plan.providerCustomerId,\n\t\t\t\t\tinput.plan.subject?.kind ?? null,\n\t\t\t\t\tinput.plan.subject?.id ?? null,\n\t\t\t\t\tinput.plan.confidence,\n\t\t\t\t\tinput.plan.decision,\n\t\t\t\t\tjsonValue(input.plan.evidence),\n\t\t\t\t\tinput.plan.reason,\n\t\t\t\t\tinput.plan.decision === \"bind\",\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.bindingId ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync completeRun(input) {\n\t\t\tconst { report } = input;\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_runs SET\n\t\t\t\t\tstatus = $2,\n\t\t\t\t\tcompleted_at = now(),\n\t\t\t\t\tcustomers_scanned = $3,\n\t\t\t\t\tbindings_created = $4,\n\t\t\t\t\tbindings_activated = $5,\n\t\t\t\t\tconflicts = $6,\n\t\t\t\t\tskipped = $7,\n\t\t\t\t\terrors = $8,\n\t\t\t\t\tcursor_after = $9,\n\t\t\t\t\tpages_processed = $10,\n\t\t\t\t\thas_more = $11\n\t\t\t\tWHERE id = $1::uuid`,\n\t\t\t\t[\n\t\t\t\t\tinput.id,\n\t\t\t\t\treport.dryRun\n\t\t\t\t\t\t? \"dry_run\"\n\t\t\t\t\t\t: (report.status ?? \"completed\"),\n\t\t\t\t\treport.customersScanned,\n\t\t\t\t\treport.bindingsCreated,\n\t\t\t\t\treport.bindingsActivated,\n\t\t\t\t\treport.conflicts,\n\t\t\t\t\treport.skipped,\n\t\t\t\t\treport.errors,\n\t\t\t\t\treport.cursorAfter ?? null,\n\t\t\t\t\treport.pagesProcessed ?? 1,\n\t\t\t\t\treport.hasMore ?? false,\n\t\t\t\t],\n\t\t\t);\n\t\t\tawait sql.query(\n\t\t\t\t`INSERT INTO billing.billing_import_state (\n\t\t\t\t\tconnection_id, resource_kind, cursor, last_completed_at, last_success_at, last_error\n\t\t\t\t) VALUES ($1::uuid, 'customers', $2, now(), now(), NULL)\n\t\t\t\tON CONFLICT (connection_id, resource_kind) DO UPDATE SET\n\t\t\t\t\tcursor = COALESCE(EXCLUDED.cursor, billing.billing_import_state.cursor),\n\t\t\t\t\tlast_completed_at = now(),\n\t\t\t\t\tlast_success_at = now(),\n\t\t\t\t\tlast_error = NULL`,\n\t\t\t\t[report.connectionId, report.cursorAfter ?? null],\n\t\t\t);\n\t\t},\n\t\tasync failRun(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_runs SET\n\t\t\t\t\tstatus = 'failed',\n\t\t\t\t\tcompleted_at = now(),\n\t\t\t\t\terrors = GREATEST(errors, 1),\n\t\t\t\t\tmetadata = metadata || jsonb_build_object('last_error', $2::text)\n\t\t\t\tWHERE id = $1::uuid`,\n\t\t\t\t[input.id, input.error],\n\t\t\t);\n\t\t\tawait sql.query(\n\t\t\t\t`UPDATE billing.billing_import_state SET\n\t\t\t\t\tlast_completed_at = now(),\n\t\t\t\t\tlast_error = $2\n\t\t\t\tWHERE connection_id = (\n\t\t\t\t\tSELECT connection_id FROM billing.billing_import_runs WHERE id = $1::uuid\n\t\t\t\t)\n\t\t\t\tAND resource_kind = 'customers'`,\n\t\t\t\t[input.id, input.error],\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\n\nexport type BillingImportConfidence = \"exact\" | \"strong\" | \"ambiguous\" | \"none\";\n\nexport type BillingImportDecision =\n\t| \"bind\"\n\t| \"skip\"\n\t| \"conflict\"\n\t| \"manual_review\";\n\nexport type BillingImportEvidenceKind =\n\t| \"provider_metadata_subject_id\"\n\t| \"provider_metadata_external_id\"\n\t| \"email\"\n\t| \"historical_payment\"\n\t| \"historical_subscription\";\n\nexport interface BillingImportEvidence {\n\tkind: BillingImportEvidenceKind;\n\tvalue?: string;\n}\n\nexport interface BillingImportCandidate {\n\tconfidence: BillingImportConfidence;\n\tconnectionId: string;\n\tevidence: BillingImportEvidence[];\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportCustomer {\n\temail?: string | null;\n\tmetadata: Record<string, unknown>;\n\tname?: string | null;\n\tproviderCustomerId: string;\n\traw: unknown;\n}\n\nexport interface BillingImportCustomerPage {\n\titems: readonly BillingImportCustomer[];\n\tnextCursor?: string | null;\n}\n\nexport interface BillingSubjectRecord {\n\temail?: string | null;\n\tsubject: BillingSubjectRef;\n}\n\nexport interface BillingSubjectDirectory {\n\tfindUsersByEmail(email: string): Promise<readonly BillingSubjectRecord[]>;\n\tgetById(subject: BillingSubjectRef): Promise<BillingSubjectRecord | null>;\n}\n\nexport interface BillingImportPolicy {\n\tallowSecondaryBindings: boolean;\n\tallowUniqueEmailAutoBind: boolean;\n}\n\nexport const DEFAULT_BILLING_IMPORT_POLICY: BillingImportPolicy = {\n\tallowSecondaryBindings: false,\n\tallowUniqueEmailAutoBind: false,\n};\n\nexport type BillingImportPlanAction =\n\t| \"create_active_binding\"\n\t| \"noop\"\n\t| \"resume_pending\"\n\t| \"mark_conflict\"\n\t| \"none\";\n\nexport interface BillingImportPlan {\n\taction: BillingImportPlanAction;\n\tcandidates: readonly BillingSubjectRef[];\n\tconfidence: BillingImportConfidence;\n\tconnectionId: string;\n\tdecision: BillingImportDecision;\n\tevidence: readonly BillingImportEvidence[];\n\tproviderCustomerId: string;\n\treason: string;\n\tsource: \"imported\" | \"reconciled\";\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportDocumentHint {\n\tconnectionId: string;\n\townershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport interface BillingImportContext {\n\tcustomer: BillingImportCustomer;\n\tconnectionId: string;\n\tdirectorySubject: BillingSubjectRecord | null;\n\tdocumentHints: readonly BillingImportDocumentHint[];\n\temailMatches: readonly BillingSubjectRecord[];\n\texistingLocator: BillingSubjectBindingRecord | null;\n\texistingPrimary: BillingSubjectBindingRecord | null;\n\tpolicy: BillingImportPolicy;\n}\n\nexport interface BillingImportRunReport {\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tconnectionId: string;\n\tcorrelationId?: string;\n\tcursorAfter?: string | null;\n\tcursorBefore?: string | null;\n\tcustomersScanned: number;\n\tdryRun: boolean;\n\tenvironment?: \"live\" | \"test\";\n\terrors: number;\n\thasMore?: boolean;\n\tpagesProcessed?: number;\n\tplans: readonly BillingImportPlan[];\n\tprovider?: string;\n\trunId?: string;\n\tskipped: number;\n\tstatus?: string;\n\ttraceId?: string;\n}\n\nexport const ATHENA_SUBJECT_KIND_METADATA_KEY = \"athenaSubjectKind\";\nexport const ATHENA_SUBJECT_ID_METADATA_KEY = \"athenaSubjectId\";\nexport const ATHENA_EXTERNAL_ID_METADATA_KEY = \"athenaExternalId\";\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport {\n\tATHENA_EXTERNAL_ID_METADATA_KEY,\n\tATHENA_SUBJECT_ID_METADATA_KEY,\n\tATHENA_SUBJECT_KIND_METADATA_KEY,\n\ttype BillingImportCustomer,\n\ttype BillingImportEvidence,\n} from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function readAthenaSubjectFromMetadata(\n\tmetadata: Record<string, unknown>,\n): BillingSubjectRef | undefined {\n\tconst id = readString(metadata[ATHENA_SUBJECT_ID_METADATA_KEY]);\n\tconst kind = readString(metadata[ATHENA_SUBJECT_KIND_METADATA_KEY]);\n\tif (!id || (kind !== \"user\" && kind !== \"organization\")) {\n\t\treturn undefined;\n\t}\n\treturn { id, kind };\n}\n\nexport function collectProviderCustomerEvidence(\n\tcustomer: BillingImportCustomer,\n): BillingImportEvidence[] {\n\tconst evidence: BillingImportEvidence[] = [];\n\tconst metadata = isRecord(customer.metadata) ? customer.metadata : {};\n\tconst subject = readAthenaSubjectFromMetadata(metadata);\n\tif (subject) {\n\t\tevidence.push({\n\t\t\tkind: \"provider_metadata_subject_id\",\n\t\t\tvalue: `${subject.kind}:${subject.id}`,\n\t\t});\n\t}\n\tconst externalId = readString(metadata[ATHENA_EXTERNAL_ID_METADATA_KEY]);\n\tif (externalId) {\n\t\tevidence.push({\n\t\t\tkind: \"provider_metadata_external_id\",\n\t\t\tvalue: externalId,\n\t\t});\n\t}\n\tconst email = readString(customer.email ?? undefined);\n\tif (email) {\n\t\tevidence.push({ kind: \"email\", value: email.toLowerCase() });\n\t}\n\treturn evidence;\n}\n\nexport function subjectsEqual(\n\tleft: BillingSubjectRef,\n\tright: BillingSubjectRef,\n): boolean {\n\treturn left.kind === right.kind && left.id === right.id;\n}\n","import type { BillingSubjectBindingRecord } from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\nimport { subjectsEqual } from \"./candidate-resolver.ts\";\nimport type { BillingImportDocumentHint, BillingImportPlan } from \"./types.ts\";\n\nexport interface BillingImportBindingStore {\n\tfindActivePrimary(input: {\n\t\tconnectionId: string;\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<BillingSubjectBindingRecord | null>;\n\tfindByLocator(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t}): Promise<BillingSubjectBindingRecord | null>;\n\tinsertActive(input: {\n\t\tconnectionId: string;\n\t\temailSnapshot?: string | null;\n\t\tproviderCustomerId: string;\n\t\tsource: \"imported\" | \"reconciled\";\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<BillingSubjectBindingRecord>;\n\tactivate(input: {\n\t\temailSnapshot?: string | null;\n\t\tid: string;\n\t\tsource: \"imported\" | \"reconciled\";\n\t}): Promise<void>;\n}\n\nexport interface BillingImportDocumentStore {\n\thintsForCustomer(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t}): Promise<readonly BillingImportDocumentHint[]>;\n\tprojectForBinding(input: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t\tsubject: BillingSubjectRef;\n\t}): Promise<{ conflicts: number; resolved: number }>;\n}\n\nexport interface BillingImportCursorStore {\n\tget(connectionId: string): Promise<string | null>;\n\tset(connectionId: string, cursor: string | null): Promise<void>;\n}\n\nexport function createMemoryBillingImportCursorStore(): BillingImportCursorStore & {\n\tcursors: Map<string, string | null>;\n} {\n\tconst cursors = new Map<string, string | null>();\n\treturn {\n\t\tcursors,\n\t\tasync get(connectionId) {\n\t\t\treturn cursors.get(connectionId) ?? null;\n\t\t},\n\t\tasync set(connectionId, cursor) {\n\t\t\tcursors.set(connectionId, cursor);\n\t\t},\n\t};\n}\n\nlet nextId = 1;\n\nfunction newId(): string {\n\tnextId += 1;\n\treturn `bind_${nextId}`;\n}\n\nexport function createMemoryBillingImportBindingStore(\n\tinitial: BillingSubjectBindingRecord[] = [],\n): BillingImportBindingStore & { records: BillingSubjectBindingRecord[] } {\n\tconst records = [...initial];\n\treturn {\n\t\trecords,\n\t\tasync findByLocator(input) {\n\t\t\treturn (\n\t\t\t\trecords.find(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\trow.providerSubjectKind === \"customer\" &&\n\t\t\t\t\t\trow.providerSubjectId === input.providerCustomerId,\n\t\t\t\t) ?? null\n\t\t\t);\n\t\t},\n\t\tasync findActivePrimary(input) {\n\t\t\treturn (\n\t\t\t\trecords.find(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\trow.connectionId === input.connectionId &&\n\t\t\t\t\t\trow.subjectKind === input.subject.kind &&\n\t\t\t\t\t\trow.subjectId === input.subject.id &&\n\t\t\t\t\t\trow.providerSubjectKind === \"customer\" &&\n\t\t\t\t\t\trow.status === \"active\" &&\n\t\t\t\t\t\trow.isPrimary,\n\t\t\t\t) ?? null\n\t\t\t);\n\t\t},\n\t\tasync insertActive(input) {\n\t\t\tconst row: BillingSubjectBindingRecord = {\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\temailSnapshot: input.emailSnapshot ?? null,\n\t\t\t\tid: newId(),\n\t\t\t\tisPrimary: true,\n\t\t\t\tproviderSubjectId: input.providerCustomerId,\n\t\t\t\tproviderSubjectKind: \"customer\",\n\t\t\t\tsource: input.source,\n\t\t\t\tstatus: \"active\",\n\t\t\t\tsubjectId: input.subject.id,\n\t\t\t\tsubjectKind: input.subject.kind,\n\t\t\t};\n\t\t\trecords.push(row);\n\t\t\treturn row;\n\t\t},\n\t\tasync activate(input) {\n\t\t\tconst row = records.find((item) => item.id === input.id);\n\t\t\tif (!row) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trow.status = \"active\";\n\t\t\trow.isPrimary = true;\n\t\t\trow.source = input.source;\n\t\t\tif (input.emailSnapshot !== undefined) {\n\t\t\t\trow.emailSnapshot = input.emailSnapshot ?? null;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport async function applyBillingImportPlan(\n\tstore: BillingImportBindingStore,\n\tinput: {\n\t\temailSnapshot?: string | null;\n\t\tplan: BillingImportPlan;\n\t},\n): Promise<\"created\" | \"activated\" | \"noop\" | \"conflict\"> {\n\tconst { plan } = input;\n\tif (plan.action === \"none\" || plan.action === \"noop\") {\n\t\treturn \"noop\";\n\t}\n\tif (plan.action === \"mark_conflict\") {\n\t\treturn \"conflict\";\n\t}\n\tconst subject = plan.subject;\n\tif (!subject) {\n\t\treturn \"noop\";\n\t}\n\tconst existing = await store.findByLocator({\n\t\tconnectionId: plan.connectionId,\n\t\tproviderCustomerId: plan.providerCustomerId,\n\t});\n\tif (existing) {\n\t\tif (\n\t\t\texisting.status === \"active\" &&\n\t\t\tsubjectsEqual(subject, {\n\t\t\t\tid: existing.subjectId,\n\t\t\t\tkind: existing.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn \"noop\";\n\t\t}\n\t\tif (\n\t\t\t!subjectsEqual(subject, {\n\t\t\t\tid: existing.subjectId,\n\t\t\t\tkind: existing.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn \"conflict\";\n\t\t}\n\t\tif (existing.status === \"pending\" || plan.action === \"resume_pending\") {\n\t\t\tawait store.activate({\n\t\t\t\temailSnapshot: input.emailSnapshot,\n\t\t\t\tid: existing.id,\n\t\t\t\tsource: plan.source,\n\t\t\t});\n\t\t\treturn \"activated\";\n\t\t}\n\t\treturn \"noop\";\n\t}\n\tawait store.insertActive({\n\t\tconnectionId: plan.connectionId,\n\t\temailSnapshot: input.emailSnapshot,\n\t\tproviderCustomerId: plan.providerCustomerId,\n\t\tsource: plan.source,\n\t\tsubject,\n\t});\n\treturn \"created\";\n}\n","import { applyBillingImportPlan, type BillingImportBindingStore, type BillingImportCursorStore, type BillingImportDocumentStore } from \"./apply.ts\";\nimport type { BillingImportAuditStore } from \"./audit.ts\";\nimport { readAthenaSubjectFromMetadata } from \"./candidate-resolver.ts\";\nimport {\n\tATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n\tAthenaBillingImportError,\n} from \"./errors.ts\";\nimport { planBillingImport } from \"./planner.ts\";\nimport { reconcileBillingDocumentsForBinding } from \"./project.ts\";\nimport type { BillingCustomerImportPort } from \"./providers/types.ts\";\nimport type {\n\tBillingImportCustomer,\n\tBillingImportPlan,\n\tBillingImportPolicy,\n\tBillingImportRunReport,\n\tBillingSubjectDirectory,\n} from \"./types.ts\";\nimport { DEFAULT_BILLING_IMPORT_POLICY } from \"./types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport {\n\temitBillingAuditFailure,\n\temitBillingImportSemanticAudit,\n} from \"../reconciliation/semantic-audit.ts\";\nimport type { BillingImportPageResult } from \"../reconciliation/types.ts\";\n\nexport interface RunBillingCustomerImportInput {\n\taudit?: BillingImportAuditStore;\n\tbindings: BillingImportBindingStore;\n\tconnectionId: string;\n\tcontext?: BillingReconciliationContext;\n\tcursor?: string;\n\tcustomerId?: string;\n\tdirectory: BillingSubjectDirectory;\n\tdocuments?: BillingImportDocumentStore;\n\tcursors?: BillingImportCursorStore;\n\tdiscovery: BillingCustomerImportPort;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\tlimit?: number;\n\tpersistCursor?: boolean;\n\tpolicy?: BillingImportPolicy;\n\tpreloadedCustomers?: readonly BillingImportCustomer[];\n\tprovider?: string;\n\trunId?: string;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\tskipCursorAdvance?: boolean;\n\tsubjectId?: string;\n}\n\nasync function loadPage(\n\tdiscovery: BillingCustomerImportPort,\n\tinput: { cursor?: string; customerId?: string; limit?: number },\n): Promise<{ items: readonly BillingImportCustomer[]; nextCursor?: string | null }> {\n\ttry {\n\t\tif (input.customerId && discovery.getCustomer) {\n\t\t\tconst customer = await discovery.getCustomer({\n\t\t\t\tcustomerId: input.customerId,\n\t\t\t});\n\t\t\treturn { items: [customer], nextCursor: null };\n\t\t}\n\t\treturn await discovery.listCustomers(input);\n\t} catch (error) {\n\t\tif (error instanceof AthenaBillingImportError) {\n\t\t\tthrow error;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : \"provider failed\";\n\t\tthrow new AthenaBillingImportError({\n\t\t\tcode: ATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n\t\t\tmessage,\n\t\t});\n\t}\n}\n\nexport async function applyBillingImportCustomers(input: {\n\taudit?: BillingImportAuditStore;\n\tbindings: BillingImportBindingStore;\n\tconnectionId: string;\n\tcontext?: BillingReconciliationContext;\n\tcustomerId?: string;\n\tdirectory: BillingSubjectDirectory;\n\tdocuments?: BillingImportDocumentStore;\n\tdryRun: boolean;\n\tincludeAmbiguous?: boolean;\n\titems: readonly BillingImportCustomer[];\n\tpolicy: BillingImportPolicy;\n\tprovider: string;\n\trunId?: string;\n\tsemanticAudit?: AthenaBillingAuditWriter;\n\tsubjectId?: string;\n}): Promise<{\n\tbindingsActivated: number;\n\tbindingsCreated: number;\n\tconflicts: number;\n\tplans: BillingImportPlan[];\n\tscannedCustomers: BillingImportCustomer[];\n\tskipped: number;\n}> {\n\tconst plans: BillingImportPlan[] = [];\n\tlet bindingsCreated = 0;\n\tlet bindingsActivated = 0;\n\tlet conflicts = 0;\n\tlet skipped = 0;\n\tconst scannedCustomers: BillingImportCustomer[] = [];\n\tconst persistAudit = input.audit != null && !input.dryRun;\n\n\tfor (const customer of input.items) {\n\t\tif (input.customerId && customer.providerCustomerId !== input.customerId) {\n\t\t\tcontinue;\n\t\t}\n\t\tscannedCustomers.push(customer);\n\t\tconst metadataSubject = readAthenaSubjectFromMetadata(customer.metadata);\n\t\tconst directorySubject = metadataSubject\n\t\t\t? await input.directory.getById(metadataSubject)\n\t\t\t: null;\n\t\tconst email = customer.email?.trim();\n\t\tconst emailMatches = email\n\t\t\t? await input.directory.findUsersByEmail(email)\n\t\t\t: [];\n\t\tconst existingLocator = await input.bindings.findByLocator({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t});\n\t\tconst proposed =\n\t\t\tdirectorySubject?.subject ??\n\t\t\t(emailMatches.length === 1 ? emailMatches[0]?.subject : undefined);\n\t\tconst existingPrimary = proposed\n\t\t\t? await input.bindings.findActivePrimary({\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tsubject: proposed,\n\t\t\t\t})\n\t\t\t: null;\n\t\tconst documentHints = input.documents\n\t\t\t? await input.documents.hintsForCustomer({\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t})\n\t\t\t: [];\n\t\tconst plan = planBillingImport({\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcustomer,\n\t\t\tdirectorySubject,\n\t\t\tdocumentHints,\n\t\t\temailMatches,\n\t\t\texistingLocator,\n\t\t\texistingPrimary,\n\t\t\tpolicy: input.policy,\n\t\t});\n\t\tif (input.subjectId && plan.subject?.id !== input.subjectId) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tplan.confidence === \"ambiguous\" &&\n\t\t\tinput.includeAmbiguous !== true &&\n\t\t\tplan.decision !== \"conflict\"\n\t\t) {\n\t\t\tskipped += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tplans.push(plan);\n\t\tif (persistAudit && input.audit && input.runId) {\n\t\t\tawait input.audit.recordCandidate({\n\t\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\t\tplan,\n\t\t\t\trunId: input.runId,\n\t\t\t\ttraceId: input.context?.traceId,\n\t\t\t});\n\t\t}\n\t\tif (input.dryRun) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst applied = await applyBillingImportPlan(input.bindings, {\n\t\t\t\temailSnapshot: customer.email,\n\t\t\t\tplan,\n\t\t\t});\n\t\t\tif (applied === \"created\") {\n\t\t\t\tbindingsCreated += 1;\n\t\t\t} else if (applied === \"activated\") {\n\t\t\t\tbindingsActivated += 1;\n\t\t\t} else if (applied === \"conflict\") {\n\t\t\t\tconflicts += 1;\n\t\t\t} else {\n\t\t\t\tskipped += 1;\n\t\t\t}\n\t\t\tlet projectionConflicts = 0;\n\t\t\tif (\n\t\t\t\tapplied === \"created\" ||\n\t\t\t\tapplied === \"activated\" ||\n\t\t\t\tplan.action === \"noop\"\n\t\t\t) {\n\t\t\t\tconst subject = plan.subject;\n\t\t\t\tif (subject && input.documents) {\n\t\t\t\t\tconst projection = await reconcileBillingDocumentsForBinding(\n\t\t\t\t\t\tinput.documents,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t\t\t\tsubject,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tprojectionConflicts = projection.conflicts;\n\t\t\t\t\tconflicts += projection.conflicts;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (input.semanticAudit && input.context) {\n\t\t\t\tawait emitBillingImportSemanticAudit({\n\t\t\t\t\tapplied,\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\tplan,\n\t\t\t\t\tprevious: existingLocator,\n\t\t\t\t\tprojectionConflicts,\n\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (input.semanticAudit && input.context) {\n\t\t\t\tawait emitBillingAuditFailure({\n\t\t\t\t\tcontext: input.context,\n\t\t\t\t\terror,\n\t\t\t\t\tproviderCustomerId: customer.providerCustomerId,\n\t\t\t\t\tsubject: plan.subject,\n\t\t\t\t\twriter: input.semanticAudit,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tbindingsActivated,\n\t\tbindingsCreated,\n\t\tconflicts,\n\t\tplans,\n\t\tscannedCustomers,\n\t\tskipped,\n\t};\n}\n\nexport async function runBillingCustomerImportPage(\n\tinput: RunBillingCustomerImportInput,\n): Promise<BillingImportPageResult> {\n\tconst policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n\tconst cursorBefore =\n\t\tinput.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n\tconst page =\n\t\tinput.preloadedCustomers != null\n\t\t\t? {\n\t\t\t\t\titems: input.preloadedCustomers,\n\t\t\t\t\tnextCursor: null as string | null,\n\t\t\t\t}\n\t\t\t: await loadPage(input.discovery, {\n\t\t\t\t\tcursor: cursorBefore ?? undefined,\n\t\t\t\t\tcustomerId: input.customerId,\n\t\t\t\t\tlimit: input.limit,\n\t\t\t\t});\n\tconst applied = await applyBillingImportCustomers({\n\t\taudit: input.audit,\n\t\tbindings: input.bindings,\n\t\tconnectionId: input.connectionId,\n\t\tcontext: input.context,\n\t\tcustomerId: input.customerId,\n\t\tdirectory: input.directory,\n\t\tdocuments: input.documents,\n\t\tdryRun: input.dryRun,\n\t\tincludeAmbiguous: input.includeAmbiguous,\n\t\titems: page.items,\n\t\tpolicy,\n\t\tprovider: input.provider ?? \"mollie\",\n\t\trunId: input.runId,\n\t\tsemanticAudit: input.semanticAudit,\n\t\tsubjectId: input.subjectId,\n\t});\n\tconst nextCursor = page.nextCursor ?? null;\n\tconst persistCursor =\n\t\tinput.persistCursor !== false &&\n\t\t!input.dryRun &&\n\t\t!input.skipCursorAdvance &&\n\t\tinput.customerId == null &&\n\t\tinput.cursors != null;\n\tif (persistCursor && input.cursors) {\n\t\tawait input.cursors.set(input.connectionId, nextCursor);\n\t}\n\treturn {\n\t\tbindingsActivated: applied.bindingsActivated,\n\t\tbindingsCreated: applied.bindingsCreated,\n\t\tconflicts: applied.conflicts,\n\t\tcursorAfter: persistCursor ? nextCursor : cursorBefore,\n\t\tcursorBefore,\n\t\tcustomersScanned: applied.scannedCustomers.length,\n\t\thasMore: nextCursor != null && nextCursor.length > 0,\n\t\tplans: applied.plans,\n\t\tskipped: applied.skipped,\n\t};\n}\n\nexport async function runBillingCustomerImport(\n\tinput: RunBillingCustomerImportInput,\n): Promise<BillingImportRunReport> {\n\tconst persistAudit = input.audit != null && !input.dryRun;\n\tconst cursorBefore =\n\t\tinput.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n\tlet runId: string | undefined;\n\tif (persistAudit && input.audit) {\n\t\tconst started = await input.audit.startRun({\n\t\t\tcausationId: input.context?.causationId,\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\tcursorBefore,\n\t\t\tprovider: input.provider ?? \"mollie\",\n\t\t\tstatus: \"running\",\n\t\t\ttraceId: input.context?.traceId,\n\t\t\ttrigger: input.context?.trigger,\n\t\t});\n\t\trunId = started.id;\n\t}\n\ttry {\n\t\tconst page = await runBillingCustomerImportPage({\n\t\t\t...input,\n\t\t\trunId,\n\t\t});\n\t\tconst report: BillingImportRunReport = {\n\t\t\tbindingsActivated: page.bindingsActivated,\n\t\t\tbindingsCreated: page.bindingsCreated,\n\t\t\tconflicts: page.conflicts,\n\t\t\tconnectionId: input.connectionId,\n\t\t\tcorrelationId: input.context?.correlationId,\n\t\t\tcursorAfter: page.cursorAfter,\n\t\t\tcursorBefore: page.cursorBefore,\n\t\t\tcustomersScanned: page.customersScanned,\n\t\t\tdryRun: input.dryRun,\n\t\t\terrors: 0,\n\t\t\thasMore: page.hasMore,\n\t\t\tpagesProcessed: 1,\n\t\t\tplans: page.plans,\n\t\t\trunId,\n\t\t\tskipped: page.skipped,\n\t\t\tstatus:\n\t\t\t\tpage.conflicts > 0 ? \"completed_with_conflicts\" : \"completed\",\n\t\t\ttraceId: input.context?.traceId,\n\t\t};\n\t\tif (persistAudit && input.audit && runId) {\n\t\t\tawait input.audit.completeRun({ id: runId, report });\n\t\t}\n\t\treturn report;\n\t} catch (error) {\n\t\tif (persistAudit && input.audit && runId) {\n\t\t\tconst message = error instanceof Error ? error.message : \"import failed\";\n\t\t\tawait input.audit.failRun({ error: message, id: runId });\n\t\t}\n\t\tthrow error;\n\t}\n}\n","import type { BillingImportConfidence, BillingImportEvidence } from \"./types.ts\";\n\nexport function confidenceFromEvidence(\n\tevidence: readonly BillingImportEvidence[],\n\temailMatchCount: number,\n\tmetadataSubjectResolved: boolean,\n): BillingImportConfidence {\n\tif (\n\t\tevidence.some((item) => item.kind === \"provider_metadata_subject_id\") &&\n\t\tmetadataSubjectResolved\n\t) {\n\t\treturn \"exact\";\n\t}\n\tif (\n\t\tevidence.some(\n\t\t\t(item) =>\n\t\t\t\titem.kind === \"historical_payment\" ||\n\t\t\t\titem.kind === \"historical_subscription\",\n\t\t)\n\t) {\n\t\treturn \"strong\";\n\t}\n\tif (evidence.some((item) => item.kind === \"email\") && emailMatchCount === 1) {\n\t\treturn \"strong\";\n\t}\n\tif (emailMatchCount > 1) {\n\t\treturn \"ambiguous\";\n\t}\n\treturn \"none\";\n}\n","import { collectProviderCustomerEvidence, subjectsEqual } from \"./candidate-resolver.ts\";\nimport { confidenceFromEvidence } from \"./confidence.ts\";\nimport type {\n\tBillingImportContext,\n\tBillingImportPlan,\n\tBillingSubjectRecord,\n} from \"./types.ts\";\n\nfunction uniqueSubjects(\n\trecords: readonly BillingSubjectRecord[],\n): BillingSubjectRecord[] {\n\tconst seen = new Set<string>();\n\tconst out: BillingSubjectRecord[] = [];\n\tfor (const record of records) {\n\t\tconst key = `${record.subject.kind}:${record.subject.id}`;\n\t\tif (seen.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(key);\n\t\tout.push(record);\n\t}\n\treturn out;\n}\n\nexport function planBillingImport(context: BillingImportContext): BillingImportPlan {\n\tconst evidence = collectProviderCustomerEvidence(context.customer);\n\tconst connectionId = context.connectionId;\n\tconst providerCustomerId = context.customer.providerCustomerId;\n\tconst locator = context.existingLocator;\n\tconst metadataSubject = context.directorySubject?.subject;\n\tconst historicalSubjects = uniqueSubjects(\n\t\tcontext.documentHints.flatMap((hint) => {\n\t\t\tconst subject = hint.subject;\n\t\t\treturn subject == null ? [] : [{ subject }];\n\t\t}),\n\t);\n\tfor (const hint of context.documentHints) {\n\t\tif (hint.subject == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst kind =\n\t\t\thint.ownershipStatus === \"resolved\" && hint.subject\n\t\t\t\t? (\"historical_payment\" as const)\n\t\t\t\t: (\"historical_subscription\" as const);\n\t\tif (\n\t\t\t!evidence.some(\n\t\t\t\t(item) => item.kind === kind && item.value === hint.subject?.id,\n\t\t\t)\n\t\t) {\n\t\t\tevidence.push({ kind, value: hint.subject.id });\n\t\t}\n\t}\n\n\tif (locator) {\n\t\tif (locator.status === \"revoked\") {\n\t\t\t/* fall through to re-evaluate */\n\t\t} else if (\n\t\t\tmetadataSubject &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: locator.subjectId,\n\t\t\t\tkind: locator.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [\n\t\t\t\t\t{ id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t\t\tmetadataSubject,\n\t\t\t\t],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"provider customer already bound to another subject\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t} else if (locator.status === \"active\") {\n\t\t\treturn {\n\t\t\t\taction: \"noop\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"skip\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"existing same binding\",\n\t\t\t\tsource: locator.source === \"reconciled\" ? \"reconciled\" : \"imported\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t} else if (locator.status === \"pending\") {\n\t\t\treturn {\n\t\t\t\taction: \"resume_pending\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"bind\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"resume pending binding\",\n\t\t\t\tsource: \"reconciled\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t} else if (locator.status === \"conflict\") {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"existing locator conflict\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject: { id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t};\n\t\t}\n\t}\n\n\tif (\n\t\tcollectProviderCustomerEvidence(context.customer).some(\n\t\t\t(item) => item.kind === \"provider_metadata_subject_id\",\n\t\t) &&\n\t\tcontext.directorySubject == null\n\t) {\n\t\treturn {\n\t\t\taction: \"mark_conflict\",\n\t\t\tcandidates: [],\n\t\t\tconfidence: \"none\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"provider metadata points to nonexistent subject\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\n\tif (metadataSubject) {\n\t\tif (\n\t\t\tcontext.existingPrimary &&\n\t\t\t!context.policy.allowSecondaryBindings &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: context.existingPrimary.subjectId,\n\t\t\t\tkind: context.existingPrimary.subjectKind,\n\t\t\t}) &&\n\t\t\tcontext.existingPrimary.providerSubjectId !== providerCustomerId\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [metadataSubject],\n\t\t\t\tconfidence: \"exact\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"subject already has another primary customer for this connection\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject: metadataSubject,\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tlocator &&\n\t\t\tlocator.status !== \"revoked\" &&\n\t\t\t!subjectsEqual(metadataSubject, {\n\t\t\t\tid: locator.subjectId,\n\t\t\t\tkind: locator.subjectKind,\n\t\t\t})\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [\n\t\t\t\t\t{ id: locator.subjectId, kind: locator.subjectKind },\n\t\t\t\t\tmetadataSubject,\n\t\t\t\t],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"provider customer already bound to another subject\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\taction: \"create_active_binding\",\n\t\t\tcandidates: [metadataSubject],\n\t\t\tconfidence: \"exact\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"bind\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"provider metadata subject id\",\n\t\t\tsource: \"imported\",\n\t\t\tsubject: metadataSubject,\n\t\t};\n\t}\n\n\tif (historicalSubjects.length > 1) {\n\t\treturn {\n\t\t\taction: \"mark_conflict\",\n\t\t\tcandidates: historicalSubjects.map((item) => item.subject),\n\t\t\tconfidence: \"ambiguous\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"canonical rows carry conflicting subject ownership\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\tif (historicalSubjects.length === 1) {\n\t\tconst subject = historicalSubjects[0]?.subject;\n\t\tif (subject) {\n\t\t\treturn {\n\t\t\t\taction: \"create_active_binding\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"bind\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"historical canonical ownership\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst emailMatches = uniqueSubjects(context.emailMatches);\n\tif (emailMatches.length > 1) {\n\t\treturn {\n\t\t\taction: \"none\",\n\t\t\tcandidates: emailMatches.map((item) => item.subject),\n\t\t\tconfidence: \"ambiguous\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"conflict\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"duplicate email\",\n\t\t\tsource: \"imported\",\n\t\t};\n\t}\n\tif (emailMatches.length === 1) {\n\t\tconst subject = emailMatches[0]?.subject;\n\t\tif (!subject) {\n\t\t\treturn {\n\t\t\t\taction: \"none\",\n\t\t\t\tcandidates: [],\n\t\t\t\tconfidence: \"none\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"skip\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"no candidate\",\n\t\t\t\tsource: \"imported\",\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tcontext.existingPrimary &&\n\t\t\t!context.policy.allowSecondaryBindings &&\n\t\t\tcontext.existingPrimary.providerSubjectId !== providerCustomerId\n\t\t) {\n\t\t\treturn {\n\t\t\t\taction: \"mark_conflict\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"conflict\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"subject already has another primary customer for this connection\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t\tif (!context.policy.allowUniqueEmailAutoBind) {\n\t\t\treturn {\n\t\t\t\taction: \"none\",\n\t\t\t\tcandidates: [subject],\n\t\t\t\tconfidence: \"strong\",\n\t\t\t\tconnectionId,\n\t\t\t\tdecision: \"manual_review\",\n\t\t\t\tevidence,\n\t\t\t\tproviderCustomerId,\n\t\t\t\treason: \"unique email candidate only\",\n\t\t\t\tsource: \"imported\",\n\t\t\t\tsubject,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\taction: \"create_active_binding\",\n\t\t\tcandidates: [subject],\n\t\t\tconfidence: \"strong\",\n\t\t\tconnectionId,\n\t\t\tdecision: \"bind\",\n\t\t\tevidence,\n\t\t\tproviderCustomerId,\n\t\t\treason: \"unique email match\",\n\t\t\tsource: \"imported\",\n\t\t\tsubject,\n\t\t};\n\t}\n\n\treturn {\n\t\taction: \"none\",\n\t\tcandidates: [],\n\t\tconfidence: confidenceFromEvidence(evidence, 0, false),\n\t\tconnectionId,\n\t\tdecision: \"skip\",\n\t\tevidence,\n\t\tproviderCustomerId,\n\t\treason: \"no candidate\",\n\t\tsource: \"imported\",\n\t};\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type { BillingImportDocumentStore } from \"./apply.ts\";\nimport type { BillingImportDocumentHint } from \"./types.ts\";\n\nexport interface MemoryBillingDocument {\n\tconnectionId: string;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\townershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n\tproviderCustomerId: string;\n\tsubject?: BillingSubjectRef;\n}\n\nexport function createMemoryBillingImportDocumentStore(\n\tdocuments: MemoryBillingDocument[],\n): BillingImportDocumentStore & { documents: MemoryBillingDocument[] } {\n\treturn {\n\t\tdocuments,\n\t\tasync hintsForCustomer(input) {\n\t\t\tconst hints: BillingImportDocumentHint[] = [];\n\t\t\tfor (const row of documents) {\n\t\t\t\tif (\n\t\t\t\t\trow.providerCustomerId !== input.providerCustomerId ||\n\t\t\t\t\trow.connectionId !== input.connectionId\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thints.push({\n\t\t\t\t\tconnectionId: row.connectionId,\n\t\t\t\t\townershipStatus: row.ownershipStatus,\n\t\t\t\t\tproviderCustomerId: row.providerCustomerId,\n\t\t\t\t\tsubject: row.subject,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn hints;\n\t\t},\n\t\tasync projectForBinding(input) {\n\t\t\tlet resolved = 0;\n\t\t\tlet conflicts = 0;\n\t\t\tfor (const row of documents) {\n\t\t\t\tif (row.providerCustomerId !== input.providerCustomerId) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.connectionId !== input.connectionId &&\n\t\t\t\t\trow.connectionId !== \"\"\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.ownershipStatus === \"resolved\" &&\n\t\t\t\t\trow.subject &&\n\t\t\t\t\t(row.subject.kind !== input.subject.kind ||\n\t\t\t\t\t\trow.subject.id !== input.subject.id)\n\t\t\t\t) {\n\t\t\t\t\trow.ownershipStatus = \"conflict\";\n\t\t\t\t\tconflicts += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\trow.ownershipStatus === \"unresolved\" ||\n\t\t\t\t\trow.subject == null ||\n\t\t\t\t\t(row.subject.kind === input.subject.kind &&\n\t\t\t\t\t\trow.subject.id === input.subject.id)\n\t\t\t\t) {\n\t\t\t\t\trow.connectionId = input.connectionId;\n\t\t\t\t\trow.subject = input.subject;\n\t\t\t\t\trow.ownershipStatus = \"resolved\";\n\t\t\t\t\tresolved += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { conflicts, resolved };\n\t\t},\n\t};\n}\n\nexport async function reconcileBillingDocumentsForBinding(\n\tstore: BillingImportDocumentStore,\n\tinput: {\n\t\tconnectionId: string;\n\t\tproviderCustomerId: string;\n\t\tsubject: BillingSubjectRef;\n\t},\n): Promise<{ conflicts: number; resolved: number }> {\n\treturn store.projectForBinding(input);\n}\n","function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isHttpHref(href: string): boolean {\n\ttry {\n\t\tconst url = new URL(href);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Reads a HAL/SDK link href from either `_links` or `links`.\n * Empty strings and non-http(s) values are not checkout URLs.\n */\nexport function billingHalLinkHref(\n\traw: unknown,\n\trelation: string,\n): string | null {\n\tif (!isRecord(raw) || relation.trim() === \"\") {\n\t\treturn null;\n\t}\n\tfor (const groupKey of [\"_links\", \"links\"] as const) {\n\t\tconst group = raw[groupKey];\n\t\tif (!isRecord(group)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst link = group[relation];\n\t\tif (!isRecord(link)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst href = link.href;\n\t\tif (typeof href === \"string\" && href.trim() !== \"\" && isHttpHref(href)) {\n\t\t\treturn href;\n\t\t}\n\t}\n\treturn null;\n}\n","import { createMollieProviderRequestError } from \"./errors.ts\";\nimport { mollieLinkHref } from \"./projection/links.ts\";\n\nexport type MollieListResource =\n\t| \"customers\"\n\t| \"invoices\"\n\t| \"payment-links\"\n\t| \"payments\"\n\t| \"refunds\"\n\t| \"subscriptions\"\n\t| \"webhooks\";\n\nexport interface MollieListCursor {\n\tfrom: string;\n\tprovider: \"mollie\";\n\tresource: MollieListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n\tconst bytes = new TextEncoder().encode(value);\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary)\n\t\t.replaceAll(\"+\", \"-\")\n\t\t.replaceAll(\"/\", \"_\")\n\t\t.replace(/=+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n\tif (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n\t\tthrow new TypeError(\"Invalid base64url value.\");\n\t}\n\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\tconst padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n\tconst binary = atob(padded);\n\tconst bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nexport function encodeMollieListCursor(cursor: MollieListCursor): string {\n\treturn encodeBase64Url(JSON.stringify(cursor));\n}\n\nexport function decodeMollieListCursor(\n\tcursor: string,\n\tresource: MollieListResource,\n): string {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64Url(cursor));\n\t} catch {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: \"Mollie list cursor is not valid.\",\n\t\t\tkind: \"serialization\",\n\t\t\toperation: `${resource}.list`,\n\t\t});\n\t}\n\tif (\n\t\t!isRecord(parsed) ||\n\t\tparsed.provider !== \"mollie\" ||\n\t\tparsed.resource !== resource ||\n\t\ttypeof parsed.from !== \"string\" ||\n\t\tparsed.from.length === 0\n\t) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: \"Mollie list cursor is not valid.\",\n\t\t\tkind: \"serialization\",\n\t\t\toperation: `${resource}.list`,\n\t\t});\n\t}\n\treturn parsed.from;\n}\n\nexport function fromParamFromMollieHref(href: string): string | undefined {\n\ttry {\n\t\tconst url = new URL(href);\n\t\tconst from = url.searchParams.get(\"from\");\n\t\treturn from != null && from.length > 0 ? from : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction firstRecordField(\n\tpayload: Record<string, unknown>,\n\tkeys: string[],\n): Record<string, unknown> | undefined {\n\tfor (const key of keys) {\n\t\tconst value = payload[key];\n\t\tif (isRecord(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function nextCursorFromMolliePayload(\n\tpayload: unknown,\n\tresource: MollieListResource,\n): string | null {\n\tif (!isRecord(payload)) {\n\t\treturn null;\n\t}\n\tconst href = mollieLinkHref(payload, \"next\");\n\tif (href == null) {\n\t\treturn null;\n\t}\n\tconst from = fromParamFromMollieHref(href);\n\tif (from == null) {\n\t\treturn null;\n\t}\n\treturn encodeMollieListCursor({\n\t\tfrom,\n\t\tprovider: \"mollie\",\n\t\tresource,\n\t});\n}\n\nexport function embeddedListItems(\n\tpayload: unknown,\n\tkey: string,\n): unknown[] {\n\tif (!isRecord(payload)) {\n\t\treturn [];\n\t}\n\tconst embedded = firstRecordField(payload, [\"_embedded\", \"embedded\"]);\n\tif (embedded == null) {\n\t\treturn [];\n\t}\n\tconst items = embedded[key];\n\treturn Array.isArray(items) ? items : [];\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction statusFrom(error: unknown): number | undefined {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\tif (typeof error.statusCode === \"number\") {\n\t\treturn error.statusCode;\n\t}\n\tif (typeof error.status === \"number\") {\n\t\treturn error.status;\n\t}\n\tconst httpMeta = error.httpMeta;\n\tif (isRecord(httpMeta) && isRecord(httpMeta.response)) {\n\t\tconst status = httpMeta.response.status;\n\t\tif (typeof status === \"number\") {\n\t\t\treturn status;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction bodyFrom(error: unknown): unknown {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\treturn error.body ?? error.data ?? error.rawBody;\n}\n\nexport function normalizeMollieSdkError(input: {\n\terror: unknown;\n\toperation: string;\n\tidempotencyKeyPresent?: boolean;\n}): never {\n\tconst { error, operation } = input;\n\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Mollie ${operation} was aborted.`,\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\t\tkind: \"timeout\",\n\t\t\toperation,\n\t\t\trequestDispatchState: \"unknown\",\n\t\t});\n\t}\n\tconst status = statusFrom(error);\n\tconst body = bodyFrom(error);\n\tconst message =\n\t\terror instanceof Error ? error.message : `Mollie ${operation} failed.`;\n\tconst kind =\n\t\tstatus == null &&\n\t\terror instanceof Error &&\n\t\t/network|fetch|ECONN|ENOTFOUND|ETIMEDOUT/i.test(error.message)\n\t\t\t? \"network\"\n\t\t\t: undefined;\n\tthrow createMollieProviderRequestError({\n\t\tbody,\n\t\tfallbackMessage: message,\n\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\tkind,\n\t\toperation,\n\t\trequestDispatchState:\n\t\t\tkind === \"network\" || status == null ? \"unknown\" : \"dispatched\",\n\t\tstatus,\n\t});\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\nimport { normalizeMollieSdkError } from \"./errors.ts\";\nimport type { MollieSdkResourceClient } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertMollieSdkPayload(value: unknown, operation: string): unknown {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (!isRecord(value) && !Array.isArray(value)) {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Mollie ${operation} returned a non-object body.`,\n\t\t\tkind: \"serialization\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn value;\n}\n\nexport async function invokeMollieSdk<T>(input: {\n\tinvoke: () => Promise<T>;\n\toperation: string;\n\tidempotencyKeyPresent?: boolean;\n}): Promise<T> {\n\ttry {\n\t\tconst result = await input.invoke();\n\t\treturn assertMollieSdkPayload(result, input.operation) as T;\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.name === \"AthenaBillingProviderRequestError\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tnormalizeMollieSdkError({\n\t\t\terror,\n\t\t\tidempotencyKeyPresent: input.idempotencyKeyPresent,\n\t\t\toperation: input.operation,\n\t\t});\n\t\tthrow new Error(\"ATHENA_BILLING_MOLLIE_SDK_ERROR_UNREACHABLE\");\n\t}\n}\n\nexport function requireMollieSdkResource(\n\tclient: MollieSdkResourceClient,\n\tname: keyof MollieSdkResourceClient,\n\toperation: string,\n): NonNullable<MollieSdkResourceClient[typeof name]> {\n\tconst resource = client[name];\n\tif (resource == null || typeof resource !== \"object\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${String(name)} for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn resource;\n}\n\nexport function requireMollieSdkMethod(\n\tresource: Record<string, unknown>,\n\tmethod: string,\n\toperation: string,\n): (request: Record<string, unknown>) => Promise<unknown> {\n\tconst fn = resource[method];\n\tif (typeof fn !== \"function\") {\n\t\tthrow createMollieProviderRequestError({\n\t\t\tfallbackMessage: `Injected Mollie SDK is missing ${method} for ${operation}.`,\n\t\t\tkind: \"unsupported_operation\",\n\t\t\toperation,\n\t\t});\n\t}\n\treturn fn.bind(resource) as (\n\t\trequest: Record<string, unknown>,\n\t) => Promise<unknown>;\n}\n\nexport function asMollieSdkClient(client: object): MollieSdkResourceClient {\n\treturn client as MollieSdkResourceClient;\n}\n\nexport function unwrapMollieSdkEntity(value: unknown): unknown {\n\tif (!isRecord(value)) {\n\t\treturn value;\n\t}\n\tif (isRecord(value.result)) {\n\t\treturn value.result;\n\t}\n\tif (isRecord(value.data)) {\n\t\treturn value.data;\n\t}\n\treturn value;\n}\n","import type { MollieSdkClientPool } from \"./client-factory.ts\";\nimport {\n\tasMollieSdkClient,\n\tinvokeMollieSdk,\n\trequireMollieSdkMethod,\n\trequireMollieSdkResource,\n\tunwrapMollieSdkEntity,\n} from \"./invoke.ts\";\nimport type { MollieSdkResourceClient } from \"./types.ts\";\n\nexport async function callMollieSdk(input: {\n\tclient: object;\n\tmethod: string;\n\toperation: string;\n\trequest: Record<string, unknown>;\n\tresource: keyof MollieSdkResourceClient;\n\tunwrap?: boolean;\n}): Promise<unknown> {\n\tconst client = asMollieSdkClient(input.client);\n\tconst resource = requireMollieSdkResource(\n\t\tclient,\n\t\tinput.resource,\n\t\tinput.operation,\n\t);\n\tconst method = requireMollieSdkMethod(\n\t\tresource as Record<string, unknown>,\n\t\tinput.method,\n\t\tinput.operation,\n\t);\n\tconst idempotencyKey = input.request.idempotencyKey;\n\tconst raw = await invokeMollieSdk({\n\t\tidempotencyKeyPresent:\n\t\t\ttypeof idempotencyKey === \"string\" && idempotencyKey.trim() !== \"\",\n\t\tinvoke: () => method(input.request),\n\t\toperation: input.operation,\n\t});\n\treturn input.unwrap === false ? raw : unwrapMollieSdkEntity(raw);\n}\n\nexport function clientFromPool(\n\tpool: MollieSdkClientPool,\n\tcontext: {\n\t\tcredential: Parameters<MollieSdkClientPool[\"clientFor\"]>[0][\"credential\"];\n\t\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\t\ttarget: { profileId?: string | null };\n\t},\n): object {\n\treturn pool.clientFor({\n\t\tcredential: context.credential,\n\t\toperationScope: context.operationScope,\n\t\trequestedProfileId: context.target.profileId,\n\t});\n}\n","import {\n\tembeddedListItems,\n\ttype MollieListResource,\n\tnextCursorFromMolliePayload,\n} from \"../cursor.ts\";\nimport { unwrapMollieSdkEntity } from \"./invoke.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstEmbeddedKey(resource: MollieListResource): string[] {\n\tswitch (resource) {\n\t\tcase \"payment-links\":\n\t\t\treturn [\"payment_links\", \"paymentLinks\"];\n\t\tcase \"webhooks\":\n\t\t\treturn [\"webhooks\"];\n\t\tcase \"invoices\":\n\t\t\treturn [\"sales_invoices\", \"salesInvoices\"];\n\t\tdefault:\n\t\t\treturn [resource];\n\t}\n}\n\nexport async function readOneMollieSdkPage(\n\tresult: unknown,\n\tresource: MollieListResource,\n): Promise<{ items: unknown[]; nextCursor: string | null }> {\n\tlet page = result;\n\tif (\n\t\tpage != null &&\n\t\ttypeof page === \"object\" &&\n\t\tSymbol.asyncIterator in page &&\n\t\ttypeof (page as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] ===\n\t\t\t\"function\"\n\t) {\n\t\tconst iterator = (page as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n\t\tconst first = await iterator.next();\n\t\tpage = first.done ? undefined : first.value;\n\t}\n\tconst entity = unwrapMollieSdkEntity(page);\n\tif (Array.isArray(entity)) {\n\t\treturn { items: entity, nextCursor: null };\n\t}\n\tif (isRecord(entity) && Array.isArray(entity.items)) {\n\t\treturn {\n\t\t\titems: entity.items,\n\t\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t\t};\n\t}\n\tfor (const key of firstEmbeddedKey(resource)) {\n\t\tconst items = embeddedListItems(entity, key);\n\t\tif (items.length > 0) {\n\t\t\treturn {\n\t\t\t\titems,\n\t\t\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\titems: [],\n\t\tnextCursor: nextCursorFromMolliePayload(entity, resource),\n\t};\n}\n","import { decodeMollieListCursor } from \"../../runtime/local/providers/mollie/cursor.ts\";\nimport { callMollieSdk, clientFromPool } from \"../../runtime/local/providers/mollie/sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"../../runtime/local/providers/mollie/sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"../../runtime/local/providers/mollie/sdk/page.ts\";\nimport type { BillingProviderExecutionContext } from \"../../runtime/local/providers/types.ts\";\nimport type { BillingImportCustomer, BillingImportCustomerPage } from \"../types.ts\";\nimport type { BillingCustomerImportPort } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction metadataRecord(value: unknown): Record<string, unknown> {\n\tif (!isRecord(value)) {\n\t\treturn {};\n\t}\n\treturn value;\n}\n\nexport function projectMollieImportCustomer(raw: unknown): BillingImportCustomer {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\" || raw.id.trim() === \"\") {\n\t\tthrow new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n\t}\n\treturn {\n\t\temail: optionalString(raw.email),\n\t\tmetadata: metadataRecord(raw.metadata),\n\t\tname: optionalString(raw.name),\n\t\tproviderCustomerId: raw.id,\n\t\traw,\n\t};\n}\n\nexport function createMollieBillingCustomerImportPort(input: {\n\tconnection?: {\n\t\tenvironment: \"live\" | \"test\";\n\t\tid: string;\n\t\tprovider: string;\n\t};\n\tcontext: BillingProviderExecutionContext;\n\tpool: MollieSdkClientPool;\n}): BillingCustomerImportPort {\n\tconst connection = input.connection ?? {\n\t\tenvironment: input.context.environment.name,\n\t\tid: \"unbound\",\n\t\tprovider: \"mollie\",\n\t};\n\treturn {\n\t\tasync getCustomer(getInput) {\n\t\t\tconst bound = getInput.connection ?? connection;\n\t\t\tif (bound.provider !== \"mollie\") {\n\t\t\t\tthrow new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n\t\t\t}\n\t\t\tconst raw = await callMollieSdk({\n\t\t\t\tclient: clientFromPool(input.pool, input.context),\n\t\t\t\tmethod: \"get\",\n\t\t\t\toperation: \"customers.get\",\n\t\t\t\tunwrap: true,\n\t\t\t\trequest: { id: getInput.customerId },\n\t\t\t\tresource: \"customers\",\n\t\t\t});\n\t\t\treturn projectMollieImportCustomer(raw);\n\t\t},\n\t\tasync listCustomers(page) {\n\t\t\tconst from =\n\t\t\t\tpage.cursor != null && page.cursor.length > 0\n\t\t\t\t\t? decodeMollieListCursor(page.cursor, \"customers\")\n\t\t\t\t\t: undefined;\n\t\t\tconst raw = await callMollieSdk({\n\t\t\t\tclient: clientFromPool(input.pool, input.context),\n\t\t\t\tmethod: \"list\",\n\t\t\t\toperation: \"customers.list\",\n\t\t\t\tunwrap: false,\n\t\t\t\trequest: { from, limit: page.limit },\n\t\t\t\tresource: \"customers\",\n\t\t\t});\n\t\t\tconst listed = await readOneMollieSdkPage(raw, \"customers\");\n\t\t\tconst items: BillingImportCustomer[] = [];\n\t\t\tfor (const item of listed.items) {\n\t\t\t\titems.push(projectMollieImportCustomer(item));\n\t\t\t}\n\t\t\tconst result: BillingImportCustomerPage = {\n\t\t\t\titems,\n\t\t\t\tnextCursor: listed.nextCursor,\n\t\t\t};\n\t\t\treturn result;\n\t\t},\n\t};\n}\n","import { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n\timportPolicyFromBillingConfig,\n\trunBillingCustomerImportWithPostgres,\n} from \"../../../billing/import/assemble.ts\";\nimport {\n\tcreateBillingSqlExecutor,\n\tlistActiveBillingImportConnections,\n} from \"../../../billing/import/postgres.ts\";\nimport type { BillingImportRunReport } from \"../../../billing/import/types.ts\";\nimport { resolveBillingWebhookApplicationId } from \"../../../billing/ingestion/application-id.ts\";\nimport { attachEventIngressRuntime } from \"../../../billing/runtime/local/ingress/attach.ts\";\nimport {\n\tclassifyStuckBillingIngress,\n\treplayBillingIngressBatch,\n} from \"../../../billing/runtime/local/ingress/replay.ts\";\nimport { createBillingProviderRegistry } from \"../../../billing/runtime/local/providers/create-registry.ts\";\nimport {\n\tnormalizeAthenaBillingIngestion,\n\tsigningSecretsFromWebhookConfig,\n} from \"../../../billing/ingestion/config.ts\";\nimport {\n\tcreatePostgresBillingWebhookSecretStore,\n\trememberConnectionSigningSecretSet,\n\tresolveBillingWebhookMasterKey,\n\tsigningSecretsForConnection,\n} from \"../../../billing/ingestion/secrets/index.ts\";\nimport type { AthenaClientInternals } from \"../../../runtime/client-internals.ts\";\nimport { eventIngressDatabaseFromPool } from \"../../../runtime/ingress/postgres.ts\";\nimport type { EventIngressRuntime } from \"../../../runtime/ingress/runtime.ts\";\nimport { createSqlEventIngressPersistence } from \"../../../runtime/ingress/sql.ts\";\nimport {\n\tapplyGeneratorProjectEnv,\n\tfindGeneratorConfigPath,\n\tloadGeneratorConfig,\n} from \"../../../generator/config.ts\";\nimport type { ResolvedGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { createPostgresPool } from \"../../../postgres/driver.ts\";\nimport type { AthenaBillingConfig } from \"../../../v3-client-core.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport type {\n\tBillingIngressReplayCommand,\n\tBillingReconcileSubjectsCommand,\n\tBillingWebhooksCommand,\n} from \"../../types.ts\";\n\nexport interface ExecuteBillingReconcileSubjectsInput {\n\tcwd: string;\n\tparsed: BillingReconcileSubjectsCommand;\n}\n\nfunction readOptionalBillingFromUnknown(\n\tvalue: unknown,\n): AthenaBillingConfig | undefined {\n\tif (value == null || typeof value !== \"object\") {\n\t\treturn undefined;\n\t}\n\tconst record = value as Record<string, unknown>;\n\tif (record.billing != null && typeof record.billing === \"object\") {\n\t\treturn record.billing as AthenaBillingConfig;\n\t}\n\tif (record.default != null) {\n\t\treturn readOptionalBillingFromUnknown(record.default);\n\t}\n\tif (record.config != null) {\n\t\treturn readOptionalBillingFromUnknown(record.config);\n\t}\n\treturn undefined;\n}\n\nasync function loadProjectBillingConfig(input: {\n\tconfigPath?: string;\n\tcwd: string;\n}): Promise<AthenaBillingConfig | undefined> {\n\tconst resolved = input.configPath\n\t\t? resolve(input.cwd, input.configPath)\n\t\t: findGeneratorConfigPath(input.cwd);\n\tif (!resolved) {\n\t\treturn undefined;\n\t}\n\tconst module = await import(\n\t\t`${pathToFileURL(resolved).href}?cacheBust=${Date.now()}`\n\t);\n\treturn readOptionalBillingFromUnknown(module);\n}\n\nasync function resolveBillingDatabaseAuthority(input: {\n\tconfigPath?: string;\n\tcwd: string;\n}): Promise<{\n\tauthority: ResolvedGeneratorDatabaseAuthority;\n\trestoreEnv: () => void;\n}> {\n\tconst restoreEnv = applyGeneratorProjectEnv(input.cwd);\n\ttry {\n\t\tconst loaded = await loadGeneratorConfig({\n\t\t\tapplyProjectEnv: false,\n\t\t\tconfigPath: input.configPath,\n\t\t\tcwd: input.cwd,\n\t\t\trestoreProjectEnv: false,\n\t\t});\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\tapplyProjectEnv: false,\n\t\t\tcwd: input.cwd,\n\t\t\tloaded,\n\t\t\tmode: \"direct\",\n\t\t});\n\t\treturn { authority, restoreEnv };\n\t} catch (error) {\n\t\trestoreEnv();\n\t\tthrow error;\n\t}\n}\n\nexport async function executeBillingReconcileSubjects(\n\tinput: ExecuteBillingReconcileSubjectsInput,\n): Promise<BillingImportRunReport> {\n\tconst cwd = input.cwd;\n\tconst { authority, restoreEnv } = await resolveBillingDatabaseAuthority({\n\t\tconfigPath: input.parsed.configPath,\n\t\tcwd,\n\t});\n\ttry {\n\t\tconst provider = authority.provider;\n\t\tif (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Use the same athena.config.ts / DATABASE_URL that `athena-js migrate` uses.\",\n\t\t\t\tmessage: `billing reconcile-subjects requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n\t\t\t});\n\t\t}\n\t\tif (!provider.connectionString) {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n\t\t\t\tmessage: \"billing reconcile-subjects requires a reachable database.\",\n\t\t\t});\n\t\t}\n\t\tconst billing = await loadProjectBillingConfig({\n\t\t\tconfigPath: input.parsed.configPath,\n\t\t\tcwd,\n\t\t});\n\t\tconst pool = await createPostgresPool(provider.connectionString, {\n\t\t\tmax: 4,\n\t\t\tmin: 0,\n\t\t});\n\t\ttry {\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\treturn await runBillingCustomerImportWithPostgres({\n\t\t\t\tconfiguredProviders: billing?.providers,\n\t\t\t\tconnectionId: input.parsed.connectionId,\n\t\t\t\tcursor: input.parsed.cursor,\n\t\t\t\tcustomerId: input.parsed.customerId,\n\t\t\t\tdryRun: input.parsed.dryRun,\n\t\t\t\tincludeAmbiguous: input.parsed.includeAmbiguous,\n\t\t\t\tlimit: input.parsed.limit,\n\t\t\t\tlimits: {\n\t\t\t\t\tmaxCustomers: input.parsed.maxCustomers,\n\t\t\t\t\tmaxDurationMs: input.parsed.maxDurationMs,\n\t\t\t\t\tmaxPages: input.parsed.maxPages,\n\t\t\t\t\tpageSize: input.parsed.limit,\n\t\t\t\t},\n\t\t\t\tpool,\n\t\t\t\tpolicy: importPolicyFromBillingConfig(billing),\n\t\t\t\tprovider: input.parsed.provider,\n\t\t\t\tsql,\n\t\t\t\tsubjectId: input.parsed.subjectId,\n\t\t\t\ttestMode: billing?.testMode,\n\t\t\t\ttrigger: \"manual\",\n\t\t\t});\n\t\t} finally {\n\t\t\tawait pool.end();\n\t\t}\n\t} finally {\n\t\trestoreEnv();\n\t}\n}\n\nexport interface ExecuteBillingWebhooksInput {\n\tcwd: string;\n\tparsed: BillingWebhooksCommand;\n}\n\nexport async function executeBillingWebhooks(\n\tinput: ExecuteBillingWebhooksInput,\n): Promise<Record<string, unknown>> {\n\tconst restoreEnv = applyGeneratorProjectEnv(input.cwd);\n\ttry {\n\t\tconst billing = await loadProjectBillingConfig({\n\t\t\tconfigPath: input.parsed.configPath,\n\t\t\tcwd: input.cwd,\n\t\t});\n\t\tconst { normalizeAthenaBillingIngestion } = await import(\n\t\t\t\"../../../billing/ingestion/config.ts\"\n\t\t);\n\t\tconst { resolveBillingIngressEndpoints } = await import(\n\t\t\t\"../../../billing/ingestion/urls.ts\"\n\t\t);\n\t\tconst ingestion = normalizeAthenaBillingIngestion(billing?.ingestion);\n\t\tconst endpoints = resolveBillingIngressEndpoints({\n\t\t\tappUrl: undefined,\n\t\t\tpublicBaseUrl: ingestion.webhooks.publicBaseUrl,\n\t\t});\n\t\tif (input.parsed.action !== \"reconcile\" || input.parsed.dryRun) {\n\t\t\treturn {\n\t\t\t\taction: input.parsed.action,\n\t\t\t\tclassicUrl: endpoints?.classicUrl,\n\t\t\t\tconnectionId: input.parsed.connectionId,\n\t\t\t\tdryRun: input.parsed.dryRun,\n\t\t\t\teventsUrl: endpoints?.eventsUrl,\n\t\t\t\tmanagement: ingestion.webhooks.management,\n\t\t\t\tprovider: input.parsed.provider ?? \"mollie\",\n\t\t\t};\n\t\t}\n\t\tconst loaded = await loadGeneratorConfig({\n\t\t\tapplyProjectEnv: false,\n\t\t\tconfigPath: input.parsed.configPath,\n\t\t\tcwd: input.cwd,\n\t\t\trestoreProjectEnv: false,\n\t\t});\n\t\tconst authority = resolveGeneratorDatabaseAuthority({\n\t\t\tapplyProjectEnv: false,\n\t\t\tcwd: input.cwd,\n\t\t\tloaded,\n\t\t\tmode: \"direct\",\n\t\t});\n\t\tconst provider = authority.provider;\n\t\tif (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Use the same athena.config.ts / DATABASE_URL that `athena-js migrate` uses.\",\n\t\t\t\tmessage: `billing webhooks requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n\t\t\t});\n\t\t}\n\t\tif (!provider.connectionString) {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n\t\t\t\tmessage: \"billing webhooks requires a reachable database.\",\n\t\t\t});\n\t\t}\n\t\tconst pool = await createPostgresPool(provider.connectionString, {\n\t\t\tmax: 4,\n\t\t\tmin: 0,\n\t\t});\n\t\ttry {\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tconst { runAutomaticBillingWebhookReconcileIfEnabled } = await import(\n\t\t\t\t\"../../../billing/ingestion/automatic.ts\"\n\t\t\t);\n\t\t\tconst applicationId = resolveBillingWebhookApplicationId({\n\t\t\t\tclient: process.env.ATHENA_CLIENT,\n\t\t\t});\n\t\t\tif (applicationId == null) {\n\t\t\t\tthrow new AthenaCliError({\n\t\t\t\t\tcode: \"BILLING001\",\n\t\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\t\thint: \"Set ATHENA_CLIENT or createClient({ app: { id } }). Do not use a display name.\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"billing webhooks reconcile requires a stable application id (ATHENA_CLIENT).\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tawait runAutomaticBillingWebhookReconcileIfEnabled({\n\t\t\t\tapplicationId,\n\t\t\t\tappUrl: ingestion.webhooks.publicBaseUrl,\n\t\t\t\tconfiguredProviders: billing?.providers,\n\t\t\t\tsql,\n\t\t\t\ttestMode: billing?.testMode,\n\t\t\t\ttrigger: \"manual\",\n\t\t\t\twebhooks: ingestion.webhooks,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\taction: \"reconcile\",\n\t\t\t\tconnectionId: input.parsed.connectionId,\n\t\t\t\tdryRun: false,\n\t\t\t\tprovider: input.parsed.provider ?? \"mollie\",\n\t\t\t};\n\t\t} finally {\n\t\t\tawait pool.end();\n\t\t}\n\t} finally {\n\t\trestoreEnv();\n\t}\n}\n\nexport interface ExecuteBillingIngressReplayInput {\n\tcwd: string;\n\tparsed: BillingIngressReplayCommand;\n}\n\nexport async function executeBillingIngressReplay(\n\tinput: ExecuteBillingIngressReplayInput,\n): Promise<Record<string, unknown>> {\n\tconst cwd = input.cwd;\n\tconst { authority, restoreEnv } = await resolveBillingDatabaseAuthority({\n\t\tconfigPath: input.parsed.configPath,\n\t\tcwd,\n\t});\n\ttry {\n\t\tconst provider = authority.provider;\n\t\tif (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Use the same athena.config.ts / DATABASE_URL that `athena-js migrate` uses.\",\n\t\t\t\tmessage: `billing ingress replay requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n\t\t\t});\n\t\t}\n\t\tif (!provider.connectionString) {\n\t\t\tthrow new AthenaCliError({\n\t\t\t\tcode: \"BILLING001\",\n\t\t\t\texitCode: CliExitCode.Runtime,\n\t\t\t\thint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n\t\t\t\tmessage: \"billing ingress replay requires a reachable database.\",\n\t\t\t});\n\t\t}\n\t\tconst billing = await loadProjectBillingConfig({\n\t\t\tconfigPath: input.parsed.configPath,\n\t\t\tcwd,\n\t\t});\n\t\tconst pool = await createPostgresPool(provider.connectionString, {\n\t\t\tmax: 4,\n\t\t\tmin: 0,\n\t\t});\n\t\ttry {\n\t\t\tconst database = eventIngressDatabaseFromPool(pool);\n\t\t\tconst persistence = createSqlEventIngressPersistence();\n\t\t\tconst classified = await classifyStuckBillingIngress({\n\t\t\t\tdatabase,\n\t\t\t\tdryRun: input.parsed.dryRun,\n\t\t\t\tlimit: input.parsed.limit,\n\t\t\t\tpersistence,\n\t\t\t});\n\t\t\tif (input.parsed.dryRun || input.parsed.classifyOnly) {\n\t\t\t\treturn {\n\t\t\t\t\taction: \"classify\",\n\t\t\t\t\t...classified,\n\t\t\t\t\tdryRun: input.parsed.dryRun,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tconst ingestion = normalizeAthenaBillingIngestion(billing?.ingestion);\n\t\t\tconst secretCache = new Map<string, string[]>();\n\t\t\tconst masterKey = resolveBillingWebhookMasterKey({\n\t\t\t\tconfigured: ingestion.webhooks.secretMasterKey,\n\t\t\t\tdatabaseUrl: provider.connectionString,\n\t\t\t});\n\t\t\tif (masterKey) {\n\t\t\t\tconst secretStore = createPostgresBillingWebhookSecretStore({\n\t\t\t\t\tmasterKey,\n\t\t\t\t\tsql,\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tconst connections = await listActiveBillingImportConnections(\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\t\"mollie\",\n\t\t\t\t\t);\n\t\t\t\t\tfor (const connection of connections) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trememberConnectionSigningSecretSet(\n\t\t\t\t\t\t\t\tsecretCache,\n\t\t\t\t\t\t\t\tconnection.id,\n\t\t\t\t\t\t\t\tawait secretStore.resolve(connection.id),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* secrets table may be missing until billing 0015 */\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (connections.length === 1) {\n\t\t\t\t\t\tconst only = connections[0];\n\t\t\t\t\t\tif (only) {\n\t\t\t\t\t\t\trememberConnectionSigningSecretSet(\n\t\t\t\t\t\t\t\tsecretCache,\n\t\t\t\t\t\t\t\tonly.id,\n\t\t\t\t\t\t\t\tsigningSecretsFromWebhookConfig(ingestion.webhooks),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t/* connection list is optional for classify-only paths */\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst internals = {\n\t\t\t\tpostgresRuntime: {\n\t\t\t\t\tgetPool: async () => pool,\n\t\t\t\t},\n\t\t\t} as AthenaClientInternals;\n\t\t\tattachEventIngressRuntime(internals, {\n\t\t\t\tconfiguredProviders: billing?.providers,\n\t\t\t\tregistry: createBillingProviderRegistry(\n\t\t\t\t\tbilling?.providers,\n\t\t\t\t\tbilling?.catalog,\n\t\t\t\t),\n\t\t\t\tresolveSigningSecrets: (connectionId) =>\n\t\t\t\t\tsigningSecretsForConnection(secretCache, connectionId),\n\t\t\t\ttestMode: billing?.testMode,\n\t\t\t});\n\t\t\tconst runtime = internals.eventIngressRuntime as EventIngressRuntime;\n\t\t\tconst replayed = await replayBillingIngressBatch({\n\t\t\t\tdatabase,\n\t\t\t\tlimit: input.parsed.limit,\n\t\t\t\tpersistence,\n\t\t\t\truntime,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\taction: \"replay\",\n\t\t\t\tclassified,\n\t\t\t\treplayed,\n\t\t\t};\n\t\t} finally {\n\t\t\tawait pool.end();\n\t\t}\n\t} finally {\n\t\trestoreEnv();\n\t}\n}\n","/**\n * Webhook ownership identity is an installation id, not a display name.\n * `app.name` must never enter `athena:{id}:{connection}:billing`.\n */\nexport function resolveBillingWebhookApplicationId(input: {\n\tapp?: { id?: string | null; name?: string | null } | null;\n\tclient?: string | null;\n}): string | undefined {\n\tconst fromApp = trimId(input.app?.id);\n\tif (fromApp != null) {\n\t\treturn fromApp;\n\t}\n\treturn trimId(input.client);\n}\n\nfunction trimId(value: string | null | undefined): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n","export const ATHENA_EVENT_INGRESS_UNAVAILABLE =\n\t\"ATHENA_EVENT_INGRESS_UNAVAILABLE\" as const;\nexport const ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED =\n\t\"ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\" as const;\nexport const ATHENA_EVENT_INGRESS_FAILED =\n\t\"ATHENA_EVENT_INGRESS_FAILED\" as const;\nexport const ATHENA_INGRESS_MOLLIE_UNAVAILABLE =\n\t\"ATHENA_INGRESS_MOLLIE_UNAVAILABLE\" as const;\nexport const ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID =\n\t\"ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\" as const;\nexport const ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID =\n\t\"ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID\" as const;\n\nexport type AthenaEventIngressErrorCode =\n\t| typeof ATHENA_EVENT_INGRESS_UNAVAILABLE\n\t| typeof ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\n\t| typeof ATHENA_EVENT_INGRESS_FAILED\n\t| typeof ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n\t| typeof ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\n\t| typeof ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID;\n\nexport class AthenaEventIngressError extends Error {\n\treadonly code: AthenaEventIngressErrorCode;\n\treadonly domain: \"billing\" | \"ingress\";\n\treadonly retryable: boolean;\n\treadonly provider?: string;\n\t/** Safe envelope facts only — never raw webhook bodies or secrets. */\n\treadonly diagnostics?: Readonly<{\n\t\tbodyBytes?: number;\n\t\tbodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n\t\tcontentType?: string;\n\t}>;\n\n\tconstructor(input: {\n\t\tcode: AthenaEventIngressErrorCode;\n\t\tmessage: string;\n\t\tdomain?: \"billing\" | \"ingress\";\n\t\tretryable?: boolean;\n\t\tprovider?: string;\n\t\tdiagnostics?: {\n\t\t\tbodyBytes?: number;\n\t\t\tbodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n\t\t\tcontentType?: string;\n\t\t};\n\t}) {\n\t\tsuper(input.message);\n\t\tthis.name = \"AthenaEventIngressError\";\n\t\tthis.code = input.code;\n\t\tthis.domain = input.domain ?? \"ingress\";\n\t\tthis.retryable = input.retryable ?? false;\n\t\tif (input.provider) {\n\t\t\tthis.provider = input.provider;\n\t\t}\n\t\tif (input.diagnostics) {\n\t\t\tthis.diagnostics = input.diagnostics;\n\t\t}\n\t}\n}\n\nexport function isAthenaEventIngressError(\n\terror: unknown,\n): error is AthenaEventIngressError {\n\tif (error instanceof AthenaEventIngressError) {\n\t\treturn true;\n\t}\n\tif (error == null || typeof error !== \"object\") {\n\t\treturn false;\n\t}\n\tconst record = error as { code?: unknown; name?: unknown };\n\treturn (\n\t\trecord.name === \"AthenaEventIngressError\" &&\n\t\ttypeof record.code === \"string\"\n\t);\n}\n\nexport function eventIngressHttpStatus(error: unknown): number {\n\tif (!isAthenaEventIngressError(error)) {\n\t\treturn 400;\n\t}\n\tif (error.code === ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID) {\n\t\treturn 401;\n\t}\n\tif (\n\t\terror.code === ATHENA_EVENT_INGRESS_UNAVAILABLE ||\n\t\terror.code === ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED ||\n\t\terror.code === ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n\t) {\n\t\treturn 503;\n\t}\n\treturn 400;\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressQueryResult,\n} from \"./persistence.ts\";\n\nfunction toEventIngressQueryResult<T>(\n\tresult: { rowCount?: number | null; rows: unknown[] },\n): EventIngressQueryResult<T> {\n\treturn {\n\t\trowCount: result.rowCount ?? result.rows.length,\n\t\trows: result.rows as T[],\n\t};\n}\n\nexport function eventIngressDatabaseFromPool(\n\tpool: AthenaPostgresPool,\n): EventIngressDatabase {\n\treturn {\n\t\tasync query<T = Record<string, unknown>>(\n\t\t\ttext: string,\n\t\t\tvalues?: unknown[],\n\t\t) {\n\t\t\tconst result = await pool.query(text, values);\n\t\t\treturn toEventIngressQueryResult<T>(result);\n\t\t},\n\t\tasync transaction(fn) {\n\t\t\tconst client = await pool.connect();\n\t\t\tconst tx: EventIngressDatabase = {\n\t\t\t\tasync query<T = Record<string, unknown>>(\n\t\t\t\t\ttext: string,\n\t\t\t\t\tvalues?: unknown[],\n\t\t\t\t) {\n\t\t\t\t\tconst result = await client.query(text, values);\n\t\t\t\t\treturn toEventIngressQueryResult<T>(result);\n\t\t\t\t},\n\t\t\t\ttransaction(inner) {\n\t\t\t\t\treturn inner(tx);\n\t\t\t\t},\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tawait client.query(\"BEGIN\");\n\t\t\t\tconst result = await fn(tx);\n\t\t\t\tawait client.query(\"COMMIT\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\tawait client.query(\"ROLLBACK\");\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tclient.release();\n\t\t\t}\n\t\t},\n\t};\n}\n","import type { CanonicalEventIR } from \"../events/ir.ts\";\nimport type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n} from \"./persistence.ts\";\n\nexport interface EventIngressResult<\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tduplicate: boolean;\n\tignored?: boolean;\n\tevents: readonly TEvent[];\n\tdocument?: TDocument;\n\t/**\n\t * Downstream customer import / reconciliation after the ingress row is\n\t * persisted. HTTP 202 can still report `failed` here.\n\t */\n\treconciliation?: \"completed\" | \"failed\" | \"skipped\";\n}\n\nexport interface EventIngressRuntimeContext<TDomain = unknown> {\n\tdatabase: EventIngressDatabase;\n\tpersistence: EventIngressPersistence;\n\tdomain: TDomain;\n}\n\nexport interface EventIngressDomainHandler<\n\tTDomain = unknown,\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tingest(\n\t\tingress: AthenaIngressIR,\n\t\truntime: EventIngressRuntimeContext<TDomain>,\n\t): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport interface EventIngressRuntime<\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n\tingest(\n\t\tingress: AthenaIngressIR,\n\t): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport function createEventIngressRuntime<\n\tTDomain = unknown,\n\tTDocument = unknown,\n\tTEvent extends CanonicalEventIR = CanonicalEventIR,\n>(input: {\n\tcontext: EventIngressRuntimeContext<TDomain>;\n\thandler: EventIngressDomainHandler<TDomain, TDocument, TEvent>;\n}): EventIngressRuntime<TDocument, TEvent> {\n\treturn {\n\t\tingest(ingress) {\n\t\t\treturn input.handler.ingest(ingress, input.context);\n\t\t},\n\t};\n}\n","import type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n\tEventIngressRecord,\n} from \"./persistence.ts\";\n\nfunction asRecord(value: unknown): Record<string, string> {\n\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, string>;\n\t}\n\treturn {};\n}\n\nexport type EventIngressRow = {\n\tid: string;\n\tdomain: string;\n\tprovider: string | null;\n\tprovider_event_id: string | null;\n\tconnection_id: string | null;\n\tstatus: EventIngressRecord[\"status\"];\n\tbody: Buffer;\n\theaders: unknown;\n\treceived_at: Date;\n\tcorrelation_id: string | null;\n\ttrace_id: string | null;\n\tattempt_count: number;\n\tfailure_stage?: string | null;\n\tfirst_failed_at?: Date | null;\n\tnext_attempt_at?: Date | null;\n\tlease_expires_at?: Date | null;\n};\n\nexport function mapIngressRow(row: EventIngressRow): EventIngressRecord {\n\treturn {\n\t\tid: row.id,\n\t\tdomain: row.domain,\n\t\tprovider: row.provider,\n\t\tproviderEventId: row.provider_event_id,\n\t\tconnectionId: row.connection_id,\n\t\tstatus: row.status,\n\t\tbody: new Uint8Array(row.body),\n\t\theaders: asRecord(row.headers),\n\t\treceivedAt: new Date(row.received_at),\n\t\tcorrelationId: row.correlation_id,\n\t\ttraceId: row.trace_id,\n\t\tattemptCount: row.attempt_count,\n\t\tfailureStage: row.failure_stage ?? null,\n\t\tfirstFailedAt: row.first_failed_at\n\t\t\t? new Date(row.first_failed_at)\n\t\t\t: null,\n\t\tnextAttemptAt: row.next_attempt_at\n\t\t\t? new Date(row.next_attempt_at)\n\t\t\t: null,\n\t\tleaseExpiresAt: row.lease_expires_at\n\t\t\t? new Date(row.lease_expires_at)\n\t\t\t: null,\n\t};\n}\n\nfunction insertValues(\n\tingress: AthenaIngressIR,\n\tmeta: { provider: string | null; providerEventId: string | null },\n): unknown[] {\n\treturn [\n\t\tingress.id,\n\t\tingress.domain,\n\t\tmeta.provider,\n\t\tmeta.providerEventId,\n\t\tingress.connectionId ?? null,\n\t\tingress.receivedAt.toISOString(),\n\t\tBuffer.from(ingress.body),\n\t\tJSON.stringify(ingress.headers),\n\t\tingress.correlationId ?? null,\n\t\tingress.traceId ?? null,\n\t];\n}\n\nasync function lockProviderEventClaim(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<void> {\n\tawait tx.query(\n\t\t`SELECT pg_advisory_xact_lock(\n\t\t\thashtext($1::text),\n\t\t\thashtext(json_build_array($2::text, $3::text)::text)\n\t\t)`,\n\t\t[input.domain, input.provider ?? \"\", input.providerEventId],\n\t);\n}\n\nasync function selectByProviderEvent(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<{ id: string } | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nSELECT id, status\nFROM athena.event_ingress\nWHERE domain = $1\n  AND provider IS NOT DISTINCT FROM $2\n  AND provider_event_id = $3\n`,\n\t\t[input.domain, input.provider, input.providerEventId],\n\t);\n\treturn result.rows[0];\n}\n\nfunction duplicateFromRow(\n\trow: { id: string },\n\tingressId: string,\n): { duplicate: boolean; ingressId: string } {\n\tif (row.id !== ingressId) {\n\t\treturn {\n\t\t\tduplicate: true,\n\t\t\tingressId: row.id,\n\t\t};\n\t}\n\treturn {\n\t\tduplicate: false,\n\t\tingressId: row.id,\n\t};\n}\n\nasync function insertReceivedById(\n\ttx: EventIngressDatabase,\n\tingress: AthenaIngressIR,\n\tprovider: string | null,\n): Promise<void> {\n\tawait tx.query(\n\t\t`\nINSERT INTO athena.event_ingress (\n  id, domain, provider, provider_event_id, connection_id,\n  received_at, body, headers, status, correlation_id, trace_id, attempt_count\n) VALUES (\n  $1, $2, $3, $4, $5, $6, $7, $8::jsonb, 'received', $9, $10, 0\n)\nON CONFLICT (id) DO NOTHING\n`,\n\t\tinsertValues(ingress, { provider, providerEventId: null }),\n\t);\n}\n\nasync function claimProviderEventOnRow(\n\ttx: EventIngressDatabase,\n\tinput: {\n\t\tingressId: string;\n\t\tdomain: string;\n\t\tprovider: string | null;\n\t\tproviderEventId: string;\n\t},\n): Promise<string | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nUPDATE athena.event_ingress AS target\nSET provider_event_id = $4\nWHERE target.id = $1\n  AND (target.provider_event_id IS NULL OR target.provider_event_id = $4)\n  AND NOT EXISTS (\n    SELECT 1\n    FROM athena.event_ingress AS claimed\n    WHERE claimed.domain = $2\n      AND claimed.provider IS NOT DISTINCT FROM $3\n      AND claimed.provider_event_id = $4\n      AND claimed.id <> $1\n  )\nRETURNING target.id\n`,\n\t\t[input.ingressId, input.domain, input.provider, input.providerEventId],\n\t);\n\treturn result.rows[0]?.id;\n}\n\nasync function insertReceivedByProviderEvent(\n\ttx: EventIngressDatabase,\n\tingress: AthenaIngressIR,\n\tmeta: { provider: string | null; providerEventId: string },\n): Promise<string | undefined> {\n\tconst result = await tx.query<{ id: string }>(\n\t\t`\nINSERT INTO athena.event_ingress (\n  id, domain, provider, provider_event_id, connection_id,\n  received_at, body, headers, status, correlation_id, trace_id, attempt_count\n) VALUES (\n  $1, $2, $3, $4, $5, $6, $7, $8::jsonb, 'received', $9, $10, 0\n)\nON CONFLICT (domain, provider, provider_event_id) WHERE provider_event_id IS NOT NULL\nDO NOTHING\nRETURNING id\n`,\n\t\tinsertValues(ingress, meta),\n\t);\n\treturn result.rows[0]?.id;\n}\n\nexport function createSqlEventIngressPersistence(): EventIngressPersistence {\n\treturn {\n\t\tasync insertReceived(tx, ingress, meta) {\n\t\t\tconst provider = meta.provider ?? null;\n\t\t\tconst providerEventId = meta.providerEventId;\n\t\t\tif (!providerEventId) {\n\t\t\t\tawait insertReceivedById(tx, ingress, provider);\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t};\n\t\t\t}\n\t\t\tawait lockProviderEventClaim(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tconst existing = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (existing) {\n\t\t\t\treturn duplicateFromRow(existing, ingress.id);\n\t\t\t}\n\t\t\tconst claimedOnRow = await claimProviderEventOnRow(tx, {\n\t\t\t\tingressId: ingress.id,\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (claimedOnRow) {\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: claimedOnRow,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst afterClaim = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (afterClaim) {\n\t\t\t\treturn duplicateFromRow(afterClaim, ingress.id);\n\t\t\t}\n\t\t\tconst inserted = await insertReceivedByProviderEvent(tx, ingress, {\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (inserted) {\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: inserted,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst afterInsert = await selectByProviderEvent(tx, {\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider,\n\t\t\t\tproviderEventId,\n\t\t\t});\n\t\t\tif (afterInsert) {\n\t\t\t\treturn duplicateFromRow(afterInsert, ingress.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tduplicate: false,\n\t\t\t\tingressId: ingress.id,\n\t\t\t};\n\t\t},\n\t\tasync lock(tx, ingressId) {\n\t\t\tconst result = await tx.query<EventIngressRow>(\n\t\t\t\t`SELECT * FROM athena.event_ingress WHERE id = $1 FOR UPDATE`,\n\t\t\t\t[ingressId],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\tif (!row) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn mapIngressRow(row);\n\t\t},\n\t\tasync markStatus(tx, input) {\n\t\t\tawait tx.query(\n\t\t\t\t`\nUPDATE athena.event_ingress\nSET status = $2,\n    attempt_count = CASE\n      WHEN $2 IN ('retryable_failure', 'terminal_failure') THEN attempt_count + 1\n      ELSE attempt_count\n    END,\n    failed_at = CASE WHEN $2 IN ('retryable_failure', 'terminal_failure') THEN now() ELSE failed_at END,\n    error = $3::jsonb,\n    failure_stage = $4,\n    next_attempt_at = $5,\n    lease_owner = CASE WHEN $2 = 'resolving' THEN lease_owner ELSE NULL END,\n    lease_expires_at = CASE\n      WHEN $2 = 'resolving' THEN COALESCE($6::timestamptz, now() + interval '5 minutes')\n      WHEN $2 IN ('retryable_failure', 'terminal_failure', 'processed', 'ignored') THEN NULL\n      ELSE lease_expires_at\n    END,\n    first_failed_at = COALESCE(first_failed_at, $7::timestamptz),\n    last_failed_at = $8::timestamptz\nWHERE id = $1\n`,\n\t\t\t\t[\n\t\t\t\t\tinput.ingressId,\n\t\t\t\t\tinput.status,\n\t\t\t\t\tinput.error == null ? null : JSON.stringify(input.error),\n\t\t\t\t\tinput.failureStage ?? null,\n\t\t\t\t\tinput.nextAttemptAt?.toISOString() ?? null,\n\t\t\t\t\tinput.leaseExpiresAt?.toISOString() ?? null,\n\t\t\t\t\tinput.firstFailedAt?.toISOString() ?? null,\n\t\t\t\t\tinput.lastFailedAt?.toISOString() ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync markProcessed(tx, input) {\n\t\t\tawait tx.query(\n\t\t\t\t`\nUPDATE athena.event_ingress\nSET status = 'processed', processed_at = now()\nWHERE id = $1\n`,\n\t\t\t\t[input.ingressId],\n\t\t\t);\n\t\t\tvoid input.eventIds;\n\t\t},\n\t};\n}\n\nexport function toDirectIngress(ingress: AthenaIngressIR): AthenaIngressIR {\n\treturn { ...ingress, transport: { kind: \"direct\" } };\n}\n","import type { AthenaPostgresPool } from \"../../../../postgres/driver.ts\";\nimport type { AthenaClientInternals } from \"../../../../runtime/client-internals.ts\";\nimport {\n\tATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n\tATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n\tAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport { eventIngressDatabaseFromPool } from \"../../../../runtime/ingress/postgres.ts\";\nimport { createEventIngressRuntime } from \"../../../../runtime/ingress/runtime.ts\";\nimport { createSqlEventIngressPersistence } from \"../../../../runtime/ingress/sql.ts\";\nimport { runBillingCustomerImportWithPostgres } from \"../../../import/assemble.ts\";\nimport { createBillingImportDatabase } from \"../../../import/database.ts\";\nimport {\n\tcreateBillingSqlExecutor,\n\tlistActiveBillingImportConnections,\n\tresolveBillingImportConnection,\n} from \"../../../import/postgres.ts\";\nimport { createLazyBillingWebhookIngressObservability } from \"../../../ingestion/observability/health.ts\";\nimport { createPostgresBillingWebhookRegistrationStore } from \"../../../ingestion/reconciliation/repository.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport { billingReconciliationContextFromIngress } from \"../../../reconciliation/webhook.ts\";\nimport type { BillingSqlExecutor } from \"../../../subject/repository.ts\";\nimport { advanceSelfSubscriptionEnrollment } from \"../../self/advance-enrollment.ts\";\nimport {\n\tcreateConnectionProviderExecutionContext,\n\teligibleBillingConnectionsForProcess,\n\tmollieConfigForCredentialReference,\n\tpickSoleEligibleBillingConnection,\n} from \"../providers/connection-binding.ts\";\nimport { normalizeMollieRuntimeConfig } from \"../providers/mollie/config.ts\";\nimport { resolveMollieWebhookResource } from \"../providers/mollie/resolve-resource.ts\";\nimport { MollieSdkClientPool } from \"../providers/mollie/sdk/client-factory.ts\";\nimport { createMollieWebhookPort } from \"../providers/mollie/webhook-port.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { createBillingEventIngressHandler } from \"./handler.ts\";\nimport { createSqlBillingRepositories } from \"./sql.ts\";\n\nfunction isAthenaPostgresPool(value: unknown): value is AthenaPostgresPool {\n\treturn (\n\t\tvalue != null &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as AthenaPostgresPool).query === \"function\" &&\n\t\ttypeof (value as AthenaPostgresPool).connect === \"function\"\n\t);\n}\n\nexport function attachEventIngressRuntime(\n\tinternals: AthenaClientInternals,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\tregistry: BillingProviderRegistry;\n\t\ttestMode?: boolean;\n\t\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\t\tsigningSecrets?: readonly string[];\n\t},\n): void {\n\tconst getSql = async (): Promise<BillingSqlExecutor | undefined> => {\n\t\tconst owned = internals.postgresRuntime;\n\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createBillingSqlExecutor(pool);\n\t};\n\tconst handler = createBillingEventIngressHandler({\n\t\tobservability: createLazyBillingWebhookIngressObservability(getSql),\n\t\tonAuthoritativeDocument: async ({ document, ingress }) => {\n\t\t\tconst owned = internals.postgresRuntime;\n\t\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\ttry {\n\t\t\t\t\tawait advanceSelfSubscriptionEnrollment({\n\t\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t\tregistry: input.registry,\n\t\t\t\t\t\tsql,\n\t\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\"[athena-billing] enrollment advance failed\", {\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst providerCustomerId = document.providerCustomerId;\n\t\t\tconst connectionId = ingress.connectionId;\n\t\t\tif (\n\t\t\t\ttypeof providerCustomerId !== \"string\" ||\n\t\t\t\tproviderCustomerId.length === 0 ||\n\t\t\t\ttypeof connectionId !== \"string\" ||\n\t\t\t\tconnectionId.length === 0\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (typeof connectionId === \"string\" && connectionId.length > 0) {\n\t\t\t\t\tconst kind =\n\t\t\t\t\t\tingress.operation === \"webhook.mollie.classic\"\n\t\t\t\t\t\t\t? \"classic\"\n\t\t\t\t\t\t\t: \"next_gen\";\n\t\t\t\t\tawait createPostgresBillingWebhookRegistrationStore(\n\t\t\t\t\t\tsql,\n\t\t\t\t\t).touchLastDelivery({\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tkind,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tawait runBillingCustomerImportWithPostgres({\n\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tcustomerId: providerCustomerId,\n\t\t\t\t\tdatabase: createBillingImportDatabase(pool),\n\t\t\t\t\tdryRun: false,\n\t\t\t\t\tpool,\n\t\t\t\t\tsql,\n\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t\ttrigger: \"webhook\",\n\t\t\t\t\treconciliationContext: billingReconciliationContextFromIngress({\n\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\tcorrelationId: ingress.correlationId,\n\t\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\t\tprovider: document.provider,\n\t\t\t\t\t\ttraceId: ingress.traceId,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[athena-billing] webhook reconciliation failed\", {\n\t\t\t\t\tconnectionId,\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tport: createMollieWebhookPort({\n\t\t\tresolveResource: createMollieResourceResolver({\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\tgetSql,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t}),\n\t\t\t...(input.resolveSigningSecrets\n\t\t\t\t? { resolveSigningSecrets: input.resolveSigningSecrets }\n\t\t\t\t: {}),\n\t\t\tsigningSecrets: input.signingSecrets,\n\t\t\tverification:\n\t\t\t\tinput.resolveSigningSecrets ||\n\t\t\t\t(input.signingSecrets && input.signingSecrets.length > 0)\n\t\t\t\t\t? \"signature_and_refetch\"\n\t\t\t\t\t: \"authoritative_refetch\",\n\t\t}),\n\t});\n\n\tinternals.eventIngressRuntime = {\n\t\tasync ingest(ingress: AthenaIngressIR) {\n\t\t\tconst owned = internals.postgresRuntime;\n\t\t\tconst pool = owned ? await owned.getPool() : undefined;\n\t\t\tif (!isAthenaPostgresPool(pool)) {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Financial webhook ingest requires durable PostgreSQL persistence.\",\n\t\t\t\t\tretryable: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst sql = createBillingSqlExecutor(pool);\n\t\t\tconst bound = await bindBillingIngressConnection(ingress, sql, {\n\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\ttestMode: input.testMode,\n\t\t\t});\n\t\t\tconst sqlRepos = createSqlBillingRepositories();\n\t\t\tconst runtime = createEventIngressRuntime({\n\t\t\t\tcontext: {\n\t\t\t\t\tdatabase: eventIngressDatabaseFromPool(pool),\n\t\t\t\t\tpersistence: createSqlEventIngressPersistence(),\n\t\t\t\t\tdomain: sqlRepos,\n\t\t\t\t},\n\t\t\t\thandler,\n\t\t\t});\n\t\t\treturn runtime.ingest(bound);\n\t\t},\n\t};\n}\n\nasync function bindBillingIngressConnection(\n\tingress: AthenaIngressIR,\n\tsql: BillingSqlExecutor,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\ttestMode?: boolean;\n\t},\n): Promise<AthenaIngressIR> {\n\tif (ingress.connectionId != null && ingress.connectionId.length > 0) {\n\t\treturn ingress;\n\t}\n\tconst only = await resolveSoleActiveMollieConnection(sql, input);\n\treturn { ...ingress, connectionId: only.id };\n}\n\nfunction unavailableMollieRefetch(message: string): never {\n\tthrow new AthenaEventIngressError({\n\t\tcode: ATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n\t\tdomain: \"billing\",\n\t\tmessage,\n\t\tprovider: \"mollie\",\n\t\tretryable: false,\n\t});\n}\n\nfunction createMollieResourceResolver(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tgetSql: () => Promise<BillingSqlExecutor | undefined>;\n\ttestMode?: boolean;\n}): (request: {\n\tconnectionId?: string;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n}) => Promise<unknown> {\n\tconst pools = new Map<string, MollieSdkClientPool>();\n\treturn async (request) => {\n\t\tconst sql = await input.getSql();\n\t\tif (sql == null) {\n\t\t\tunavailableMollieRefetch(\n\t\t\t\t\"Mollie webhook resource refetch requires PostgreSQL so the connection credential can be resolved.\",\n\t\t\t);\n\t\t}\n\t\tconst connection =\n\t\t\trequest.connectionId != null && request.connectionId.length > 0\n\t\t\t\t? await resolveBillingImportConnection(sql, {\n\t\t\t\t\tconnectionId: request.connectionId,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t})\n\t\t\t\t: await resolveSoleActiveMollieConnection(sql, {\n\t\t\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\t\t\ttestMode: input.testMode,\n\t\t\t\t});\n\t\tconst mollie = mollieConfigForCredentialReference(\n\t\t\tinput.configuredProviders,\n\t\t\tconnection.credentialReference,\n\t\t);\n\t\tif (mollie == null) {\n\t\t\tunavailableMollieRefetch(\n\t\t\t\t`Mollie is not configured for credential_reference \"${connection.credentialReference}\".`,\n\t\t\t);\n\t\t}\n\t\tlet pool = pools.get(connection.credentialReference);\n\t\tif (pool == null) {\n\t\t\tpool = new MollieSdkClientPool(normalizeMollieRuntimeConfig(mollie));\n\t\t\tpools.set(connection.credentialReference, pool);\n\t\t}\n\t\tconst context = createConnectionProviderExecutionContext({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tconnection,\n\t\t\toperationScope: request.kind === \"invoice\" ? \"organization\" : \"profile\",\n\t\t});\n\t\treturn resolveMollieWebhookResource({\n\t\t\tcredential: context.credential,\n\t\t\tid: request.id,\n\t\t\tkind: request.kind,\n\t\t\toperationScope: context.operationScope,\n\t\t\tpool,\n\t\t\tprofileId: context.target.profileId,\n\t\t});\n\t};\n}\n\nasync function resolveSoleActiveMollieConnection(\n\tsql: BillingSqlExecutor,\n\tinput: {\n\t\tconfiguredProviders?: BillingProviderConfigMap;\n\t\ttestMode?: boolean;\n\t},\n) {\n\tconst active = await listActiveBillingImportConnections(sql, \"mollie\");\n\tconst eligible = eligibleBillingConnectionsForProcess({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tconnections: active,\n\t\tprocessTestMode: input.testMode,\n\t});\n\tconst only = pickSoleEligibleBillingConnection(eligible);\n\tif (only == null && eligible.length > 1) {\n\t\tunavailableMollieRefetch(\n\t\t\t`Multiple active Mollie billing connections: webhook refetch requires ingress.connectionId (${eligible\n\t\t\t\t.map((connection) => `${connection.id}:${connection.environment}`)\n\t\t\t\t.join(\", \")}).`,\n\t\t);\n\t}\n\tif (only == null) {\n\t\tunavailableMollieRefetch(\n\t\t\t\"No active Mollie billing connection is available for webhook resource refetch.\",\n\t\t);\n\t}\n\treturn only;\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookKind } from \"../types.ts\";\nimport type { BillingWebhookReconciliationOutcome } from \"./stages.ts\";\n\nexport interface BillingWebhookDeliveryHealthRow {\n\tacceptedCount: number;\n\tconnectionId: string;\n\tduplicateCount: number;\n\tkind: BillingWebhookKind;\n\tlastAcceptedAt?: Date;\n\tlastReceivedAt?: Date;\n\tlastRejectedAt?: Date;\n\tlastRejectionCode?: string;\n\tlastRejectionMessage?: string;\n\tlastReconciliationCompletedAt?: Date;\n\tlastReconciliationError?: string;\n\tlastReconciliationFailedAt?: Date;\n\tlastReconciliationOutcome?: BillingWebhookReconciliationOutcome;\n\tlastReconciliationStartedAt?: Date;\n\trejectedCount: number;\n}\n\nexport type BillingWebhookDeliveryEvent =\n\t| \"received\"\n\t| \"accepted\"\n\t| \"rejected\"\n\t| \"duplicate\";\n\nconst UUID_RE =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction uuidOrNull(value: string | undefined): string | null {\n\tif (value == null || value.length === 0) {\n\t\treturn null;\n\t}\n\treturn UUID_RE.test(value) ? value : null;\n}\n\nfunction asDate(value: unknown): Date | undefined {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"string\" && value.length > 0) {\n\t\treturn new Date(value);\n\t}\n\treturn undefined;\n}\n\nfunction mapRow(row: Record<string, unknown>): BillingWebhookDeliveryHealthRow {\n\tconst lastReconciliationOutcome = row.last_reconciliation_outcome;\n\treturn {\n\t\tacceptedCount: Number(row.accepted_count ?? 0),\n\t\tconnectionId: String(row.connection_id),\n\t\tduplicateCount: Number(row.duplicate_count ?? 0),\n\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\trejectedCount: Number(row.rejected_count ?? 0),\n\t\t...(asDate(row.last_received_at)\n\t\t\t? { lastReceivedAt: asDate(row.last_received_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_accepted_at)\n\t\t\t? { lastAcceptedAt: asDate(row.last_accepted_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_rejected_at)\n\t\t\t? { lastRejectedAt: asDate(row.last_rejected_at) }\n\t\t\t: {}),\n\t\t...(typeof row.last_rejection_code === \"string\"\n\t\t\t? { lastRejectionCode: row.last_rejection_code }\n\t\t\t: {}),\n\t\t...(typeof row.last_rejection_message === \"string\"\n\t\t\t? { lastRejectionMessage: row.last_rejection_message }\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_started_at)\n\t\t\t? { lastReconciliationStartedAt: asDate(row.last_reconciliation_started_at) }\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_completed_at)\n\t\t\t? {\n\t\t\t\tlastReconciliationCompletedAt: asDate(\n\t\t\t\t\trow.last_reconciliation_completed_at,\n\t\t\t\t),\n\t\t\t}\n\t\t\t: {}),\n\t\t...(asDate(row.last_reconciliation_failed_at)\n\t\t\t? { lastReconciliationFailedAt: asDate(row.last_reconciliation_failed_at) }\n\t\t\t: {}),\n\t\t...(lastReconciliationOutcome === \"completed\" ||\n\t\tlastReconciliationOutcome === \"failed\" ||\n\t\tlastReconciliationOutcome === \"skipped\"\n\t\t\t? { lastReconciliationOutcome }\n\t\t\t: {}),\n\t\t...(typeof row.last_reconciliation_error === \"string\"\n\t\t\t? { lastReconciliationError: row.last_reconciliation_error }\n\t\t\t: {}),\n\t};\n}\n\nexport interface BillingWebhookDeliveryHealthStore {\n\tget(input: {\n\t\tconnectionId: string;\n\t\tkind: BillingWebhookKind;\n\t}): Promise<BillingWebhookDeliveryHealthRow | null>;\n\tlist(connectionId: string): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n\trecordDelivery(input: {\n\t\tcode?: string;\n\t\tconnectionId: string;\n\t\tevent: BillingWebhookDeliveryEvent;\n\t\tkind: BillingWebhookKind;\n\t\tmessage?: string;\n\t}): Promise<void>;\n\trecordReconciliation(input: {\n\t\tconnectionId: string;\n\t\terror?: string;\n\t\tkind: BillingWebhookKind;\n\t\toutcome: BillingWebhookReconciliationOutcome;\n\t\tphase: \"started\" | \"completed\" | \"failed\";\n\t}): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookDeliveryHealthStore(): {\n\trows: BillingWebhookDeliveryHealthRow[];\n\tstore: BillingWebhookDeliveryHealthStore;\n} {\n\tconst rows: BillingWebhookDeliveryHealthRow[] = [];\n\tconst find = (connectionId: string, kind: BillingWebhookKind) =>\n\t\trows.find(\n\t\t\t(row) => row.connectionId === connectionId && row.kind === kind,\n\t\t);\n\tconst ensure = (\n\t\tconnectionId: string,\n\t\tkind: BillingWebhookKind,\n\t): BillingWebhookDeliveryHealthRow => {\n\t\tconst existing = find(connectionId, kind);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\tconst created: BillingWebhookDeliveryHealthRow = {\n\t\t\tacceptedCount: 0,\n\t\t\tconnectionId,\n\t\t\tduplicateCount: 0,\n\t\t\tkind,\n\t\t\trejectedCount: 0,\n\t\t};\n\t\trows.push(created);\n\t\treturn created;\n\t};\n\treturn {\n\t\trows,\n\t\tstore: {\n\t\t\tasync get(input) {\n\t\t\t\treturn find(input.connectionId, input.kind) ?? null;\n\t\t\t},\n\t\t\tasync list(connectionId) {\n\t\t\t\treturn rows.filter((row) => row.connectionId === connectionId);\n\t\t\t},\n\t\t\tasync recordDelivery(input) {\n\t\t\t\tconst row = ensure(input.connectionId, input.kind);\n\t\t\t\tconst now = new Date();\n\t\t\t\trow.lastReceivedAt = now;\n\t\t\t\tif (input.event === \"accepted\") {\n\t\t\t\t\trow.lastAcceptedAt = now;\n\t\t\t\t\trow.acceptedCount += 1;\n\t\t\t\t} else if (input.event === \"duplicate\") {\n\t\t\t\t\trow.lastAcceptedAt = now;\n\t\t\t\t\trow.duplicateCount += 1;\n\t\t\t\t} else if (input.event === \"rejected\") {\n\t\t\t\t\trow.lastRejectedAt = now;\n\t\t\t\t\trow.rejectedCount += 1;\n\t\t\t\t\tif (input.code) {\n\t\t\t\t\t\trow.lastRejectionCode = input.code;\n\t\t\t\t\t}\n\t\t\t\t\tif (input.message) {\n\t\t\t\t\t\trow.lastRejectionMessage = input.message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync recordReconciliation(input) {\n\t\t\t\tconst row = ensure(input.connectionId, input.kind);\n\t\t\t\tconst now = new Date();\n\t\t\t\trow.lastReconciliationOutcome = input.outcome;\n\t\t\t\tif (input.phase === \"started\") {\n\t\t\t\t\trow.lastReconciliationStartedAt = now;\n\t\t\t\t} else if (input.phase === \"completed\") {\n\t\t\t\t\trow.lastReconciliationCompletedAt = now;\n\t\t\t\t} else {\n\t\t\t\t\trow.lastReconciliationFailedAt = now;\n\t\t\t\t\tif (input.error) {\n\t\t\t\t\t\trow.lastReconciliationError = input.error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function createPostgresBillingWebhookDeliveryHealthStore(\n\tsql: BillingSqlExecutor,\n): BillingWebhookDeliveryHealthStore {\n\treturn {\n\t\tasync get(input) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind],\n\t\t\t);\n\t\t\tconst row = result.rows[0];\n\t\t\treturn row ? mapRow(row) : null;\n\t\t},\n\t\tasync list(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\treturn result.rows.map(mapRow);\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tconst connectionId = uuidOrNull(input.connectionId);\n\t\t\tif (!connectionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_delivery_health (\n\tconnection_id, kind, last_received_at, last_accepted_at, last_rejected_at,\n\tlast_rejection_code, last_rejection_message, accepted_count, rejected_count, duplicate_count\n) VALUES (\n\t$1::uuid, $2, now(),\n\tCASE WHEN $3 IN ('accepted', 'duplicate') THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN $4 ELSE NULL END,\n\tCASE WHEN $3 = 'rejected' THEN $5 ELSE NULL END,\n\tCASE WHEN $3 = 'accepted' THEN 1 ELSE 0 END,\n\tCASE WHEN $3 = 'rejected' THEN 1 ELSE 0 END,\n\tCASE WHEN $3 = 'duplicate' THEN 1 ELSE 0 END\n)\nON CONFLICT (connection_id, kind) DO UPDATE SET\n\tlast_received_at = now(),\n\tlast_accepted_at = CASE\n\t\tWHEN $3 IN ('accepted', 'duplicate') THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_accepted_at\n\tEND,\n\tlast_rejected_at = CASE\n\t\tWHEN $3 = 'rejected' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_rejected_at\n\tEND,\n\tlast_rejection_code = CASE\n\t\tWHEN $3 = 'rejected' THEN $4\n\t\tELSE billing.billing_webhook_delivery_health.last_rejection_code\n\tEND,\n\tlast_rejection_message = CASE\n\t\tWHEN $3 = 'rejected' THEN $5\n\t\tELSE billing.billing_webhook_delivery_health.last_rejection_message\n\tEND,\n\taccepted_count = billing.billing_webhook_delivery_health.accepted_count\n\t\t+ CASE WHEN $3 = 'accepted' THEN 1 ELSE 0 END,\n\trejected_count = billing.billing_webhook_delivery_health.rejected_count\n\t\t+ CASE WHEN $3 = 'rejected' THEN 1 ELSE 0 END,\n\tduplicate_count = billing.billing_webhook_delivery_health.duplicate_count\n\t\t+ CASE WHEN $3 = 'duplicate' THEN 1 ELSE 0 END,\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.event,\n\t\t\t\t\tinput.code ?? null,\n\t\t\t\t\tinput.message ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tconst connectionId = uuidOrNull(input.connectionId);\n\t\t\tif (!connectionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_delivery_health (\n\tconnection_id, kind, last_reconciliation_started_at, last_reconciliation_completed_at,\n\tlast_reconciliation_failed_at, last_reconciliation_outcome, last_reconciliation_error\n) VALUES (\n\t$1::uuid, $2,\n\tCASE WHEN $3 = 'started' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'completed' THEN now() ELSE NULL END,\n\tCASE WHEN $3 = 'failed' THEN now() ELSE NULL END,\n\t$4, $5\n)\nON CONFLICT (connection_id, kind) DO UPDATE SET\n\tlast_reconciliation_started_at = CASE\n\t\tWHEN $3 = 'started' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_started_at\n\tEND,\n\tlast_reconciliation_completed_at = CASE\n\t\tWHEN $3 = 'completed' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_completed_at\n\tEND,\n\tlast_reconciliation_failed_at = CASE\n\t\tWHEN $3 = 'failed' THEN now()\n\t\tELSE billing.billing_webhook_delivery_health.last_reconciliation_failed_at\n\tEND,\n\tlast_reconciliation_outcome = $4,\n\tlast_reconciliation_error = COALESCE($5, billing.billing_webhook_delivery_health.last_reconciliation_error),\n\tupdated_at = now()\n`,\n\t\t\t\t[\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.phase,\n\t\t\t\t\tinput.outcome,\n\t\t\t\t\tinput.error ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"../reconciliation/types.ts\";\nimport type {\n\tBillingWebhookKind,\n\tResolvedBillingIngressEndpoints,\n} from \"../types.ts\";\nimport type {\n\tBillingWebhookDeliveryEvent,\n\tBillingWebhookDeliveryHealthRow,\n} from \"./delivery-health.ts\";\nimport {\n\tcreateMemoryBillingWebhookDeliveryHealthStore,\n\tcreatePostgresBillingWebhookDeliveryHealthStore,\n} from \"./delivery-health.ts\";\nimport type {\n\tBillingWebhookIngressStage,\n\tBillingWebhookReconciliationOutcome,\n} from \"./stages.ts\";\n\nexport interface BillingWebhookIngressStageRecord {\n\tconnectionId?: string;\n\tcorrelationId?: string;\n\terrorMessage?: string;\n\tingressId?: string;\n\tkind: BillingWebhookKind;\n\tmetadata?: Record<string, unknown>;\n\toccurredAt: Date;\n\toperation?: string;\n\tprovider?: string;\n\trejectionCode?: string;\n\tstage: BillingWebhookIngressStage | \"failed\";\n\tstatus?: string;\n\ttraceId?: string;\n}\n\nexport interface BillingWebhookIngressObservabilityWrite {\n\tconnectionId?: string;\n\tcorrelationId?: string;\n\tingressId?: string;\n\tkind: BillingWebhookKind;\n\tmetadata?: Record<string, unknown>;\n\tstage: BillingWebhookIngressStage | \"failed\";\n\ttraceId?: string;\n}\n\nexport interface BillingWebhookIngressObservability {\n\tlistRecentStages(\n\t\tconnectionId: string,\n\t\tlimit?: number,\n\t): Promise<readonly BillingWebhookIngressStageRecord[]>;\n\trecordAccepted(\n\t\tinput: BillingWebhookIngressObservabilityWrite & { connectionId: string },\n\t): Promise<void>;\n\trecordRejected(\n\t\tinput: BillingWebhookIngressObservabilityWrite & { code: string },\n\t): Promise<void>;\n\trecordReconciliation(\n\t\tinput: BillingWebhookIngressObservabilityWrite & {\n\t\t\tconnectionId: string;\n\t\t\toutcome: BillingWebhookReconciliationOutcome;\n\t\t},\n\t): Promise<void>;\n\trecordStage(input: BillingWebhookIngressStageRecord): Promise<void>;\n\trecordDelivery(input: {\n\t\tcode?: string;\n\t\tconnectionId: string;\n\t\tevent: BillingWebhookDeliveryEvent;\n\t\tkind: BillingWebhookKind;\n\t\tmessage?: string;\n\t}): Promise<void>;\n\tlistDelivery(\n\t\tconnectionId: string,\n\t): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n\taggregateRecent(\n\t\tconnectionId: string,\n\t\twindowMs?: number,\n\t): Promise<{\n\t\taccepted: number;\n\t\tduplicates: number;\n\t\treceived: number;\n\t\treconciliationFailures: number;\n\t\trejected: number;\n\t}>;\n}\n\nconst UUID_RE =\n\t/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction uuidOrNull(value: string | undefined): string | null {\n\tif (value == null || value.length === 0) {\n\t\treturn null;\n\t}\n\treturn UUID_RE.test(value) ? value : null;\n}\n\nfunction stageRecord(\n\tinput: BillingWebhookIngressObservabilityWrite & { rejectionCode?: string },\n): BillingWebhookIngressStageRecord {\n\treturn {\n\t\tkind: input.kind,\n\t\toccurredAt: new Date(),\n\t\tstage: input.stage,\n\t\t...(input.connectionId ? { connectionId: input.connectionId } : {}),\n\t\t...(input.correlationId ? { correlationId: input.correlationId } : {}),\n\t\t...(input.ingressId ? { ingressId: input.ingressId } : {}),\n\t\t...(input.metadata ? { metadata: input.metadata } : {}),\n\t\t...(input.rejectionCode ? { rejectionCode: input.rejectionCode } : {}),\n\t\t...(input.traceId ? { traceId: input.traceId } : {}),\n\t};\n}\n\nexport function createMemoryBillingWebhookIngressObservability(): {\n\tdelivery: ReturnType<typeof createMemoryBillingWebhookDeliveryHealthStore>[\"rows\"];\n\tstages: BillingWebhookIngressStageRecord[];\n\tstore: BillingWebhookIngressObservability;\n} {\n\tconst stages: BillingWebhookIngressStageRecord[] = [];\n\tconst delivery = createMemoryBillingWebhookDeliveryHealthStore();\n\tconst store: BillingWebhookIngressObservability = {\n\t\tasync aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n\t\t\tconst cutoff = Date.now() - windowMs;\n\t\t\tconst recent = stages.filter(\n\t\t\t\t(row) =>\n\t\t\t\t\trow.connectionId === connectionId &&\n\t\t\t\t\trow.occurredAt.getTime() >= cutoff,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\taccepted: recent.filter((row) => row.stage === \"persisted\").length,\n\t\t\t\tduplicates: recent.filter((row) => row.stage === \"duplicate\").length,\n\t\t\t\treceived: recent.filter((row) => row.stage === \"received\").length,\n\t\t\t\treconciliationFailures: recent.filter(\n\t\t\t\t\t(row) => row.stage === \"reconciliation_failed\",\n\t\t\t\t).length,\n\t\t\t\trejected: recent.filter(\n\t\t\t\t(row) => row.stage === \"rejected\" || row.stage === \"failed\",\n\t\t\t).length,\n\t\t\t};\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\treturn delivery.store.list(connectionId);\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\treturn stages\n\t\t\t\t.filter((row) => row.connectionId === connectionId)\n\t\t\t\t.slice()\n\t\t\t\t.reverse()\n\t\t\t\t.slice(0, limit);\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.store.recordDelivery({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tevent: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n\t\t\t\tkind: input.kind,\n\t\t\t});\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait delivery.store.recordDelivery(input);\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tawait store.recordStage(\n\t\t\t\tstageRecord({ ...input, rejectionCode: input.code }),\n\t\t\t);\n\t\t\tif (input.connectionId) {\n\t\t\t\tawait delivery.store.recordDelivery({\n\t\t\t\t\tcode: input.code,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tevent: \"rejected\",\n\t\t\t\t\tkind: input.kind,\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.store.recordReconciliation({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tkind: input.kind,\n\t\t\t\toutcome: input.outcome,\n\t\t\t\tphase:\n\t\t\t\t\tinput.stage === \"reconciliation_failed\"\n\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t: input.stage === \"reconciliation_started\"\n\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t: \"completed\",\n\t\t\t});\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tstages.push({ ...input, occurredAt: input.occurredAt ?? new Date() });\n\t\t},\n\t};\n\treturn { delivery: delivery.rows, stages, store };\n}\n\nexport function createPostgresBillingWebhookIngressObservability(\n\tsql: BillingSqlExecutor,\n): BillingWebhookIngressObservability {\n\tconst delivery = createPostgresBillingWebhookDeliveryHealthStore(sql);\n\tconst store: BillingWebhookIngressObservability = {\n\t\tasync aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT\n\tcount(*) FILTER (WHERE stage = 'received')::int AS received,\n\tcount(*) FILTER (WHERE stage = 'persisted')::int AS accepted,\n\tcount(*) FILTER (WHERE stage IN ('rejected', 'failed'))::int AS rejected,\n\tcount(*) FILTER (WHERE stage = 'duplicate')::int AS duplicates,\n\tcount(*) FILTER (WHERE stage = 'reconciliation_failed')::int AS reconciliation_failures\nFROM billing.billing_webhook_ingress_stages\nWHERE connection_id = $1::uuid\n\tAND occurred_at >= $2::timestamptz\n`,\n\t\t\t\t[connectionId, new Date(Date.now() - windowMs)],\n\t\t\t);\n\t\t\tconst row = result.rows[0] ?? {};\n\t\t\treturn {\n\t\t\t\taccepted: Number(row.accepted ?? 0),\n\t\t\t\tduplicates: Number(row.duplicates ?? 0),\n\t\t\t\treceived: Number(row.received ?? 0),\n\t\t\t\treconciliationFailures: Number(row.reconciliation_failures ?? 0),\n\t\t\t\trejected: Number(row.rejected ?? 0),\n\t\t\t};\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\treturn delivery.list(connectionId);\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT connection_id, ingress_id, kind, stage, rejection_code, correlation_id, trace_id, occurred_at\nFROM billing.billing_webhook_ingress_stages\nWHERE connection_id = $1::uuid\nORDER BY occurred_at DESC\nLIMIT $2\n`,\n\t\t\t\t[connectionId, limit],\n\t\t\t);\n\t\t\treturn result.rows.map((row) => {\n\t\t\t\tconst occurredAt =\n\t\t\t\t\trow.occurred_at instanceof Date\n\t\t\t\t\t\t? row.occurred_at\n\t\t\t\t\t\t: new Date(String(row.occurred_at));\n\t\t\t\treturn {\n\t\t\t\t\tkind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n\t\t\t\t\toccurredAt,\n\t\t\t\t\tstage: String(row.stage) as BillingWebhookIngressStage,\n\t\t\t\t\t...(typeof row.connection_id === \"string\"\n\t\t\t\t\t\t? { connectionId: row.connection_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.ingress_id === \"string\"\n\t\t\t\t\t\t? { ingressId: row.ingress_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.rejection_code === \"string\"\n\t\t\t\t\t\t? { rejectionCode: row.rejection_code }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.correlation_id === \"string\"\n\t\t\t\t\t\t? { correlationId: row.correlation_id }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...(typeof row.trace_id === \"string\" ? { traceId: row.trace_id } : {}),\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_delivery_at = now(),\n\tlast_accepted_at = now(),\n\tlast_ingress_stage = $3,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind, input.stage],\n\t\t\t);\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.recordDelivery({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tevent: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n\t\t\t\tkind: input.kind,\n\t\t\t});\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait delivery.recordDelivery(input);\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tif (input.connectionId) {\n\t\t\t\tawait sql.query(\n\t\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_rejected_at = now(),\n\tlast_rejection_code = $3,\n\tlast_error = jsonb_build_object('code', $3::text),\n\tlast_ingress_stage = $4,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t\t[input.connectionId, input.kind, input.code, input.stage],\n\t\t\t\t);\n\t\t\t\tawait delivery.recordDelivery({\n\t\t\t\t\tcode: input.code,\n\t\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\t\tevent: \"rejected\",\n\t\t\t\t\tkind: input.kind,\n\t\t\t\t\tmessage: input.code,\n\t\t\t\t});\n\t\t\t}\n\t\t\tawait store.recordStage(stageRecord({ ...input, rejectionCode: input.code }));\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nUPDATE billing.billing_webhook_registrations\nSET last_reconciliation_outcome = $3,\n\tlast_ingress_stage = $4,\n\tupdated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n\t\t\t\t[input.connectionId, input.kind, input.outcome, input.stage],\n\t\t\t);\n\t\t\tawait store.recordStage(stageRecord(input));\n\t\t\tawait delivery.recordReconciliation({\n\t\t\t\tconnectionId: input.connectionId,\n\t\t\t\tkind: input.kind,\n\t\t\t\toutcome: input.outcome,\n\t\t\t\tphase:\n\t\t\t\t\tinput.stage === \"reconciliation_failed\"\n\t\t\t\t\t\t? \"failed\"\n\t\t\t\t\t\t: input.stage === \"reconciliation_started\"\n\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t: \"completed\",\n\t\t\t});\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tawait sql.query(\n\t\t\t\t`\nINSERT INTO billing.billing_webhook_ingress_stages (\n\tconnection_id, ingress_id, kind, stage, rejection_code, correlation_id, trace_id, occurred_at,\n\tprovider, operation, status, error_message, metadata\n) VALUES (\n\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13::jsonb\n)\n`,\n\t\t\t\t[\n\t\t\t\t\tuuidOrNull(input.connectionId),\n\t\t\t\t\tuuidOrNull(input.ingressId),\n\t\t\t\t\tinput.kind,\n\t\t\t\t\tinput.stage,\n\t\t\t\t\tinput.rejectionCode ?? null,\n\t\t\t\t\tinput.correlationId ?? null,\n\t\t\t\t\tinput.traceId ?? null,\n\t\t\t\t\tinput.occurredAt,\n\t\t\t\t\tinput.provider ?? \"mollie\",\n\t\t\t\t\tinput.operation ?? null,\n\t\t\t\t\tinput.status ?? null,\n\t\t\t\t\tinput.errorMessage ?? null,\n\t\t\t\t\tJSON.stringify(input.metadata ?? {}),\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n\treturn store;\n}\n\nexport function createLazyBillingWebhookIngressObservability(\n\tgetSql: () => Promise<BillingSqlExecutor | undefined>,\n): BillingWebhookIngressObservability {\n\tconst run = async (\n\t\twork: (store: BillingWebhookIngressObservability) => Promise<void>,\n\t): Promise<void> => {\n\t\tconst sql = await getSql();\n\t\tif (!sql) {\n\t\t\treturn;\n\t\t}\n\t\tawait work(createPostgresBillingWebhookIngressObservability(sql));\n\t};\n\tconst resolve = async () => {\n\t\tconst sql = await getSql();\n\t\treturn sql\n\t\t\t? createPostgresBillingWebhookIngressObservability(sql)\n\t\t\t: undefined;\n\t};\n\treturn {\n\t\tasync aggregateRecent(connectionId, windowMs) {\n\t\t\tconst store = await resolve();\n\t\t\tif (!store) {\n\t\t\t\treturn {\n\t\t\t\t\taccepted: 0,\n\t\t\t\t\tduplicates: 0,\n\t\t\t\t\treceived: 0,\n\t\t\t\t\treconciliationFailures: 0,\n\t\t\t\t\trejected: 0,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn store.aggregateRecent(connectionId, windowMs);\n\t\t},\n\t\tasync listDelivery(connectionId) {\n\t\t\tconst store = await resolve();\n\t\t\treturn store ? store.listDelivery(connectionId) : [];\n\t\t},\n\t\tasync listRecentStages(connectionId, limit = 32) {\n\t\t\tconst store = await resolve();\n\t\t\treturn store ? store.listRecentStages(connectionId, limit) : [];\n\t\t},\n\t\tasync recordAccepted(input) {\n\t\t\tawait run((store) => store.recordAccepted(input));\n\t\t},\n\t\tasync recordDelivery(input) {\n\t\t\tawait run((store) => store.recordDelivery(input));\n\t\t},\n\t\tasync recordRejected(input) {\n\t\t\tawait run((store) => store.recordRejected(input));\n\t\t},\n\t\tasync recordReconciliation(input) {\n\t\t\tawait run((store) => store.recordReconciliation(input));\n\t\t},\n\t\tasync recordStage(input) {\n\t\t\tawait run((store) => store.recordStage(input));\n\t\t},\n\t};\n}\n\n\nfunction billingWebhookDiagnosticDetail(error: unknown): { error: string } {\n\treturn {\n\t\terror: error instanceof Error ? error.message : String(error),\n\t};\n}\n\n/**\n * Best-effort operator stderr. Do not pass `Error` to `console.error` (Node\n * prints the stack). Skip under `node:test` so expected swallows stay quiet.\n */\nexport function reportBillingWebhookIngressDiagnostic(\n\tlabel: string,\n\terror: unknown,\n): void {\n\tif (process.env.NODE_TEST_CONTEXT) {\n\t\treturn;\n\t}\n\tconsole.error(label, billingWebhookDiagnosticDetail(error));\n}\n\nexport async function recordBillingWebhookIngressQuietly(\n\tstore: BillingWebhookIngressObservability | undefined,\n\twork: (store: BillingWebhookIngressObservability) => Promise<void>,\n): Promise<void> {\n\tif (!store) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait work(store);\n\t} catch (error) {\n\t\treportBillingWebhookIngressDiagnostic(\n\t\t\t\"[athena.billing] webhook ingress observability failed\",\n\t\t\terror,\n\t\t);\n\t}\n}\n\nexport interface BillingWebhookChannelDeliveryHealth {\n\tlastAcceptedAt?: string;\n\tlastDeliveryAt?: string;\n\tlastIngressStage?: string;\n\tlastReconciliationOutcome?: string;\n\tlastRejectedAt?: string;\n\tlastRejectionCode?: string;\n}\n\nexport interface BillingWebhookOperatorHealth {\n\tclassic: BillingWebhookChannelDeliveryHealth;\n\tnextGen: BillingWebhookChannelDeliveryHealth;\n\trouteMounted: boolean;\n\tsigningSecretConfigured: boolean;\n\tverification: {\n\t\tclassic: \"authoritative_refetch\";\n\t\tnextGen: \"signature_and_refetch\";\n\t};\n}\n\nfunction iso(value: Date | undefined): string | undefined {\n\treturn value ? value.toISOString() : undefined;\n}\n\nfunction channelHealth(\n\trow: BillingWebhookRegistrationRecord | undefined,\n): BillingWebhookChannelDeliveryHealth {\n\treturn {\n\t\t...(iso(row?.lastAcceptedAt) ? { lastAcceptedAt: iso(row?.lastAcceptedAt) } : {}),\n\t\t...(iso(row?.lastDeliveryAt) ? { lastDeliveryAt: iso(row?.lastDeliveryAt) } : {}),\n\t\t...(row?.lastIngressStage ? { lastIngressStage: row.lastIngressStage } : {}),\n\t\t...(row?.lastReconciliationOutcome\n\t\t\t? { lastReconciliationOutcome: row.lastReconciliationOutcome }\n\t\t\t: {}),\n\t\t...(iso(row?.lastRejectedAt) ? { lastRejectedAt: iso(row?.lastRejectedAt) } : {}),\n\t\t...(row?.lastRejectionCode\n\t\t\t? { lastRejectionCode: row.lastRejectionCode }\n\t\t\t: {}),\n\t};\n}\n\nexport function billingWebhookOperatorHealth(input: {\n\tclassic?: BillingWebhookRegistrationRecord;\n\tendpoints?: ResolvedBillingIngressEndpoints;\n\tnextGen?: BillingWebhookRegistrationRecord;\n\tsigningSecretConfigured: boolean;\n}): BillingWebhookOperatorHealth {\n\treturn {\n\t\tclassic: channelHealth(input.classic),\n\t\tnextGen: channelHealth(input.nextGen),\n\t\trouteMounted: Boolean(input.endpoints),\n\t\tsigningSecretConfigured: input.signingSecretConfigured,\n\t\tverification: {\n\t\t\tclassic: \"authoritative_refetch\",\n\t\t\tnextGen: \"signature_and_refetch\",\n\t\t},\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport {\n\tfinalizeBillingCommand,\n\tprepareBillingCommand,\n} from \"../../../safety/prepare.ts\";\nimport type { BillingExecutionTarget } from \"../../../types.ts\";\nimport type { BillingOperation } from \"../../capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"../../invocation-authority.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingProviderPortMap,\n\tBillingProviderPortName,\n} from \"../providers/types.ts\";\nimport {\n\tprepareLocalBillingInvocation,\n\trequireProviderPort,\n} from \"./shared.ts\";\n\nexport interface LocalBillingExecutorRequest<TPayload> {\n\tauthority: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: TPayload;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}\n\nexport async function executeLocalBillingOperation<\n\tTPayload,\n\tTResult,\n\tTPort extends BillingProviderPortName,\n>(input: {\n\tbefore?: (payload: TPayload) => void;\n\tinvoke: (\n\t\tport: NonNullable<BillingProviderPortMap[TPort]>,\n\t\tcontext: BillingProviderExecutionContext,\n\t\tpayload: TPayload,\n\t) => Promise<TResult> | TResult;\n\toperation: BillingOperation;\n\tport: TPort;\n\trequest: LocalBillingExecutorRequest<TPayload>;\n\tsafety?: \"enforce\" | \"defer-then-finalize\";\n}): Promise<TResult> {\n\tlet payload = input.request.payload;\n\tconst deferSafety = input.safety === \"defer-then-finalize\";\n\tconst prepared = prepareBillingCommand({\n\t\tidempotency: deferSafety ? \"defer\" : \"enforce\",\n\t\toperation: input.operation,\n\t\tpayload,\n\t\ttestMode: input.request.testMode,\n\t});\n\tpayload = prepared.payload as TPayload;\n\tinput.before?.(payload);\n\tconst invocation = await prepareLocalBillingInvocation({\n\t\tauthority: input.request.authority,\n\t\tconfiguredProviders: input.request.configuredProviders,\n\t\tidempotencyKey: readIdempotencyKey(payload),\n\t\toperation: input.operation,\n\t\tprincipal: input.request.principal,\n\t\tregistry: input.request.registry,\n\t\ttarget: payload as TPayload & BillingExecutionTarget,\n\t\ttestMode: input.request.testMode,\n\t});\n\tif (deferSafety) {\n\t\tpayload = finalizeBillingCommand({\n\t\t\toperation: input.operation,\n\t\t\tpayload,\n\t\t\ttestMode: input.request.testMode,\n\t\t}).payload as TPayload;\n\t}\n\tconst ports: BillingProviderPortMap = invocation.runtime;\n\tconst port = requireProviderPort(ports[input.port], input.operation);\n\treturn input.invoke(port, invocation.context, payload);\n}\n\nfunction readIdempotencyKey(payload: unknown): string | undefined {\n\tif (\n\t\tpayload != null &&\n\t\ttypeof payload === \"object\" &&\n\t\t\"idempotencyKey\" in payload &&\n\t\ttypeof payload.idempotencyKey === \"string\"\n\t) {\n\t\treturn payload.idempotencyKey;\n\t}\n\treturn undefined;\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError } from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingExecutionTarget } from \"../../../types.ts\";\nimport { readBillingCredentialAuthority } from \"../../authority.ts\";\nimport type { BillingOperation } from \"../../capabilities.ts\";\nimport { availableBillingCredentialEnvironments } from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport type { BillingInvocationAuthority } from \"../../invocation-authority.ts\";\nimport {\n\tisProcessBillingInvocation,\n\tresolveBillingInvocationAuthority,\n\tSESSION_BILLING_INVOCATION,\n} from \"../../invocation-authority.ts\";\nimport {\n\tauthorizeBillingOperation,\n\tauthorizeBillingSubjectBinding,\n\tPROCESS_OWNED_BILLING_PRINCIPAL,\n} from \"../../rights.ts\";\n\nimport {\n\tdecideLocalBillingOperationCapability,\n\tselectedModeAllowedForCapability,\n} from \"../capability-decision.ts\";\nimport { createConfiguredProviderBinding } from \"../providers/binding.ts\";\nimport { createBillingProviderExecutionContext } from \"../providers/execution-context.ts\";\nimport { mollieOperationScopeFor } from \"../providers/operation-scope.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { resolveBillingExecutionTarget } from \"../providers/resolve-target.ts\";\nimport type {\n\tBillingProviderExecutionContext,\n\tBillingProviderPortCapabilities,\n\tBillingProviderPortMap,\n\tBillingProviderPortName,\n\tBillingProviderRuntime,\n\tConfiguredBillingProviderBinding,\n} from \"../providers/types.ts\";\n\nexport interface PreparedBillingInvocation {\n\treadonly authority: BillingInvocationAuthority;\n\treadonly binding: ConfiguredBillingProviderBinding;\n\treadonly context: BillingProviderExecutionContext;\n\treadonly operation: BillingOperation;\n\treadonly principal: AthenaPrincipal;\n\treadonly runtime: BillingProviderRuntime;\n\treadonly target: Extract<\n\t\tReturnType<typeof resolveBillingExecutionTarget>,\n\t\t{ kind: \"configured\" }\n\t>;\n}\n\nexport interface ResolvedLocalBillingProviderExecution {\n\tcontext: BillingProviderExecutionContext;\n\truntime: BillingProviderRuntime;\n}\n\nexport function rejectUnsupportedListOffset(\n\toperation: BillingOperation,\n\toffset?: number,\n): void {\n\tif (offset == null) {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nexport function rejectUnsupportedLocalPaymentListSource(source?: string): void {\n\tif (source == null || source === \"provider\") {\n\t\treturn;\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation: \"payments.list\",\n\t\treason: \"unsupported_operation\",\n\t});\n}\n\nfunction isBillingProviderPortName(\n\tname: string,\n): name is BillingProviderPortName {\n\tswitch (name) {\n\t\tcase \"checkout\":\n\t\tcase \"customers\":\n\t\tcase \"invoices\":\n\t\tcase \"paymentLinks\":\n\t\tcase \"payments\":\n\t\tcase \"prices\":\n\t\tcase \"products\":\n\t\tcase \"refunds\":\n\t\tcase \"subscriptions\":\n\t\tcase \"webhooks\":\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction providerPortIsAvailable(\n\truntime: BillingProviderRuntime,\n\tadvertised: BillingProviderPortCapabilities,\n\toperation: BillingOperation,\n): boolean {\n\tconst name = operation.split(\".\")[0] ?? \"\";\n\tif (!isBillingProviderPortName(name)) {\n\t\treturn false;\n\t}\n\tconst ports: BillingProviderPortMap = runtime;\n\treturn ports[name] != null && advertised[name] === true;\n}\n\nexport function requireProviderPort<T>(\n\tport: T | null | undefined,\n\toperation: BillingOperation,\n): NonNullable<T> {\n\tif (port == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason:\n\t\t\t\toperation === \"products.list\" || operation === \"prices.list\"\n\t\t\t\t\t? \"missing_catalog\"\n\t\t\t\t\t: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn port;\n}\n\nexport async function prepareLocalBillingInvocation(input: {\n\tauthority: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey?: string;\n\toperation: BillingOperation;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttarget: BillingExecutionTarget;\n\ttestMode?: boolean;\n}): Promise<PreparedBillingInvocation> {\n\tconst target = resolveBillingExecutionTarget({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tregistry: input.registry,\n\t\ttarget: input.target,\n\t});\n\tif (target.kind === \"connection\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"missing_connection\",\n\t\t});\n\t}\n\tconst binding = createConfiguredProviderBinding({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tprovider: target.provider,\n\t});\n\tconst authority = resolveBillingInvocationAuthority({\n\t\tauthority: input.authority,\n\t});\n\tconst principal =\n\t\tinput.principal ??\n\t\t(isProcessBillingInvocation(authority)\n\t\t\t? PROCESS_OWNED_BILLING_PRINCIPAL\n\t\t\t: undefined);\n\tif (!principal && authority.kind === SESSION_BILLING_INVOCATION.kind) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tif (!principal) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tawait decideBillingCapability({\n\t\tbinding,\n\t\toperation: input.operation,\n\t\trequestedProfileId: input.target.profileId,\n\t\truntime: target.runtime,\n\t\ttestMode: input.testMode,\n\t});\n\tauthorizeBillingInvocation(principal, input.operation, authority);\n\tconst context = createBillingProviderExecutionContext({\n\t\tbinding,\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tingress: input.registry.ingress,\n\t\toperationScope: mollieOperationScopeFor(input.operation),\n\t\ttarget: {\n\t\t\tprofileId: input.target.profileId,\n\t\t},\n\t\ttestMode: input.testMode,\n\t});\n\treturn {\n\t\tauthority,\n\t\tbinding,\n\t\tcontext,\n\t\toperation: input.operation,\n\t\tprincipal,\n\t\truntime: target.runtime,\n\t\ttarget,\n\t};\n}\n\nexport async function resolveLocalBillingProviderExecution(input: {\n\tauthority?: BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey?: string;\n\toperation: BillingOperation;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttarget: BillingExecutionTarget;\n\ttestMode?: boolean;\n}): Promise<ResolvedLocalBillingProviderExecution> {\n\tconst prepared = await prepareLocalBillingInvocation({\n\t\t...input,\n\t\tauthority: input.authority ?? SESSION_BILLING_INVOCATION,\n\t});\n\treturn {\n\t\tcontext: prepared.context,\n\t\truntime: prepared.runtime,\n\t};\n}\n\nasync function decideBillingCapability(input: {\n\tbinding: ConfiguredBillingProviderBinding;\n\toperation: BillingOperation;\n\trequestedProfileId?: string;\n\truntime: BillingProviderRuntime;\n\ttestMode?: boolean;\n}): Promise<void> {\n\tconst providerCapabilities = await input.runtime.getCapabilities(\n\t\tinput.binding,\n\t);\n\tconst authority = readBillingCredentialAuthority(input.binding.providerConfig);\n\tconst environment = resolveBillingEnvironment({\n\t\ttestMode: input.testMode,\n\t});\n\tconst capability = decideLocalBillingOperationCapability({\n\t\tanyCredentialConfigured:\n\t\t\tavailableBillingCredentialEnvironments(input.binding.credentials).length >\n\t\t\t0,\n\t\tauthority,\n\t\toperation: input.operation,\n\t\tportAvailable: providerPortIsAvailable(\n\t\t\tinput.runtime,\n\t\t\tproviderCapabilities.ports,\n\t\t\tinput.operation,\n\t\t),\n\t\tprovider: input.binding.provider,\n\t\tproviderConfig: input.binding.providerConfig,\n\t\tproviderOperationEnabled:\n\t\t\tproviderCapabilities.operations[input.operation] === true,\n\t\trequestedProfileId: input.requestedProfileId,\n\t\tselectedModeAllowed: selectedModeAllowedForCapability({\n\t\t\tauthority,\n\t\t\tselectedCredentialConfigured:\n\t\t\t\tinput.binding.credentials[environment.name] != null,\n\t\t\tselectedEnvironment: environment.name,\n\t\t}),\n\t});\n\tif (capability.available !== true) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: input.operation,\n\t\t\treason: capability.reason ?? \"unsupported_operation\",\n\t\t});\n\t}\n}\n\nfunction authorizeBillingInvocation(\n\tprincipal: AthenaPrincipal,\n\toperation: BillingOperation,\n\tauthority: BillingInvocationAuthority,\n): void {\n\tconst denied =\n\t\tauthorizeBillingOperation(principal, operation) ??\n\t\tauthorizeBillingSubjectBinding(principal, operation, authority);\n\tif (denied) {\n\t\tthrow denied;\n\t}\n}\n\n","import {\n\tATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\tAthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type {\n\tBillingOperationCapability,\n\tBillingOperationCapabilityReason,\n} from \"./capabilities.ts\";\n\nexport type BillingAuthoritySource = \"derived\" | \"declared\" | \"provider\";\n\nexport type BillingAuthorityScope =\n\t| { kind: \"organization\" }\n\t| { kind: \"profile\"; profileId?: string };\n\nexport interface BillingCredentialAuthority {\n\treadonly source: BillingAuthoritySource;\n\treadonly modes: {\n\t\treadonly test: boolean;\n\t\treadonly live: boolean;\n\t};\n\treadonly scope: BillingAuthorityScope;\n\treadonly permissions: Readonly<Record<string, boolean>>;\n}\n\n/**\n * Absent authority is unenforced provider-native scope (Stripe, catalog).\n * A present but incomplete `authority` object is a config error — never\n * fail-open by treating it as fully granted.\n */\nexport function readBillingCredentialAuthority(\n\tproviderConfig: Readonly<Record<string, unknown>> | undefined,\n): BillingCredentialAuthority | undefined {\n\tconst raw = providerConfig?.authority;\n\tif (raw == null) {\n\t\treturn undefined;\n\t}\n\tif (typeof raw !== \"object\" || Array.isArray(raw)) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: \"billing.providers authority is invalid.\",\n\t\t});\n\t}\n\tconst record = raw as Partial<BillingCredentialAuthority>;\n\tif (record.source == null || record.modes == null || record.scope == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n\t\t\tmessage: \"billing.providers authority is incomplete.\",\n\t\t});\n\t}\n\treturn {\n\t\tmodes: {\n\t\t\tlive: record.modes.live === true,\n\t\t\ttest: record.modes.test === true,\n\t\t},\n\t\tpermissions: record.permissions ?? {},\n\t\tscope: record.scope,\n\t\tsource: record.source,\n\t};\n}\n\nexport function grantedPermissionsFromAuthority(\n\tauthority: BillingCredentialAuthority,\n): ReadonlySet<string> {\n\tconst granted = new Set<string>();\n\tfor (const [permission, allowed] of Object.entries(authority.permissions)) {\n\t\tif (allowed) {\n\t\t\tgranted.add(permission);\n\t\t}\n\t}\n\treturn granted;\n}\n\nexport function authorityAllowsMode(\n\tauthority: BillingCredentialAuthority,\n\tenvironment: \"test\" | \"live\",\n): boolean {\n\treturn authority.modes[environment] === true;\n}\n\nexport function authorityAllowsProfile(\n\tauthority: BillingCredentialAuthority,\n\trequestedProfileId?: string | null,\n): boolean {\n\tif (authority.scope.kind === \"organization\") {\n\t\treturn true;\n\t}\n\tconst restricted = authority.scope.profileId;\n\tconst requested =\n\t\trequestedProfileId != null && requestedProfileId.length > 0\n\t\t\t? requestedProfileId\n\t\t\t: undefined;\n\tif (restricted == null || restricted.length === 0) {\n\t\treturn requested == null;\n\t}\n\tif (requested == null) {\n\t\treturn true;\n\t}\n\treturn requested === restricted;\n}\n\nexport function evaluateBillingOperationCapability(input: {\n\tanyCredentialConfigured: boolean;\n\tgrantedPermissions: ReadonlySet<string>;\n\timplemented: boolean;\n\trequiredPermissions: readonly string[];\n\tscopeAllowed: boolean;\n\tselectedModeAllowed: boolean;\n\tunimplementedReason?: BillingOperationCapabilityReason;\n}): BillingOperationCapability {\n\tif (!input.implemented) {\n\t\treturn unavailable(input.unimplementedReason ?? \"unsupported_operation\");\n\t}\n\tif (!input.anyCredentialConfigured) {\n\t\treturn unavailable(\"missing_credential\");\n\t}\n\tif (!input.selectedModeAllowed) {\n\t\treturn unavailable(\"missing_provider_scope\");\n\t}\n\tif (!input.scopeAllowed) {\n\t\treturn unavailable(\"missing_provider_scope\");\n\t}\n\tfor (const permission of input.requiredPermissions) {\n\t\tif (!input.grantedPermissions.has(permission)) {\n\t\t\treturn unavailable(\"missing_permission\");\n\t\t}\n\t}\n\treturn { available: true };\n}\n\nfunction unavailable(\n\treason: BillingOperationCapabilityReason,\n): BillingOperationCapability {\n\treturn { available: false, reason };\n}\n","import type { BillingOperation } from \"../../capabilities.ts\";\n\nexport interface MollieOperationAuthority {\n\tpermissions: readonly string[];\n}\n\nexport const MOLLIE_OPERATION_AUTHORITY = {\n\t\"customers.create\": { permissions: [\"customers.write\"] },\n\t\"customers.delete\": { permissions: [\"customers.write\"] },\n\t\"customers.get\": { permissions: [\"customers.read\"] },\n\t\"customers.list\": { permissions: [\"customers.read\"] },\n\t\"customers.update\": { permissions: [\"customers.write\"] },\n\t\"invoices.get\": { permissions: [\"sales-invoices.read\"] },\n\t\"invoices.list\": { permissions: [\"sales-invoices.read\"] },\n\t\"paymentLinks.create\": { permissions: [\"payment-links.write\"] },\n\t\"paymentLinks.delete\": { permissions: [\"payment-links.write\"] },\n\t\"paymentLinks.get\": { permissions: [\"payment-links.read\"] },\n\t\"paymentLinks.list\": { permissions: [\"payment-links.read\"] },\n\t\"paymentLinks.update\": { permissions: [\"payment-links.write\"] },\n\t\"payments.cancel\": { permissions: [\"payments.write\"] },\n\t\"payments.create\": { permissions: [\"payments.write\"] },\n\t\"payments.get\": { permissions: [\"payments.read\"] },\n\t\"payments.list\": { permissions: [\"payments.read\"] },\n\t\"refunds.cancel\": { permissions: [\"refunds.write\"] },\n\t\"refunds.create\": { permissions: [\"refunds.write\"] },\n\t\"refunds.get\": { permissions: [\"refunds.read\"] },\n\t\"refunds.list\": { permissions: [\"refunds.read\"] },\n\t\"subscriptions.cancel\": { permissions: [\"subscriptions.write\"] },\n\t\"subscriptions.create\": { permissions: [\"subscriptions.write\"] },\n\t\"subscriptions.get\": { permissions: [\"subscriptions.read\"] },\n\t\"subscriptions.list\": { permissions: [\"subscriptions.read\"] },\n\t\"subscriptions.update\": { permissions: [\"subscriptions.write\"] },\n\t\"webhooks.create\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.delete\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.get\": { permissions: [\"webhooks.read\"] },\n\t\"webhooks.list\": { permissions: [\"webhooks.read\"] },\n\t\"webhooks.test\": { permissions: [\"webhooks.write\"] },\n\t\"webhooks.update\": { permissions: [\"webhooks.write\"] },\n\t\"products.list\": { permissions: [] },\n\t\"prices.list\": { permissions: [] },\n\t\"checkout.create\": { permissions: [\"payments.write\"] },\n\t\"self.invoices.list\": { permissions: [] },\n\t\"self.invoices.get\": { permissions: [] },\n\t\"self.payments.list\": { permissions: [] },\n\t\"self.payments.get\": { permissions: [] },\n\t\"self.subscription.get\": { permissions: [] },\n\t\"self.subscription.cancel\": { permissions: [] },\n\t\"self.subscription.enroll\": { permissions: [] },\n\t\"self.checkout.create\": { permissions: [] },\n\t\"self.checkout.resume\": { permissions: [] },\n\t\"admin.connections.materialize\": { permissions: [] },\n\t\"admin.conflicts.resolve\": { permissions: [] },\n\t\"admin.ingestion.health\": { permissions: [] },\n\t\"admin.reconciliation.retry\": { permissions: [] },\n\t\"admin.reconciliation.run\": { permissions: [] },\n\t\"admin.webhooks.reconcile\": { permissions: [] },\n\t\"admin.webhooks.status\": { permissions: [] },\n\t\"admin.webhooks.verify\": { permissions: [] },\n} satisfies Record<BillingOperation, MollieOperationAuthority>;\n\nexport function requiredMolliePermissionsFor(\n\toperation: BillingOperation,\n): readonly string[] {\n\treturn MOLLIE_OPERATION_AUTHORITY[operation].permissions;\n}\n","import {\n\tauthorityAllowsMode,\n\tauthorityAllowsProfile,\n\tevaluateBillingOperationCapability,\n\tgrantedPermissionsFromAuthority,\n\ttype BillingCredentialAuthority,\n} from \"../authority.ts\";\nimport type {\n\tBillingOperation,\n\tBillingOperationCapability,\n} from \"../capabilities.ts\";\nimport { requiredMolliePermissionsFor } from \"./providers/operation-authority.ts\";\n\nfunction mollieCreateHasProfileSelector(input: {\n\tconfiguredProfileId?: string | null;\n\tcredentialKind?: string | null;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tif (input.credentialKind == null || input.credentialKind === \"api_key\") {\n\t\treturn true;\n\t}\n\tconst requested = input.requestedProfileId;\n\tif (requested != null && requested.length > 0) {\n\t\treturn true;\n\t}\n\tconst configured = input.configuredProfileId;\n\treturn configured != null && configured.length > 0;\n}\n\nexport function requiredPermissionsFor(\n\tprovider: string,\n\toperation: BillingOperation,\n): readonly string[] {\n\treturn provider === \"mollie\" ? requiredMolliePermissionsFor(operation) : [];\n}\n\nexport function scopeAllowedForOperation(input: {\n\tauthority?: BillingCredentialAuthority;\n\toperation: BillingOperation;\n\tprovider: string;\n\tproviderConfig: Readonly<Record<string, unknown>>;\n\trequestedProfileId?: string | null;\n}): boolean {\n\tconst authorityAllows =\n\t\tinput.authority == null\n\t\t\t? true\n\t\t\t: authorityAllowsProfile(input.authority, input.requestedProfileId);\n\tif (!authorityAllows) {\n\t\treturn false;\n\t}\n\tif (input.provider !== \"mollie\" || input.operation !== \"payments.create\") {\n\t\treturn true;\n\t}\n\tconst credentialKind = input.providerConfig.credentialKind;\n\tconst configuredProfileId = input.providerConfig.profileId;\n\treturn mollieCreateHasProfileSelector({\n\t\tconfiguredProfileId:\n\t\t\ttypeof configuredProfileId === \"string\" || configuredProfileId === null\n\t\t\t\t? configuredProfileId\n\t\t\t\t: undefined,\n\t\tcredentialKind:\n\t\t\ttypeof credentialKind === \"string\" ? credentialKind : undefined,\n\t\trequestedProfileId: input.requestedProfileId,\n\t});\n}\n\nexport function decideLocalBillingOperationCapability(input: {\n\tanyCredentialConfigured: boolean;\n\tauthority?: BillingCredentialAuthority;\n\toperation: BillingOperation;\n\tportAvailable: boolean;\n\tprovider: string;\n\tproviderConfig: Readonly<Record<string, unknown>>;\n\tproviderOperationEnabled: boolean;\n\trequestedProfileId?: string | null;\n\tselectedModeAllowed: boolean;\n\tunimplementedReason?: BillingOperationCapability[\"reason\"];\n}): BillingOperationCapability {\n\tconst implemented =\n\t\tinput.portAvailable && input.providerOperationEnabled;\n\tconst requiredPermissions = requiredPermissionsFor(\n\t\tinput.provider,\n\t\tinput.operation,\n\t);\n\tconst catalogOperation =\n\t\tinput.operation === \"products.list\" || input.operation === \"prices.list\";\n\treturn evaluateBillingOperationCapability({\n\t\tanyCredentialConfigured: input.anyCredentialConfigured,\n\t\tgrantedPermissions: input.authority\n\t\t\t? grantedPermissionsFromAuthority(input.authority)\n\t\t\t: new Set(),\n\t\timplemented,\n\t\trequiredPermissions,\n\t\tscopeAllowed: scopeAllowedForOperation({\n\t\t\tauthority: input.authority,\n\t\t\toperation: input.operation,\n\t\t\tprovider: input.provider,\n\t\t\tproviderConfig: input.providerConfig,\n\t\t\trequestedProfileId: input.requestedProfileId,\n\t\t}),\n\t\tselectedModeAllowed: input.selectedModeAllowed,\n\t\tunimplementedReason:\n\t\t\tinput.unimplementedReason ??\n\t\t\t(catalogOperation ? \"missing_catalog\" : undefined),\n\t});\n}\n\nexport function selectedModeAllowedForCapability(input: {\n\tauthority?: BillingCredentialAuthority;\n\tselectedCredentialConfigured: boolean;\n\tselectedEnvironment: \"test\" | \"live\";\n}): boolean {\n\treturn input.authority == null\n\t\t? input.selectedCredentialConfigured\n\t\t: authorityAllowsMode(input.authority, input.selectedEnvironment);\n}\n","export type MollieOperationScope = \"organization\" | \"profile\" | \"automatic\";\n\n/**\n * Organization/control-plane calls must not send a profile-restricted SDK\n * client (`profileId` / defaultProfileId). Profile/data-plane calls may.\n */\nexport function mollieOperationScopeFor(\n\toperation: string,\n): MollieOperationScope {\n\tif (operation.startsWith(\"webhooks.\")) {\n\t\treturn \"organization\";\n\t}\n\tif (\n\t\toperation.startsWith(\"payments.\") ||\n\t\toperation.startsWith(\"refunds.\") ||\n\t\toperation.startsWith(\"paymentLinks.\") ||\n\t\toperation.startsWith(\"subscriptions.\")\n\t) {\n\t\treturn \"profile\";\n\t}\n\tif (\n\t\toperation.startsWith(\"customers.\") ||\n\t\toperation.startsWith(\"invoices.\")\n\t) {\n\t\treturn \"organization\";\n\t}\n\treturn \"automatic\";\n}\n","import {\n\tATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\tATHENA_BILLING_TARGET_AMBIGUOUS,\n\tAthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingExecutionTarget, BillingProviderName } from \"../../../types.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type { BillingProviderRegistry } from \"./registry.ts\";\nimport type { ResolvedBillingExecutionTarget } from \"./types.ts\";\n\nfunction configuredProviderNames(\n\tconfigured: BillingProviderConfigMap | undefined,\n): BillingProviderName[] {\n\tif (configured == null) {\n\t\treturn [];\n\t}\n\treturn Object.keys(configured)\n\t\t.filter((name) => configured[name] != null)\n\t\t.map((name) => normalizeBillingProviderName(name));\n}\n\nfunction isProviderConfigured(\n\tconfigured: BillingProviderConfigMap | undefined,\n\tprovider: BillingProviderName,\n): boolean {\n\treturn configuredProviderNames(configured).includes(provider);\n}\n\nexport function resolveBillingExecutionTarget(input: {\n\ttarget?: BillingExecutionTarget;\n\tconfiguredProviders: BillingProviderConfigMap | undefined;\n\tregistry: BillingProviderRegistry;\n}): ResolvedBillingExecutionTarget {\n\tconst connectionId = input.target?.connectionId?.trim() ?? \"\";\n\tconst explicitProvider = input.target?.provider?.trim() ?? \"\";\n\tconst hasConnectionId = connectionId.length > 0;\n\tconst hasProvider = explicitProvider.length > 0;\n\n\tif (hasConnectionId && hasProvider) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_TARGET_AMBIGUOUS,\n\t\t\tmessage:\n\t\t\t\t\"Billing target is ambiguous: provide either connectionId or provider, not both.\",\n\t\t});\n\t}\n\n\tif (hasConnectionId) {\n\t\treturn {\n\t\t\tkind: \"connection\",\n\t\t\tconnectionId,\n\t\t\tprovider: hasProvider\n\t\t\t\t? normalizeBillingProviderName(explicitProvider)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\tif (hasProvider) {\n\t\tconst provider = normalizeBillingProviderName(explicitProvider);\n\t\tif (!isProviderConfigured(input.configuredProviders, provider)) {\n\t\t\tthrow new AthenaBillingProviderError({\n\t\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\t\tmessage: `Billing provider \"${provider}\" is not configured.`,\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tkind: \"configured\",\n\t\t\tprovider,\n\t\t\truntime: input.registry.require(provider),\n\t\t};\n\t}\n\n\tconst configured = configuredProviderNames(input.configuredProviders);\n\tif (configured.length === 0) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"No billing provider is configured.\",\n\t\t});\n\t}\n\tif (configured.length > 1) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_TARGET_AMBIGUOUS,\n\t\t\tmessage:\n\t\t\t\t\"Billing target is ambiguous: multiple providers are configured and no provider was specified.\",\n\t\t});\n\t}\n\n\tconst provider = configured[0];\n\tif (provider == null) {\n\t\tthrow new AthenaBillingProviderError({\n\t\t\tcode: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n\t\t\tmessage: \"No billing provider is configured.\",\n\t\t});\n\t}\n\treturn {\n\t\tkind: \"configured\",\n\t\tprovider,\n\t\truntime: input.registry.require(provider),\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingListPricesInput, BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset } from \"./shared.ts\";\n\nexport async function executeLocalBillingPriceList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListPricesInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingPrice>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"prices.list\", payload.offset),\n\t\toperation: \"prices.list\",\n\t\tport: \"prices\",\n\t\trequest: input,\n\t\tinvoke: (prices, context, payload) =>\n\t\t\tprices.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tlimit: payload.limit,\n\t\t\t\tproductId: payload.productId,\n\t\t\t}),\n\t});\n}\n","import type { CanonicalBillingDocument } from \"../../canonical/document.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport { createRecurringSubscriptionForPrice } from \"./enroll.ts\";\nimport {\n\tclaimCheckoutSessionForSubscriptionAdvance,\n\tgetCheckoutSessionByPayment,\n\treleaseCheckoutSessionAdvanceClaim,\n\tupdateCheckoutSession,\n} from \"./enrollment-session.ts\";\n\nexport async function advanceSelfSubscriptionEnrollment(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tdocument: CanonicalBillingDocument;\n\tregistry: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<void> {\n\tif (input.document.kind !== \"payment\") {\n\t\treturn;\n\t}\n\tconst session = await getCheckoutSessionByPayment({\n\t\tprovider: input.document.provider,\n\t\tproviderPaymentId: input.document.providerPaymentId,\n\t\tsql: input.sql,\n\t});\n\tif (session == null || session.status === \"enrolled\") {\n\t\treturn;\n\t}\n\tif (\n\t\tinput.document.status === \"failed\" ||\n\t\tinput.document.status === \"canceled\"\n\t) {\n\t\tawait updateCheckoutSession({\n\t\t\tid: session.id,\n\t\t\tsql: input.sql,\n\t\t\tstatus:\n\t\t\t\tinput.document.status === \"canceled\"\n\t\t\t\t\t? \"first_payment_canceled\"\n\t\t\t\t\t: \"first_payment_failed\",\n\t\t});\n\t\treturn;\n\t}\n\tif (input.document.status !== \"paid\") {\n\t\treturn;\n\t}\n\tconst claimed = await claimCheckoutSessionForSubscriptionAdvance({\n\t\tid: session.id,\n\t\tsql: input.sql,\n\t});\n\tif (claimed == null) {\n\t\treturn;\n\t}\n\ttry {\n\t\tconst prices = await executeLocalBillingPriceList({\n\t\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tpayload: {},\n\t\t\tprincipal: selfDelegatedBillingPrincipal(\n\t\t\t\t{\n\t\t\t\t\tauthenticated: true,\n\t\t\t\t\tgrants: [],\n\t\t\t\t\trights: [],\n\t\t\t\t\tuserId: session.subjectId,\n\t\t\t\t},\n\t\t\t\t[\"prices.list\"],\n\t\t\t),\n\t\t\tregistry: input.registry,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tconst price = prices.items.find((item) => item.id === session.priceId);\n\t\tif (price == null) {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst intent = resolveBillingCheckoutIntent(price);\n\t\tif (intent.kind !== \"recurring\") {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst customerId =\n\t\t\tsession.providerCustomerId ?? input.document.providerCustomerId;\n\t\tif (customerId == null || customerId.trim() === \"\") {\n\t\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\t\tid: session.id,\n\t\t\t\tsql: input.sql,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst subscription = await createRecurringSubscriptionForPrice({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tcustomerId,\n\t\t\tidempotencyKey: session.idempotencyKey,\n\t\t\tinterval: intent.interval,\n\t\t\tprincipal: {\n\t\t\t\tauthenticated: true,\n\t\t\t\tgrants: [],\n\t\t\t\trights: [],\n\t\t\t\tuserId: session.subjectId,\n\t\t\t},\n\t\t\tprice,\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tawait updateCheckoutSession({\n\t\t\tid: session.id,\n\t\t\tproviderCustomerId: customerId,\n\t\t\tproviderSubscriptionId: subscription.providerSubscriptionId,\n\t\t\tsql: input.sql,\n\t\t\tstatus: \"enrolled\",\n\t\t});\n\t} catch (error) {\n\t\tawait releaseCheckoutSessionAdvanceClaim({\n\t\t\tid: session.id,\n\t\t\tsql: input.sql,\n\t\t});\n\t\tthrow error;\n\t}\n}\n","import type { BillingPrice } from \"../../types.ts\";\n\nexport type BillingCheckoutIntent =\n\t| {\n\t\tkind: \"one_time\";\n\t\tprice: BillingPrice;\n\t}\n\t| {\n\t\tkind: \"recurring\";\n\t\tinterval: string;\n\t\tprice: BillingPrice;\n\t};\n\nconst ONE_TIME_CATALOG_INTERVALS = new Set([\n\t\"one-off\",\n\t\"one_off\",\n\t\"once\",\n\t\"one-time\",\n]);\n\n/**\n * Recurring enrollment vs one-off checkout. Empty and explicit one-off\n * tokens are one-time; any other non-empty interval is recurring.\n */\nexport function isRecurringBillingCatalogInterval(\n\tinterval?: string | null,\n): boolean {\n\tconst value = typeof interval === \"string\" ? interval.trim() : \"\";\n\tif (value.length === 0) {\n\t\treturn false;\n\t}\n\treturn !ONE_TIME_CATALOG_INTERVALS.has(value.toLowerCase());\n}\n\n/**\n * Catalog interval is the only Athena checkout classifier.\n * Provider adapters must not infer recurring from metadata (CHK-003).\n */\nexport function resolveBillingCheckoutIntent(\n\tprice: BillingPrice,\n): BillingCheckoutIntent {\n\tif (!isRecurringBillingCatalogInterval(price.interval)) {\n\t\treturn { kind: \"one_time\", price };\n\t}\n\tconst interval =\n\t\ttypeof price.interval === \"string\" ? price.interval.trim() : \"\";\n\treturn { kind: \"recurring\", interval, price };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport type { BillingOperation } from \"../capabilities.ts\";\nimport { requiredBillingRights } from \"../rights.ts\";\n\n/**\n * Process-invocation helper for self-service re-entry. Holds only the Rights\n * the listed operations need, bound to the caller's subject — never the\n * full operator overlay.\n */\nexport function selfDelegatedBillingPrincipal(\n\tsubject: AthenaPrincipal,\n\toperations: readonly BillingOperation[],\n): AthenaPrincipal {\n\tconst rights = Object.freeze([\n\t\t...new Set(operations.flatMap((operation) => requiredBillingRights(operation))),\n\t]);\n\treturn {\n\t\tauthenticated: true,\n\t\tgrants: [],\n\t\trights,\n\t\t...(subject.organizationId != null\n\t\t\t? { organizationId: subject.organizationId }\n\t\t\t: {}),\n\t\t...(subject.sessionId != null ? { sessionId: subject.sessionId } : {}),\n\t\t...(subject.userId != null ? { userId: subject.userId } : {}),\n\t};\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport { AthenaBillingCapabilityError, AthenaBillingError } from \"../../errors.ts\";\nimport { billingSubjectConflict } from \"../../subject/errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport { ensureActiveProviderCustomer } from \"../../subject/ensure-provider-customer.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport {\n\trequireReadyBillingConnectionId,\n\tresolveActiveBillingConnection,\n} from \"../../subject/sole-connection.ts\";\nimport type { BillingPrice, BillingSubscription } from \"../../types.ts\";\nimport { executeLocalBillingPaymentCreate } from \"../local/execute/payments.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport { executeLocalBillingSubscriptionCreate } from \"../local/execute/subscriptions.ts\";\nimport { billingHalLinkHref } from \"../hal-link-href.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport type {\n\tBillingSelfSubscriptionEnrollResult,\n\tBillingSelfSubscriptionEnrollmentStatus,\n} from \"../types.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n\ttype BillingCheckoutSessionRecord,\n\tcheckoutAttemptExpiresAtIso,\n\tgetCheckoutSessionByIdempotency,\n\tinsertCheckoutSession,\n\tisCheckoutSessionResumeExpired,\n\tlistUsableMandateSessions,\n\tupdateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { resolveAllowedBillingRedirectUrl } from \"./redirect-url.ts\";\nimport {\n\tappendBillingReturnToken,\n\tcreateBillingReturnNonce,\n} from \"./return-token.ts\";\n\nconst PERSIST_OWNED_SUBSCRIPTION_SQL = `\nINSERT INTO billing.billing_subscriptions (\n\tconnection_id,\n\tprovider,\n\tprovider_subscription_id,\n\tprovider_customer_id,\n\tstatus,\n\tamount_currency,\n\tamount_value,\n\tinterval,\n\tdescription,\n\tmetadata,\n\traw,\n\tsubject_kind,\n\tsubject_id,\n\townership_status\n) VALUES (\n\t$1::uuid, $2, $3, $4, $5, $6, $7, $8, $9, $10::jsonb, $11::jsonb, 'user', $12, 'resolved'\n)\nON CONFLICT (connection_id, provider_subscription_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n\tstatus = EXCLUDED.status,\n\tsubject_kind = EXCLUDED.subject_kind,\n\tsubject_id = EXCLUDED.subject_id,\n\townership_status = 'resolved',\n\tmetadata = EXCLUDED.metadata,\n\traw = EXCLUDED.raw\nWHERE\n\tbilling.billing_subscriptions.ownership_status IS DISTINCT FROM 'resolved'\n\tOR (\n\t\tbilling.billing_subscriptions.subject_kind IS NOT DISTINCT FROM EXCLUDED.subject_kind\n\t\tAND billing.billing_subscriptions.subject_id IS NOT DISTINCT FROM EXCLUDED.subject_id\n\t)\nRETURNING *\n`;\n\nconst LIVE_SELF_SUBSCRIPTION_SQL = `\nSELECT id\nFROM billing.billing_subscriptions\nWHERE subject_kind = $1\n  AND subject_id = $2\n  AND ownership_status = 'resolved'\n  AND lower(status) NOT IN ('canceled', 'cancelled', 'expired', 'completed')\nLIMIT 1\n`;\n\nfunction mollieInterval(interval: string): string {\n\tconst trimmed = interval.trim();\n\tif (/^\\d+\\s+\\S/.test(trimmed)) {\n\t\treturn trimmed;\n\t}\n\treturn `1 ${trimmed}`;\n}\n\nfunction sessionStatusToResult(\n\tstatus: BillingCheckoutSessionRecord[\"status\"],\n): BillingSelfSubscriptionEnrollmentStatus {\n\tif (status === \"enrolled\") {\n\t\treturn \"enrolled\";\n\t}\n\tif (status === \"first_payment_required\") {\n\t\treturn \"first_payment_required\";\n\t}\n\tif (status === \"first_payment_failed\" || status === \"first_payment_canceled\") {\n\t\treturn \"failed\";\n\t}\n\treturn \"pending\";\n}\n\nfunction resultFromSession(\n\tsession: BillingCheckoutSessionRecord,\n\tsubscription?: BillingSubscription,\n): BillingSelfSubscriptionEnrollResult {\n\treturn {\n\t\tcheckoutUrl: session.checkoutUrl,\n\t\tenrollmentId: session.id,\n\t\tmetadata: {\n\t\t\t...session.metadata,\n\t\t\tpriceId: session.priceId,\n\t\t},\n\t\tprovider: session.provider,\n\t\tstatus: sessionStatusToResult(session.status),\n\t\t...(subscription ? { subscription } : {}),\n\t};\n}\n\nexport async function persistOwnedSubscription(input: {\n\tconnectionId?: string | null;\n\tinterval: string;\n\tprincipal: AthenaPrincipal;\n\tsql: BillingSqlExecutor;\n\tsubscription: BillingSubscription;\n}): Promise<BillingSubscription> {\n\tconst connectionId =\n\t\tinput.connectionId?.trim() ||\n\t\trequireReadyBillingConnectionId(\n\t\t\tawait resolveActiveBillingConnection(input.sql),\n\t\t\t\"self.subscription.enroll\",\n\t\t);\n\tif (connectionId.length === 0) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"provider_connection_missing\",\n\t\t});\n\t}\n\tconst result = await input.sql.query(PERSIST_OWNED_SUBSCRIPTION_SQL, [\n\t\tconnectionId,\n\t\tinput.subscription.provider,\n\t\tinput.subscription.providerSubscriptionId,\n\t\tinput.subscription.providerCustomerId,\n\t\tinput.subscription.status,\n\t\tinput.subscription.amount?.currency ?? null,\n\t\tinput.subscription.amount?.value ?? null,\n\t\tinput.interval,\n\t\tinput.subscription.description ?? null,\n\t\tJSON.stringify(input.subscription.metadata ?? {}),\n\t\tJSON.stringify(input.subscription.raw ?? {}),\n\t\trequireBillingPrincipalUserId(input.principal),\n\t]);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow billingSubjectConflict(\n\t\t\t\"This provider subscription is already bound to another billing subject.\",\n\t\t);\n\t}\n\treturn {\n\t\t...input.subscription,\n\t\tid: String(row.id ?? input.subscription.id ?? \"\"),\n\t};\n}\n\nexport async function hasUsableMandate(input: {\n\tproviderCustomerId: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n}): Promise<boolean> {\n\tconst sessions = await listUsableMandateSessions({\n\t\tproviderCustomerId: input.providerCustomerId,\n\t\tsql: input.sql,\n\t\tsubjectId: input.subjectId,\n\t\tsubjectKind: \"user\",\n\t});\n\treturn sessions.length > 0;\n}\n\nexport async function createRecurringSubscriptionForPrice(input: {\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tcustomerId: string;\n\tidempotencyKey: string;\n\tinterval: string;\n\tprincipal: AthenaPrincipal;\n\tprice: BillingPrice;\n\tregistry: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\tconst created = await executeLocalBillingSubscriptionCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: input.price.amount,\n\t\t\tcustomerId: input.customerId,\n\t\t\tdescription: `Athena plan ${input.price.id}`,\n\t\t\tidempotencyKey: `${input.idempotencyKey}:subscription`,\n\t\t\tinterval: mollieInterval(input.interval),\n\t\t\tmetadata: {\n\t\t\t\tathenaSubjectId: requireBillingPrincipalUserId(input.principal),\n\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\tpriceId: input.price.id,\n\t\t\t},\n\t\t},\n\t\tprincipal: selfDelegatedBillingPrincipal(input.principal, [\n\t\t\t\"subscriptions.create\",\n\t\t]),\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst resolution = await resolveActiveBillingConnection(input.sql);\n\tif (resolution.status === \"none\") {\n\t\treturn created;\n\t}\n\treturn persistOwnedSubscription({\n\t\tconnectionId: requireReadyBillingConnectionId(\n\t\t\tresolution,\n\t\t\t\"self.subscription.enroll\",\n\t\t),\n\t\tinterval: input.interval,\n\t\tprincipal: input.principal,\n\t\tsql: input.sql,\n\t\tsubscription: created,\n\t});\n}\n\nexport async function enrollSelfSubscription(input: {\n\tallowedRedirectOrigins?: readonly string[];\n\tcancelUrl?: string;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tidempotencyKey: string;\n\tprincipal: AthenaPrincipal;\n\tpriceId: string;\n\tregistry?: BillingProviderRegistry;\n\tsql: BillingSqlExecutor;\n\tsuccessUrl?: string;\n\ttestMode?: boolean;\n}): Promise<BillingSelfSubscriptionEnrollResult> {\n\tconst command = prepareBillingCommand({\n\t\toperation: \"self.subscription.enroll\",\n\t\tpayload: {\n\t\t\tcancelUrl: input.cancelUrl,\n\t\t\tidempotencyKey: input.idempotencyKey,\n\t\t\tpriceId: input.priceId,\n\t\t\tsuccessUrl: input.successUrl,\n\t\t},\n\t});\n\tconst priceId = String(command.payload.priceId);\n\tconst idempotencyKey = String(command.payload.idempotencyKey);\n\tconst subjectUserId = requireBillingPrincipalUserId(input.principal);\n\tconst allowedRedirectOrigins = input.allowedRedirectOrigins ?? [];\n\tconst successUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"successUrl\",\n\t\turl: input.successUrl,\n\t});\n\tconst cancelUrl = resolveAllowedBillingRedirectUrl({\n\t\tallowedOrigins: allowedRedirectOrigins,\n\t\tfield: \"cancelUrl\",\n\t\turl: input.cancelUrl,\n\t});\n\tif (input.registry == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"runtime_unavailable\",\n\t\t});\n\t}\n\tconst existing = await getCheckoutSessionByIdempotency({\n\t\tidempotencyKey,\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tif (existing) {\n\t\tif (isCheckoutSessionResumeExpired(existing)) {\n\t\t\tthrow new AthenaBillingError({\n\t\t\t\tbody: { sessionId: existing.id },\n\t\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\t\tendpoint: \"\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"Billing checkout session has expired. Retry enroll with a new idempotencyKey.\",\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tstatus: 400,\n\t\t\t});\n\t\t}\n\t\treturn resultFromSession(existing);\n\t}\n\tconst live = await input.sql.query(LIVE_SELF_SUBSCRIPTION_SQL, [\n\t\t\"user\",\n\t\tsubjectUserId,\n\t]);\n\tif (live.rows[0]) {\n\t\tthrow billingSubjectConflict(\n\t\t\t\"An active subscription already exists. Cancel it before enrolling in another plan.\",\n\t\t);\n\t}\n\tconst delegated = selfDelegatedBillingPrincipal(input.principal, [\n\t\t\"prices.list\",\n\t\t\"payments.create\",\n\t\t\"subscriptions.create\",\n\t]);\n\tconst prices = await executeLocalBillingPriceList({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst price = prices.items.find((item) => item.id === priceId);\n\tif (price == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"missing_catalog\",\n\t\t});\n\t}\n\tconst intent = resolveBillingCheckoutIntent(price);\n\tif (intent.kind !== \"recurring\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\tmessage:\n\t\t\t\t\"One-time catalog prices must use self.checkout.create, not recurring enrollment.\",\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst customer = await ensureActiveProviderCustomer({\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tidempotencyKey,\n\t\tprincipal: input.principal,\n\t\tregistry: input.registry,\n\t\tsql: input.sql,\n\t\ttestMode: input.testMode,\n\t});\n\tconst mandateReady = await hasUsableMandate({\n\t\tproviderCustomerId: customer.customerId,\n\t\tsql: input.sql,\n\t\tsubjectId: subjectUserId,\n\t});\n\tif (mandateReady) {\n\t\tconst subscription = await createRecurringSubscriptionForPrice({\n\t\t\tconfiguredProviders: input.configuredProviders,\n\t\t\tcustomerId: customer.customerId,\n\t\t\tidempotencyKey,\n\t\t\tinterval: intent.interval,\n\t\t\tprincipal: input.principal,\n\t\t\tprice,\n\t\t\tregistry: input.registry,\n\t\t\tsql: input.sql,\n\t\t\ttestMode: input.testMode,\n\t\t});\n\t\tconst session = await insertCheckoutSession({\n\t\t\tcheckoutUrl: null,\n\t\t\texpiresAt: checkoutAttemptExpiresAtIso(),\n\t\t\tid: \"\",\n\t\t\tidempotencyKey,\n\t\t\tkind: \"subscription_enrollment\",\n\t\t\tmetadata: { priceId: price.id },\n\t\t\tpriceId: price.id,\n\t\t\tprovider: customer.provider,\n\t\t\tproviderCustomerId: customer.customerId,\n\t\t\tproviderPaymentId: null,\n\t\t\tproviderSubscriptionId: subscription.providerSubscriptionId,\n\t\t\tsql: input.sql,\n\t\t\tstatus: \"enrolled\",\n\t\t\tsubjectId: subjectUserId,\n\t\t\tsubjectKind: \"user\",\n\t\t});\n\t\treturn resultFromSession(session, subscription);\n\t}\n\tconst nonce = createBillingReturnNonce();\n\tconst expiresAt = checkoutAttemptExpiresAtIso();\n\tconst correlatedSuccess = successUrl\n\t\t? appendBillingReturnToken(successUrl, nonce.token)\n\t\t: undefined;\n\tconst correlatedCancel = cancelUrl\n\t\t? appendBillingReturnToken(cancelUrl, nonce.token)\n\t\t: undefined;\n\tconst redirectUrl = correlatedSuccess ?? correlatedCancel;\n\tif (redirectUrl == null) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: \"self.subscription.enroll\",\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tconst sessionId = crypto.randomUUID();\n\tconst paymentIdempotencyKey = `${idempotencyKey}:first-payment`;\n\tawait insertCheckoutSession({\n\t\tcheckoutUrl: null,\n\t\texpiresAt,\n\t\tid: sessionId,\n\t\tidempotencyKey,\n\t\tkind: \"subscription_enrollment\",\n\t\tmetadata: {\n\t\t\tathenaCheckoutSessionId: sessionId,\n\t\t\tcancelUrl: correlatedCancel,\n\t\t\tpaymentIdempotencyKey,\n\t\t\tpriceId: price.id,\n\t\t\tsuccessUrl: correlatedSuccess,\n\t\t},\n\t\tpriceId: price.id,\n\t\tprovider: customer.provider,\n\t\tproviderCustomerId: customer.customerId,\n\t\tproviderPaymentId: null,\n\t\tproviderSubscriptionId: null,\n\t\treturnNonceHash: nonce.hash,\n\t\tsql: input.sql,\n\t\tstatus: \"first_payment_required\",\n\t\tsubjectId: subjectUserId,\n\t\tsubjectKind: \"user\",\n\t});\n\tconst payment = await executeLocalBillingPaymentCreate({\n\t\tauthority: PROCESS_BILLING_INVOCATION,\n\t\tconfiguredProviders: input.configuredProviders,\n\t\tpayload: {\n\t\t\tamount: price.amount,\n\t\t\tcustomerId: customer.customerId,\n\t\t\tdescription: `Athena first payment ${price.id}`,\n\t\t\tidempotencyKey: paymentIdempotencyKey,\n\t\t\tmetadata: {\n\t\t\t\tathenaCheckoutSessionId: sessionId,\n\t\t\t\tathenaEnrollment: true,\n\t\t\t\tathenaSubjectId: requireBillingPrincipalUserId(input.principal),\n\t\t\t\tathenaSubjectKind: \"user\",\n\t\t\t\tpriceId: price.id,\n\t\t\t},\n\t\t\tredirectUrl,\n\t\t\tsequenceType: \"first\",\n\t\t},\n\t\tprincipal: delegated,\n\t\tregistry: input.registry,\n\t\ttestMode: input.testMode,\n\t});\n\tconst session = await updateCheckoutSession({\n\t\tcheckoutUrl: billingHalLinkHref(payment.raw, \"checkout\"),\n\t\tid: sessionId,\n\t\tproviderCustomerId: customer.customerId,\n\t\tproviderPaymentId: payment.providerPaymentId,\n\t\tsql: input.sql,\n\t\tstatus: \"first_payment_required\",\n\t});\n\treturn resultFromSession(session);\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingError } from \"../errors.ts\";\n\nexport function requireBillingPrincipalUserId(\n\tprincipal: AthenaPrincipal,\n): string {\n\tconst userId = principal.userId?.trim();\n\tif (userId == null || userId.length === 0) {\n\t\tthrow new AthenaBillingError({\n\t\t\tbody: { field: \"userId\" },\n\t\t\tcode: \"ATHENA_BILLING_INVALID_REQUEST\",\n\t\t\tendpoint: \"\",\n\t\t\tmessage: \"Authenticated billing subject is required.\",\n\t\t\tmethod: \"POST\",\n\t\t\tstatus: 400,\n\t\t});\n\t}\n\treturn userId;\n}\n","import { AthenaBillingCapabilityError } from \"../errors.ts\";\nimport type { BillingSqlExecutor } from \"./repository.ts\";\n\nexport type ActiveBillingConnectionResolution =\n\t| { status: \"none\" }\n\t| { status: \"ready\"; connectionId: string }\n\t| { status: \"ambiguous\" };\n\n/**\n * Active billing connection when exactly one row exists.\n * Zero and many active rows are distinct outcomes — never collapsed.\n */\nexport async function resolveActiveBillingConnection(\n\tsql: BillingSqlExecutor,\n): Promise<ActiveBillingConnectionResolution> {\n\tconst result = await sql.query(\n\t\t`SELECT id::text AS id\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE status = 'active'\n\t\t\t LIMIT 2`,\n\t);\n\tif (result.rows.length === 0) {\n\t\treturn { status: \"none\" };\n\t}\n\tif (result.rows.length > 1) {\n\t\treturn { status: \"ambiguous\" };\n\t}\n\tconst id = result.rows[0]?.id;\n\tif (typeof id !== \"string\" || id.trim() === \"\") {\n\t\treturn { status: \"none\" };\n\t}\n\treturn { status: \"ready\", connectionId: id };\n}\n\n/**\n * @deprecated Prefer {@link resolveActiveBillingConnection}. Collapses none\n * and ambiguous into `undefined`.\n */\nexport async function resolveSoleActiveBillingConnectionId(\n\tsql: BillingSqlExecutor,\n): Promise<string | undefined> {\n\tconst resolution = await resolveActiveBillingConnection(sql);\n\treturn resolution.status === \"ready\" ? resolution.connectionId : undefined;\n}\n\nexport function requireReadyBillingConnectionId(\n\tresolution: ActiveBillingConnectionResolution,\n\toperation: string,\n): string {\n\tif (resolution.status === \"ready\") {\n\t\treturn resolution.connectionId;\n\t}\n\tif (resolution.status === \"ambiguous\") {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation,\n\t\t\treason: \"provider_connection_ambiguous\",\n\t\t});\n\t}\n\tthrow new AthenaBillingCapabilityError({\n\t\toperation,\n\t\treason: \"provider_connection_missing\",\n\t});\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n\tBillingCancelSubscriptionInput,\n\tBillingCreateSubscriptionInput,\n\tBillingGetSubscriptionInput,\n\tBillingListSubscriptionsInput,\n\tBillingSubscription,\n\tBillingUpdateSubscriptionInput,\n} from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type { BillingProviderRegistry } from \"../providers/registry.ts\";\nimport { executeLocalBillingOperation } from \"./invoke.ts\";\nimport { rejectUnsupportedListOffset } from \"./shared.ts\";\n\nexport async function executeLocalBillingSubscriptionCreate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCreateSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.create\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tsafety: \"defer-then-finalize\",\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.create(context, {\n\t\t\t\tamount: payload.amount,\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tidempotencyKey: payload.idempotencyKey,\n\t\t\t\tinterval: payload.interval,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionGet(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingGetSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.get\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.get(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionList(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingListSubscriptionsInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingPage<BillingSubscription>> {\n\treturn executeLocalBillingOperation({\n\t\tbefore: (payload) =>\n\t\t\trejectUnsupportedListOffset(\"subscriptions.list\", payload.offset),\n\t\toperation: \"subscriptions.list\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.list(context, {\n\t\t\t\tcursor: payload.cursor,\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tlimit: payload.limit,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionUpdate(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingUpdateSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.update\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.update(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tdescription: payload.description,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n\nexport async function executeLocalBillingSubscriptionCancel(input: {\n\tauthority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n\tconfiguredProviders?: BillingProviderConfigMap;\n\tpayload: BillingCancelSubscriptionInput;\n\tprincipal?: AthenaPrincipal;\n\tregistry: BillingProviderRegistry;\n\ttestMode?: boolean;\n}): Promise<BillingSubscription> {\n\treturn executeLocalBillingOperation({\n\t\toperation: \"subscriptions.cancel\",\n\t\tport: \"subscriptions\",\n\t\trequest: input,\n\t\tinvoke: (subscriptions, context, payload) =>\n\t\t\tsubscriptions.cancel(context, {\n\t\t\t\tcustomerId: payload.customerId,\n\t\t\t\tsubscriptionId: payload.subscriptionId,\n\t\t\t}),\n\t});\n}\n","import type { BillingProviderName } from \"../../types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport type BillingCheckoutSessionStatus =\n\t| \"first_payment_required\"\n\t| \"first_payment_paid\"\n\t| \"first_payment_failed\"\n\t| \"first_payment_canceled\"\n\t| \"enrolled\";\n\nexport type BillingCheckoutSessionKind =\n\t| \"one_off\"\n\t| \"subscription_enrollment\";\n\nexport interface BillingCheckoutSessionRecord {\n\tcheckoutUrl: string | null;\n\tconnectionId?: string | null;\n\tcreatedAt: string;\n\texpiresAt?: string | null;\n\tid: string;\n\tidempotencyKey: string;\n\tkind?: BillingCheckoutSessionKind;\n\tmetadata: Record<string, unknown>;\n\tpriceId: string;\n\tprovider: BillingProviderName;\n\tproviderCustomerId: string | null;\n\tproviderPaymentId: string | null;\n\tproviderSubscriptionId: string | null;\n\treturnNonceHash?: string | null;\n\tstatus: BillingCheckoutSessionStatus;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}\n\n/** Resume of `first_payment_required` checkout URLs after this age is rejected. */\nexport const CHECKOUT_SESSION_RESUME_TTL_MS = 24 * 60 * 60 * 1000;\n\nexport function isCheckoutSessionResumeExpired(\n\tsession: BillingCheckoutSessionRecord,\n\tnow = Date.now(),\n): boolean {\n\tif (session.status !== \"first_payment_required\") {\n\t\treturn false;\n\t}\n\tif (session.expiresAt != null && session.expiresAt.trim() !== \"\") {\n\t\tconst expires = Date.parse(session.expiresAt);\n\t\tif (Number.isFinite(expires)) {\n\t\t\treturn now > expires;\n\t\t}\n\t}\n\tconst created = Date.parse(session.createdAt);\n\tif (!Number.isFinite(created)) {\n\t\treturn true;\n\t}\n\treturn now - created > CHECKOUT_SESSION_RESUME_TTL_MS;\n}\n\nexport function checkoutAttemptExpiresAtIso(now = Date.now()): string {\n\treturn new Date(now + CHECKOUT_SESSION_RESUME_TTL_MS).toISOString();\n}\n\nfunction createdAtIso(value: unknown): string {\n\tif (value instanceof Date && !Number.isNaN(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\tconst parsed = Date.parse(value);\n\t\tif (Number.isFinite(parsed)) {\n\t\t\treturn new Date(parsed).toISOString();\n\t\t}\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction asStatus(value: unknown): BillingCheckoutSessionStatus {\n\tif (\n\t\tvalue === \"first_payment_paid\" ||\n\t\tvalue === \"first_payment_failed\" ||\n\t\tvalue === \"first_payment_canceled\" ||\n\t\tvalue === \"enrolled\"\n\t) {\n\t\treturn value;\n\t}\n\treturn \"first_payment_required\";\n}\n\nfunction asKind(value: unknown): BillingCheckoutSessionKind {\n\treturn value === \"one_off\" ? \"one_off\" : \"subscription_enrollment\";\n}\n\nfunction asRecord(row: Record<string, unknown>): BillingCheckoutSessionRecord {\n\tconst metadata = row.metadata;\n\treturn {\n\t\tcheckoutUrl: typeof row.checkout_url === \"string\" ? row.checkout_url : null,\n\t\tconnectionId:\n\t\t\ttypeof row.connection_id === \"string\" ? row.connection_id : null,\n\t\tcreatedAt: createdAtIso(row.created_at),\n\t\texpiresAt:\n\t\t\trow.expires_at instanceof Date\n\t\t\t\t? row.expires_at.toISOString()\n\t\t\t\t: typeof row.expires_at === \"string\"\n\t\t\t\t\t? row.expires_at\n\t\t\t\t\t: null,\n\t\tid: String(row.id ?? \"\"),\n\t\tidempotencyKey: String(row.idempotency_key ?? \"\"),\n\t\tkind: asKind(row.kind),\n\t\tmetadata:\n\t\t\tmetadata != null && typeof metadata === \"object\" && !Array.isArray(metadata)\n\t\t\t\t? (metadata as Record<string, unknown>)\n\t\t\t\t: {},\n\t\tpriceId: String(row.price_id ?? \"\"),\n\t\tprovider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n\t\tproviderCustomerId:\n\t\t\ttypeof row.provider_customer_id === \"string\"\n\t\t\t\t? row.provider_customer_id\n\t\t\t\t: null,\n\t\tproviderPaymentId:\n\t\t\ttypeof row.provider_payment_id === \"string\"\n\t\t\t\t? row.provider_payment_id\n\t\t\t\t: null,\n\t\tproviderSubscriptionId:\n\t\t\ttypeof row.provider_subscription_id === \"string\"\n\t\t\t\t? row.provider_subscription_id\n\t\t\t\t: null,\n\t\treturnNonceHash:\n\t\t\ttypeof row.return_nonce_hash === \"string\" ? row.return_nonce_hash : null,\n\t\tstatus: asStatus(row.status),\n\t\tsubjectId: String(row.subject_id ?? \"\"),\n\t\tsubjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n\t};\n}\n\nexport async function getCheckoutSessionByIdempotency(input: {\n\tidempotencyKey: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND idempotency_key = $3\n\t\t LIMIT 1`,\n\t\t[input.subjectKind, input.subjectId, input.idempotencyKey],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByPayment(input: {\n\tprovider: BillingProviderName;\n\tproviderPaymentId: string;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE provider = $1\n\t\t   AND provider_payment_id = $2\n\t\t LIMIT 1`,\n\t\t[input.provider, input.providerPaymentId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByReturnNonce(input: {\n\treturnNonceHash: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE return_nonce_hash = $1\n\t\t   AND subject_kind = $2\n\t\t   AND subject_id = $3\n\t\t LIMIT 1`,\n\t\t[input.returnNonceHash, input.subjectKind, input.subjectId],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function listUsableMandateSessions(input: {\n\tproviderCustomerId: string;\n\tsql: BillingSqlExecutor;\n\tsubjectId: string;\n\tsubjectKind: \"user\" | \"organization\";\n}): Promise<readonly BillingCheckoutSessionRecord[]> {\n\tconst result = await input.sql.query(\n\t\t`SELECT * FROM billing.billing_checkout_sessions\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND provider_customer_id = $3\n\t\t   AND status IN ('enrolled', 'first_payment_paid')`,\n\t\t[input.subjectKind, input.subjectId, input.providerCustomerId],\n\t);\n\treturn result.rows.map(asRecord);\n}\n\nexport async function insertCheckoutSession(\n\tinput: Omit<BillingCheckoutSessionRecord, \"createdAt\"> & {\n\t\tconnectionId?: string | null;\n\t\tcreatedAt?: string;\n\t\texpiresAt?: string | null;\n\t\tkind?: BillingCheckoutSessionKind;\n\t\treturnNonceHash?: string | null;\n\t\tsql: BillingSqlExecutor;\n\t},\n): Promise<BillingCheckoutSessionRecord> {\n\tconst result = await input.sql.query(\n\t\t`INSERT INTO billing.billing_checkout_sessions (\n\t\t\tid,\n\t\t\tidempotency_key,\n\t\t\tsubject_kind,\n\t\t\tsubject_id,\n\t\t\tprice_id,\n\t\t\tprovider,\n\t\t\tprovider_customer_id,\n\t\t\tprovider_payment_id,\n\t\t\tprovider_subscription_id,\n\t\t\tstatus,\n\t\t\tcheckout_url,\n\t\t\tmetadata,\n\t\t\tkind,\n\t\t\tconnection_id,\n\t\t\treturn_nonce_hash,\n\t\t\texpires_at\n\t\t) VALUES (\n\t\t\tCOALESCE($1::uuid, gen_random_uuid()),\n\t\t\t$2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12::jsonb,\n\t\t\t$13, $14, $15, $16::timestamptz\n\t\t)\n\t\tON CONFLICT (subject_kind, subject_id, idempotency_key)\n\t\tDO UPDATE SET updated_at = billing.billing_checkout_sessions.updated_at\n\t\tRETURNING *`,\n\t\t[\n\t\t\tinput.id.trim() === \"\" ? null : input.id,\n\t\t\tinput.idempotencyKey,\n\t\t\tinput.subjectKind,\n\t\t\tinput.subjectId,\n\t\t\tinput.priceId,\n\t\t\tinput.provider,\n\t\t\tinput.providerCustomerId,\n\t\t\tinput.providerPaymentId,\n\t\t\tinput.providerSubscriptionId,\n\t\t\tinput.status,\n\t\t\tinput.checkoutUrl,\n\t\t\tJSON.stringify(input.metadata),\n\t\t\tinput.kind ?? \"subscription_enrollment\",\n\t\t\tinput.connectionId ?? null,\n\t\t\tinput.returnNonceHash ?? null,\n\t\t\tinput.expiresAt ?? null,\n\t\t],\n\t);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow new Error(\"Failed to persist billing checkout session.\");\n\t}\n\treturn asRecord(row);\n}\n\nexport const CHECKOUT_SESSION_ADVANCE_CLAIM = \"__claiming__\";\n\nexport async function claimCheckoutSessionForSubscriptionAdvance(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n\tconst result = await input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET status = CASE\n\t\t       WHEN status = 'first_payment_required' THEN 'first_payment_paid'\n\t\t       ELSE status\n\t\t     END,\n\t\t     provider_subscription_id = $2,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND provider_subscription_id IS NULL\n\t\t   AND status IN ('first_payment_required', 'first_payment_paid')\n\t\t RETURNING *`,\n\t\t[input.id, CHECKOUT_SESSION_ADVANCE_CLAIM],\n\t);\n\tconst row = result.rows[0];\n\treturn row ? asRecord(row) : undefined;\n}\n\nexport async function releaseCheckoutSessionAdvanceClaim(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n}): Promise<void> {\n\tawait input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET provider_subscription_id = NULL,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND provider_subscription_id = $2`,\n\t\t[input.id, CHECKOUT_SESSION_ADVANCE_CLAIM],\n\t);\n}\n\nexport async function updateCheckoutSession(input: {\n\tid: string;\n\tsql: BillingSqlExecutor;\n\tcheckoutUrl?: string | null;\n\texpiresAt?: string | null;\n\tproviderCustomerId?: string | null;\n\tproviderPaymentId?: string | null;\n\tproviderSubscriptionId?: string | null;\n\treturnNonceHash?: string | null;\n\tstatus: BillingCheckoutSessionStatus;\n}): Promise<BillingCheckoutSessionRecord> {\n\tconst result = await input.sql.query(\n\t\t`UPDATE billing.billing_checkout_sessions\n\t\t SET status = $2,\n\t\t     checkout_url = COALESCE($3, checkout_url),\n\t\t     provider_customer_id = COALESCE($4, provider_customer_id),\n\t\t     provider_payment_id = COALESCE($5, provider_payment_id),\n\t\t     provider_subscription_id = COALESCE($6, provider_subscription_id),\n\t\t     return_nonce_hash = COALESCE($7, return_nonce_hash),\n\t\t     expires_at = COALESCE($8::timestamptz, expires_at),\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t RETURNING *`,\n\t\t[\n\t\t\tinput.id,\n\t\t\tinput.status,\n\t\t\tinput.checkoutUrl,\n\t\t\tinput.providerCustomerId,\n\t\t\tinput.providerPaymentId,\n\t\t\tinput.providerSubscriptionId,\n\t\t\tinput.returnNonceHash,\n\t\t\tinput.expiresAt,\n\t\t],\n\t);\n\tconst row = result.rows[0];\n\tif (!row) {\n\t\tthrow new Error(\"Failed to update billing checkout session.\");\n\t}\n\treturn asRecord(row);\n}\n","import type { BillingResolvedCredential } from \"../../../credentials.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\n\nexport async function resolveMollieWebhookResource(input: {\n\tcredential: BillingResolvedCredential;\n\tid: string;\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\toperationScope?: \"organization\" | \"profile\" | \"automatic\";\n\tpool: MollieSdkClientPool;\n\tprofileId?: string | null;\n}): Promise<unknown> {\n\tconst client = clientFromPool(input.pool, {\n\t\tcredential: input.credential,\n\t\toperationScope: input.operationScope,\n\t\ttarget: { profileId: input.profileId },\n\t});\n\tif (input.kind === \"subscription\") {\n\t\treturn callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequest: { subscriptionId: input.id },\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t}\n\tif (input.kind === \"invoice\") {\n\t\treturn callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"invoices.get\",\n\t\t\trequest: { invoiceId: input.id },\n\t\t\tresource: \"invoices\",\n\t\t});\n\t}\n\treturn callMollieSdk({\n\t\tclient,\n\t\tmethod: \"get\",\n\t\toperation: \"payments.get\",\n\t\trequest: { paymentId: input.id },\n\t\tresource: \"payments\",\n\t});\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveIngressProviderEventId(input: {\n\tprovider: string;\n\tconnectionId?: string;\n\tresourceKind: string;\n\tresourceId: string;\n\tauthoritativeStateOrVersion: string;\n}): string {\n\tconst material = [\n\t\tinput.provider,\n\t\tinput.connectionId ?? \"\",\n\t\tinput.resourceKind,\n\t\tinput.resourceId,\n\t\tinput.authoritativeStateOrVersion,\n\t].join(\"\\0\");\n\treturn createHash(\"sha256\").update(material).digest(\"hex\");\n}\n","import type {\n\tBillingInvoiceStatus,\n\tBillingMoney,\n\tBillingPaymentStatus,\n\tBillingProviderName,\n\tBillingSubscriptionStatus,\n} from \"../types.ts\";\n\nexport interface CanonicalMoney {\n\tcurrency: string;\n\tvalue: string;\n}\n\nexport interface CanonicalPayment {\n\tkind: \"payment\";\n\tprovider: BillingProviderName;\n\tproviderPaymentId: string;\n\tproviderCustomerId?: string | null;\n\tproviderProfileId?: string | null;\n\tproviderSubscriptionId?: string | null;\n\tproviderPaymentLinkId?: string | null;\n\tstatus: BillingPaymentStatus;\n\tamount: BillingMoney;\n\tamountRefunded?: BillingMoney | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tpaidAt?: string | null;\n\tcreatedAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport interface CanonicalSubscription {\n\tkind: \"subscription\";\n\tprovider: BillingProviderName;\n\tproviderSubscriptionId: string;\n\tproviderCustomerId: string;\n\tproviderProfileId?: string | null;\n\tstatus: BillingSubscriptionStatus;\n\tamount?: BillingMoney | null;\n\tcurrency?: string | null;\n\tinterval?: string | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tnextPaymentDate?: string | null;\n\tcreatedAt?: string | null;\n\tcanceledAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport interface CanonicalInvoice {\n\tkind: \"invoice\";\n\tprovider: BillingProviderName;\n\tproviderInvoiceId: string;\n\tproviderProfileId?: string | null;\n\tproviderCustomerId?: string | null;\n\tstatus: BillingInvoiceStatus;\n\tamount?: BillingMoney | null;\n\tamountPaid?: BillingMoney | null;\n\tdescription?: string | null;\n\tmetadata: unknown;\n\tissuedAt?: string | null;\n\tpaidAt?: string | null;\n\tcreatedAt?: string | null;\n\tupdatedAt?: string | null;\n\traw: unknown;\n}\n\nexport type CanonicalBillingDocument =\n\t| CanonicalPayment\n\t| CanonicalSubscription\n\t| CanonicalInvoice;\n\nexport function canonicalDocumentSubjectId(\n\tdocument: CanonicalBillingDocument,\n): string {\n\tif (document.kind === \"payment\") {\n\t\treturn document.providerPaymentId;\n\t}\n\tif (document.kind === \"subscription\") {\n\t\treturn document.providerSubscriptionId;\n\t}\n\treturn document.providerInvoiceId;\n}\n\nexport function canonicalDocumentRevision(document: CanonicalBillingDocument): {\n\tproviderUpdatedAt?: Date;\n\tsequence?: string;\n} {\n\tconst stamp =\n\t\tdocument.updatedAt ??\n\t\t(document.kind === \"payment\"\n\t\t\t? document.paidAt ?? document.createdAt\n\t\t\t: document.kind === \"subscription\"\n\t\t\t\t? document.canceledAt ?? document.createdAt\n\t\t\t\t: document.paidAt ?? document.createdAt);\n\treturn {\n\t\tsequence: `${document.kind}:${canonicalDocumentSubjectId(document)}:${documentFingerprint(document)}`,\n\t\t...(stamp ? { providerUpdatedAt: new Date(stamp) } : {}),\n\t};\n}\n\nfunction documentFingerprint(document: CanonicalBillingDocument): string {\n\tconst amount =\n\t\tdocument.kind === \"payment\"\n\t\t\t? `${document.amount.currency}:${document.amount.value}`\n\t\t\t: `${document.amount?.currency ?? \"\"}:${document.amount?.value ?? \"\"}`;\n\tconst refunded =\n\t\tdocument.kind === \"payment\"\n\t\t\t? `${document.amountRefunded?.currency ?? \"\"}:${document.amountRefunded?.value ?? \"\"}`\n\t\t\t: \"\";\n\treturn [\n\t\tdocument.status,\n\t\tamount,\n\t\trefunded,\n\t\tdocument.updatedAt ?? \"\",\n\t\tdocument.kind === \"payment\"\n\t\t\t? (document.paidAt ?? \"\")\n\t\t\t: document.kind === \"subscription\"\n\t\t\t\t? (document.canceledAt ?? \"\")\n\t\t\t\t: (document.paidAt ?? \"\"),\n\t].join(\":\");\n}\n","import type { AthenaIngressIR } from \"../ingress/ir.ts\";\nimport type { CanonicalEventCausality } from \"./ir.ts\";\n\nexport function causalityFromIngress(\n\tingress: AthenaIngressIR,\n\tcausationId?: string,\n): CanonicalEventCausality {\n\treturn {\n\t\t...(ingress.correlationId\n\t\t\t? { correlationId: ingress.correlationId }\n\t\t\t: {}),\n\t\t...(causationId ? { causationId } : { causationId: ingress.id }),\n\t};\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveCanonicalEventId(material: string): string {\n\tconst hex = createHash(\"sha256\").update(material).digest(\"hex\").slice(0, 32);\n\treturn `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\n}\n","import type { CanonicalBillingEventName } from \"../../runtime/events/catalog.ts\";\nimport { causalityFromIngress } from \"../../runtime/events/causality.ts\";\nimport { deriveCanonicalEventId } from \"../../runtime/events/identity.ts\";\nimport type { CanonicalEventIR } from \"../../runtime/events/ir.ts\";\nimport type { AthenaIngressIR } from \"../../runtime/ingress/ir.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"./document.ts\";\n\nexport type CanonicalBillingEvent = CanonicalEventIR<\n\tCanonicalBillingEventName,\n\tCanonicalBillingDocument\n>;\n\nexport class AthenaBillingIllegalTransitionError extends Error {\n\treadonly code = \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n\n\tconstructor(previous: string, current: string) {\n\t\tsuper(\n\t\t\t`Canonical billing transition ${previous} → ${current} is not allowed.`,\n\t\t);\n\t\tthis.name = \"AthenaBillingIllegalTransitionError\";\n\t}\n}\n\nconst PAYMENT_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\tpending: new Set([\"pending\", \"authorized\", \"paid\", \"failed\", \"canceled\"]),\n\tauthorized: new Set([\"authorized\", \"paid\", \"failed\", \"canceled\"]),\n\tpaid: new Set([\"paid\", \"refunded\", \"canceled\"]),\n\tfailed: new Set([\"failed\"]),\n\tcanceled: new Set([\"canceled\"]),\n\trefunded: new Set([\"refunded\"]),\n};\n\nconst SUBSCRIPTION_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\ttrialing: new Set([\"trialing\", \"active\", \"past_due\", \"canceled\", \"paused\"]),\n\tactive: new Set([\"active\", \"past_due\", \"canceled\", \"paused\"]),\n\tpast_due: new Set([\"past_due\", \"active\", \"canceled\", \"paused\"]),\n\tpaused: new Set([\"paused\", \"active\", \"canceled\"]),\n\tcanceled: new Set([\"canceled\"]),\n};\n\nconst INVOICE_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n\tdraft: new Set([\"draft\", \"open\", \"void\"]),\n\topen: new Set([\"open\", \"paid\", \"void\", \"uncollectible\"]),\n\tpaid: new Set([\"paid\"]),\n\tvoid: new Set([\"void\"]),\n\tuncollectible: new Set([\"uncollectible\"]),\n};\n\nfunction allowedStatuses(\n\tkind: CanonicalBillingDocument[\"kind\"],\n\tstatus: string,\n): ReadonlySet<string> | undefined {\n\tif (kind === \"payment\") {\n\t\treturn PAYMENT_TRANSITIONS[status];\n\t}\n\tif (kind === \"subscription\") {\n\t\treturn SUBSCRIPTION_TRANSITIONS[status];\n\t}\n\treturn INVOICE_TRANSITIONS[status];\n}\n\nexport function assertCanonicalBillingTransition(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): void {\n\tif (previous == null || previous.kind !== current.kind) {\n\t\treturn;\n\t}\n\tconst allowed = allowedStatuses(previous.kind, previous.status);\n\tif (allowed == null || !allowed.has(current.status)) {\n\t\tthrow new AthenaBillingIllegalTransitionError(\n\t\t\t`${previous.kind}:${previous.status}`,\n\t\t\t`${current.kind}:${current.status}`,\n\t\t);\n\t}\n}\n\nfunction eventNameForTransition(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): CanonicalBillingEventName | undefined {\n\tif (current.kind === \"payment\") {\n\t\tif (previous == null) {\n\t\t\tif (current.status === \"paid\") {\n\t\t\t\treturn \"billing.payment.paid\";\n\t\t\t}\n\t\t\tif (current.status === \"failed\") {\n\t\t\t\treturn \"billing.payment.failed\";\n\t\t\t}\n\t\t\tif (current.status === \"canceled\") {\n\t\t\t\treturn \"billing.payment.canceled\";\n\t\t\t}\n\t\t\tif (current.status === \"refunded\") {\n\t\t\t\treturn \"billing.payment.refunded\";\n\t\t\t}\n\t\t\tif (current.status === \"pending\") {\n\t\t\t\treturn \"billing.payment.pending\";\n\t\t\t}\n\t\t\treturn \"billing.payment.created\";\n\t\t}\n\t\tif (previous.kind === \"payment\" && previous.status === current.status) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (current.status === \"paid\") {\n\t\t\treturn \"billing.payment.paid\";\n\t\t}\n\t\tif (current.status === \"failed\") {\n\t\t\treturn \"billing.payment.failed\";\n\t\t}\n\t\tif (current.status === \"canceled\") {\n\t\t\treturn \"billing.payment.canceled\";\n\t\t}\n\t\tif (current.status === \"refunded\") {\n\t\t\treturn \"billing.payment.refunded\";\n\t\t}\n\t\tif (current.status === \"pending\") {\n\t\t\treturn \"billing.payment.pending\";\n\t\t}\n\t\treturn \"billing.payment.created\";\n\t}\n\tif (current.kind === \"subscription\") {\n\t\tif (current.status === \"canceled\") {\n\t\t\treturn \"billing.subscription.canceled\";\n\t\t}\n\t\tif (current.status === \"active\") {\n\t\t\treturn previous == null\n\t\t\t\t? \"billing.subscription.created\"\n\t\t\t\t: \"billing.subscription.active\";\n\t\t}\n\t\treturn previous == null ? \"billing.subscription.created\" : undefined;\n\t}\n\tif (current.status === \"paid\") {\n\t\treturn \"billing.invoice.paid\";\n\t}\n\treturn previous == null ? \"billing.invoice.created\" : undefined;\n}\n\nexport function canonicalizeBillingEvents(input: {\n\tingress: AthenaIngressIR;\n\tprevious: CanonicalBillingDocument | null;\n\tcurrent: CanonicalBillingDocument;\n}): readonly CanonicalBillingEvent[] {\n\tconst name = eventNameForTransition(input.previous, input.current);\n\tif (!name) {\n\t\treturn [];\n\t}\n\tconst revision = canonicalDocumentRevision(input.current);\n\treturn [\n\t\t{\n\t\t\tid: deriveCanonicalEventId(\n\t\t\t\t[\n\t\t\t\t\tinput.ingress.id,\n\t\t\t\t\tname,\n\t\t\t\t\tinput.current.kind,\n\t\t\t\t\tcanonicalDocumentSubjectId(input.current),\n\t\t\t\t\tinput.current.status,\n\t\t\t\t].join(\"\\0\"),\n\t\t\t),\n\t\t\tname,\n\t\t\tsource: {\n\t\t\t\tdomain: \"billing\",\n\t\t\t\tprovider:\n\t\t\t\t\ttypeof input.current.provider === \"string\"\n\t\t\t\t\t\t? input.current.provider\n\t\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t\tsubject: {\n\t\t\t\ttype: input.current.kind,\n\t\t\t\tid: canonicalDocumentSubjectId(input.current),\n\t\t\t},\n\t\t\tingressId: input.ingress.id,\n\t\t\tcausality: causalityFromIngress(input.ingress),\n\t\t\toccurredAt: revision.providerUpdatedAt ?? input.ingress.receivedAt,\n\t\t\tobservedAt: input.ingress.receivedAt,\n\t\t\trevision,\n\t\t\tpayload: input.current,\n\t\t},\n\t];\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\n\nexport const MOLLIE_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;\n\nexport function verifyMollieWebhookSignature(input: {\n\tbody: Uint8Array;\n\tsignatureHeader?: string;\n\tsigningSecrets: readonly string[];\n}): boolean {\n\tif (input.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\treturn false;\n\t}\n\tconst header = input.signatureHeader?.trim();\n\tif (!header || input.signingSecrets.length === 0) {\n\t\treturn false;\n\t}\n\tconst providedHeaders = header\n\t\t.split(/[\\n,]/u)\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n\tfor (const candidate of providedHeaders) {\n\t\tconst provided = candidate.startsWith(\"sha256=\")\n\t\t\t? candidate.slice(7)\n\t\t\t: candidate;\n\t\tconst providedBytes = decodeMollieWebhookSignatureHex(provided);\n\t\tif (providedBytes == null) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const secret of input.signingSecrets) {\n\t\t\tconst calculated = createHmac(\"sha256\", secret).update(input.body).digest();\n\t\t\tif (\n\t\t\t\tcalculated.length === providedBytes.length &&\n\t\t\t\ttimingSafeEqual(calculated, providedBytes)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n/** Mollie next-gen `X-Mollie-Signature` is HMAC-SHA256 hex (`sha256=<hex>`). */\nfunction decodeMollieWebhookSignatureHex(value: string): Buffer | null {\n\tconst hex = value.trim();\n\tif (!/^[0-9a-fA-F]+$/.test(hex) || hex.length !== 64) {\n\t\treturn null;\n\t}\n\treturn Buffer.from(hex, \"hex\");\n}\n","import {\n\tATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\tAthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { MOLLIE_WEBHOOK_MAX_BODY_BYTES } from \"./verify-webhook.ts\";\n\nexport const MOLLIE_WEBHOOK_MAX_AGE_MS = 15 * 60 * 1000;\n\nexport type MollieWebhookEnvelope =\n\t| { kind: \"classic\"; id: string }\n\t| {\n\t\tkind: \"next_gen\";\n\t\tid: string;\n\t\ttype: string;\n\t\tresource: string;\n\t\tentityId: string;\n\t\tcreatedAt: string;\n\t};\n\nexport type MollieWebhookBodyKind = \"empty\" | \"json\" | \"form\" | \"unknown\";\n\nexport interface MollieWebhookEnvelopeDiagnostics {\n\tbodyBytes: number;\n\tbodyKind: MollieWebhookBodyKind;\n\tcontentType?: string;\n}\n\nfunction decodeBody(body: Uint8Array): string {\n\treturn new TextDecoder().decode(body);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function classifyMollieWebhookBody(\n\tbody: Uint8Array,\n\tcontentType?: string,\n): MollieWebhookEnvelopeDiagnostics {\n\tconst text = decodeBody(body).trim();\n\tlet bodyKind: MollieWebhookBodyKind = \"unknown\";\n\tif (text.length === 0) {\n\t\tbodyKind = \"empty\";\n\t} else if (text.startsWith(\"{\") || text.startsWith(\"[\")) {\n\t\tbodyKind = \"json\";\n\t} else if (text.includes(\"=\")) {\n\t\tbodyKind = \"form\";\n\t}\n\treturn {\n\t\tbodyBytes: body.byteLength,\n\t\tbodyKind,\n\t\t...(contentType ? { contentType } : {}),\n\t};\n}\n\nfunction envelopeError(\n\tmessage: string,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): AthenaEventIngressError {\n\treturn new AthenaEventIngressError({\n\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\tdiagnostics,\n\t\tdomain: \"billing\",\n\t\tmessage,\n\t\tprovider: \"mollie\",\n\t\tretryable: false,\n\t});\n}\n\nfunction assertMollieWebhookBodySize(\n\tbody: Uint8Array,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): void {\n\tif (body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\tthrow envelopeError(\"Mollie webhook payload exceeds size limit.\", diagnostics);\n\t}\n}\n\nfunction assertMollieWebhookCreatedAt(\n\tcreatedAt: string | undefined,\n\tdiagnostics: MollieWebhookEnvelopeDiagnostics,\n): asserts createdAt is string {\n\tif (createdAt == null || createdAt.trim() === \"\") {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is required.\", diagnostics);\n\t}\n\tconst created = Date.parse(createdAt);\n\tif (!Number.isFinite(created)) {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is invalid.\", diagnostics);\n\t}\n\tif (Math.abs(Date.now() - created) > MOLLIE_WEBHOOK_MAX_AGE_MS) {\n\t\tthrow envelopeError(\"Mollie webhook createdAt is stale.\", diagnostics);\n\t}\n}\n\nexport function parseMollieWebhookBody(\n\tbody: Uint8Array,\n\tcontentType?: string,\n): MollieWebhookEnvelope {\n\tconst diagnostics = classifyMollieWebhookBody(body, contentType);\n\tassertMollieWebhookBodySize(body, diagnostics);\n\tconst text = decodeBody(body).trim();\n\tif (diagnostics.bodyKind === \"json\") {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(text);\n\t\t} catch {\n\t\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t\t}\n\t\tif (\n\t\t\tisRecord(parsed) &&\n\t\t\ttypeof parsed.id === \"string\" &&\n\t\t\ttypeof parsed.entityId === \"string\"\n\t\t) {\n\t\t\tconst createdAt =\n\t\t\t\ttypeof parsed.createdAt === \"string\" ? parsed.createdAt : undefined;\n\t\t\tassertMollieWebhookCreatedAt(createdAt, diagnostics);\n\t\t\treturn {\n\t\t\t\tkind: \"next_gen\",\n\t\t\t\tid: parsed.id,\n\t\t\t\ttype: typeof parsed.type === \"string\" ? parsed.type : \"unknown\",\n\t\t\t\tresource:\n\t\t\t\t\ttypeof parsed.resource === \"string\" ? parsed.resource : \"event\",\n\t\t\t\tentityId: parsed.entityId,\n\t\t\t\tcreatedAt,\n\t\t\t};\n\t\t}\n\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t}\n\tconst params = new URLSearchParams(text);\n\tconst id = params.get(\"id\");\n\tif (!id) {\n\t\tthrow envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n\t}\n\treturn { kind: \"classic\", id };\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingInvoice,\n\tBillingInvoiceStatus,\n\tBillingMoney,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"invoices.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieInvoiceStatus(\n\tstatus: string,\n): BillingInvoiceStatus {\n\tif (status === \"draft\") {\n\t\treturn \"draft\";\n\t}\n\tif (\n\t\tstatus === \"issuing\" ||\n\t\tstatus === \"issued\" ||\n\t\tstatus === \"open\" ||\n\t\tstatus === \"pending-payment\"\n\t) {\n\t\treturn \"open\";\n\t}\n\tif (status === \"paid\") {\n\t\treturn \"paid\";\n\t}\n\tif (status === \"cancelled\" || status === \"canceled\") {\n\t\treturn \"void\";\n\t}\n\tif (status === \"failed\") {\n\t\treturn \"uncollectible\";\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie invoice status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieInvoice(raw: unknown): BillingInvoice {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie invoice response is missing an invoice id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMollieInvoiceStatus(raw.status)\n\t\t\t: projectMollieInvoiceStatus(\"\");\n\treturn {\n\t\tamount: projectMoney(raw.totalAmount) ?? null,\n\t\tamountPaid: projectMoney(raw.amountPaid) ?? null,\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tdescription: optionalString(raw.description),\n\t\tissuedAt: optionalString(raw.issuedAt),\n\t\tmetadata: raw.metadata,\n\t\tpaidAt: optionalString(raw.paidAt),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: optionalString(raw.customerId),\n\t\tproviderInvoiceId: raw.id,\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingSubscription,\n\tBillingSubscriptionStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"subscriptions.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieSubscriptionStatus(\n\tstatus: string,\n): BillingSubscriptionStatus {\n\tif (status === \"pending\") {\n\t\treturn \"trialing\";\n\t}\n\tif (status === \"active\") {\n\t\treturn \"active\";\n\t}\n\tif (status === \"canceled\" || status === \"completed\") {\n\t\treturn \"canceled\";\n\t}\n\tif (status === \"suspended\") {\n\t\treturn \"past_due\";\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie subscription status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieSubscription(\n\traw: unknown,\n\tcustomerId?: string,\n): BillingSubscription {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie subscription response is missing a subscription id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst resolvedCustomerId =\n\t\ttypeof raw.customerId === \"string\" ? raw.customerId : customerId;\n\tif (typeof resolvedCustomerId !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie subscription response is missing a customer id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMollieSubscriptionStatus(raw.status)\n\t\t\t: projectMollieSubscriptionStatus(\"\");\n\tconst amount = projectMoney(raw.amount);\n\treturn {\n\t\tamount: amount ?? null,\n\t\tcanceledAt: optionalString(raw.canceledAt),\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tcurrency: amount?.currency ?? null,\n\t\tdescription: optionalString(raw.description),\n\t\tinterval: optionalString(raw.interval),\n\t\tmetadata: raw.metadata,\n\t\tnextPaymentDate: optionalString(raw.nextPaymentDate),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: resolvedCustomerId,\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\tproviderSubscriptionId: raw.id,\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingPayment,\n\tBillingPaymentStatus,\n} from \"../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"payments.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nfunction unknownStatusError(status: string): AthenaBillingProviderRequestError {\n\treturn new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie payment status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMolliePaymentStatus(\n\tstatus: string,\n): BillingPaymentStatus {\n\tif (status === \"open\" || status === \"pending\") {\n\t\treturn \"pending\";\n\t}\n\tif (status === \"authorized\") {\n\t\treturn \"authorized\";\n\t}\n\tif (status === \"paid\") {\n\t\treturn \"paid\";\n\t}\n\tif (status === \"failed\") {\n\t\treturn \"failed\";\n\t}\n\tif (status === \"canceled\") {\n\t\treturn \"canceled\";\n\t}\n\tif (status === \"expired\") {\n\t\treturn \"failed\";\n\t}\n\tthrow unknownStatusError(status);\n}\n\nexport function projectMolliePayment(raw: unknown): BillingPayment {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment response is missing a payment id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst amount = projectMoney(raw.amount);\n\tif (amount == null) {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment response is missing amount.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status =\n\t\ttypeof raw.status === \"string\"\n\t\t\t? projectMolliePaymentStatus(raw.status)\n\t\t\t: projectMolliePaymentStatus(\"\");\n\treturn {\n\t\tid: raw.id,\n\t\tamount,\n\t\tamountRefunded: projectMoney(raw.amountRefunded) ?? null,\n\t\tcreatedAt: optionalString(raw.createdAt),\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tpaidAt: optionalString(raw.paidAt),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: optionalString(raw.customerId),\n\t\tproviderPaymentId: raw.id,\n\t\tproviderPaymentLinkId: optionalString(raw.paymentLinkId),\n\t\tproviderProfileId: optionalString(raw.profileId),\n\t\tproviderSubscriptionId: optionalString(raw.subscriptionId),\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import type { CanonicalBillingDocument } from \"../../../../canonical/document.ts\";\nimport { projectMollieInvoice } from \"./projection/invoice.ts\";\nimport { projectMollieSubscription } from \"./projection/subscription.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\n\nexport function projectMollieResourceToCanonical(\n\tresource: unknown,\n\tkind: \"payment\" | \"subscription\" | \"invoice\",\n): CanonicalBillingDocument {\n\tif (kind === \"subscription\") {\n\t\tconst projected = projectMollieSubscription(resource);\n\t\treturn {\n\t\t\tkind: \"subscription\",\n\t\t\tprovider: projected.provider,\n\t\t\tproviderSubscriptionId: projected.providerSubscriptionId,\n\t\t\tproviderCustomerId: projected.providerCustomerId,\n\t\t\tproviderProfileId: projected.providerProfileId,\n\t\t\tstatus: projected.status,\n\t\t\tamount: projected.amount,\n\t\t\tcurrency: projected.currency,\n\t\t\tinterval: projected.interval,\n\t\t\tdescription: projected.description,\n\t\t\tmetadata: projected.metadata,\n\t\t\tnextPaymentDate: projected.nextPaymentDate,\n\t\t\tcreatedAt: projected.createdAt,\n\t\t\tcanceledAt: projected.canceledAt,\n\t\t\traw: projected.raw,\n\t\t};\n\t}\n\tif (kind === \"invoice\") {\n\t\tconst projected = projectMollieInvoice(resource);\n\t\treturn {\n\t\t\tkind: \"invoice\",\n\t\t\tprovider: projected.provider,\n\t\t\tproviderInvoiceId: projected.providerInvoiceId,\n\t\t\tproviderProfileId: projected.providerProfileId,\n\t\t\tproviderCustomerId: projected.providerCustomerId,\n\t\t\tstatus: projected.status,\n\t\t\tamount: projected.amount,\n\t\t\tamountPaid: projected.amountPaid,\n\t\t\tdescription: projected.description,\n\t\t\tmetadata: projected.metadata,\n\t\t\tissuedAt: projected.issuedAt,\n\t\t\tpaidAt: projected.paidAt,\n\t\t\tcreatedAt: projected.createdAt,\n\t\t\traw: projected.raw,\n\t\t};\n\t}\n\tconst projected = projectMolliePayment(resource);\n\treturn {\n\t\tkind: \"payment\",\n\t\tprovider: projected.provider,\n\t\tproviderPaymentId: projected.providerPaymentId,\n\t\tproviderCustomerId: projected.providerCustomerId,\n\t\tproviderProfileId: projected.providerProfileId,\n\t\tproviderSubscriptionId: projected.providerSubscriptionId,\n\t\tproviderPaymentLinkId: projected.providerPaymentLinkId,\n\t\tstatus: projected.status,\n\t\tamount: projected.amount,\n\t\tamountRefunded: projected.amountRefunded,\n\t\tdescription: projected.description,\n\t\tmetadata: projected.metadata,\n\t\tpaidAt: projected.paidAt,\n\t\tcreatedAt: projected.createdAt,\n\t\traw: projected.raw,\n\t};\n}\n","import {\n\tATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\tATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\tAthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../../runtime/ingress/identity.ts\";\nimport type { AthenaIngressIR } from \"../../../../../runtime/ingress/ir.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"../../../../canonical/document.ts\";\nimport { canonicalizeBillingEvents } from \"../../../../canonical/transition.ts\";\nimport type {\n\tBillingProviderWebhookPort,\n\tBillingWebhookVerificationStrategy,\n} from \"../webhook-port.ts\";\nimport {\n\tclassifyMollieWebhookBody,\n\ttype MollieWebhookEnvelope,\n\tparseMollieWebhookBody,\n} from \"./parse-webhook.ts\";\nimport { projectMollieResourceToCanonical } from \"./project-document.ts\";\nimport {\n\tMOLLIE_WEBHOOK_MAX_BODY_BYTES,\n\tverifyMollieWebhookSignature,\n} from \"./verify-webhook.ts\";\n\nexport type MollieWebhookResource = {\n\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\traw: unknown;\n};\n\nexport function mollieResourceKind(\n\tenvelope: MollieWebhookEnvelope,\n): \"payment\" | \"subscription\" | \"invoice\" {\n\tif (envelope.kind === \"classic\") {\n\t\treturn \"payment\";\n\t}\n\tif (\n\t\tenvelope.type.startsWith(\"subscription.\") ||\n\t\tenvelope.resource === \"subscription\"\n\t) {\n\t\treturn \"subscription\";\n\t}\n\tif (\n\t\tenvelope.type.startsWith(\"sales-invoice.\") ||\n\t\tenvelope.type.startsWith(\"invoice.\") ||\n\t\tenvelope.resource === \"invoice\"\n\t) {\n\t\treturn \"invoice\";\n\t}\n\treturn \"payment\";\n}\n\nexport function mollieEnvelopeResourceId(\n\tenvelope: MollieWebhookEnvelope,\n): string {\n\treturn envelope.kind === \"classic\" ? envelope.id : envelope.entityId;\n}\n\nfunction resolveVerification(input: {\n\trequireSignature?: boolean;\n\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\tsigningSecrets?: readonly string[];\n\tverification?: BillingWebhookVerificationStrategy;\n}): BillingWebhookVerificationStrategy {\n\tif (input.verification) {\n\t\treturn input.verification;\n\t}\n\tif (input.requireSignature === false) {\n\t\treturn \"authoritative_refetch\";\n\t}\n\tif (\n\t\tinput.requireSignature === true ||\n\t\tinput.resolveSigningSecrets != null ||\n\t\t(input.signingSecrets && input.signingSecrets.length > 0)\n\t) {\n\t\treturn \"signature_and_refetch\";\n\t}\n\treturn \"authoritative_refetch\";\n}\n\nfunction signingSecretsForIngress(\n\tinput: {\n\t\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\t\tsigningSecrets?: readonly string[];\n\t},\n\tconnectionId: string | undefined,\n): readonly string[] {\n\tif (input.resolveSigningSecrets) {\n\t\tif (connectionId == null || connectionId.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn input.resolveSigningSecrets(connectionId);\n\t}\n\treturn input.signingSecrets ?? [];\n}\n\nexport function createMollieWebhookPort(input: {\n\tsigningSecrets?: readonly string[];\n\tresolveSigningSecrets?: (connectionId: string) => readonly string[];\n\trequireSignature?: boolean;\n\tverification?: BillingWebhookVerificationStrategy;\n\tresolveResource: (input: {\n\t\tconnectionId?: string;\n\t\tkind: \"payment\" | \"subscription\" | \"invoice\";\n\t\tid: string;\n\t}) => Promise<unknown>;\n}): BillingProviderWebhookPort<MollieWebhookEnvelope, MollieWebhookResource> {\n\tconst verification = resolveVerification(input);\n\treturn {\n\t\tverification,\n\t\tparseIngress(ingress: AthenaIngressIR): MollieWebhookEnvelope {\n\t\t\tif (ingress.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(\n\t\t\t\t\t\tingress.body,\n\t\t\t\t\t\tingress.headers[\"content-type\"],\n\t\t\t\t\t),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Mollie webhook payload exceeds size limit.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst eventsRoute = ingress.operation === \"webhook.mollie.events\";\n\t\t\tconst classicRoute = ingress.operation === \"webhook.mollie.classic\";\n\t\t\tconst contentType = ingress.headers[\"content-type\"];\n\t\t\tconst envelope = parseMollieWebhookBody(ingress.body, contentType);\n\t\t\tif (envelope.kind === \"next_gen\") {\n\t\t\t\tconst requireSignature =\n\t\t\t\t\teventsRoute ||\n\t\t\t\t\t(!classicRoute &&\n\t\t\t\t\t\t(verification === \"signature\" ||\n\t\t\t\t\t\t\tverification === \"signature_and_refetch\"));\n\t\t\t\tif (requireSignature) {\n\t\t\t\t\tconst signature = ingress.headers[\"x-mollie-signature\"];\n\t\t\t\t\tconst signingSecrets = signingSecretsForIngress(input, ingress.connectionId);\n\t\t\t\t\tif (signingSecrets.length === 0) {\n\t\t\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\"Mollie next-gen webhook HMAC secret is not configured. Set billing.ingestion.webhooks.providers.mollie.nextGen.signingSecret to the webhook secret Mollie returned at create, or let automatic registration persist that secret.\",\n\t\t\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t!verifyMollieWebhookSignature({\n\t\t\t\t\t\t\tbody: ingress.body,\n\t\t\t\t\t\t\tsignatureHeader: signature,\n\t\t\t\t\t\t\tsigningSecrets,\n\t\t\t\t\t\t})\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\t\t\tmessage: \"Mollie webhook signature is invalid.\",\n\t\t\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (classicRoute && envelope.kind !== \"classic\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(ingress.body, contentType),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Classic Mollie webhook expected a form id payload.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (eventsRoute && envelope.kind !== \"next_gen\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\t\t\t\t\tdiagnostics: classifyMollieWebhookBody(ingress.body, contentType),\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage: \"Next-gen Mollie webhook expected a JSON event payload.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn envelope;\n\t\t},\n\t\tasync resolveAuthoritativeState(envelope, ingress) {\n\t\t\tif (verification === \"signature\") {\n\t\t\t\tthrow new AthenaEventIngressError({\n\t\t\t\t\tcode: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n\t\t\t\t\tdomain: \"billing\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Mollie ingest requires authoritative refetch; signature-only is not supported.\",\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tretryable: false,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst kind = mollieResourceKind(envelope);\n\t\t\tconst id = mollieEnvelopeResourceId(envelope);\n\t\t\tconst raw = await input.resolveResource({\n\t\t\t\tkind,\n\t\t\t\tid,\n\t\t\t\t...(ingress.connectionId\n\t\t\t\t\t? { connectionId: ingress.connectionId }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t\treturn { kind, raw };\n\t\t},\n\t\tprojectDocument(resource) {\n\t\t\treturn projectMollieResourceToCanonical(resource.raw, resource.kind);\n\t\t},\n\t\tcanonicalizeEvents(context) {\n\t\t\treturn canonicalizeBillingEvents(context);\n\t\t},\n\t};\n}\n\nexport function mollieDeterministicEventId(input: {\n\tconnectionId?: string;\n\tdocument: CanonicalBillingDocument;\n}): string {\n\tconst revision = canonicalDocumentRevision(input.document);\n\treturn deriveIngressProviderEventId({\n\t\tprovider: \"mollie\",\n\t\tconnectionId: input.connectionId,\n\t\tresourceKind: input.document.kind,\n\t\tresourceId: canonicalDocumentSubjectId(input.document),\n\t\tauthoritativeStateOrVersion: revision.sequence ?? input.document.status,\n\t});\n}\n","import type { CanonicalBillingEventName } from \"./catalog.ts\";\nimport type { CanonicalEventIR } from \"./ir.ts\";\n\nexport type CanonicalEventHook = (\n\tevent: CanonicalEventIR<CanonicalBillingEventName>,\n) => void | Promise<void>;\n\nconst hooks = new Map<string, CanonicalEventHook[]>();\n\nexport function onCanonicalEvent(\n\tname: CanonicalBillingEventName,\n\thook: CanonicalEventHook,\n): void {\n\tconst existing = hooks.get(name) ?? [];\n\texisting.push(hook);\n\thooks.set(name, existing);\n}\n\nexport async function dispatchCanonicalEventAfterCommit(\n\tevents: readonly CanonicalEventIR<CanonicalBillingEventName>[],\n): Promise<void> {\n\tfor (const event of events) {\n\t\tconst registered = hooks.get(event.name) ?? [];\n\t\tfor (const hook of registered) {\n\t\t\tawait hook(event);\n\t\t}\n\t}\n}\n\n/** @deprecated Mutation lifecycle hooks are not this registry. Prefer dispatchCanonicalEventAfterCommit. */\nexport async function dispatchCanonicalEventHooks(\n\tevents: readonly CanonicalEventIR<CanonicalBillingEventName>[],\n): Promise<void> {\n\tawait dispatchCanonicalEventAfterCommit(events);\n}\n","import { isAthenaEventIngressError } from \"./errors.ts\";\nimport type { AthenaIngressStatus } from \"./ir.ts\";\n\nexport const INGRESS_PROCESSING_LEASE_MS = 5 * 60 * 1000;\nexport const INGRESS_MAX_ATTEMPTS = 8;\nexport const INGRESS_MAX_BACKOFF_MS = 60 * 60 * 1000;\n\nexport type IngressFailureStage =\n\t| \"parse\"\n\t| \"verify\"\n\t| \"refetch\"\n\t| \"project\"\n\t| \"persist\"\n\t| \"unknown\";\n\nexport interface IngressFailureRecord {\n\tattemptCount: number;\n\tcode: string;\n\tfirstFailedAt: string;\n\tlastFailedAt: string;\n\tnextAttemptAt?: string;\n\tretryable: boolean;\n\tstage: IngressFailureStage;\n}\n\nexport interface ClassifiedIngressFailure {\n\tcode: string;\n\terror: IngressFailureRecord;\n\tnextAttemptAt?: Date;\n\tretryable: boolean;\n\tstage: IngressFailureStage;\n\tstatus: Extract<AthenaIngressStatus, \"retryable_failure\" | \"terminal_failure\">;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction pgCode(error: unknown): string | undefined {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\tif (typeof error.code === \"string\") {\n\t\treturn error.code;\n\t}\n\tconst cause = error.cause;\n\tif (isRecord(cause) && typeof cause.code === \"string\") {\n\t\treturn cause.code;\n\t}\n\treturn undefined;\n}\n\nfunction isTransientDatabaseFailure(error: unknown): boolean {\n\tconst code = pgCode(error);\n\tif (\n\t\tcode === \"40001\" ||\n\t\tcode === \"40P01\" ||\n\t\tcode === \"55P03\" ||\n\t\tcode === \"57P01\" ||\n\t\tcode === \"08006\" ||\n\t\tcode === \"08001\" ||\n\t\tcode === \"57P03\"\n\t) {\n\t\treturn true;\n\t}\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\tconst message = typeof error.message === \"string\" ? error.message : \"\";\n\treturn (\n\t\terror.name === \"AthenaBillingCapabilityError\" ||\n\t\t/timeout|ECONNRESET|ECONNREFUSED|connection terminated/i.test(message)\n\t);\n}\n\nfunction isProjectionInvariantFailure(error: unknown): boolean {\n\tif (!isRecord(error)) {\n\t\treturn false;\n\t}\n\tconst name = typeof error.name === \"string\" ? error.name : \"\";\n\tconst code = typeof error.code === \"string\" ? error.code : \"\";\n\treturn (\n\t\tname === \"AthenaBillingIllegalTransitionError\" ||\n\t\tname === \"AthenaBillingRevisionStaleError\" ||\n\t\tcode === \"ATHENA_BILLING_ILLEGAL_TRANSITION\" ||\n\t\tcode === \"ATHENA_BILLING_REVISION_STALE\"\n\t);\n}\n\nexport function backoffAfterAttempt(attemptCount: number): Date {\n\tconst exponent = Math.max(0, attemptCount - 1);\n\tconst delay = Math.min(INGRESS_MAX_BACKOFF_MS, 1000 * 2 ** exponent);\n\treturn new Date(Date.now() + delay);\n}\n\nexport function classifyIngressFailure(input: {\n\tattemptCount: number;\n\terror: unknown;\n\tfirstFailedAt?: Date;\n\tstage: IngressFailureStage;\n}): ClassifiedIngressFailure {\n\tconst now = new Date();\n\tconst firstFailedAt = input.firstFailedAt ?? now;\n\tlet code = \"ATHENA_EVENT_INGRESS_FAILED\";\n\tlet retryable = false;\n\tif (isAthenaEventIngressError(input.error)) {\n\t\tcode = input.error.code;\n\t\tretryable = input.error.retryable;\n\t} else if (isProjectionInvariantFailure(input.error)) {\n\t\tcode =\n\t\t\tisRecord(input.error) && typeof input.error.code === \"string\"\n\t\t\t\t? input.error.code\n\t\t\t\t: \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n\t\tretryable = false;\n\t} else if (isTransientDatabaseFailure(input.error)) {\n\t\tcode = pgCode(input.error) ?? \"ATHENA_EVENT_INGRESS_FAILED\";\n\t\tretryable = true;\n\t} else if (input.stage === \"refetch\" || input.stage === \"persist\") {\n\t\tretryable = true;\n\t}\n\tif (input.attemptCount >= INGRESS_MAX_ATTEMPTS) {\n\t\tretryable = false;\n\t}\n\tconst status = retryable ? \"retryable_failure\" : \"terminal_failure\";\n\tconst nextAttemptAt = retryable ? backoffAfterAttempt(input.attemptCount) : undefined;\n\tconst record: IngressFailureRecord = {\n\t\tattemptCount: input.attemptCount,\n\t\tcode,\n\t\tfirstFailedAt: firstFailedAt.toISOString(),\n\t\tlastFailedAt: now.toISOString(),\n\t\tretryable,\n\t\tstage: input.stage,\n\t\t...(nextAttemptAt ? { nextAttemptAt: nextAttemptAt.toISOString() } : {}),\n\t};\n\treturn {\n\t\tcode,\n\t\terror: record,\n\t\tretryable,\n\t\tstage: input.stage,\n\t\tstatus,\n\t\t...(nextAttemptAt ? { nextAttemptAt } : {}),\n\t};\n}\n\nexport function redactedIngressFailure(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn \"ingress failed\";\n}\n","export const BILLING_WEBHOOK_INGRESS_STAGES = [\n\t\"received\",\n\t\"parsed\",\n\t\"verified\",\n\t\"authoritative_refetch_started\",\n\t\"authoritative_refetch_completed\",\n\t\"canonicalized\",\n\t\"persisted\",\n\t\"reconciliation_started\",\n\t\"reconciliation_completed\",\n\t\"reconciliation_failed\",\n\t\"duplicate\",\n\t\"rejected\",\n] as const;\n\nexport type BillingWebhookIngressStage =\n\t(typeof BILLING_WEBHOOK_INGRESS_STAGES)[number];\n\n/** @deprecated Use `reconciliation_failed` or `rejected`. Kept for v8 rows. */\nexport type BillingWebhookIngressLegacyStage = \"failed\";\n\nexport type BillingWebhookReconciliationOutcome =\n\t| \"completed\"\n\t| \"failed\"\n\t| \"skipped\";\n\n/** Persistable CHECK value on v8 `billing_webhook_ingress_stages` (API name is `rejected`). */\nexport function persistableWebhookRejectionStage(): \"failed\" {\n\treturn \"failed\";\n}\n\nexport function isBillingWebhookIngressStage(\n\tvalue: string,\n): value is BillingWebhookIngressStage {\n\treturn (BILLING_WEBHOOK_INGRESS_STAGES as readonly string[]).includes(value);\n}\n\nexport function billingWebhookRegistrationKind(\n\toperation: string,\n): \"classic\" | \"next_gen\" {\n\treturn operation === \"webhook.mollie.classic\" ? \"classic\" : \"next_gen\";\n}\n\nexport function publicBillingRejectionCode(error: unknown): string {\n\tif (error != null && typeof error === \"object\" && \"code\" in error) {\n\t\tconst code = error.code;\n\t\tif (\n\t\t\ttypeof code === \"string\" &&\n\t\t\tcode.length > 0 &&\n\t\t\t!/secret/i.test(code)\n\t\t) {\n\t\t\treturn code;\n\t\t}\n\t}\n\treturn \"ATHENA_EVENT_INGRESS_FAILED\";\n}\n\nexport function publicBillingRejectionMessage(error: unknown): string {\n\tconst raw = error instanceof Error ? error.message : String(error);\n\tif (raw.length === 0 || /secret/i.test(raw)) {\n\t\treturn publicBillingRejectionCode(error);\n\t}\n\treturn raw.length > 240 ? `${raw.slice(0, 237)}...` : raw;\n}\n","import type { CanonicalEventIR } from \"./ir.ts\";\n\nexport interface CanonicalOutboxIntent {\n\treadonly id: string;\n\treadonly eventId: string;\n\treadonly name: string;\n\treadonly payload: unknown;\n}\n\nexport function projectOutboxIntents(\n\tevents: readonly CanonicalEventIR[],\n): CanonicalOutboxIntent[] {\n\treturn events.map((event) => ({\n\t\tid: crypto.randomUUID(),\n\t\teventId: event.id,\n\t\tname: event.name,\n\t\tpayload: event.payload,\n\t}));\n}\n","import type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\n\nexport class AthenaBillingRevisionStaleError extends Error {\n\treadonly code = \"ATHENA_BILLING_REVISION_STALE\";\n\n\tconstructor() {\n\t\tsuper(\"Canonical billing revision is stale relative to stored state.\");\n\t\tthis.name = \"AthenaBillingRevisionStaleError\";\n\t}\n}\n\nconst STATUS_RANK: Record<string, number> = {\n\tpending: 1,\n\tauthorized: 2,\n\topen: 2,\n\tdraft: 1,\n\ttrialing: 1,\n\tactive: 3,\n\tpaid: 4,\n\trefunded: 5,\n\tfailed: 4,\n\tcanceled: 4,\n\tpaused: 3,\n\tpast_due: 3,\n\tvoid: 4,\n\tuncollectible: 4,\n};\n\nfunction rank(document: CanonicalBillingDocument): number {\n\treturn STATUS_RANK[document.status] ?? 0;\n}\n\nexport function assertRevisionIsNotStale(\n\tprevious: CanonicalBillingDocument | null,\n\tcurrent: CanonicalBillingDocument,\n): void {\n\tif (previous == null || previous.kind !== current.kind) {\n\t\treturn;\n\t}\n\tconst previousTime = previous.updatedAt ?? previous.createdAt;\n\tconst currentTime = current.updatedAt ?? current.createdAt;\n\tif (\n\t\tpreviousTime &&\n\t\tcurrentTime &&\n\t\tnew Date(currentTime).getTime() < new Date(previousTime).getTime()\n\t) {\n\t\tthrow new AthenaBillingRevisionStaleError();\n\t}\n\tif (rank(current) < rank(previous)) {\n\t\tthrow new AthenaBillingRevisionStaleError();\n\t}\n}\n","import { projectOutboxIntents } from \"../../../../runtime/events/outbox.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n} from \"../../../../runtime/ingress/persistence.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport {\n\ttype CanonicalBillingEvent,\n\tassertCanonicalBillingTransition,\n\tcanonicalizeBillingEvents,\n} from \"../../../canonical/transition.ts\";\nimport type {\n\tBillingEventRepository,\n\tBillingIngressDocumentRepository,\n\tBillingOutboxRepository,\n} from \"./repository.ts\";\nimport { assertRevisionIsNotStale } from \"./revision.ts\";\n\nexport interface ApplyCanonicalBillingIngressInput {\n\tdatabase: EventIngressDatabase;\n\tingress: AthenaIngressIR;\n\tdocument: CanonicalBillingDocument;\n\tpersistence: EventIngressPersistence;\n\tdocuments: BillingIngressDocumentRepository;\n\tevents: BillingEventRepository;\n\toutbox: BillingOutboxRepository;\n\tcanonicalizeEvents?: typeof canonicalizeBillingEvents;\n}\n\nexport interface ApplyCanonicalBillingIngressResult {\n\tduplicate: boolean;\n\tevents: readonly CanonicalBillingEvent[];\n\tdocument: CanonicalBillingDocument;\n}\n\nexport async function applyCanonicalBillingIngress(\n\tinput: ApplyCanonicalBillingIngressInput,\n): Promise<ApplyCanonicalBillingIngressResult> {\n\treturn input.database.transaction(async (tx) => {\n\t\tconst locked = await input.persistence.lock(tx, input.ingress.id);\n\t\tif (locked?.status === \"processed\") {\n\t\t\treturn {\n\t\t\t\tduplicate: true,\n\t\t\t\tevents: [],\n\t\t\t\tdocument: input.document,\n\t\t\t};\n\t\t}\n\n\t\tconst previous = await input.documents.readCurrentForUpdate(\n\t\t\ttx,\n\t\t\tinput.document,\n\t\t\tinput.ingress.connectionId,\n\t\t);\n\t\tassertRevisionIsNotStale(previous, input.document);\n\t\tassertCanonicalBillingTransition(previous, input.document);\n\t\tawait input.documents.upsert(\n\t\t\ttx,\n\t\t\tinput.document,\n\t\t\tinput.ingress.connectionId,\n\t\t);\n\n\t\tconst canonicalize = input.canonicalizeEvents ?? canonicalizeBillingEvents;\n\t\tconst events = canonicalize({\n\t\t\tingress: input.ingress,\n\t\t\tprevious,\n\t\t\tcurrent: input.document,\n\t\t});\n\t\tawait input.events.append(tx, events);\n\t\tawait input.outbox.enqueue(tx, projectOutboxIntents(events));\n\t\tawait input.persistence.markProcessed(tx, {\n\t\t\tingressId: input.ingress.id,\n\t\t\teventIds: events.map((event) => event.id),\n\t\t});\n\t\treturn { duplicate: false, events, document: input.document };\n\t});\n}\n","import { dispatchCanonicalEventAfterCommit } from \"../../../../runtime/events/hooks.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../runtime/ingress/identity.ts\";\nimport {\n\tclassifyIngressFailure,\n\tINGRESS_PROCESSING_LEASE_MS,\n\ttype IngressFailureStage,\n} from \"../../../../runtime/ingress/failure.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n\tEventIngressDomainHandler,\n\tEventIngressRuntimeContext,\n} from \"../../../../runtime/ingress/runtime.ts\";\nimport {\n\ttype CanonicalBillingDocument,\n\tcanonicalDocumentRevision,\n\tcanonicalDocumentSubjectId,\n} from \"../../../canonical/document.ts\";\nimport type { CanonicalBillingEvent } from \"../../../canonical/transition.ts\";\nimport {\n\ttype BillingWebhookIngressObservability,\n\trecordBillingWebhookIngressQuietly,\n\treportBillingWebhookIngressDiagnostic,\n} from \"../../../ingestion/observability/health.ts\";\nimport {\n\ttype BillingWebhookIngressStage,\n\tbillingWebhookRegistrationKind,\n} from \"../../../ingestion/observability/stages.ts\";\nimport type { BillingProviderWebhookPort } from \"../providers/webhook-port.ts\";\nimport {\n\ttype ApplyCanonicalBillingIngressResult,\n\tapplyCanonicalBillingIngress,\n} from \"./apply.ts\";\nimport type { BillingIngressDomainContext } from \"./repository.ts\";\n\nexport function billingDeterministicEventId(input: {\n\tprovider: string;\n\tconnectionId?: string;\n\tdocument: CanonicalBillingDocument;\n}): string {\n\tconst revision = canonicalDocumentRevision(input.document);\n\treturn deriveIngressProviderEventId({\n\t\tprovider: input.provider,\n\t\tconnectionId: input.connectionId,\n\t\tresourceKind: input.document.kind,\n\t\tresourceId: canonicalDocumentSubjectId(input.document),\n\t\tauthoritativeStateOrVersion:\n\t\t\trevision.sequence ??\n\t\t\t`${input.document.status}:${revision.providerUpdatedAt?.toISOString() ?? \"\"}`,\n\t});\n}\n\nfunction observeContext(ingress: AthenaIngressIR) {\n\treturn {\n\t\tkind: billingWebhookRegistrationKind(ingress.operation),\n\t\t...(ingress.connectionId ? { connectionId: ingress.connectionId } : {}),\n\t\t...(ingress.correlationId ? { correlationId: ingress.correlationId } : {}),\n\t\tingressId: ingress.id,\n\t\t...(ingress.traceId ? { traceId: ingress.traceId } : {}),\n\t};\n}\n\nfunction observabilityWrite(\n\tctx: ReturnType<typeof observeContext>,\n\tconnectionId: string,\n\tstage: BillingWebhookIngressStage,\n) {\n\treturn {\n\t\tconnectionId,\n\t\tkind: ctx.kind,\n\t\tstage,\n\t\tingressId: ctx.ingressId,\n\t\t...(ctx.correlationId ? { correlationId: ctx.correlationId } : {}),\n\t\t...(ctx.traceId ? { traceId: ctx.traceId } : {}),\n\t};\n}\n\nexport function createBillingEventIngressHandler<TEnvelope, TResource>(input: {\n\tobservability?: BillingWebhookIngressObservability;\n\tonAuthoritativeDocument?: (input: {\n\t\tdocument: CanonicalBillingDocument;\n\t\tingress: AthenaIngressIR;\n\t}) => Promise<void> | void;\n\tport: BillingProviderWebhookPort<TEnvelope, TResource>;\n\tprovider?: string;\n}): EventIngressDomainHandler<\n\tBillingIngressDomainContext,\n\tCanonicalBillingDocument,\n\tCanonicalBillingEvent\n> {\n\tconst provider = input.provider ?? \"mollie\";\n\treturn {\n\t\tasync ingest(ingress, runtime) {\n\t\t\tconst ctx = observeContext(ingress);\n\t\t\tconst connectionId = ctx.connectionId;\n\t\t\tconst note = async (stage: BillingWebhookIngressStage) => {\n\t\t\t\tawait recordBillingWebhookIngressQuietly(input.observability, (store) =>\n\t\t\t\t\tstore.recordStage({\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\toccurredAt: new Date(),\n\t\t\t\t\t\tstage,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t\tconst acceptDuplicate = async () => {\n\t\t\t\tif (connectionId) {\n\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\tstore.recordAccepted(\n\t\t\t\t\t\t\t\tobservabilityWrite(ctx, connectionId, \"duplicate\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tawait note(\"duplicate\");\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: true,\n\t\t\t\t\tevents: [],\n\t\t\t\t\treconciliation: \"skipped\" as const,\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst early = await runtime.database.transaction(async (tx) => {\n\t\t\t\tawait runtime.persistence.insertReceived(tx, ingress, {\n\t\t\t\t\tprovider,\n\t\t\t\t});\n\t\t\t\tconst existing = await runtime.persistence.lock(tx, ingress.id);\n\t\t\t\tif (existing?.status === \"processed\") {\n\t\t\t\t\treturn { duplicate: true as const };\n\t\t\t\t}\n\t\t\t\tawait runtime.persistence.markStatus(tx, {\n\t\t\t\t\tingressId: ingress.id,\n\t\t\t\t\tleaseExpiresAt: new Date(Date.now() + INGRESS_PROCESSING_LEASE_MS),\n\t\t\t\t\tstatus: \"resolving\",\n\t\t\t\t});\n\t\t\t\treturn { duplicate: false as const };\n\t\t\t});\n\t\t\tif (early.duplicate) {\n\t\t\t\treturn acceptDuplicate();\n\t\t\t}\n\t\t\tlet stage: IngressFailureStage = \"parse\";\n\t\t\tlet result: ApplyCanonicalBillingIngressResult;\n\t\t\tlet canonicalDocument: CanonicalBillingDocument | undefined;\n\t\t\ttry {\n\t\t\t\tconst envelope = await input.port.parseIngress(ingress);\n\t\t\t\tawait note(\"parsed\");\n\t\t\t\tif (input.port.verification !== \"authoritative_refetch\") {\n\t\t\t\t\tstage = \"verify\";\n\t\t\t\t\tawait note(\"verified\");\n\t\t\t\t}\n\t\t\t\tstage = \"refetch\";\n\t\t\t\tawait note(\"authoritative_refetch_started\");\n\t\t\t\tconst resource = await input.port.resolveAuthoritativeState(\n\t\t\t\t\tenvelope,\n\t\t\t\t\tingress,\n\t\t\t\t);\n\t\t\t\tawait note(\"authoritative_refetch_completed\");\n\t\t\t\tstage = \"project\";\n\t\t\t\tcanonicalDocument = input.port.projectDocument(resource);\n\t\t\t\tconst document = canonicalDocument;\n\t\t\t\tawait note(\"canonicalized\");\n\t\t\t\tconst providerEventId = billingDeterministicEventId({\n\t\t\t\t\tprovider,\n\t\t\t\t\tconnectionId: ingress.connectionId,\n\t\t\t\t\tdocument,\n\t\t\t\t});\n\t\t\t\tconst claimed = await runtime.database.transaction((tx) =>\n\t\t\t\t\truntime.persistence.insertReceived(tx, ingress, {\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tproviderEventId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tif (claimed.duplicate) {\n\t\t\t\t\treturn acceptDuplicate();\n\t\t\t\t}\n\t\t\t\tstage = \"persist\";\n\t\t\t\tresult = await applyCanonicalBillingIngress({\n\t\t\t\t\tdatabase: runtime.database,\n\t\t\t\t\tingress,\n\t\t\t\t\tdocument,\n\t\t\t\t\tpersistence: runtime.persistence,\n\t\t\t\t\tdocuments: runtime.domain.documents,\n\t\t\t\t\tevents: runtime.domain.events,\n\t\t\t\t\toutbox: runtime.domain.outbox,\n\t\t\t\t\tcanonicalizeEvents: (context) =>\n\t\t\t\t\t\tinput.port.canonicalizeEvents(context),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tawait persistIngressFailure(runtime, ingress.id, error, stage);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst acceptStage: BillingWebhookIngressStage = result.duplicate\n\t\t\t\t? \"duplicate\"\n\t\t\t\t: \"persisted\";\n\t\t\tif (connectionId) {\n\t\t\t\tawait recordBillingWebhookIngressQuietly(input.observability, (store) =>\n\t\t\t\t\tstore.recordAccepted(\n\t\t\t\t\t\tobservabilityWrite(ctx, connectionId, acceptStage),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tawait note(acceptStage);\n\t\t\t}\n\t\t\tlet reconciliation: \"completed\" | \"failed\" | \"skipped\" = \"skipped\";\n\t\t\tif (!result.duplicate) {\n\t\t\t\ttry {\n\t\t\t\t\tawait dispatchCanonicalEventAfterCommit(result.events);\n\t\t\t\t\tif (input.onAuthoritativeDocument) {\n\t\t\t\t\t\tif (canonicalDocument == null) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"Billing webhook accepted without a canonical document.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait note(\"reconciliation_started\");\n\t\t\t\t\t\tawait input.onAuthoritativeDocument({\n\t\t\t\t\t\t\tdocument: canonicalDocument,\n\t\t\t\t\t\t\tingress,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (connectionId) {\n\t\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t\t...observabilityWrite(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\t\t\t\t\t\t\"reconciliation_completed\",\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\toutcome: \"completed\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait note(\"reconciliation_completed\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treconciliation = \"completed\";\n\t\t\t\t\t} else if (connectionId) {\n\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t...observabilityWrite(ctx, connectionId, acceptStage),\n\t\t\t\t\t\t\t\t\toutcome: \"skipped\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\treportBillingWebhookIngressDiagnostic(\n\t\t\t\t\t\t\"[athena.billing] webhook reconciliation failed after accept\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\tif (connectionId) {\n\t\t\t\t\t\tawait recordBillingWebhookIngressQuietly(\n\t\t\t\t\t\t\tinput.observability,\n\t\t\t\t\t\t\t(store) =>\n\t\t\t\t\t\t\t\tstore.recordReconciliation({\n\t\t\t\t\t\t\t\t\t...observabilityWrite(\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tconnectionId,\n\t\t\t\t\t\t\t\t\t\t\"reconciliation_failed\",\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\toutcome: \"failed\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait note(\"reconciliation_failed\");\n\t\t\t\t\t}\n\t\t\t\t\treconciliation = \"failed\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\treconciliation,\n\t\t\t};\n\t\t},\n\t};\n}\n\nasync function persistIngressFailure(\n\truntime: EventIngressRuntimeContext,\n\tingressId: string,\n\terror: unknown,\n\tstage: IngressFailureStage,\n): Promise<void> {\n\ttry {\n\t\tawait runtime.database.transaction(async (tx) => {\n\t\t\tconst locked = await runtime.persistence.lock(tx, ingressId);\n\t\t\tif (locked?.status === \"processed\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst classified = classifyIngressFailure({\n\t\t\t\tattemptCount: (locked?.attemptCount ?? 0) + 1,\n\t\t\t\terror,\n\t\t\t\tfirstFailedAt: locked?.firstFailedAt ?? undefined,\n\t\t\t\tstage,\n\t\t\t});\n\t\t\tawait runtime.persistence.markStatus(tx, {\n\t\t\t\terror: classified.error,\n\t\t\t\tfailureStage: classified.stage,\n\t\t\t\tfirstFailedAt: new Date(classified.error.firstFailedAt),\n\t\t\t\tingressId,\n\t\t\t\tlastFailedAt: new Date(classified.error.lastFailedAt),\n\t\t\t\tstatus: classified.status,\n\t\t\t\t...(classified.nextAttemptAt\n\t\t\t\t\t? { nextAttemptAt: classified.nextAttemptAt }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t});\n\t} catch {\n\t\t/* persistence of the failure row must not hide the original error */\n\t}\n}\n","import type { EventIngressDatabase } from \"../ingress/persistence.ts\";\nimport type { CanonicalEventIR } from \"./ir.ts\";\nimport type { CanonicalOutboxIntent } from \"./outbox.ts\";\n\nexport interface CanonicalEventRepository {\n\tappend(\n\t\ttx: EventIngressDatabase,\n\t\tevents: readonly CanonicalEventIR[],\n\t): Promise<void>;\n}\n\nexport interface CanonicalOutboxRepository {\n\tenqueue(\n\t\ttx: EventIngressDatabase,\n\t\tintents: readonly CanonicalOutboxIntent[],\n\t): Promise<void>;\n}\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nexport function createSqlCanonicalEventRepositories(): {\n\tevents: CanonicalEventRepository;\n\toutbox: CanonicalOutboxRepository;\n} {\n\treturn {\n\t\tevents: {\n\t\t\tasync append(tx, events) {\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tawait tx.query(\n\t\t\t\t\t\t`\nINSERT INTO athena.event_ledger (\n  id, name, domain, provider, subject_type, subject_id, ingress_id, payload, occurred_at, observed_at\n) VALUES ($1,$2,$3,$4,$5,$6,$7,$8::jsonb,$9,$10)\nON CONFLICT (id) DO NOTHING\n`,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tevent.id,\n\t\t\t\t\t\t\tevent.name,\n\t\t\t\t\t\t\tevent.source.domain,\n\t\t\t\t\t\t\tevent.source.provider ?? null,\n\t\t\t\t\t\t\tevent.subject.type,\n\t\t\t\t\t\t\tevent.subject.id,\n\t\t\t\t\t\t\tevent.ingressId ?? null,\n\t\t\t\t\t\t\tjsonValue(event.payload),\n\t\t\t\t\t\t\tevent.occurredAt.toISOString(),\n\t\t\t\t\t\t\tevent.observedAt.toISOString(),\n\t\t\t\t\t\t],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\toutbox: {\n\t\t\tasync enqueue(tx, intents) {\n\t\t\t\tfor (const intent of intents) {\n\t\t\t\t\tawait tx.query(\n\t\t\t\t\t\t`\nINSERT INTO athena.event_outbox (id, event_id, name, payload, created_at)\nVALUES ($1,$2,$3,$4::jsonb, now())\nON CONFLICT (id) DO NOTHING\n`,\n\t\t\t\t\t\t[intent.id, intent.eventId, intent.name, jsonValue(intent.payload)],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n}\n","import { createSqlCanonicalEventRepositories } from \"../../../../runtime/events/sql.ts\";\nimport {\n\tATHENA_EVENT_INGRESS_FAILED,\n\tAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport type {\n\tBillingEventRepository,\n\tBillingIngressDocumentRepository,\n\tBillingOutboxRepository,\n} from \"./repository.ts\";\n\nfunction jsonValue(value: unknown): string {\n\treturn JSON.stringify(value ?? {});\n}\n\nfunction requirePersistConnectionId(connectionId: string | undefined): string {\n\tif (connectionId == null || connectionId.length === 0) {\n\t\tthrow new AthenaEventIngressError({\n\t\t\tcode: ATHENA_EVENT_INGRESS_FAILED,\n\t\t\tdomain: \"billing\",\n\t\t\tmessage:\n\t\t\t\t\"Billing document persist requires a billing connection id (uniqueness is connection-scoped).\",\n\t\t\tretryable: false,\n\t\t});\n\t}\n\treturn connectionId;\n}\n\nexport function createSqlBillingDocumentRepository(): BillingIngressDocumentRepository {\n\treturn {\n\t\tasync readCurrentForUpdate(tx, document, connectionId) {\n\t\t\tconst boundConnectionId = requirePersistConnectionId(connectionId);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t\t`\nSELECT 'payment' AS kind, provider, provider_payment_id AS \"providerPaymentId\",\n  status, amount_currency, amount_value, created_at AS \"createdAt\", paid_at AS \"paidAt\"\nFROM billing.billing_payments\nWHERE connection_id = $1::uuid AND provider_payment_id = $2\nFOR UPDATE\n`,\n\t\t\t\t\t[boundConnectionId, document.providerPaymentId],\n\t\t\t\t);\n\t\t\t\treturn result.rows[0] ?? null;\n\t\t\t}\n\t\t\tif (document.kind === \"subscription\") {\n\t\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t\t`\nSELECT 'subscription' AS kind, provider,\n  provider_subscription_id AS \"providerSubscriptionId\", status\nFROM billing.billing_subscriptions\nWHERE connection_id = $1::uuid AND provider_subscription_id = $2\nFOR UPDATE\n`,\n\t\t\t\t\t[boundConnectionId, document.providerSubscriptionId],\n\t\t\t\t);\n\t\t\t\treturn result.rows[0] ?? null;\n\t\t\t}\n\t\t\tconst result = await tx.query<CanonicalBillingDocument>(\n\t\t\t\t`\nSELECT 'invoice' AS kind, provider, provider_invoice_id AS \"providerInvoiceId\", status\nFROM billing.billing_invoices\nWHERE connection_id = $1::uuid AND provider_invoice_id = $2\nFOR UPDATE\n`,\n\t\t\t\t[boundConnectionId, document.providerInvoiceId],\n\t\t\t);\n\t\t\treturn result.rows[0] ?? null;\n\t\t},\n\t\tasync upsert(tx, document, connectionId) {\n\t\t\tconst boundConnectionId = requirePersistConnectionId(connectionId);\n\t\t\tif (document.kind === \"payment\") {\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`\nINSERT INTO billing.billing_payments (\n  connection_id, provider, provider_payment_id, provider_customer_id, provider_profile_id,\n  provider_subscription_id, provider_payment_link_id, status,\n  amount_currency, amount_value, description, metadata, raw, paid_at, created_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12::jsonb,$13::jsonb,$14,$15)\nON CONFLICT (connection_id, provider_payment_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  amount_currency = EXCLUDED.amount_currency,\n  amount_value = EXCLUDED.amount_value,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  paid_at = EXCLUDED.paid_at\n`,\n\t\t\t\t\t[\n\t\t\t\t\t\tboundConnectionId,\n\t\t\t\t\t\tdocument.provider,\n\t\t\t\t\t\tdocument.providerPaymentId,\n\t\t\t\t\t\tdocument.providerCustomerId ?? null,\n\t\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\t\tdocument.providerSubscriptionId ?? null,\n\t\t\t\t\t\tdocument.providerPaymentLinkId ?? null,\n\t\t\t\t\t\tdocument.status,\n\t\t\t\t\t\tdocument.amount.currency,\n\t\t\t\t\t\tdocument.amount.value,\n\t\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\t\tdocument.paidAt ?? null,\n\t\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (document.kind === \"subscription\") {\n\t\t\t\tawait tx.query(\n\t\t\t\t\t`\nINSERT INTO billing.billing_subscriptions (\n  connection_id, provider, provider_subscription_id, provider_customer_id, provider_profile_id,\n  status, description, metadata, raw, created_at, canceled_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8::jsonb,$9::jsonb,$10,$11)\nON CONFLICT (connection_id, provider_subscription_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  canceled_at = EXCLUDED.canceled_at\n`,\n\t\t\t\t\t[\n\t\t\t\t\t\tboundConnectionId,\n\t\t\t\t\t\tdocument.provider,\n\t\t\t\t\t\tdocument.providerSubscriptionId,\n\t\t\t\t\t\tdocument.providerCustomerId,\n\t\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\t\tdocument.status,\n\t\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t\t\tdocument.canceledAt ?? null,\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait tx.query(\n\t\t\t\t`\nINSERT INTO billing.billing_invoices (\n  connection_id, provider, provider_invoice_id, provider_profile_id, provider_customer_id,\n  status, description, metadata, raw, paid_at, created_at\n) VALUES ($1::uuid,$2,$3,$4,$5,$6,$7,$8::jsonb,$9::jsonb,$10,$11)\nON CONFLICT (connection_id, provider_invoice_id) WHERE connection_id IS NOT NULL DO UPDATE SET\n  status = EXCLUDED.status,\n  metadata = EXCLUDED.metadata,\n  raw = EXCLUDED.raw,\n  paid_at = EXCLUDED.paid_at\n`,\n\t\t\t\t[\n\t\t\t\t\tboundConnectionId,\n\t\t\t\t\tdocument.provider,\n\t\t\t\t\tdocument.providerInvoiceId,\n\t\t\t\t\tdocument.providerProfileId ?? null,\n\t\t\t\t\tdocument.providerCustomerId ?? null,\n\t\t\t\t\tdocument.status,\n\t\t\t\t\tdocument.description ?? null,\n\t\t\t\t\tjsonValue(document.metadata),\n\t\t\t\t\tjsonValue(document.raw),\n\t\t\t\t\tdocument.paidAt ?? null,\n\t\t\t\t\tdocument.createdAt ?? null,\n\t\t\t\t],\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function createSqlBillingRepositories(): {\n\tdocuments: BillingIngressDocumentRepository;\n\tevents: BillingEventRepository;\n\toutbox: BillingOutboxRepository;\n} {\n\tconst ledger = createSqlCanonicalEventRepositories();\n\treturn {\n\t\tdocuments: createSqlBillingDocumentRepository(),\n\t\tevents: ledger.events,\n\t\toutbox: ledger.outbox,\n\t};\n}\n","import type { AthenaIngressIR, AthenaIngressStatus } from \"./ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n\tEventIngressQueryResult,\n\tEventIngressRecord,\n} from \"./persistence.ts\";\n\nexport class MemoryEventIngressDatabase implements EventIngressDatabase {\n\treadonly ingress = new Map<string, EventIngressRecord>();\n\n\tasync query<T = Record<string, unknown>>(): Promise<\n\t\tEventIngressQueryResult<T>\n\t> {\n\t\treturn { rowCount: 0, rows: [] };\n\t}\n\n\tasync transaction<T>(\n\t\tfn: (tx: EventIngressDatabase) => Promise<T>,\n\t): Promise<T> {\n\t\treturn fn(this);\n\t}\n}\n\nfunction cloneBody(body: Uint8Array): Uint8Array {\n\treturn Uint8Array.from(body);\n}\n\nexport function createMemoryEventIngressPersistence(\n\tstore: MemoryEventIngressDatabase,\n): EventIngressPersistence {\n\treturn {\n\t\tasync insertReceived(_tx, ingress, meta) {\n\t\t\tif (meta.providerEventId) {\n\t\t\t\tfor (const row of store.ingress.values()) {\n\t\t\t\t\tif (\n\t\t\t\t\t\trow.id !== ingress.id &&\n\t\t\t\t\t\trow.domain === ingress.domain &&\n\t\t\t\t\t\trow.provider === (meta.provider ?? null) &&\n\t\t\t\t\t\trow.providerEventId === meta.providerEventId\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tduplicate: true,\n\t\t\t\t\t\t\tingressId: row.id,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst existing = store.ingress.get(ingress.id);\n\t\t\tif (existing) {\n\t\t\t\tif (meta.providerEventId) {\n\t\t\t\t\texisting.providerEventId = meta.providerEventId;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tduplicate: false,\n\t\t\t\t\tingressId: existing.id,\n\t\t\t\t};\n\t\t\t}\n\t\t\tstore.ingress.set(ingress.id, {\n\t\t\t\tid: ingress.id,\n\t\t\t\tdomain: ingress.domain,\n\t\t\t\tprovider: meta.provider ?? null,\n\t\t\t\tproviderEventId: meta.providerEventId ?? null,\n\t\t\t\tconnectionId: ingress.connectionId ?? null,\n\t\t\t\tstatus: \"received\",\n\t\t\t\tbody: cloneBody(ingress.body),\n\t\t\t\theaders: ingress.headers,\n\t\t\t\treceivedAt: ingress.receivedAt,\n\t\t\t\tcorrelationId: ingress.correlationId ?? null,\n\t\t\t\ttraceId: ingress.traceId ?? null,\n\t\t\t\tattemptCount: 0,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tduplicate: false,\n\t\t\t\tingressId: ingress.id,\n\t\t\t};\n\t\t},\n\t\tasync lock(_tx, ingressId) {\n\t\t\treturn store.ingress.get(ingressId);\n\t\t},\n\t\tasync markStatus(_tx, input) {\n\t\t\tconst row = store.ingress.get(input.ingressId);\n\t\t\tif (row) {\n\t\t\t\trow.status = input.status;\n\t\t\t\tif (\n\t\t\t\t\tinput.status === \"retryable_failure\" ||\n\t\t\t\t\tinput.status === \"terminal_failure\"\n\t\t\t\t) {\n\t\t\t\t\trow.attemptCount += 1;\n\t\t\t\t}\n\t\t\t\tif (input.error !== undefined) {\n\t\t\t\t\trow.error = input.error;\n\t\t\t\t}\n\t\t\t\trow.failureStage = input.failureStage ?? row.failureStage;\n\t\t\t\trow.firstFailedAt = input.firstFailedAt ?? row.firstFailedAt;\n\t\t\t\trow.nextAttemptAt = input.nextAttemptAt ?? row.nextAttemptAt;\n\t\t\t\trow.leaseExpiresAt =\n\t\t\t\t\tinput.status === \"retryable_failure\" ||\n\t\t\t\t\tinput.status === \"terminal_failure\" ||\n\t\t\t\t\tinput.status === \"processed\" ||\n\t\t\t\t\tinput.status === \"ignored\"\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: (input.leaseExpiresAt ?? row.leaseExpiresAt);\n\t\t\t}\n\t\t},\n\t\tasync markProcessed(_tx, input) {\n\t\t\tconst row = store.ingress.get(input.ingressId);\n\t\t\tif (row) {\n\t\t\t\trow.status = \"processed\";\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function memoryIngressFromRecord(\n\trecord: EventIngressRecord,\n\toperation: string,\n): AthenaIngressIR {\n\treturn {\n\t\tid: record.id,\n\t\tdomain: record.domain,\n\t\toperation,\n\t\ttransport: { kind: \"direct\" },\n\t\tbody: record.body,\n\t\theaders: record.headers,\n\t\treceivedAt: record.receivedAt,\n\t\t...(record.correlationId ? { correlationId: record.correlationId } : {}),\n\t\t...(record.traceId ? { traceId: record.traceId } : {}),\n\t\t...(record.connectionId ? { connectionId: record.connectionId } : {}),\n\t};\n}\n\nexport type { AthenaIngressStatus };\n","import { parseMollieWebhookBody } from \"../providers/mollie/parse-webhook.ts\";\nimport {\n\tATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n\tisAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport {\n\tclassifyIngressFailure,\n\tINGRESS_MAX_ATTEMPTS,\n\tINGRESS_PROCESSING_LEASE_MS,\n\ttype IngressFailureStage,\n} from \"../../../../runtime/ingress/failure.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n\tEventIngressDatabase,\n\tEventIngressPersistence,\n\tEventIngressRecord,\n} from \"../../../../runtime/ingress/persistence.ts\";\nimport { memoryIngressFromRecord } from \"../../../../runtime/ingress/memory.ts\";\nimport type { EventIngressRuntime } from \"../../../../runtime/ingress/runtime.ts\";\nimport {\n\ttype EventIngressRow,\n\tmapIngressRow,\n} from \"../../../../runtime/ingress/sql.ts\";\n\nexport const BILLING_INGRESS_REPLAY_BATCH_DEFAULT = 25;\n\nexport interface BillingIngressReplayResult {\n\tclassified: number;\n\tfailed: number;\n\tprocessed: number;\n\treplayed: number;\n\tretryable: number;\n\tskipped: number;\n\tterminal: number;\n}\n\nfunction inferOperation(record: EventIngressRecord): string {\n\tconst text = new TextDecoder().decode(record.body).trim();\n\treturn text.startsWith(\"{\")\n\t\t? \"webhook.mollie.events\"\n\t\t: \"webhook.mollie.classic\";\n}\n\nfunction classifyStuckResolving(record: EventIngressRecord): {\n\tstage: IngressFailureStage;\n\terror: unknown;\n} {\n\ttry {\n\t\tparseMollieWebhookBody(record.body);\n\t\treturn {\n\t\t\terror: new Error(\n\t\t\t\t\"Ingress remained resolving after the processing lease expired.\",\n\t\t\t),\n\t\t\tstage: \"refetch\",\n\t\t};\n\t} catch (error) {\n\t\tif (\n\t\t\tisAthenaEventIngressError(error) &&\n\t\t\terror.code === ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID\n\t\t) {\n\t\t\treturn { error, stage: \"parse\" };\n\t\t}\n\t\treturn { error, stage: \"parse\" };\n\t}\n}\n\nexport async function classifyStuckBillingIngress(input: {\n\tdatabase: EventIngressDatabase;\n\tdryRun?: boolean;\n\tlimit?: number;\n\tpersistence: EventIngressPersistence;\n}): Promise<{ classified: number; terminal: number; retryable: number }> {\n\tconst limit = input.limit ?? BILLING_INGRESS_REPLAY_BATCH_DEFAULT;\n\tconst listed = await input.database.query<{ id: string }>(\n\t\t`\nSELECT id\nFROM athena.event_ingress\nWHERE domain = 'billing'\n  AND status = 'resolving'\n  AND (\n    lease_expires_at IS NULL\n    OR lease_expires_at < now()\n    OR received_at < now() - interval '5 minutes'\n  )\nORDER BY received_at\nLIMIT $1\n`,\n\t\t[limit],\n\t);\n\tif (input.dryRun) {\n\t\treturn { classified: listed.rows.length, retryable: 0, terminal: 0 };\n\t}\n\tlet classified = 0;\n\tlet terminal = 0;\n\tlet retryable = 0;\n\tfor (const row of listed.rows) {\n\t\tawait input.database.transaction(async (tx) => {\n\t\t\tconst locked = await input.persistence.lock(tx, row.id);\n\t\t\tif (!locked || locked.status !== \"resolving\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (locked.attemptCount >= INGRESS_MAX_ATTEMPTS) {\n\t\t\t\tconst classifiedFailure = classifyIngressFailure({\n\t\t\t\t\tattemptCount: locked.attemptCount + 1,\n\t\t\t\t\terror: new Error(\"Ingress retry budget exhausted.\"),\n\t\t\t\t\tfirstFailedAt: locked.firstFailedAt ?? undefined,\n\t\t\t\t\tstage: \"unknown\",\n\t\t\t\t});\n\t\t\t\tawait input.persistence.markStatus(tx, {\n\t\t\t\t\terror: classifiedFailure.error,\n\t\t\t\t\tfailureStage: classifiedFailure.stage,\n\t\t\t\t\tfirstFailedAt: new Date(classifiedFailure.error.firstFailedAt),\n\t\t\t\t\tingressId: locked.id,\n\t\t\t\t\tlastFailedAt: new Date(),\n\t\t\t\t\tstatus: \"terminal_failure\",\n\t\t\t\t});\n\t\t\t\tterminal += 1;\n\t\t\t\tclassified += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst stuck = classifyStuckResolving(locked);\n\t\t\tconst classifiedFailure = classifyIngressFailure({\n\t\t\t\tattemptCount: locked.attemptCount + 1,\n\t\t\t\terror: stuck.error,\n\t\t\t\tfirstFailedAt: locked.firstFailedAt ?? undefined,\n\t\t\t\tstage: stuck.stage,\n\t\t\t});\n\t\t\tawait input.persistence.markStatus(tx, {\n\t\t\t\terror: classifiedFailure.error,\n\t\t\t\tfailureStage: classifiedFailure.stage,\n\t\t\t\tfirstFailedAt: new Date(classifiedFailure.error.firstFailedAt),\n\t\t\t\tingressId: locked.id,\n\t\t\t\tlastFailedAt: new Date(),\n\t\t\t\tstatus: classifiedFailure.status,\n\t\t\t\t...(classifiedFailure.nextAttemptAt\n\t\t\t\t\t? { nextAttemptAt: classifiedFailure.nextAttemptAt }\n\t\t\t\t\t: {}),\n\t\t\t});\n\t\t\tclassified += 1;\n\t\t\tif (classifiedFailure.status === \"terminal_failure\") {\n\t\t\t\tterminal += 1;\n\t\t\t} else {\n\t\t\t\tretryable += 1;\n\t\t\t}\n\t\t});\n\t}\n\treturn { classified, retryable, terminal };\n}\n\nexport async function replayBillingIngressBatch(input: {\n\tdatabase: EventIngressDatabase;\n\tlimit?: number;\n\townerId?: string;\n\tpersistence: EventIngressPersistence;\n\truntime: EventIngressRuntime;\n}): Promise<BillingIngressReplayResult> {\n\tconst limit = input.limit ?? BILLING_INGRESS_REPLAY_BATCH_DEFAULT;\n\tconst ownerId = input.ownerId ?? crypto.randomUUID();\n\tconst claimed = await input.database.transaction(async (tx) => {\n\t\treturn tx.query<EventIngressRow>(\n\t\t\t`\nWITH next_rows AS (\n  SELECT id\n  FROM athena.event_ingress\n  WHERE domain = 'billing'\n    AND attempt_count < $2\n    AND (\n      (\n        status = 'retryable_failure'\n        AND (next_attempt_at IS NULL OR next_attempt_at <= now())\n      )\n      OR (\n        status = 'resolving'\n        AND (lease_expires_at IS NULL OR lease_expires_at < now())\n      )\n    )\n  ORDER BY received_at\n  FOR UPDATE SKIP LOCKED\n  LIMIT $1\n)\nUPDATE athena.event_ingress AS target\nSET\n  status = 'resolving',\n  lease_owner = $3,\n  lease_expires_at = now() + ($4::int * interval '1 millisecond')\nFROM next_rows\nWHERE target.id = next_rows.id\nRETURNING target.*\n`,\n\t\t\t[limit, INGRESS_MAX_ATTEMPTS, ownerId, INGRESS_PROCESSING_LEASE_MS],\n\t\t);\n\t});\n\tconst result: BillingIngressReplayResult = {\n\t\tclassified: 0,\n\t\tfailed: 0,\n\t\tprocessed: 0,\n\t\treplayed: claimed.rows.length,\n\t\tretryable: 0,\n\t\tskipped: 0,\n\t\tterminal: 0,\n\t};\n\tfor (const row of claimed.rows) {\n\t\tconst record = mapIngressRow(row);\n\t\tconst ingress: AthenaIngressIR = memoryIngressFromRecord(\n\t\t\trecord,\n\t\t\tinferOperation(record),\n\t\t);\n\t\ttry {\n\t\t\tconst ingest = await input.runtime.ingest(ingress);\n\t\t\tif (ingest.duplicate) {\n\t\t\t\tresult.skipped += 1;\n\t\t\t} else {\n\t\t\t\tresult.processed += 1;\n\t\t\t}\n\t\t} catch {\n\t\t\tresult.failed += 1;\n\t\t}\n\t}\n\treturn result;\n}\n","import type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../../types.ts\";\nimport { normalizeAthenaBillingCatalog } from \"../catalog/normalize.ts\";\nimport { firstConfiguredMollieProvider } from \"./connection-binding.ts\";\nimport { normalizeBillingProviderConfig } from \"./config.ts\";\nimport { createMollieBillingProviderRuntime } from \"./mollie/runtime.ts\";\nimport { BillingProviderRegistry } from \"./registry.ts\";\nimport { createStripeBillingProviderRuntime } from \"./stripe/runtime.ts\";\n\nexport function createBillingProviderRegistry(\n\tconfigured?: BillingProviderConfigMap,\n\tcatalog?: AthenaBillingCatalogConfig,\n): BillingProviderRegistry {\n\tconst fallbackMollie = firstConfiguredMollieProvider(configured);\n\tconst normalized = normalizeBillingProviderConfig(\n\t\tconfigured?.mollie == null && fallbackMollie != null\n\t\t\t? { ...configured, mollie: fallbackMollie }\n\t\t\t: configured,\n\t);\n\tconst athenaCatalog = normalizeAthenaBillingCatalog(catalog);\n\tconst runtimes = [];\n\tif (normalized.mollie != null) {\n\t\truntimes.push(\n\t\t\tcreateMollieBillingProviderRuntime(normalized.mollie, athenaCatalog),\n\t\t);\n\t}\n\tif (normalized.stripe != null) {\n\t\truntimes.push(createStripeBillingProviderRuntime(normalized.stripe));\n\t}\n\treturn new BillingProviderRegistry(runtimes);\n}\n","import { AthenaBillingCapabilityError } from \"../../../errors.ts\";\nimport type { BillingPage } from \"../../types.ts\";\n\nexport type AthenaCatalogListResource = \"products\" | \"prices\";\n\ninterface AthenaCatalogCursor {\n\toffset: number;\n\tprovider: \"athena\";\n\tresource: AthenaCatalogListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n\tconst bytes = new TextEncoder().encode(value);\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary)\n\t\t.replaceAll(\"+\", \"-\")\n\t\t.replaceAll(\"/\", \"_\")\n\t\t.replace(/=+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n\tif (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n\t\tthrow new TypeError(\"Invalid base64url value.\");\n\t}\n\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"/\", \"_\");\n\tconst padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n\tconst binary = atob(padded);\n\tconst bytes = Uint8Array.from(binary, (character) =>\n\t\tcharacter.charCodeAt(0),\n\t);\n\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nfunction decodeCatalogCursor(\n\tcursor: string,\n\tresource: AthenaCatalogListResource,\n): number {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64Url(cursor));\n\t} catch {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: `${resource}.list`,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\tif (\n\t\t!isRecord(parsed) ||\n\t\tparsed.provider !== \"athena\" ||\n\t\tparsed.resource !== resource ||\n\t\ttypeof parsed.offset !== \"number\" ||\n\t\t!Number.isInteger(parsed.offset) ||\n\t\tparsed.offset < 0\n\t) {\n\t\tthrow new AthenaBillingCapabilityError({\n\t\t\toperation: `${resource}.list`,\n\t\t\treason: \"unsupported_operation\",\n\t\t});\n\t}\n\treturn parsed.offset;\n}\n\nexport function pageAthenaCatalogItems<T>(\n\titems: readonly T[],\n\tinput: { cursor?: string; limit?: number },\n\tresource: AthenaCatalogListResource,\n): BillingPage<T> {\n\tconst start =\n\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t? decodeCatalogCursor(input.cursor, resource)\n\t\t\t: 0;\n\tconst limit =\n\t\tinput.limit != null && Number.isInteger(input.limit) && input.limit > 0\n\t\t\t? input.limit\n\t\t\t: 50;\n\tconst slice = items.slice(start, start + limit);\n\tconst nextOffset = start + slice.length;\n\tif (nextOffset >= items.length) {\n\t\treturn { items: [...slice], nextCursor: null };\n\t}\n\tconst cursor: AthenaCatalogCursor = {\n\t\toffset: nextOffset,\n\t\tprovider: \"athena\",\n\t\tresource,\n\t};\n\treturn {\n\t\titems: [...slice],\n\t\tnextCursor: encodeBase64Url(JSON.stringify(cursor)),\n\t};\n}\n","import type { BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n\tBillingPricesPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingPricesPort implements BillingPricesPort {\n\treadonly kind = \"prices\" as const;\n\n\tconstructor(private readonly prices: readonly BillingPrice[]) {}\n\n\tasync list(\n\t\t_context: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput & { productId?: string },\n\t): Promise<BillingPage<BillingPrice>> {\n\t\tconst filtered =\n\t\t\tinput.productId != null && input.productId.length > 0\n\t\t\t\t? this.prices.filter((price) => price.productId === input.productId)\n\t\t\t\t: this.prices;\n\t\treturn pageAthenaCatalogItems(filtered, input, \"prices\");\n\t}\n}\n\nexport function createAthenaBillingPricesPort(\n\tprices: readonly BillingPrice[],\n): BillingPricesPort {\n\treturn new AthenaBillingPricesPort(prices);\n}\n","import type { BillingProduct } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n\tBillingProductsPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingProductsPort implements BillingProductsPort {\n\treadonly kind = \"products\" as const;\n\n\tconstructor(private readonly products: readonly BillingProduct[]) {}\n\n\tasync list(\n\t\t_context: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingProduct>> {\n\t\treturn pageAthenaCatalogItems(this.products, input, \"products\");\n\t}\n}\n\nexport function createAthenaBillingProductsPort(\n\tproducts: readonly BillingProduct[],\n): BillingProductsPort {\n\treturn new AthenaBillingProductsPort(products);\n}\n","import type { BillingProviderCapabilities } from \"../types.ts\";\n\n/**\n * Native Mollie SDK surface. Athena catalog `products` / `prices` overlay\n * `getCapabilities` on the Mollie runtime when `billing.catalog` is configured.\n * Do not set these static flags true — that would claim Mollie-native catalog.\n */\nexport const MOLLIE_BILLING_PROVIDER_CAPABILITIES: BillingProviderCapabilities =\n{\n\toperations: {\n\t\t\"customers.create\": true,\n\t\t\"customers.delete\": true,\n\t\t\"customers.get\": true,\n\t\t\"customers.list\": true,\n\t\t\"customers.update\": true,\n\t\t\"invoices.get\": true,\n\t\t\"invoices.list\": true,\n\t\t\"paymentLinks.create\": true,\n\t\t\"paymentLinks.delete\": true,\n\t\t\"paymentLinks.get\": true,\n\t\t\"paymentLinks.list\": true,\n\t\t\"paymentLinks.update\": true,\n\t\t\"payments.cancel\": true,\n\t\t\"payments.create\": true,\n\t\t\"payments.get\": true,\n\t\t\"payments.list\": true,\n\t\t\"refunds.cancel\": true,\n\t\t\"refunds.create\": true,\n\t\t\"refunds.get\": true,\n\t\t\"refunds.list\": true,\n\t\t\"subscriptions.cancel\": true,\n\t\t\"subscriptions.create\": true,\n\t\t\"subscriptions.get\": true,\n\t\t\"subscriptions.list\": true,\n\t\t\"subscriptions.update\": true,\n\t\t\"webhooks.create\": true,\n\t\t\"webhooks.delete\": true,\n\t\t\"webhooks.get\": false,\n\t\t\"webhooks.list\": true,\n\t\t\"webhooks.test\": false,\n\t\t\"webhooks.update\": true,\n\t\t\"products.list\": false,\n\t\t\"prices.list\": false,\n\t\t\"checkout.create\": false,\n\t},\n\tports: {\n\t\tcustomers: true,\n\t\tinvoices: true,\n\t\tpaymentLinks: true,\n\t\tpayments: true,\n\t\trefunds: true,\n\t\tsubscriptions: true,\n\t\twebhooks: true,\n\t\tproducts: false,\n\t\tprices: false,\n\t\tcheckout: false,\n\t},\n};\n","import type {\n\tBillingProviderCreateCustomerInput,\n\tBillingProviderGetResourceInput,\n\tBillingProviderUpdateCustomerInput,\n} from \"../../types.ts\";\n\nexport function mapCreateCustomerToMollieSdk(input: {\n\tbody: Record<string, unknown>;\n\tidempotencyKey?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tcustomerRequest: input.body,\n\t\tidempotencyKey: input.idempotencyKey,\n\t};\n}\n\nexport function customerCreateBody(\n\tinput: BillingProviderCreateCustomerInput,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {};\n\tif (input.name != null) {\n\t\tbody.name = input.name;\n\t}\n\tif (input.email != null) {\n\t\tbody.email = input.email;\n\t}\n\tif (input.metadata != null) {\n\t\tbody.metadata = input.metadata;\n\t}\n\treturn body;\n}\n\nexport function mapGetCustomerToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { customerId: input.id };\n}\n\nexport function mapUpdateCustomerToMollieSdk(\n\tinput: BillingProviderUpdateCustomerInput,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {};\n\tif (input.name != null) {\n\t\tbody.name = input.name;\n\t}\n\tif (input.email != null) {\n\t\tbody.email = input.email;\n\t}\n\treturn {\n\t\tcustomerId: input.id,\n\t\tcustomerRequest: body,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type { BillingCustomer } from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nexport function projectMollieCustomer(raw: unknown): BillingCustomer {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie customer response is missing a customer id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: billingRetryDisposition({\n\t\t\tidempotencyKeyPresent: false,\n\t\t\tkind: \"serialization\",\n\t\t\toperation: \"customers.get\",\n\t\t\trequestDispatchState: \"dispatched\",\n\t\t}),\n\t\t});\n\t}\n\treturn {\n\t\temail: optionalString(raw.email),\n\t\tmetadata: raw.metadata,\n\t\tname: optionalString(raw.name),\n\t\tprovider: \"mollie\",\n\t\tproviderCustomerId: raw.id,\n\t\traw,\n\t};\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingCustomer } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingCustomersPort,\n\tBillingProviderCreateCustomerInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderUpdateCustomerInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tcustomerCreateBody,\n\tmapCreateCustomerToMollieSdk,\n\tmapGetCustomerToMollieSdk,\n\tmapUpdateCustomerToMollieSdk,\n} from \"./dialect/customers.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMollieCustomer } from \"./projection/customer.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingCustomersPort implements BillingCustomersPort {\n\treadonly kind = \"customers\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateCustomerInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"customers.create\",\n\t\t\trequest: mapCreateCustomerToMollieSdk({\n\t\t\t\tbody: customerCreateBody(input),\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t}),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<void> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.delete\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"customers.delete\",\n\t\t\trequest: mapGetCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"customers.get\",\n\t\t\trequest: mapGetCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingCustomer>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"customers\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"customers.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: \"customers\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"customers\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieCustomer),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateCustomerInput,\n\t): Promise<BillingCustomer> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"customers.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"customers.update\",\n\t\t\trequest: mapUpdateCustomerToMollieSdk(input),\n\t\t\tresource: \"customers\",\n\t\t});\n\t\treturn projectMollieCustomer(raw);\n\t}\n}\n\nexport function createMollieBillingCustomersPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingCustomersPort {\n\treturn new MollieBillingCustomersPort(config, pool);\n}\n","import type { BillingProviderGetInvoiceInput } from \"../../types.ts\";\n\nexport function mapGetInvoiceToMollieSdk(\n\tinput: BillingProviderGetInvoiceInput,\n): Record<string, unknown> {\n\treturn { invoiceId: input.invoiceId };\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingInvoice } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingInvoicesPort,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetInvoiceInput,\n\tBillingProviderListInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport { mapGetInvoiceToMollieSdk } from \"./dialect/invoices.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMollieInvoice } from \"./projection/invoice.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\nimport type { MollieSdkResourceClient } from \"./sdk/types.ts\";\n\nfunction invoiceResourceName(): keyof MollieSdkResourceClient {\n\treturn \"salesInvoices\";\n}\n\nexport class MollieBillingInvoicesPort implements BillingInvoicesPort {\n\treadonly kind = \"invoices\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetInvoiceInput,\n\t): Promise<BillingInvoice> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"invoices.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"invoices.get\",\n\t\t\trequest: mapGetInvoiceToMollieSdk(input),\n\t\t\tresource: invoiceResourceName(),\n\t\t});\n\t\treturn projectMollieInvoice(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingInvoice>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"invoices.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"invoices\")\n\t\t\t\t: undefined;\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"invoices.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: invoiceResourceName(),\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"invoices\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieInvoice),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingInvoicesPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingInvoicesPort {\n\treturn new MollieBillingInvoicesPort(config, pool);\n}\n","import type {\n\tBillingProviderCreatePaymentLinkInput,\n\tBillingProviderGetResourceInput,\n\tBillingProviderUpdatePaymentLinkInput,\n} from \"../../types.ts\";\n\nexport function mapCreatePaymentLinkToMollieSdk(input: {\n\tinput: BillingProviderCreatePaymentLinkInput;\n\tidempotencyKey: string;\n\twebhookUrl?: string;\n}): Record<string, unknown> {\n\tconst paymentLinkRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t\tdescription: input.input.description,\n\t};\n\tif (input.input.redirectUrl != null) {\n\t\tpaymentLinkRequest.redirectUrl = input.input.redirectUrl;\n\t}\n\tif (input.webhookUrl) {\n\t\tpaymentLinkRequest.webhookUrl = input.webhookUrl;\n\t}\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentLinkRequest,\n\t};\n}\n\nexport function mapGetPaymentLinkToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { paymentLinkId: input.id };\n}\n\nexport function mapUpdatePaymentLinkToMollieSdk(\n\tinput: BillingProviderUpdatePaymentLinkInput,\n): Record<string, unknown> {\n\tconst paymentLinkRequest: Record<string, unknown> = {};\n\tif (input.description != null) {\n\t\tpaymentLinkRequest.description = input.description;\n\t}\n\treturn {\n\t\tpaymentLinkId: input.id,\n\t\tpaymentLinkRequest,\n\t};\n}\n","import type { BillingProviderExecutionContext } from \"../../types.ts\";\n\nexport function trustedClassicWebhookUrl(\n\tcontext: BillingProviderExecutionContext,\n): string | undefined {\n\tconst url = context.ingress?.classicWebhookUrl?.trim();\n\treturn url && url.length > 0 ? url : undefined;\n}\n\nexport function applyTrustedClassicWebhookUrl(\n\tbody: Record<string, unknown>,\n\tcontext: BillingProviderExecutionContext,\n): Record<string, unknown> {\n\tconst url = trustedClassicWebhookUrl(context);\n\tif (url) {\n\t\tbody.webhookUrl = url;\n\t}\n\treturn body;\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingPaymentLink,\n\tBillingPaymentLinkStatus,\n} from \"../../../../../types.ts\";\n\nimport { mollieLinkHref } from \"./links.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"paymentLinks.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMolliePaymentLinkStatus(input: {\n\tarchived?: unknown;\n\tpaidAt?: unknown;\n}): BillingPaymentLinkStatus {\n\tif (input.archived === true) {\n\t\treturn \"canceled\";\n\t}\n\tif (typeof input.paidAt === \"string\" && input.paidAt.length > 0) {\n\t\treturn \"paid\";\n\t}\n\treturn \"open\";\n}\n\nexport function projectMolliePaymentLink(raw: unknown): BillingPaymentLink {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie payment link response is missing a payment link id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\treturn {\n\t\tamount: projectMoney(raw.amount) ?? null,\n\t\tcheckoutUrl: mollieLinkHref(raw, \"paymentLink\"),\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tprovider: \"mollie\",\n\t\tproviderPaymentLinkId: raw.id,\n\t\traw,\n\t\tstatus: projectMolliePaymentLinkStatus({\n\t\t\tarchived: raw.archived,\n\t\t\tpaidAt: raw.paidAt,\n\t\t}),\n\t};\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingPaymentLink } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingPaymentLinksPort,\n\tBillingProviderCreatePaymentLinkInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderUpdatePaymentLinkInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreatePaymentLinkToMollieSdk,\n\tmapGetPaymentLinkToMollieSdk,\n\tmapUpdatePaymentLinkToMollieSdk,\n} from \"./dialect/payment-links.ts\";\nimport { trustedClassicWebhookUrl } from \"./dialect/webhook-url.ts\";\nimport { rejectUnenforcedMollieProfileTarget } from \"./profile-target.ts\";\nimport { projectMolliePaymentLink } from \"./projection/payment-link.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingPaymentLinksPort implements BillingPaymentLinksPort {\n\treadonly kind = \"payment-links\" as const;\n\n\tconstructor(\n\t\tconfig: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {\n\t\tvoid config;\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreatePaymentLinkInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"paymentLinks.create\",\n\t\t\trequest: mapCreatePaymentLinkToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t\twebhookUrl: trustedClassicWebhookUrl(context),\n\t\t\t}),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<void> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.delete\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"paymentLinks.delete\",\n\t\t\trequest: mapGetPaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"paymentLinks.get\",\n\t\t\trequest: mapGetPaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingPaymentLink>> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.list\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"payment-links\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"paymentLinks.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: { from, limit: input.limit },\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"payment-links\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMolliePaymentLink),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdatePaymentLinkInput,\n\t): Promise<BillingPaymentLink> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"paymentLinks.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"paymentLinks.update\",\n\t\t\trequest: mapUpdatePaymentLinkToMollieSdk(input),\n\t\t\tresource: \"paymentLinks\",\n\t\t});\n\t\treturn projectMolliePaymentLink(raw);\n\t}\n}\n\nexport function createMollieBillingPaymentLinksPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingPaymentLinksPort {\n\treturn new MollieBillingPaymentLinksPort(config, pool);\n}\n","import { AthenaBillingCapabilityError } from \"../../../../errors.ts\";\nimport type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingPayment } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreatePaymentInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n\tBillingProviderPaymentPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreatePaymentToMollieSdk,\n\tmapGetPaymentToMollieSdk,\n\tmapListPaymentsToMollieSdk,\n\tpaymentCreateBody,\n} from \"./dialect/payments.ts\";\nimport {\n\tassertMolliePaymentMatchesSelectedProfile,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingPaymentsPort implements BillingProviderPaymentPort {\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate profileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPayment> {\n\t\tconst client = clientFromPool(this.pool, context);\n\t\tconst profileId = this.profileId(context);\n\t\tif (profileId != null) {\n\t\t\tconst existing = await callMollieSdk({\n\t\t\t\tclient,\n\t\t\t\tmethod: \"get\",\n\t\t\t\toperation: \"payments.cancel\",\n\t\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\t\tresource: \"payments\",\n\t\t\t});\n\t\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\t\toperation: \"payments.cancel\",\n\t\t\t\tpayment: projectMolliePayment(existing),\n\t\t\t\tselectedProfileId: profileId,\n\t\t\t});\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient,\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"payments.cancel\",\n\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\treturn projectMolliePayment(raw);\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreatePaymentInput,\n\t): Promise<BillingPayment> {\n\t\tconst profileId = this.profileId(context);\n\t\tif (this.config.credentialKind !== \"api_key\" && profileId == null) {\n\t\t\tthrow new AthenaBillingCapabilityError({\n\t\t\t\toperation: \"payments.create\",\n\t\t\t\treason: \"missing_provider_scope\",\n\t\t\t});\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"payments.create\",\n\t\t\trequest: mapCreatePaymentToMollieSdk({\n\t\t\t\tbody: paymentCreateBody(input, profileId, context),\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t}),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\treturn projectMolliePayment(raw);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetResourceInput,\n\t): Promise<BillingPayment> {\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"payments.get\",\n\t\t\trequest: mapGetPaymentToMollieSdk(input),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tconst payment = projectMolliePayment(raw);\n\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\toperation: \"payments.get\",\n\t\t\tpayment,\n\t\t\tselectedProfileId: this.profileId(context),\n\t\t});\n\t\treturn payment;\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingPayment>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"payments\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"payments.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: mapListPaymentsToMollieSdk({\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.profileId(context),\n\t\t\t}),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"payments\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMolliePayment),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingPaymentsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingProviderPaymentPort {\n\treturn new MollieBillingPaymentsPort(config, pool);\n}\n","import type {\n\tBillingProviderCreatePaymentInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetResourceInput,\n\tBillingProviderListInput,\n} from \"../../types.ts\";\nimport { applyTrustedClassicWebhookUrl } from \"./webhook-url.ts\";\n\nexport function mapCreatePaymentToMollieSdk(input: {\n\tbody: Record<string, unknown>;\n\tidempotencyKey?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentRequest: input.body,\n\t};\n}\n\nexport function mapGetPaymentToMollieSdk(\n\tinput: BillingProviderGetResourceInput,\n): Record<string, unknown> {\n\treturn { paymentId: input.id };\n}\n\nexport function mapListPaymentsToMollieSdk(input: {\n\tfrom?: string;\n\tlimit?: number;\n\tprofileId?: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tfrom: input.from,\n\t\tlimit: input.limit,\n\t\tprofileId: input.profileId,\n\t};\n}\n\nexport function paymentCreateBody(\n\tinput: BillingProviderCreatePaymentInput,\n\tprofileId?: string,\n\tcontext?: BillingProviderExecutionContext,\n): Record<string, unknown> {\n\tconst body: Record<string, unknown> = {\n\t\tamount: input.amount,\n\t\tdescription: input.description ?? \"\",\n\t\tmetadata: input.metadata ?? {},\n\t};\n\tif (input.redirectUrl != null) {\n\t\tbody.redirectUrl = input.redirectUrl;\n\t}\n\tif (input.customerId != null) {\n\t\tbody.customerId = input.customerId;\n\t}\n\tif (input.sequenceType != null) {\n\t\tbody.sequenceType = input.sequenceType;\n\t}\n\tif (profileId != null) {\n\t\tbody.profileId = profileId;\n\t}\n\tif (context) {\n\t\tapplyTrustedClassicWebhookUrl(body, context);\n\t}\n\treturn body;\n}\n\nexport function mapListInputFrom(\n\tinput: BillingProviderListInput,\n): string | undefined {\n\treturn input.cursor != null && input.cursor.length > 0\n\t\t? input.cursor\n\t\t: undefined;\n}\n","import { isAthenaBillingProviderRequestError } from \"../../../../errors.ts\";\nimport type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingRefund } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreateRefundInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetRefundInput,\n\tBillingProviderListInput,\n\tBillingRefundsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport { mapGetPaymentToMollieSdk } from \"./dialect/payments.ts\";\nimport {\n\tmapCreateRefundToMollieSdk,\n\tmapCancelRefundToMollieSdk,\n\tmapGetRefundToMollieSdk,\n} from \"./dialect/refunds.ts\";\nimport {\n\tassertMolliePaymentMatchesSelectedProfile,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMolliePayment } from \"./projection.ts\";\nimport { projectMollieRefund } from \"./projection/refund.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingRefundsPort implements BillingRefundsPort {\n\treadonly kind = \"refunds\" as const;\n\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate selectedProfileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tprivate async assertParentPaymentProfile(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tpaymentId: string,\n\t\toperation: \"refunds.cancel\" | \"refunds.create\" | \"refunds.get\",\n\t): Promise<void> {\n\t\tconst selectedProfileId = this.selectedProfileId(context);\n\t\tif (selectedProfileId == null) {\n\t\t\treturn;\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation,\n\t\t\trequest: mapGetPaymentToMollieSdk({ id: paymentId }),\n\t\t\tresource: \"payments\",\n\t\t});\n\t\tassertMolliePaymentMatchesSelectedProfile({\n\t\t\toperation,\n\t\t\tpayment: projectMolliePayment(raw),\n\t\t\tselectedProfileId,\n\t\t});\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.create\",\n\t\t);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"refunds.create\",\n\t\t\trequest: mapCreateRefundToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t}),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\treturn projectMollieRefund(raw);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.get\",\n\t\t);\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"refunds.get\",\n\t\t\trequest: mapGetRefundToMollieSdk(input),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\treturn projectMollieRefund(raw);\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetRefundInput,\n\t): Promise<BillingRefund> {\n\t\tawait this.assertParentPaymentProfile(\n\t\t\tcontext,\n\t\t\tinput.paymentId,\n\t\t\t\"refunds.cancel\",\n\t\t);\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"refunds.cancel\",\n\t\t\trequest: mapCancelRefundToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? \"\",\n\t\t\t\tinput,\n\t\t\t}),\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\ttry {\n\t\t\treturn await this.get(context, input);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\tisAthenaBillingProviderRequestError(error) &&\n\t\t\t\terror.kind === \"not_found\"\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tamount: null,\n\t\t\t\t\tmetadata: undefined,\n\t\t\t\t\tprovider: \"mollie\",\n\t\t\t\t\tproviderPaymentId: input.paymentId,\n\t\t\t\t\tproviderRefundId: input.refundId,\n\t\t\t\t\traw: {\n\t\t\t\t\t\tcanceled: true,\n\t\t\t\t\t\tpaymentId: input.paymentId,\n\t\t\t\t\t\trefundId: input.refundId,\n\t\t\t\t\t},\n\t\t\t\t\tstatus: \"canceled\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListInput,\n\t): Promise<BillingPage<BillingRefund>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"refunds\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"refunds.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: {\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.selectedProfileId(context),\n\t\t\t},\n\t\t\tresource: \"refunds\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"refunds\");\n\t\treturn {\n\t\t\titems: page.items.map(projectMollieRefund),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n}\n\nexport function createMollieBillingRefundsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingRefundsPort {\n\treturn new MollieBillingRefundsPort(config, pool);\n}\n","import type {\n\tBillingProviderCreateRefundInput,\n\tBillingProviderGetRefundInput,\n} from \"../../types.ts\";\n\nexport function mapCreateRefundToMollieSdk(input: {\n\tinput: BillingProviderCreateRefundInput;\n\tidempotencyKey: string;\n}): Record<string, unknown> {\n\tconst refundRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t};\n\tif (input.input.description != null) {\n\t\trefundRequest.description = input.input.description;\n\t}\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentId: input.input.paymentId,\n\t\trefundRequest,\n\t};\n}\n\nexport function mapGetRefundToMollieSdk(\n\tinput: BillingProviderGetRefundInput,\n): Record<string, unknown> {\n\treturn {\n\t\tpaymentId: input.paymentId,\n\t\trefundId: input.refundId,\n\t};\n}\n\nexport function mapCancelRefundToMollieSdk(input: {\n\tinput: BillingProviderGetRefundInput;\n\tidempotencyKey: string;\n}): Record<string, unknown> {\n\treturn {\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tpaymentId: input.input.paymentId,\n\t\trefundId: input.input.refundId,\n\t};\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n\tBillingMoney,\n\tBillingRefund,\n\tBillingRefundStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n\tif (value == null) {\n\t\treturn value === undefined ? undefined : null;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction serializationRetry() {\n\treturn billingRetryDisposition({\n\t\tidempotencyKeyPresent: false,\n\t\tkind: \"serialization\",\n\t\toperation: \"refunds.get\",\n\t\trequestDispatchState: \"dispatched\",\n\t});\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n\tif (!isRecord(value)) {\n\t\treturn undefined;\n\t}\n\tif (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\treturn normalizeBillingMoney(value);\n\t} catch (error) {\n\t\tconst message =\n\t\t\terror instanceof Error\n\t\t\t\t? error.message\n\t\t\t\t: \"ATHENA_BILLING_MONEY_INVALID\";\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage,\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n}\n\nexport function projectMollieRefundStatus(status: string): BillingRefundStatus {\n\tif (\n\t\tstatus === \"queued\" ||\n\t\tstatus === \"pending\" ||\n\t\tstatus === \"processing\" ||\n\t\tstatus === \"refunded\" ||\n\t\tstatus === \"failed\" ||\n\t\tstatus === \"canceled\"\n\t) {\n\t\treturn status;\n\t}\n\tthrow new AthenaBillingProviderRequestError({\n\t\tkind: \"serialization\",\n\t\tmessage: `Mollie refund status \"${status}\" is not supported.`,\n\t\tprovider: \"mollie\",\n\t\tretry: serializationRetry(),\n\t});\n}\n\nexport function projectMollieRefund(raw: unknown): BillingRefund {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie refund response is missing a refund id.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tif (typeof raw.status !== \"string\") {\n\t\tthrow new AthenaBillingProviderRequestError({\n\t\t\tkind: \"serialization\",\n\t\t\tmessage: \"Mollie refund response is missing status.\",\n\t\t\tprovider: \"mollie\",\n\t\t\tretry: serializationRetry(),\n\t\t});\n\t}\n\tconst status = projectMollieRefundStatus(raw.status);\n\treturn {\n\t\tamount: projectMoney(raw.amount) ?? null,\n\t\tdescription: optionalString(raw.description),\n\t\tmetadata: raw.metadata,\n\t\tprovider: \"mollie\",\n\t\tproviderPaymentId: optionalString(raw.paymentId),\n\t\tproviderRefundId: raw.id,\n\t\traw,\n\t\tstatus,\n\t};\n}\n","import type {\n\tBillingProviderCreateSubscriptionInput,\n\tBillingProviderGetSubscriptionInput,\n\tBillingProviderUpdateSubscriptionInput,\n} from \"../../types.ts\";\n\nexport function mapCreateSubscriptionToMollieSdk(input: {\n\tinput: BillingProviderCreateSubscriptionInput;\n\tidempotencyKey: string;\n\twebhookUrl?: string;\n}): Record<string, unknown> {\n\tconst subscriptionRequest: Record<string, unknown> = {\n\t\tamount: input.input.amount,\n\t\tdescription: input.input.description,\n\t\tinterval: input.input.interval,\n\t};\n\tif (input.input.metadata != null) {\n\t\tsubscriptionRequest.metadata = input.input.metadata;\n\t}\n\tif (input.webhookUrl) {\n\t\tsubscriptionRequest.webhookUrl = input.webhookUrl;\n\t}\n\treturn {\n\t\tcustomerId: input.input.customerId,\n\t\tidempotencyKey: input.idempotencyKey,\n\t\tsubscriptionRequest,\n\t};\n}\n\nexport function mapGetSubscriptionToMollieSdk(\n\tinput: BillingProviderGetSubscriptionInput,\n): Record<string, unknown> {\n\treturn {\n\t\tcustomerId: input.customerId,\n\t\tsubscriptionId: input.subscriptionId,\n\t};\n}\n\nexport function mapUpdateSubscriptionToMollieSdk(\n\tinput: BillingProviderUpdateSubscriptionInput,\n): Record<string, unknown> {\n\tconst subscriptionRequest: Record<string, unknown> = {};\n\tif (input.description != null) {\n\t\tsubscriptionRequest.description = input.description;\n\t}\n\treturn {\n\t\tcustomerId: input.customerId,\n\t\tsubscriptionId: input.subscriptionId,\n\t\tsubscriptionRequest,\n\t};\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingSubscription } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderCreateSubscriptionInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderGetSubscriptionInput,\n\tBillingProviderListSubscriptionsInput,\n\tBillingProviderUpdateSubscriptionInput,\n\tBillingSubscriptionsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n\tmapCreateSubscriptionToMollieSdk,\n\tmapGetSubscriptionToMollieSdk,\n\tmapUpdateSubscriptionToMollieSdk,\n} from \"./dialect/subscriptions.ts\";\nimport { trustedClassicWebhookUrl } from \"./dialect/webhook-url.ts\";\nimport {\n\trejectUnenforcedMollieProfileTarget,\n\tresolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMollieSubscription } from \"./projection/subscription.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\n\nexport class MollieBillingSubscriptionsPort implements BillingSubscriptionsPort {\n\treadonly kind = \"subscriptions\" as const;\n\n\tconstructor(\n\t\tprivate readonly config: NormalizedMollieBillingProviderConfig,\n\t\tprivate readonly pool: MollieSdkClientPool,\n\t) {}\n\n\tprivate profileId(\n\t\tcontext: BillingProviderExecutionContext,\n\t): string | undefined {\n\t\treturn resolveMollieRequestProfileId({\n\t\t\tconfiguredProfileId:\n\t\t\t\tthis.config.profileId ?? this.config.defaultProfileId,\n\t\t\tcredentialKind: this.config.credentialKind,\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.create\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"create\",\n\t\t\toperation: \"subscriptions.create\",\n\t\t\trequest: mapCreateSubscriptionToMollieSdk({\n\t\t\t\tidempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n\t\t\t\tinput,\n\t\t\t\twebhookUrl: trustedClassicWebhookUrl(context),\n\t\t\t}),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync get(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"get\",\n\t\t\toperation: \"subscriptions.get\",\n\t\t\trequest: mapGetSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderListSubscriptionsInput,\n\t): Promise<BillingPage<BillingSubscription>> {\n\t\tconst from =\n\t\t\tinput.cursor != null && input.cursor.length > 0\n\t\t\t\t? decodeMollieListCursor(input.cursor, \"subscriptions\")\n\t\t\t\t: undefined;\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"subscriptions.list\",\n\t\t\tunwrap: false,\n\t\t\trequest: {\n\t\t\t\tcustomerId: input.customerId,\n\t\t\t\tfrom,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tprofileId: this.profileId(context),\n\t\t\t},\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"subscriptions\");\n\t\treturn {\n\t\t\titems: page.items.map((item) =>\n\t\t\t\tprojectMollieSubscription(item, input.customerId),\n\t\t\t),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.update\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"update\",\n\t\t\toperation: \"subscriptions.update\",\n\t\t\trequest: mapUpdateSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n\n\tasync cancel(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderGetSubscriptionInput,\n\t): Promise<BillingSubscription> {\n\t\trejectUnenforcedMollieProfileTarget({\n\t\t\toperation: \"subscriptions.cancel\",\n\t\t\trequestedProfileId: context.target.profileId,\n\t\t});\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"cancel\",\n\t\t\toperation: \"subscriptions.cancel\",\n\t\t\trequest: mapGetSubscriptionToMollieSdk(input),\n\t\t\tresource: \"subscriptions\",\n\t\t});\n\t\treturn projectMollieSubscription(raw, input.customerId);\n\t}\n}\n\nexport function createMollieBillingSubscriptionsPort(\n\tconfig: NormalizedMollieBillingProviderConfig,\n\tpool: MollieSdkClientPool,\n): BillingSubscriptionsPort {\n\treturn new MollieBillingSubscriptionsPort(config, pool);\n}\n","import type {\n\tMollieBillingProviderConfig,\n\tNormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type { NormalizedAthenaBillingCatalog } from \"../../catalog/normalize.ts\";\nimport { createAthenaBillingPricesPort } from \"../../catalog/prices.ts\";\nimport { createAthenaBillingProductsPort } from \"../../catalog/products.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCapabilities,\n\tMollieBillingProviderRuntime,\n} from \"../types.ts\";\nimport { MOLLIE_BILLING_PROVIDER_CAPABILITIES } from \"./capabilities.ts\";\nimport { normalizeMollieRuntimeConfig } from \"./config.ts\";\nimport { createMollieBillingCustomersPort } from \"./customers.ts\";\nimport { createMollieBillingInvoicesPort } from \"./invoices.ts\";\nimport { createMollieBillingPaymentLinksPort } from \"./payment-links.ts\";\nimport { createMollieBillingPaymentsPort } from \"./payments.ts\";\nimport { createMollieBillingRefundsPort } from \"./refunds.ts\";\nimport { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { createMollieBillingSubscriptionsPort } from \"./subscriptions.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"./webhook-capability.ts\";\nimport { createMollieBillingWebhooksPort } from \"./webhooks.ts\";\n\nexport class MollieBillingProviderRuntimeImpl\n\timplements MollieBillingProviderRuntime {\n\treadonly provider = \"mollie\" as const;\n\treadonly payments;\n\treadonly customers;\n\treadonly refunds;\n\treadonly paymentLinks;\n\treadonly subscriptions;\n\treadonly invoices;\n\treadonly webhooks;\n\treadonly products;\n\treadonly prices;\n\treadonly checkout = undefined;\n\n\tconstructor(\n\t\treadonly config: NormalizedMollieBillingProviderConfig,\n\t\tcatalog?: NormalizedAthenaBillingCatalog,\n\t) {\n\t\tconst pool = new MollieSdkClientPool(config);\n\t\tthis.payments = createMollieBillingPaymentsPort(config, pool);\n\t\tthis.customers = createMollieBillingCustomersPort(config, pool);\n\t\tthis.refunds = createMollieBillingRefundsPort(config, pool);\n\t\tthis.paymentLinks = createMollieBillingPaymentLinksPort(config, pool);\n\t\tthis.subscriptions = createMollieBillingSubscriptionsPort(config, pool);\n\t\tthis.invoices = createMollieBillingInvoicesPort(config, pool);\n\t\tthis.webhooks = createMollieBillingWebhooksPort(pool);\n\t\tthis.products =\n\t\t\tcatalog?.products != null\n\t\t\t\t? createAthenaBillingProductsPort(catalog.products)\n\t\t\t\t: undefined;\n\t\tthis.prices =\n\t\t\tcatalog?.prices != null\n\t\t\t\t? createAthenaBillingPricesPort(catalog.prices)\n\t\t\t\t: undefined;\n\t}\n\n\tasync getCapabilities(\n\t\tbinding: BillingProviderBinding,\n\t): Promise<BillingProviderCapabilities> {\n\t\tconst hasProducts = this.products != null;\n\t\tconst hasPrices = this.prices != null;\n\t\tconst webhookCapability = resolveMollieWebhookManagementCapability(binding);\n\t\tconst managed = webhookCapability.nextGen.available;\n\t\treturn {\n\t\t\toperations: {\n\t\t\t\t...MOLLIE_BILLING_PROVIDER_CAPABILITIES.operations,\n\t\t\t\t\"products.list\": hasProducts,\n\t\t\t\t\"prices.list\": hasPrices,\n\t\t\t\t\"webhooks.list\": managed,\n\t\t\t\t\"webhooks.create\": managed,\n\t\t\t\t\"webhooks.update\": managed,\n\t\t\t\t\"webhooks.delete\": managed,\n\t\t\t\t\"webhooks.get\": false,\n\t\t\t\t\"webhooks.test\": false,\n\t\t\t},\n\t\t\tports: {\n\t\t\t\t...MOLLIE_BILLING_PROVIDER_CAPABILITIES.ports,\n\t\t\t\tproducts: hasProducts,\n\t\t\t\tprices: hasPrices,\n\t\t\t\twebhooks: true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nexport function createMollieBillingProviderRuntime(\n\tconfig: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n\tcatalog?: NormalizedAthenaBillingCatalog,\n): MollieBillingProviderRuntime {\n\treturn new MollieBillingProviderRuntimeImpl(\n\t\tnormalizeMollieRuntimeConfig(config),\n\t\tcatalog,\n\t);\n}\n","import { billingWebhookUrlIsLoopback } from \"../../../../../ingestion/urls.ts\";\nimport type {\n\tBillingProviderCreateWebhookInput,\n\tBillingProviderUpdateWebhookInput,\n} from \"../../types.ts\";\nimport { createMollieProviderRequestError } from \"../errors.ts\";\n\n/** Same bound as {@link MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX}. */\nconst MOLLIE_WEBHOOK_NAME_MAX = 30;\n\n/**\n * mollie-api-typescript `webhooks.create` outbound `eventTypes` is\n * `string[] | WebhookEventTypes` (one enum value). Mollie `POST /v2/webhooks`\n * treats a JSON array as unset and returns 422 \"No event types were set\".\n * The wire value is a comma-separated string (same as Mollie's curl sample).\n * Do not send that string through Speakeasy `webhooks.create` — Zod drops it.\n */\nexport function encodeMollieWebhookEventTypes(\n\teventTypes: readonly string[],\n): string {\n\tconst encoded = eventTypes\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0)\n\t\t.join(\",\");\n\tif (encoded.length === 0) {\n\t\tthrow new Error(\"Mollie webhook create requires at least one event type.\");\n\t}\n\treturn encoded;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Mollie returns `webhookSecret` only on create (and sometimes update). */\nexport function readMollieWebhookSigningSecret(\n\traw: unknown,\n): string | undefined {\n\tif (!isRecord(raw)) {\n\t\treturn undefined;\n\t}\n\tconst secret = raw.webhookSecret ?? raw.webhook_secret;\n\tif (typeof secret !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = secret.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function decodeMollieWebhookEventTypes(value: unknown): string[] {\n\tif (typeof value === \"string\") {\n\t\treturn value\n\t\t\t.split(\",\")\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.filter((entry) => entry.length > 0);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is string => typeof entry === \"string\");\n\t}\n\treturn [];\n}\n\nfunction rejectLoopbackMollieWebhookUrl(\n\turl: string | undefined,\n\toperation: \"webhooks.create\" | \"webhooks.update\",\n): void {\n\tif (url == null || url.trim().length === 0) {\n\t\treturn;\n\t}\n\tif (!billingWebhookUrlIsLoopback(url)) {\n\t\treturn;\n\t}\n\tthrow createMollieProviderRequestError({\n\t\tfallbackMessage:\n\t\t\t\"Mollie cannot deliver webhooks to a loopback URL. Set APP_URL or billing.ingestion.webhooks.publicBaseUrl to a publicly reachable HTTPS origin, then register the webhook again.\",\n\t\tkind: \"invalid_request\",\n\t\toperation,\n\t\trequestDispatchState: \"not_dispatched\",\n\t\tstatus: 422,\n\t});\n}\n\nexport function mapCreateWebhookToMollieSdk(input: {\n\tinput: BillingProviderCreateWebhookInput;\n\ttestMode: boolean;\n}): Record<string, unknown> {\n\tconst name = input.input.name.trim();\n\tif (name.length === 0 || name.length > MOLLIE_WEBHOOK_NAME_MAX) {\n\t\tthrow new Error(\n\t\t\t`Mollie webhook name must be 1–${MOLLIE_WEBHOOK_NAME_MAX} characters.`,\n\t\t);\n\t}\n\trejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.create\");\n\treturn {\n\t\tidempotencyKey: input.input.idempotencyKey,\n\t\trequestBody: {\n\t\t\teventTypes: encodeMollieWebhookEventTypes(input.input.eventTypes),\n\t\t\tname,\n\t\t\ttestmode: input.testMode,\n\t\t\turl: input.input.url,\n\t\t},\n\t};\n}\n\nexport function mapUpdateWebhookToMollieSdk(input: {\n\tinput: BillingProviderUpdateWebhookInput;\n\ttestMode: boolean;\n}): Record<string, unknown> {\n\tconst requestBody: Record<string, unknown> = {\n\t\ttestmode: input.testMode,\n\t};\n\tif (input.input.eventTypes) {\n\t\trequestBody.eventTypes = encodeMollieWebhookEventTypes(\n\t\t\tinput.input.eventTypes,\n\t\t);\n\t}\n\tif (input.input.name) {\n\t\trequestBody.name = input.input.name;\n\t}\n\tif (input.input.url) {\n\t\trejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.update\");\n\t\trequestBody.url = input.input.url;\n\t}\n\treturn {\n\t\trequestBody,\n\t\twebhookId: input.input.id,\n\t};\n}\n","import type { BillingResolvedCredential } from \"../../../../credentials.ts\";\nimport { createMollieProviderRequestError } from \"../errors.ts\";\nimport { invokeMollieSdk } from \"./invoke.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport async function sendMollieJson(input: {\n\tapiBaseUrl: string;\n\tbody: Record<string, unknown>;\n\tcredential: BillingResolvedCredential;\n\tidempotencyKey?: string;\n\tmethod: \"PATCH\" | \"POST\";\n\toperation: string;\n\tpath: string;\n\tsignal?: AbortSignal;\n}): Promise<unknown> {\n\tconst url = `${input.apiBaseUrl.replace(/\\/$/, \"\")}${input.path}`;\n\tconst headers: Record<string, string> = {\n\t\tAccept: \"application/hal+json\",\n\t\tAuthorization: `Bearer ${input.credential.revealForProviderRuntime()}`,\n\t\t\"Content-Type\": \"application/json\",\n\t};\n\tif (input.idempotencyKey != null && input.idempotencyKey.trim() !== \"\") {\n\t\theaders[\"idempotency-key\"] = input.idempotencyKey;\n\t}\n\treturn invokeMollieSdk({\n\t\tidempotencyKeyPresent:\n\t\t\tinput.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n\t\tinvoke: async () => {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tbody: JSON.stringify(input.body),\n\t\t\t\theaders,\n\t\t\t\tmethod: input.method,\n\t\t\t\tsignal: input.signal,\n\t\t\t});\n\t\t\tconst text = await response.text();\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = text.length === 0 ? {} : JSON.parse(text);\n\t\t\t} catch {\n\t\t\t\tparsed = { detail: text };\n\t\t\t}\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\t\tbody: parsed,\n\t\t\t\t\tfallbackMessage: `Mollie ${input.operation} failed.`,\n\t\t\t\t\tidempotencyKeyPresent:\n\t\t\t\t\t\tinput.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n\t\t\t\t\toperation: input.operation,\n\t\t\t\t\trequestDispatchState: \"dispatched\",\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!isRecord(parsed) && !Array.isArray(parsed)) {\n\t\t\t\tthrow createMollieProviderRequestError({\n\t\t\t\t\tfallbackMessage: `Mollie ${input.operation} returned a non-object body.`,\n\t\t\t\t\tkind: \"serialization\",\n\t\t\t\t\toperation: input.operation,\n\t\t\t\t\trequestDispatchState: \"dispatched\",\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn parsed;\n\t\t},\n\t\toperation: input.operation,\n\t});\n}\n","import type { BillingPage } from \"../../../types.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCreateWebhookInput,\n\tBillingProviderExecutionContext,\n\tBillingProviderUpdateWebhookInput,\n\tBillingProviderWebhook,\n\tBillingWebhookManagementCapability,\n\tBillingWebhooksPort,\n} from \"../types.ts\";\nimport {\n\tdecodeMollieWebhookEventTypes,\n\tmapCreateWebhookToMollieSdk,\n\tmapUpdateWebhookToMollieSdk,\n\treadMollieWebhookSigningSecret,\n} from \"./dialect/webhooks.ts\";\nimport { callMollieSdk, clientFromPool } from \"./sdk/call.ts\";\nimport type { MollieSdkClientPool } from \"./sdk/client-factory.ts\";\nimport { sendMollieJson } from \"./sdk/json.ts\";\nimport { readOneMollieSdkPage } from \"./sdk/page.ts\";\nimport { resolveMollieWebhookManagementCapability } from \"./webhook-capability.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction projectMollieWebhook(\n\traw: unknown,\n\tenvironment: \"test\" | \"live\",\n): BillingProviderWebhook {\n\tif (!isRecord(raw) || typeof raw.id !== \"string\") {\n\t\tthrow new Error(\"Mollie webhook projection requires an id.\");\n\t}\n\tconst eventTypes = decodeMollieWebhookEventTypes(\n\t\traw.eventTypes ?? raw.event_types,\n\t);\n\tconst status =\n\t\traw.status === \"disabled\" || raw.enabled === false ? \"disabled\" : \"active\";\n\tconst signingSecret = readMollieWebhookSigningSecret(raw);\n\treturn {\n\t\tenvironment,\n\t\teventTypes,\n\t\tid: raw.id,\n\t\t...(typeof raw.name === \"string\" ? { name: raw.name } : {}),\n\t\tprovider: \"mollie\",\n\t\tstatus,\n\t\turl: typeof raw.url === \"string\" ? raw.url : \"\",\n\t\t...(signingSecret ? { signingSecret } : {}),\n\t};\n}\n\nexport class MollieBillingWebhooksPort implements BillingWebhooksPort {\n\treadonly kind = \"webhooks\" as const;\n\n\tconstructor(private readonly pool: MollieSdkClientPool) { }\n\n\tasync getCapability(\n\t\tbinding: BillingProviderBinding,\n\t): Promise<BillingWebhookManagementCapability> {\n\t\treturn resolveMollieWebhookManagementCapability(binding);\n\t}\n\n\tasync list(\n\t\tcontext: BillingProviderExecutionContext,\n\t): Promise<BillingPage<BillingProviderWebhook>> {\n\t\tconst capability = resolveMollieWebhookManagementCapability(context.binding);\n\t\tif (!capability.nextGen.available) {\n\t\t\treturn { items: [], nextCursor: null };\n\t\t}\n\t\tconst raw = await callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"list\",\n\t\t\toperation: \"webhooks.list\",\n\t\t\trequest: {},\n\t\t\tresource: \"webhooks\",\n\t\t\tunwrap: false,\n\t\t});\n\t\tconst page = await readOneMollieSdkPage(raw, \"webhooks\");\n\t\tconst environment = context.environment.testMode ? \"test\" : \"live\";\n\t\treturn {\n\t\t\titems: page.items.map((item) => projectMollieWebhook(item, environment)),\n\t\t\tnextCursor: page.nextCursor,\n\t\t};\n\t}\n\n\tasync create(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderCreateWebhookInput,\n\t): Promise<BillingProviderWebhook> {\n\t\tconst mapped = mapCreateWebhookToMollieSdk({\n\t\t\tinput,\n\t\t\ttestMode: context.environment.testMode,\n\t\t});\n\t\tconst requestBody = mapped.requestBody;\n\t\tif (!isRecord(requestBody)) {\n\t\t\tthrow new Error(\"Mollie webhook create requires a JSON request body.\");\n\t\t}\n\t\tconst raw = await sendMollieJson({\n\t\t\tapiBaseUrl: this.pool.apiBaseUrl(),\n\t\t\tbody: requestBody,\n\t\t\tcredential: context.credential,\n\t\t\t...(typeof mapped.idempotencyKey === \"string\"\n\t\t\t\t? { idempotencyKey: mapped.idempotencyKey }\n\t\t\t\t: {}),\n\t\t\tmethod: \"POST\",\n\t\t\toperation: \"webhooks.create\",\n\t\t\tpath: \"/v2/webhooks\",\n\t\t\tsignal: context.signal,\n\t\t});\n\t\treturn projectMollieWebhook(\n\t\t\traw,\n\t\t\tcontext.environment.testMode ? \"test\" : \"live\",\n\t\t);\n\t}\n\n\tasync update(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: BillingProviderUpdateWebhookInput,\n\t): Promise<BillingProviderWebhook> {\n\t\tconst mapped = mapUpdateWebhookToMollieSdk({\n\t\t\tinput,\n\t\t\ttestMode: context.environment.testMode,\n\t\t});\n\t\tconst requestBody = mapped.requestBody;\n\t\tconst webhookId = mapped.webhookId;\n\t\tif (!isRecord(requestBody) || typeof webhookId !== \"string\") {\n\t\t\tthrow new Error(\"Mollie webhook update requires an id and JSON body.\");\n\t\t}\n\t\tconst raw = await sendMollieJson({\n\t\t\tapiBaseUrl: this.pool.apiBaseUrl(),\n\t\t\tbody: requestBody,\n\t\t\tcredential: context.credential,\n\t\t\tmethod: \"PATCH\",\n\t\t\toperation: \"webhooks.update\",\n\t\t\tpath: `/v2/webhooks/${encodeURIComponent(webhookId)}`,\n\t\t\tsignal: context.signal,\n\t\t});\n\t\treturn projectMollieWebhook(\n\t\t\traw,\n\t\t\tcontext.environment.testMode ? \"test\" : \"live\",\n\t\t);\n\t}\n\n\tasync delete(\n\t\tcontext: BillingProviderExecutionContext,\n\t\tinput: { id: string },\n\t): Promise<void> {\n\t\tawait callMollieSdk({\n\t\t\tclient: clientFromPool(this.pool, context),\n\t\t\tmethod: \"delete\",\n\t\t\toperation: \"webhooks.delete\",\n\t\t\trequest: { webhookId: input.id },\n\t\t\tresource: \"webhooks\",\n\t\t});\n\t}\n}\n\nexport function createMollieBillingWebhooksPort(\n\tpool: MollieSdkClientPool,\n): BillingWebhooksPort {\n\treturn new MollieBillingWebhooksPort(pool);\n}\n","import type { BillingProviderCapabilities } from \"../types.ts\";\n\n/**\n * Reserved Stripe slot. Every flag is false — local Stripe has no HTTP client\n * and no webhook signature verification. Enabling any operation here without\n * an adapter is a product defect.\n */\nexport const STRIPE_BILLING_PROVIDER_CAPABILITIES: BillingProviderCapabilities =\n\t{\n\t\toperations: {\n\t\t\t\"customers.create\": false,\n\t\t\t\"customers.delete\": false,\n\t\t\t\"customers.get\": false,\n\t\t\t\"customers.list\": false,\n\t\t\t\"customers.update\": false,\n\t\t\t\"invoices.get\": false,\n\t\t\t\"invoices.list\": false,\n\t\t\t\"paymentLinks.create\": false,\n\t\t\t\"paymentLinks.delete\": false,\n\t\t\t\"paymentLinks.get\": false,\n\t\t\t\"paymentLinks.list\": false,\n\t\t\t\"paymentLinks.update\": false,\n\t\t\t\"payments.cancel\": false,\n\t\t\t\"payments.create\": false,\n\t\t\t\"payments.get\": false,\n\t\t\t\"payments.list\": false,\n\t\t\t\"refunds.cancel\": false,\n\t\t\t\"refunds.create\": false,\n\t\t\t\"refunds.get\": false,\n\t\t\t\"refunds.list\": false,\n\t\t\t\"subscriptions.cancel\": false,\n\t\t\t\"subscriptions.create\": false,\n\t\t\t\"subscriptions.get\": false,\n\t\t\t\"subscriptions.list\": false,\n\t\t\t\"subscriptions.update\": false,\n\t\t\t\"webhooks.create\": false,\n\t\t\t\"webhooks.delete\": false,\n\t\t\t\"webhooks.get\": false,\n\t\t\t\"webhooks.list\": false,\n\t\t\t\"webhooks.test\": false,\n\t\t\t\"webhooks.update\": false,\n\t\t\t\"products.list\": false,\n\t\t\t\"prices.list\": false,\n\t\t\t\"checkout.create\": false,\n\t\t},\n\t\tports: {\n\t\t\tcustomers: false,\n\t\t\tinvoices: false,\n\t\t\tpaymentLinks: false,\n\t\t\tpayments: false,\n\t\t\trefunds: false,\n\t\t\tsubscriptions: false,\n\t\t\twebhooks: false,\n\t\t\tproducts: false,\n\t\t\tprices: false,\n\t\t\tcheckout: false,\n\t\t},\n\t};\n","import type {\n\tNormalizedStripeBillingProviderConfig,\n\tStripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type {\n\tBillingProviderBinding,\n\tBillingProviderCapabilities,\n\tStripeBillingProviderRuntime,\n} from \"../types.ts\";\nimport { STRIPE_BILLING_PROVIDER_CAPABILITIES } from \"./capabilities.ts\";\nimport { normalizeStripeRuntimeConfig } from \"./config.ts\";\n\nexport class StripeBillingProviderRuntimeImpl\n\timplements StripeBillingProviderRuntime\n{\n\treadonly provider = \"stripe\" as const;\n\treadonly payments = undefined;\n\treadonly customers = undefined;\n\treadonly refunds = undefined;\n\treadonly paymentLinks = undefined;\n\treadonly subscriptions = undefined;\n\treadonly invoices = undefined;\n\treadonly webhooks = undefined;\n\n\tconstructor(readonly config: NormalizedStripeBillingProviderConfig) {}\n\n\tasync getCapabilities(\n\t\t_binding: BillingProviderBinding,\n\t): Promise<BillingProviderCapabilities> {\n\t\treturn STRIPE_BILLING_PROVIDER_CAPABILITIES;\n\t}\n}\n\nexport function createStripeBillingProviderRuntime(\n\tconfig: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig,\n): StripeBillingProviderRuntime {\n\treturn new StripeBillingProviderRuntimeImpl(\n\t\tnormalizeStripeRuntimeConfig(config),\n\t);\n}\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport { fingerprintBillingSigningSecret } from \"../ownership.ts\";\nimport { openBillingWebhookSecret, sealBillingWebhookSecret } from \"./envelope.ts\";\nimport type { BillingWebhookSecretStore } from \"./types.ts\";\n\nexport function createPostgresBillingWebhookSecretStore(input: {\n\tmasterKey: string;\n\tsql: BillingSqlExecutor;\n}): BillingWebhookSecretStore {\n\tconst masterKey = input.masterKey.trim();\n\tif (masterKey.length === 0) {\n\t\tthrow new AthenaConfigurationError(\n\t\t\t\"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n\t\t\t\"Encrypted billing webhook secrets require ATHENA_BILLING_WEBHOOK_MASTER_KEY (or billing.ingestion.webhooks.secretMasterKey).\",\n\t\t\t\"billing\",\n\t\t);\n\t}\n\tconst sql = input.sql;\n\treturn {\n\t\tasync resolve(connectionId) {\n\t\t\tconst result = await sql.query(\n\t\t\t\t`\nSELECT fingerprint, ciphertext, status\nFROM athena_internal.billing_webhook_signing_secrets\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\nORDER BY CASE status WHEN 'current' THEN 0 ELSE 1 END, created_at DESC\n`,\n\t\t\t\t[connectionId],\n\t\t\t);\n\t\t\tlet current: string | undefined;\n\t\t\tconst previous: string[] = [];\n\t\t\tfor (const row of result.rows) {\n\t\t\t\tconst secret = openBillingWebhookSecret(\n\t\t\t\t\tString(row.ciphertext),\n\t\t\t\t\tmasterKey,\n\t\t\t\t);\n\t\t\t\tif (row.status === \"current\" && current == null) {\n\t\t\t\t\tcurrent = secret;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (row.status === \"previous\") {\n\t\t\t\t\tprevious.push(secret);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprevious,\n\t\t\t\t...(current ? { current } : {}),\n\t\t\t};\n\t\t},\n\t\tasync rotate(inputRotate) {\n\t\t\tawait replaceConnectionSecrets(sql, masterKey, inputRotate.connectionId, [\n\t\t\t\t{ secret: inputRotate.current, status: \"current\" },\n\t\t\t\t...inputRotate.previous.map((secret) => ({\n\t\t\t\t\tsecret,\n\t\t\t\t\tstatus: \"previous\" as const,\n\t\t\t\t})),\n\t\t\t]);\n\t\t},\n\t\tasync storeCurrent(storeInput) {\n\t\t\tconst existing = await sql.query(\n\t\t\t\t`\nSELECT fingerprint, ciphertext, status\nFROM athena_internal.billing_webhook_signing_secrets\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\n`,\n\t\t\t\t[storeInput.connectionId],\n\t\t\t);\n\t\t\tconst next: { secret: string; status: \"current\" | \"previous\" }[] = [\n\t\t\t\t{ secret: storeInput.secret, status: \"current\" },\n\t\t\t];\n\t\t\tfor (const row of existing.rows) {\n\t\t\t\tif (String(row.fingerprint) === storeInput.fingerprint) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst secret = openBillingWebhookSecret(\n\t\t\t\t\tString(row.ciphertext),\n\t\t\t\t\tmasterKey,\n\t\t\t\t);\n\t\t\t\tif (row.status === \"current\") {\n\t\t\t\t\tnext.push({ secret, status: \"previous\" });\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait replaceConnectionSecrets(\n\t\t\t\tsql,\n\t\t\t\tmasterKey,\n\t\t\t\tstoreInput.connectionId,\n\t\t\t\tnext,\n\t\t\t);\n\t\t},\n\t};\n}\n\nasync function replaceConnectionSecrets(\n\tsql: BillingSqlExecutor,\n\tmasterKey: string,\n\tconnectionId: string,\n\tsecrets: readonly { secret: string; status: \"current\" | \"previous\" }[],\n): Promise<void> {\n\tawait sql.query(\n\t\t`\nUPDATE athena_internal.billing_webhook_signing_secrets\nSET status = 'retired', retired_at = now()\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\n`,\n\t\t[connectionId],\n\t);\n\tfor (const entry of secrets) {\n\t\tconst fingerprint = fingerprintBillingSigningSecret(entry.secret);\n\t\tconst ciphertext = sealBillingWebhookSecret(entry.secret, masterKey);\n\t\tawait sql.query(\n\t\t\t`\nINSERT INTO athena_internal.billing_webhook_signing_secrets (\n\tconnection_id, key_version, fingerprint, ciphertext, status, created_at\n) VALUES ($1::uuid, 1, $2, $3, $4, now())\nON CONFLICT (connection_id, fingerprint) DO UPDATE SET\n\tciphertext = EXCLUDED.ciphertext,\n\tstatus = EXCLUDED.status,\n\tretired_at = NULL,\n\tkey_version = EXCLUDED.key_version\n`,\n\t\t\t[connectionId, fingerprint, ciphertext, entry.status],\n\t\t);\n\t}\n}\n","import { createCipheriv, createDecipheriv, createHash, randomBytes } from \"node:crypto\";\n\nconst VERSION = \"v1\";\nconst IV_LENGTH = 12;\nconst AUTH_TAG_LENGTH = 16;\n\nfunction aesKey(masterKey: string): Buffer {\n\treturn createHash(\"sha256\").update(masterKey, \"utf8\").digest();\n}\n\nexport function sealBillingWebhookSecret(\n\tsecret: string,\n\tmasterKey: string,\n): string {\n\tconst key = aesKey(masterKey);\n\tconst iv = randomBytes(IV_LENGTH);\n\tconst cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\tconst encrypted = Buffer.concat([\n\t\tcipher.update(secret, \"utf8\"),\n\t\tcipher.final(),\n\t]);\n\tconst tag = cipher.getAuthTag();\n\treturn `${VERSION}.${iv.toString(\"base64url\")}.${encrypted.toString(\"base64url\")}.${tag.toString(\"base64url\")}`;\n}\n\nexport function openBillingWebhookSecret(\n\tciphertext: string,\n\tmasterKey: string,\n): string {\n\tconst parts = ciphertext.split(\".\");\n\tif (parts.length !== 4 || parts[0] !== VERSION) {\n\t\tthrow new Error(\"Unsupported billing webhook secret envelope.\");\n\t}\n\tconst ivPart = parts[1];\n\tconst dataPart = parts[2];\n\tconst tagPart = parts[3];\n\tif (ivPart == null || dataPart == null || tagPart == null) {\n\t\tthrow new Error(\"Unsupported billing webhook secret envelope.\");\n\t}\n\tconst iv = Buffer.from(ivPart, \"base64url\");\n\tconst data = Buffer.from(dataPart, \"base64url\");\n\tconst tag = Buffer.from(tagPart, \"base64url\");\n\tif (iv.length !== IV_LENGTH || tag.length !== AUTH_TAG_LENGTH) {\n\t\tthrow new Error(\"Invalid billing webhook secret envelope.\");\n\t}\n\tconst key = aesKey(masterKey);\n\tconst decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n\tdecipher.setAuthTag(tag);\n\treturn Buffer.concat([decipher.update(data), decipher.final()]).toString(\n\t\t\"utf8\",\n\t);\n}\n","import { flattenSigningSecrets } from \"../config.ts\";\nimport type { BillingSigningSecretSet } from \"../types.ts\";\n\nexport type BillingConnectionSigningSecretCache = Map<string, string[]>;\n\nexport function rememberConnectionSigningSecret(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string,\n\tsecret: string,\n): void {\n\tconst trimmed = secret.trim();\n\tif (trimmed.length === 0) {\n\t\treturn;\n\t}\n\tconst existing = cache.get(connectionId) ?? [];\n\tif (!existing.includes(trimmed)) {\n\t\texisting.push(trimmed);\n\t\tcache.set(connectionId, existing);\n\t}\n}\n\nexport function rememberConnectionSigningSecretSet(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string,\n\tsecrets: BillingSigningSecretSet,\n): void {\n\tfor (const secret of flattenSigningSecrets(secrets)) {\n\t\trememberConnectionSigningSecret(cache, connectionId, secret);\n\t}\n}\n\nexport function signingSecretsForConnection(\n\tcache: BillingConnectionSigningSecretCache,\n\tconnectionId: string | undefined,\n): readonly string[] {\n\tif (connectionId == null || connectionId.length === 0) {\n\t\treturn [];\n\t}\n\treturn cache.get(connectionId) ?? [];\n}\n","import { createHash } from \"node:crypto\";\n\nexport function resolveBillingWebhookMasterKey(input: {\n\tconfigured?: string;\n\tdatabaseUrl?: string;\n}): string | undefined {\n\tconst fromEnv = process.env.ATHENA_BILLING_WEBHOOK_MASTER_KEY?.trim();\n\tif (fromEnv && fromEnv.length > 0) {\n\t\treturn fromEnv;\n\t}\n\tconst configured = input.configured?.trim();\n\tif (configured && configured.length > 0) {\n\t\treturn configured;\n\t}\n\tconst databaseUrl = input.databaseUrl?.trim();\n\tif (databaseUrl && databaseUrl.length > 0) {\n\t\treturn createHash(\"sha256\")\n\t\t\t.update(`athena-billing-webhook-secrets:${databaseUrl}`, \"utf8\")\n\t\t\t.digest(\"hex\");\n\t}\n\treturn undefined;\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type { CliCommand, PolicyDxCommand } from \"../../types.ts\";\nimport { parse, run, usage } from \"./index.ts\";\n\nfunction adapt(path: readonly string[], prefix: string[] = []) {\n\treturn defineCommand({\n\t\tpath,\n\t\tlegacy: path.length === 1 ? \"policy\" : (`policy-${path[1] ?? \"list\"}` as CliCommand[\"command\"]),\n\t\tparse: (rest) => parse([...prefix, ...rest]),\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as PolicyDxCommand),\n\t\tusage,\n\t});\n}\n\nexport const policyCommands = [\n\tadapt([\"policy\"]),\n\tadapt([\"policy\", \"list\"], [\"list\"]),\n\tadapt([\"policy\", \"show\"], [\"show\"]),\n\tadapt([\"policy\", \"validate\"], [\"validate\"]),\n\tadapt([\"policy\", \"lint\"], [\"lint\"]),\n\tadapt([\"policy\", \"coverage\"], [\"coverage\"]),\n\tadapt([\"policy\", \"explain\"], [\"explain\"]),\n\tadapt([\"policy\", \"simulate\"], [\"simulate\"]),\n\tadapt([\"policy\", \"fingerprint\"], [\"fingerprint\"]),\n\tadapt([\"policy\", \"export\"], [\"export\"]),\n];\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n\tencodeCliJsonSuccess,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { CliCommand, PolicyDxCommand } from \"../../types.ts\";\nimport {\n\tcanonicalizeDocument,\n\tcoverageAthenaPolicy,\n\texplainAthenaPolicy,\n\tfingerprintDocument,\n\tlintAthenaPolicy,\n\tsimulateAthenaPolicy,\n} from \"../../../policy/index.ts\";\nimport { validatePolicyDefinition } from \"../../../policy/validate-ir.ts\";\nimport { loadPolicyDocument } from \"./load.ts\";\n\nexport { policyCatalog, policyCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"policy\"];\n\nconst POLICY_ACTIONS = [\"list\", \"show\", \"validate\", \"lint\", \"coverage\", \"explain\", \"simulate\", \"fingerprint\", \"export\"] as const;\n\ntype PolicyAction = (typeof POLICY_ACTIONS)[number];\n\nfunction isPolicyAction(value: string): value is PolicyAction {\n\treturn (POLICY_ACTIONS as readonly string[]).includes(value);\n}\n\nfunction commandId(action: PolicyAction | undefined): PolicyDxCommand[\"command\"] {\n\tif (!action || action === \"list\") {\n\t\treturn action === \"list\" ? \"policy-list\" : \"policy\";\n\t}\n\treturn `policy-${action}` as PolicyDxCommand[\"command\"];\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tconst head = rest[0];\n\tif (\n\t\thead === undefined ||\n\t\thead === \"help\" ||\n\t\thead === \"--help\" ||\n\t\thead === \"-h\"\n\t) {\n\t\tif (head === \"help\" || head === \"--help\" || head === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"policy\" };\n\t\t}\n\t\treturn { command: \"policy\" };\n\t}\n\tif (!isPolicyAction(head)) {\n\t\tthrow unknownOptionError(head, \"policy\");\n\t}\n\treturn parseFlags(head, rest.slice(1));\n}\n\nfunction parseFlags(action: PolicyAction, rest: readonly string[]): PolicyDxCommand {\n\tlet configPath: string | undefined;\n\tlet format: \"ir\" | undefined;\n\tlet id: string | undefined;\n\tlet json = false;\n\tlet policyAction: string | undefined;\n\tlet resource: string | undefined;\n\tlet row: string | undefined;\n\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"policy\" } as never;\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--format\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --format option.\");\n\t\t\t}\n\t\t\tif (nextValue !== \"ir\") {\n\t\t\t\tthrow unknownOptionError(`--format ${nextValue}`, \"policy export\");\n\t\t\t}\n\t\t\tformat = \"ir\";\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--id\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --id option.\");\n\t\t\t}\n\t\t\tid = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--action\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --action option.\");\n\t\t\t}\n\t\t\tpolicyAction = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--resource\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --resource option.\");\n\t\t\t}\n\t\t\tresource = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--row\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --row option.\");\n\t\t\t}\n\t\t\trow = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", `policy ${action}`);\n\t}\n\n\tif (action === \"export\") {\n\t\treturn {\n\t\t\taction: policyAction,\n\t\t\tcommand: \"policy-export\",\n\t\t\tconfigPath,\n\t\t\tformat: format ?? \"ir\",\n\t\t\tid,\n\t\t\tjson,\n\t\t\tresource,\n\t\t\trow,\n\t\t};\n\t}\n\n\treturn {\n\t\taction: policyAction,\n\t\tcommand: commandId(action),\n\t\tconfigPath,\n\t\tformat,\n\t\tid,\n\t\tjson,\n\t\tresource,\n\t\trow,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"policy\");\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: PolicyDxCommand): boolean {\n\treturn ctx.output === \"json\" || parsed.json === true;\n}\n\nfunction parseRow(raw: string | undefined): Record<string, unknown> {\n\tif (!raw) {\n\t\treturn {};\n\t}\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\tthrow new Error(\"--row must be a JSON object.\");\n\t}\n\treturn parsed as Record<string, unknown>;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: PolicyDxCommand,\n): Promise<void> {\n\tconst loaded = await loadPolicyDocument({\n\t\tconfigPath: parsed.configPath,\n\t\tcwd: ctx.cwd,\n\t});\n\tconst document = loaded.document;\n\tconst json = wantsJson(ctx, parsed);\n\tconst verb =\n\t\tparsed.command === \"policy\" || parsed.command === \"policy-list\"\n\t\t\t? \"list\"\n\t\t\t: parsed.command.replace(\"policy-\", \"\");\n\n\tif (verb === \"list\") {\n\t\tconst rows = document.policies.map((item) => ({\n\t\t\tactions: item.actions,\n\t\t\tid: item.id,\n\t\t\tresource: item.resource,\n\t\t}));\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.list\", { policies: rows })));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(rows.map((item) => item.id).join(\"\\n\") || \"(no policies)\");\n\t\treturn;\n\t}\n\n\tif (verb === \"show\") {\n\t\tconst match = document.policies.find((item) => item.id === parsed.id);\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.show\", { policy: match ?? null })));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(JSON.stringify(match ?? null, null, 2));\n\t\treturn;\n\t}\n\n\tif (verb === \"validate\") {\n\t\tfor (const policy of document.policies) {\n\t\t\tvalidatePolicyDefinition(policy);\n\t\t}\n\t\tif (json) {\n\t\t\tctx.log(\n\t\t\t\tstringifyCliJson(\n\t\t\t\t\tencodeCliJsonSuccess(\"policy.validate\", { ok: true, count: document.policies.length }),\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(`ok (${document.policies.length} policies)`);\n\t\treturn;\n\t}\n\n\tif (verb === \"lint\") {\n\t\tconst report = lintAthenaPolicy(document);\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.lint\", report)));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(JSON.stringify(report.findings, null, 2));\n\t\treturn;\n\t}\n\n\tif (verb === \"coverage\") {\n\t\tconst report = coverageAthenaPolicy(document);\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.coverage\", report)));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(JSON.stringify(report.cells, null, 2));\n\t\treturn;\n\t}\n\n\tif (verb === \"explain\") {\n\t\tconst explained = explainAthenaPolicy({\n\t\t\taction: (parsed.action as \"select\") ?? \"select\",\n\t\t\tdocument,\n\t\t\tresource: parsed.resource ?? \"\",\n\t\t});\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.explain\", explained)));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(JSON.stringify(explained, null, 2));\n\t\treturn;\n\t}\n\n\tif (verb === \"simulate\") {\n\t\tconst simulated = simulateAthenaPolicy({\n\t\t\taction: (parsed.action as \"select\") ?? \"select\",\n\t\t\tdocument,\n\t\t\tresource: parsed.resource ?? \"\",\n\t\t\trow: parseRow(parsed.row),\n\t\t});\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.simulate\", simulated)));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(JSON.stringify(simulated, null, 2));\n\t\treturn;\n\t}\n\n\tif (verb === \"fingerprint\") {\n\t\tconst fingerprint = fingerprintDocument(document);\n\t\tif (json) {\n\t\t\tctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.fingerprint\", { fingerprint })));\n\t\t\treturn;\n\t\t}\n\t\tctx.logRaw(fingerprint);\n\t\treturn;\n\t}\n\n\tif (verb === \"export\") {\n\t\tconst canonical = canonicalizeDocument(document);\n\t\tconst bytes = JSON.stringify(canonical);\n\t\tctx.logRaw(bytes);\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n\tcatalogSubcommands,\n\tcatalogSubcommandTokens,\n\tformatCatalogTopicUsage,\n\tformatExpectedCommandsLine,\n} from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport {\n\tcreateGatewayApiKeyRight,\n\tformatApiKeyRights,\n\tformatRightsCatalog,\n\tlistGatewayApiKeyRights,\n\tlistGatewayRightsCatalog,\n\tresolveGatewayAdminCredentials,\n} from \"../../gateway-admin.ts\";\nimport { parseAthenaRightKey } from \"../../../rights/key.ts\";\nimport {\n\thelpOrRejectUnknownFlags,\n\tparseGatewayAdminFlags,\n\tunknownOptionError,\n} from \"../../parse-helpers.ts\";\nimport { closestMatches, formatDidYouMean } from \"../../suggest.ts\";\nimport type {\n\tCliCommand,\n\tRightsCatalogCommand,\n\tRightsCreateCommand,\n\tRightsListCommand,\n} from \"../../types.ts\";\n\nexport { rightsCatalog, rightsCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"rights\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tif (\n\t\trest.length === 0 ||\n\t\trest[0] === \"help\" ||\n\t\trest[0] === \"--help\" ||\n\t\trest[0] === \"-h\"\n\t) {\n\t\treturn { command: \"help\", topic: \"rights\" };\n\t}\n\n\tconst sub = rest[0];\n\tif (sub === \"list\" || sub === \"ls\") {\n\t\tconst common = parseGatewayAdminFlags(rest, 1);\n\t\tconst help = helpOrRejectUnknownFlags(\n\t\t\trest,\n\t\t\tcommon.index,\n\t\t\t\"rights list\",\n\t\t\t\"rights\",\n\t\t);\n\t\tif (help) {\n\t\t\treturn help;\n\t\t}\n\t\treturn {\n\t\t\tcommand: \"rights-list\",\n\t\t\tadminKey: common.adminKey,\n\t\t\tjson: common.json,\n\t\t\turl: common.url,\n\t\t};\n\t}\n\n\tif (sub === \"catalog\" || sub === \"all\") {\n\t\tconst common = parseGatewayAdminFlags(rest, 1);\n\t\tconst help = helpOrRejectUnknownFlags(\n\t\t\trest,\n\t\t\tcommon.index,\n\t\t\t\"rights catalog\",\n\t\t\t\"rights\",\n\t\t);\n\t\tif (help) {\n\t\t\treturn help;\n\t\t}\n\t\treturn {\n\t\t\tcommand: \"rights-catalog\",\n\t\t\tadminKey: common.adminKey,\n\t\t\tjson: common.json,\n\t\t\turl: common.url,\n\t\t};\n\t}\n\n\tif (sub === \"create\") {\n\t\tlet index = 1;\n\t\tlet name: string | undefined;\n\t\tlet description: string | undefined;\n\t\tlet json = false;\n\t\tlet url: string | undefined;\n\t\tlet adminKey: string | undefined;\n\n\t\twhile (index < rest.length) {\n\t\t\tconst token = rest[index];\n\t\t\tindex += 1;\n\t\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\t\treturn { command: \"help\", topic: \"rights\" };\n\t\t\t}\n\t\t\tif (token === \"--json\") {\n\t\t\t\tjson = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token === \"--name\") {\n\t\t\t\tconst nextValue = rest[index];\n\t\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(\"Missing value for --name option.\");\n\t\t\t\t}\n\t\t\t\tname = nextValue;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token === \"--description\") {\n\t\t\t\tconst nextValue = rest[index];\n\t\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(\"Missing value for --description option.\");\n\t\t\t\t}\n\t\t\t\tdescription = nextValue;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token === \"--url\") {\n\t\t\t\tconst nextValue = rest[index];\n\t\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(\"Missing value for --url option.\");\n\t\t\t\t}\n\t\t\t\turl = nextValue;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (token === \"--admin-key\") {\n\t\t\t\tconst nextValue = rest[index];\n\t\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\t\tthrow new Error(\"Missing value for --admin-key option.\");\n\t\t\t\t}\n\t\t\t\tadminKey = nextValue;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow unknownOptionError(token, \"rights create\");\n\t\t}\n\n\t\tif (!name) {\n\t\t\tthrow new Error(\n\t\t\t\t\"rights create requires --name <right>. Example: athena-js rights create --name gateway.query\",\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tcommand: \"rights-create\",\n\t\t\tadminKey,\n\t\t\tdescription,\n\t\t\tjson,\n\t\t\tname: parseAthenaRightKey(name),\n\t\t\turl,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t[\n\t\t\t`Unknown rights subcommand \"${sub}\".`,\n\t\t\tformatDidYouMean(closestMatches(sub, catalogSubcommandTokens(\"rights\"))),\n\t\t\tformatExpectedCommandsLine(catalogSubcommands(\"rights\")),\n\t\t]\n\t\t\t.filter((line) => line.length > 0)\n\t\t\t.join(\"\\n\"),\n\t);\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"rights\");\n}\n\nexport function sessionTitle(\n\t_parsed: RightsListCommand | RightsCatalogCommand | RightsCreateCommand,\n): string {\n\treturn \"athena-js rights\";\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: RightsListCommand | RightsCatalogCommand | RightsCreateCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, runtime } = ctx;\n\ttry {\n\t\tconst credentials = resolveGatewayAdminCredentials({\n\t\t\tadminKey: parsed.adminKey,\n\t\t\tbaseUrl: parsed.url,\n\t\t\tcwd: runtime.cwd,\n\t\t});\n\t\tconst clientOptions = {\n\t\t\t...credentials,\n\t\t\tfetchImpl: runtime.fetchImpl,\n\t\t};\n\n\t\tif (parsed.command === \"rights-list\") {\n\t\t\tconst rights = await listGatewayApiKeyRights(clientOptions);\n\t\t\tif (parsed.json) {\n\t\t\t\tlog(JSON.stringify({ rights }, null, 2));\n\t\t\t} else {\n\t\t\t\tlog(\n\t\t\t\t\t`[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`,\n\t\t\t\t);\n\t\t\t\tlog(formatApiKeyRights(rights));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (parsed.command === \"rights-catalog\") {\n\t\t\tconst catalog = await listGatewayRightsCatalog(clientOptions);\n\t\t\tif (parsed.json) {\n\t\t\t\tlog(JSON.stringify(catalog, null, 2));\n\t\t\t} else {\n\t\t\t\tlog(\n\t\t\t\t\t`[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`,\n\t\t\t\t);\n\t\t\t\tlog(formatRightsCatalog(catalog));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst right = await createGatewayApiKeyRight({\n\t\t\t...clientOptions,\n\t\t\tinput: {\n\t\t\t\tdescription: parsed.description,\n\t\t\t\tname: parsed.name,\n\t\t\t},\n\t\t});\n\t\tif (parsed.json) {\n\t\t\tlog(JSON.stringify({ right }, null, 2));\n\t\t} else {\n\t\t\tlog(\n\t\t\t\t`Created API key right name=${right.name}${right.id ? ` id=${right.id}` : \"\"}`,\n\t\t\t);\n\t\t\tif (right.description) {\n\t\t\t\tlog(`description: ${right.description}`);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type { CliCommand, SchemaDiffCommand, SchemaSnapshotCommand } from \"../../types.ts\";\nimport { parse, run, usage } from \"./index.ts\";\n\nexport const schemaCommands = [\n\tdefineCommand({\n\t\tpath: [\"schema\"],\n\t\tlegacy: \"schema\",\n\t\tparse: () => ({ command: \"schema\" }),\n\t\trun: async (ctx) => {\n\t\t\tctx.logRaw(usage());\n\t\t},\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tpath: [\"schema\", \"diff\"],\n\t\tlegacy: \"schema-diff\",\n\t\tparse: (rest) => parse([\"diff\", ...rest]),\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as SchemaDiffCommand),\n\t\tusage,\n\t}),\n\tdefineCommand({\n\t\tpath: [\"schema\", \"snapshot\"],\n\t\tlegacy: \"schema-snapshot\",\n\t\tparse: (rest) => parse([\"snapshot\", ...rest]),\n\t\trun: (ctx: CommandContext, parsed: CliCommand) =>\n\t\t\trun(ctx, parsed as SchemaSnapshotCommand),\n\t\tusage,\n\t}),\n];\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n\tencodeCliJsonFailure,\n\tencodeCliJsonSuccess,\n\texitCodeForError,\n\tstringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { CliCommand, SchemaDiffCommand, SchemaSnapshotCommand } from \"../../types.ts\";\n\nexport { schemaCatalog, schemaCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"schema\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tconst head = rest[0];\n\tif (\n\t\thead === undefined ||\n\t\thead === \"help\" ||\n\t\thead === \"--help\" ||\n\t\thead === \"-h\"\n\t) {\n\t\treturn { command: \"help\", topic: \"schema\" };\n\t}\n\tif (head === \"diff\") {\n\t\treturn parseDiffFlags(rest.slice(1));\n\t}\n\tif (head === \"snapshot\") {\n\t\treturn parseSnapshotFlags(rest.slice(1));\n\t}\n\tthrow unknownOptionError(head, \"schema\");\n}\n\nfunction parseDiffFlags(rest: readonly string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet fromPath: string | undefined;\n\tlet json = false;\n\tlet migration = false;\n\tlet policyImpact = false;\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"schema\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--migration\") {\n\t\t\tmigration = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--policy-impact\") {\n\t\t\tpolicyImpact = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--from\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --from option.\");\n\t\t\t}\n\t\t\tfromPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"schema diff\");\n\t}\n\treturn {\n\t\tcommand: \"schema-diff\",\n\t\tconfigPath,\n\t\tfromPath,\n\t\tjson,\n\t\tmigration,\n\t\tpolicyImpact,\n\t};\n}\n\nfunction parseSnapshotFlags(rest: readonly string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet outPath: string | undefined;\n\tlet json = false;\n\tlet check = false;\n\tfor (let index = 0; index < rest.length; index += 1) {\n\t\tconst token = rest[index];\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"schema\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--check\") {\n\t\t\tcheck = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--out\" || token === \"--file\") {\n\t\t\tconst nextValue = rest[index + 1];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --out option.\");\n\t\t\t}\n\t\t\toutPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token ?? \"\", \"schema snapshot\");\n\t}\n\treturn {\n\t\tcommand: \"schema-snapshot\",\n\t\tcheck,\n\t\tconfigPath,\n\t\tjson,\n\t\toutPath,\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"schema\");\n}\n\nfunction wantsJson(\n\tctx: CommandContext,\n\tparsed: { json?: boolean },\n): boolean {\n\treturn ctx.output === \"json\" || parsed.json === true;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: SchemaDiffCommand | SchemaSnapshotCommand,\n): Promise<void> {\n\tconst json = wantsJson(ctx, parsed);\n\ttry {\n\t\tconst { runSchemaDiff, runSchemaSnapshot } = await import(\"./run.ts\");\n\t\tif (parsed.command === \"schema-diff\") {\n\t\t\tconst report = await runSchemaDiff({\n\t\t\t\tconfigPath: parsed.configPath,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tfromPath: parsed.fromPath,\n\t\t\t\tinspect: ctx.runtime.inspectSchemaSnapshot,\n\t\t\t\tmigration: parsed.migration,\n\t\t\t\tpolicyImpact: parsed.policyImpact,\n\t\t\t});\n\t\t\tif (json) {\n\t\t\t\tctx.log(\n\t\t\t\t\tstringifyCliJson(\n\t\t\t\t\t\tencodeCliJsonSuccess(\"schema.diff\", {\n\t\t\t\t\t\t\tbaselineWritten: report.baselineWritten === true,\n\t\t\t\t\t\t\tdestructiveCount: report.destructiveCount,\n\t\t\t\t\t\t\tfromPath: report.fromPath,\n\t\t\t\t\t\t\tok: report.ok,\n\t\t\t\t\t\t\toperations: report.diff.operations,\n\t\t\t\t\t\t\tpolicyImpact: report.policyImpact,\n\t\t\t\t\t\t\tproposedMigration: report.proposedMigration,\n\t\t\t\t\t\t\tsummary: report.diff.summary,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t} else if (parsed.migration && report.proposedMigration) {\n\t\t\t\tctx.logRaw(report.proposedMigration);\n\t\t\t} else {\n\t\t\t\tctx.logRaw(report.text);\n\t\t\t}\n\t\t\tif (!report.ok) {\n\t\t\t\tsetCliExitCode(CliExitCode.Conflict);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst report = await runSchemaSnapshot({\n\t\t\tcheck: parsed.check,\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tcwd: ctx.cwd,\n\t\t\tinspect: ctx.runtime.inspectSchemaSnapshot,\n\t\t\toutPath: parsed.outPath,\n\t\t});\n\t\tif (json) {\n\t\t\tctx.log(\n\t\t\t\tstringifyCliJson(\n\t\t\t\t\tencodeCliJsonSuccess(\"schema.snapshot\", {\n\t\t\t\t\t\tcheck: report.check,\n\t\t\t\t\t\tdestructiveCount: report.destructiveCount,\n\t\t\t\t\t\tok: report.ok,\n\t\t\t\t\t\toperations: report.diff?.operations,\n\t\t\t\t\t\tpath: report.path,\n\t\t\t\t\t\tsummary: report.diff?.summary,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tctx.logRaw(report.text);\n\t\t}\n\t\tif (!report.ok) {\n\t\t\tsetCliExitCode(CliExitCode.Conflict);\n\t\t}\n\t} catch (error) {\n\t\tif (json) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tctx.log(\n\t\t\t\tstringifyCliJson(\n\t\t\t\t\tencodeCliJsonFailure(\n\t\t\t\t\t\tparsed.command === \"schema-diff\" ? \"schema.diff\" : \"schema.snapshot\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\t\terror instanceof Error && \"code\" in error\n\t\t\t\t\t\t\t\t\t? String((error as { code?: string }).code ?? \"SCHEMA000\")\n\t\t\t\t\t\t\t\t\t: \"SCHEMA000\",\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tlogCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n\t\t}\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, ValidateCommand } from \"../../types.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport {\n\tformatValidationReport,\n\tvalidateLocalRuntime,\n} from \"./validate-local.ts\";\n\nexport { validateCatalog, validateCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"validate\"];\n\nexport function parse(rest: string[]): CliCommand {\n\tlet configPath: string | undefined;\n\tlet json = false;\n\tlet plain = false;\n\tlet strict = false;\n\tlet index = 0;\n\tif (rest[0] === \"local\") {\n\t\tindex = 1;\n\t}\n\twhile (index < rest.length) {\n\t\tconst token = rest[index];\n\t\tindex += 1;\n\t\tif (token === \"--help\" || token === \"-h\") {\n\t\t\treturn { command: \"help\", topic: \"validate\" };\n\t\t}\n\t\tif (token === \"--json\") {\n\t\t\tjson = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--plain\") {\n\t\t\tplain = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--strict\") {\n\t\t\tstrict = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === \"--config\") {\n\t\t\tconst nextValue = rest[index];\n\t\t\tif (!nextValue || nextValue.startsWith(\"-\")) {\n\t\t\t\tthrow new Error(\"Missing value for --config option.\");\n\t\t\t}\n\t\t\tconfigPath = nextValue;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow unknownOptionError(token, \"validate\");\n\t}\n\treturn { command: \"validate\", configPath, json, plain, strict };\n}\n\nexport function usage(): string {\n\treturn formatCatalogTopicUsage(\"validate\");\n}\n\nexport function sessionTitle(_parsed: ValidateCommand): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: ValidateCommand,\n): Promise<void> {\n\tconst { capabilities, errorLog, log, logRaw, presentation, runtime } = ctx;\n\ttry {\n\t\tconst runValidate = runtime.validateLocal ?? validateLocalRuntime;\n\t\tconst report = await runValidate({\n\t\t\tconfigPath: parsed.configPath,\n\t\t\tcwd: runtime.cwd,\n\t\t\tjson: parsed.json,\n\t\t\tplain: parsed.plain || presentation.noColor === true,\n\t\t\tstrict: parsed.strict,\n\t\t});\n\t\tif (parsed.json) {\n\t\t\tlog(JSON.stringify(report, null, 2));\n\t\t} else {\n\t\t\tlogRaw(\n\t\t\t\tframeBlock(formatValidationReport(report, capabilities), capabilities),\n\t\t\t);\n\t\t}\n\t\tif (!report.ok) {\n\t\t\tsetCliExitCode(CliExitCode.Validation);\n\t\t}\n\t} catch (error) {\n\t\tlogCliError(formatGeneratorError(error), errorLog, capabilities);\n\t\tsetCliExitCode(exitCodeForError(error));\n\t}\n}\n","import { existsSync } from \"node:fs\";\n\nimport { findGeneratorConfigPath, loadAthenaConfig } from \"../../../generator/config.ts\";\nimport { PACKAGE_VERSION } from \"../../../sdk-version.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogCommandUsage } from \"../../commands-catalog.ts\";\nimport { formatCliIdentity } from \"../../identity.ts\";\nimport type { CliCommand, VersionCommand } from \"../../types.ts\";\n\nexport { versionCatalog, versionCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"-v\", \"--version\", \"version\", \"v\"];\n\nexport function isVersionToken(token: string | undefined): boolean {\n\treturn (\n\t\ttoken === \"-v\" ||\n\t\ttoken === \"--version\" ||\n\t\ttoken === \"version\" ||\n\t\ttoken === \"v\"\n\t);\n}\n\nexport function parse(rest: string[]): CliCommand {\n\tif (rest[0] === \"--help\" || rest[0] === \"-h\") {\n\t\treturn { command: \"help\", topic: \"version\" };\n\t}\n\treturn {\n\t\tcommand: \"version\",\n\t\tshort: rest.includes(\"--short\") || rest.includes(\"-q\"),\n\t};\n}\n\nexport function usage(): string {\n\treturn formatCatalogCommandUsage(\"version\");\n}\n\nexport function sessionTitle(_parsed: VersionCommand): undefined {\n\treturn undefined;\n}\n\nexport async function run(\n\tctx: CommandContext,\n\tparsed: VersionCommand,\n): Promise<void> {\n\tif (parsed.short) {\n\t\tctx.log(PACKAGE_VERSION);\n\t\treturn;\n\t}\n\tconst configPath =\n\t\tctx.globals.configPath ?? findGeneratorConfigPath(ctx.cwd);\n\tlet modules: Awaited<ReturnType<typeof loadAthenaConfig>>[\"config\"][\"modules\"];\n\tif (configPath && existsSync(configPath)) {\n\t\ttry {\n\t\t\tconst loaded = await loadAthenaConfig({\n\t\t\t\tconfigPath,\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t});\n\t\t\tmodules = loaded.config.modules;\n\t\t} catch {\n\t\t\tmodules = undefined;\n\t\t}\n\t}\n\tctx.log(\n\t\tformatCliIdentity({\n\t\t\tconfigPath: configPath && existsSync(configPath) ? configPath : null,\n\t\t\tmodules,\n\t\t}),\n\t);\n}\n","import {\n\texpandEqualsArgv,\n\tpeelPresentationFlags,\n} from \"./argv.ts\";\nimport { CLI_COMMAND_REGISTRY } from \"./commands/register.ts\";\nimport { applyGlobalsToCommand, parseRegisteredCommand, peelGlobalFlags } from \"./platform/index.ts\";\nimport type { CliCommand } from \"./types.ts\";\n\nexport function parseCommand(rawArgv: string[]): CliCommand {\n\tconst { argv: peeled } = peelPresentationFlags(rawArgv);\n\tconst argv = expandEqualsArgv(peeled);\n\tconst { argv: withoutGlobals, globals } = peelGlobalFlags(argv);\n\tconst parsed = parseRegisteredCommand(CLI_COMMAND_REGISTRY, withoutGlobals);\n\treturn applyGlobalsToCommand(parsed, globals);\n}\n"]}