{"version":3,"sources":["%3Cdefine:__ATHENA_JS_BUILD_PROVENANCE__%3E","../../package.json","../../src/sdk-version.ts","../../src/cli/argv.ts","../../src/migrations/commands.ts","../../src/cli/commands/api-key/catalog.ts","../../src/cli/commands/auth/catalog.ts","../../src/cli/commands/billing/catalog.ts","../../src/cli/commands/commands/catalog.ts","../../src/cli/commands/db/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/logs/catalog.ts","../../src/cli/commands/migrate/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/rights/errors.ts","../../src/rights/key.ts","../../src/cli/debug.ts","../../src/cli/format-error.ts","../../src/gateway/errors.ts","../../src/gateway/url.ts","../../src/env/index.ts","../../src/migrations/types.ts","../../src/cli/platform/map-exit.ts","../../src/cli/platform/apply-globals.ts","../../src/cli/platform/constants.ts","../../src/cli/platform/execute.ts","../../src/cli/platform/globals.ts","../../src/cli/platform/json-protocol.ts","../../src/cli/logging/redact.ts","../../src/cli/platform/parse.ts","../../src/cli/platform/index.ts","../../src/auth/contract/operations.ts","../../src/auth/schema/generation.ts","../../src/auth/contract/index.ts","../../src/auth/contract/operations.generated.ts","../../src/config/errors.ts","../../src/db/transaction/errors.ts","../../src/db/transaction/begin-sql.ts","../../src/runtime/ownership.ts","../../src/postgres/connection-string.ts","../../src/postgres/driver.ts","../../src/postgres/pool/deadline.ts","../../src/postgres/pool/lease.ts","../../src/postgres/pool/poison.ts","../../src/postgres/pool/manager.ts","../../src/postgres/runtime.ts","../../src/postgres/owned-runtime.ts","../../src/auth/runtime-error.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/runtime/authorization/decisions.ts","../../src/billing/errors.ts","../../src/billing/runtime/invocation-authority.ts","../../src/billing/runtime/operation-policy.ts","../../src/billing/runtime/rights.ts","../../src/billing/rights-catalog.ts","../../src/storage/rights-catalog.ts","../../src/rights/authority.ts","../../src/rights/types.ts","../../src/rights/ir/validate.ts","../../src/rights/ir/canonicalize.ts","../../src/rights/resolver.ts","../../src/rights/definitions.ts","../../src/runtime/authorization/capability-rights.ts","../../src/runtime/authorization/catalog.ts","../../src/roles/errors.ts","../../src/roles/id.ts","../../src/roles/key.ts","../../src/roles/builtin.ts","../../src/roles/types.ts","../../src/roles/ir/validate.ts","../../src/roles/ir/canonicalize.ts","../../src/roles/ir/fingerprint.ts","../../src/roles/persistence.ts","../../src/roles/projection.ts","../../src/roles/index.ts","../../src/runtime/authorization/role-invariants.ts","../../src/runtime/authorization/templates.ts","../../src/runtime/authorization/assignment-replace.ts","../../src/runtime/authorization/assignment-snapshot.ts","../../src/runtime/authorization/capabilities.ts","../../src/rights/ir/fingerprint.ts","../../src/runtime/authorization/catalog-state.ts","../../src/runtime/authorization/clone-source.ts","../../src/runtime/authorization/role-descriptor.ts","../../src/runtime/authorization/snapshot-catalog.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/signing-keys-sql.ts","../../src/auth/schema/migrations.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/error/classify.ts","../../src/error/types.ts","../../src/utils/parse-boolean-flag.ts","../../src/error/normalize.ts","../../src/auxiliaries/retry.ts","../../src/auxiliaries.ts","../../src/migrations/constants.ts","../../src/generator/config-ir.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/billing/observability/audit.ts","../../src/billing/observability/config.ts","../../src/billing/observability/traces.ts","../../src/billing/reconciliation/context.ts","../../src/billing/reconciliation/lease.ts","../../src/runtime/error/generated/billing.ts","../../src/billing/import/errors.ts","../../src/billing/observability/events.ts","../../src/billing/observability/validate.ts","../../src/billing/reconciliation/semantic-audit.ts","../../src/billing/runtime/environment.ts","../../src/auth/app-identity.ts","../../src/auth/bridge/code.ts","../../src/auth/observability/config.ts","../../src/auth/protocol-identity.ts","../../src/auth/social/config.ts","../../src/auth/passkey/policy.ts","../../src/auth/config.ts","../../src/chat/config.ts","../../src/runtime/resolve.ts","../../src/billing/runtime/credentials.ts","../../src/billing/runtime/local/providers/inspect.ts","../../src/billing/runtime/local/providers/stripe/config.ts","../../src/billing/runtime/local/providers/token-authority.ts","../../src/billing/runtime/local/providers/config.ts","../../src/billing/runtime/local/providers/binding.ts","../../src/billing/runtime/local/providers/configuration/slots.ts","../../src/billing/runtime/local/providers/configuration/validate.ts","../../src/billing/runtime/local/providers/configuration/normalize.ts","../../src/billing/runtime/local/providers/configuration/index.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/safety/registry.ts","../../src/billing/subject/postgres.ts","../../src/billing/import/database.ts","../../src/billing/import/postgres.ts","../../src/billing/ingestion/types.ts","../../src/billing/ingestion/urls.ts","../../src/billing/ingestion/config.ts","../../src/billing/ingestion/ownership.ts","../../src/billing/ingestion/reconciliation/lifecycle.ts","../../src/billing/ingestion/reconciliation/repository.ts","../../src/billing/safety/money.ts","../../src/billing/safety/environment.ts","../../src/billing/runtime/self/checkout-lines.ts","../../src/billing/safety/idempotency.ts","../../src/billing/safety/validators.ts","../../src/billing/safety/prepare.ts","../../src/billing/subject/errors.ts","../../src/billing/runtime/local/providers/mollie/webhook-capability.ts","../../src/billing/runtime/local/connections/materialize.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/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/analysis/ast.ts","../../src/migrations/analysis/diagnostics.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/cache.ts","../../src/migrations/analysis/projected-schema.ts","../../src/migrations/analysis/catalog.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/migrations/sql-guards.ts","../../src/migrations/discovery.ts","../../src/migrations/ensure-directory.ts","../../src/migrations/managed-auth.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/semantics.ts","../../src/migrations/embedded-auth/enablement.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/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/sql/0019_billing_entitlements.sql","../../src/migrations/embedded-billing/sql/0020_billing_binding_conflicts.sql","../../src/migrations/embedded-billing/sql/0021_billing_webhook_ingress_subject_refresh.sql","../../src/migrations/embedded-billing/sql/0022_billing_webhook_ingress_rejection_evidence.sql","../../src/migrations/embedded-billing/sql/0023_billing_subscription_enrollments.sql","../../src/migrations/embedded-billing/sql/0024_billing_connection_owner_slot.sql","../../src/migrations/embedded-billing/sql/0025_billing_customer_reservation_leases.sql","../../src/migrations/embedded-billing/sql/0026_billing_webhook_reconciliation_states.sql","../../src/migrations/embedded-billing/sql/0027_billing_subject_binding_evidence.sql","../../src/migrations/embedded-billing/sql/0028_billing_enrollment_fencing_and_plan_change.sql","../../src/migrations/embedded-billing/sql/0029_billing_provider_effect_journal.sql","../../src/migrations/embedded-billing/sql/0030_billing_contact_provenance.sql","../../src/migrations/embedded-billing/sql/0031_billing_webhook_lifecycle.sql","../../src/migrations/embedded-billing/sql/0032_billing_subscription_updated_at.sql","../../src/migrations/embedded-billing/sql/0033_billing_plan_change_live_states.sql","../../src/migrations/embedded-billing/sql/0034_billing_contact_observation.sql","../../src/migrations/embedded-billing/sql/0035_billing_checkout_session_lines.sql","../../src/migrations/embedded-billing/sql/0036_billing_binding_conflict_identity.sql","../../src/migrations/embedded-billing/sql/0037_billing_webhook_ingress_bounded_evidence.sql","../../src/migrations/embedded-billing/sql/0038_billing_webhook_ingress_nullable_digest.sql","../../src/migrations/embedded-billing/catalog.ts","../../src/migrations/embedded-billing/apply.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-chat/enablement.ts","../../src/migrations/embedded-chat/apply.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/sql/0003_event_ingress_operation.sql","../../src/migrations/embedded-event-ingress/catalog.ts","../../src/migrations/embedded-event-ingress/apply.ts","../../src/migrations/embedded-modules-inspect.ts","../../src/migrations/planner.ts","../../src/migrations/postgres.ts","../../src/runtime/error/data.ts","../../src/runtime/error/failure.ts","../../src/runtime/error/generated/auth.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/sqlite-local/errors.ts","../../src/sqlite-local/binds.ts","../../src/migrations/sqlite.ts","../../src/migrations/reporting/conflicts.ts","../../src/migrations/report.ts","../../src/migrations/reporting/render.ts","../../src/migrations/runner.ts","../../src/auth/hooks/assert-local.ts","../../src/node-env.ts","../../src/utils/athena-auth-url.ts","../../src/auth/resolve-routing.ts","../../src/db/transaction/types.ts","../../src/capabilities/client-projection.ts","../../src/capabilities/key.ts","../../src/capabilities/contribution.ts","../../src/auth/capability-contributions.ts","../../src/chat/capability-contributions.ts","../../src/db/transaction/capability-contributions.ts","../../src/billing/runtime/capability-contributions.ts","../../src/capabilities/types.ts","../../src/capabilities/ir/validate.ts","../../src/capabilities/ir/canonicalize.ts","../../src/capabilities/resolver.ts","../../src/query/engine/capability-contributions.ts","../../src/storage/runtime/capability-contributions.ts","../../src/capabilities/assembly.ts","../../src/query/engine/capabilities.ts","../../src/cloudflare/capabilities.ts","../../src/result/mutation-meta.ts","../../src/result/strip-null-properties.ts","../../src/cloudflare/types.ts","../../src/query/engine/ast.ts","../../src/query/engine/errors.ts","../../src/query/engine/relation-result-shape.ts","../../src/query/engine/normalize.ts","../../src/query/engine/relations.ts","../../src/query/engine/validate.ts","../../src/query/engine/plan.ts","../../src/query/engine/index.ts","../../src/sql-identifiers.ts","../../src/query/legacy-boolean.ts","../../src/cloudflare/d1/sql.ts","../../src/cloudflare/d1/compile-ast.ts","../../src/cloudflare/d1/statement-classifier.ts","../../src/cloudflare/d1/runner.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/storage/runtime.ts","../../src/client/config/predicates.ts","../../src/sqlite-local/compiler.ts","../../src/query/contract-v1.ts","../../src/sqlite-local/compatibility.ts","../../src/sqlite-local/transport.ts","../../src/sqlite-local/materialize.ts","../../src/client/config/normalize.ts","../../src/billing/runtime/remote/project-capabilities.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/runtime/http-error.ts","../../src/billing/runtime/browser-transport.ts","../../src/billing/runtime/resolve-mode.ts","../../src/gateway/routes.ts","../../src/admin/query.ts","../../src/auth/authorization/client-module.ts","../../src/auth/capabilities.ts","../../src/auth/token-provider.ts","../../src/auth/client/accounts.ts","../../src/auth/limits.ts","../../src/auth/react-email.ts","../../src/auth/client/admin.ts","../../src/auth/client/api-keys.ts","../../src/auth/client/capability-gates.ts","../../src/auth/client/compatibility.ts","../../src/auth/client/email.ts","../../src/auth/client/organization.ts","../../src/auth/client/password.ts","../../src/auth/client/session-persistence.ts","../../src/auth/client/session-mutations.ts","../../src/http/upstream-html-error.ts","../../src/auth/client/errors.ts","../../src/auth/client/sessions.ts","../../src/auth/client/social.ts","../../src/auth/client/query.ts","../../src/http/parse-response-body.ts","../../src/auth/client/response.ts","../../src/auth/client/request.ts","../../src/auth/client/mutation.ts","../../src/auth/client/transport.ts","../../src/auth/client/two-factor.ts","../../src/auth/client/user.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/session-errors.ts","../../src/auth/session-store.ts","../../src/auth/session-controller.ts","../../src/auth/client.ts","../../src/chat/error.ts","../../src/chat/capabilities.ts","../../src/chat/realtime/session.ts","../../src/chat/remote/runtime.ts","../../src/chat/module.ts","../../src/result/cardinality.ts","../../src/result/read.ts","../../src/gateway/structured-select.ts","../../src/query-ast.ts","../../src/query/include-select.ts","../../src/query-transport.ts","../../src/client-sql.ts","../../src/db/transaction/cache.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/query/execution/canonical-select.ts","../../src/query/execution/select.ts","../../src/query/execution/mutation.ts","../../src/client/fluent/mutation-query.ts","../../src/client/fluent/filters.ts","../../src/client/fluent/state.ts","../../src/client/fluent/table-builder.ts","../../src/compatibility/query-builder.ts","../../src/client/fluent/query-builder.ts","../../src/result/formatter.ts","../../src/client-result.ts","../../src/client/fluent/rpc-builder.ts","../../src/client/fluent/index.ts","../../src/client-request.ts","../../src/release/identity.ts","../../src/compatibility/report.ts","../../src/db/transaction/interactive-gateway.ts","../../src/query/execution/operation.ts","../../src/schema/model-target.ts","../../src/client/transactions.ts","../../src/gateway/serialize-ast.ts","../../src/gateway/serialize-update.ts","../../src/gateway/transaction.ts","../../src/gateway/client.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/runtime/authorization/application-rights.ts","../../src/runtime/data/model-registry.ts","../../src/runtime/authorization/binding-errors.ts","../../src/runtime/authorization/model-binding.ts","../../src/runtime/authorization/binding-registry.ts","../../src/runtime/authorization/config.ts","../../src/runtime/authorization/state.ts","../../src/runtime/authorization/normalize-config.ts","../../src/cloudflare/r2/storage.ts","../../src/context/merge.ts","../../src/email/errors.ts","../../src/email/provider.ts","../../src/email/normalize-config.ts","../../src/email/capabilities.ts","../../src/email/runtime.ts","../../src/email/templates.ts","../../src/email/module.ts","../../src/diagnostics.ts","../../src/notifications/types.ts","../../src/notifications/catalog.ts","../../src/notifications/contract/operations.ts","../../src/notifications/errors.ts","../../src/notifications/events-store.ts","../../src/notifications/store.ts","../../src/notifications/memory-store.ts","../../src/notifications/preference-batch.ts","../../src/notifications/resolve.ts","../../src/notifications/preference-apply.ts","../../src/notifications/module.ts","../../src/notifications/http-adapter.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/client/compose/notifications.ts","../../src/storage/runtime/types.ts","../../src/storage/runtime/bind.ts","../../src/storage/runtime/bytes-envelope.ts","../../src/storage/runtime/errors.ts","../../src/storage/runtime/browser-transport.ts","../../src/policy/match-principal.ts","../../src/policy/decide.ts","../../src/storage/runtime/rights.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/v3-client-assembly.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/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/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/logging/tracer.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/billing/commands.ts","../../src/cli/commands/billing/index.ts","../../src/billing/import/report.ts","../../src/cli/commands/billing/execute.ts","../../src/billing/import/assemble.ts","../../src/billing/reconciliation/index.ts","../../src/billing/reconciliation/coordinator.ts","../../src/billing/reconciliation/policy.ts","../../src/billing/reconciliation/types.ts","../../src/billing/reconciliation/resources.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/sdk/client-factory.ts","../../src/billing/runtime/local/providers/mollie/profile-target.ts","../../src/billing/runtime/local/providers/mollie/sdk/assertions.ts","../../src/billing/runtime/local/providers/mollie/errors.ts","../../src/billing/safety/retry.ts","../../src/runtime/diagnostics/sanitize-external.ts","../../src/billing/runtime/local/providers/mollie/sdk/contracts.ts","../../src/billing/import/audit.ts","../../src/billing/import/importer.ts","../../src/billing/import/apply.ts","../../src/billing/import/candidate-resolver.ts","../../src/billing/import/types.ts","../../src/billing/import/planner.ts","../../src/billing/import/confidence.ts","../../src/billing/import/project.ts","../../src/billing/import/providers/mollie.ts","../../src/billing/runtime/local/providers/mollie/cursor.ts","../../src/billing/runtime/local/providers/mollie/projection/links.ts","../../src/billing/runtime/hal-link-href.ts","../../src/billing/runtime/local/providers/mollie/dialect/customers.ts","../../src/billing/runtime/local/providers/mollie/sdk/call.ts","../../src/billing/runtime/local/providers/mollie/sdk/invoke.ts","../../src/billing/runtime/local/providers/mollie/sdk/errors.ts","../../src/billing/runtime/local/providers/mollie/sdk/page.ts","../../src/billing/ingestion/application-id.ts","../../src/billing/ingestion/secrets/index.ts","../../src/billing/ingestion/secrets/cache.ts","../../src/billing/ingestion/secrets/envelope.ts","../../src/billing/ingestion/secrets/master-key.ts","../../src/billing/ingestion/secrets/postgres.ts","../../src/billing/runtime/local/ingress/attach.ts","../../src/runtime/ingress/errors.ts","../../src/runtime/ingress/postgres.ts","../../src/runtime/ingress/runtime.ts","../../src/runtime/ingress/sql.ts","../../src/billing/ingestion/observability/health.ts","../../src/billing/observability/schema-guard.ts","../../src/billing/ingestion/observability/delivery-health.ts","../../src/billing/runtime/self/advance-enrollment.ts","../../src/billing/runtime/self/checkout-intent.ts","../../src/billing/runtime/self/checkout-snapshot.ts","../../src/billing/runtime/self/enroll.ts","../../src/billing/runtime/local/execute/invoke.ts","../../src/billing/runtime/local/execute/shared.ts","../../src/billing/runtime/authority.ts","../../src/billing/runtime/local/capability-decision.ts","../../src/billing/runtime/local/providers/operation-authority.ts","../../src/billing/runtime/local/providers/operation-scope.ts","../../src/billing/runtime/local/providers/resolve-target.ts","../../src/billing/runtime/self/delegated-principal.ts","../../src/billing/subject/principal-user.ts","../../src/billing/runtime/local/execute/subscriptions.ts","../../src/billing/runtime/self/enrollment-session.ts","../../src/billing/runtime/self/enrollment-reservation.ts","../../src/billing/runtime/local/providers/mollie/resolve-resource.ts","../../src/billing/runtime/local/providers/mollie/webhook-port.ts","../../src/runtime/ingress/identity.ts","../../src/billing/canonical/document.ts","../../src/billing/canonical/transition.ts","../../src/runtime/events/causality.ts","../../src/runtime/events/identity.ts","../../src/billing/runtime/local/providers/mollie/channel.ts","../../src/billing/runtime/local/providers/mollie/parse-webhook.ts","../../src/billing/runtime/local/providers/mollie/verify-webhook.ts","../../src/billing/runtime/local/providers/mollie/project-document.ts","../../src/billing/runtime/local/providers/mollie/projection/invoice.ts","../../src/billing/runtime/local/providers/mollie/projection/subscription.ts","../../src/billing/canonical/status.ts","../../src/billing/runtime/local/providers/mollie/projection.ts","../../src/billing/runtime/local/ingress/handler.ts","../../src/runtime/events/hooks.ts","../../src/runtime/ingress/failure.ts","../../src/billing/ingestion/observability/stages.ts","../../src/billing/runtime/local/ingress/apply.ts","../../src/runtime/events/outbox.ts","../../src/billing/runtime/local/ingress/revision.ts","../../src/billing/runtime/local/ingress/sql.ts","../../src/runtime/events/sql.ts","../../src/billing/runtime/local/ingress/replay.ts","../../src/runtime/ingress/ir.ts","../../src/runtime/ingress/memory.ts","../../src/billing/runtime/local/providers/create-registry.ts","../../src/billing/runtime/local/catalog/normalize.ts","../../src/billing/types.ts","../../src/billing/runtime/local/providers/definition-registry.ts","../../src/billing/runtime/local/providers/mollie/definition.ts","../../src/billing/runtime/local/providers/mollie/runtime.ts","../../src/billing/runtime/local/catalog/prices.ts","../../src/billing/runtime/local/catalog/page.ts","../../src/billing/runtime/local/catalog/products.ts","../../src/billing/runtime/local/catalog/relations.ts","../../src/billing/runtime/local/providers/mollie/capabilities.ts","../../src/billing/runtime/local/providers/mollie/customers.ts","../../src/billing/runtime/local/providers/mollie/projection/customer.ts","../../src/billing/runtime/local/providers/mollie/invoices.ts","../../src/billing/runtime/local/providers/mollie/dialect/invoices.ts","../../src/billing/runtime/local/providers/mollie/payment-links.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/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/subscriptions.ts","../../src/billing/runtime/local/providers/mollie/dialect/subscriptions.ts","../../src/billing/runtime/local/providers/mollie/webhooks.ts","../../src/billing/runtime/local/providers/mollie/dialect/webhooks.ts","../../src/billing/runtime/local/providers/mollie/sdk/json.ts","../../src/billing/runtime/local/providers/stripe/definition.ts","../../src/billing/runtime/local/providers/stripe/runtime.ts","../../src/billing/runtime/local/providers/stripe/capabilities.ts","../../src/billing/runtime/local/providers/definitions.ts","../../src/cli/commands/commands/index.ts","../../src/cli/commands/db/index.ts","../../src/local/runtime.ts","../../src/local/config.ts","../../src/local/docker.ts","../../src/local/env.ts","../../src/local/identity.ts","../../src/local/lock.ts","../../src/local/readiness.ts","../../src/local/state.ts","../../src/cli/project/load-project.ts","../../src/cli/project/errors.ts","../../src/cli/commands/doctor/bundle.ts","../../src/cli/logging/index.ts","../../src/cli/logging/inventory.ts","../../src/cli/logging/paths.ts","../../src/cli/logging/logger.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/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/pipeline.ts","../../src/generator/artifact-merge.ts","../../src/generator/config-file.ts","../../src/generator/schema-discovery.ts","../../src/generator/generated-file-header.ts","../../src/generator/renderer.ts","../../src/generator/naming.ts","../../src/utils/slugify.ts","../../src/generator/postgres-type-mapping.ts","../../src/generator/render-shared.ts","../../src/generator/placeholders.ts","../../src/generator/table-builder-renderer.ts","../../src/cli/commands/init/index.ts","../../src/cli/commands/logs/index.ts","../../src/cli/commands/migrate/commands.ts","../../src/cli/commands/migrate/apply.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/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","text","index","body","tag","CLI_COMMAND_CATALOG","names","rows","row","lines","CliExitCode","AsyncLocalStorage","randomUUID","id","init_errors","databaseLabel","isErrorWithCode","CLI_JSON_SCHEMA_VERSION","result","policy","matched","monotonicNow","request","cached","options","decision","CATALOG_READ","PAYMENTS_READ","PAYMENTS_WRITE","CUSTOMERS_READ","CUSTOMERS_WRITE","REFUNDS_READ","REFUNDS_WRITE","SUBSCRIPTIONS_READ","SUBSCRIPTIONS_WRITE","PAYMENT_LINKS_READ","PAYMENT_LINKS_WRITE","SALES_INVOICES_READ","WEBHOOKS_READ","WEBHOOKS_WRITE","SELF_INVOICES_READ","SELF_PAYMENTS_READ","SELF_SUBSCRIPTION_READ","SELF_SUBSCRIPTION_WRITE","SELF_CHECKOUT_WRITE","ADMIN_RECONCILIATION_WRITE","ADMIN_WEBHOOKS_READ","ADMIN_WEBHOOKS_WRITE","ADMIN_INGESTION_READ","ADMIN_CONFLICTS_WRITE","init_rights_catalog","definition","init_types","init_key","predicate","isRecord","init_validate","rank","init_canonicalize","bytesToHex","sha256","utf8ToBytes","init_capabilities","semanticDefinition","init_fingerprint","run","listAthenaAuthCanonicalMigrations","applied","formatted","resolve","parseBooleanFlag","message","table","constraint","gatewayCode","kind","init_constants","normalizeRawEnvValue","parseEnvLine","PROJECT_ENV_FILENAMES","existsSync","readFileSync","POSTGRES_PROTOCOLS","fieldName","DIRECT_CONNECTION_STRING_ENV_KEYS","GATEWAY_URL_ENV_KEYS","GATEWAY_API_KEY_ENV_KEYS","fileURLToPath","require","pathToFileURL","init_authority","init_config","init_lease","init_events","isLoopbackHost","asRecord","asString","originFromConfiguredUrl","assertSocialConfigObject","slot","formatProviderLabel","credentialKind","nonEmpty","init_normalize","init_registry","init_postgres","init_database","isLoopbackHostname","isAbsoluteHttpUrl","createHash","init_ownership","mapRow","resolveBillingEnvironment","init_environment","priceId","existing","emit","column","parse","dep","join","readFile","mkdir","writeFile","stat","readdir","path","spawnSync","relative","sep","basename","init_prepare","init_semantics","init_apply","init_enablement","init_planner","init_data","init_policy","classifyAthenaError","failure","isMissingLedgerError","embeddedSections","outcome","catalogFingerprint","stripTrailingSlashes","normalizeOptional","init_capability_contributions","rejectUnknownKeys","requireEnum","compareStrings","init_resolver","init_ast","selection","pagination","invalid","IDENTIFIER","outputAlias","init_plan","init_engine","identifier","aliasIdentifier","baseIdentifier","splitTopLevel","unwrapBalancedParens","compilePredicate","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","clause","jsonValue","parts","assignments","quoteIdent","key","sum","j","init_runner","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","mapped","storage","init_runtime","isD1Binding","readFirstEnvHttpUrl","init_compiler","value","returning","init_transport","init_materialize","isExplicitGatewayMode","asStringList","init_unavailable","connectionQuery","init_url","error","listeners","input","unlink","requireUserId","sessions","init_compatibility","token","session","init_query","SDK_HEADER_VALUE","SDK_NAME","init_resolve","init_client_module","init_client","init_error","delay","resolveRequestId","resolveErrorMessage","buildHeaders","init_module","isRelationSelectNode","rowValue","init_cache","init_options","init_coordinator","init_transaction","columns","debugAst","init_mutation","stringifyFilterValue","normalizeSelectColumnsInput","filterMethods","filters","init_query_builder","firstNonEmptyString","mergeOptions","parsed","report","init_report","conditionToWhere","nonEmptyString","resolveStructuredErrorPayload","appendQuery","sourceName","headerValue","withPathParam","resolveErrorHint","isBlobBody","init_context","collectModels","byResource","init_state","unsupported","init_storage","trimOptional","init_normalize_config","init_templates","readProcessEnv","init_diagnostics","init_operations","stamp","requireTopic","requireChannel","requirePair","normalizeDigest","payload","items","serialized","sleep","normalizeAthenaError","sourceData","selectedData","next","init_notifications","AthenaStorageError","asExecutorTransport","init_browser_transport","init_rights","unwrap","readString","OVERLAY_PRINCIPAL","readFirstEnv","appendPath","normalizeUniversalCreateClientConfig","tableKey","prepareApplicationMigrationRun","assertDirectPostgres","providerLabel","blockingSemantic","compileApplicationSemantics","loadAuthPlan","planMigrations","createPostgresMigrationBackend","ATHENA_AUTH_SCHEMA_GENERATION","init_verify","usage","runMigrateVerify","init_migrate","init_bind","ACTION_BITS","asDocument","init_explain","walkOperands","columnNames","dirname","isAbsolute","init_identity","POSTGRES_INTERVAL_QUALIFIERS","tableId","isObject","REFERENTIAL_ACTIONS","DEFAULT_SCHEMA","tableIdentityKey","rename","item","tableIdentity","init_diff","init_format","mkdirSync","writeFileSync","diff","randomBytes","traceId","query","REDACTED","createCipheriv","createDecipheriv","UUID_RE","uuidOrNull","configuredProviderNames","provider","createHmac","timingSafeEqual","optionalString","serializationRetry","projectMoney","projected","stage","claimed","classifiedFailure","encodeBase64Url","decodeBase64Url","configured","normalizeAthenaBillingIngestion","resolveBillingIngressEndpoints","runAutomaticBillingWebhookReconcileIfEnabled","realpathSync","unlinkSync","statSync","renameSync","rmdirSync","inspect","homedir","lstat","realpath","appendFile","readdirSync","writeSecureAtomic","block","absolutePath","posix","renderModelArtifact","normalizeTypeLabel","relationKey","win32","normalizePath","sessionTitle","wantsJson","adapt","runSchemaDiff","runSchemaSnapshot"],"mappings":"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","file":"index.cjs","sourcesContent":["{\"buildRevision\":\"0279b0468658f8e4395c57834f3ee535c7283dac\",\"buildTimestamp\":\"2026-09-24T14:38:10.911Z\",\"dirty\":true,\"version\":\"5.6.9\"}","{\"version\":\"5.6.9\"}","import packageJson from \"../package.json\" with { type: \"json\" };\n\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n\treturn `${sdkName} ${PACKAGE_VERSION}`;\n}\n","export interface CliPresentationFlags {\n  forceColor: boolean;\n  noColor: 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(value: string, flags: CliPresentationFlags): void {\n  const normalized = value.trim().toLowerCase();\n  if (normalized === \"\" || COLOR_ALWAYS.has(normalized)) {\n    flags.forceColor = true;\n    flags.noColor = false;\n    return;\n  }\n  if (COLOR_NEVER.has(normalized)) {\n    flags.noColor = true;\n    flags.forceColor = false;\n  }\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  argv: string[];\n  presentation: CliPresentationFlags;\n} {\n  const presentation: CliPresentationFlags = {\n    forceColor: false,\n    noColor: false,\n  };\n  const tokens: string[] = [];\n\n  for (const token of argv) {\n    if (token === \"--no-color\") {\n      presentation.noColor = true;\n      presentation.forceColor = false;\n      continue;\n    }\n    if (token === \"--color\" || token === \"--force-color\") {\n      presentation.forceColor = true;\n      presentation.noColor = false;\n      continue;\n    }\n    if (token.startsWith(\"--color=\")) {\n      applyColorValue(token.slice(\"--color=\".length), presentation);\n      continue;\n    }\n    tokens.push(token);\n  }\n\n  return { 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  const tokens: string[] = [];\n  for (const token of argv) {\n    if (!token.startsWith(\"--\") || token === \"--\") {\n      tokens.push(token);\n      continue;\n    }\n    const eq = token.indexOf(\"=\");\n    if (eq <= 2) {\n      tokens.push(token);\n      continue;\n    }\n    tokens.push(token.slice(0, eq), token.slice(eq + 1));\n  }\n  return tokens;\n}\n\nexport function argvWantsHelp(argv: readonly string[]): boolean {\n  return argv.includes(\"--help\") || argv.includes(\"-h\");\n}\n\nexport function flagName(flag: string): string {\n  const [head] = flag.split(/\\s+/);\n  return head ?? flag;\n}\n","const ATHENA_CLI_BINARY = \"athena-js\";\nconst ATHENA_PACKAGE_NAME = \"@xylex-group/athena\";\n\nexport const ATHENA_MIGRATE_COMMAND = `${ATHENA_CLI_BINARY} migrate`;\nexport const ATHENA_NPX_MIGRATE_COMMAND = `npx ${ATHENA_PACKAGE_NAME} migrate`;\nexport const ATHENA_MIGRATE_STATUS_COMMAND = `${ATHENA_MIGRATE_COMMAND} status`;\nexport const ATHENA_MIGRATE_CHECK_STRICT_COMMAND = `${ATHENA_MIGRATE_COMMAND} check --strict`;\nexport const ATHENA_MIGRATE_RECONCILE_COMMAND = `${ATHENA_MIGRATE_COMMAND} reconcile`;\nexport const ATHENA_MIGRATE_RECONCILE_APPLY_YES_COMMAND = `${ATHENA_MIGRATE_RECONCILE_COMMAND} --apply --yes`;\nexport const ATHENA_MIGRATE_ALLOW_DIRTY_COMMAND = `${ATHENA_MIGRATE_COMMAND} --allow-dirty-migrations`;\nexport const ATHENA_MIGRATE_ALLOW_DIRTY_YES_COMMAND = `${ATHENA_MIGRATE_COMMAND} --allow-dirty-migrations --yes`;\nexport const ATHENA_MIGRATE_REPAIR_COMMAND = `${ATHENA_MIGRATE_COMMAND} repair`;\nexport const ATHENA_MIGRATE_REPAIR_YES_COMMAND = `${ATHENA_MIGRATE_REPAIR_COMMAND} --yes`;\nexport const ATHENA_MIGRATE_AUTH_SYNC_COMMAND = `${ATHENA_MIGRATE_COMMAND} auth sync`;\nexport const ATHENA_MIGRATE_AUTH_MATERIALIZE_COMMAND = `${ATHENA_MIGRATE_COMMAND} auth materialize`;\nexport const ATHENA_MIGRATE_AUTH_SYNC_DRY_RUN_COMMAND = `${ATHENA_MIGRATE_AUTH_SYNC_COMMAND} --dry-run`;\nexport const ATHENA_MIGRATE_EXPLAIN_COMMAND = `${ATHENA_MIGRATE_COMMAND} explain`;\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst apiKeyGenerateFlags = [\n  \"--bytes <n>\",\n  \"--prefix <str>\",\n  \"--write\",\n  \"--env-file <path>\",\n  \"--env-key <name>\",\n  \"--force\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst apiKeyCreateFlags = [\n  \"--name <name>\",\n  \"--rights a,b\",\n  \"--client-name <c>\",\n  \"--description <d>\",\n  \"--expires-at <iso>\",\n  \"--url <gateway>\",\n  \"--admin-key <secret>\",\n  \"--write\",\n  \"--env-file <path>\",\n  \"--env-key <name>\",\n  \"--force\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst apiKeyListFlags = [\n  \"--url <gateway>\",\n  \"--admin-key <secret>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const apiKeyCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"key generate\", \"api-key gen\", \"api-key new\"],\n    command: \"api-key generate\",\n    description:\n      \"Generate a local static admin secret (ATHENA_KEY_12; no network)\",\n    examples: [\n      \"athena-js api-key generate --write\",\n      \"athena-js api-key create --name analytics --rights gateway.query --client-name analytics --write\",\n      \"athena-js api-key list --json\",\n    ],\n    flags: apiKeyGenerateFlags,\n    group: \"local-secrets\",\n    helpTopic: \"api-key\",\n    notes: [\n      \"generate: offline ATHENA_KEY_12 / P12 secret only — does not register a gateway API key store row.\",\n      \"create/list: POST/GET /admin/api-keys via gateway admin (ATHENA_KEY_12). create --write sets ATHENA_API_KEY.\",\n    ],\n  },\n  {\n    aliases: [\"key create\"],\n    command: \"api-key create\",\n    description:\n      \"Create gateway API key via POST /admin/api-keys (static admin key)\",\n    flags: apiKeyCreateFlags,\n    group: \"gateway-admin\",\n    helpTopic: \"api-key\",\n    notes: [\n      \"--rights tokens are parseAthenaRightKey (dotted AthenaRightKey). Invalid names fail closed; admin:read is not rewritten to admin.read.\",\n    ],\n  },\n  {\n    aliases: [\"key list\", \"api-key ls\", \"key ls\"],\n    command: \"api-key list\",\n    description: \"List gateway API keys via GET /admin/api-keys\",\n    flags: apiKeyListFlags,\n    group: \"gateway-admin\",\n    helpTopic: \"api-key\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst authHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst authJsonFlags = [\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authDoctorFlags = [\n  \"--json\",\n  \"--strict\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authAuditFlags = [\n  \"--limit <n>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst authTracesFlags = [\n  \"--errors\",\n  \"--limit <n>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const authCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"auth\",\n    description:\n      \"Embedded Auth operations (status, capabilities, audit, traces)\",\n    examples: [\n      \"athena-js auth status\",\n      \"athena-js auth doctor\",\n      \"athena-js auth capabilities\",\n      \"athena-js auth audit list --limit 20\",\n      \"athena-js auth traces list --errors\",\n    ],\n    flags: authHelpFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n  },\n  {\n    command: \"auth status\",\n    description: \"Embedded vs Rust capability snapshot and schema generation\",\n    flags: authJsonFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n    notes: [\n      \"Inspects Embedded Auth on postgres/direct (schema generation and observability tables).\",\n      \"Inspect failures exit nonzero. Observability columns are not printed as unknown when inspect cannot run.\",\n    ],\n  },\n  {\n    command: \"auth doctor\",\n    description:\n      \"Auth-focused health: generation, capabilities, observability tables\",\n    flags: authDoctorFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n    notes: [\n      \"Same inspect path as auth status, plus --strict.\",\n      \"Inspect failures exit nonzero instead of reporting audit_log_auth / traces_auth as unknown.\",\n    ],\n  },\n  {\n    command: \"auth capabilities\",\n    description: \"Catalog matrix of Embedded vs Rust Auth operations\",\n    flags: authJsonFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n    notes: [\n      \"Static catalog matrix (Embedded vs dedicated Auth). Does not open a database.\",\n    ],\n  },\n  {\n    command: \"auth audit\",\n    description: \"List or show audit_log_auth events (local database)\",\n    flags: authAuditFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n    notes: [\n      \"Reads athena.audit_log_auth on postgres/direct. Requires observability generation 23+.\",\n    ],\n  },\n  {\n    command: \"auth traces\",\n    description: \"List or show traces_auth rows (local database)\",\n    flags: authTracesFlags,\n    group: \"auth\",\n    helpTopic: \"auth\",\n    notes: [\n      \"Reads athena.traces_auth on postgres/direct. Requires observability generation 23+.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst reconcileFlags = [\n  \"--config <path>\",\n  \"--connection <id>\",\n  \"--subject <id>\",\n  \"--provider <name>\",\n  \"--customer <id>\",\n  \"--limit <n>\",\n  \"--max-pages <n>\",\n  \"--max-customers <n>\",\n  \"--max-duration <ms>\",\n  \"--cursor <cursor>\",\n  \"--include-ambiguous\",\n  \"--dry-run\",\n  \"--apply\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const billingCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"billing reconcile-subjects\",\n    description:\n      \"Import provider customers onto Athena subjects (dry-run default; email is never identity)\",\n    examples: [\n      \"athena-js billing reconcile-subjects --connection <id> --dry-run\",\n      \"athena-js billing reconcile-subjects --connection <id> --apply --json\",\n    ],\n    flags: reconcileFlags,\n    group: \"runtime\",\n    helpTopic: \"billing\",\n    notes: [\n      \"Does not bind ownership by email unless unique-email auto-bind is enabled.\",\n      \"Provider metadata subject IDs outrank email.\",\n      \"Does not auto-merge duplicate provider customers.\",\n    ],\n  },\n  {\n    command: \"billing webhooks status\",\n    description:\n      \"Show owned billing webhook registration, route, and delivery health\",\n    examples: [\n      \"athena-js billing webhooks status --json\",\n      \"athena-js billing webhooks status --connection <id>\",\n    ],\n    flags: [\n      \"--config <path>\",\n      \"--connection <id>\",\n      \"--provider <name>\",\n      \"--json\",\n      \"-h\",\n    ],\n    group: \"runtime\",\n    helpTopic: \"billing\",\n  },\n  {\n    command: \"billing ingestion health\",\n    description: \"Show recent webhook ingress accept/reject rates\",\n    examples: [\n      \"athena-js billing ingestion health --json\",\n      \"athena-js billing ingestion health --connection <id>\",\n    ],\n    flags: [\n      \"--config <path>\",\n      \"--connection <id>\",\n      \"--provider <name>\",\n      \"--json\",\n      \"-h\",\n    ],\n    group: \"runtime\",\n    helpTopic: \"billing\",\n  },\n  {\n    command: \"billing webhooks reconcile\",\n    description:\n      \"Reconcile Athena-owned Mollie webhook registrations (dry-run default)\",\n    examples: [\n      \"athena-js billing webhooks reconcile --dry-run\",\n      \"athena-js billing webhooks reconcile --apply --connection <id>\",\n    ],\n    flags: [\n      \"--config <path>\",\n      \"--connection <id>\",\n      \"--provider <name>\",\n      \"--dry-run\",\n      \"--apply\",\n      \"--json\",\n      \"-h\",\n    ],\n    group: \"runtime\",\n    helpTopic: \"billing\",\n    notes: [\n      \"Never mutates foreign provider webhook registrations.\",\n      \"--dry-run prints the desired-state diff without calling Mollie.\",\n    ],\n  },\n  {\n    command: \"billing webhooks verify\",\n    description: \"Verify Athena-owned billing webhook registrations\",\n    examples: [\"athena-js billing webhooks verify --connection <id>\"],\n    flags: [\n      \"--config <path>\",\n      \"--connection <id>\",\n      \"--provider <name>\",\n      \"--json\",\n      \"-h\",\n    ],\n    group: \"runtime\",\n    helpTopic: \"billing\",\n  },\n  {\n    command: \"billing ingress replay\",\n    description:\n      \"Classify stuck resolving rows and replay retryable billing ingress\",\n    examples: [\n      \"athena-js billing ingress replay --dry-run --json\",\n      \"athena-js billing ingress replay --classify-only --limit 50\",\n    ],\n    flags: [\n      \"--config <path>\",\n      \"--limit <n>\",\n      \"--classify-only\",\n      \"--dry-run\",\n      \"--json\",\n      \"-h\",\n    ],\n    group: \"runtime\",\n    helpTopic: \"billing\",\n    notes: [\n      \"Stuck resolving rows are classified as retryable or terminal. They are never marked processed.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst commandsFlags = [\n  \"--json\",\n  \"--plain\",\n  \"--groups\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const commandsCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\n      \"-C\",\n      \"--commands\",\n      \"--list-commands\",\n      \"--cmds\",\n      \"commands\",\n      \"list-commands\",\n      \"cmds\",\n    ],\n    command: \"commands\",\n    description: \"List every CLI command, alias, and common flags\",\n    flags: commandsFlags,\n    group: \"global\",\n    helpTopic: \"commands\",\n    notes: [\n      \"Prints the full athena-js command inventory (SSOT).\",\n      \"Use `athena-js <command> --help` for detailed flags on one command.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst dbHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst dbStartFlags = [\n  \"--config <path>\",\n  \"--force\",\n  \"--json\",\n  \"--write-env\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst dbStatusFlags = [\n  \"--config <path>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst dbJsonFlags = [\"--json\", \"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst dbResetFlags = [\n  \"--json\",\n  \"--yes\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const dbCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"db\",\n    description: \"Manage the project-local PostgreSQL runtime\",\n    examples: [\n      \"athena-js db start\",\n      \"athena-js db status --json\",\n      \"athena-js db reset --yes\",\n      \"athena-js db logs\",\n    ],\n    flags: dbHelpFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n    notes: [\n      \"The runtime uses Docker and persists its credentials in .athena/runtime/postgres.json.\",\n      \"Reset is destructive and requires --yes.\",\n    ],\n  },\n  {\n    command: \"db start\",\n    description: \"Start or recreate the project-local PostgreSQL container\",\n    flags: dbStartFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n  {\n    command: \"db stop\",\n    description: \"Stop the project-local PostgreSQL container\",\n    flags: dbJsonFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n  {\n    command: \"db status\",\n    description: \"Report the project-local PostgreSQL runtime\",\n    flags: dbStatusFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n  {\n    command: \"db restart\",\n    description: \"Restart the project-local PostgreSQL container\",\n    flags: dbStartFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n  {\n    command: \"db reset\",\n    description: \"Destroy the Athena-owned container, volume, and runtime state\",\n    flags: dbResetFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n  {\n    command: \"db logs\",\n    description: \"Print PostgreSQL container logs\",\n    flags: dbJsonFlags,\n    group: \"runtime\",\n    helpTopic: \"db\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst doctorFlags = [\n  \"--config <path>\",\n  \"--strict\",\n  \"--skip-runtime\",\n  \"--json\",\n  \"--plain\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst doctorBundleFlags = [\n  \"--include-latest-log\",\n  \"--invocation <id>\",\n  \"--out <path>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const doctorCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"doctor\",\n    description:\n      \"Project health check: Node, config, env, and local runtime (read-only)\",\n    examples: [\n      \"athena-js doctor\",\n      \"athena-js doctor --strict\",\n      \"athena-js doctor --skip-runtime --json\",\n      \"athena-js doctor bundle\",\n    ],\n    flags: doctorFlags,\n    group: \"runtime\",\n    helpTopic: \"doctor\",\n    notes: [\n      \"Read-only project health check (Node, config, env, local runtime).\",\n      \"Does not write files or apply migrations. Exit 5 when any check is error.\",\n    ],\n  },\n  {\n    command: \"doctor bundle\",\n    description: \"Write a secret-safe diagnostic directory\",\n    flags: doctorBundleFlags,\n    group: \"runtime\",\n    helpTopic: \"doctor\",\n    notes: [\n      \"Writes redacted JSON (no database passwords, API keys, JWT, or SMTP secrets).\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst envCheckFlags = [\n  \"--file <path>\",\n  \"-f <path>\",\n  \"--mode auto|direct|gateway\",\n  \"--strict\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const envCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"env\", \"env validate\"],\n    command: \"env check\",\n    description: \"Validate .env / .env.local keys and URLs\",\n    examples: [\n      \"athena-js env check\",\n      \"athena-js env check --file .env.local --mode gateway\",\n      \"athena-js env validate --json\",\n    ],\n    flags: envCheckFlags,\n    group: \"env\",\n    helpTopic: \"env\",\n    notes: [\n      \"Validates Athena-related keys and URLs from project env files and process env.\",\n      \"Exit 5 when one or more validation errors are present.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst generateFlags = [\n  \"--config <path>\",\n  \"--check\",\n  \"--dry-run\",\n  \"--strict\",\n  \"--no-write-config\",\n  \"--write-config\",\n  \"--no-discover-schemas\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const generateCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"generate\",\n    description: \"Introspect schema and write models/registry artifacts\",\n    examples: [\n      \"athena-js generate\",\n      \"DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/app_db athena-js generate --dry-run\",\n      \"athena-js generate --config ./athena.config.ts --dry-run\",\n      \"athena-js generate --check\",\n      \"athena-js generate --check --strict\",\n      \"athena-js generate --no-write-config\",\n    ],\n    flags: generateFlags,\n    group: \"generator\",\n    helpTopic: \"generate\",\n    notes: [\n      \"Config resolution:\",\n      \"  - uses athena.config.* discovery first\",\n      \"  - falls back to env-only direct mode when DATABASE_URL/PG_URL is present\",\n      \"  - falls back to env-only gateway mode when ATHENA_URL + ATHENA_API_KEY are present\",\n      \"`--check` inspects without writing. Exit 0 when current, 1 when stale, 2 on failed generation, 3 on generated-file ownership violations.\",\n      \"`--strict` treats generator diagnostics (duplicate includeTables / excludeTables selectors) as errors.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst helpFlags = [\"[<topic>]\"] as const satisfies readonly CliCatalogFlag[];\n\nexport const helpCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"-h\", \"--help\", \"help\"],\n    command: \"help\",\n    description: \"Show root help (or help <topic>)\",\n    flags: helpFlags,\n    group: \"global\",\n    helpTopic: \"root\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst initFlags = [\n  \"--config <path>\",\n  \"--mode direct|gateway|auto\",\n  \"--force\",\n  \"--dry-run\",\n  \"--no-discover-schemas\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const initCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"init\",\n    description: \"Create or surgically update athena.config.ts\",\n    examples: [\n      \"athena-js init\",\n      \"athena-js init --mode gateway\",\n      \"athena-js init --dry-run\",\n      \"athena-js init --force\",\n    ],\n    flags: initFlags,\n    group: \"project\",\n    helpTopic: \"init\",\n    notes: [\n      \"Behavior:\",\n      \"  - missing file → write modern athena-direct config with generatorEnv-backed secrets\",\n      \"  - existing file → only patch provider.schemas when discovery finds new schemas\",\n      \"  - gateway mode works fully via ATHENA_URL + ATHENA_API_KEY env fallbacks\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst logsFlags = [\n  \"--errors\",\n  \"--limit <n>\",\n  \"--older-than <duration>\",\n  \"--out <path>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const logsCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"logs\",\n    description: \"Inspect, export, and prune local CLI invocation logs\",\n    examples: [\n      \"athena-js logs path\",\n      \"athena-js logs list --limit 5\",\n      \"athena-js logs latest\",\n      \"athena-js logs export <invocation-id> --out athena-support-log.jsonl\",\n    ],\n    flags: logsFlags,\n    group: \"runtime\",\n    helpTopic: \"logs\",\n    notes: [\n      \"Logs are stored under the per-user Athena home and are redacted before persistence.\",\n      \"`logs export` applies a second redaction pass and writes a support-safe copy.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\nimport {\n  ATHENA_MIGRATE_ALLOW_DIRTY_YES_COMMAND,\n  ATHENA_MIGRATE_AUTH_MATERIALIZE_COMMAND,\n  ATHENA_MIGRATE_AUTH_SYNC_COMMAND,\n  ATHENA_MIGRATE_AUTH_SYNC_DRY_RUN_COMMAND,\n  ATHENA_MIGRATE_CHECK_STRICT_COMMAND,\n  ATHENA_MIGRATE_COMMAND,\n  ATHENA_MIGRATE_EXPLAIN_COMMAND,\n  ATHENA_MIGRATE_RECONCILE_APPLY_YES_COMMAND,\n  ATHENA_MIGRATE_RECONCILE_COMMAND,\n  ATHENA_MIGRATE_REPAIR_YES_COMMAND,\n  ATHENA_MIGRATE_STATUS_COMMAND,\n} from \"../../../migrations/commands.ts\";\n\nconst migrateApplyFlags = [\n  \"--config <path>\",\n  \"--dry-run\",\n  \"--allow-dirty-migrations\",\n  \"--yes\",\n  \"--json\",\n  \"--plain\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateStatusFlags = [\n  \"--config <path>\",\n  \"--json\",\n  \"--plain\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateJsonFlags = [\n  \"--config <path>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateCheckFlags = [\n  \"--config <path>\",\n  \"--strict\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateReconcileFlags = [\n  \"--config <path>\",\n  \"--apply\",\n  \"--yes\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateVerifyFlags = [\n  \"--config <path>\",\n  \"--allow-dirty-migrations\",\n  \"--json\",\n  \"--strict\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst migrateRepairFlags = [\n  \"--config <path>\",\n  \"--allow-dirty-migrations\",\n  \"--yes\",\n  \"--dry-run\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const migrateCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"migrate\",\n    description: \"Apply pending SQL migrations (direct Postgres)\",\n    examples: [\n      ATHENA_MIGRATE_COMMAND,\n      `${ATHENA_MIGRATE_COMMAND} --dry-run`,\n      ATHENA_MIGRATE_STATUS_COMMAND,\n      ATHENA_MIGRATE_CHECK_STRICT_COMMAND,\n      ATHENA_MIGRATE_RECONCILE_COMMAND,\n      ATHENA_MIGRATE_RECONCILE_APPLY_YES_COMMAND,\n      ATHENA_MIGRATE_ALLOW_DIRTY_YES_COMMAND,\n      ATHENA_MIGRATE_REPAIR_YES_COMMAND,\n      ATHENA_MIGRATE_AUTH_SYNC_COMMAND,\n    ],\n    flags: migrateApplyFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n    notes: [\n      \"Requires provider.kind=postgres and provider.mode=direct.\",\n      \"Preflights the pending batch against the physical catalog, then applies each file under a PostgreSQL session advisory lock.\",\n      \"Use migrate check for static analysis; migrate reconcile [--apply] for ledger vs physical metadata.\",\n      \"Fails closed on uncommitted application SQL or migrate config unless --allow-dirty-migrations --yes.\",\n      \"--allow-dirty is an alias of --allow-dirty-migrations; -y is an alias of --yes.\",\n      \"Non-interactive apply (no TTY) requires both the allow-dirty flag and --yes; a TTY prompts instead of --yes.\",\n    ],\n  },\n  {\n    command: \"migrate status\",\n    description: \"Show applied/pending/conflict migration rows\",\n    flags: migrateStatusFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate-status\",\n    notes: [\n      \"Prints applied, pending, and conflict rows from local SQL plus the athena.schema_migrations ledger.\",\n      \"Does not apply migrations. Use --plain for unstyled output, --json for machines.\",\n    ],\n  },\n  {\n    command: \"migrate plan\",\n    description: \"Compiler report: graph, pending, physical drift\",\n    flags: migrateJsonFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    command: \"migrate check\",\n    description: \"Static analysis + physical verification (zero mutations)\",\n    flags: migrateCheckFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    command: \"migrate graph\",\n    description: \"Print object dependency graph\",\n    flags: migrateJsonFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    command: \"migrate explain\",\n    description: \"Explain one migration's creates/reads/deps\",\n    examples: [\n      `${ATHENA_MIGRATE_EXPLAIN_COMMAND} 0007`,\n      `${ATHENA_MIGRATE_EXPLAIN_COMMAND} 0007_add_indexes.sql`,\n    ],\n    flags: migrateJsonFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n    notes: [\n      \"Requires a version or filename argument.\",\n      `${ATHENA_MIGRATE_EXPLAIN_COMMAND} with no target prints migrate help; it does not explain a missing version as (missing).`,\n    ],\n  },\n  {\n    command: \"migrate drift\",\n    description: \"Ledger vs projected vs physical schema\",\n    flags: migrateJsonFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    command: \"migrate reconcile\",\n    description:\n      \"Three-way diagnose repository vs ledger vs physical schema (no SQL)\",\n    flags: migrateReconcileFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    command: \"migrate verify\",\n    description:\n      \"Deployment readiness: ledgers, drift, dirty worktree, Auth generation\",\n    flags: migrateVerifyFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n    notes: [\n      \"Read-only. Does not apply SQL. Exit 6 when the revision is not safe to deploy.\",\n      \"A dirty migration worktree is not deploy-ready unless --allow-dirty-migrations.\",\n    ],\n  },\n  {\n    command: \"migrate repair\",\n    description:\n      \"Repair Auth schema drift (inspect/restore app objects separately)\",\n    flags: migrateRepairFlags,\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n  },\n  {\n    aliases: [\"migrate auth materialize\", \"migrate auth\"],\n    command: \"migrate auth sync\",\n    description:\n      \"Rematerialize package-owned Embedded Auth SQL under athena/managed/auth/migrations\",\n    examples: [\n      ATHENA_MIGRATE_AUTH_SYNC_COMMAND,\n      ATHENA_MIGRATE_AUTH_MATERIALIZE_COMMAND,\n      ATHENA_MIGRATE_AUTH_SYNC_DRY_RUN_COMMAND,\n    ],\n    flags: [\"--config <path>\", \"--dry-run\", \"--json\", \"--plain\", \"-h\"],\n    group: \"migrations\",\n    helpTopic: \"migrate\",\n    notes: [\n      \"Local files are a read-only inspection view. Runtime apply never executes edited copies.\",\n      \"Does not touch athena/migrations or the application ledger.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst policyHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst policyConfigFlags = [\n  \"--config <path>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyShowFlags = [\n  \"--config <path>\",\n  \"--id <id>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyExplainFlags = [\n  \"--config <path>\",\n  \"--action <name>\",\n  \"--resource <name>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policySimulateFlags = [\n  \"--config <path>\",\n  \"--action <name>\",\n  \"--resource <name>\",\n  \"--row\",\n  \"--row <json>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst policyExportFlags = [\n  \"--config <path>\",\n  \"--format ir\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const policyCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"policy\",\n    description: \"Inspect authored Athena Policy IR (no database)\",\n    examples: [\n      \"athena-js policy list\",\n      \"athena-js policy validate\",\n      \"athena-js policy explain --action select --resource public.invoices\",\n      'athena-js policy simulate --row \\'{\"userId\":\"user-1\"}\\'',\n      \"athena-js policy export --format ir\",\n    ],\n    flags: policyHelpFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n    notes: [\n      \"Loads policies from athena.config.ts (`policies` or lazy `tooling.policies`).\",\n      \"Does not require a generator provider or database connection.\",\n    ],\n  },\n  {\n    command: \"policy list\",\n    description: \"Inventory authored policies\",\n    flags: policyConfigFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy show\",\n    description: \"Show one authored policy by id\",\n    flags: policyShowFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy validate\",\n    description: \"Validate Policy IR (no database)\",\n    flags: policyConfigFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy lint\",\n    description: \"Lint policy expressions with stable codes and severity\",\n    flags: policyConfigFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy coverage\",\n    description: \"Coverage cells per resource × action\",\n    flags: policyConfigFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy explain\",\n    description: \"Structural interrogation of compiled Policy IR\",\n    flags: policyExplainFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy simulate\",\n    description: \"Bind --row and evaluate Policy against a concrete row\",\n    flags: policySimulateFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy fingerprint\",\n    description: \"Fingerprint the loaded Policy IR document\",\n    flags: policyConfigFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n  {\n    command: \"policy export\",\n    description:\n      \"Export canonical Policy IR (byte-equal to canonicalizeDocument)\",\n    flags: policyExportFlags,\n    group: \"policy\",\n    helpTopic: \"policy\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst rightsReadFlags = [\n  \"--url <gateway>\",\n  \"--admin-key <secret>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst rightsCreateFlags = [\n  \"--name <right>\",\n  \"--description <text>\",\n  \"--url <gateway>\",\n  \"--admin-key <secret>\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const rightsCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"rights ls\"],\n    command: \"rights list\",\n    description: \"List dynamic API key rights (GET /admin/api-key-rights)\",\n    flags: rightsReadFlags,\n    group: \"gateway-admin\",\n    helpTopic: \"rights\",\n  },\n  {\n    aliases: [\"rights all\"],\n    command: \"rights catalog\",\n    description:\n      \"Unified native + dynamic rights catalog (GET /admin/rights/catalog)\",\n    flags: rightsReadFlags,\n    group: \"gateway-admin\",\n    helpTopic: \"rights\",\n  },\n  {\n    command: \"rights create\",\n    description:\n      \"Bootstrap a right (POST /admin/api-key-rights). --name is parseAthenaRightKey (fail-closed)\",\n    flags: rightsCreateFlags,\n    group: \"gateway-admin\",\n    helpTopic: \"rights\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst schemaHelpFlags = [\"-h\"] as const satisfies readonly CliCatalogFlag[];\n\nconst schemaDiffFlags = [\n  \"--config <path>\",\n  \"--from <path>\",\n  \"--json\",\n  \"--migration\",\n  \"--policy-impact\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nconst schemaSnapshotFlags = [\n  \"--config <path>\",\n  \"--out <path>\",\n  \"--check\",\n  \"--json\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const schemaCatalog: readonly CliCommandEntry[] = [\n  {\n    command: \"schema\",\n    description: \"Schema IR vs physical database (diff / snapshot)\",\n    examples: [\n      \"athena-js schema snapshot\",\n      \"athena-js schema snapshot --check\",\n      \"athena-js schema diff\",\n      \"athena-js schema diff --json\",\n      \"athena-js schema diff --migration\",\n      \"athena-js schema diff --policy-impact\",\n    ],\n    flags: schemaHelpFlags,\n    group: \"schema\",\n    helpTopic: \"schema\",\n    notes: [\n      \"Compares a checked-in schema snapshot to the physical database.\",\n      \"Does not apply migrations. Use `schema diff --migration` for a proposed SQL comment stub.\",\n      \"`schema diff --policy-impact` reports authored policies impacted by dropped/renamed tables/columns (not a schema lifecycle engine).\",\n    ],\n  },\n  {\n    command: \"schema diff\",\n    description: \"Diff checked-in snapshot against the physical database\",\n    flags: schemaDiffFlags,\n    group: \"schema\",\n    helpTopic: \"schema\",\n  },\n  {\n    command: \"schema snapshot\",\n    description: \"Write or check athena/schema.snapshot.json\",\n    flags: schemaSnapshotFlags,\n    group: \"schema\",\n    helpTopic: \"schema\",\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst validateFlags = [\n  \"--config <path>\",\n  \"--strict\",\n  \"--json\",\n  \"--plain\",\n  \"-h\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const validateCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"validate local\"],\n    command: \"validate\",\n    description:\n      \"Inspect local Data Runtime, Embedded Auth schema, and passkeys (read-only)\",\n    examples: [\"athena-js validate\", \"athena-js validate local --strict\"],\n    flags: validateFlags,\n    group: \"runtime\",\n    helpTopic: \"validate\",\n    notes: [\n      \"Read-only inspection of the local Data Runtime and Embedded Auth on direct Postgres.\",\n      \"Does not apply migrations. Exit 5 when any check is error.\",\n    ],\n  },\n];\n","import type {\n  CliCatalogFlag,\n  CliCommandEntry,\n} from \"../../commands-catalog.ts\";\n\nconst versionFlags = [\n  \"--short\",\n  \"-q\",\n] as const satisfies readonly CliCatalogFlag[];\n\nexport const versionCatalog: readonly CliCommandEntry[] = [\n  {\n    aliases: [\"-v\", \"--version\", \"v\", \"version\"],\n    command: \"version\",\n    description: \"Print CLI version, package path, config, and module flags\",\n    flags: versionFlags,\n    group: \"global\",\n    helpTopic: \"version\",\n  },\n];\n","import type { CliCapabilities, CliOutputMode } from \"./types.ts\";\n\nexport interface ResolveCliCapabilitiesOptions {\n  env?: Record<string, string | undefined>;\n  /** Explicit --color / --force-color / FORCE_COLOR */\n  forceColor?: boolean;\n  /** Injectable stdout TTY detection (tests). */\n  isTty?: boolean;\n  /** Explicit --json */\n  json?: boolean;\n  /** Explicit --no-color */\n  noColor?: boolean;\n  /** Explicit --plain */\n  plain?: boolean;\n  quiet?: boolean;\n  verbose?: boolean;\n}\n\nfunction readEnv(\n  env: Record<string, string | undefined> | undefined\n): Record<string, string | undefined> {\n  if (env) {\n    return env;\n  }\n  return (\n    (globalThis as { process?: { env?: Record<string, string | undefined> } })\n      .process?.env ?? {}\n  );\n}\n\nexport function resolveCliOutputMode(\n  options: ResolveCliCapabilitiesOptions = {}\n): CliOutputMode {\n  if (options.json) {\n    return \"json\";\n  }\n  if (options.plain || options.noColor) {\n    return \"plain\";\n  }\n  const env = readEnv(options.env);\n  if (env.NO_COLOR !== undefined && env.NO_COLOR !== \"\") {\n    return \"plain\";\n  }\n  if (env.ATHENA_JS_PLAIN === \"1\" || env.ATHENA_JS_PLAIN === \"true\") {\n    return \"plain\";\n  }\n  if (env.ATHENA_JS_JSON === \"1\" || env.ATHENA_JS_JSON === \"true\") {\n    return \"json\";\n  }\n  const isTty =\n    options.isTty ??\n    Boolean(\n      (globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\n        ?.stdout?.isTTY\n    );\n  if (!isTty) {\n    return \"plain\";\n  }\n  if (env.TERM === \"dumb\") {\n    return \"plain\";\n  }\n  return \"interactive\";\n}\n\nexport function resolveCliCapabilities(\n  options: ResolveCliCapabilitiesOptions = {}\n): CliCapabilities {\n  const env = readEnv(options.env);\n  const mode = resolveCliOutputMode(options);\n  const isTty =\n    options.isTty ??\n    Boolean(\n      (globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\n        ?.stdout?.isTTY\n    );\n  const envForceColor =\n    env.FORCE_COLOR === \"1\" ||\n    env.FORCE_COLOR === \"2\" ||\n    env.FORCE_COLOR === \"3\" ||\n    env.FORCE_COLOR === \"true\";\n  const forceColor = Boolean(options.forceColor) || envForceColor;\n  const colorDisabled =\n    options.noColor === true ||\n    (env.NO_COLOR !== undefined && env.NO_COLOR !== \"\") ||\n    env.FORCE_COLOR === \"0\";\n  const color =\n    mode !== \"json\" &&\n    mode !== \"plain\" &&\n    !colorDisabled &&\n    !options.plain &&\n    (mode === \"interactive\" || forceColor);\n\n  return {\n    color,\n    isTty,\n    mode,\n    quiet: Boolean(options.quiet),\n    verbose: Boolean(options.verbose),\n  };\n}\n","import type { CliCapabilities, MigrationDisplayStatus } from \"./types.ts\";\n\nconst ANSI = {\n  bold: \"\\u001b[1m\",\n  cyan: \"\\u001b[36m\",\n  dim: \"\\u001b[2m\",\n  green: \"\\u001b[32m\",\n  red: \"\\u001b[31m\",\n  reset: \"\\u001b[0m\",\n  yellow: \"\\u001b[33m\",\n} as const;\n\nexport function paint(\n  text: string,\n  color: keyof typeof ANSI | \"none\",\n  capabilities: CliCapabilities\n): string {\n  if (!capabilities.color || color === \"none\" || color === \"reset\") {\n    return text;\n  }\n  return `${ANSI[color]}${text}${ANSI.reset}`;\n}\n\nexport function statusColor(\n  status: MigrationDisplayStatus\n): keyof typeof ANSI | \"none\" {\n  switch (status) {\n    case \"applied\":\n    case \"repaired\":\n      return \"green\";\n    case \"pending\":\n    case \"legacy-compatible\":\n    case \"drift\":\n      return \"yellow\";\n    case \"applying\":\n      return \"cyan\";\n    case \"checksum-mismatch\":\n    case \"failed\":\n    case \"missing-local\":\n      return \"red\";\n    case \"skipped\":\n    case \"unknown\":\n      return \"dim\";\n    case \"name-mismatch\":\n    case \"historical-insertion\":\n      return \"yellow\";\n    default: {\n      const _exhaustive: never = status;\n      return _exhaustive;\n    }\n  }\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(text: string, capabilities: CliCapabilities): 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  if (!capabilities.color) {\n    return line;\n  }\n  return line\n    .replaceAll(\n      /(^| )(--[a-zA-Z0-9-]+)/g,\n      (_match, space: string, flag: string) =>\n        `${space}${paint(flag, \"yellow\", capabilities)}`\n    )\n    .replaceAll(\n      /(^| )(-[a-zA-Z])(?![a-zA-Z0-9-])/g,\n      (_match, space: string, flag: string) =>\n        `${space}${paint(flag, \"yellow\", capabilities)}`\n    );\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  text: string,\n  capabilities: CliCapabilities\n): string {\n  const lines = text.split(\"\\n\");\n  const styled = lines.map((line, index) => {\n    if (index === 0 && line.length > 0) {\n      return usesRail(capabilities) ? line : paint(line, \"bold\", capabilities);\n    }\n    if (SECTION_RE.test(line)) {\n      return paint(line, \"cyan\", capabilities);\n    }\n    return colorizeFlags(line, capabilities);\n  });\n  const body = styled.join(\"\\n\");\n  if (!usesRail(capabilities)) {\n    return body;\n  }\n  return frameBlock(body, capabilities);\n}\n\nconst TAG_COLOR: Record<string, \"cyan\" | \"green\" | \"yellow\" | \"red\" | \"dim\"> = {\n  admin: \"cyan\",\n  config: \"cyan\",\n  \"dry-run\": \"cyan\",\n  error: \"red\",\n  filter: \"cyan\",\n  merge: \"cyan\",\n  mode: \"cyan\",\n  note: \"dim\",\n  ok: \"green\",\n  provider: \"cyan\",\n  skip: \"dim\",\n  targets: \"cyan\",\n  warn: \"yellow\",\n  write: \"green\",\n};\n\n/**\n * Color leading `[tag]` markers used by generate / init / env / admin output.\n */\nexport function colorizeTaggedLine(\n  line: string,\n  capabilities: CliCapabilities\n): string {\n  if (!capabilities.color) {\n    return line;\n  }\n  return line.replace(\n    /^(\\s*)\\[([^\\]]+)\\]/,\n    (_match, space: string, rawTag: string) => {\n      const tag = rawTag.trim().toLowerCase();\n      const color = TAG_COLOR[tag];\n      if (!color) {\n        return `${space}[${rawTag}]`;\n      }\n      return `${space}${paint(`[${rawTag}]`, color, capabilities)}`;\n    }\n  );\n}\n","/**\n * Full athena-js CLI command inventory (assembled from `commands/<name>/catalog.ts`).\n */\n\nimport { ATHENA_MIGRATE_STATUS_COMMAND } from \"../migrations/commands.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport { apiKeyCatalog } from \"./commands/api-key/catalog.ts\";\nimport { authCatalog } from \"./commands/auth/catalog.ts\";\nimport { billingCatalog } from \"./commands/billing/catalog.ts\";\nimport { commandsCatalog } from \"./commands/commands/catalog.ts\";\nimport { dbCatalog } from \"./commands/db/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 { logsCatalog } from \"./commands/logs/catalog.ts\";\nimport { migrateCatalog } from \"./commands/migrate/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  | \"-f <path>\"\n  | \"-h\"\n  | \"-q\"\n  | \"--admin-key <secret>\"\n  | \"--allow-dirty-migrations\"\n  | \"--apply\"\n  | \"--bytes <n>\"\n  | \"--client-name <c>\"\n  | \"--config <path>\"\n  | \"--description <d>\"\n  | \"--description <text>\"\n  | \"--dry-run\"\n  | \"--env-file <path>\"\n  | \"--env-key <name>\"\n  | \"--expires-at <iso>\"\n  | \"--file <path>\"\n  | \"--force\"\n  | \"--groups\"\n  | \"--include-latest-log\"\n  | \"--invocation <id>\"\n  | \"--json\"\n  | `--mode ${string}`\n  | \"--name <name>\"\n  | \"--name <right>\"\n  | \"--no-discover-schemas\"\n  | \"--no-log\"\n  | \"--no-write-config\"\n  | \"--plain\"\n  | \"--prefix <str>\"\n  | \"--rights a,b\"\n  | \"--short\"\n  | \"--skip-runtime\"\n  | \"--strict\"\n  | \"--url <gateway>\"\n  | \"--write\"\n  | \"--write-env\"\n  | \"--write-config\"\n  | \"--yes\"\n  | \"--from <path>\"\n  | \"--out <path>\"\n  | \"--migration\"\n  | \"--check\"\n  | \"--limit <n>\"\n  | \"--older-than <duration>\"\n  | \"--errors\"\n  | \"--id <id>\"\n  | \"--action <name>\"\n  | \"--resource <name>\"\n  | \"--row\"\n  | \"--row <json>\"\n  | \"--format ir\"\n  | \"--policy-impact\"\n  | \"--connection <id>\"\n  | \"--subject <id>\"\n  | \"--provider <name>\"\n  | \"--customer <id>\"\n  | \"--cursor <cursor>\"\n  | \"--classify-only\"\n  | \"--include-ambiguous\"\n  | \"--max-pages <n>\"\n  | \"--max-customers <n>\"\n  | \"--max-duration <ms>\"\n  | \"[<topic>]\";\n\nexport interface CliCommandEntry {\n  /** Alternate spellings that parse to the same command. */\n  aliases?: string[];\n  /** Canonical invocation path, e.g. `api-key create`. */\n  command: string;\n  /** Short summary. */\n  description: string;\n  /** Example invocations (`athena-js …` or env-prefixed). */\n  examples?: readonly string[];\n  /** Notable flags (not exhaustive when `…` used). */\n  flags?: readonly CliCatalogFlag[];\n  /** Grouping label for human output. */\n  group:\n    | \"global\"\n    | \"project\"\n    | \"generator\"\n    | \"schema\"\n    | \"migrations\"\n    | \"auth\"\n    | \"env\"\n    | \"runtime\"\n    | \"gateway-admin\"\n    | \"local-secrets\"\n    | \"policy\";\n  /** Help topic for `athena-js help <topic>`. */\n  helpTopic?: CatalogHelpTopic;\n  /** Extra help paragraphs after Options. */\n  notes?: readonly string[];\n}\n\nexport type CatalogHelpTopic =\n  | \"root\"\n  | \"generate\"\n  | \"init\"\n  | \"migrate\"\n  | \"migrate-status\"\n  | \"env\"\n  | \"api-key\"\n  | \"rights\"\n  | \"version\"\n  | \"commands\"\n  | \"validate\"\n  | \"doctor\"\n  | \"logs\"\n  | \"schema\"\n  | \"auth\"\n  | \"policy\"\n  | \"billing\"\n  | \"db\";\n\nexport const CLI_COMMAND_CATALOG: readonly CliCommandEntry[] = [\n  ...helpCatalog,\n  ...versionCatalog,\n  ...commandsCatalog,\n  ...initCatalog,\n  ...generateCatalog,\n  ...schemaCatalog,\n  ...policyCatalog,\n  ...billingCatalog,\n  ...migrateCatalog,\n  ...authCatalog,\n  ...envCatalog,\n  ...validateCatalog,\n  ...doctorCatalog,\n  ...dbCatalog,\n  ...logsCatalog,\n  ...apiKeyCatalog,\n  ...rightsCatalog,\n];\n\nconst GROUP_TITLES: Record<CliCommandEntry[\"group\"], string> = {\n  auth: \"Auth\",\n  env: \"Environment\",\n  \"gateway-admin\": \"Gateway admin (ATHENA_KEY_12)\",\n  generator: \"Generator\",\n  global: \"Global\",\n  \"local-secrets\": \"Local secrets\",\n  migrations: \"Migrations\",\n  policy: \"Policy\",\n  project: \"Project config\",\n  runtime: \"Local runtime\",\n  schema: \"Schema\",\n};\n\nexport type CommandsListFormat = \"full\" | \"json\" | \"plain\" | \"groups\";\n\nexport interface CommandsListOptions {\n  /** Color the human catalog. Defaults to TTY detection. Ignored for json/plain. */\n  capabilities?: CliCapabilities;\n  /** Override catalog (tests). */\n  catalog?: readonly CliCommandEntry[];\n  format?: CommandsListFormat;\n}\n\nexport function listCliCommands(\n  options: CommandsListOptions = {}\n): readonly CliCommandEntry[] {\n  return options.catalog ?? CLI_COMMAND_CATALOG;\n}\n\nfunction firstPathToken(path: string): string | undefined {\n  const token = path.split(\" \")[0];\n  return token && token.length > 0 ? token : undefined;\n}\n\nfunction tokenAfterParent(path: string, parent: string): string | undefined {\n  if (path === parent) {\n    return;\n  }\n  const prefix = `${parent} `;\n  if (!path.startsWith(prefix)) {\n    return;\n  }\n  return firstPathToken(path.slice(prefix.length));\n}\n\nfunction uniqueInCatalogOrder(\n  catalog: readonly CliCommandEntry[],\n  pick: (entry: CliCommandEntry) => string | undefined\n): string[] {\n  const names: string[] = [];\n  const seen = new Set<string>();\n  for (const entry of catalog) {\n    const name = pick(entry);\n    if (!name || seen.has(name)) {\n      continue;\n    }\n    seen.add(name);\n    names.push(name);\n  }\n  return names;\n}\n\nfunction catalogPathMatches(\n  entryCommand: string,\n  commandPath: string\n): boolean {\n  return (\n    entryCommand === commandPath ||\n    entryCommand.startsWith(`${commandPath} `) ||\n    commandPath.startsWith(`${entryCommand} `)\n  );\n}\n\nfunction optionFlagToken(flag: string): string | undefined {\n  const token = flag.split(/\\s+/)[0];\n  return token?.startsWith(\"-\") ? token : undefined;\n}\n\n/** Dash flags declared on catalog entries for `commandPath`, plus `--help` / `-h`. */\nexport function catalogOptionFlags(\n  commandPath: string,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string[] {\n  const names: string[] = [];\n  const seen = new Set<string>();\n  const add = (name: string | undefined) => {\n    if (!name || seen.has(name)) {\n      return;\n    }\n    seen.add(name);\n    names.push(name);\n  };\n  for (const entry of catalog) {\n    if (!catalogPathMatches(entry.command, commandPath)) {\n      continue;\n    }\n    for (const flag of entry.flags ?? []) {\n      add(optionFlagToken(flag));\n    }\n  }\n  add(\"--help\");\n  add(\"-h\");\n  return names;\n}\n\nexport function catalogHelpTopic(\n  command: string,\n  rest: readonly string[] = [],\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): CatalogHelpTopic | undefined {\n  const tokens = command.startsWith(\"-\")\n    ? [command]\n    : [command, ...rest.filter((token) => !token.startsWith(\"-\"))];\n  for (let length = tokens.length; length >= 1; length -= 1) {\n    const candidate = tokens.slice(0, length).join(\" \");\n    const topic = matchCatalogHelpTopic(candidate, catalog);\n    if (topic) {\n      return topic;\n    }\n  }\n}\n\nfunction matchCatalogHelpTopic(\n  candidate: string,\n  catalog: readonly CliCommandEntry[]\n): CatalogHelpTopic | undefined {\n  for (const entry of catalog) {\n    if (entry.helpTopic && entry.command === candidate) {\n      return entry.helpTopic;\n    }\n    for (const alias of entry.aliases ?? []) {\n      if (entry.helpTopic && alias === candidate) {\n        return entry.helpTopic;\n      }\n    }\n  }\n  for (const entry of catalog) {\n    if (entry.helpTopic && firstPathToken(entry.command) === candidate) {\n      return entry.helpTopic;\n    }\n    for (const alias of entry.aliases ?? []) {\n      if (entry.helpTopic && firstPathToken(alias) === candidate) {\n        return entry.helpTopic;\n      }\n    }\n  }\n}\n\nexport function catalogOptionHelpHint(\n  commandPath: string,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string {\n  if (!commandPath) {\n    return \"Run `athena-js --help` for usage.\";\n  }\n  const topic = catalogHelpTopic(commandPath, [], catalog);\n  if (topic && topic !== \"root\") {\n    return `Run \\`athena-js help ${topic}\\` for flags.`;\n  }\n  return `Run \\`athena-js ${commandPath} --help\\` for flags.`;\n}\n\n/** Canonical top-level verbs (`generate`, `api-key`, …) in catalog order. */\nexport function catalogRootCommands(\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string[] {\n  return uniqueInCatalogOrder(catalog, (entry) =>\n    firstPathToken(entry.command)\n  );\n}\n\n/** Canonical subcommands of `parent` (`api-key create` → `create`). */\nexport function catalogSubcommands(\n  parent: string,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string[] {\n  return uniqueInCatalogOrder(catalog, (entry) =>\n    tokenAfterParent(entry.command, parent)\n  );\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  parent: string,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string[] {\n  const names: string[] = [];\n  const seen = new Set<string>();\n  const add = (path: string) => {\n    const name = tokenAfterParent(path, parent);\n    if (!name || seen.has(name)) {\n      return;\n    }\n    seen.add(name);\n    names.push(name);\n  };\n  for (const entry of catalog) {\n    add(entry.command);\n    for (const alias of entry.aliases ?? []) {\n      if (!alias.startsWith(\"-\")) {\n        add(alias);\n      }\n    }\n  }\n  return names;\n}\n\n/** `\"a\"`, `\"a\" or \"b\"`, or `\"a\", \"b\", or \"c\"`. */\nexport function formatQuotedOrList(items: readonly string[]): string {\n  if (items.length === 0) {\n    return \"\";\n  }\n  if (items.length === 1) {\n    return `\"${items[0]}\"`;\n  }\n  const quoted = items.map((item) => `\"${item}\"`);\n  if (quoted.length === 2) {\n    return `${quoted[0]} or ${quoted[1]}`;\n  }\n  const last = quoted.at(-1);\n  return `${quoted.slice(0, -1).join(\", \")}, or ${last}`;\n}\n\nexport function formatExpectedCommandsLine(items: readonly string[]): string {\n  const list = formatQuotedOrList(items);\n  return list.length > 0 ? `Expected ${list}.` : \"\";\n}\n\nconst HELP_COLUMN = 24;\n\nfunction formatHelpColumn(left: string, description: string): string {\n  const body = left.startsWith(\"  \") ? left : `  ${left}`;\n  if (body.length >= HELP_COLUMN) {\n    return `${body} ${description}`;\n  }\n  return `${body}${\" \".repeat(HELP_COLUMN - body.length)}${description}`;\n}\n\nfunction usageFlags(flags: readonly CliCatalogFlag[] | undefined): string {\n  const visible = (flags ?? []).filter((flag) => flag !== \"-h\");\n  return visible.length > 0 ? ` ${visible.join(\" \")}` : \"\";\n}\n\nfunction dashAliases(entry: CliCommandEntry): string[] {\n  return (entry.aliases ?? []).filter((alias) => alias.startsWith(\"-\"));\n}\n\n/** One invocation line: `athena-js generate --dry-run …`. */\nexport function formatCatalogInvocation(entry: CliCommandEntry): string {\n  return `athena-js ${entry.command}${usageFlags(entry.flags)}`;\n}\n\nfunction catalogGroupsInOrder(\n  catalog: readonly CliCommandEntry[]\n): CliCommandEntry[\"group\"][] {\n  const groups: CliCommandEntry[\"group\"][] = [];\n  const seen = new Set<CliCommandEntry[\"group\"]>();\n  for (const entry of catalog) {\n    if (seen.has(entry.group)) {\n      continue;\n    }\n    seen.add(entry.group);\n    groups.push(entry.group);\n  }\n  return groups;\n}\n\nfunction familySectionLines(\n  catalog: readonly CliCommandEntry[],\n  render: (entry: CliCommandEntry) => string | undefined\n): string[] {\n  const lines: string[] = [];\n  for (const group of catalogGroupsInOrder(catalog)) {\n    const rendered: string[] = [];\n    for (const entry of catalog) {\n      if (entry.group !== group || entry.command === \"help\") {\n        continue;\n      }\n      const line = render(entry);\n      if (line) {\n        rendered.push(line);\n      }\n    }\n    if (rendered.length === 0) {\n      continue;\n    }\n    if (lines.length > 0) {\n      lines.push(\"\");\n    }\n    lines.push(`${GROUP_TITLES[group]}:`);\n    lines.push(...rendered);\n  }\n  return lines;\n}\n\nfunction rootCommandRows(catalog: readonly CliCommandEntry[]): Array<{\n  description: string;\n  group: CliCommandEntry[\"group\"];\n  name: string;\n}> {\n  const rows: Array<{\n    description: string;\n    group: CliCommandEntry[\"group\"];\n    name: string;\n  }> = [];\n  const seen = new Set<string>();\n  for (const entry of catalog) {\n    const name = firstPathToken(entry.command);\n    if (!name || name === \"help\" || seen.has(name)) {\n      continue;\n    }\n    seen.add(name);\n    const exact = catalog.find((candidate) => candidate.command === name);\n    rows.push({\n      description: exact?.description ?? entry.description,\n      group: exact?.group ?? entry.group,\n      name,\n    });\n  }\n  return rows;\n}\n\nfunction groupedRootCommandLines(\n  catalog: readonly CliCommandEntry[]\n): string[] {\n  const rows = rootCommandRows(catalog);\n  const lines: string[] = [];\n  for (const group of catalogGroupsInOrder(catalog)) {\n    const groupRows = rows.filter((row) => row.group === group);\n    if (groupRows.length === 0) {\n      continue;\n    }\n    if (lines.length > 0) {\n      lines.push(\"\");\n    }\n    lines.push(`${GROUP_TITLES[group]}:`);\n    for (const row of groupRows) {\n      lines.push(formatHelpColumn(row.name, row.description));\n    }\n  }\n  return lines;\n}\n\nfunction globalOptionRows(catalog: readonly CliCommandEntry[]): string[] {\n  const rows: string[] = [];\n  for (const entry of catalog) {\n    if (entry.group !== \"global\" || entry.command === \"help\") {\n      continue;\n    }\n    const flags = dashAliases(entry);\n    if (flags.length === 0) {\n      continue;\n    }\n    rows.push(\n      formatHelpColumn(flags.slice(0, 2).join(\", \"), entry.description)\n    );\n    for (const extra of flags.slice(2)) {\n      rows.push(\n        formatHelpColumn(extra, `Alias of ${flags[1] ?? entry.command}`)\n      );\n    }\n  }\n  const help = catalog.find((entry) => entry.command === \"help\");\n  if (help) {\n    const flags = dashAliases(help);\n    rows.unshift(\n      formatHelpColumn(\n        flags.length > 0 ? flags.join(\", \") : \"-h, --help\",\n        `${help.description} (also: athena-js --help <command>)`\n      )\n    );\n  }\n  rows.push(\n    formatHelpColumn(\n      \"--color\",\n      \"Force ANSI color (--color=always, or FORCE_COLOR=1)\"\n    )\n  );\n  rows.push(\n    formatHelpColumn(\n      \"--no-color\",\n      \"Disable ANSI color (--color=never, or NO_COLOR=1)\"\n    )\n  );\n  rows.push(\n    formatHelpColumn(\n      \"-o, --output <format|file>\",\n      \"Format text|json|ndjson, or a report file path (e.g. -o strict.txt)\"\n    )\n  );\n  rows.push(formatHelpColumn(\"-j, --json\", \"Alias of --output json\"));\n  rows.push(\n    formatHelpColumn(\n      \"--out-file <path>\",\n      \"Write the CLI report to a file (combine with --json for JSON)\"\n    )\n  );\n  rows.push(formatHelpColumn(\"--plain\", \"Disable rails and color\"));\n  rows.push(formatHelpColumn(\"--quiet\", \"Reduce informational text\"));\n  rows.push(\n    formatHelpColumn(\"--verbose\", \"Print timings and extra diagnostics\")\n  );\n  rows.push(\n    formatHelpColumn(\n      \"--cwd <path>\",\n      \"Working directory (use --cwd; -C remains commands)\"\n    )\n  );\n  rows.push(formatHelpColumn(\"-c, --config <path>\", \"athena.config path\"));\n  rows.push(formatHelpColumn(\"--profile <name>\", \"Named CLI profile\"));\n  rows.push(\n    formatHelpColumn(\"--strict\", \"Promote configured warnings to errors\")\n  );\n  rows.push(\n    formatHelpColumn(\"--debug\", \"Debug verbosity (also ATHENA_JS_DEBUG=1)\")\n  );\n  rows.push(\n    formatHelpColumn(\n      \"--no-log\",\n      \"Disable persistent CLI logging for this invocation\"\n    )\n  );\n  return rows;\n}\n\n/** Root `athena-js --help` text from the command catalog. */\nexport function formatRootUsage(\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string {\n  const usageLines = familySectionLines(\n    catalog,\n    (entry) => `  ${formatCatalogInvocation(entry)}`\n  );\n  const commandLines = groupedRootCommandLines(catalog);\n  const exampleLines = familySectionLines(\n    catalog,\n    (entry) => `  athena-js ${entry.command}`\n  );\n\n  return [\n    `athena-js  ${PACKAGE_VERSION}`,\n    \"\",\n    \"Schema, Auth, and environment CLI for @xylex-group/athena.\",\n    \"\",\n    \"Usage:\",\n    ...usageLines,\n    \"\",\n    \"Commands:\",\n    ...commandLines,\n    \"\",\n    \"Global options:\",\n    ...globalOptionRows(catalog),\n    \"\",\n    \"Examples:\",\n    ...exampleLines,\n    \"  athena-js --help\",\n    \"  athena-js <command> --help\",\n  ].join(\"\\n\");\n}\n\n/** Topic help (`athena-js help generate`, `help migrate`, …) from catalog entries. */\nexport function formatCatalogTopicUsage(\n  topic: CatalogHelpTopic,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string {\n  if (topic === \"root\") {\n    return formatRootUsage(catalog);\n  }\n\n  const exact = catalog.filter((entry) => entry.helpTopic === topic);\n  const rootName = topic.includes(\"-\") ? undefined : topic;\n  const entries =\n    rootName === undefined\n      ? exact\n      : catalog.filter((entry) => firstPathToken(entry.command) === rootName);\n  const pages = entries.length > 0 ? entries : exact;\n  const primary = pages[0];\n  if (!primary) {\n    return `athena-js ${topic}`;\n  }\n\n  const titleRoot = firstPathToken(primary.command) ?? primary.command;\n  const title =\n    topic === \"migrate-status\"\n      ? ATHENA_MIGRATE_STATUS_COMMAND\n      : `athena-js ${titleRoot}`;\n\n  const invocations = new Set<string>();\n  for (const entry of pages) {\n    invocations.add(`  ${formatCatalogInvocation(entry)}`);\n    for (const alias of entry.aliases ?? []) {\n      if (alias.startsWith(\"-\") && !alias.startsWith(\"--\")) {\n        invocations.add(`  athena-js ${alias}`);\n        continue;\n      }\n      invocations.add(`  athena-js ${alias}${usageFlags(entry.flags)}`);\n    }\n  }\n\n  const optionFlags: string[] = [];\n  const seenFlags = new Set<string>();\n  const addFlag = (flag: string) => {\n    if (seenFlags.has(flag)) {\n      return;\n    }\n    seenFlags.add(flag);\n    optionFlags.push(flag);\n  };\n  for (const entry of pages) {\n    for (const flag of entry.flags ?? []) {\n      if (flag === \"-h\") {\n        continue;\n      }\n      addFlag(flag);\n    }\n  }\n  addFlag(\"-h, --help\");\n\n  const notes: string[] = [];\n  const examples: string[] = [];\n  const seenNote = new Set<string>();\n  for (const entry of pages) {\n    notes.push(entry.description);\n    for (const note of entry.notes ?? []) {\n      if (seenNote.has(note)) {\n        continue;\n      }\n      seenNote.add(note);\n      notes.push(note);\n    }\n    for (const example of entry.examples ?? []) {\n      examples.push(example.startsWith(\"  \") ? example : `  ${example}`);\n    }\n  }\n  if (examples.length === 0) {\n    for (const entry of pages) {\n      examples.push(`  athena-js ${entry.command}`);\n    }\n  }\n\n  return [\n    title,\n    \"\",\n    \"Usage:\",\n    ...invocations,\n    \"\",\n    \"Options:\",\n    ...optionFlags.map((flag) => `  ${flag}`),\n    \"\",\n    ...notes,\n    \"\",\n    \"Examples:\",\n    ...examples,\n  ].join(\"\\n\");\n}\n\n/** Topic help for a single catalog command name (e.g. `version`). */\nexport function formatCatalogCommandUsage(\n  commandName: string,\n  catalog: readonly CliCommandEntry[] = CLI_COMMAND_CATALOG\n): string {\n  const primary =\n    catalog.find((entry) => entry.command === commandName) ??\n    catalog.find((entry) => firstPathToken(entry.command) === commandName);\n  const topic = primary?.helpTopic;\n  if (!topic || topic === \"root\") {\n    return formatRootUsage(catalog);\n  }\n  return formatCatalogTopicUsage(topic, catalog);\n}\n\nexport function formatCommandsCatalog(\n  options: CommandsListOptions = {}\n): string {\n  const catalog = [...listCliCommands(options)];\n  const format = options.format ?? \"full\";\n\n  if (format === \"json\") {\n    return JSON.stringify(\n      {\n        commands: catalog,\n        count: catalog.length,\n        sdkVersion: PACKAGE_VERSION,\n      },\n      null,\n      2\n    );\n  }\n\n  if (format === \"plain\") {\n    const paths = new Set<string>();\n    for (const entry of catalog) {\n      paths.add(entry.command);\n      for (const alias of entry.aliases ?? []) {\n        // Skip pure flag aliases in plain path mode when they start with -\n        if (!alias.startsWith(\"-\")) {\n          paths.add(alias);\n        }\n      }\n    }\n    return [...paths].sort((a, b) => a.localeCompare(b)).join(\"\\n\");\n  }\n\n  const capabilities =\n    options.capabilities ??\n    resolveCliCapabilities({\n      plain: true,\n    });\n\n  if (format === \"groups\") {\n    const byGroup = new Map<string, string[]>();\n    for (const entry of catalog) {\n      const title = GROUP_TITLES[entry.group];\n      const bucket = byGroup.get(title) ?? [];\n      bucket.push(entry.command);\n      byGroup.set(title, bucket);\n    }\n    const lines = [`athena-js commands (sdk ${PACKAGE_VERSION})`, \"\"];\n    for (const [title, commands] of byGroup.entries()) {\n      lines.push(`${paint(`${title}:`, \"cyan\", capabilities)}`);\n      for (const command of commands) {\n        lines.push(`  ${command}`);\n      }\n      lines.push(\"\");\n    }\n    return styleHelpText(lines.join(\"\\n\").trimEnd(), capabilities);\n  }\n\n  // full\n  const lines = [\n    `athena-js command catalog (sdk ${PACKAGE_VERSION})`,\n    `commands: ${catalog.length}`,\n    \"\",\n    \"Global discovery:\",\n    \"  athena-js --help | -h | help\",\n    \"  athena-js --version | -v | version | v [--short|-q]\",\n    \"  athena-js --commands | -C | commands [--json|--plain|--groups]\",\n    \"  athena-js help <topic>\",\n    \"\",\n  ];\n\n  let currentGroup: CliCommandEntry[\"group\"] | undefined;\n  for (const entry of catalog) {\n    if (entry.group !== currentGroup) {\n      currentGroup = entry.group;\n      lines.push(`${GROUP_TITLES[currentGroup]}:`);\n    }\n    lines.push(`  ${entry.command}`);\n    lines.push(`    ${entry.description}`);\n    if (entry.aliases && entry.aliases.length > 0) {\n      lines.push(`    aliases: ${entry.aliases.join(\", \")}`);\n    }\n    if (entry.flags && entry.flags.length > 0) {\n      lines.push(`    flags: ${entry.flags.join(\" \")}`);\n    }\n    if (entry.helpTopic) {\n      lines.push(`    help: athena-js help ${entry.helpTopic}`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(\"Tips:\");\n  lines.push(\"  athena-js <command> --help     detailed flags for one command\");\n  lines.push(\"  athena-js commands --json      machine-readable inventory\");\n  lines.push(\"  athena-js commands --plain     one path per line (scripting)\");\n  return styleHelpText(lines.join(\"\\n\").trimEnd(), capabilities);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\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  Authorization: 7,\n  Configuration: 3,\n  Conflict: 6,\n  Runtime: 4,\n  SafetyRefusal: 8,\n  Success: 0,\n  Unexpected: 1,\n  Usage: 2,\n  Validation: 5,\n} as const;\n\nexport type CliExitCode = (typeof CliExitCode)[keyof typeof CliExitCode];\n\ninterface CliExitState {\n  code?: number;\n}\n\nconst cliExitState = new AsyncLocalStorage<CliExitState>();\n\nexport function withCliExitCodeContext<T>(\n  operation: () => Promise<T> | T\n): Promise<T> {\n  return cliExitState.run({}, async () => operation());\n}\n\nexport function getCliExitCode(): number | undefined {\n  return cliExitState.getStore()?.code;\n}\n\nexport function setCliExitCode(code: number): void {\n  const state = cliExitState.getStore();\n  if (state) {\n    state.code = code;\n    return;\n  }\n  const proc = (globalThis as { process?: { exitCode?: number } }).process;\n  if (proc) {\n    proc.exitCode = code;\n  }\n}\n\nexport function isCliExitCode(value: number): value is CliExitCode {\n  return (\n    value === CliExitCode.Success ||\n    value === CliExitCode.Unexpected ||\n    value === CliExitCode.Usage ||\n    value === CliExitCode.Configuration ||\n    value === CliExitCode.Runtime ||\n    value === CliExitCode.Validation ||\n    value === CliExitCode.Conflict ||\n    value === CliExitCode.Authorization ||\n    value === CliExitCode.SafetyRefusal\n  );\n}\n","import { randomUUID } from \"node:crypto\";\nimport { CliExitCode } from \"./exit-code.ts\";\n\nconst cliErrorIds = new WeakMap<object, string>();\n\nexport interface AthenaCliErrorOptions {\n  cause?: unknown;\n  code: string;\n  exitCode?: CliExitCode;\n  hint?: string;\n  message: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport class AthenaCliError extends Error {\n  readonly code: string;\n  readonly hint?: string;\n  readonly metadata?: Record<string, unknown>;\n  readonly exitCode: CliExitCode;\n\n  constructor(options: AthenaCliErrorOptions) {\n    super(\n      options.message,\n      options.cause === undefined ? undefined : { cause: options.cause }\n    );\n    this.name = \"AthenaCliError\";\n    this.code = options.code;\n    this.hint = options.hint;\n    this.metadata = options.metadata;\n    this.exitCode = options.exitCode ?? CliExitCode.Unexpected;\n  }\n}\n\nexport function ensureCliErrorId(error: unknown): string {\n  if (\n    (typeof error !== \"object\" || error === null) &&\n    typeof error !== \"function\"\n  ) {\n    return randomUUID();\n  }\n  const object = error as object;\n  const existing = cliErrorIds.get(object);\n  if (existing) {\n    return existing;\n  }\n  const id = randomUUID();\n  cliErrorIds.set(object, id);\n  return id;\n}\n\nexport function getCliErrorId(error: unknown): string | undefined {\n  if (\n    (typeof error !== \"object\" || error === null) &&\n    typeof error !== \"function\"\n  ) {\n    return;\n  }\n  return cliErrorIds.get(error as object);\n}\n\nexport function formatAthenaCliError(\n  error: AthenaCliError,\n  logPath?: string\n): string {\n  const lines = [error.message];\n  lines.push(\"\", `  ${error.code}`);\n  if (error.hint) {\n    lines.push(\n      \"\",\n      ...error.hint.split(\"\\n\").map((line) => (line ? `  ${line}` : \"\"))\n    );\n  }\n  if (logPath) {\n    lines.push(\"\", `  Log  ${logPath}`);\n  }\n  return 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  if (a === b) {\n    return 0;\n  }\n  if (a.length === 0) {\n    return b.length;\n  }\n  if (b.length === 0) {\n    return a.length;\n  }\n\n  const row = Array.from({ length: b.length + 1 }, (_, index) => index);\n  for (let i = 1; i <= a.length; i += 1) {\n    let previous = i - 1;\n    row[0] = i;\n    for (let j = 1; j <= b.length; j += 1) {\n      const current = row[j] ?? 0;\n      const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n      row[j] = Math.min(\n        (row[j] ?? 0) + 1,\n        (row[j - 1] ?? 0) + 1,\n        previous + cost\n      );\n      previous = current;\n    }\n  }\n  return row[b.length] ?? b.length;\n}\n\nfunction maxSuggestDistance(token: string): number {\n  if (token.length <= 3) {\n    return 1;\n  }\n  if (token.length <= 8) {\n    return 2;\n  }\n  return 3;\n}\n\nexport function closestMatches(\n  token: string,\n  candidates: readonly string[],\n  limit = 3\n): string[] {\n  const needle = token.toLowerCase();\n  const maxDistance = maxSuggestDistance(needle);\n  const ranked = candidates\n    .filter((candidate) => candidate.length > 0)\n    .map((candidate) => ({\n      candidate,\n      distance: levenshtein(needle, candidate.toLowerCase()),\n    }))\n    .filter(\n      ({ candidate, distance }) =>\n        distance > 0 && distance <= maxDistance && distance < candidate.length\n    )\n    .sort((left, right) => {\n      if (left.distance !== right.distance) {\n        return left.distance - right.distance;\n      }\n      return left.candidate.localeCompare(right.candidate);\n    });\n\n  const unique: string[] = [];\n  for (const { candidate } of ranked) {\n    if (!unique.includes(candidate)) {\n      unique.push(candidate);\n    }\n    if (unique.length >= limit) {\n      break;\n    }\n  }\n  return unique;\n}\n\nexport function formatDidYouMean(matches: readonly string[]): string {\n  if (matches.length === 0) {\n    return \"\";\n  }\n  if (matches.length === 1) {\n    return `Did you mean ${matches[0]}?`;\n  }\n  return `Did you mean one of: ${matches.join(\", \")}?`;\n}\n","import {\n  CLI_COMMAND_CATALOG,\n  catalogOptionFlags,\n  catalogOptionHelpHint,\n  catalogRootCommands,\n  formatExpectedCommandsLine,\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  return raw\n    .split(\",\")\n    .map((part) => part.trim())\n    .filter((part) => part.length > 0);\n}\n\nexport function parseGatewayAdminFlags(\n  rest: string[],\n  startIndex: number\n): {\n  adminKey?: string;\n  index: number;\n  json: boolean;\n  consumed: Record<string, string | boolean | string[] | undefined>;\n  url?: string;\n} {\n  let index = startIndex;\n  let json = false;\n  let url: string | undefined;\n  let adminKey: string | undefined;\n  const consumed: Record<string, string | boolean | string[] | undefined> = {};\n\n  while (index < rest.length) {\n    const token = rest[index];\n    if (token === \"--json\") {\n      json = true;\n      index += 1;\n      continue;\n    }\n    if (token === \"--url\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --url option.\");\n      }\n      url = nextValue;\n      index += 2;\n      continue;\n    }\n    if (token === \"--admin-key\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --admin-key option.\");\n      }\n      adminKey = nextValue;\n      index += 2;\n      continue;\n    }\n\n    // Leave specialized flags to the caller by stopping at unknown tokens\n    // only when caller wants — here we collect common + pass unknown via index.\n    break;\n  }\n\n  consumed.json = json;\n  consumed.url = url;\n  consumed.adminKey = adminKey;\n  return { adminKey, consumed, index, json, url };\n}\n\nexport function helpOrRejectUnknownFlags(\n  rest: string[],\n  startIndex: number,\n  commandPath: string,\n  topic: HelpCommand[\"topic\"]\n): HelpCommand | undefined {\n  for (const token of rest.slice(startIndex)) {\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic };\n    }\n    throw unknownOptionError(token, commandPath);\n  }\n}\n\nexport function catalogCommandNames(): string[] {\n  const names = new Set<string>();\n  for (const entry of CLI_COMMAND_CATALOG) {\n    names.add(entry.command);\n    const head = entry.command.split(\" \")[0];\n    if (head) {\n      names.add(head);\n    }\n    for (const alias of entry.aliases ?? []) {\n      if (!alias.startsWith(\"-\")) {\n        names.add(alias);\n        const aliasHead = alias.split(\" \")[0];\n        if (aliasHead) {\n          names.add(aliasHead);\n        }\n      }\n    }\n  }\n  return [...names];\n}\n\nexport function flagsForCommand(commandPath: string): string[] {\n  return [\n    ...new Set([\n      ...catalogOptionFlags(commandPath),\n      \"--color\",\n      \"--no-color\",\n      \"--force-color\",\n    ]),\n  ];\n}\n\nexport function unknownCommandError(command: string): AthenaCliError {\n  const suggestion = formatDidYouMean(\n    closestMatches(command, catalogCommandNames())\n  );\n  return new AthenaCliError({\n    code: \"CLI002\",\n    exitCode: CliExitCode.Usage,\n    message: [\n      `Unknown command \"${command}\".`,\n      suggestion,\n      formatExpectedCommandsLine(catalogRootCommands()),\n      \"Run `athena-js --help` for usage.\",\n    ]\n      .filter((line) => line.length > 0)\n      .join(\"\\n\"),\n  });\n}\n\nexport function unknownOptionError(\n  token: string,\n  commandPath: string\n): AthenaCliError {\n  const suggestion = formatDidYouMean(\n    closestMatches(token, flagsForCommand(commandPath))\n  );\n  return new AthenaCliError({\n    code: \"CLI003\",\n    exitCode: CliExitCode.Usage,\n    message: [\n      `Unknown option \"${token}\"${commandPath ? ` for ${commandPath}` : \"\"}.`,\n      suggestion,\n      formatExpectedCommandsLine(catalogOptionFlags(commandPath)),\n      catalogOptionHelpHint(commandPath),\n    ]\n      .filter((line) => line.length > 0)\n      .join(\"\\n\"),\n  });\n}\n","import type { CommandContext } from \"../command-context.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport type { CommandResult } from \"./result.ts\";\n\nexport interface RegisteredCommand {\n  /**\n   * Alternate first-token spellings (`key` for `api-key`, `-v` for version).\n   * Full-path aliases use {@link aliasPaths}.\n   */\n  aliases?: readonly string[];\n  /** Extra full paths (`[\"env\", \"validate\"]` for `env check`). */\n  aliasPaths?: readonly (readonly string[])[];\n  /** Dotted id used in the JSON protocol (`migrate.plan`). */\n  id: string;\n  legacy: CliCommand[\"command\"] | readonly CliCommand[\"command\"][];\n  parse: (rest: string[]) => CliCommand;\n  /** Canonical invocation path (`[\"migrate\", \"plan\"]`). */\n  path: readonly string[];\n  run: (\n    ctx: CommandContext,\n    parsed: CliCommand\n  ) => Promise<void | CommandResult<unknown>>;\n  /** Credential-bearing flags whose following values must be sanitized. */\n  secretFlags?: readonly string[];\n  sessionTitle?: (parsed: CliCommand) => string | undefined;\n  usage: () => string;\n}\n\nexport interface DefineCommandOptions {\n  aliases?: readonly string[];\n  aliasPaths?: readonly (readonly string[])[];\n  id?: string;\n  legacy: RegisteredCommand[\"legacy\"];\n  parse: RegisteredCommand[\"parse\"];\n  path: readonly string[];\n  run: RegisteredCommand[\"run\"];\n  secretFlags?: readonly string[];\n  sessionTitle?: RegisteredCommand[\"sessionTitle\"];\n  usage: RegisteredCommand[\"usage\"];\n}\n\nexport function commandIdFromPath(path: readonly string[]): string {\n  return path.join(\".\");\n}\n\nexport function defineCommand(\n  options: DefineCommandOptions\n): RegisteredCommand {\n  return {\n    aliases: options.aliases,\n    aliasPaths: options.aliasPaths,\n    id: options.id ?? commandIdFromPath(options.path),\n    legacy: options.legacy,\n    parse: options.parse,\n    path: options.path,\n    run: options.run,\n    secretFlags: options.secretFlags,\n    sessionTitle: options.sessionTitle,\n    usage: options.usage,\n  };\n}\n\nexport function legacyIds(command: RegisteredCommand): CliCommand[\"command\"][] {\n  const { legacy } = command;\n  if (typeof legacy === \"string\") {\n    return [legacy];\n  }\n  return [...legacy];\n}\n","import type { CliCommand } from \"../types.ts\";\nimport { legacyIds, type RegisteredCommand } from \"./define-command.ts\";\n\nfunction pathEquals(\n  left: readonly string[],\n  right: readonly string[]\n): boolean {\n  if (left.length !== right.length) {\n    return false;\n  }\n  return left.every((token, index) => token === right[index]);\n}\n\nfunction argvStartsWith(\n  argv: readonly string[],\n  path: readonly string[]\n): boolean {\n  if (argv.length < path.length) {\n    return false;\n  }\n  return path.every((token, index) => argv[index] === token);\n}\n\nexport class CommandRegistry {\n  readonly commands: readonly RegisteredCommand[];\n\n  constructor(commands: readonly RegisteredCommand[]) {\n    const ids = new Set<string>();\n    for (const command of commands) {\n      if (ids.has(command.id)) {\n        throw new Error(`Duplicate command id \"${command.id}\".`);\n      }\n      ids.add(command.id);\n    }\n    this.commands = commands;\n  }\n\n  match(\n    argv: readonly string[]\n  ): { command: RegisteredCommand; rest: string[] } | undefined {\n    let best: { command: RegisteredCommand; length: number } | undefined;\n    for (const command of this.commands) {\n      const paths = [command.path, ...(command.aliasPaths ?? [])];\n      for (const path of paths) {\n        if (argvStartsWith(argv, path) && path.length > (best?.length ?? 0)) {\n          best = { command, length: path.length };\n        }\n      }\n      if (command.path.length === 1) {\n        const head = argv[0];\n        if (\n          head &&\n          command.aliases?.includes(head) &&\n          (best?.length ?? 0) < 1\n        ) {\n          best = { command, length: 1 };\n        }\n      }\n    }\n    if (!best) {\n      return;\n    }\n    return {\n      command: best.command,\n      rest: argv.slice(best.length),\n    };\n  }\n\n  findByLegacy(legacy: CliCommand[\"command\"]): RegisteredCommand | undefined {\n    for (const command of this.commands) {\n      if (legacyIds(command).includes(legacy)) {\n        return command;\n      }\n    }\n  }\n\n  findByPath(path: readonly string[]): RegisteredCommand | undefined {\n    return this.commands.find((command) => pathEquals(command.path, path));\n  }\n\n  secretFlagsFor(argv: readonly string[]): readonly string[] {\n    return this.match(argv)?.command.secretFlags ?? [];\n  }\n\n  ids(): string[] {\n    return this.commands.map((command) => command.id);\n  }\n}\n","export type AthenaRightKeyErrorCode =\n  | \"RIGHT_KEY_EMPTY\"\n  | \"RIGHT_KEY_INVALID_CHARACTERS\"\n  | \"RIGHT_KEY_EMPTY_SEGMENT\"\n  | \"RIGHT_KEY_MALFORMED_PATTERN\";\n\nexport class AthenaRightKeyError extends Error {\n  readonly code: AthenaRightKeyErrorCode;\n  readonly key?: string;\n\n  constructor(code: AthenaRightKeyErrorCode, message: string, key?: string) {\n    super(message);\n    this.name = \"AthenaRightKeyError\";\n    this.code = code;\n    if (key !== undefined) {\n      this.key = key;\n    }\n  }\n}\n","import { AthenaRightKeyError, type AthenaRightKeyErrorCode } 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  readonly [athenaRightKeyBrand]: true;\n};\n\nfunction brandAthenaRightKey(canonical: string): AthenaRightKey {\n  return canonical as AthenaRightKey;\n}\n\nfunction isAsciiAlphanumeric(ch: string): boolean {\n  const code = ch.charCodeAt(0);\n  return (\n    (code >= 48 && code <= 57) ||\n    (code >= 65 && code <= 90) ||\n    (code >= 97 && code <= 122)\n  );\n}\n\nfunction isIdentifierChar(ch: string): boolean {\n  return isAsciiAlphanumeric(ch) || ch === \"_\";\n}\n\n/** Unicode White_Space — same set as Rust `char::is_whitespace` / `str::trim`. */\nfunction isRustWhiteSpace(ch: string): boolean {\n  const code = ch.codePointAt(0);\n  if (code === undefined) {\n    return false;\n  }\n  return (\n    (code >= 0x09 && code <= 0x0d) ||\n    code === 0x20 ||\n    code === 0x85 ||\n    code === 0xa0 ||\n    code === 0x16_80 ||\n    (code >= 0x20_00 && code <= 0x20_0a) ||\n    code === 0x20_28 ||\n    code === 0x20_29 ||\n    code === 0x20_2f ||\n    code === 0x20_5f ||\n    code === 0x30_00\n  );\n}\n\nfunction trimRustWhiteSpace(raw: string): string {\n  let start = 0;\n  let end = raw.length;\n  while (start < end) {\n    const head = raw[start];\n    if (head === undefined || !isRustWhiteSpace(head)) {\n      break;\n    }\n    start += 1;\n  }\n  while (end > start) {\n    const tail = raw[end - 1];\n    if (tail === undefined || !isRustWhiteSpace(tail)) {\n      break;\n    }\n    end -= 1;\n  }\n  return raw.slice(start, end);\n}\n\nfunction throwKeyError(\n  code: AthenaRightKeyErrorCode,\n  message: string,\n  key?: string\n): never {\n  throw new AthenaRightKeyError(code, message, key);\n}\n\nfunction validateSegment(segment: string, key: string): void {\n  if (segment.length === 0) {\n    throwKeyError(\n      \"RIGHT_KEY_EMPTY_SEGMENT\",\n      `right key \\`${key}\\` has an empty segment`,\n      key\n    );\n  }\n  if (segment === \"*\") {\n    return;\n  }\n  if (segment.startsWith(\"{\") && segment.endsWith(\"}\")) {\n    const inner = segment.slice(1, -1);\n    if (inner.length === 0 || ![...inner].every(isIdentifierChar)) {\n      throwKeyError(\n        \"RIGHT_KEY_MALFORMED_PATTERN\",\n        `right key \\`${key}\\` is a malformed pattern`,\n        key\n      );\n    }\n    return;\n  }\n  const first = segment[0];\n  if (first === undefined) {\n    throwKeyError(\n      \"RIGHT_KEY_EMPTY_SEGMENT\",\n      `right key \\`${key}\\` has an empty segment`,\n      key\n    );\n  }\n  if (!(isAsciiAlphanumeric(first) || first === \"_\")) {\n    throwKeyError(\n      \"RIGHT_KEY_INVALID_CHARACTERS\",\n      `right key \\`${key}\\` contains invalid characters`,\n      key\n    );\n  }\n  const rest = segment.slice(1);\n  if (\n    ![...rest].every(\n      (ch) => isAsciiAlphanumeric(ch) || ch === \"_\" || ch === \"-\"\n    )\n  ) {\n    throwKeyError(\n      \"RIGHT_KEY_INVALID_CHARACTERS\",\n      `right key \\`${key}\\` contains invalid characters`,\n      key\n    );\n  }\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  const trimmed = trimRustWhiteSpace(raw);\n  if (trimmed.length === 0) {\n    throwKeyError(\"RIGHT_KEY_EMPTY\", \"right key must not be empty\");\n  }\n  if ([...trimmed].some(isRustWhiteSpace)) {\n    throwKeyError(\n      \"RIGHT_KEY_INVALID_CHARACTERS\",\n      `right key \\`${trimmed}\\` contains invalid characters`,\n      trimmed\n    );\n  }\n  if (\n    trimmed.startsWith(\".\") ||\n    trimmed.endsWith(\".\") ||\n    trimmed.includes(\"..\")\n  ) {\n    throwKeyError(\n      \"RIGHT_KEY_EMPTY_SEGMENT\",\n      `right key \\`${trimmed}\\` has an empty segment`,\n      trimmed\n    );\n  }\n  for (const segment of trimmed.split(\".\")) {\n    validateSegment(segment, trimmed);\n  }\n  return brandAthenaRightKey(trimmed);\n}\n\nexport function tryParseAthenaRightKey(\n  raw: string\n): AthenaRightKey | undefined {\n  try {\n    return parseAthenaRightKey(raw);\n  } catch (error) {\n    if (error instanceof AthenaRightKeyError) {\n      return;\n    }\n    throw error;\n  }\n}\n\nexport function athenaRightKeyString(key: AthenaRightKey): string {\n  return key;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\ninterface CliDebugStore {\n  readonly enabled: boolean;\n}\n\nconst debugContext = new AsyncLocalStorage<CliDebugStore>();\n\nexport function isDebugEnabled(): boolean {\n  const activeDebug = debugContext.getStore();\n  if (activeDebug !== undefined) {\n    return activeDebug.enabled;\n  }\n  const value = (\n    globalThis as { process?: { env?: Record<string, string | undefined> } }\n  ).process?.env?.ATHENA_JS_DEBUG;\n  return value === \"1\" || value === \"true\";\n}\n\nexport async function withCliDebugContext<T>(\n  enabled: boolean,\n  operation: () => Promise<T> | T\n): Promise<T> {\n  return debugContext.run({ enabled }, async () => operation());\n}\n","import { isDebugEnabled } from \"./debug.ts\";\nimport { resolveCliCapabilities } from \"./ui/capabilities.ts\";\nimport { paint } from \"./ui/colors.ts\";\nimport { railBar, railError } from \"./ui/rail.ts\";\nimport type { CliCapabilities } from \"./ui/types.ts\";\n\ninterface ErrorWithCode {\n  address?: unknown;\n  cause?: unknown;\n  code?: unknown;\n  errno?: unknown;\n  hostname?: unknown;\n  message?: unknown;\n  port?: unknown;\n  stack?: unknown;\n  syscall?: unknown;\n}\n\nfunction normalizeErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  if (typeof error === \"string\") {\n    return error;\n  }\n  return \"Unknown generator error.\";\n}\n\nfunction extractMissingDatabaseName(message: string): string | undefined {\n  const match = message.match(/database \"([^\"]+)\" does not exist/i);\n  return match?.[1];\n}\n\nfunction isErrorWithCode(error: unknown): error is ErrorWithCode {\n  return typeof error === \"object\" && error !== null && \"code\" in error;\n}\n\nfunction isNetworkConnectionError(error: unknown): boolean {\n  if (!isErrorWithCode(error)) {\n    return false;\n  }\n  const code = typeof error.code === \"string\" ? error.code : \"\";\n  if (\n    code === \"ECONNRESET\" ||\n    code === \"ECONNREFUSED\" ||\n    code === \"ETIMEDOUT\" ||\n    code === \"ENOTFOUND\" ||\n    code === \"EAI_AGAIN\" ||\n    code === \"EPIPE\" ||\n    code === \"EHOSTUNREACH\" ||\n    code === \"ENETUNREACH\"\n  ) {\n    return true;\n  }\n  const message = normalizeErrorMessage(error).toLowerCase();\n  return (\n    message.includes(\"econnreset\") ||\n    message.includes(\"econnrefused\") ||\n    message.includes(\"etimedout\") ||\n    message.includes(\"connection terminated\") ||\n    message.includes(\"connection refused\") ||\n    message.includes(\"timeout expired\")\n  );\n}\n\nfunction collectErrorDiagnostics(error: unknown): string[] {\n  const lines: string[] = [];\n  if (!(isErrorWithCode(error) || error instanceof Error)) {\n    return lines;\n  }\n\n  const code =\n    isErrorWithCode(error) && error.code !== undefined\n      ? String(error.code)\n      : undefined;\n  if (code) {\n    lines.push(`  code: ${code}`);\n  }\n\n  const errno =\n    isErrorWithCode(error) && error.errno !== undefined\n      ? String(error.errno)\n      : undefined;\n  if (errno) {\n    lines.push(`  errno: ${errno}`);\n  }\n\n  const syscall =\n    isErrorWithCode(error) && typeof error.syscall === \"string\"\n      ? error.syscall\n      : undefined;\n  if (syscall) {\n    lines.push(`  syscall: ${syscall}`);\n  }\n\n  const address =\n    isErrorWithCode(error) && typeof error.address === \"string\"\n      ? error.address\n      : undefined;\n  const port =\n    isErrorWithCode(error) && error.port !== undefined\n      ? String(error.port)\n      : undefined;\n  if (address || port) {\n    lines.push(`  remote: ${address ?? \"?\"}${port ? `:${port}` : \"\"}`);\n  }\n\n  const hostname =\n    isErrorWithCode(error) && typeof error.hostname === \"string\"\n      ? error.hostname\n      : undefined;\n  if (hostname) {\n    lines.push(`  hostname: ${hostname}`);\n  }\n\n  let cause: unknown =\n    error instanceof Error\n      ? error.cause\n      : isErrorWithCode(error)\n        ? error.cause\n        : undefined;\n  let depth = 0;\n  while (cause && depth < 4) {\n    const causeMessage = normalizeErrorMessage(cause);\n    const causeCode =\n      isErrorWithCode(cause) && cause.code !== undefined\n        ? String(cause.code)\n        : undefined;\n    lines.push(\n      `  cause[${depth}]: ${causeCode ? `${causeCode} — ` : \"\"}${causeMessage}`\n    );\n    cause =\n      cause instanceof Error\n        ? cause.cause\n        : isErrorWithCode(cause)\n          ? cause.cause\n          : undefined;\n    depth += 1;\n  }\n\n  return lines;\n}\n\nexport function formatGeneratorError(\n  error: unknown,\n  configPath?: string\n): Error {\n  const diagnostics = collectErrorDiagnostics(error);\n  const diagnosticsBlock =\n    diagnostics.length > 0 ? [\"\", \"Diagnostics:\", ...diagnostics] : [];\n\n  if (isErrorWithCode(error) && error.code === \"3D000\") {\n    const message = normalizeErrorMessage(error);\n    const databaseName = extractMissingDatabaseName(message);\n    const databaseLabel = databaseName\n      ? `PostgreSQL database \"${databaseName}\" does not exist`\n      : \"The target PostgreSQL database does not exist\";\n    const configLabel = configPath\n      ? `config \"${configPath}\"`\n      : \"the resolved athena config\";\n\n    return new Error(\n      [\n        `${databaseLabel} (code 3D000).`,\n        `Update provider.connectionString (and provider.database, if set) in ${configLabel}, or create that database before running generate.`,\n        ...diagnosticsBlock,\n        \"\",\n        \"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n      ].join(\"\\n\")\n    );\n  }\n\n  if (isNetworkConnectionError(error)) {\n    const message = normalizeErrorMessage(error);\n    const configLabel = configPath\n      ? `config \"${configPath}\"`\n      : \"the resolved athena config\";\n    const code =\n      isErrorWithCode(error) && typeof error.code === \"string\"\n        ? error.code\n        : \"network\";\n\n    return new Error(\n      [\n        `Schema introspection failed: database connection was reset or unreachable (${code}: ${message}).`,\n        `The CLI started correctly; generate could not finish talking to Postgres for ${configLabel}.`,\n        ...diagnosticsBlock,\n        \"\",\n        \"Check:\",\n        \"  1. DATABASE_URL / provider.connectionString is reachable from this machine (VPN, Railway proxy, firewall).\",\n        '  2. The database is running and accepts connections (try `psql \"$DATABASE_URL\" -c \"select 1\"`).',\n        \"  3. SSL settings match the host (Railway/public proxy often needs `?sslmode=require`).\",\n        \"  4. Retry once — ECONNRESET is often a transient proxy drop mid-introspection.\",\n        \"\",\n        \"For a full stack: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n      ].join(\"\\n\")\n    );\n  }\n\n  if (error instanceof Error) {\n    if (diagnostics.length === 0 && !isDebugEnabled()) {\n      return error;\n    }\n    const base = error.message || normalizeErrorMessage(error);\n    return new Error(\n      [\n        base,\n        ...diagnosticsBlock,\n        ...(isDebugEnabled() && error.stack\n          ? [\"\", \"Stack:\", error.stack]\n          : [\"\", \"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js\"]),\n      ].join(\"\\n\")\n    );\n  }\n\n  return new Error(normalizeErrorMessage(error));\n}\n\n/**\n * Print a CLI error to stderr with optional stack when `ATHENA_JS_DEBUG=1`.\n */\nexport function logCliError(\n  error: unknown,\n  errorLog: (message: string) => void = console.error,\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true })\n): void {\n  const message =\n    error instanceof Error ? error.message : normalizeErrorMessage(error);\n  const lines = message.includes(\"\\n\") ? message.split(\"\\n\") : [message];\n  const [first, ...rest] = lines;\n  errorLog(railError(first ?? message, capabilities));\n  for (const line of rest) {\n    if (line.length === 0) {\n      errorLog(railBar(\"\", capabilities));\n      continue;\n    }\n    errorLog(railBar(paint(line, \"dim\", capabilities), capabilities));\n  }\n\n  if (isDebugEnabled() && error instanceof Error && error.stack) {\n    const stackOnly = error.stack.startsWith(error.message)\n      ? error.stack.slice(error.message.length).replace(/^\\n/, \"\")\n      : error.stack;\n    if (stackOnly) {\n      errorLog(railBar(paint(stackOnly, \"dim\", capabilities), capabilities));\n    }\n  }\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","/**\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","/**\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  /**\n   * Optional validated execution payload. `sql` remains the authored source of\n   * truth for checksums, provenance, and archival.\n   */\n  executionSql?: string;\n  executionTransform?: MigrationExecutionTransform;\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  executionChecksum?: string;\n  executionId?: string;\n  executionMs: number;\n  name: string;\n  executionTransformId?: string;\n  executionTransformVersion?: string;\n  executionSql?: 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 interface MigrationExecutionTransform {\n  id: string;\n  version: string;\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  acquireLock(): Promise<void>;\n  applyMigration(migration: MigrationFile): Promise<AppliedMigrationResult>;\n  close(): Promise<void>;\n  ensureLedger(): 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  inspectCatalog(): Promise<import(\"./analysis/catalog.ts\").PhysicalCatalog>;\n  readonly kind: string;\n  listAppliedMigrations(): Promise<AppliedMigration[]>;\n  listArchivedSources?(): Promise<\n    import(\"./reconciliation/types.ts\").ArchivedMigrationSource[]\n  >;\n  releaseLock(): Promise<void>;\n  repairLedgerChecksum?(version: number, checksum: string): 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   * Explicit SQLite Local executor. When set, `runMigrations` dispatches to\n   * `SqliteLocalMigrationBackend` and never translates PostgreSQL SQL.\n   */\n  sqliteExecutor?: import(\"../sqlite-local/contracts.ts\").AthenaSqliteExecutor;\n  /**\n   * Optional authored migration files. Required when `sqliteExecutor` is set\n   * unless `migrationsDirectory` is provided for discovery.\n   */\n  sqliteMigrations?: MigrationFile[];\n  /** @deprecated Use allowDirtyMigrations */\n  allowDirty?: boolean;\n  /**\n   * Apply/repair despite uncommitted migration files or migrate config.\n   */\n  allowDirtyMigrations?: boolean;\n  /** Apply HIGH-confidence reconcile repairs (never migration SQL). */\n  applyReconcile?: boolean;\n  /**\n   * Static project configuration supplied by an embedding runtime. This\n   * allows local database commands to reuse providerless config after they\n   * resolve an explicit database URL.\n   */\n  config?: import(\"../generator/types.ts\").AthenaConfig;\n  /**\n   * When set, overrides config-resolved migrations directory\n   * (relative to cwd or absolute).\n   */\n  configPath?: string;\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 backend factory for tests. When omitted, created from config.\n   */\n  createBackend?: (\n    context: MigrationBackendContext\n  ) => Promise<MigrationBackend>;\n  cwd?: string;\n  /**\n   * Explicit direct PostgreSQL authority supplied by an embedding tool.\n   * When set, it takes precedence over the provider connection in the\n   * project configuration.\n   */\n  databaseUrl?: string;\n  /**\n   * Injectable discovery for tests.\n   */\n  discover?: (directory: string) => Promise<MigrationFile[]>;\n  /** Defaults to false. When true, never mutates the database. */\n  dryRun?: boolean;\n  /** Target for `migrate explain <file-or-version>`. */\n  explainTarget?: string;\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  json?: boolean;\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  mode?: MigrationCommandMode;\n  plain?: boolean;\n  /** Injectable Auth planner for tests. */\n  planAuthSchema?: () => Promise<\n    import(\"../auth/local/schema.ts\").AthenaAuthMigrationPlan\n  >;\n  postgresRuntime?: import(\"../postgres/owned-runtime.ts\").AthenaPostgresRuntime;\n  /** Injectable Auth repair for tests. */\n  repairAuthSchema?: (options: { dryRun: boolean }) => Promise<void>;\n  /** Fail on dynamic SQL / unverifiable constructs. */\n  strict?: boolean;\n  /** Optional presentation adapter; defaults from flags/TTY. */\n  ui?: import(\"../cli/ui/types.ts\").AthenaCliUI;\n  /** Confirm non-interactive repair. */\n  yes?: boolean;\n}\n\nexport interface MigrationBackendContext {\n  connectionString: string;\n  database?: string;\n  postgresRuntime?: import(\"../postgres/owned-runtime.ts\").AthenaPostgresRuntime;\n}\n\nexport interface MigrationRunSummary {\n  appliedCount: number;\n  authPlan?: import(\"../auth/local/schema.ts\").AthenaAuthMigrationPlan;\n  conflicts: MigrationConflict[];\n  databaseLabel: string;\n  diagnostics?: import(\"../cli/ui/types.ts\").Diagnostic[];\n  directory: string;\n  dryRun: boolean;\n  embedded?: readonly import(\"./embedded-modules-inspect.ts\").EmbeddedModuleSection[];\n  failedCount: number;\n  gitWorktree?: import(\"./git-worktree.ts\").DirtyMigrationWorktree;\n  mode: MigrationCommandMode;\n  newlyApplied: AppliedMigrationResult[];\n  pendingCount: number;\n  plan: MigrationPlan;\n  providerLabel: string;\n  reconciliation?: import(\"./reconciliation/types.ts\").ReconciliationReport;\n  semantic?: import(\"./analysis/compiler.ts\").CompileMigrationsResult;\n  skippedCount: number;\n  sourceControl?: import(\"./source-control/types.ts\").MigrationSourceControlState;\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(\n      message,\n      options?.cause === undefined ? undefined : { cause: options.cause }\n    );\n    this.name = \"MigrationError\";\n    this.code = code;\n  }\n}\n","import { MigrationError } from \"../../migrations/types.ts\";\nimport { AthenaCliError } from \"../errors.ts\";\nimport { CliExitCode } from \"../exit-code.ts\";\n\nfunction isErrorWithCode(error: unknown): error is { code?: unknown } {\n  return typeof error === \"object\" && error !== null && \"code\" in error;\n}\n\nfunction isNetworkError(error: unknown): boolean {\n  if (!isErrorWithCode(error) || typeof error.code !== \"string\") {\n    return false;\n  }\n  return (\n    error.code === \"ECONNRESET\" ||\n    error.code === \"ECONNREFUSED\" ||\n    error.code === \"ETIMEDOUT\" ||\n    error.code === \"ENOTFOUND\" ||\n    error.code === \"EAI_AGAIN\" ||\n    error.code === \"EPIPE\" ||\n    error.code === \"EHOSTUNREACH\" ||\n    error.code === \"ENETUNREACH\" ||\n    error.code === \"3D000\"\n  );\n}\n\nexport function exitCodeForError(error: unknown): CliExitCode {\n  if (error instanceof AthenaCliError) {\n    return error.exitCode;\n  }\n  if (error instanceof MigrationError) {\n    switch (error.code) {\n      case \"CONFIG\":\n      case \"PROVIDER\":\n        return CliExitCode.Configuration;\n      case \"INTEGRITY\":\n      case \"HISTORY\":\n      case \"LEDGER\":\n      case \"SEMANTIC\":\n        return CliExitCode.Conflict;\n      case \"LOCK\":\n      case \"DISCOVERY\":\n        return CliExitCode.Runtime;\n      case \"EXECUTION\":\n        return CliExitCode.Unexpected;\n      default: {\n        const _exhaustive: never = error.code;\n        return _exhaustive;\n      }\n    }\n  }\n  if (isErrorWithCode(error) && error.code === \"3D000\") {\n    return CliExitCode.Configuration;\n  }\n  if (isNetworkError(error)) {\n    return CliExitCode.Runtime;\n  }\n  if (error instanceof Error) {\n    const message = error.message;\n    if (\n      message.startsWith(\"Unknown command \") ||\n      message.startsWith(\"Unknown option \") ||\n      message.startsWith(\"Missing value for \") ||\n      message.startsWith(\"Invalid --\") ||\n      message.startsWith(\"Unexpected \")\n    ) {\n      return CliExitCode.Usage;\n    }\n  }\n  return CliExitCode.Unexpected;\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  if (!(json && \"json\" in parsed)) {\n    return parsed;\n  }\n  return { ...parsed, json: true };\n}\n\nfunction withPlain<T extends object>(parsed: T, plain: boolean): T {\n  if (!(plain && \"plain\" in parsed)) {\n    return parsed;\n  }\n  return { ...parsed, plain: true };\n}\n\nfunction withStrict<T extends object>(parsed: T, strict: boolean): T {\n  if (!(strict && \"strict\" in parsed)) {\n    return parsed;\n  }\n  return { ...parsed, strict: true };\n}\n\nfunction withConfig<T extends object>(\n  parsed: T,\n  configPath: string | undefined\n): T {\n  if (!(configPath && \"configPath\" in parsed)) {\n    return parsed;\n  }\n  return { ...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  parsed: CliCommand,\n  globals: CliGlobalFlags\n): CliCommand {\n  if (parsed.command === \"help\") {\n    return parsed;\n  }\n\n  let next = parsed;\n  const json = globals.output === \"json\";\n\n  if (next.command === \"commands\") {\n    if (json) {\n      next = { ...next, format: \"json\" };\n    } else if (globals.plain && next.format === \"full\") {\n      next = { ...next, format: \"plain\" };\n    }\n  }\n\n  next = withJson(next, json);\n  next = withPlain(next, globals.plain);\n  next = withStrict(next, globals.strict);\n  next = withConfig(next, globals.configPath);\n  return next;\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 { AthenaCliError, ensureCliErrorId } from \"../errors.ts\";\nimport { getCliExitCode } from \"../exit-code.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport { exitCodeForError } from \"./map-exit.ts\";\nimport type { ResolvedCliInput } from \"./parse.ts\";\nimport type { CommandRegistry } from \"./registry.ts\";\nimport type { CommandResult } from \"./result.ts\";\n\nexport async function dispatchRegistered(\n  _registry: CommandRegistry,\n  ctx: CommandContext,\n  resolved: ResolvedCliInput\n): Promise<void | CommandResult<unknown>> {\n  const command = resolved.registration;\n  const parsed = resolved.value as CliCommand;\n\n  const startedAt = Date.now();\n  ctx.logger.record({\n    commandId: command.id,\n    data: { parsed },\n    kind: \"command.start\",\n    level: \"info\",\n  });\n\n  try {\n    const result = await ctx.trace.span(\n      `command.${command.id}`,\n      { commandId: command.id },\n      async () => {\n        const result = await command.run(ctx, parsed);\n        if (result?.ok === false) {\n          throw new AthenaCliError({\n            code: result.code ?? \"CLI_COMMAND_FAILED\",\n            exitCode: result.exitCode,\n            message: result.message ?? `Command \"${command.id}\" failed.`,\n            metadata:\n              result.details === undefined\n                ? undefined\n                : { details: result.details },\n          });\n        }\n        return result;\n      }\n    );\n    const exitCode = result?.exitCode ?? getCliExitCode() ?? 0;\n    const outcome = exitCode === 0 ? \"success\" : \"failure\";\n    if (result?.warnings?.length) {\n      ctx.logger.record({\n        commandId: command.id,\n        data: { warnings: result.warnings },\n        kind: \"diagnostic\",\n        level: \"warn\",\n      });\n    }\n    ctx.logger.record({\n      commandId: command.id,\n      durationMs: Math.max(0, Date.now() - startedAt),\n      exitCode,\n      kind: \"command.finish\",\n      level: outcome === \"success\" ? \"info\" : \"error\",\n      outcome,\n    });\n    return result;\n  } catch (error) {\n    const errorId = ensureCliErrorId(error);\n    ctx.logger.record({\n      commandId: command.id,\n      data: { errorId },\n      durationMs: Math.max(0, Date.now() - startedAt),\n      exitCode: exitCodeForError(error),\n      kind: \"command.finish\",\n      level: \"error\",\n      outcome: \"failure\",\n    });\n    throw error;\n  }\n}\n\nexport function sessionTitleFor(\n  registration: ResolvedCliInput[\"registration\"],\n  parsed: CliCommand\n): string | undefined {\n  return registration.sessionTitle?.(parsed);\n}\n","import type { CliOutputFormat, CliVerbosity } from \"./constants.ts\";\n\nexport interface CliGlobalFlags {\n  configPath?: string;\n  cwd?: string;\n  debug: boolean;\n  noLog: boolean;\n  output: CliOutputFormat;\n  /** When set, CLI report lines are also written to this path (cwd-relative). */\n  outputPath?: string;\n  plain: boolean;\n  profile?: string;\n  strict: boolean;\n  verbosity: CliVerbosity;\n}\n\nexport interface PeeledGlobals {\n  argv: string[];\n  globals: CliGlobalFlags;\n}\n\nconst OUTPUT_VALUES = new Set<CliOutputFormat>([\"text\", \"json\", \"ndjson\"]);\n\nfunction takeValue(\n  tokens: readonly string[],\n  index: number,\n  flag: string\n): { nextIndex: number; value: string } {\n  const nextValue = tokens[index + 1];\n  if (nextValue === undefined || nextValue.startsWith(\"-\")) {\n    throw new Error(`Missing value for ${flag} option.`);\n  }\n  return { 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  const globals: CliGlobalFlags = {\n    debug: false,\n    noLog: false,\n    output: \"text\",\n    plain: false,\n    strict: false,\n    verbosity: \"normal\",\n  };\n  const tokens: string[] = [];\n\n  for (let index = 0; index < argv.length; index += 1) {\n    const token = argv[index];\n    if (token === \"--json\" || token === \"-j\") {\n      globals.output = \"json\";\n      continue;\n    }\n    if (token === \"--plain\") {\n      globals.plain = true;\n      continue;\n    }\n    if (token === \"--quiet\") {\n      globals.verbosity = \"quiet\";\n      continue;\n    }\n    if (token === \"--verbose\") {\n      globals.verbosity = \"verbose\";\n      continue;\n    }\n    if (token === \"--debug\") {\n      globals.debug = true;\n      globals.verbosity = \"debug\";\n      continue;\n    }\n    if (token === \"--no-log\") {\n      globals.noLog = true;\n      continue;\n    }\n    if (token === \"--strict\") {\n      globals.strict = true;\n      continue;\n    }\n    if (token === \"--out-file\") {\n      const taken = takeValue(argv, index, \"--out-file\");\n      globals.outputPath = taken.value;\n      index = taken.nextIndex - 1;\n      continue;\n    }\n    if (token === \"--output\" || token === \"-o\") {\n      const taken = takeValue(argv, index, \"--output\");\n      if (OUTPUT_VALUES.has(taken.value as CliOutputFormat)) {\n        globals.output = taken.value as CliOutputFormat;\n      } else {\n        globals.outputPath = taken.value;\n      }\n      index = taken.nextIndex - 1;\n      continue;\n    }\n    if (token === \"--cwd\") {\n      const taken = takeValue(argv, index, \"--cwd\");\n      globals.cwd = taken.value;\n      index = taken.nextIndex - 1;\n      continue;\n    }\n    if (token === \"--config\" || token === \"-c\") {\n      const taken = takeValue(argv, index, \"--config\");\n      globals.configPath = taken.value;\n      index = taken.nextIndex - 1;\n      continue;\n    }\n    if (token === \"--profile\") {\n      const taken = takeValue(argv, index, \"--profile\");\n      globals.profile = taken.value;\n      index = taken.nextIndex - 1;\n      continue;\n    }\n    tokens.push(token);\n  }\n\n  return { argv: tokens, globals };\n}\n","import { CLI_JSON_SCHEMA_VERSION } from \"./constants.ts\";\nimport type { CliDiagnostic } from \"./result.ts\";\n\nexport interface CliJsonErrorBody {\n  code: string;\n  details?: Record<string, unknown>;\n  hint?: string;\n  message: string;\n}\n\nexport interface CliJsonSuccess<T = unknown> {\n  command: string;\n  data: T;\n  meta?: {\n    durationMs: number;\n  };\n  ok: true;\n  schemaVersion: typeof CLI_JSON_SCHEMA_VERSION;\n  warnings?: CliDiagnostic[];\n}\n\nexport interface CliJsonFailure {\n  command: string;\n  error: CliJsonErrorBody;\n  ok: false;\n  schemaVersion: typeof CLI_JSON_SCHEMA_VERSION;\n}\n\nexport type CliJsonEnvelope<T = unknown> = CliJsonSuccess<T> | CliJsonFailure;\n\nexport function encodeCliJsonSuccess<T>(\n  command: string,\n  data: T,\n  options: { durationMs?: number; warnings?: CliDiagnostic[] } = {}\n): CliJsonSuccess<T> {\n  const envelope: CliJsonSuccess<T> = {\n    command,\n    data,\n    ok: true,\n    schemaVersion: CLI_JSON_SCHEMA_VERSION,\n  };\n  if (options.warnings && options.warnings.length > 0) {\n    envelope.warnings = options.warnings;\n  }\n  if (options.durationMs !== undefined) {\n    envelope.meta = { durationMs: options.durationMs };\n  }\n  return envelope;\n}\n\nexport function encodeCliJsonFailure(\n  command: string,\n  error: CliJsonErrorBody\n): CliJsonFailure {\n  return {\n    command,\n    error,\n    ok: false,\n    schemaVersion: CLI_JSON_SCHEMA_VERSION,\n  };\n}\n\nexport function stringifyCliJson(envelope: CliJsonEnvelope): string {\n  return JSON.stringify(envelope, null, 2);\n}\n","const REDACTION_MARKER = \"***\";\nconst MAX_STRING_LENGTH = 4096;\nconst MAX_DEPTH = 6;\nconst MAX_ENTRIES = 50;\nconst MAX_ARRAY_ITEMS = 50;\nconst MAX_EVENT_BYTES = 64 * 1024;\n\nconst SECRET_KEY =\n  /(?:pass(?:word|phrase)|secret|client[_-]?secret|access[_-]?token|refresh[_-]?token|session[_-]?token|(?:api|admin)[_-]?key|athena[_-]?(?:key[_-]?12|p12[_-]?key)|connection[_-]?string|database[_-]?url|authorization|proxy[_-]?authorization|cookie|set[_-]?cookie|private[_-]?key|signing[_-]?key|bridgeCode|bridge[_-]?code)/i;\nconst RAW_ARGV_KEY = /^raw[-_]?argv$/i;\nconst URL_PATTERN =\n  /\\b(?:postgres(?:ql)?|https?|rediss?|redis|smtp|mysql):\\/\\/[^\\s\"'<>]+/gi;\nconst SENSITIVE_QUERY_KEY =\n  /(?:pass(?:word|wd)?|secret|token|access[_-]?token|refresh[_-]?token|api[_-]?key|client[_-]?secret|authorization|auth|signature|sig|code)/i;\nconst PEM_PRIVATE_KEY =\n  /-----BEGIN (?:[A-Z0-9 ]+ )?PRIVATE KEY-----[\\s\\S]*?-----END (?:[A-Z0-9 ]+ )?PRIVATE KEY-----/g;\nconst JWT_PATTERN =\n  /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\b/g;\nconst ATHENA_KEY_PATTERN =\n  /\\bath_(?:live|test|admin|secret|key)_[A-Za-z0-9_-]{16,}\\b/gi;\nconst ATHENA_BRIDGE_CODE_PATTERN = /\\bath_brc_[A-Za-z0-9_-]{16,}\\b/gi;\nconst UNLABELED_CANDIDATE_PATTERN =\n  /(?<![A-Za-z0-9_-])[A-Za-z0-9_-]{20,128}(?![A-Za-z0-9_-])/g;\nconst ATHENA_COMPOSITE_KEY_PATTERN =\n  /\\bath_[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{12,}\\b/gi;\nconst PROVIDER_TOKEN_PATTERN =\n  /\\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9_-]{16,}\\b|\\b(?:live|test)_[A-Za-z0-9_-]{20,}\\b/gi;\nconst ATHENA_ENV_KEY_PATTERN =\n  /(\\bATHENA_(?:KEY_12|P12_KEY|API_KEY|GATEWAY_API_KEY)\\s*[=:]\\s*)[^\\s,;]+/gi;\nconst DEFAULT_SECRET_FLAGS = [\n  \"--access-token\",\n  \"--admin-key\",\n  \"--api-key\",\n  \"--auth-token\",\n  \"--authorization\",\n  \"--bridge-code\",\n  \"--client-secret\",\n  \"--client-key\",\n  \"--credential-file\",\n  \"--connection-string\",\n  \"--cookie\",\n  \"--credential\",\n  \"--credentials\",\n  \"--database-password\",\n  \"--database-url\",\n  \"--db-password\",\n  \"--encryption-key\",\n  \"--key-file\",\n  \"--key\",\n  \"--mollie-key\",\n  \"--password\",\n  \"--passphrase\",\n  \"--p12-key\",\n  \"--private-key\",\n  \"--private-key-file\",\n  \"--proxy-authorization\",\n  \"--refresh-token\",\n  \"--secret\",\n  \"--secret-key\",\n  \"--session-token\",\n  \"--set-cookie\",\n  \"--signing-secret\",\n  \"--signing-key\",\n  \"--token\",\n  \"--webhook-secret\",\n  \"--webhook-signing-secret\",\n] as const;\nconst DEFAULT_OPTION_FLAGS = new Set([\n  \"--admin-key\",\n  \"--allow-dirty\",\n  \"--allow-dirty-migrations\",\n  \"--apply\",\n  \"--action\",\n  \"--classify-only\",\n  \"--bytes\",\n  \"--color\",\n  \"--connection\",\n  \"--config\",\n  \"--cwd\",\n  \"--customer\",\n  \"--debug\",\n  \"--description\",\n  \"--dry-run\",\n  \"--env-file\",\n  \"--env-key\",\n  \"--errors\",\n  \"--expires-at\",\n  \"--file\",\n  \"--force\",\n  \"--format\",\n  \"--from\",\n  \"--groups\",\n  \"--help\",\n  \"--include-latest-log\",\n  \"--include-ambiguous\",\n  \"--id\",\n  \"--json\",\n  \"--limit\",\n  \"--migration\",\n  \"--mode\",\n  \"--name\",\n  \"--no-color\",\n  \"--no-discover-schemas\",\n  \"--no-log\",\n  \"--no-write-config\",\n  \"--older-than\",\n  \"--out\",\n  \"--out-file\",\n  \"--output\",\n  \"--policy-impact\",\n  \"--plain\",\n  \"--prefix\",\n  \"--profile\",\n  \"--provider\",\n  \"--resource\",\n  \"--rights\",\n  \"--skip-runtime\",\n  \"--short\",\n  \"--strict\",\n  \"--subject\",\n  \"--url\",\n  \"--verbose\",\n  \"--yes\",\n  \"--write\",\n  \"--write-config\",\n  \"--row\",\n  \"--cursor\",\n  \"--max-pages\",\n  \"--max-customers\",\n  \"--max-duration\",\n  \"-C\",\n  \"-c\",\n  \"-f\",\n  \"-h\",\n  \"-j\",\n  \"-o\",\n  \"-q\",\n  \"-v\",\n  \"-y\",\n]);\n\nexport interface ArgvSanitizationPolicy {\n  readonly optionFlags?: readonly string[];\n  readonly secretFlags?: readonly string[];\n}\n\nfunction normalizeFlag(value: string): string {\n  return value.trim().toLowerCase().replace(/_/g, \"-\");\n}\n\nfunction flagPart(token: string): string {\n  const equals = token.indexOf(\"=\");\n  return equals === -1 ? token : token.slice(0, equals);\n}\n\nfunction isRecognizedOption(\n  token: string,\n  optionFlags: ReadonlySet<string>\n): boolean {\n  if (token === \"--\") {\n    return true;\n  }\n  return optionFlags.has(normalizeFlag(flagPart(token)));\n}\n\nfunction isSafeUrlToken(token: string): boolean {\n  const match =\n    /^(.*?=)?((?:postgres(?:ql)?|https?|rediss?|redis|smtp|mysql):\\/\\/[^\\s\"'<>]+)$/i.exec(\n      token\n    );\n  if (!match) {\n    return false;\n  }\n  try {\n    const url = new URL(match[2]);\n    return (\n      url.password.length === 0 &&\n      !Array.from(url.searchParams.keys()).some((key) =>\n        SENSITIVE_QUERY_KEY.test(key)\n      ) &&\n      !(url.hash && SENSITIVE_QUERY_KEY.test(url.hash))\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction redactCliToken(token: string): string {\n  if (isSafeUrlToken(token)) {\n    return token;\n  }\n  return redactSecrets(token).replaceAll(REDACTION_MARKER, \"[REDACTED]\");\n}\n\n/**\n * Sanitize command-line arguments while preserving their diagnostic shape.\n *\n * Secret options are handled semantically so a short, low-entropy, or\n * punctuation-prefixed value cannot bypass generic text redaction.\n */\nexport function sanitizeCliArgv(\n  argv: readonly string[],\n  policy: ArgvSanitizationPolicy = {}\n): string[] {\n  const secretFlags = new Set(\n    (policy.secretFlags ?? DEFAULT_SECRET_FLAGS).map(normalizeFlag)\n  );\n  const optionFlags = new Set([\n    ...DEFAULT_OPTION_FLAGS,\n    ...(policy.optionFlags ?? []).map(normalizeFlag),\n  ]);\n  const sanitized: string[] = [];\n\n  for (let index = 0; index < argv.length; index += 1) {\n    const token = String(argv[index]);\n    const flag = normalizeFlag(flagPart(token));\n    if (!secretFlags.has(flag)) {\n      sanitized.push(redactCliToken(token));\n      continue;\n    }\n\n    const equals = token.indexOf(\"=\");\n    if (equals !== -1) {\n      sanitized.push(`${token.slice(0, equals)}=[REDACTED]`);\n      continue;\n    }\n\n    sanitized.push(token);\n    const next = argv[index + 1];\n    if (next !== undefined && !isRecognizedOption(String(next), optionFlags)) {\n      sanitized.push(\"[REDACTED]\");\n      index += 1;\n    }\n  }\n\n  return sanitized;\n}\n\nfunction capString(value: string): string {\n  if (value.length <= MAX_STRING_LENGTH) {\n    return value;\n  }\n  return `${value.slice(0, MAX_STRING_LENGTH)}…`;\n}\n\nfunction redactUrlCandidate(candidate: string): string {\n  const trailing = candidate.match(/[.,;:!?)}\\]]+$/)?.[0] ?? \"\";\n  const core = trailing ? candidate.slice(0, -trailing.length) : candidate;\n  try {\n    const url = new URL(core);\n    if (url.password) {\n      url.password = REDACTION_MARKER;\n    }\n    for (const key of Array.from(url.searchParams.keys())) {\n      if (SENSITIVE_QUERY_KEY.test(key)) {\n        url.searchParams.set(key, REDACTION_MARKER);\n      }\n    }\n    if (url.hash && SENSITIVE_QUERY_KEY.test(url.hash)) {\n      url.hash = `#${REDACTION_MARKER}`;\n    }\n    return `${url.toString()}${trailing}`;\n  } catch {\n    return candidate;\n  }\n}\n\nfunction redactKeyValueSecrets(input: string): string {\n  return input\n    .replace(\n      /(\\b(?:authorization|proxy[-_]?authorization)\\s*:\\s*(?:bearer|basic)\\s+)[^\\s,;]+/gi,\n      \"$1***\"\n    )\n    .replace(/(\\b(?:cookie|set[-_]?cookie)\\s*:\\s*)[^\\r\\n]+/gi, \"$1***\")\n    .replace(\n      /(\\b(?:password|passphrase|secret|client[-_]?secret|access[-_]?token|refresh[-_]?token|session[-_]?token|api[-_]?key|admin[-_]?key|cookie|set[-_]?cookie|bridge[-_]?code)\\s*[=:]\\s*)[^\\s,;]+/gi,\n      \"$1***\"\n    );\n}\n\nfunction isLikelyGeneratedSecret(value: string): boolean {\n  if (/^[0-9a-f]{32,64}$/i.test(value) || /^[0-9a-f-]{36}$/.test(value)) {\n    return false;\n  }\n  if (/^[A-Z][A-Z0-9_-]*$/.test(value)) {\n    return false;\n  }\n  const unique = new Set(value).size;\n  if (unique < 16) {\n    return false;\n  }\n  const frequencies = new Map<string, number>();\n  for (const character of value) {\n    frequencies.set(character, (frequencies.get(character) ?? 0) + 1);\n  }\n  const entropy = [...frequencies.values()].reduce((total, count) => {\n    const probability = count / value.length;\n    return total - probability * Math.log2(probability);\n  }, 0);\n  return entropy >= 4.2;\n}\n\nfunction redactUnlabeledSecrets(input: string): string {\n  return input.replace(UNLABELED_CANDIDATE_PATTERN, (candidate) =>\n    isLikelyGeneratedSecret(candidate) ? REDACTION_MARKER : candidate\n  );\n}\n\n/**\n * Redact secrets from free-form text. This is the single persistent-log\n * string redaction path; callers should not add command-specific expressions.\n */\nexport function redactSecrets(input: string): string {\n  let output = input;\n  output = output.replace(PEM_PRIVATE_KEY, REDACTION_MARKER);\n  output = output.replace(URL_PATTERN, redactUrlCandidate);\n  output = output.replace(JWT_PATTERN, REDACTION_MARKER);\n  output = output.replace(ATHENA_KEY_PATTERN, REDACTION_MARKER);\n  output = output.replace(ATHENA_BRIDGE_CODE_PATTERN, REDACTION_MARKER);\n  output = output.replace(ATHENA_COMPOSITE_KEY_PATTERN, REDACTION_MARKER);\n  output = output.replace(PROVIDER_TOKEN_PATTERN, REDACTION_MARKER);\n  output = output.replace(ATHENA_ENV_KEY_PATTERN, \"$1***\");\n  output = redactKeyValueSecrets(output);\n  return redactUnlabeledSecrets(output);\n}\n\nfunction isBuffer(value: object): value is { length: number } {\n  return typeof Buffer !== \"undefined\" && Buffer.isBuffer(value);\n}\n\nfunction isTypedArray(value: object): value is ArrayBufferView {\n  return ArrayBuffer.isView(value) && !(value instanceof DataView);\n}\n\nfunction redactObject(\n  value: object,\n  depth: number,\n  seen: WeakSet<object>\n): unknown {\n  if (seen.has(value)) {\n    return \"[Circular]\";\n  }\n  if (depth >= MAX_DEPTH) {\n    return \"[Truncated]\";\n  }\n  seen.add(value);\n\n  if (value instanceof Error) {\n    const error: Record<string, unknown> = {\n      message: redactSecrets(value.message),\n      name: value.name,\n    };\n    if (value.stack) {\n      error.stack = redactSecrets(value.stack);\n    }\n    if (\"code\" in value && typeof value.code === \"string\") {\n      error.code = value.code;\n    }\n    if (value.cause !== undefined) {\n      error.cause = redactObjectValue(value.cause, depth + 1, seen);\n    }\n    if (value instanceof AggregateError) {\n      error.errors = value.errors\n        .slice(0, MAX_ARRAY_ITEMS)\n        .map((item) => redactObjectValue(item, depth + 1, seen));\n    }\n    for (const key of Object.keys(value).slice(0, MAX_ENTRIES)) {\n      if (!(key in error)) {\n        error[key] = redactObjectValue(\n          value[key as keyof typeof value],\n          depth + 1,\n          seen\n        );\n      }\n    }\n    return error;\n  }\n\n  if (value instanceof URL) {\n    return redactUrlCandidate(value.toString());\n  }\n  if (isBuffer(value)) {\n    return `[Buffer ${value.length} bytes]`;\n  }\n  if (isTypedArray(value)) {\n    return `[${value.constructor.name} ${value.byteLength} bytes]`;\n  }\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n\n  const out: Record<string, unknown> = {};\n  for (const [key, nested] of Object.entries(value).slice(0, MAX_ENTRIES)) {\n    if (RAW_ARGV_KEY.test(key)) {\n      continue;\n    }\n    if (SECRET_KEY.test(key)) {\n      if (\n        /(?:connection|string|database|url)/i.test(key) &&\n        typeof nested === \"string\"\n      ) {\n        out[key] = redactSecrets(nested);\n      } else {\n        out[key] = REDACTION_MARKER;\n      }\n      continue;\n    }\n    out[key] = redactObjectValue(nested, depth + 1, seen);\n  }\n  return out;\n}\n\nfunction redactObjectValue(\n  value: unknown,\n  depth: number,\n  seen: WeakSet<object>\n): unknown {\n  if (typeof value === \"string\") {\n    return capString(redactSecrets(value));\n  }\n  if (typeof value === \"bigint\") {\n    return `${value.toString()}n`;\n  }\n  if (typeof value === \"function\") {\n    return `[Function ${value.name || \"anonymous\"}]`;\n  }\n  if (typeof value === \"symbol\") {\n    return value.toString();\n  }\n  if (value === undefined || value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    if (depth >= MAX_DEPTH) {\n      return \"[Truncated]\";\n    }\n    return value\n      .slice(0, MAX_ARRAY_ITEMS)\n      .map((item) => redactObjectValue(item, depth + 1, seen));\n  }\n  return redactObject(value, depth, seen);\n}\n\nexport function redactValue(value: unknown): unknown {\n  return redactObjectValue(value, 0, new WeakSet<object>());\n}\n\nexport function sanitizeCliError(\n  error: unknown,\n  options: { includeStack?: boolean; maxDepth?: number } = {}\n): {\n  name: string;\n  code?: string;\n  message: string;\n  stack?: string;\n  cause?: ReturnType<typeof sanitizeCliError>;\n  metadata?: Record<string, unknown>;\n} {\n  const maxDepth = options.maxDepth ?? 4;\n  const seen = new WeakSet<object>();\n  const visit = (\n    value: unknown,\n    depth: number\n  ): ReturnType<typeof sanitizeCliError> => {\n    if (value instanceof Error) {\n      const result: ReturnType<typeof sanitizeCliError> = {\n        message: redactSecrets(value.message || \"Unknown error.\"),\n        name: value.name || \"Error\",\n      };\n      if (\"code\" in value && typeof value.code === \"string\") {\n        result.code = value.code;\n      }\n      if (options.includeStack && value.stack) {\n        result.stack = redactSecrets(value.stack);\n      }\n      if (value.cause !== undefined && depth < maxDepth) {\n        result.cause = visit(value.cause, depth + 1);\n      }\n      if (value instanceof AggregateError) {\n        result.metadata = {\n          errors: value.errors\n            .slice(0, MAX_ARRAY_ITEMS)\n            .map((item) => redactObjectValue(item, 0, seen)),\n        };\n      }\n      const metadata: Record<string, unknown> = {};\n      for (const key of Object.keys(value).slice(0, MAX_ENTRIES)) {\n        if (key !== \"cause\" && key !== \"message\" && key !== \"stack\") {\n          metadata[key] = redactObjectValue(\n            value[key as keyof typeof value],\n            0,\n            seen\n          );\n        }\n      }\n      if (Object.keys(metadata).length > 0) {\n        result.metadata = { ...result.metadata, ...metadata };\n      }\n      return result;\n    }\n    return {\n      message: redactSecrets(typeof value === \"string\" ? value : String(value)),\n      name: \"Error\",\n    };\n  };\n  return visit(error, 0);\n}\n\nexport function serializeCliLogEvent(event: unknown): string {\n  const sanitized = redactValue(event) as Record<string, unknown>;\n  let json = redactSecrets(JSON.stringify(sanitized));\n  if (Buffer.byteLength(json, \"utf8\") > MAX_EVENT_BYTES) {\n    const minimal = redactValue({\n      data: { truncated: true },\n      invocationId: sanitized.invocationId,\n      kind: sanitized.kind,\n      level: sanitized.level,\n      message: sanitized.message,\n      schemaVersion: 1,\n      sequence: typeof sanitized.sequence === \"number\" ? sanitized.sequence : 0,\n      timestamp: sanitized.timestamp,\n      traceId: sanitized.traceId,\n      truncated: true,\n    });\n    json = redactSecrets(JSON.stringify(minimal));\n  }\n  return json;\n}\n","import { argvWantsHelp } from \"../argv.ts\";\nimport {\n  type CatalogHelpTopic,\n  catalogHelpTopic,\n} from \"../commands-catalog.ts\";\nimport { sanitizeCliArgv } from \"../logging/redact.ts\";\nimport { unknownCommandError } from \"../parse-helpers.ts\";\nimport type { CliCommand } from \"../types.ts\";\nimport type { RegisteredCommand } from \"./define-command.ts\";\nimport type { CommandRegistry } from \"./registry.ts\";\n\nexport interface ResolvedCliInput<T = CliCommand> {\n  registration: RegisteredCommand;\n  sanitizedArgv: string[];\n  value: T;\n}\n\nfunction helpTopicFromPath(path: readonly string[]): CatalogHelpTopic {\n  const head = path[0];\n  if (head == null || head === \"\") {\n    return \"root\";\n  }\n  return catalogHelpTopic(head, path.slice(1)) ?? \"root\";\n}\n\nfunction helpCommand(topic: CatalogHelpTopic): CliCommand {\n  return { command: \"help\", topic };\n}\n\nexport function parseRegisteredCommandResolved(\n  registry: CommandRegistry,\n  argv: readonly string[],\n  sanitizedArgv: string[] = sanitizeCliArgv(argv)\n): ResolvedCliInput {\n  const helpRegistration = registry.findByPath([\"help\"]);\n  if (!helpRegistration) {\n    throw new Error('The command registry must define a \"help\" command.');\n  }\n  if (argv.length === 0) {\n    return {\n      registration: helpRegistration,\n      sanitizedArgv,\n      value: helpCommand(\"root\"),\n    };\n  }\n\n  if (argv[0] === \"--help\" || argv[0] === \"-h\") {\n    const matched = argv[1] ? registry.match(argv.slice(1)) : undefined;\n    if (matched) {\n      return {\n        registration: helpRegistration,\n        sanitizedArgv,\n        value: helpCommand(helpTopicFromPath(matched.command.path)),\n      };\n    }\n    return {\n      registration: helpRegistration,\n      sanitizedArgv,\n      value: helpCommand(\"root\"),\n    };\n  }\n\n  const matched = registry.match(argv);\n  if (!matched) {\n    if (argvWantsHelp(argv)) {\n      return {\n        registration: helpRegistration,\n        sanitizedArgv,\n        value: helpCommand(helpTopicFromPath(argv)),\n      };\n    }\n    throw unknownCommandError(argv[0] ?? \"\");\n  }\n\n  if (argvWantsHelp(argv) && matched.command.path[0] !== \"help\") {\n    return {\n      registration: helpRegistration,\n      sanitizedArgv,\n      value: helpCommand(helpTopicFromPath(matched.command.path)),\n    };\n  }\n\n  const value = matched.command.parse(matched.rest);\n  if (value.command === \"help\" && matched.command.path[0] !== \"help\") {\n    return {\n      registration: helpRegistration,\n      sanitizedArgv,\n      value,\n    };\n  }\n\n  return {\n    registration: matched.command,\n    sanitizedArgv,\n    value,\n  };\n}\n\nexport function parseRegisteredCommand(\n  registry: CommandRegistry,\n  argv: readonly string[]\n): CliCommand {\n  return parseRegisteredCommandResolved(registry, argv).value;\n}\n","export { applyGlobalsToCommand } from \"./apply-globals.ts\";\nexport {\n  CLI_JSON_SCHEMA_VERSION,\n  type CliOutputFormat,\n  type CliVerbosity,\n} from \"./constants.ts\";\nexport { defineCommand, type RegisteredCommand } from \"./define-command.ts\";\nexport { dispatchRegistered, sessionTitleFor } from \"./execute.ts\";\nexport {\n  type CliGlobalFlags,\n  peelGlobalFlags,\n} from \"./globals.ts\";\nexport {\n  type CliJsonEnvelope,\n  encodeCliJsonFailure,\n  encodeCliJsonSuccess,\n  stringifyCliJson,\n} from \"./json-protocol.ts\";\nexport { exitCodeForError } from \"./map-exit.ts\";\nexport {\n  booleanOption,\n  enumOption,\n  numberOption,\n  pathOption,\n  stringOption,\n} from \"./options.ts\";\nexport {\n  parseRegisteredCommand,\n  parseRegisteredCommandResolved,\n  type ResolvedCliInput,\n} 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  | \"public\"\n  | \"optional-session\"\n  | \"protocol\"\n  | \"session\"\n  | \"admin\";\n\nexport type AthenaAuthOperationCapability =\n  | \"accounts\"\n  | \"admin\"\n  | \"apiKeys\"\n  | \"email\"\n  | \"health\"\n  | \"invitations\"\n  | \"jwt\"\n  | \"oauthAuthorizationServer\"\n  | \"oidc\"\n  | \"organizations\"\n  | \"passkeys\"\n  | \"password\"\n  | \"sessions\"\n  | \"social\"\n  | \"tokens\"\n  | \"twoFactor\";\n\nexport interface AthenaAuthOperationDefinition {\n  auth: AthenaAuthOperationAuth;\n  capability: AthenaAuthOperationCapability | string;\n  domainEvent?: AthenaAuthDomainEvent;\n  embedded: AthenaAuthRuntimeSupport;\n  id: string;\n  method: string;\n  mutation: boolean;\n  nonportable?: boolean;\n  path: string;\n  rust: AthenaAuthRuntimeSupport;\n}\n\nexport function operationKey(\n  operation: Pick<AthenaAuthOperationDefinition, \"method\" | \"path\">\n): string {\n  return `${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  operations: readonly AthenaAuthOperationDefinition[]\n): string[] {\n  return operations\n    .filter(\n      (operation) =>\n        operation.rust === \"supported\" &&\n        operation.embedded === \"unsupported\" &&\n        operation.nonportable !== true\n    )\n    .map(operationKey)\n    .sort();\n}\n\nexport function operationsForCapability(\n  operations: readonly AthenaAuthOperationDefinition[],\n  capability: string\n): AthenaAuthOperationDefinition[] {\n  return 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  operations: readonly AthenaAuthOperationDefinition[]\n): {\n  passkeys: boolean;\n  socialProvidersAdvertised: boolean;\n} {\n  const portable = (capability: string) =>\n    operations.filter(\n      (operation) =>\n        operation.capability === capability &&\n        operation.rust === \"supported\" &&\n        operation.nonportable !== true\n    );\n\n  const passkeyOps = portable(\"passkeys\");\n  const socialOps = portable(\"social\");\n\n  return {\n    passkeys:\n      passkeyOps.length > 0 &&\n      passkeyOps.every((operation) => operation.embedded === \"supported\"),\n    socialProvidersAdvertised:\n      socialOps.length > 0 &&\n      socialOps.every((operation) => operation.embedded === \"supported\"),\n  };\n}\n","/**\n * Browser-safe Embedded Auth schema generation.\n *\n * SQL catalog stays in `migrations.ts` (Node / CLI). This number must equal\n * the maximum `version` in that catalog; `migrations.ts` fail-closes on mismatch.\n */\nexport const ATHENA_AUTH_SCHEMA_GENERATION = 45;\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  AthenaAuthOperationAuth,\n  AthenaAuthOperationCapability,\n  AthenaAuthOperationDefinition,\n  AthenaAuthRuntimeSupport,\n} from \"./operations.ts\";\nexport {\n  deriveEmbeddedCapabilityAdvertisement,\n  listMissingEmbeddedOperations,\n  operationKey,\n  operationsForCapability,\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  \"athena-auth.session_token\",\n  \"athena-auth-session_token\",\n  \"better-auth.session_token\",\n  \"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. The number is browser-safe; the SQL\n * catalog that must match it lives in `schema/migrations.ts` (Node / CLI).\n */\nexport { ATHENA_AUTH_SCHEMA_GENERATION } from \"../schema/generation.ts\";\nexport const ATHENA_AUTH_MIN_SUPPORTED_SCHEMA_GENERATION = 1;\n\nexport const ATHENA_AUTH_SCHEMA_NAME = \"athena\";\n\nexport const ATHENA_AUTH_TABLES = {\n  accounts: \"athena.accounts\",\n  apiKeys: \"athena.api_keys\",\n  authBridgeCodes: \"athena.auth_bridge_codes\",\n  authorizationAuditLog: \"athena.authorization_audit_log\",\n  authorizationMemberRoles: \"athena.authorization_member_roles\",\n  authorizationRevisions: \"athena.authorization_revisions\",\n  authorizationRights: \"athena.authorization_rights\",\n  authorizationRoleRights: \"athena.authorization_role_rights\",\n  authorizationRoles: \"athena.authorization_roles\",\n  authorizationUserRoles: \"athena.authorization_user_roles\",\n  authSigningKeys: \"athena.auth_signing_keys\",\n  emailEventTypes: \"athena.email_event_types\",\n  emailSendFailures: \"athena.email_send_failures\",\n  emails: \"athena.emails\",\n  emailTemplates: \"athena.email_templates\",\n  invitation: \"athena.invitation\",\n  member: \"athena.member\",\n  notificationPreferences: \"athena.notification_preferences\",\n  oauthAuthorizationCodes: \"athena.oauth_authorization_codes\",\n  oauthAuthorizationGrants: \"athena.oauth_authorization_grants\",\n  oauthAuthorizationRequests: \"athena.oauth_authorization_requests\",\n  oauthClients: \"athena.oauth_clients\",\n  oauthRefreshTokens: \"athena.oauth_refresh_tokens\",\n  oauthRevokedAccessTokens: \"athena.oauth_revoked_access_tokens\",\n  oauthTransactions: \"athena.oauth_transactions\",\n  organization: \"athena.organization\",\n  passkeyRegistrationTransactions: \"athena.passkey_registration_transactions\",\n  passkeys: \"athena.passkeys\",\n  runtimeKey: \"athena.runtime_key\",\n  schemaMigrations: \"athena.auth_schema_migrations\",\n  sessions: \"athena.sessions\",\n  twoFactor: \"athena.two_factor\",\n  users: \"athena.users\",\n  verifications: \"athena.verifications\",\n} as const;\n\nexport const ATHENA_AUTH_CORE_ROUTES = {\n  changePassword: { method: \"POST\", path: \"/change-password\" },\n  deleteUser: { method: \"POST\", path: \"/delete-user\" },\n  forgetPassword: { method: \"POST\", path: \"/forget-password\" },\n  getSession: { methods: [\"GET\", \"POST\"] as const, path: \"/get-session\" },\n  health: { method: \"GET\", path: \"/health\" },\n  listAccounts: { method: \"GET\", path: \"/list-accounts\" },\n  listSessions: { method: \"GET\", path: \"/list-sessions\" },\n  ok: { method: \"GET\", path: \"/ok\" },\n  organizationAcceptInvitation: {\n    method: \"POST\",\n    path: \"/organization/accept-invitation\",\n  },\n  organizationAddMember: {\n    method: \"POST\",\n    path: \"/organization/add-member\",\n  },\n  organizationCancelInvitation: {\n    method: \"POST\",\n    path: \"/organization/cancel-invitation\",\n  },\n  organizationCreate: { method: \"POST\", path: \"/organization/create\" },\n  organizationDelete: { method: \"POST\", path: \"/organization/delete\" },\n  organizationGet: {\n    method: \"GET\",\n    path: \"/organization/get-full-organization\",\n  },\n  organizationInviteMember: {\n    method: \"POST\",\n    path: \"/organization/invite-member\",\n  },\n  organizationInviteReminder: {\n    method: \"POST\",\n    path: \"/organization/invite-member-reminder\",\n  },\n  organizationLeave: { method: \"POST\", path: \"/organization/leave\" },\n  organizationList: { method: \"GET\", path: \"/organization/list\" },\n  organizationListInvitations: {\n    method: \"GET\",\n    path: \"/organization/list-invitations\",\n  },\n  organizationListMembers: {\n    method: \"GET\",\n    path: \"/organization/list-members\",\n  },\n  organizationRemoveMember: {\n    method: \"POST\",\n    path: \"/organization/remove-member\",\n  },\n  organizationSetActive: { method: \"POST\", path: \"/organization/set-active\" },\n  organizationUpdate: { method: \"POST\", path: \"/organization/update\" },\n  organizationUpdateMemberRole: {\n    method: \"POST\",\n    path: \"/organization/update-member-role\",\n  },\n  resetPassword: { method: \"POST\", path: \"/reset-password\" },\n  revokeOtherSessions: { method: \"POST\", path: \"/revoke-other-sessions\" },\n  revokeSession: { method: \"POST\", path: \"/revoke-session\" },\n  revokeSessions: { method: \"POST\", path: \"/revoke-sessions\" },\n  sendSecurityAlert: { method: \"POST\", path: \"/send-security-alert\" },\n  sendSignInEmail: { method: \"POST\", path: \"/send-sign-in-email\" },\n  signInEmail: { method: \"POST\", path: \"/sign-in/email\" },\n  signInUsername: { method: \"POST\", path: \"/sign-in/username\" },\n  signOut: { method: \"POST\", path: \"/sign-out\" },\n  signUpEmail: { method: \"POST\", path: \"/sign-up/email\" },\n  updateUser: { method: \"POST\", path: \"/update-user\" },\n} as const;\n\nexport type AthenaAuthHttpMethod =\n  | \"GET\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"HEAD\"\n  | \"OPTIONS\";\n\nexport interface AthenaAuthErrorBody {\n  code?: string;\n  message: string;\n  traceId: string;\n  version: string;\n}\n\nexport interface AthenaAuthContractUser {\n  banExpires?: string | null;\n  banned?: boolean;\n  banReason?: string | null;\n  createdAt: string;\n  displayUsername?: string | null;\n  email?: string | null;\n  emailVerified: boolean;\n  id: string;\n  image?: string | null;\n  lastSignInAt?: string | null;\n  name?: string | null;\n  role?: string | null;\n  twoFactorEnabled?: boolean;\n  updatedAt: string;\n  username?: string | null;\n}\n\nexport interface AthenaAuthContractSession {\n  activeOrganizationId?: string | null;\n  createdAt: string;\n  expiresAt: string;\n  id: string;\n  impersonatedBy?: string | null;\n  ipAddress?: string | null;\n  token: string;\n  updatedAt: string;\n  userAgent?: string | null;\n  userId: string;\n}\n\nexport interface AthenaAuthArgon2Params {\n  memoryCost: number;\n  parallelism: number;\n  timeCost: number;\n}\n\n/** Rust `Argon2Config::default()` — 1 MiB, 2 iterations, 1 lane, Argon2id v19. */\nexport const ATHENA_AUTH_DEFAULT_ARGON2: AthenaAuthArgon2Params = {\n  memoryCost: 1024,\n  parallelism: 1,\n  timeCost: 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 =\n  ATHENA_AUTH_INIT_ADVISORY_LOCK;\n/** JWT signing-key activation (paired with issuer hash). */\nexport const ATHENA_AUTH_SIGNING_KEY_ADVISORY_LOCK = 872_046_033;\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    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"DELETE\",\n    \"mutation\": true,\n    \"path\": \"/authorization/roles/{id}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"jwt\",\n    \"embedded\": \"supported\",\n    \"id\": \"jwt.jwks\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/.well-known/jwks.json\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"protocol\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.metadata\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/.well-known/oauth-authorization-server\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"jwt\",\n    \"embedded\": \"supported\",\n    \"id\": \"jwt.discovery\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/.well-known/openid-configuration\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.relatedOrigins\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/.well-known/webauthn\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailEventType.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email-event-type/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailFailure.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email-failure/get\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailFailure.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email-failure/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email-template/get\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email-template/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.email.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email/get\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.email.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/admin/email/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/api-key/get\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/api-key/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.assignments.members.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/assignments/members\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.assignments.users.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/assignments/users\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.audit\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/audit\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.grant.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/grants\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.rights\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/rights\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/roles\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/roles/{id}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.snapshot\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/authorization/snapshot\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"social\",\n    \"embedded\": \"supported\",\n    \"id\": \"social.callback\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/callback/{provider}\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.email.verify.change\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/change-email/verify\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.delete.verify\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/delete-user/verify\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"email.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/email/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/get-session\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"health\",\n    \"embedded\": \"supported\",\n    \"id\": \"health.health\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/health\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"accounts\",\n    \"embedded\": \"supported\",\n    \"id\": \"account.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/list-accounts\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/list-sessions\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"protocol\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.authorization.request\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/oauth/authorize\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"health\",\n    \"embedded\": \"supported\",\n    \"id\": \"health.ok\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/ok\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"member.active\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/get-active-member\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/get-full-organization\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.get\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/get-invitation\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/list\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/list-invitations\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"member.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/list-members\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.listUser\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/organization/list-user-invitations\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.register.options\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/passkey/generate-register-options\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.list\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/passkey/list-user-passkeys\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.password.reset.token\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/reset-password/{token}\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.email.verify\",\n    \"method\": \"GET\",\n    \"mutation\": false,\n    \"path\": \"/verify-email\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.email.verify\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"health\",\n    \"embedded\": \"supported\",\n    \"id\": \"health.ok.head\",\n    \"method\": \"HEAD\",\n    \"mutation\": false,\n    \"path\": \"/ok\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles.by\",\n    \"method\": \"PATCH\",\n    \"mutation\": true,\n    \"path\": \"/authorization/roles/{id}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailFailure.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-failure/create\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailFailure.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-failure/delete\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailFailure.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-failure/update\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-template/create\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-template/delete\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.send\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-template/send\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.emailTemplate.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email-template/update\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.email.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email/create\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.email.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email/delete\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"admin\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"admin.email.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/admin/email/update\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/api-key/create\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"apiKey.create\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/api-key/delete\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"apiKey.delete\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.deleteExpired\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/api-key/delete-all-expired-api-keys\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.get.post\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/api-key/get\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/api-key/update\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"apiKey.update\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"apiKeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"apiKey.verify\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/api-key/verify\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/authorization/roles\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles.clone\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/authorization/roles/clone\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"social\",\n    \"embedded\": \"supported\",\n    \"id\": \"callback.by\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/callback/{provider}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.email.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/change-email\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.email.update\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.email.verify.change.post\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/change-email/verify\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.password.change\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/change-password\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.password.change\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/delete-user\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.delete\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.password.forget\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/forget-password\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"jwt\",\n    \"embedded\": \"supported\",\n    \"id\": \"jwt.accessToken\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/get-access-token\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.get.post\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/get-session\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"social\",\n    \"embedded\": \"supported\",\n    \"id\": \"account.link\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/link-social\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"account.link\"\n  },\n  {\n    \"auth\": \"protocol\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.authorization.decision\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/oauth/authorize\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"protocol\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.token.revoke\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/oauth/revoke\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"protocol\",\n    \"capability\": \"oauthAuthorizationServer\",\n    \"embedded\": \"supported\",\n    \"id\": \"oauth.token.exchange\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/oauth/token\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.accept\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/accept-invitation\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.invitation.accept\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"member.add\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/add-member\",\n    \"rust\": \"unsupported\",\n    \"domainEvent\": \"organization.member.add\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.cancel\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/cancel-invitation\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.invitation.cancel\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.checkSlug\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/organization/check-slug\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/create\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.create\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/delete\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.delete\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.hasPermission\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/organization/has-permission\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/invite-member\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.invitation.create\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.reminder\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/invite-member-reminder\",\n    \"rust\": \"unsupported\",\n    \"domainEvent\": \"organization.member.invite.reminder\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.leave\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/leave\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"invitations\",\n    \"embedded\": \"supported\",\n    \"id\": \"invitation.reject\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/reject-invitation\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.invitation.reject\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"member.remove\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/remove-member\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.member.remove\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.setActive\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/set-active\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.activeOrganization.update\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"organization.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/update\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.update\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"organizations\",\n    \"embedded\": \"supported\",\n    \"id\": \"member.role.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/organization/update-member-role\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"organization.member.role.update\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.delete\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/passkey/delete-passkey\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"passkey.delete\"\n  },\n  {\n    \"auth\": \"optional-session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.authenticate.options\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/passkey/generate-authenticate-options\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/passkey/update-passkey\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"passkey.update\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.authenticate.verify\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/passkey/verify-authentication\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"passkeys\",\n    \"embedded\": \"supported\",\n    \"id\": \"passkey.register.verify\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/passkey/verify-registration\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"passkey.register\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"jwt\",\n    \"embedded\": \"supported\",\n    \"id\": \"jwt.refresh\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/refresh-token\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.password.reset\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/reset-password\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.password.reset\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.revoke.others\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/revoke-other-sessions\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.revoke\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/revoke-session\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.revoke.all\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/revoke-sessions\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"email.securityAlert\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/send-security-alert\",\n    \"rust\": \"unsupported\",\n    \"domainEvent\": \"user.security.alert\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"email.signIn\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/send-sign-in-email\",\n    \"rust\": \"unsupported\",\n    \"domainEvent\": \"user.sign-in.email\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"email\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.email.verify.send\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/send-verification-email\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.bridge.exchange\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/session/bridge/exchange\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.bridge.issue\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/session/bridge/issue\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.password.set\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/set-password\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.issue.email\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/sign-in/email\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"social\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.issue.social\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/sign-in/social\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.issue.username\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/sign-in/username\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.issue\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"session.revoke.current\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/sign-out\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"session.revoke\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.create\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/sign-up/email\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.create\"\n  },\n  {\n    \"auth\": \"public\",\n    \"capability\": \"jwt\",\n    \"embedded\": \"supported\",\n    \"id\": \"jwt.token\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/token\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.disable\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/disable\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"twoFactor.disable\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.enable\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/enable\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.backupCodes.generate\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/generate-backup-codes\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.getUri\",\n    \"method\": \"POST\",\n    \"mutation\": false,\n    \"path\": \"/two-factor/get-totp-uri\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.emailOtp.send\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/send-otp\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.backupCodes.consume\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/verify-backup-code\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.emailOtp.verify\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/verify-otp\",\n    \"rust\": \"supported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"twoFactor\",\n    \"embedded\": \"supported\",\n    \"id\": \"twoFactor.verifyEnable\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/two-factor/verify-totp\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"twoFactor.enable\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"social\",\n    \"embedded\": \"supported\",\n    \"id\": \"account.unlink\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/unlink-account\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"account.unlink\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"password\",\n    \"embedded\": \"supported\",\n    \"id\": \"user.update\",\n    \"method\": \"POST\",\n    \"mutation\": true,\n    \"path\": \"/update-user\",\n    \"rust\": \"supported\",\n    \"domainEvent\": \"user.update\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.assignments.members.replace\",\n    \"method\": \"PUT\",\n    \"mutation\": true,\n    \"path\": \"/authorization/assignments/members/{memberId}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.assignments.users.replace\",\n    \"method\": \"PUT\",\n    \"mutation\": true,\n    \"path\": \"/authorization/assignments/users/{userId}\",\n    \"rust\": \"unsupported\"\n  },\n  {\n    \"auth\": \"session\",\n    \"capability\": \"sessions\",\n    \"embedded\": \"supported\",\n    \"id\": \"authorization.roles.by.rights\",\n    \"method\": \"PUT\",\n    \"mutation\": true,\n    \"path\": \"/authorization/roles/{id}/rights\",\n    \"rust\": \"unsupported\"\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  | \"ATHENA_BILLING_INGESTION_CONFIG_INVALID\"\n  | \"ATHENA_BILLING_APPLICATION_ID_REQUIRED\"\n  | \"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","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 { 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","/**\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  runtimePlansMaterialized: 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    runtimePlansMaterialized: 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 recordRuntimePlanMaterialized(): void {\n  athenaRuntimeCounters().runtimePlansMaterialized += 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","/**\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  const host = hostname.replace(/^\\[|\\]$/g, \"\").toLowerCase();\n  return (\n    host === \"localhost\" ||\n    host === \"127.0.0.1\" ||\n    host === \"::1\" ||\n    host === \"0.0.0.0\"\n  );\n}\n\nfunction collapseSearchParams(params: URLSearchParams): URLSearchParams {\n  const merged = new URLSearchParams();\n  for (const [key, value] of params.entries()) {\n    merged.set(key, value);\n  }\n  return merged;\n}\n\nfunction rewritePostgresUrl(url: URL): void {\n  const merged = collapseSearchParams(url.searchParams);\n  const sslmode = (merged.get(\"sslmode\") ?? \"\").trim().toLowerCase();\n  const optedIntoLibpq =\n    (merged.get(\"uselibpqcompat\") ?? \"\").trim().toLowerCase() === \"true\";\n\n  if (!(sslmode || isLoopbackHost(url.hostname))) {\n    merged.set(\"sslmode\", \"verify-full\");\n  } else if (LIBPQ_COMPAT_SSLMODES.has(sslmode) && !optedIntoLibpq) {\n    // pg v2 treats prefer/require/verify-ca as verify-full and warns.\n    // Pin verify-full (current secure behavior) instead of uselibpqcompat,\n    // which would switch `require` to libpq's weaker no-verify semantics.\n    merged.set(\"sslmode\", \"verify-full\");\n  }\n\n  url.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  connectionString: string\n): string {\n  const trimmed = connectionString.trim();\n  if (trimmed.length === 0) {\n    return connectionString;\n  }\n\n  try {\n    const usesPostgresql = /^postgresql:/i.test(trimmed);\n    const normalized = trimmed.replace(/^postgresql:/i, \"postgres:\");\n    const url = new URL(normalized);\n    if (!POSTGRES_PROTOCOLS.has(url.protocol)) {\n      return connectionString;\n    }\n\n    rewritePostgresUrl(url);\n    const rewritten = url.toString();\n    return usesPostgresql\n      ? rewritten.replace(/^postgres:/i, \"postgresql:\")\n      : rewritten;\n  } catch {\n    return connectionString;\n  }\n}\n","import type {\n  Pool,\n  PoolClient,\n  PoolConfig,\n  QueryResult,\n  QueryResultRow,\n} from \"pg\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport { withPostgresLibpqCompatConnectionString } from \"./connection-string.ts\";\n\nexport const ATHENA_POSTGRES_DRIVER_MISSING_MESSAGE = [\n  \"Athena local PostgreSQL runtime requires `pg`.\",\n  \"\",\n  \"Install:\",\n  \"  pnpm add pg\",\n  \"  npm install pg\",\n  \"  yarn add pg\",\n  \"  bun add pg\",\n].join(\"\\n\");\n\nexport function postgresDriverMissingError(\n  cause?: unknown\n): AthenaConfigurationError {\n  return new AthenaConfigurationError(\n    \"ATHENA_POSTGRES_DRIVER_MISSING\",\n    ATHENA_POSTGRES_DRIVER_MISSING_MESSAGE,\n    \"db\",\n    { cause }\n  );\n}\n\nfunction isModuleNotFound(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  const code = (error as { code?: unknown }).code;\n  if (code === \"ERR_MODULE_NOT_FOUND\" || code === \"MODULE_NOT_FOUND\") {\n    return true;\n  }\n  const message = (error as { message?: unknown }).message;\n  return (\n    typeof message === \"string\" &&\n    /cannot find module ['\"]pg['\"]|can't resolve ['\"]pg['\"]/i.test(message)\n  );\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  query<T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[]\n  ): Promise<QueryResult<T>>;\n}\n\nexport interface AthenaPostgresPoolDiagnostics {\n  idleCount: number;\n  totalCount: number;\n  waitingCount: number;\n}\n\nexport interface AthenaPostgresPool extends AthenaPostgresQueryable {\n  connect(): Promise<AthenaPostgresClient>;\n  end(): Promise<void>;\n  readonly idleCount?: number;\n  readonly totalCount?: number;\n  readonly waitingCount?: number;\n}\n\nexport const ATHENA_POSTGRES_POOL_DEFAULTS = {\n  application_name: `athena-js/${PACKAGE_VERSION}`,\n  connectionTimeoutMillis: 10_000,\n  idleTimeoutMillis: 30_000,\n  max: 20,\n} as const;\n\nexport function postgresPoolDiagnostics(\n  pool: AthenaPostgresPool\n): AthenaPostgresPoolDiagnostics {\n  return {\n    idleCount: pool.idleCount ?? 0,\n    totalCount: pool.totalCount ?? 0,\n    waitingCount: pool.waitingCount ?? 0,\n  };\n}\n\nexport interface AthenaPostgresClient {\n  query<T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[]\n  ): Promise<QueryResult<T>>;\n  release(err?: Error | boolean): void;\n}\n\ntype PgPoolConstructor = new (config: PoolConfig) => Pool;\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined;\n\n/**\n * Lazily loads the Node-only `pg` Pool constructor.\n * Safe to call only from server/CLI tooling entry points.\n */\nexport async function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n  if (!pgPoolConstructorPromise) {\n    pgPoolConstructorPromise = import(\"pg\")\n      .then((module) => {\n        const poolConstructor =\n          (module as { Pool?: PgPoolConstructor }).Pool ??\n          (module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool;\n\n        if (!poolConstructor) {\n          throw postgresDriverMissingError();\n        }\n\n        return poolConstructor;\n      })\n      .catch((error: unknown) => {\n        pgPoolConstructorPromise = undefined;\n        if (\n          isModuleNotFound(error) ||\n          error instanceof AthenaConfigurationError\n        ) {\n          throw error instanceof AthenaConfigurationError\n            ? error\n            : postgresDriverMissingError(error);\n        }\n        throw error;\n      });\n  }\n\n  return pgPoolConstructorPromise;\n}\n\n/**\n * Creates a PostgreSQL connection pool for Node tooling.\n */\nexport async function createPostgresPool(\n  connectionString: string,\n  config: Omit<PoolConfig, \"connectionString\"> = {}\n): Promise<AthenaPostgresPool> {\n  const PoolConstructor = await loadPgPoolConstructor();\n  const pool = new PoolConstructor({\n    application_name: ATHENA_POSTGRES_POOL_DEFAULTS.application_name,\n    connectionString: withPostgresLibpqCompatConnectionString(connectionString),\n    connectionTimeoutMillis:\n      ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis,\n    idleTimeoutMillis: ATHENA_POSTGRES_POOL_DEFAULTS.idleTimeoutMillis,\n    max: ATHENA_POSTGRES_POOL_DEFAULTS.max,\n    ...config,\n  });\n  return pool as unknown as AthenaPostgresPool;\n}\n\nexport type { Pool, PoolClient, QueryResult, QueryResultRow };\n","export type PostgresTimeoutPhase =\n  | \"admission\"\n  | \"queue\"\n  | \"acquire\"\n  | \"begin\"\n  | \"statement\"\n  | \"transaction\"\n  | \"commit\"\n  | \"rollback\";\n\nexport type PostgresClock = () => number;\n\nfunction monotonicNow(): number {\n  return typeof performance === \"undefined\" ? Date.now() : performance.now();\n}\n\nexport class PostgresDeadline {\n  readonly durationMs: number;\n  readonly startedAt: number;\n  readonly expiresAt: number;\n\n  private constructor(\n    durationMs: number,\n    private readonly clock: PostgresClock\n  ) {\n    if (!Number.isFinite(durationMs) || durationMs < 0) {\n      throw new RangeError(\n        \"PostgreSQL deadline must be finite and non-negative\"\n      );\n    }\n    this.durationMs = durationMs;\n    this.startedAt = clock();\n    this.expiresAt = this.startedAt + durationMs;\n  }\n\n  static after(\n    durationMs: number,\n    clock: PostgresClock = monotonicNow\n  ): PostgresDeadline {\n    return new PostgresDeadline(durationMs, clock);\n  }\n\n  elapsedMs(): number {\n    return Math.min(\n      this.durationMs,\n      Math.max(0, this.clock() - this.startedAt)\n    );\n  }\n\n  remainingMs(): number {\n    return Math.max(0, this.expiresAt - this.clock());\n  }\n\n  expired(): boolean {\n    return this.remainingMs() <= 0;\n  }\n}\n","import type { AthenaPostgresClient } from \"../driver.ts\";\n\nexport interface PostgresLease {\n  readonly acquireDurationMs: number;\n  readonly acquiredAt: number;\n  readonly client: AthenaPostgresClient;\n  destroy(reason?: unknown): void;\n  release(): void;\n  readonly target: PostgresTarget;\n  readonly workload: PostgresWorkload;\n}\n\nexport type PostgresTarget = \"pooled\" | \"direct\";\n\nexport type PostgresWorkload =\n  | \"query\"\n  | \"transaction\"\n  | \"auth\"\n  | \"billing\"\n  | \"chat\"\n  | \"migration\"\n  | \"storage\"\n  | \"notifications\"\n  | \"introspection\"\n  | \"background\";\n\nexport function destroyUnclaimedPostgresClient(\n  client: AthenaPostgresClient\n): void {\n  client.release(true);\n}\n\nexport function createPostgresLease(input: {\n  acquiredAt: number;\n  acquireDurationMs: number;\n  client: AthenaPostgresClient;\n  target: PostgresTarget;\n  workload: PostgresWorkload;\n}): PostgresLease {\n  let settled = false;\n\n  const settle = (reason?: unknown): void => {\n    if (settled) {\n      return;\n    }\n    settled = true;\n    if (reason === undefined) {\n      input.client.release();\n    } else {\n      input.client.release(reason instanceof Error ? reason : true);\n    }\n  };\n\n  return {\n    acquireDurationMs: input.acquireDurationMs,\n    acquiredAt: input.acquiredAt,\n    client: input.client,\n    destroy: (reason) => settle(reason ?? true),\n    release: () => settle(),\n    target: input.target,\n    workload: input.workload,\n  };\n}\n","export type PostgresClientDisposition = \"release\" | \"destroy\";\n\nconst POSTGRES_DEADLINE_EXCEEDED = \"ATHENA_POSTGRES_DEADLINE_EXCEEDED\";\nconst AUTH_DATABASE_TIMEOUT = \"ATHENA_AUTH_DATABASE_TIMEOUT\";\n\ntype ErrorLike = {\n  cause?: unknown;\n  code?: unknown;\n  message?: unknown;\n  name?: unknown;\n};\n\nfunction errorLike(error: unknown): ErrorLike | undefined {\n  return error !== null && typeof error === \"object\"\n    ? (error as ErrorLike)\n    : undefined;\n}\n\nfunction errorCode(error: unknown): string | undefined {\n  const code = errorLike(error)?.code;\n  return typeof code === \"string\" ? code : undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return typeof error === \"string\" ? error : \"\";\n}\n\nfunction isDeadlineTimeout(error: unknown, seen = new Set<object>()): boolean {\n  const record = errorLike(error);\n  if (!record || seen.has(record)) {\n    return false;\n  }\n  seen.add(record);\n\n  if (\n    record.code === POSTGRES_DEADLINE_EXCEEDED ||\n    record.code === AUTH_DATABASE_TIMEOUT\n  ) {\n    return true;\n  }\n  return isDeadlineTimeout(record.cause, seen);\n}\n\n/**\n * Decide whether a leased client may return to the pool.\n * Timed-out, reset, protocol-broken, or rollback-failed sessions are destroyed.\n * Ordinary SQL/transaction failures can be released after a successful ROLLBACK.\n */\nexport function classifyPostgresClientPoison(\n  error: unknown\n): PostgresClientDisposition {\n  const code = errorCode(error);\n  const message = errorMessage(error);\n\n  if (\n    isDeadlineTimeout(error) ||\n    code === \"57014\" ||\n    code === \"ETIMEDOUT\" ||\n    /statement timeout|query_timeout|connection timeout|deadline exceeded/i.test(\n      message\n    )\n  ) {\n    return \"destroy\";\n  }\n\n  if (\n    code === \"ECONNRESET\" ||\n    code === \"ECONNREFUSED\" ||\n    code === \"EPIPE\" ||\n    code === \"ENOTCONN\" ||\n    code === \"57P01\" ||\n    code === \"57P02\" ||\n    code === \"57P03\" ||\n    /connection terminated|server closed the connection|network reset/i.test(\n      message\n    )\n  ) {\n    return \"destroy\";\n  }\n\n  if (\n    code === \"08P01\" ||\n    code === \"08P02\" ||\n    code === \"08000\" ||\n    code === \"08003\" ||\n    code === \"08006\" ||\n    /protocol error|client_encoding|unexpected message/i.test(message)\n  ) {\n    return \"destroy\";\n  }\n\n  if (/rollback/i.test(message) && /fail/i.test(message)) {\n    return \"destroy\";\n  }\n\n  return \"release\";\n}\n","import type {\n  AthenaPostgresClient,\n  AthenaPostgresPool,\n  QueryResult,\n  QueryResultRow,\n} from \"../driver.ts\";\nimport {\n  ATHENA_POSTGRES_POOL_DEFAULTS,\n  createPostgresPool,\n  postgresPoolDiagnostics,\n} from \"../driver.ts\";\nimport { PostgresDeadline, type PostgresTimeoutPhase } from \"./deadline.ts\";\nimport {\n  createPostgresLease,\n  destroyUnclaimedPostgresClient,\n  type PostgresLease,\n  type PostgresTarget,\n  type PostgresWorkload,\n} from \"./lease.ts\";\nimport { classifyPostgresClientPoison } from \"./poison.ts\";\n\nfunction monotonicNow(): number {\n  return typeof performance === \"undefined\" ? Date.now() : performance.now();\n}\n\nexport interface PostgresAcquireRequest {\n  deadline: PostgresDeadline;\n  target: PostgresTarget;\n  traceId?: string;\n  workload: PostgresWorkload;\n}\n\nexport type PostgresWorkloadCounts = Partial<\n  Record<PostgresWorkload, { active: number }>\n>;\n\nexport type PostgresTimeoutCounts = Partial<\n  Record<PostgresTimeoutPhase, number>\n>;\n\nexport interface PostgresPoolSnapshot {\n  acquireP50: number;\n  acquireP95: number;\n  byWorkload: PostgresWorkloadCounts;\n  destroyedConnections: number;\n  idleCount: number;\n  max: number;\n  pendingAcquires: number;\n  queueUtilization: number;\n  timeoutsByPhase: PostgresTimeoutCounts;\n  totalCount: number;\n  utilization: number;\n  waitingCount: number;\n}\n\nexport interface PostgresPoolHealth {\n  snapshot: PostgresPoolSnapshot;\n  status: \"healthy\" | \"saturated\";\n}\n\nexport interface PostgresPoolManager {\n  acquire(request: PostgresAcquireRequest): Promise<PostgresLease>;\n  close(): Promise<void>;\n  closeAll(): Promise<void>;\n  getPool(): Promise<AthenaPostgresPool>;\n  health(): Promise<PostgresPoolHealth>;\n  inspect(): Promise<PostgresPoolSnapshot>;\n  query<T extends QueryResultRow = QueryResultRow>(\n    request: PostgresAcquireRequest,\n    text: string,\n    values?: unknown[]\n  ): Promise<QueryResult<T>>;\n  snapshot(): Promise<PostgresPoolSnapshot>;\n}\n\nexport class PostgresDeadlineExceededError extends Error {\n  readonly code = \"ATHENA_POSTGRES_DEADLINE_EXCEEDED\";\n\n  constructor(\n    readonly phase: PostgresTimeoutPhase,\n    readonly elapsedMs: number,\n    readonly deadlineMs: number,\n    readonly target: PostgresTarget,\n    readonly workload: PostgresWorkload\n  ) {\n    super(\n      `PostgreSQL deadline exceeded during ${phase} (${Math.round(elapsedMs)}ms of ${Math.round(deadlineMs)}ms); connection timeout exceeded`\n    );\n    this.name = \"PostgresDeadlineExceededError\";\n  }\n}\n\nexport class PostgresAdmissionError extends Error {\n  readonly code = \"ATHENA_POSTGRES_ADMISSION_REJECTED\";\n\n  constructor() {\n    super(\"PostgreSQL admission queue is full\");\n    this.name = \"PostgresAdmissionError\";\n  }\n}\n\nexport async function connectPostgresPoolWithDeadline(\n  pool: AthenaPostgresPool,\n  deadlineMs: number\n): Promise<AthenaPostgresClient> {\n  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {\n    throw new Error(\"connection timeout exceeded\");\n  }\n  const deadline = PostgresDeadline.after(deadlineMs);\n  const request: PostgresAcquireRequest = {\n    deadline,\n    target: \"pooled\",\n    workload: \"query\",\n  };\n  let timedOut = false;\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const connecting = pool.connect().then((client) => {\n    if (timedOut) {\n      destroyUnclaimedPostgresClient(client);\n      throw deadlineError(request, \"acquire\");\n    }\n    return client;\n  });\n  connecting.catch(() => undefined);\n  try {\n    return await Promise.race([\n      connecting,\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => {\n          timedOut = true;\n          reject(deadlineError(request, \"acquire\"));\n        }, deadlineMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n}\n\nexport interface CreatePostgresPoolManagerOptions {\n  connectionString?: string;\n  getPool?: () => Promise<AthenaPostgresPool>;\n  maxPendingAcquires?: number;\n  ownership?: \"owned\" | \"borrowed\";\n  pool?: AthenaPostgresPool;\n}\n\nconst ACQUIRE_SAMPLE_LIMIT = 128;\n\nfunction percentile(samples: readonly number[], p: number): number {\n  if (samples.length === 0) {\n    return 0;\n  }\n  const sorted = [...samples].sort((a, b) => a - b);\n  const index = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil(p * sorted.length) - 1)\n  );\n  return sorted[index] ?? 0;\n}\n\nfunction poolMax(pool: AthenaPostgresPool): number {\n  const options = (pool as { options?: { max?: number } }).options;\n  const max = options?.max;\n  return typeof max === \"number\" && max > 0\n    ? max\n    : ATHENA_POSTGRES_POOL_DEFAULTS.max;\n}\n\nexport function createPostgresPoolManager(\n  options: CreatePostgresPoolManagerOptions\n): PostgresPoolManager {\n  const connectionString = options.connectionString?.trim();\n  if (!(options.getPool || options.pool || connectionString)) {\n    throw new Error(\n      \"PostgresPoolManager requires a connection string or an existing pool.\"\n    );\n  }\n  const maxPendingAcquires = options.maxPendingAcquires ?? 100;\n  if (!Number.isInteger(maxPendingAcquires) || maxPendingAcquires < 1) {\n    throw new RangeError(\"maxPendingAcquires must be a positive integer\");\n  }\n  const ownsPool =\n    (options.ownership ?? (options.pool ? \"borrowed\" : \"owned\")) === \"owned\";\n  let poolPromise: Promise<AthenaPostgresPool> | undefined;\n  let resolvedPool: AthenaPostgresPool | undefined;\n  let pendingAcquires = 0;\n  let closed = false;\n  let destroyedConnections = 0;\n  const timeoutsByPhase: PostgresTimeoutCounts = {};\n  const activeByWorkload: Partial<Record<PostgresWorkload, number>> = {};\n  const acquireSamples: number[] = [];\n\n  const noteTimeout = (phase: PostgresTimeoutPhase): void => {\n    timeoutsByPhase[phase] = (timeoutsByPhase[phase] ?? 0) + 1;\n  };\n\n  const noteDestroy = (): void => {\n    destroyedConnections += 1;\n  };\n\n  const noteAcquireSample = (durationMs: number): void => {\n    acquireSamples.push(durationMs);\n    if (acquireSamples.length > ACQUIRE_SAMPLE_LIMIT) {\n      acquireSamples.shift();\n    }\n  };\n\n  const adjustWorkload = (workload: PostgresWorkload, delta: number): void => {\n    activeByWorkload[workload] = Math.max(\n      0,\n      (activeByWorkload[workload] ?? 0) + delta\n    );\n  };\n\n  const wrapLease = (lease: PostgresLease): PostgresLease => {\n    adjustWorkload(lease.workload, 1);\n    let settled = false;\n    const settleWorkload = (): void => {\n      if (settled) {\n        return;\n      }\n      settled = true;\n      adjustWorkload(lease.workload, -1);\n    };\n    return {\n      ...lease,\n      destroy(reason) {\n        if (!settled) {\n          noteDestroy();\n        }\n        settleWorkload();\n        lease.destroy(reason);\n      },\n      release() {\n        settleWorkload();\n        lease.release();\n      },\n    };\n  };\n\n  const getPool = async (): Promise<AthenaPostgresPool> => {\n    if (closed) {\n      throw new Error(\"PostgreSQL pool manager is closed\");\n    }\n    if (options.pool) {\n      resolvedPool = options.pool;\n      return options.pool;\n    }\n    if (options.getPool) {\n      poolPromise ??= options.getPool().catch((error: unknown) => {\n        poolPromise = undefined;\n        throw error;\n      });\n      resolvedPool = await poolPromise;\n      return resolvedPool;\n    }\n    poolPromise ??= createPostgresPool(connectionString as string);\n    resolvedPool = await poolPromise;\n    return resolvedPool;\n  };\n\n  const connectWithDeadline = async (\n    pool: AthenaPostgresPool,\n    request: PostgresAcquireRequest\n  ): Promise<AthenaPostgresClient> => {\n    const remainingMs = request.deadline.remainingMs();\n    if (remainingMs <= 0) {\n      noteTimeout(\"acquire\");\n      throw deadlineError(request, \"acquire\");\n    }\n    let timedOut = false;\n    let timer: ReturnType<typeof setTimeout> | undefined;\n    const connecting = pool.connect().then((client) => {\n      if (timedOut) {\n        noteDestroy();\n        destroyUnclaimedPostgresClient(client);\n        noteTimeout(\"acquire\");\n        throw deadlineError(request, \"acquire\");\n      }\n      return client;\n    });\n    connecting.catch(() => undefined);\n    try {\n      return await Promise.race([\n        connecting,\n        new Promise<never>((_, reject) => {\n          timer = setTimeout(() => {\n            timedOut = true;\n            noteTimeout(\"acquire\");\n            reject(deadlineError(request, \"acquire\"));\n          }, remainingMs);\n        }),\n      ]);\n    } finally {\n      if (timer !== undefined) {\n        clearTimeout(timer);\n      }\n    }\n  };\n\n  const acquire = async (\n    request: PostgresAcquireRequest\n  ): Promise<PostgresLease> => {\n    if (closed) {\n      throw new Error(\"PostgreSQL pool manager is closed\");\n    }\n    if (request.deadline.expired()) {\n      noteTimeout(\"queue\");\n      throw deadlineError(request, \"queue\");\n    }\n    if (pendingAcquires >= maxPendingAcquires) {\n      throw new PostgresAdmissionError();\n    }\n    pendingAcquires += 1;\n    const startedAt = monotonicNow();\n    try {\n      const client = await connectWithDeadline(await getPool(), request);\n      if (closed) {\n        noteDestroy();\n        destroyUnclaimedPostgresClient(client);\n        throw new Error(\"PostgreSQL pool manager is closed\");\n      }\n      const durationMs = monotonicNow() - startedAt;\n      noteAcquireSample(durationMs);\n      return wrapLease(\n        createPostgresLease({\n          acquireDurationMs: durationMs,\n          acquiredAt: Date.now(),\n          client,\n          target: request.target,\n          workload: request.workload,\n        })\n      );\n    } finally {\n      pendingAcquires -= 1;\n    }\n  };\n\n  const inspect = async (): Promise<PostgresPoolSnapshot> => {\n    const pool = await getPool();\n    const diagnostics = postgresPoolDiagnostics(pool);\n    const max = poolMax(pool);\n    const byWorkload: PostgresWorkloadCounts = {};\n    for (const [workload, active] of Object.entries(activeByWorkload) as [\n      PostgresWorkload,\n      number,\n    ][]) {\n      if (active > 0) {\n        byWorkload[workload] = { active };\n      }\n    }\n    return {\n      acquireP50: percentile(acquireSamples, 0.5),\n      acquireP95: percentile(acquireSamples, 0.95),\n      byWorkload,\n      destroyedConnections,\n      idleCount: diagnostics.idleCount,\n      max,\n      pendingAcquires,\n      queueUtilization: pendingAcquires / maxPendingAcquires,\n      timeoutsByPhase: { ...timeoutsByPhase },\n      totalCount: diagnostics.totalCount,\n      utilization: max > 0 ? diagnostics.totalCount / max : 0,\n      waitingCount: diagnostics.waitingCount,\n    };\n  };\n  const health = async (): Promise<PostgresPoolHealth> => {\n    const snapshot = await inspect();\n    const saturated =\n      snapshot.waitingCount > 0 ||\n      snapshot.queueUtilization >= 1 ||\n      (snapshot.utilization >= 1 && snapshot.pendingAcquires > 0);\n    return {\n      snapshot,\n      status: saturated ? \"saturated\" : \"healthy\",\n    };\n  };\n\n  const close = async (): Promise<void> => {\n    if (closed) {\n      return;\n    }\n    closed = true;\n    if (!ownsPool) {\n      return;\n    }\n    const pool = resolvedPool ?? (await poolPromise?.catch(() => undefined));\n    poolPromise = undefined;\n    if (pool) {\n      await pool.end();\n    }\n  };\n\n  return {\n    acquire,\n    close,\n    closeAll: close,\n    getPool,\n    health,\n    inspect,\n    async query<T extends QueryResultRow = QueryResultRow>(\n      request: PostgresAcquireRequest,\n      text: string,\n      values?: unknown[]\n    ): Promise<QueryResult<T>> {\n      const lease = await acquire(request);\n      let timedOut = false;\n      let settled = false;\n      let resettingStatementTimeout = false;\n      const onTimeout = (error: PostgresDeadlineExceededError): void => {\n        timedOut = true;\n        noteTimeout(\"statement\");\n        lease.destroy(error);\n      };\n      try {\n        if (request.workload === \"auth\") {\n          const timeoutMs = remainingStatementTimeoutMs(request);\n          await queryPostgresClientWithDeadline(\n            lease.client,\n            request,\n            `SET statement_timeout = '${timeoutMs}ms'`,\n            undefined,\n            onTimeout\n          );\n        }\n        const result = await queryPostgresClientWithDeadline<T>(\n          lease.client,\n          request,\n          text,\n          values,\n          onTimeout\n        );\n        if (request.workload === \"auth\") {\n          resettingStatementTimeout = true;\n          await queryPostgresClientWithDeadline(\n            lease.client,\n            request,\n            \"SET statement_timeout = 0\",\n            undefined,\n            onTimeout\n          );\n        }\n        return result;\n      } catch (error) {\n        if (!timedOut) {\n          settled = true;\n          if (\n            resettingStatementTimeout ||\n            classifyPostgresClientPoison(error) === \"destroy\"\n          ) {\n            lease.destroy(error);\n          } else {\n            lease.release();\n          }\n        }\n        throw error;\n      } finally {\n        if (!(timedOut || settled)) {\n          lease.release();\n        }\n      }\n    },\n    snapshot: inspect,\n  };\n}\n\nexport async function queryPostgresClientWithDeadline<\n  T extends QueryResultRow = QueryResultRow,\n>(\n  client: AthenaPostgresClient,\n  request: PostgresAcquireRequest,\n  text: string,\n  values?: unknown[],\n  onTimeout?: (error: PostgresDeadlineExceededError) => void,\n  phase: PostgresTimeoutPhase = \"statement\"\n): Promise<QueryResult<T>> {\n  const remainingMs = request.deadline.remainingMs();\n  if (remainingMs <= 0) {\n    const error = deadlineError(request, phase);\n    onTimeout?.(error);\n    throw error;\n  }\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const query = client.query<T>(text, values);\n  query.catch(() => undefined);\n  try {\n    return await Promise.race([\n      query,\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => {\n          const error = deadlineError(request, phase);\n          onTimeout?.(error);\n          reject(error);\n        }, remainingMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n}\n\nfunction remainingStatementTimeoutMs(request: PostgresAcquireRequest): number {\n  return Math.max(1, Math.trunc(request.deadline.remainingMs()));\n}\n\nfunction deadlineError(\n  request: PostgresAcquireRequest,\n  phase: PostgresTimeoutPhase\n): PostgresDeadlineExceededError {\n  return new PostgresDeadlineExceededError(\n    phase,\n    request.deadline.elapsedMs(),\n    request.deadline.durationMs,\n    request.target,\n    request.workload\n  );\n}\n\nexport { ATHENA_POSTGRES_POOL_DEFAULTS };\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  const isNode =\n    typeof process !== \"undefined\" &&\n    typeof process.versions === \"object\" &&\n    process.versions !== null &&\n    typeof process.versions.node === \"string\" &&\n    process.versions.node.length > 0;\n\n  if (!isNode) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NODE_RUNTIME_REQUIRED\",\n      \"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      \"db\"\n    );\n  }\n}\n\nexport function isNodePostgresRuntime(): boolean {\n  try {\n    assertNodePostgresRuntime();\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { nextInternalSavepointName } from \"../db/transaction/begin-sql.ts\";\nimport { recordPostgresPoolCreated } from \"../runtime/ownership.ts\";\nimport {\n  ATHENA_POSTGRES_POOL_DEFAULTS,\n  type AthenaPostgresPool,\n  type AthenaPostgresPoolDiagnostics,\n  postgresPoolDiagnostics,\n  type QueryResult,\n  type QueryResultRow,\n} from \"./driver.ts\";\nimport {\n  PostgresDeadline,\n  type PostgresTimeoutPhase,\n} from \"./pool/deadline.ts\";\nimport type { PostgresWorkload } from \"./pool/lease.ts\";\nimport {\n  connectPostgresPoolWithDeadline,\n  createPostgresPoolManager,\n  queryPostgresClientWithDeadline,\n  type PostgresAcquireRequest,\n  type PostgresPoolManager,\n  PostgresDeadlineExceededError,\n} from \"./pool/manager.ts\";\nimport { classifyPostgresClientPoison } from \"./pool/poison.ts\";\nimport { assertNodePostgresRuntime } from \"./runtime.ts\";\n\nfunction isPostgresDebugEnabled(): boolean {\n  const value = (\n    globalThis as { process?: { env?: Record<string, string | undefined> } }\n  ).process?.env?.ATHENA_JS_DEBUG;\n  return value === \"1\" || value === \"true\";\n}\n\nfunction logPoolSaturation(\n  stats: AthenaPostgresPoolDiagnostics,\n  durationMs: number\n): void {\n  if (!isPostgresDebugEnabled()) {\n    return;\n  }\n  if (stats.waitingCount <= 0 && !(stats.idleCount === 0 && durationMs >= 50)) {\n    return;\n  }\n  console.warn(\n    `[athena-postgres] pool total=${stats.totalCount} idle=${stats.idleCount} waiting=${stats.waitingCount} queryMs=${Math.round(durationMs)}`\n  );\n}\n\nexport type AthenaResourceOwnership = \"owned\" | \"borrowed\";\n\nexport interface AthenaOwnedResource<T> {\n  readonly ownership: AthenaResourceOwnership;\n  readonly resource: T;\n}\n\nexport type AthenaPostgresTransactionOptions = {\n  deadlineMs?: number;\n  workload?: PostgresWorkload;\n};\n\nexport type AthenaPostgresQueryOptions = {\n  deadlineMs?: number;\n  workload?: PostgresWorkload;\n};\n\nexport interface AthenaPostgresRuntime {\n  close(): Promise<void>;\n  getPool(): Promise<AthenaPostgresPool>;\n  getPoolManager(): Promise<PostgresPoolManager>;\n  inspectPool(): Promise<AthenaPostgresPoolDiagnostics>;\n  readonly ownership: AthenaResourceOwnership;\n  query<T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[],\n    options?: AthenaPostgresQueryOptions\n  ): Promise<QueryResult<T>>;\n  transaction<T>(\n    fn: (runtime: AthenaPostgresRuntime) => Promise<T>,\n    options?: AthenaPostgresTransactionOptions\n  ): Promise<T>;\n}\n\nexport { connectPostgresPoolWithDeadline };\n\nexport interface CreateAthenaPostgresRuntimeOptions {\n  connectionString?: string;\n  ownership?: AthenaResourceOwnership;\n  pool?: AthenaPostgresPool;\n}\n\nconst runtimeByTransport = new WeakMap<object, AthenaPostgresRuntime>();\n\nconst OWNED_RUNTIME_CACHE = Symbol.for(\n  \"@xylex-group/athena.ownedPostgresRuntimes\"\n);\n\ntype OwnedRuntimeCacheEntry = {\n  refs: number;\n  runtime: AthenaPostgresRuntime;\n};\n\ntype OwnedRuntimeCache = Map<string, OwnedRuntimeCacheEntry>;\n\nfunction ownedRuntimeCache(): OwnedRuntimeCache {\n  const holder = globalThis as typeof globalThis & {\n    [OWNED_RUNTIME_CACHE]?: OwnedRuntimeCache;\n  };\n  holder[OWNED_RUNTIME_CACHE] ??= new Map();\n  return holder[OWNED_RUNTIME_CACHE];\n}\n\nexport function bindPostgresRuntime(\n  transport: object,\n  runtime: AthenaPostgresRuntime\n): void {\n  runtimeByTransport.set(transport, runtime);\n}\n\nexport function getBoundPostgresRuntime(\n  transport: object | undefined\n): AthenaPostgresRuntime | undefined {\n  return transport ? runtimeByTransport.get(transport) : undefined;\n}\n\nexport function createAthenaPostgresRuntime(\n  options: CreateAthenaPostgresRuntimeOptions\n): AthenaPostgresRuntime {\n  const connectionString = options.connectionString?.trim();\n  if (!(options.pool || connectionString)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"AthenaPostgresRuntime requires a connection string or an existing pool.\",\n      \"db\"\n    );\n  }\n\n  assertNodePostgresRuntime();\n\n  const ownership: AthenaResourceOwnership = options.pool\n    ? (options.ownership ?? \"borrowed\")\n    : \"owned\";\n\n  if (ownership === \"owned\" && connectionString && !options.pool) {\n    const cached = ownedRuntimeCache().get(connectionString);\n    if (cached) {\n      cached.refs += 1;\n      return cached.runtime;\n    }\n  }\n\n  const poolManager = createPostgresPoolManager(\n    options.pool\n      ? { ownership, pool: options.pool }\n      : {\n          connectionString: connectionString as string,\n          ownership,\n        }\n  );\n  let closed = false;\n\n  const assertOpen = (): void => {\n    if (closed) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_DISPOSED\",\n        \"Athena PostgreSQL runtime was disposed.\",\n        \"db\"\n      );\n    }\n  };\n\n  const getPool = async (): Promise<AthenaPostgresPool> => {\n    assertOpen();\n    return poolManager.getPool();\n  };\n\n  const inspectPool = async (): Promise<AthenaPostgresPoolDiagnostics> =>\n    postgresPoolDiagnostics(await getPool());\n  const getPoolManager = async (): Promise<PostgresPoolManager> => {\n    assertOpen();\n    return poolManager;\n  };\n\n  const runtime: AthenaPostgresRuntime = {\n    async close() {\n      if (connectionString && ownership === \"owned\") {\n        const entry = ownedRuntimeCache().get(connectionString);\n        if (entry && entry.runtime === runtime) {\n          entry.refs -= 1;\n          if (entry.refs > 0) {\n            return;\n          }\n          ownedRuntimeCache().delete(connectionString);\n        }\n      }\n      if (closed) {\n        return;\n      }\n      closed = true;\n      await poolManager.close();\n    },\n    getPool,\n    getPoolManager,\n    inspectPool,\n    ownership,\n    async query(text, values, queryOptions) {\n      const pool = await getPool();\n      const stats = postgresPoolDiagnostics(pool);\n      const started = performance.now();\n      try {\n        return await poolManager.query(\n          {\n            deadline: PostgresDeadline.after(\n              queryOptions?.deadlineMs ??\n                ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n            ),\n            target: \"pooled\",\n            workload: queryOptions?.workload ?? \"query\",\n          },\n          text,\n          values\n        );\n      } finally {\n        logPoolSaturation(stats, performance.now() - started);\n      }\n    },\n    async transaction(fn, options) {\n      const deadlineMs =\n        options?.deadlineMs ??\n        ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis;\n      const deadline = PostgresDeadline.after(deadlineMs);\n      const request: PostgresAcquireRequest = {\n        deadline,\n        target: \"pooled\",\n        workload: options?.workload ?? \"transaction\",\n      };\n      const lease = await poolManager.acquire(request);\n      const client = lease.client;\n      let savepointIndex = 0;\n      let active = true;\n      let leaseSettled = false;\n      const settleLease = (mode: \"release\" | \"destroy\", reason?: unknown) => {\n        if (leaseSettled) {\n          return;\n        }\n        leaseSettled = true;\n        if (mode === \"destroy\") {\n          lease.destroy(reason);\n          return;\n        }\n        lease.release();\n      };\n      const destroyOnTimeout = (\n        error: PostgresDeadlineExceededError\n      ): void => {\n        active = false;\n        settleLease(\"destroy\", error);\n      };\n      const deadlineTimer = setTimeout(() => {\n        destroyOnTimeout(\n          new PostgresDeadlineExceededError(\n            \"transaction\",\n            deadline.elapsedMs(),\n            deadline.durationMs,\n            request.target,\n            request.workload\n          )\n        );\n      }, Math.max(1, Math.ceil(deadline.remainingMs())));\n      const runClientQuery = async <T extends QueryResultRow = QueryResultRow>(\n        text: string,\n        values?: unknown[],\n        phase: PostgresTimeoutPhase = \"statement\"\n      ): Promise<QueryResult<T>> =>\n        queryPostgresClientWithDeadline(\n          client,\n          request,\n          text,\n          values,\n          destroyOnTimeout,\n          phase\n        );\n      const assertActive = (): void => {\n        if (!active || deadline.expired()) {\n          if (active) {\n            destroyOnTimeout(\n              new PostgresDeadlineExceededError(\n                \"transaction\",\n                deadline.elapsedMs(),\n                deadline.durationMs,\n                request.target,\n                request.workload\n              )\n            );\n          }\n          throw new Error(\"PostgreSQL transaction deadline exceeded\");\n        }\n      };\n      const runTransactionQuery = async <\n        T extends QueryResultRow = QueryResultRow,\n      >(\n        text: string,\n        values?: unknown[],\n        phase: PostgresTimeoutPhase = \"statement\"\n      ): Promise<QueryResult<T>> => {\n        assertActive();\n        if (request.workload === \"auth\") {\n          const timeoutMs = Math.max(\n            1,\n            Math.trunc(deadline.remainingMs())\n          );\n          await runClientQuery(\n            `SET LOCAL statement_timeout = '${timeoutMs}ms'`,\n            undefined,\n            phase\n          );\n          assertActive();\n        }\n        return runClientQuery(text, values, phase);\n      };\n      const txRuntime: AthenaPostgresRuntime = {\n        close: async () => {},\n        getPool,\n        getPoolManager,\n        inspectPool,\n        ownership: \"borrowed\",\n        query: async (text, values) => {\n          return runTransactionQuery(text, values);\n        },\n        transaction: async (inner) => {\n          const savepoint = nextInternalSavepointName(++savepointIndex);\n          await runTransactionQuery(`SAVEPOINT \"${savepoint}\"`);\n          try {\n            const value = await inner(txRuntime);\n            await runTransactionQuery(`RELEASE SAVEPOINT \"${savepoint}\"`);\n            return value;\n          } catch (error) {\n            try {\n              if (active && !deadline.expired()) {\n                await runClientQuery(\n                  `ROLLBACK TO SAVEPOINT \"${savepoint}\"`,\n                  undefined,\n                  \"rollback\"\n                );\n                await runClientQuery(\n                  `RELEASE SAVEPOINT \"${savepoint}\"`,\n                  undefined,\n                  \"rollback\"\n                );\n              } else {\n                settleLease(\"destroy\", error);\n              }\n            } catch (cleanupError) {\n              settleLease(\"destroy\", cleanupError);\n            }\n            throw error;\n          }\n        },\n      };\n      try {\n        await runClientQuery(\"BEGIN\", undefined, \"begin\");\n        assertActive();\n        const value = await fn(txRuntime);\n        assertActive();\n        await runTransactionQuery(\"COMMIT\", undefined, \"commit\");\n        return value;\n      } catch (error) {\n        try {\n          if (active && !deadline.expired()) {\n            await runClientQuery(\"ROLLBACK\", undefined, \"rollback\");\n          } else {\n            settleLease(\"destroy\", error);\n          }\n        } catch (rollbackError) {\n          settleLease(\"destroy\", rollbackError);\n          throw error;\n        }\n        if (classifyPostgresClientPoison(error) === \"destroy\") {\n          settleLease(\"destroy\", error);\n        }\n        throw error;\n      } finally {\n        active = false;\n        clearTimeout(deadlineTimer);\n        settleLease(\"release\");\n      }\n    },\n  };\n\n  if (ownership === \"owned\" && connectionString && !options.pool) {\n    ownedRuntimeCache().set(connectionString, { refs: 1, runtime });\n    recordPostgresPoolCreated();\n  }\n\n  return runtime;\n}\n\nexport function getAthenaOwnedRuntimeCacheSize(): number {\n  return ownedRuntimeCache().size;\n}\n","export 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","export 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\ninterface AuthRequestTimingStore {\n  getStore(): AuthRequestTiming | undefined;\n  run<T>(store: AuthRequestTiming, fn: () => T): T;\n}\n\nfunction createFallbackAuthRequestTimingStore(): AuthRequestTimingStore {\n  let current: AuthRequestTiming | undefined;\n  return {\n    getStore() {\n      return current;\n    },\n    run(store, fn) {\n      const previous = current;\n      current = store;\n      try {\n        const result = fn();\n        const then =\n          result != null && typeof result === \"object\"\n            ? Reflect.get(result, \"then\")\n            : undefined;\n        if (typeof then === \"function\") {\n          void Promise.resolve(result).finally(() => {\n            current = previous;\n          });\n          return result;\n        }\n        current = previous;\n        return result;\n      } catch (error) {\n        current = previous;\n        throw error;\n      }\n    },\n  };\n}\n\nlet timingStore: AuthRequestTimingStore =\n  createFallbackAuthRequestTimingStore();\n\n/** Node Auth HTTP binds `AsyncLocalStorage` here so this module stays browser-safe. */\nexport function bindAuthRequestTimingStore(\n  store: AuthRequestTimingStore\n): void {\n  timingStore = store;\n}\n\nexport function currentAuthRequestTiming(): AuthRequestTiming | undefined {\n  return timingStore.getStore();\n}\n\nexport function runWithAuthRequestTiming<T>(fn: () => Promise<T>): Promise<T> {\n  return timingStore.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 { AthenaAuthRuntimeError } from \"../runtime-error.ts\";\nimport { currentAuthRequestTiming } from \"./request-timing.ts\";\n\nexport { AthenaAuthRuntimeError } from \"../runtime-error.ts\";\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      error: runtimeError.message,\n      status: runtimeError.status,\n      traceId,\n    });\n  }\n  return jsonResponse(\n    runtimeError.status,\n    errorBody(runtimeError, traceId, version),\n    undefined,\n    traceId\n  );\n}\n","import { ATHENA_MIGRATE_COMMAND } from \"../../migrations/commands.ts\";\nimport type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\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  | \"sql_acquire\"\n  | \"sql_exec\"\n  | \"transaction\";\n\nfunction isAuthJsDebugEnabled(): boolean {\n  const value = (\n    globalThis as { process?: { env?: Record<string, string | undefined> } }\n  ).process?.env?.ATHENA_JS_DEBUG;\n  return value === \"1\" || value === \"true\";\n}\n\nfunction logAuthDatabaseTimeout(phase: AuthDatabaseTimeoutPhase): void {\n  if (!isAuthJsDebugEnabled()) {\n    return;\n  }\n  const timing = currentAuthRequestTiming();\n  const snap = timing?.copy();\n  console.warn(\"[athena-auth] ATHENA_AUTH_DATABASE_TIMEOUT\", {\n    phase,\n    pool: {\n      idle: snap?.sqlPoolIdle ?? 0,\n      total: snap?.sqlPoolTotal ?? 0,\n      waiting: snap?.sqlPoolWaiting ?? 0,\n    },\n    sqlAcquireMs: snap?.sqlAcquireMs ?? 0,\n    sqlExecMs: snap?.sqlExecMs ?? 0,\n    traceId: timing?.traceId() ?? null,\n  });\n}\n\nexport const ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS = 15_000;\n\n/** Wall-clock budget for Embedded Auth schema migrate/repair (one locked transaction). */\nexport const ATHENA_AUTH_SCHEMA_MIGRATE_TIMEOUT_MS = 120_000;\n\nexport type AthenaAuthTransactionOptions = {\n  operationTimeoutMs?: number;\n};\n\nexport function postgresLocalTimeoutStatements(timeoutMs: number): {\n  lockTimeout: string;\n  statementTimeout: string;\n} {\n  const value = `${Math.max(1, Math.trunc(timeoutMs))}ms`;\n  return {\n    lockTimeout: `SET LOCAL lock_timeout = '${value}'`,\n    statementTimeout: `SET LOCAL statement_timeout = '${value}'`,\n  };\n}\n\nexport interface AthenaAuthQueryResult<T = Record<string, unknown>> {\n  rowCount: number;\n  rows: T[];\n}\n\nexport interface AthenaAuthDatabase {\n  close?(): Promise<void>;\n  /** True while this adapter is bound to an open SQL transaction. */\n  readonly inTransaction: boolean;\n  query<T = Record<string, unknown>>(\n    text: string,\n    values?: unknown[],\n  ): Promise<AthenaAuthQueryResult<T>>;\n  transaction<T>(\n    fn: (db: AthenaAuthDatabase) => Promise<T>,\n    options?: AthenaAuthTransactionOptions,\n  ): Promise<T>;\n}\n\nexport function authDatabaseInTransaction(db: AthenaAuthDatabase): boolean {\n  return db.inTransaction === true;\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  value: unknown,\n  context: string,\n): AthenaAuthQueryResult<T> {\n  if (Array.isArray(value)) {\n    return {\n      rowCount: value.length,\n      rows: value as T[],\n    };\n  }\n\n  if (value === null || value === undefined || typeof value !== \"object\") {\n    throw new AthenaAuthRuntimeError(\n      500,\n      [\n        \"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n        \"\",\n        \"Embedded Auth database adapter returned an unexpected query result.\",\n        \"\",\n        `Context: ${context}`,\n        \"\",\n        \"Run with:\",\n        `  ATHENA_JS_DEBUG=1 ${ATHENA_MIGRATE_COMMAND}`,\n      ].join(\"\\n\"),\n      { code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n    );\n  }\n\n  const record = value as Record<string, unknown>;\n  const rows = record.rows;\n  if (!Array.isArray(rows)) {\n    throw new AthenaAuthRuntimeError(\n      500,\n      [\n        \"ATHENA_AUTH_DATABASE_RESULT_INVALID\",\n        \"\",\n        \"Embedded Auth database adapter returned an invalid result while\",\n        `${context}: expected result.rows to be an array.`,\n        \"\",\n        \"Run with:\",\n        `  ATHENA_JS_DEBUG=1 ${ATHENA_MIGRATE_COMMAND}`,\n      ].join(\"\\n\"),\n      { code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n    );\n  }\n\n  const rawCount = record.rowCount;\n  const rowCount =\n    typeof rawCount === \"number\" && Number.isFinite(rawCount)\n      ? rawCount\n      : rows.length;\n\n  return {\n    rowCount,\n    rows: rows as T[],\n  };\n}\n\nfunction isDatabaseTimeoutError(\n  error: unknown,\n  seen = new Set<object>(),\n): boolean {\n  if (\n    error instanceof AthenaAuthRuntimeError &&\n    error.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\"\n  ) {\n    return true;\n  }\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  if (seen.has(error)) {\n    return false;\n  }\n  seen.add(error);\n  const record = error as {\n    cause?: unknown;\n    code?: unknown;\n    message?: unknown;\n    name?: unknown;\n  };\n  if (\n    record.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\" ||\n    record.code === \"ATHENA_POSTGRES_DEADLINE_EXCEEDED\" ||\n    record.code === \"ETIMEDOUT\" ||\n    record.code === \"57014\"\n  ) {\n    return true;\n  }\n  if (record.name === \"PostgresDeadlineExceededError\") {\n    return true;\n  }\n  if (\n    record.cause !== undefined &&\n    isDatabaseTimeoutError(record.cause, seen)\n  ) {\n    return true;\n  }\n  return (\n    typeof record.message === \"string\" &&\n    /timeout exceeded|query_timeout|statement timeout|connection timeout/i.test(\n      record.message,\n    )\n  );\n}\n\nexport function authDatabaseTimeoutError(\n  cause?: unknown,\n): AthenaAuthRuntimeError {\n  return new AthenaAuthRuntimeError(\n    504,\n    [\n      \"ATHENA_AUTH_DATABASE_TIMEOUT\",\n      \"\",\n      \"Embedded Auth could not complete a database operation before the timeout.\",\n    ].join(\"\\n\"),\n    { cause, code: \"ATHENA_AUTH_DATABASE_TIMEOUT\" },\n  );\n}\n\nasync function withAuthDatabaseTimeout<T>(\n  operation: () => Promise<T>,\n  timeoutMs: number,\n  phase: AuthDatabaseTimeoutPhase,\n): Promise<T> {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    return await Promise.race([\n      operation().then(\n        (value) => value,\n        (error: unknown) => {\n          if (isDatabaseTimeoutError(error)) {\n            logAuthDatabaseTimeout(phase);\n            throw authDatabaseTimeoutError(error);\n          }\n          throw error;\n        },\n      ),\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => {\n          logAuthDatabaseTimeout(phase);\n          reject(authDatabaseTimeoutError());\n        }, timeoutMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n}\n\nfunction recordSqlTiming(idleCount: number, elapsedMs: number): void {\n  const timing = currentAuthRequestTiming();\n  if (!timing) {\n    return;\n  }\n  if (idleCount <= 0) {\n    timing.addSqlAcquire(elapsedMs);\n  } else {\n    timing.addSqlExec(elapsedMs);\n  }\n  timing.addSqlCount(1);\n}\n\nexport async function createAthenaAuthDatabase(input: {\n  connectionString?: string;\n  postgresRuntime?: AthenaPostgresRuntime;\n}): Promise<AthenaAuthDatabase> {\n  if (input.postgresRuntime) {\n    return createAuthDatabaseFromRuntime(input.postgresRuntime);\n  }\n  const connectionString = input.connectionString?.trim();\n  if (!connectionString) {\n    throw new AthenaAuthRuntimeError(\n      500,\n      \"createAthenaAuthDatabase requires postgresRuntime or connectionString.\",\n      { code: \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" },\n    );\n  }\n  assertNodePostgresRuntime();\n  const runtime = createAthenaPostgresRuntime({\n    connectionString,\n  });\n  const adapter = createAuthDatabaseFromRuntime(runtime);\n  return {\n    async close() {\n      await runtime.close();\n    },\n    inTransaction: false,\n    query: adapter.query,\n    transaction: adapter.transaction,\n  };\n}\n\nexport async function createPostgresAuthDatabase(\n  connectionString: string,\n): Promise<AthenaAuthDatabase> {\n  return createAthenaAuthDatabase({ connectionString });\n}\n\nexport function createAuthDatabaseFromPool(\n  pool: AthenaPostgresPool,\n): AthenaAuthDatabase {\n  return createAuthDatabaseFromRuntime(\n    createAthenaPostgresRuntime({\n      ownership: \"borrowed\",\n      pool,\n    }),\n  );\n}\n\nexport const createPostgresAuthDatabaseFromPool = createAuthDatabaseFromPool;\n\nexport function createAuthDatabaseFromRuntime(\n  runtime: Pick<AthenaPostgresRuntime, \"inspectPool\" | \"query\" | \"transaction\">,\n  options?: { operationTimeoutMs?: number },\n): AthenaAuthDatabase {\n  return createAuthDatabaseAdapter(runtime, {\n    inTransaction: false,\n    operationTimeoutMs: options?.operationTimeoutMs,\n  });\n}\n\nfunction createAuthDatabaseAdapter(\n  runtime: Pick<AthenaPostgresRuntime, \"inspectPool\" | \"query\" | \"transaction\">,\n  options: { inTransaction: boolean; operationTimeoutMs?: number },\n): AthenaAuthDatabase {\n  const timeoutMs =\n    options.operationTimeoutMs ?? ATHENA_AUTH_DATABASE_OPERATION_TIMEOUT_MS;\n\n  const adapter: AthenaAuthDatabase = {\n    async close() { },\n    inTransaction: options.inTransaction,\n    async query(text, values) {\n      const stats = await runtime.inspectPool();\n      currentAuthRequestTiming()?.setSqlPool(stats);\n      return withAuthDatabaseTimeout(\n        async () => {\n          const started = performance.now();\n          const result = await runtime.query(text, values, {\n            deadlineMs: timeoutMs,\n            workload: \"auth\",\n          });\n          recordSqlTiming(stats.idleCount, performance.now() - started);\n          return assertQueryResult(result, \"runtime.query\");\n        },\n        timeoutMs,\n        stats.idleCount <= 0 ? \"sql_acquire\" : \"sql_exec\",\n      );\n    },\n    async transaction(fn, transactionOptions) {\n      const transactionTimeoutMs =\n        transactionOptions?.operationTimeoutMs ?? timeoutMs;\n      return withAuthDatabaseTimeout(\n        () =>\n          runtime.transaction(\n            async (tx) => {\n              const scoped = createTransactionScopedAuthDatabase(\n                tx,\n                transactionTimeoutMs,\n              );\n              const timeouts =\n                postgresLocalTimeoutStatements(transactionTimeoutMs);\n              await scoped.query(timeouts.lockTimeout);\n              await scoped.query(timeouts.statementTimeout);\n              return fn(scoped);\n            },\n            { deadlineMs: transactionTimeoutMs, workload: \"auth\" },\n          ),\n        transactionTimeoutMs,\n        \"transaction\",\n      );\n    },\n  };\n  return adapter;\n}\n\nfunction createTransactionScopedAuthDatabase(\n  runtime: Pick<AthenaPostgresRuntime, \"inspectPool\" | \"query\" | \"transaction\">,\n  operationTimeoutMs: number,\n): AthenaAuthDatabase {\n  return createAuthDatabaseAdapter(runtime, {\n    inTransaction: true,\n    operationTimeoutMs,\n  });\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\";\nimport type {\n  MigrationExecutionTransform,\n  MigrationFile,\n} from \"./types.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\nexport const IDENTITY_MIGRATION_EXECUTION_TRANSFORM: MigrationExecutionTransform =\n  Object.freeze({\n    id: \"athena.migration.identity\",\n    version: \"1\",\n  });\n\nconst INLINE_SQL_MIGRATION_EXECUTION_TRANSFORM: MigrationExecutionTransform =\n  Object.freeze({\n    id: \"athena.migration.inline-sql\",\n    version: \"1\",\n  });\n\nexport interface MigrationExecutionMetadata {\n  checksum: string;\n  sql: string;\n  transform: MigrationExecutionTransform;\n}\n\nexport function resolveMigrationExecution(\n  migration: Pick<MigrationFile, \"executionSql\" | \"executionTransform\" | \"sql\">\n): MigrationExecutionMetadata {\n  if (\n    migration.executionTransform !== undefined &&\n    migration.executionSql === undefined\n  ) {\n    throw new Error(\"executionTransform requires executionSql\");\n  }\n  const sql = migration.executionSql ?? migration.sql;\n  const transform =\n    migration.executionTransform ??\n    (migration.executionSql === undefined\n      ? IDENTITY_MIGRATION_EXECUTION_TRANSFORM\n      : INLINE_SQL_MIGRATION_EXECUTION_TRANSFORM);\n\n  return {\n    checksum: checksumMigrationSql(sql),\n    sql,\n    transform,\n  };\n}\n","import { AthenaAuthRuntimeError } from \"./errors.ts\";\nimport type {\n  AuthMemberRow,\n  AuthOrganizationRow,\n  AuthSessionRow,\n} 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  \"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  \"The founding owner can't leave the organization.\";\nexport const LAST_MEMBER_LEAVE_FORBIDDEN =\n  \"The last member can't leave the organization.\";\nexport const LAST_OWNER_LEAVE_FORBIDDEN =\n  \"The sole owner can't leave the organization.\";\nexport const LAST_OWNER_REMOVE_FORBIDDEN =\n  \"The sole owner can't be removed from the organization.\";\nexport const LAST_OWNER_ROLE_LOCKED = \"The sole owner role cannot be changed.\";\nexport const SELF_ELEVATION_FORBIDDEN =\n  \"Members cannot assign themselves a higher role.\";\nexport const GRANT_HIGHER_ROLE_FORBIDDEN =\n  \"Cannot assign a role above your own.\";\nexport const GRANT_OWNER_FORBIDDEN =\n  \"Only organization owners can assign the owner role.\";\n\nfunction membershipRank(role: string): number {\n  const key = role.trim().toLowerCase();\n  if (key === \"owner\" || key === \"organization_owner\") {\n    return 3;\n  }\n  if (key === \"admin\" || key === \"organization_admin\") {\n    return 2;\n  }\n  if (key === \"member\" || key === \"organization_member\") {\n    return 1;\n  }\n  if (key.startsWith(\"custom_\")) {\n    return 2;\n  }\n  return 0;\n}\n\nexport function assertMemberRoleAssignmentAllowed(input: {\n  actorCanAssignOwner: boolean;\n  actorRole: string;\n  actorUserId: string;\n  nextRole: string;\n  targetRole: string;\n  targetUserId: string;\n}): void {\n  const nextRank = membershipRank(input.nextRole);\n  const actorRank = membershipRank(input.actorRole);\n  if (\n    input.actorUserId === input.targetUserId &&\n    nextRank > membershipRank(input.targetRole)\n  ) {\n    throw AthenaAuthRuntimeError.forbidden(SELF_ELEVATION_FORBIDDEN);\n  }\n  if (nextRank > actorRank) {\n    throw AthenaAuthRuntimeError.forbidden(GRANT_HIGHER_ROLE_FORBIDDEN);\n  }\n  if (nextRank >= 3 && !input.actorCanAssignOwner) {\n    throw AthenaAuthRuntimeError.forbidden(GRANT_OWNER_FORBIDDEN);\n  }\n}\n\nexport function resolveFoundingOwnerUserId(\n  organization: Pick<AuthOrganizationRow, \"created_by_user_id\"> | undefined,\n  members: readonly AuthMemberRow[]\n): string | null {\n  const stored =\n    typeof organization?.created_by_user_id === \"string\"\n      ? organization.created_by_user_id.trim()\n      : \"\";\n  if (stored.length > 0) {\n    return stored;\n  }\n  const owners = members\n    .filter((member) => member.role === \"owner\")\n    .slice()\n    .sort((left, right) => {\n      const byTime =\n        new Date(left.created_at).getTime() -\n        new Date(right.created_at).getTime();\n      if (byTime !== 0) {\n        return byTime;\n      }\n      return left.id.localeCompare(right.id);\n    });\n  return owners[0]?.user_id ?? null;\n}\n\nexport function assertFoundingOwnerMutationAllowed(input: {\n  kind: \"leave\" | \"remove\" | \"role\";\n  members: readonly AuthMemberRow[];\n  nextRole?: string;\n  organization: AuthOrganizationRow | undefined;\n  targetUserId: string;\n}): void {\n  if (input.kind === \"role\" && input.nextRole === \"owner\") {\n    return;\n  }\n  const founderId = resolveFoundingOwnerUserId(\n    input.organization,\n    input.members\n  );\n  if (founderId !== input.targetUserId) {\n    return;\n  }\n  if (input.kind === \"leave\") {\n    throw AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_LEAVE_FORBIDDEN);\n  }\n  if (input.kind === \"role\") {\n    throw AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_ROLE_LOCKED);\n  }\n  throw AthenaAuthRuntimeError.forbidden(FOUNDING_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport function assertLastOwnerMutationAllowed(input: {\n  kind: \"leave\" | \"remove\" | \"role\";\n  members: readonly AuthMemberRow[];\n  nextRole?: string;\n  targetUserId: string;\n}): void {\n  if (input.members.length <= 1 && input.kind !== \"role\") {\n    throw AthenaAuthRuntimeError.forbidden(LAST_MEMBER_LEAVE_FORBIDDEN);\n  }\n  const owners = input.members.filter((member) => member.role === \"owner\");\n  const target = input.members.find(\n    (member) => member.user_id === input.targetUserId\n  );\n  if (target?.role !== \"owner\") {\n    return;\n  }\n  if (owners.length > 1) {\n    return;\n  }\n  if (input.kind === \"role\" && input.nextRole === \"owner\") {\n    return;\n  }\n  if (input.kind === \"leave\") {\n    throw AthenaAuthRuntimeError.forbidden(LAST_OWNER_LEAVE_FORBIDDEN);\n  }\n  if (input.kind === \"role\") {\n    throw AthenaAuthRuntimeError.forbidden(LAST_OWNER_ROLE_LOCKED);\n  }\n  throw AthenaAuthRuntimeError.forbidden(LAST_OWNER_REMOVE_FORBIDDEN);\n}\n\nexport async function normalizeSessionActiveOrganization(\n  session: AuthSessionRow,\n  stores: {\n    getMember(\n      organizationId: string,\n      userId: string\n    ): Promise<AuthMemberRow | undefined>;\n    setSessionActiveOrganization(\n      token: string,\n      organizationId: string | null\n    ): Promise<void>;\n  }\n): Promise<AuthSessionRow> {\n  const organizationId = session.active_organization_id;\n  if (!organizationId) {\n    return session;\n  }\n  const membership = await stores.getMember(organizationId, session.user_id);\n  if (membership) {\n    return session;\n  }\n  await stores.setSessionActiveOrganization(session.token, null);\n  return {\n    ...session,\n    active_organization_id: null,\n  };\n}\n","import type { AthenaRightKey } from \"./key.ts\";\n\nfunction splitOnce(value: string): [string, string] | undefined {\n  const index = value.indexOf(\".\");\n  if (index < 0) {\n    return;\n  }\n  return [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  granted: AthenaRightKey,\n  required: AthenaRightKey\n): boolean {\n  if (granted === \"*\" || granted === required) {\n    return true;\n  }\n\n  const grantedParts = splitOnce(granted);\n  if (grantedParts === undefined) {\n    return false;\n  }\n  const requiredParts = splitOnce(required);\n  if (requiredParts === undefined) {\n    return false;\n  }\n\n  const [grantedResource, grantedAction] = grantedParts;\n  const [requiredResource, requiredAction] = requiredParts;\n\n  if (grantedResource === \"*\" && grantedAction === requiredAction) {\n    return true;\n  }\n  if (grantedResource === requiredResource && grantedAction === \"*\") {\n    return true;\n  }\n  if (grantedResource === \"gateway\" && grantedAction === requiredAction) {\n    return true;\n  }\n  if (grantedResource === \"gateway\" && grantedAction === \"*\") {\n    return true;\n  }\n\n  return false;\n}\n\nexport function missingRequiredRights(\n  granted: readonly AthenaRightKey[],\n  required: readonly AthenaRightKey[]\n): AthenaRightKey[] {\n  return required.filter(\n    (requiredKey) =>\n      !granted.some((grantedKey) => rightMatches(grantedKey, requiredKey))\n  );\n}\n","import type { AthenaDevtoolsAuthorizationDecisionInspector } from \"../../devtools/protocol/authorization.ts\";\nimport type { AthenaDevtoolsAuthorizationEvent } from \"../../devtools/protocol/authorization-events.ts\";\nimport {\n  type AthenaRightKey,\n  tryParseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport { missingRequiredRights, rightMatches } from \"../../rights/matching.ts\";\nimport type { AthenaPrincipal } from \"../data/principal.ts\";\n\nconst DECISION_CAPACITY = 256;\nconst EVENT_CAPACITY = 256;\n\nconst decisions: AthenaDevtoolsAuthorizationDecisionInspector[] = [];\nconst timeline: AthenaDevtoolsAuthorizationEvent[] = [];\n\nfunction parseKeys(values: readonly string[]): AthenaRightKey[] {\n  const keys: AthenaRightKey[] = [];\n  for (const value of values) {\n    const parsed = tryParseAthenaRightKey(value);\n    if (parsed) {\n      keys.push(parsed);\n    }\n  }\n  return keys;\n}\n\nfunction pushBounded<T>(items: T[], item: T, capacity: number): void {\n  items.push(item);\n  while (items.length > capacity) {\n    items.shift();\n  }\n}\n\nexport function recordAthenaAuthorizationTimelineEvent(\n  event: Omit<AthenaDevtoolsAuthorizationEvent, \"occurredAt\"> & {\n    occurredAt?: string;\n  }\n): void {\n  pushBounded(\n    timeline,\n    {\n      event: event.event,\n      occurredAt: event.occurredAt ?? new Date().toISOString(),\n      organizationId: event.organizationId,\n      roleId: event.roleId,\n      roleKey: event.roleKey,\n      targetId: event.targetId,\n      userId: event.userId,\n    },\n    EVENT_CAPACITY\n  );\n}\n\nexport function recordAthenaAuthorizationDecision(input: {\n  domain: AthenaDevtoolsAuthorizationDecisionInspector[\"domain\"];\n  held: readonly string[];\n  operation: string;\n  organizationId?: string | null;\n  policyOutcome?: string | null;\n  policyIds?: readonly string[];\n  requestId?: string | null;\n  required: readonly string[];\n  resource?: string | null;\n  sessionId?: string | null;\n  timingMs?: number | null;\n  traceId?: string | null;\n  userId?: string | null;\n}): AthenaDevtoolsAuthorizationDecisionInspector {\n  const held = parseKeys(input.held);\n  const required = parseKeys(input.required);\n  const missing = missingRequiredRights(held, required);\n  const matched = required.flatMap((requiredKey) => {\n    const holder = held.find((granted) => rightMatches(granted, requiredKey));\n    if (!holder) {\n      return [];\n    }\n    const matchKind: \"exact\" | \"pattern\" =\n      holder === requiredKey ? \"exact\" : \"pattern\";\n    return [\n      {\n        held: holder,\n        matchKind,\n        required: requiredKey,\n      },\n    ];\n  });\n  const outcome = missing.length === 0 ? \"allow\" : \"deny\";\n  const decision: AthenaDevtoolsAuthorizationDecisionInspector = {\n    authoritySources: [],\n    decisionId: `authz-decision-${Date.now()}-${decisions.length}`,\n    domain: input.domain,\n    effectiveRights: held,\n    matched,\n    missing,\n    operation: input.operation,\n    outcome,\n    policy: {\n      outcome: input.policyOutcome ?? null,\n      policyIds: [...(input.policyIds ?? [])],\n    },\n    requestId: input.requestId ?? null,\n    required: { allOf: required },\n    resource: input.resource ?? null,\n    subject: {\n      kind: \"principal\",\n      organizationId: input.organizationId ?? null,\n      sessionId: input.sessionId ?? null,\n      userId: input.userId ?? null,\n    },\n    timingMs: input.timingMs ?? null,\n    traceId: input.traceId ?? null,\n  };\n  pushBounded(decisions, decision, DECISION_CAPACITY);\n  recordAthenaAuthorizationTimelineEvent({\n    event:\n      outcome === \"allow\"\n        ? \"authorization.decision.allowed\"\n        : \"authorization.decision.denied\",\n    organizationId: input.organizationId ?? null,\n    roleId: null,\n    roleKey: null,\n    targetId: decision.decisionId,\n    userId: input.userId ?? null,\n  });\n  return decision;\n}\n\nexport function recordAthenaAuthorizationDecisionFromPrincipal(input: {\n  domain: AthenaDevtoolsAuthorizationDecisionInspector[\"domain\"];\n  operation: string;\n  principal: Pick<\n    AthenaPrincipal,\n    \"organizationId\" | \"rights\" | \"sessionId\" | \"userId\"\n  >;\n  required: readonly string[];\n  resource?: string | null;\n}): AthenaDevtoolsAuthorizationDecisionInspector {\n  return recordAthenaAuthorizationDecision({\n    domain: input.domain,\n    held: input.principal.rights,\n    operation: input.operation,\n    organizationId: input.principal.organizationId,\n    required: input.required,\n    resource: input.resource,\n    sessionId: input.principal.sessionId,\n    userId: input.principal.userId,\n  });\n}\n\nexport function listAthenaAuthorizationDecisions(\n  limit = 50\n): readonly AthenaDevtoolsAuthorizationDecisionInspector[] {\n  return decisions.slice(-Math.max(0, limit)).reverse();\n}\n\nexport function listAthenaAuthorizationTimeline(\n  limit = 50\n): readonly AthenaDevtoolsAuthorizationEvent[] {\n  return timeline.slice(-Math.max(0, limit)).reverse();\n}\n","export const ATHENA_BILLING_HTTP_ERROR = \"ATHENA_BILLING_HTTP_ERROR\" as const;\n\nexport class AthenaBillingError extends Error {\n  body: unknown;\n  code: string;\n  endpoint: string;\n  method: string;\n  status: number;\n\n  constructor(input: {\n    body: unknown;\n    code?: string;\n    endpoint: string;\n    message: string;\n    method: string;\n    status: number;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingError\";\n    this.body = input.body;\n    this.code = input.code ?? ATHENA_BILLING_HTTP_ERROR;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.status = input.status;\n  }\n}\n\nexport const ATHENA_BILLING_OPERATION_UNAVAILABLE =\n  \"ATHENA_BILLING_OPERATION_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_AUTHORIZATION_DENIED =\n  \"ATHENA_BILLING_AUTHORIZATION_DENIED\" as const;\n\nexport const ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED =\n  \"ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_CONFIGURED =\n  \"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_NOT_REGISTERED =\n  \"ATHENA_BILLING_PROVIDER_NOT_REGISTERED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_MATERIALIZATION_UNSUPPORTED =\n  \"provider_materialization_unsupported\" as const;\n\nexport const ATHENA_BILLING_TARGET_AMBIGUOUS =\n  \"ATHENA_BILLING_TARGET_AMBIGUOUS\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_CONFIG_INVALID =\n  \"ATHENA_BILLING_PROVIDER_CONFIG_INVALID\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SERVER_REQUIRED =\n  \"ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\" as const;\n\nexport const ATHENA_BILLING_PROVIDER_SDK_REQUIRED =\n  \"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_PROVIDER_SLOT_CONFLICT =\n  \"ATHENA_BILLING_PROVIDER_SLOT_CONFLICT\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_UNAVAILABLE =\n  \"ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH =\n  \"ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\" as const;\n\nexport const ATHENA_BILLING_CREDENTIAL_INVALID =\n  \"ATHENA_BILLING_CREDENTIAL_INVALID\" as const;\n\nexport type AthenaBillingProviderErrorCode =\n  | typeof ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\n  | typeof ATHENA_BILLING_PROVIDER_NOT_REGISTERED\n  | typeof ATHENA_BILLING_PROVIDER_MATERIALIZATION_UNSUPPORTED\n  | typeof ATHENA_BILLING_TARGET_AMBIGUOUS\n  | typeof ATHENA_BILLING_PROVIDER_CONFIG_INVALID\n  | typeof ATHENA_BILLING_PROVIDER_SERVER_REQUIRED\n  | typeof ATHENA_BILLING_PROVIDER_SDK_REQUIRED\n  | typeof ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED\n  | typeof ATHENA_BILLING_CONFIG_CONFLICT\n  | typeof ATHENA_BILLING_PROVIDER_SLOT_CONFLICT;\n\nexport type BillingProviderErrorKind =\n  | \"authentication\"\n  | \"authorization\"\n  | \"invalid_request\"\n  | \"not_found\"\n  | \"conflict\"\n  | \"idempotency_conflict\"\n  | \"rate_limited\"\n  | \"provider_unavailable\"\n  | \"network\"\n  | \"timeout\"\n  | \"signature_invalid\"\n  | \"unsupported_operation\"\n  | \"unsupported_currency\"\n  | \"unsupported_payment_method\"\n  | \"customer_action_required\"\n  | \"payment_declined\"\n  | \"resource_state_conflict\"\n  | \"serialization\"\n  | \"unknown\";\n\nexport type BillingRetryDisposition =\n  | \"never\"\n  | \"safe\"\n  | \"reconcile_first\"\n  | \"customer_action_required\";\n\nexport type AthenaBillingCredentialErrorCode =\n  | typeof ATHENA_BILLING_CREDENTIAL_UNAVAILABLE\n  | typeof ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH\n  | typeof ATHENA_BILLING_CREDENTIAL_INVALID;\n\nexport class AthenaBillingCredentialError extends Error {\n  readonly provider: string;\n  readonly environment: \"test\" | \"live\";\n  readonly code: AthenaBillingCredentialErrorCode;\n\n  constructor(input: {\n    code: AthenaBillingCredentialErrorCode;\n    message: string;\n    provider: string;\n    environment: \"test\" | \"live\";\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingCredentialError\";\n    this.code = input.code;\n    this.provider = input.provider;\n    this.environment = input.environment;\n  }\n}\n\nexport function isAthenaBillingCredentialError(\n  error: unknown\n): error is AthenaBillingCredentialError {\n  return error instanceof AthenaBillingCredentialError;\n}\n\nexport class AthenaBillingProviderError extends Error {\n  readonly code: AthenaBillingProviderErrorCode;\n\n  constructor(input: {\n    code: AthenaBillingProviderErrorCode;\n    message: string;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingProviderError\";\n    this.code = input.code;\n  }\n}\n\nexport function isAthenaBillingProviderError(\n  error: unknown\n): error is AthenaBillingProviderError {\n  return error instanceof AthenaBillingProviderError;\n}\n\nexport type AthenaBillingCapabilityErrorCode =\n  typeof ATHENA_BILLING_OPERATION_UNAVAILABLE;\n\nexport class AthenaBillingAuthorizationError extends AthenaBillingError {\n  readonly errorNumber: number;\n  readonly missing: readonly string[];\n  readonly operation: string;\n\n  constructor(input: {\n    missing: readonly string[];\n    operation: string;\n  }) {\n    super({\n      body: { missing: input.missing, operation: input.operation },\n      code: ATHENA_BILLING_AUTHORIZATION_DENIED,\n      endpoint: \"\",\n      message:\n        input.missing.length === 0\n          ? `Billing operation ${input.operation} denied (no subject binding)`\n          : `Billing operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n      method: \"POST\",\n      status: 403,\n    });\n    this.name = \"AthenaBillingAuthorizationError\";\n    this.errorNumber = 4014;\n    this.missing = input.missing;\n    this.operation = input.operation;\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaBillingAuthorizationError(\n  error: unknown\n): error is AthenaBillingAuthorizationError {\n  if (error instanceof AthenaBillingAuthorizationError) {\n    return true;\n  }\n  if (!isRecord(error)) {\n    return false;\n  }\n  return (\n    error.code === ATHENA_BILLING_AUTHORIZATION_DENIED &&\n    error.errorNumber === 4014 &&\n    typeof error.operation === \"string\" &&\n    Array.isArray(error.missing)\n  );\n}\n\nexport class AthenaBillingCapabilityError extends Error {\n  readonly code: AthenaBillingCapabilityErrorCode;\n  readonly operation: string;\n  readonly reason: string;\n\n  constructor(input: {\n    message?: string;\n    operation: string;\n    reason: string;\n  }) {\n    super(\n      input.message ??\n      `Billing operation ${input.operation} is unavailable (${input.reason})`\n    );\n    this.name = \"AthenaBillingCapabilityError\";\n    this.code = ATHENA_BILLING_OPERATION_UNAVAILABLE;\n    this.operation = input.operation;\n    this.reason = input.reason;\n  }\n}\n\nexport function isAthenaBillingCapabilityError(\n  error: unknown\n): error is AthenaBillingCapabilityError {\n  if (error instanceof AthenaBillingCapabilityError) {\n    return true;\n  }\n  if (!isRecord(error)) {\n    return false;\n  }\n  return (\n    error.code === ATHENA_BILLING_OPERATION_UNAVAILABLE &&\n    typeof error.operation === \"string\" &&\n    typeof error.reason === \"string\"\n  );\n}\n\nexport class AthenaBillingProviderRequestError extends Error {\n  readonly provider: string;\n  readonly kind: BillingProviderErrorKind;\n  readonly retry: BillingRetryDisposition;\n  readonly operation?: string;\n  readonly status?: number;\n  readonly details?: unknown;\n\n  constructor(input: {\n    message: string;\n    provider: string;\n    kind: BillingProviderErrorKind;\n    retry: BillingRetryDisposition;\n    operation?: string;\n    status?: number;\n    details?: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingProviderRequestError\";\n    this.provider = input.provider;\n    this.kind = input.kind;\n    this.retry = input.retry;\n    this.operation = input.operation;\n    this.status = input.status;\n    this.details = input.details;\n  }\n\n  toJSON(): Record<string, unknown> {\n    return {\n      details: this.details,\n      kind: this.kind,\n      message: this.message,\n      name: this.name,\n      operation: this.operation,\n      provider: this.provider,\n      retry: this.retry,\n      status: this.status,\n    };\n  }\n}\n\nexport function isAthenaBillingProviderRequestError(\n  error: unknown\n): error is AthenaBillingProviderRequestError {\n  return error instanceof AthenaBillingProviderRequestError;\n}\n\nexport function billingProviderErrorKindFromHttp(input: {\n  status?: number;\n  key?: string;\n  detail?: string;\n}): BillingProviderErrorKind {\n  const key = input.key?.trim().toLowerCase();\n  if (key === \"authentication\" || key === \"unauthorized\") {\n    return \"authentication\";\n  }\n  if (key === \"forbidden\") {\n    return \"authorization\";\n  }\n  if (key === \"not_found\") {\n    return \"not_found\";\n  }\n  if (key === \"conflict\") {\n    return \"conflict\";\n  }\n  if (key === \"idempotency_conflict\") {\n    return \"idempotency_conflict\";\n  }\n  if (key === \"rate_limited\") {\n    return \"rate_limited\";\n  }\n  if (key === \"validation_error\" || key === \"unprocessable_entity\") {\n    return \"invalid_request\";\n  }\n  if (key === \"payment_declined\") {\n    return \"payment_declined\";\n  }\n  if (key === \"customer_action_required\") {\n    return \"customer_action_required\";\n  }\n  if (input.status === 401) {\n    return \"authentication\";\n  }\n  if (input.status === 403) {\n    return \"authorization\";\n  }\n  if (input.status === 404) {\n    return \"not_found\";\n  }\n  if (input.status === 409) {\n    return \"conflict\";\n  }\n  if (input.status === 422) {\n    return \"invalid_request\";\n  }\n  if (input.status === 429) {\n    return \"rate_limited\";\n  }\n  if (input.status != null && input.status >= 500 && input.status <= 599) {\n    return \"provider_unavailable\";\n  }\n  const detail = (input.detail ?? \"\").toLowerCase();\n  if (detail.includes(\"timeout\")) {\n    return \"timeout\";\n  }\n  if (detail.includes(\"declined\")) {\n    return \"payment_declined\";\n  }\n  return \"unknown\";\n}\n","export const PROCESS_INVOCATION_BRAND =\n  \"athena.billing.invocation.process\" as const;\n\nexport interface BillingProcessInvocationAuthority {\n  readonly brand: typeof PROCESS_INVOCATION_BRAND;\n  readonly kind: \"process\";\n}\n\nexport interface BillingSessionInvocationAuthority {\n  readonly kind: \"session\";\n}\n\nexport type BillingInvocationAuthority =\n  | BillingProcessInvocationAuthority\n  | BillingSessionInvocationAuthority;\n\nexport const PROCESS_BILLING_INVOCATION: BillingProcessInvocationAuthority =\n  Object.freeze({\n    brand: PROCESS_INVOCATION_BRAND,\n    kind: \"process\",\n  });\n\nexport const SESSION_BILLING_INVOCATION: BillingSessionInvocationAuthority =\n  Object.freeze({\n    kind: \"session\",\n  });\n\nexport function isProcessBillingInvocation(\n  authority: BillingInvocationAuthority | { readonly kind?: string } | undefined\n): authority is BillingProcessInvocationAuthority {\n  return (\n    authority != null &&\n    authority.kind === \"process\" &&\n    \"brand\" in authority &&\n    (authority as BillingProcessInvocationAuthority).brand ===\n      PROCESS_INVOCATION_BRAND\n  );\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  authority?: BillingInvocationAuthority | { readonly kind?: string };\n}): BillingInvocationAuthority {\n  if (isProcessBillingInvocation(input.authority)) {\n    return PROCESS_BILLING_INVOCATION;\n  }\n  return SESSION_BILLING_INVOCATION;\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { BillingOperation } from \"./capabilities.ts\";\n\nexport type BillingSubjectScope = \"self\" | \"merchant\" | \"admin\";\nexport type BillingExecutionAuthority = \"session\" | \"process\";\n\nexport interface BillingOperationPolicy {\n  readonly executionAuthority: BillingExecutionAuthority;\n  readonly operation: BillingOperation;\n  readonly requiredRights: readonly AthenaRightKey[];\n  readonly subjectScope: BillingSubjectScope;\n}\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  \"billing.self.subscription.read\"\n);\nconst SELF_SUBSCRIPTION_WRITE = parseAthenaRightKey(\n  \"billing.self.subscription.write\"\n);\nconst SELF_CHECKOUT_WRITE = parseAthenaRightKey(\"billing.self.checkout.write\");\nconst ADMIN_RECONCILIATION_WRITE = parseAthenaRightKey(\n  \"billing.admin.reconciliation.write\"\n);\nconst ADMIN_WEBHOOKS_READ = parseAthenaRightKey(\"billing.admin.webhooks.read\");\nconst ADMIN_WEBHOOKS_WRITE = parseAthenaRightKey(\n  \"billing.admin.webhooks.write\"\n);\nconst ADMIN_INGESTION_READ = parseAthenaRightKey(\n  \"billing.admin.ingestion.read\"\n);\nconst ADMIN_CONFLICTS_WRITE = parseAthenaRightKey(\n  \"billing.admin.conflicts.write\"\n);\n\nfunction policy(\n  operation: BillingOperation,\n  subjectScope: BillingSubjectScope,\n  requiredRights: readonly AthenaRightKey[]\n): BillingOperationPolicy {\n  return {\n    executionAuthority: subjectScope === \"self\" ? \"session\" : \"process\",\n    operation,\n    requiredRights,\n    subjectScope,\n  };\n}\n\nconst POLICIES: readonly BillingOperationPolicy[] = Object.freeze([\n  policy(\"customers.create\", \"merchant\", [CUSTOMERS_WRITE]),\n  policy(\"customers.delete\", \"merchant\", [CUSTOMERS_WRITE]),\n  policy(\"customers.get\", \"merchant\", [CUSTOMERS_READ]),\n  policy(\"customers.list\", \"merchant\", [CUSTOMERS_READ]),\n  policy(\"customers.update\", \"merchant\", [CUSTOMERS_WRITE]),\n  policy(\"invoices.get\", \"merchant\", [SALES_INVOICES_READ]),\n  policy(\"invoices.list\", \"merchant\", [SALES_INVOICES_READ]),\n  policy(\"paymentLinks.create\", \"merchant\", [PAYMENT_LINKS_WRITE]),\n  policy(\"paymentLinks.delete\", \"merchant\", [PAYMENT_LINKS_WRITE]),\n  policy(\"paymentLinks.get\", \"merchant\", [PAYMENT_LINKS_READ]),\n  policy(\"paymentLinks.list\", \"merchant\", [PAYMENT_LINKS_READ]),\n  policy(\"paymentLinks.update\", \"merchant\", [PAYMENT_LINKS_WRITE]),\n  policy(\"payments.cancel\", \"merchant\", [PAYMENTS_WRITE]),\n  policy(\"payments.create\", \"merchant\", [PAYMENTS_WRITE]),\n  policy(\"payments.get\", \"merchant\", [PAYMENTS_READ]),\n  policy(\"payments.list\", \"merchant\", [PAYMENTS_READ]),\n  policy(\"refunds.cancel\", \"merchant\", [REFUNDS_WRITE]),\n  policy(\"refunds.create\", \"merchant\", [REFUNDS_WRITE]),\n  policy(\"refunds.get\", \"merchant\", [REFUNDS_READ]),\n  policy(\"refunds.list\", \"merchant\", [REFUNDS_READ]),\n  policy(\"subscriptions.cancel\", \"merchant\", [SUBSCRIPTIONS_WRITE]),\n  policy(\"subscriptions.create\", \"merchant\", [SUBSCRIPTIONS_WRITE]),\n  policy(\"subscriptions.get\", \"merchant\", [SUBSCRIPTIONS_READ]),\n  policy(\"subscriptions.list\", \"merchant\", [SUBSCRIPTIONS_READ]),\n  policy(\"subscriptions.update\", \"merchant\", [SUBSCRIPTIONS_WRITE]),\n  policy(\"webhooks.create\", \"merchant\", [WEBHOOKS_WRITE]),\n  policy(\"webhooks.delete\", \"merchant\", [WEBHOOKS_WRITE]),\n  policy(\"webhooks.get\", \"merchant\", [WEBHOOKS_READ]),\n  policy(\"webhooks.list\", \"merchant\", [WEBHOOKS_READ]),\n  policy(\"webhooks.test\", \"merchant\", [WEBHOOKS_WRITE]),\n  policy(\"webhooks.update\", \"merchant\", [WEBHOOKS_WRITE]),\n  policy(\"products.list\", \"self\", [CATALOG_READ]),\n  policy(\"prices.list\", \"self\", [CATALOG_READ]),\n  policy(\"relations.list\", \"self\", [CATALOG_READ]),\n  policy(\"checkout.create\", \"merchant\", [PAYMENTS_WRITE]),\n  policy(\"self.invoices.list\", \"self\", [SELF_INVOICES_READ]),\n  policy(\"self.invoices.get\", \"self\", [SELF_INVOICES_READ]),\n  policy(\"self.payments.list\", \"self\", [SELF_PAYMENTS_READ]),\n  policy(\"self.payments.get\", \"self\", [SELF_PAYMENTS_READ]),\n  policy(\"self.subscription.get\", \"self\", [SELF_SUBSCRIPTION_READ]),\n  policy(\"self.subscription.cancel\", \"self\", [SELF_SUBSCRIPTION_WRITE]),\n  policy(\"self.subscription.enroll\", \"self\", [SELF_SUBSCRIPTION_WRITE]),\n  policy(\"self.subscription.change\", \"self\", [SELF_SUBSCRIPTION_WRITE]),\n  policy(\"self.checkout.create\", \"self\", [SELF_CHECKOUT_WRITE]),\n  policy(\"self.checkout.resume\", \"self\", [SELF_CHECKOUT_WRITE]),\n  policy(\"self.customer.get\", \"self\", [SELF_INVOICES_READ]),\n  policy(\"self.entitlements\", \"self\", [SELF_SUBSCRIPTION_READ]),\n  policy(\"admin.connections.materialize\", \"admin\", [\n    ADMIN_RECONCILIATION_WRITE,\n  ]),\n  policy(\"admin.bootstrap.retry\", \"admin\", [ADMIN_RECONCILIATION_WRITE]),\n  policy(\"admin.conflicts.list\", \"admin\", [ADMIN_CONFLICTS_WRITE]),\n  policy(\"admin.conflicts.resolve\", \"admin\", [ADMIN_CONFLICTS_WRITE]),\n  policy(\"admin.ingestion.health\", \"admin\", [ADMIN_INGESTION_READ]),\n  policy(\"admin.reconciliation.retry\", \"admin\", [ADMIN_RECONCILIATION_WRITE]),\n  policy(\"admin.reconciliation.run\", \"admin\", [ADMIN_RECONCILIATION_WRITE]),\n  policy(\"admin.webhooks.reconcile\", \"admin\", [ADMIN_WEBHOOKS_WRITE]),\n  policy(\"admin.webhooks.status\", \"admin\", [ADMIN_WEBHOOKS_READ]),\n  policy(\"admin.webhooks.verify\", \"admin\", [ADMIN_WEBHOOKS_WRITE]),\n]);\n\nconst POLICY_BY_OPERATION = Object.freeze(\n  Object.fromEntries(POLICIES.map((entry) => [entry.operation, entry]))\n) as Record<BillingOperation, BillingOperationPolicy>;\n\nexport function billingOperationPolicy(\n  operation: BillingOperation\n): BillingOperationPolicy {\n  return POLICY_BY_OPERATION[operation];\n}\n\nexport function listBillingOperationPolicies(): readonly BillingOperationPolicy[] {\n  return POLICIES;\n}\n\nexport function isSessionSubjectBillingOperation(\n  operation: BillingOperation\n): boolean {\n  return billingOperationPolicy(operation).subjectScope === \"self\";\n}\n","import { type AthenaRightKey, parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport { recordAthenaAuthorizationDecisionFromPrincipal } from \"../../runtime/authorization/decisions.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingAuthorizationError } from \"../errors.ts\";\nimport type {\n  BillingCapabilities,\n  BillingOperation,\n  BillingOperationCapability,\n} from \"./capabilities.ts\";\nimport type { BillingInvocationAuthority } from \"./invocation-authority.ts\";\nimport {\n  isProcessBillingInvocation,\n  SESSION_BILLING_INVOCATION,\n} from \"./invocation-authority.ts\";\nimport {\n  billingOperationPolicy,\n  isSessionSubjectBillingOperation,\n  listBillingOperationPolicies,\n} from \"./operation-policy.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  \"billing.self.subscription.read\"\n);\nconst SELF_SUBSCRIPTION_WRITE = parseAthenaRightKey(\n  \"billing.self.subscription.write\"\n);\nconst SELF_CHECKOUT_WRITE = parseAthenaRightKey(\"billing.self.checkout.write\");\nconst ADMIN_RECONCILIATION_WRITE = parseAthenaRightKey(\n  \"billing.admin.reconciliation.write\"\n);\nconst ADMIN_WEBHOOKS_READ = parseAthenaRightKey(\"billing.admin.webhooks.read\");\nconst ADMIN_WEBHOOKS_WRITE = parseAthenaRightKey(\n  \"billing.admin.webhooks.write\"\n);\nconst ADMIN_INGESTION_READ = parseAthenaRightKey(\n  \"billing.admin.ingestion.read\"\n);\nconst ADMIN_CONFLICTS_WRITE = parseAthenaRightKey(\n  \"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  CATALOG_READ,\n  PAYMENTS_READ,\n  PAYMENTS_WRITE,\n  CUSTOMERS_READ,\n  CUSTOMERS_WRITE,\n  REFUNDS_READ,\n  REFUNDS_WRITE,\n  SUBSCRIPTIONS_READ,\n  SUBSCRIPTIONS_WRITE,\n  PAYMENT_LINKS_READ,\n  PAYMENT_LINKS_WRITE,\n  SALES_INVOICES_READ,\n  WEBHOOKS_READ,\n  WEBHOOKS_WRITE,\n  SELF_INVOICES_READ,\n  SELF_PAYMENTS_READ,\n  SELF_SUBSCRIPTION_READ,\n  SELF_SUBSCRIPTION_WRITE,\n  SELF_CHECKOUT_WRITE,\n  ADMIN_RECONCILIATION_WRITE,\n  ADMIN_WEBHOOKS_READ,\n  ADMIN_WEBHOOKS_WRITE,\n  ADMIN_INGESTION_READ,\n  ADMIN_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  authenticated: true,\n  grants: [],\n  rights: BILLING_DIALECT_RIGHTS,\n  userId: \"athena.billing.process\",\n};\n\nexport const BILLING_OPERATION_RIGHTS: Record<\n  BillingOperation,\n  readonly AthenaRightKey[]\n> = Object.fromEntries(\n  listBillingOperationPolicies().map((entry) => [\n    entry.operation,\n    entry.requiredRights,\n  ])\n) as Record<BillingOperation, readonly AthenaRightKey[]>;\n\nexport function isProcessOwnedBillingPrincipal(\n  principal: AthenaPrincipal\n): boolean {\n  return principal === PROCESS_OWNED_BILLING_PRINCIPAL;\n}\n\nexport function requiredBillingRights(\n  operation: BillingOperation\n): readonly AthenaRightKey[] {\n  return 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  principal: AthenaPrincipal,\n  operation: BillingOperation\n): AthenaBillingAuthorizationError | undefined {\n  const required = requiredBillingRights(operation);\n  const missing = missingRequiredRights(principal.rights, required);\n  recordAthenaAuthorizationDecisionFromPrincipal({\n    domain: \"billing\",\n    operation,\n    principal,\n    required,\n    resource: \"billing\",\n  });\n  if (missing.length === 0) {\n    return;\n  }\n  return new AthenaBillingAuthorizationError({\n    missing,\n    operation,\n  });\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  principal: AthenaPrincipal,\n  operation: BillingOperation | string,\n  authority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION\n): AthenaBillingAuthorizationError | undefined {\n  void principal;\n  if (isProcessBillingInvocation(authority)) {\n    return;\n  }\n  if (\n    typeof operation === \"string\" &&\n    isSessionSubjectBillingOperation(operation as BillingOperation)\n  ) {\n    return;\n  }\n  if (typeof operation === \"string\" && operation.startsWith(\"self.\")) {\n    return;\n  }\n  return new AthenaBillingAuthorizationError({\n    missing: [],\n    operation,\n  });\n}\n\nfunction sessionMerchantWrite(operation: BillingOperation): boolean {\n  const policy = billingOperationPolicy(operation);\n  return (\n    policy.subjectScope !== \"self\" &&\n    policy.requiredRights.some((right) => !right.endsWith(\".read\"))\n  );\n}\n\nexport function denyBillingInvocation(\n  principal: AthenaPrincipal,\n  operation: BillingOperation,\n  authority: BillingInvocationAuthority = SESSION_BILLING_INVOCATION\n): AthenaBillingAuthorizationError | undefined {\n  const rightsDenied = authorizeBillingOperation(principal, operation);\n  if (isProcessBillingInvocation(authority) || !sessionMerchantWrite(operation)) {\n    return rightsDenied;\n  }\n  return (\n    rightsDenied ??\n    authorizeBillingSubjectBinding(principal, operation, authority)\n  );\n}\n\nconst RUNTIME_UNAVAILABLE_REASONS = new Set<\n  NonNullable<BillingOperationCapability[\"reason\"]>\n>([\n  \"runtime_unavailable\",\n  \"runtime_initializing\",\n  \"bootstrap_failed\",\n  \"provider_runtime_unavailable\",\n  \"provider_not_configured\",\n  \"configuration_invalid\",\n]);\n\nconst PROVIDER_UNSUPPORTED_REASONS = new Set<\n  NonNullable<BillingOperationCapability[\"reason\"]>\n>([\n  \"unsupported_provider\",\n  \"unsupported_operation\",\n  \"unsupported_by_provider\",\n  \"provider_operation_unsupported\",\n]);\n\nfunction overlayBillingOperationCapability(input: {\n  capability: BillingOperationCapability;\n  operation: BillingOperation;\n  principal: AthenaPrincipal;\n}): BillingOperationCapability {\n  const policy = billingOperationPolicy(input.operation);\n  const missing = missingRequiredRights(\n    input.principal.rights,\n    policy.requiredRights\n  );\n  const authorized = missing.length === 0;\n  const runtimeReason = input.capability.reason;\n  const runtimeAvailable =\n    input.capability.available === true ||\n    (runtimeReason != null && !RUNTIME_UNAVAILABLE_REASONS.has(runtimeReason));\n  const providerSupported =\n    input.capability.available === true ||\n    (runtimeReason != null && !PROVIDER_UNSUPPORTED_REASONS.has(runtimeReason));\n  const available = input.capability.available === true;\n  const effectiveAvailable = authorized && available;\n  const unavailableReason = authorized\n    ? runtimeReason\n    : (\"missing_permission\" as const);\n  return {\n    ...input.capability,\n    authorized,\n    available,\n    effectiveAvailable,\n    missingRights: missing.map(String),\n    providerSupported,\n    reason: available ? undefined : runtimeReason,\n    runtimeAvailable,\n    unavailableReason,\n  };\n}\n\nexport function overlayCallerBillingCapabilities(\n  capabilities: BillingCapabilities,\n  principal: AthenaPrincipal\n): BillingCapabilities {\n  const operations = { ...capabilities.operations };\n  for (const [operation, capability] of Object.entries(operations) as [\n    BillingOperation,\n    BillingOperationCapability | undefined,\n  ][]) {\n    if (capability == null) {\n      continue;\n    }\n    operations[operation] = overlayBillingOperationCapability({\n      capability,\n      operation,\n      principal,\n    });\n  }\n  return { ...capabilities, operations };\n}\n\nexport function callerEffectiveBillingCapability(input: {\n  authority?: BillingInvocationAuthority;\n  capability: BillingOperationCapability;\n  operation: BillingOperation;\n  principal: AthenaPrincipal;\n}): BillingOperationCapability {\n  void input.authority;\n  return overlayBillingOperationCapability(input);\n}\n","import { parseAthenaRightKey } from \"../rights/key.ts\";\nimport type { AthenaRightDefinition } from \"../rights/types.ts\";\n\nconst BILLING_RIGHT_META: Record<\n  string,\n  Pick<\n    AthenaRightDefinition,\n    \"displayName\" | \"description\" | \"scopeKind\" | \"riskLevel\"\n  >\n> = {\n  \"billing.admin.conflicts.write\": {\n    description: \"Resolve billing ingestion conflicts\",\n    displayName: \"Resolve billing conflicts\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.admin.ingestion.read\": {\n    description: \"View billing ingestion health\",\n    displayName: \"View billing ingestion\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.admin.reconciliation.write\": {\n    description: \"Run billing reconciliation\",\n    displayName: \"Run billing reconciliation\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.admin.webhooks.read\": {\n    description: \"View billing webhook status\",\n    displayName: \"View billing webhooks\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.admin.webhooks.write\": {\n    description: \"Reconcile or verify billing webhooks\",\n    displayName: \"Manage billing webhooks\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.catalog.read\": {\n    description: \"List Athena-owned products and prices\",\n    displayName: \"View catalog\",\n    riskLevel: \"low\",\n    scopeKind: \"self\",\n  },\n  \"billing.customers.read\": {\n    description: \"Read merchant customer records\",\n    displayName: \"View customers\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.customers.write\": {\n    description: \"Create or update merchant customers\",\n    displayName: \"Manage customers\",\n    riskLevel: \"elevated\",\n    scopeKind: \"self\",\n  },\n  \"billing.payment-links.read\": {\n    description: \"View payment links\",\n    displayName: \"View payment links\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.payment-links.write\": {\n    description: \"Create or update payment links\",\n    displayName: \"Manage payment links\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.payments.read\": {\n    description: \"List merchant-wide payments\",\n    displayName: \"View all payments\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.payments.write\": {\n    description: \"Create or cancel merchant payments\",\n    displayName: \"Manage payments\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.refunds.read\": {\n    description: \"View refunds\",\n    displayName: \"View refunds\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.refunds.write\": {\n    description: \"Create refunds\",\n    displayName: \"Manage refunds\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.sales-invoices.read\": {\n    description: \"View sales invoices\",\n    displayName: \"View invoices\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.self.checkout.write\": {\n    description: \"Start or resume own checkout\",\n    displayName: \"Checkout\",\n    riskLevel: \"elevated\",\n    scopeKind: \"self\",\n  },\n  \"billing.self.invoices.read\": {\n    description: \"View own invoices\",\n    displayName: \"View own invoices\",\n    riskLevel: \"low\",\n    scopeKind: \"self\",\n  },\n  \"billing.self.payments.read\": {\n    description: \"View payments belonging to the current account\",\n    displayName: \"View own payments\",\n    riskLevel: \"low\",\n    scopeKind: \"self\",\n  },\n  \"billing.self.subscription.read\": {\n    description: \"View own subscription\",\n    displayName: \"View own subscription\",\n    riskLevel: \"low\",\n    scopeKind: \"self\",\n  },\n  \"billing.self.subscription.write\": {\n    description: \"Enroll or cancel own subscription\",\n    displayName: \"Manage own subscription\",\n    riskLevel: \"elevated\",\n    scopeKind: \"self\",\n  },\n  \"billing.subscriptions.read\": {\n    description: \"View merchant subscriptions\",\n    displayName: \"View subscriptions\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.subscriptions.write\": {\n    description: \"Create or cancel merchant subscriptions\",\n    displayName: \"Manage subscriptions\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n  \"billing.webhooks.read\": {\n    description: \"View webhook endpoints\",\n    displayName: \"View webhooks\",\n    riskLevel: \"elevated\",\n    scopeKind: \"platform\",\n  },\n  \"billing.webhooks.write\": {\n    description: \"Create or update webhook endpoints\",\n    displayName: \"Manage webhooks\",\n    riskLevel: \"critical\",\n    scopeKind: \"platform\",\n  },\n};\n\nexport const BILLING_RIGHT_DEFINITIONS: readonly AthenaRightDefinition[] =\n  Object.freeze(\n    Object.entries(BILLING_RIGHT_META)\n      .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))\n      .map(([key, meta]) => ({\n        assignable: true,\n        ...meta,\n        domain: \"billing\",\n        key: parseAthenaRightKey(key),\n      }))\n  );\n","import { parseAthenaRightKey } from \"../rights/key.ts\";\nimport type { AthenaRightDefinition } from \"../rights/types.ts\";\n\nexport const STORAGE_RIGHT_DEFINITIONS: readonly AthenaRightDefinition[] =\n  Object.freeze(\n    (\n      [\n        \"storage.delete\",\n        \"storage.get\",\n        \"storage.head\",\n        \"storage.list\",\n        \"storage.put\",\n      ] as const\n    ).map((key) => ({\n      assignable: true,\n      description: `Storage ${key}`,\n      displayName: key === \"storage.get\" ? \"Read files\" : key,\n      domain: \"storage\",\n      key: parseAthenaRightKey(key),\n      riskLevel: \"low\" as const,\n      scopeKind: \"self\" as const,\n    }))\n  );\n","import type { AthenaRightKey } from \"./key.ts\";\nimport type { AthenaRightDefinition, AthenaRightsIr } from \"./types.ts\";\n\nexport interface AthenaRightsAuthority {\n  readonly byKey: ReadonlyMap<AthenaRightKey, AthenaRightDefinition>;\n  readonly document: AthenaRightsIr;\n}\n\nexport function createAthenaRightsAuthority(\n  document: AthenaRightsIr\n): AthenaRightsAuthority {\n  return {\n    byKey: new Map(\n      document.rights.map((definition) => [definition.key, definition])\n    ),\n    document,\n  };\n}\n","import type { AthenaRightKey } from \"./key.ts\";\n\nexport const ATHENA_RIGHTS_IR_KIND = \"athena.rights\" as const;\nexport const ATHENA_RIGHTS_IR_VERSION = 1 as const;\n\nexport type AthenaRightScopeKind = \"self\" | \"organization\" | \"platform\";\n\nexport type AthenaRightRiskLevel = \"low\" | \"elevated\" | \"critical\";\n\nexport interface AthenaRightDefinition {\n  assignable: boolean;\n  description: string;\n  displayName: string;\n  domain: string;\n  key: AthenaRightKey;\n  riskLevel: AthenaRightRiskLevel;\n  scopeKind: AthenaRightScopeKind;\n}\n\nexport interface AthenaRightsMetadata {\n  provenance?: readonly string[];\n}\n\nexport interface AthenaRightsIr {\n  kind: typeof ATHENA_RIGHTS_IR_KIND;\n  irVersion: typeof ATHENA_RIGHTS_IR_VERSION;\n  metadata: AthenaRightsMetadata;\n  rights: readonly AthenaRightDefinition[];\n}\n","import { parseAthenaRightKey } from \"../key.ts\";\nimport {\n  ATHENA_RIGHTS_IR_KIND,\n  ATHENA_RIGHTS_IR_VERSION,\n  type AthenaRightDefinition,\n  type AthenaRightRiskLevel,\n  type AthenaRightScopeKind,\n  type AthenaRightsIr,\n} from \"../types.ts\";\n\nexport class AthenaRightsIrValidationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AthenaRightsIrValidationError\";\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction rejectUnknownKeys(\n  value: Record<string, unknown>,\n  allowed: readonly string[],\n  label: string\n): void {\n  for (const key of Object.keys(value)) {\n    if (!allowed.includes(key)) {\n      throw new AthenaRightsIrValidationError(\n        `${label} contains unknown field ${key}`\n      );\n    }\n  }\n}\n\nfunction requireEnum<T extends string>(\n  value: unknown,\n  values: readonly T[],\n  label: string\n): T {\n  if (typeof value !== \"string\" || !values.includes(value as T)) {\n    throw new AthenaRightsIrValidationError(`${label} is invalid`);\n  }\n  return value as T;\n}\n\nfunction validateMetadata(value: unknown): {\n  provenance?: string[];\n} {\n  if (!isRecord(value)) {\n    throw new AthenaRightsIrValidationError(\n      \"Rights IR metadata must be an object\"\n    );\n  }\n  rejectUnknownKeys(value, [\"provenance\"], \"metadata\");\n  if (value.provenance === undefined) {\n    return {};\n  }\n  if (\n    !Array.isArray(value.provenance) ||\n    value.provenance.some(\n      (item) =>\n        typeof item !== \"string\" ||\n        item.length === 0 ||\n        item.length > 128 ||\n        item.trim() !== item ||\n        !/^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(item)\n    )\n  ) {\n    throw new AthenaRightsIrValidationError(\n      \"metadata.provenance must contain only strings\"\n    );\n  }\n  return { provenance: [...value.provenance] };\n}\n\nfunction validateDefinition(\n  value: unknown,\n  index: number\n): AthenaRightDefinition {\n  const label = `rights[${index}]`;\n  if (!isRecord(value)) {\n    throw new AthenaRightsIrValidationError(`${label} must be an object`);\n  }\n  rejectUnknownKeys(\n    value,\n    [\n      \"assignable\",\n      \"description\",\n      \"displayName\",\n      \"domain\",\n      \"key\",\n      \"riskLevel\",\n      \"scopeKind\",\n    ],\n    label\n  );\n  if (typeof value.key !== \"string\") {\n    throw new AthenaRightsIrValidationError(`${label}.key is required`);\n  }\n  const key = parseAthenaRightKey(value.key);\n  if (\n    typeof value.domain !== \"string\" ||\n    !/^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$/.test(value.domain)\n  ) {\n    throw new AthenaRightsIrValidationError(`${label}.domain is invalid`);\n  }\n  if (\n    typeof value.displayName !== \"string\" ||\n    value.displayName.trim().length === 0\n  ) {\n    throw new AthenaRightsIrValidationError(\n      `${label}.displayName must be non-empty`\n    );\n  }\n  if (\n    typeof value.description !== \"string\" ||\n    value.description.trim().length === 0\n  ) {\n    throw new AthenaRightsIrValidationError(\n      `${label}.description must be non-empty`\n    );\n  }\n  if (typeof value.assignable !== \"boolean\") {\n    throw new AthenaRightsIrValidationError(\n      `${label}.assignable must be a boolean`\n    );\n  }\n  const riskLevel = requireEnum<AthenaRightRiskLevel>(\n    value.riskLevel,\n    [\"low\", \"elevated\", \"critical\"],\n    `${label}.riskLevel`\n  );\n  const scopeKind = requireEnum<AthenaRightScopeKind>(\n    value.scopeKind,\n    [\"self\", \"organization\", \"platform\"],\n    `${label}.scopeKind`\n  );\n  return {\n    assignable: value.assignable,\n    description: value.description,\n    displayName: value.displayName,\n    domain: value.domain,\n    key,\n    riskLevel,\n    scopeKind,\n  };\n}\n\nexport function validateAthenaRightsIr(value: unknown): AthenaRightsIr {\n  if (!isRecord(value)) {\n    throw new AthenaRightsIrValidationError(\"Rights IR must be an object\");\n  }\n  rejectUnknownKeys(\n    value,\n    [\"kind\", \"irVersion\", \"metadata\", \"rights\"],\n    \"document\"\n  );\n  if (value.kind !== ATHENA_RIGHTS_IR_KIND) {\n    throw new AthenaRightsIrValidationError(\"Rights IR kind is invalid\");\n  }\n  if (value.irVersion !== ATHENA_RIGHTS_IR_VERSION) {\n    throw new AthenaRightsIrValidationError(\"Rights IR version is invalid\");\n  }\n  if (!Array.isArray(value.rights)) {\n    throw new AthenaRightsIrValidationError(\n      \"Rights IR rights must be an array\"\n    );\n  }\n  const rights = value.rights.map(validateDefinition);\n  const keys = new Set<string>();\n  for (const definition of rights) {\n    if (keys.has(definition.key)) {\n      throw new AthenaRightsIrValidationError(\n        `duplicate Right key \"${definition.key}\"`\n      );\n    }\n    keys.add(definition.key);\n  }\n  const metadata = validateMetadata(value.metadata);\n  return {\n    irVersion: ATHENA_RIGHTS_IR_VERSION,\n    kind: ATHENA_RIGHTS_IR_KIND,\n    metadata,\n    rights,\n  };\n}\n","import { parseAthenaRightKey } from \"../key.ts\";\nimport type { AthenaRightDefinition, AthenaRightsIr } from \"../types.ts\";\nimport { validateAthenaRightsIr } from \"./validate.ts\";\n\nfunction compareStrings(left: string, right: string): number {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction canonicalDefinition(\n  definition: AthenaRightDefinition\n): AthenaRightDefinition {\n  return {\n    ...definition,\n    key: parseAthenaRightKey(definition.key),\n  };\n}\n\nexport function canonicalizeAthenaRightsIr(value: unknown): AthenaRightsIr {\n  const validated = validateAthenaRightsIr(value);\n  const provenance = [...new Set(validated.metadata.provenance ?? [])].sort(\n    compareStrings\n  );\n  return {\n    kind: validated.kind,\n    irVersion: validated.irVersion,\n    metadata: provenance.length === 0 ? {} : { provenance },\n    rights: [...validated.rights]\n      .map(canonicalDefinition)\n      .sort((left, right) => compareStrings(left.key, right.key)),\n  };\n}\n","import type { AthenaRightContribution } from \"./contribution.ts\";\nimport { canonicalizeAthenaRightsIr } from \"./ir/canonicalize.ts\";\nimport { athenaRightKeyString, parseAthenaRightKey } from \"./key.ts\";\nimport type {\n  AthenaRightDefinition,\n  AthenaRightsIr,\n  AthenaRightsMetadata,\n} from \"./types.ts\";\nimport { ATHENA_RIGHTS_IR_KIND, ATHENA_RIGHTS_IR_VERSION } from \"./types.ts\";\n\nfunction semanticDefinition(definition: AthenaRightDefinition): string {\n  return JSON.stringify({\n    assignable: definition.assignable,\n    description: definition.description,\n    displayName: definition.displayName,\n    domain: definition.domain,\n    key: athenaRightKeyString(definition.key),\n    riskLevel: definition.riskLevel,\n    scopeKind: definition.scopeKind,\n  });\n}\n\nexport function resolveAthenaRightsIr(\n  contributions: readonly AthenaRightContribution[],\n  metadata: AthenaRightsMetadata = {}\n): AthenaRightsIr {\n  const definitions = new Map<\n    string,\n    { definition: AthenaRightDefinition; sources: Set<string> }\n  >();\n\n  for (const contribution of contributions) {\n    if (\n      contribution.source.length === 0 ||\n      contribution.source.length > 128 ||\n      contribution.source.trim() !== contribution.source ||\n      !/^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(contribution.source)\n    ) {\n      throw new Error(\n        `Invalid Right contribution source \"${contribution.source}\"`\n      );\n    }\n    const key = parseAthenaRightKey(\n      athenaRightKeyString(contribution.definition.key)\n    );\n    const definition = { ...contribution.definition, key };\n    const current = definitions.get(key);\n    if (!current) {\n      definitions.set(key, {\n        definition,\n        sources: new Set([contribution.source]),\n      });\n      continue;\n    }\n    if (\n      semanticDefinition(current.definition) !== semanticDefinition(definition)\n    ) {\n      throw new Error(`Conflicting Right contributions for \"${key}\"`);\n    }\n    current.sources.add(contribution.source);\n  }\n\n  return canonicalizeAthenaRightsIr({\n    irVersion: ATHENA_RIGHTS_IR_VERSION,\n    kind: ATHENA_RIGHTS_IR_KIND,\n    metadata: {\n      provenance: [\n        ...(metadata.provenance ?? []),\n        ...[...definitions.values()].flatMap(({ sources }) => [...sources]),\n      ],\n    },\n    rights: [...definitions.values()].map(({ definition }) => definition),\n  });\n}\n","import { parseAthenaRightKey } from \"./key.ts\";\nimport type { AthenaRightDefinition } from \"./types.ts\";\n\nexport function defineAthenaRight(input: {\n  description: string;\n  displayName: string;\n  domain: string;\n  key: string;\n  risk?: AthenaRightDefinition[\"riskLevel\"];\n  scope: AthenaRightDefinition[\"scopeKind\"];\n  assignable?: boolean;\n}): AthenaRightDefinition {\n  return {\n    assignable: input.assignable !== false,\n    description: input.description,\n    displayName: input.displayName,\n    domain: input.domain,\n    key: parseAthenaRightKey(input.key),\n    riskLevel: input.risk ?? \"low\",\n    scopeKind: input.scope,\n  };\n}\n\nconst ORGANIZATION_RIGHT_SEEDS: readonly [\n  string,\n  string,\n  string,\n  AthenaRightDefinition[\"scopeKind\"],\n  AthenaRightDefinition[\"riskLevel\"],\n][] = [\n  [\n    \"organization.members.read\",\n    \"View members\",\n    \"List organization members and invitations\",\n    \"organization\",\n    \"low\",\n  ],\n  [\n    \"organization.members.write\",\n    \"Manage members\",\n    \"Invite, change role, or remove organization members\",\n    \"organization\",\n    \"elevated\",\n  ],\n  [\n    \"organization.owners.assign\",\n    \"Assign owners\",\n    \"Assign the organization owner role\",\n    \"organization\",\n    \"critical\",\n  ],\n  [\n    \"organization.lifecycle.delete\",\n    \"Delete organization\",\n    \"Delete the organization\",\n    \"organization\",\n    \"critical\",\n  ],\n  [\n    \"organization.members.invite\",\n    \"Invite members\",\n    \"Send organization invitations\",\n    \"organization\",\n    \"elevated\",\n  ],\n  [\n    \"authorization.roles.read\",\n    \"View organization roles\",\n    \"View organization role templates and assignments\",\n    \"organization\",\n    \"low\",\n  ],\n  [\n    \"authorization.roles.write\",\n    \"Manage organization roles\",\n    \"Create or clone organization roles\",\n    \"organization\",\n    \"elevated\",\n  ],\n  [\n    \"authorization.roles.delegate\",\n    \"Delegate organization rights\",\n    \"Delegate organization rights the actor does not hold\",\n    \"organization\",\n    \"critical\",\n  ],\n  [\n    \"authorization.platform.read\",\n    \"View platform roles\",\n    \"View platform role templates\",\n    \"platform\",\n    \"low\",\n  ],\n  [\n    \"authorization.platform.write\",\n    \"Manage platform roles\",\n    \"Assign platform roles\",\n    \"platform\",\n    \"critical\",\n  ],\n  [\n    \"authorization.platform.delegate\",\n    \"Delegate platform rights\",\n    \"Delegate platform rights the actor does not hold\",\n    \"platform\",\n    \"critical\",\n  ],\n];\n\nexport const AUTHORIZATION_RIGHT_DEFINITIONS: readonly AthenaRightDefinition[] =\n  ORGANIZATION_RIGHT_SEEDS.map(\n    ([\n      key,\n      displayName,\n      description,\n      scope,\n      riskLevel,\n    ]): AthenaRightDefinition => ({\n      assignable: true,\n      description,\n      displayName,\n      domain: key.startsWith(\"authorization.\")\n        ? \"authorization\"\n        : \"organization\",\n      key: parseAthenaRightKey(key),\n      riskLevel,\n      scopeKind: scope,\n    })\n  );\n\nexport const ORGANIZATION_MEMBERS_READ = parseAthenaRightKey(\n  \"organization.members.read\"\n);\nexport const ORGANIZATION_OWNERS_ASSIGN = parseAthenaRightKey(\n  \"organization.owners.assign\"\n);\nexport const AUTHORIZATION_ROLES_READ = parseAthenaRightKey(\n  \"authorization.roles.read\"\n);\nexport const AUTHORIZATION_ROLES_DELEGATE = parseAthenaRightKey(\n  \"authorization.roles.delegate\"\n);\nexport const AUTHORIZATION_PLATFORM_READ = parseAthenaRightKey(\n  \"authorization.platform.read\"\n);\nexport const AUTHORIZATION_PLATFORM_DELEGATE = parseAthenaRightKey(\n  \"authorization.platform.delegate\"\n);\nexport const BILLING_PAYMENTS_READ = parseAthenaRightKey(\n  \"billing.payments.read\"\n);\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\n\n/** Browser-safe capability keys. Kept out of `catalog.ts` so snapshot parse does not pull billing/storage catalogs. */\nexport const ORGANIZATION_MEMBERS_WRITE = parseAthenaRightKey(\n  \"organization.members.write\"\n);\nexport const ORGANIZATION_LIFECYCLE_DELETE = parseAthenaRightKey(\n  \"organization.lifecycle.delete\"\n);\nexport const ORGANIZATION_MEMBERS_INVITE = parseAthenaRightKey(\n  \"organization.members.invite\"\n);\nexport const AUTHORIZATION_ROLES_WRITE = parseAthenaRightKey(\n  \"authorization.roles.write\"\n);\nexport const AUTHORIZATION_PLATFORM_WRITE = parseAthenaRightKey(\n  \"authorization.platform.write\"\n);\n","import { BILLING_OPERATION_RIGHTS } from \"../../billing/runtime/rights.ts\";\nimport { BILLING_RIGHT_DEFINITIONS } from \"../../billing/rights-catalog.ts\";\nimport { STORAGE_RIGHT_DEFINITIONS } from \"../../storage/rights-catalog.ts\";\nimport {\n  type AthenaRightsAuthority,\n  createAthenaRightsAuthority,\n} from \"../../rights/authority.ts\";\nimport type { AthenaRightContribution } from \"../../rights/contribution.ts\";\nimport { resolveAthenaRightsIr } from \"../../rights/resolver.ts\";\nimport type { AthenaRightDefinition, AthenaRightsIr } from \"../../rights/types.ts\";\nimport { AUTHORIZATION_RIGHT_DEFINITIONS } from \"../../rights/definitions.ts\";\n\nexport {\n  defineAthenaRight,\n  AUTHORIZATION_PLATFORM_DELEGATE,\n  AUTHORIZATION_PLATFORM_READ,\n  AUTHORIZATION_ROLES_DELEGATE,\n  AUTHORIZATION_ROLES_READ,\n  BILLING_PAYMENTS_READ,\n  ORGANIZATION_MEMBERS_READ,\n  ORGANIZATION_OWNERS_ASSIGN,\n} from \"../../rights/definitions.ts\";\nexport {\n  AUTHORIZATION_PLATFORM_WRITE,\n  AUTHORIZATION_ROLES_WRITE,\n  ORGANIZATION_LIFECYCLE_DELETE,\n  ORGANIZATION_MEMBERS_INVITE,\n  ORGANIZATION_MEMBERS_WRITE,\n} from \"./capability-rights.ts\";\n\nexport const AUTHORIZATION_CATALOG_VERSION = 3;\n\nfunction freezeRightsIr(value: AthenaRightsIr): AthenaRightsIr {\n  return Object.freeze({\n    ...value,\n    metadata: Object.freeze({\n      ...(value.metadata.provenance\n        ? { provenance: Object.freeze([...value.metadata.provenance]) }\n        : {}),\n    }),\n    rights: Object.freeze(\n      value.rights.map((definition) => Object.freeze({ ...definition }))\n    ),\n  });\n}\n\nlet cachedIr: AthenaRightsIr | undefined;\nlet cached: readonly AthenaRightDefinition[] | undefined;\nlet cachedByKey: ReadonlyMap<string, AthenaRightDefinition> | undefined;\n\nexport function getAthenaAuthorizationRightsIr(): AthenaRightsIr {\n  cachedIr ??= freezeRightsIr(\n    resolveAthenaRightsIr(\n      [\n        ...BILLING_RIGHT_DEFINITIONS,\n        ...STORAGE_RIGHT_DEFINITIONS,\n        ...AUTHORIZATION_RIGHT_DEFINITIONS,\n      ].map(\n        (definition): AthenaRightContribution => ({\n          definition,\n          source:\n            definition.domain === \"billing\"\n              ? \"billing\"\n              : definition.domain === \"storage\"\n                ? \"storage\"\n                : \"authorization\",\n        })\n      ),\n      { provenance: [\"authorization\"] }\n    )\n  );\n  return cachedIr;\n}\n\nexport function listAthenaAuthorizationRights(): readonly AthenaRightDefinition[] {\n  cached ??= Object.freeze([...getAthenaAuthorizationRightsIr().rights]);\n  return cached;\n}\n\nexport function getAthenaAuthorizationRight(\n  key: string\n): AthenaRightDefinition | undefined {\n  cachedByKey ??= new Map(\n    listAthenaAuthorizationRights().map((entry) => [entry.key, entry])\n  );\n  return cachedByKey.get(key);\n}\n\nexport function getAthenaAuthorizationRightsAuthority(): AthenaRightsAuthority {\n  return createAthenaRightsAuthority(getAthenaAuthorizationRightsIr());\n}\n\nexport function assertBillingOperationsReferenceCatalog(): void {\n  const registered = new Set(\n    listAthenaAuthorizationRights().map((entry) => entry.key)\n  );\n  for (const [operation, required] of Object.entries(\n    BILLING_OPERATION_RIGHTS\n  )) {\n    for (const key of required) {\n      if (!registered.has(key)) {\n        throw new Error(\n          `Billing operation ${operation} references unregistered right ${key}`\n        );\n      }\n    }\n  }\n}\n","export const ATHENA_ROLES_IR_INVALID = \"ATHENA_ROLES_IR_INVALID\";\n\nexport class AthenaRolesIrValidationError extends Error {\n  readonly code = ATHENA_ROLES_IR_INVALID;\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"AthenaRolesIrValidationError\";\n  }\n}\n\nexport const ATHENA_ROLE_ID_INVALID = \"ATHENA_ROLE_ID_INVALID\";\nexport const ATHENA_ROLE_KEY_INVALID = \"ATHENA_ROLE_KEY_INVALID\";\n\nexport class AthenaRoleIdentityError extends Error {\n  constructor(\n    readonly code:\n      | typeof ATHENA_ROLE_ID_INVALID\n      | typeof ATHENA_ROLE_KEY_INVALID,\n    message: string\n  ) {\n    super(message);\n    this.name = \"AthenaRoleIdentityError\";\n  }\n}\n","import { ATHENA_ROLE_ID_INVALID, AthenaRoleIdentityError } from \"./errors.ts\";\n\ndeclare const athenaRoleIdBrand: unique symbol;\n\nexport type AthenaRoleId = string & {\n  readonly [athenaRoleIdBrand]: true;\n};\n\nexport function parseAthenaRoleId(raw: string): AthenaRoleId {\n  if (typeof raw !== \"string\") {\n    throw new AthenaRoleIdentityError(\n      ATHENA_ROLE_ID_INVALID,\n      \"Role ID must be a string\"\n    );\n  }\n  const value = raw.trim();\n  if (value.length === 0 || [...value].some((character) => character < \" \")) {\n    throw new AthenaRoleIdentityError(\n      ATHENA_ROLE_ID_INVALID,\n      \"Role ID must be a non-empty string without control characters\"\n    );\n  }\n  return value as AthenaRoleId;\n}\n\nexport function tryParseAthenaRoleId(raw: string): AthenaRoleId | undefined {\n  try {\n    return parseAthenaRoleId(raw);\n  } catch (error) {\n    if (error instanceof AthenaRoleIdentityError) {\n      return undefined;\n    }\n    throw error;\n  }\n}\n\nexport function athenaRoleIdString(id: AthenaRoleId): string {\n  return id;\n}\n","import { ATHENA_ROLE_KEY_INVALID, AthenaRoleIdentityError } from \"./errors.ts\";\n\ndeclare const athenaRoleKeyBrand: unique symbol;\n\nexport type AthenaRoleKey = string & {\n  readonly [athenaRoleKeyBrand]: true;\n};\n\nconst LEGACY_ROLE_ALIASES = new Set([\n  \"admin\",\n  \"customer\",\n  \"member\",\n  \"owner\",\n  \"unauthorized\",\n]);\n\nexport function parseAthenaRoleKey(raw: string): AthenaRoleKey {\n  if (typeof raw !== \"string\") {\n    throw new AthenaRoleIdentityError(\n      ATHENA_ROLE_KEY_INVALID,\n      \"Role key must be a string\"\n    );\n  }\n  const value = raw.trim();\n  if (\n    !/^[a-z][a-z0-9_]{0,127}$/.test(value) ||\n    LEGACY_ROLE_ALIASES.has(value)\n  ) {\n    throw new AthenaRoleIdentityError(\n      ATHENA_ROLE_KEY_INVALID,\n      \"Role key must be a canonical non-legacy symbolic key\"\n    );\n  }\n  return value as AthenaRoleKey;\n}\n\nexport function tryParseAthenaRoleKey(raw: string): AthenaRoleKey | undefined {\n  try {\n    return parseAthenaRoleKey(raw);\n  } catch (error) {\n    if (error instanceof AthenaRoleIdentityError) {\n      return undefined;\n    }\n    throw error;\n  }\n}\n\nexport function athenaRoleKeyString(key: AthenaRoleKey): string {\n  return key;\n}\n","import type { AthenaRightsAuthority } from \"../rights/authority.ts\";\nimport { getAthenaAuthorizationRightsAuthority } from \"../runtime/authorization/catalog.ts\";\nimport { parseAthenaRightKey } from \"../rights/key.ts\";\nimport { parseAthenaRoleId } from \"./id.ts\";\nimport { parseAthenaRoleKey } from \"./key.ts\";\nimport type { AthenaRoleDefinition } from \"./types.ts\";\n\nfunction billingRights(\n  authority: AthenaRightsAuthority,\n  predicate: (key: string) => boolean\n): AthenaRoleDefinition[\"rights\"] {\n  return [...authority.byKey.values()]\n    .filter((entry) => entry.domain === \"billing\" && predicate(entry.key))\n    .map((entry) => entry.key);\n}\n\nfunction storageRights(\n  authority: AthenaRightsAuthority\n): AthenaRoleDefinition[\"rights\"] {\n  return [...authority.byKey.values()]\n    .filter((entry) => entry.domain === \"storage\")\n    .map((entry) => entry.key);\n}\n\nfunction platformRights(\n  authority: AthenaRightsAuthority,\n  rights: readonly string[]\n): AthenaRoleDefinition[\"rights\"] {\n  return rights\n    .filter((key) => {\n      const definition = authority.byKey.get(parseAthenaRightKey(key));\n      return (\n        definition?.scopeKind === \"self\" || definition?.scopeKind === \"platform\"\n      );\n    })\n    .map((key) => parseAthenaRightKey(key));\n}\n\nfunction availableRights(\n  authority: AthenaRightsAuthority,\n  rights: readonly AthenaRoleDefinition[\"rights\"][number][]\n): AthenaRoleDefinition[\"rights\"] {\n  return rights.filter((right) => authority.byKey.has(right));\n}\n\nfunction definition(input: {\n  id: string;\n  key: string;\n  displayName: string;\n  description: string;\n  scope: AthenaRoleDefinition[\"scope\"];\n  systemKind: AthenaRoleDefinition[\"systemKind\"];\n  rights: AthenaRoleDefinition[\"rights\"];\n}): AthenaRoleDefinition {\n  return Object.freeze({\n    ...input,\n    assignable: true,\n    id: parseAthenaRoleId(input.id),\n    key: parseAthenaRoleKey(input.key),\n    protected: true,\n    rights: Object.freeze([...input.rights]),\n    scope: Object.freeze(input.scope),\n  });\n}\n\nconst customerBilling = [\n  \"billing.catalog.read\",\n  \"billing.self.invoices.read\",\n  \"billing.self.payments.read\",\n  \"billing.self.subscription.read\",\n  \"billing.self.subscription.write\",\n  \"billing.self.checkout.write\",\n  \"billing.customers.write\",\n].map((key) => parseAthenaRightKey(key));\n\nexport function createAthenaBuiltinRoleDefinitions(\n  authority = getAthenaAuthorizationRightsAuthority()\n): readonly AthenaRoleDefinition[] {\n  return Object.freeze([\n    definition({\n      description: \"Platform operator\",\n      displayName: \"Platform administrator\",\n      id: \"platform_admin\",\n      key: \"platform_admin\",\n      rights: platformRights(authority, [\n        ...billingRights(authority, () => true),\n        ...storageRights(authority),\n        \"authorization.platform.read\",\n        \"authorization.platform.write\",\n        \"authorization.platform.delegate\",\n      ]),\n      scope: { kind: \"platform\" },\n      systemKind: \"admin\",\n    }),\n    definition({\n      description: \"Delegated billing operator\",\n      displayName: \"Billing administrator\",\n      id: \"billing_admin\",\n      key: \"billing_admin\",\n      rights: platformRights(\n        authority,\n        billingRights(authority, (key) => !key.startsWith(\"billing.self.\"))\n      ),\n      scope: { kind: \"platform\" },\n      systemKind: \"admin\",\n    }),\n    definition({\n      description: \"Customer account\",\n      displayName: \"Customer\",\n      id: \"platform_customer\",\n      key: \"platform_customer\",\n      rights: [\n        ...availableRights(authority, customerBilling),\n        ...availableRights(\n          authority,\n          storageRights(authority).filter(\n            (key) => key !== \"storage.put\" && key !== \"storage.delete\"\n          )\n        ),\n      ],\n      scope: { kind: \"platform\" },\n      systemKind: \"member\",\n    }),\n    definition({\n      description: \"No rights\",\n      displayName: \"Unauthorized\",\n      id: \"platform_unauthorized\",\n      key: \"platform_unauthorized\",\n      rights: [],\n      scope: { kind: \"platform\" },\n      systemKind: null,\n    }),\n    definition({\n      description: \"Organization owner\",\n      displayName: \"Organization owner\",\n      id: \"organization_owner\",\n      key: \"organization_owner\",\n      rights: availableRights(authority, [\n        parseAthenaRightKey(\"organization.members.read\"),\n        parseAthenaRightKey(\"organization.members.write\"),\n        parseAthenaRightKey(\"organization.members.invite\"),\n        parseAthenaRightKey(\"organization.owners.assign\"),\n        parseAthenaRightKey(\"organization.lifecycle.delete\"),\n        parseAthenaRightKey(\"authorization.roles.read\"),\n        parseAthenaRightKey(\"authorization.roles.write\"),\n      ]),\n      scope: { kind: \"organization-template\" },\n      systemKind: \"owner\",\n    }),\n    definition({\n      description: \"Organization administrator\",\n      displayName: \"Organization administrator\",\n      id: \"organization_admin\",\n      key: \"organization_admin\",\n      rights: availableRights(authority, [\n        parseAthenaRightKey(\"organization.members.read\"),\n        parseAthenaRightKey(\"organization.members.write\"),\n        parseAthenaRightKey(\"organization.members.invite\"),\n        parseAthenaRightKey(\"authorization.roles.read\"),\n      ]),\n      scope: { kind: \"organization-template\" },\n      systemKind: \"admin\",\n    }),\n    definition({\n      description: \"Organization member\",\n      displayName: \"Organization member\",\n      id: \"organization_member\",\n      key: \"organization_member\",\n      rights: availableRights(authority, [\n        parseAthenaRightKey(\"organization.members.read\"),\n      ]),\n      scope: { kind: \"organization-template\" },\n      systemKind: \"member\",\n    }),\n  ]);\n}\n\nexport const ATHENA_BUILTIN_ROLE_DEFINITIONS =\n  createAthenaBuiltinRoleDefinitions();\n","import type { AthenaRightKey } from \"../rights/key.ts\";\nimport type { AthenaRoleId } from \"./id.ts\";\nimport type { AthenaRoleKey } from \"./key.ts\";\n\nexport const ATHENA_ROLES_IR_KIND = \"athena.roles\" as const;\nexport const ATHENA_ROLES_IR_VERSION = 1 as const;\n\nexport type AthenaRoleSystemKind = \"owner\" | \"admin\" | \"member\" | null;\n\nexport type AthenaRoleDefinitionScope =\n  | { kind: \"platform\" }\n  | { kind: \"organization-template\" }\n  | { kind: \"organization\"; organizationId: string };\n\nexport interface AthenaRoleDefinition {\n  assignable: boolean;\n  description?: string;\n  displayName: string;\n  id: AthenaRoleId;\n  key: AthenaRoleKey;\n  protected: boolean;\n  rights: readonly AthenaRightKey[];\n  scope: AthenaRoleDefinitionScope;\n  systemKind: AthenaRoleSystemKind;\n}\n\nexport interface AthenaRolesMetadata {\n  provenance?: readonly string[];\n}\n\nexport interface AthenaRolesIr {\n  irVersion: typeof ATHENA_ROLES_IR_VERSION;\n  kind: typeof ATHENA_ROLES_IR_KIND;\n  metadata: AthenaRolesMetadata;\n  roles: readonly AthenaRoleDefinition[];\n}\n\nexport interface AthenaRoleSnapshotProjection {\n  assignable: boolean;\n  assignmentCount: number;\n  description?: string;\n  displayName: string;\n  id: string;\n  key: string;\n  organizationId: string | null;\n  protected: boolean;\n  rightCount: number;\n  scopeKind: \"platform\" | \"organization\";\n  systemKind: AthenaRoleSystemKind;\n  version: number;\n}\n","import type { AthenaRightsAuthority } from \"../../rights/authority.ts\";\nimport { getAthenaAuthorizationRightsAuthority } from \"../../runtime/authorization/catalog.ts\";\nimport { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport { AthenaRolesIrValidationError } from \"../errors.ts\";\nimport { parseAthenaRoleId } from \"../id.ts\";\nimport { parseAthenaRoleKey } from \"../key.ts\";\nimport {\n  ATHENA_ROLES_IR_KIND,\n  ATHENA_ROLES_IR_VERSION,\n  type AthenaRoleDefinition,\n  type AthenaRoleDefinitionScope,\n  type AthenaRolesIr,\n} from \"../types.ts\";\n\nfunction invalid(message: string): never {\n  throw new AthenaRolesIrValidationError(message);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction exactKeys(\n  value: Record<string, unknown>,\n  expected: readonly string[],\n  path: string\n): void {\n  const allowed = new Set(expected);\n  for (const key of Object.keys(value)) {\n    if (!allowed.has(key)) {\n      invalid(`${path} contains unknown field ${key}`);\n    }\n  }\n}\n\nfunction parseScope(value: unknown, path: string): AthenaRoleDefinitionScope {\n  if (!isRecord(value)) {\n    invalid(`${path} must be an object`);\n  }\n  if (value.kind === \"platform\" || value.kind === \"organization-template\") {\n    if (Object.keys(value).length !== 1) {\n      invalid(`${path} has fields that do not belong to ${value.kind}`);\n    }\n    return { kind: value.kind };\n  }\n  if (\n    value.kind === \"organization\" &&\n    typeof value.organizationId === \"string\" &&\n    value.organizationId.trim().length > 0 &&\n    Object.keys(value).length === 2\n  ) {\n    return { kind: \"organization\", organizationId: value.organizationId };\n  }\n  invalid(`${path} is not a valid role scope`);\n}\n\nfunction validateRole(\n  value: unknown,\n  index: number,\n  rightsAuthority: AthenaRightsAuthority\n): AthenaRoleDefinition {\n  const path = `roles[${index}]`;\n  if (!isRecord(value)) {\n    invalid(`${path} must be an object`);\n  }\n  exactKeys(\n    value,\n    [\n      \"id\",\n      \"key\",\n      \"displayName\",\n      \"description\",\n      \"scope\",\n      \"assignable\",\n      \"protected\",\n      \"systemKind\",\n      \"rights\",\n    ],\n    path\n  );\n  if (typeof value.id !== \"string\" || typeof value.key !== \"string\") {\n    invalid(`${path}.id and ${path}.key must be strings`);\n  }\n  const id = parseAthenaRoleId(value.id);\n  const key = parseAthenaRoleKey(value.key);\n  if (typeof value.displayName !== \"string\" || value.displayName.length === 0) {\n    invalid(`${path}.displayName must be non-empty`);\n  }\n  if (\n    value.description !== undefined &&\n    typeof value.description !== \"string\"\n  ) {\n    invalid(`${path}.description must be a string when present`);\n  }\n  if (\n    typeof value.assignable !== \"boolean\" ||\n    typeof value.protected !== \"boolean\"\n  ) {\n    invalid(`${path}.assignable and ${path}.protected must be booleans`);\n  }\n  if (\n    value.systemKind !== null &&\n    value.systemKind !== \"owner\" &&\n    value.systemKind !== \"admin\" &&\n    value.systemKind !== \"member\"\n  ) {\n    invalid(`${path}.systemKind is invalid`);\n  }\n  const scope = parseScope(value.scope, `${path}.scope`);\n  if (!Array.isArray(value.rights)) {\n    invalid(`${path}.rights must be an array`);\n  }\n  const rights = value.rights.map((right, rightIndex) => {\n    if (typeof right !== \"string\") {\n      invalid(`${path}.rights[${rightIndex}] must be a string`);\n    }\n    const parsed = parseAthenaRightKey(right);\n    const definition = rightsAuthority.byKey.get(parsed);\n    if (!definition) {\n      invalid(\n        `${path}.rights[${rightIndex}] is not in the installed Rights catalog`\n      );\n    }\n    if (!definition.assignable) {\n      invalid(`${path}.rights[${rightIndex}] is not assignable`);\n    }\n    if (\n      definition.scopeKind !== \"self\" &&\n      ((scope.kind === \"platform\" && definition.scopeKind !== \"platform\") ||\n        (scope.kind !== \"platform\" && definition.scopeKind !== \"organization\"))\n    ) {\n      invalid(`${path}.rights[${rightIndex}] is incompatible with role scope`);\n    }\n    return parsed;\n  });\n  if (new Set(rights).size !== rights.length) {\n    invalid(`${path}.rights contains duplicates`);\n  }\n  if (scope.kind === \"organization\" && value.systemKind !== null) {\n    invalid(`${path}.organization roles cannot carry a system classification`);\n  }\n  if (\n    scope.kind === \"organization-template\" &&\n    (!(value.assignable && value.protected) || value.systemKind === null)\n  ) {\n    invalid(\n      `${path}.organization-template violates frozen template invariants`\n    );\n  }\n  return {\n    displayName: value.displayName,\n    id,\n    key,\n    ...(value.description === undefined\n      ? {}\n      : { description: value.description }),\n    assignable: value.assignable,\n    protected: value.protected,\n    rights,\n    scope,\n    systemKind: value.systemKind,\n  };\n}\n\nexport function validateAthenaRolesIr(\n  value: unknown,\n  rightsAuthority = getAthenaAuthorizationRightsAuthority()\n): asserts value is AthenaRolesIr {\n  if (!isRecord(value)) {\n    invalid(\"Roles IR must be an object\");\n  }\n  exactKeys(value, [\"kind\", \"irVersion\", \"roles\", \"metadata\"], \"document\");\n  if (value.kind !== ATHENA_ROLES_IR_KIND) {\n    invalid(\"Roles IR kind is invalid\");\n  }\n  if (value.irVersion !== ATHENA_ROLES_IR_VERSION) {\n    invalid(\"Roles IR version is invalid\");\n  }\n  if (!Array.isArray(value.roles)) {\n    invalid(\"Roles IR roles must be an array\");\n  }\n  if (!isRecord(value.metadata)) {\n    invalid(\"Roles IR metadata must be an object\");\n  }\n  exactKeys(value.metadata, [\"provenance\"], \"metadata\");\n  if (\n    value.metadata.provenance !== undefined &&\n    (!Array.isArray(value.metadata.provenance) ||\n      value.metadata.provenance.some((entry) => typeof entry !== \"string\"))\n  ) {\n    invalid(\"metadata.provenance must contain only strings\");\n  }\n  const roles = value.roles.map((entry, index) =>\n    validateRole(entry, index, rightsAuthority)\n  );\n  const ids = new Set<string>();\n  const keys = new Set<string>();\n  for (const entry of roles) {\n    if (ids.has(entry.id)) {\n      invalid(`duplicate role ID ${entry.id}`);\n    }\n    if (keys.has(entry.key)) {\n      invalid(`duplicate role key ${entry.key}`);\n    }\n    ids.add(entry.id);\n    keys.add(entry.key);\n  }\n}\n","import type { AthenaRightsAuthority } from \"../../rights/authority.ts\";\nimport { parseAthenaRoleId } from \"../id.ts\";\nimport { parseAthenaRoleKey } from \"../key.ts\";\nimport type { AthenaRoleDefinition, AthenaRolesIr } from \"../types.ts\";\nimport { validateAthenaRolesIr } from \"./validate.ts\";\n\nfunction compareText(left: string, right: string): number {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction scopeRank(role: AthenaRoleDefinition): number {\n  if (role.scope.kind === \"platform\") {\n    return 0;\n  }\n  return role.scope.kind === \"organization-template\" ? 1 : 2;\n}\n\nfunction compareRoles(\n  left: AthenaRoleDefinition,\n  right: AthenaRoleDefinition\n): number {\n  const rank = scopeRank(left) - scopeRank(right);\n  if (rank !== 0) {\n    return rank;\n  }\n  const leftOrganization =\n    left.scope.kind === \"organization\" ? left.scope.organizationId : \"\";\n  const rightOrganization =\n    right.scope.kind === \"organization\" ? right.scope.organizationId : \"\";\n  return (\n    compareText(leftOrganization, rightOrganization) ||\n    compareText(left.key, right.key) ||\n    compareText(left.id, right.id)\n  );\n}\n\nexport function canonicalizeAthenaRolesIr(\n  value: AthenaRolesIr,\n  rightsAuthority?: AthenaRightsAuthority\n): AthenaRolesIr {\n  validateAthenaRolesIr(value, rightsAuthority);\n  const roles = value.roles\n    .map((role) => ({\n      ...role,\n      id: parseAthenaRoleId(role.id),\n      key: parseAthenaRoleKey(role.key),\n      scope:\n        role.scope.kind === \"organization\"\n          ? {\n              kind: \"organization\" as const,\n              organizationId: role.scope.organizationId,\n            }\n          : { kind: role.scope.kind },\n      ...(role.description === undefined\n        ? {}\n        : { description: role.description }),\n      rights: [...role.rights].sort(compareText),\n    }))\n    .sort(compareRoles);\n  const provenance = [...new Set(value.metadata.provenance ?? [])].sort();\n  return {\n    irVersion: value.irVersion,\n    kind: value.kind,\n    metadata: {\n      ...(provenance.length === 0 ? {} : { provenance }),\n    },\n    roles,\n  };\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport type { AthenaRightsAuthority } from \"../../rights/authority.ts\";\nimport type { AthenaRoleDefinition, AthenaRolesIr } from \"../types.ts\";\nimport { canonicalizeAthenaRolesIr } from \"./canonicalize.ts\";\n\nfunction semanticRole(role: AthenaRoleDefinition): Record<string, unknown> {\n  return {\n    displayName: role.displayName,\n    id: role.id,\n    key: role.key,\n    ...(role.description === undefined\n      ? {}\n      : { description: role.description }),\n    assignable: role.assignable,\n    protected: role.protected,\n    rights: role.rights,\n    scope: role.scope,\n    systemKind: role.systemKind,\n  };\n}\n\nexport function fingerprintAthenaRolesIr(\n  value: AthenaRolesIr,\n  rightsAuthority: AthenaRightsAuthority\n): string {\n  const canonical = canonicalizeAthenaRolesIr(value, rightsAuthority);\n  return bytesToHex(\n    sha256(\n      utf8ToBytes(\n        JSON.stringify({\n          irVersion: canonical.irVersion,\n          kind: canonical.kind,\n          roles: canonical.roles.map(semanticRole),\n        })\n      )\n    )\n  );\n}\n","import type { AthenaRightsAuthority } from \"../rights/authority.ts\";\nimport { AthenaRightKeyError } from \"../rights/errors.ts\";\nimport { parseAthenaRightKey } from \"../rights/key.ts\";\nimport {\n  AthenaRoleIdentityError,\n  AthenaRolesIrValidationError,\n} from \"./errors.ts\";\nimport { parseAthenaRoleId } from \"./id.ts\";\nimport { validateAthenaRolesIr } from \"./ir/validate.ts\";\nimport { parseAthenaRoleKey } from \"./key.ts\";\nimport type { AthenaRoleDefinition } from \"./types.ts\";\n\ntype PersistedRoleRecord = {\n  assignable: boolean;\n  id: string;\n  key: string;\n  name: string;\n  organizationId: string | null;\n  protected: boolean;\n  scopeKind: \"platform\" | \"organization\";\n  systemKind: \"owner\" | \"admin\" | \"member\" | null;\n};\n\nexport function hydrateAthenaRoleDefinition(\n  input: {\n    record: PersistedRoleRecord;\n    rights: readonly string[];\n  },\n  rightsAuthority?: AthenaRightsAuthority\n): AthenaRoleDefinition {\n  const { record } = input;\n  if (record.scopeKind === \"platform\" && record.organizationId !== null) {\n    throw new AthenaRolesIrValidationError(\n      \"Platform role persistence state cannot contain an organization ID\"\n    );\n  }\n  const scope =\n    record.scopeKind === \"platform\"\n      ? ({ kind: \"platform\" } as const)\n      : record.organizationId === null\n        ? ({ kind: \"organization-template\" } as const)\n        : ({\n          kind: \"organization\",\n          organizationId: record.organizationId,\n        } as const);\n  const definition: AthenaRoleDefinition = {\n    assignable: record.assignable,\n    displayName: record.name,\n    id: parseAthenaRoleId(record.id),\n    key: parseAthenaRoleKey(record.key),\n    protected: record.protected,\n    rights: input.rights.map((right) => parseAthenaRightKey(right)),\n    scope,\n    systemKind: record.systemKind,\n  };\n  validateAthenaRolesIr(\n    {\n      irVersion: 1,\n      kind: \"athena.roles\",\n      metadata: {},\n      roles: [definition],\n    },\n    rightsAuthority\n  );\n  return definition;\n}\n\nexport function tryHydrateAthenaRoleDefinition(\n  input: {\n    record: PersistedRoleRecord;\n    rights: readonly string[];\n  },\n  rightsAuthority?: AthenaRightsAuthority\n): AthenaRoleDefinition | undefined {\n  try {\n    return hydrateAthenaRoleDefinition(input, rightsAuthority);\n  } catch (error) {\n    if (\n      error instanceof AthenaRoleIdentityError ||\n      error instanceof AthenaRolesIrValidationError ||\n      error instanceof AthenaRightKeyError\n    ) {\n      return;\n    }\n    throw error;\n  }\n}\n","import type {\n  AthenaRoleDefinition,\n  AthenaRoleSnapshotProjection,\n} from \"./types.ts\";\n\nexport function projectAuthorizationSnapshotRole(\n  role: AthenaRoleDefinition,\n  state: {\n    activeOrganizationId?: string | null;\n    assignmentCount: number;\n    version: number;\n  }\n): AthenaRoleSnapshotProjection | undefined {\n  let scopeKind: \"platform\" | \"organization\";\n  let organizationId: string | null;\n  if (role.scope.kind === \"platform\") {\n    scopeKind = \"platform\";\n    organizationId = null;\n  } else {\n    scopeKind = \"organization\";\n    const activeOrganizationId = state.activeOrganizationId?.trim() ?? \"\";\n    if (role.scope.kind === \"organization-template\") {\n      if (activeOrganizationId.length === 0) {\n        return undefined;\n      }\n      organizationId = activeOrganizationId;\n    } else {\n      if (\n        activeOrganizationId.length === 0 ||\n        role.scope.organizationId !== activeOrganizationId\n      ) {\n        return undefined;\n      }\n      organizationId = role.scope.organizationId;\n    }\n  }\n  return {\n    assignable: role.assignable,\n    assignmentCount: state.assignmentCount,\n    ...(role.description === undefined\n      ? {}\n      : { description: role.description }),\n    displayName: role.displayName,\n    id: role.id,\n    key: role.key,\n    organizationId,\n    protected: role.protected,\n    rightCount: role.rights.length,\n    scopeKind,\n    systemKind: role.systemKind,\n    version: state.version,\n  };\n}\n","export {\n  ATHENA_BUILTIN_ROLE_DEFINITIONS,\n  createAthenaBuiltinRoleDefinitions,\n} from \"./builtin.ts\";\nexport {\n  ATHENA_ROLE_ID_INVALID,\n  ATHENA_ROLE_KEY_INVALID,\n  ATHENA_ROLES_IR_INVALID,\n  AthenaRoleIdentityError,\n  AthenaRolesIrValidationError,\n} from \"./errors.ts\";\nexport type { AthenaRoleId } from \"./id.ts\";\nexport {\n  athenaRoleIdString,\n  parseAthenaRoleId,\n  tryParseAthenaRoleId,\n} from \"./id.ts\";\nexport { canonicalizeAthenaRolesIr } from \"./ir/canonicalize.ts\";\nexport { fingerprintAthenaRolesIr } from \"./ir/fingerprint.ts\";\nexport { validateAthenaRolesIr } from \"./ir/validate.ts\";\nexport type { AthenaRoleKey } from \"./key.ts\";\nexport {\n  athenaRoleKeyString,\n  parseAthenaRoleKey,\n  tryParseAthenaRoleKey,\n} from \"./key.ts\";\nexport {\n  hydrateAthenaRoleDefinition,\n  tryHydrateAthenaRoleDefinition,\n} from \"./persistence.ts\";\nexport { projectAuthorizationSnapshotRole } from \"./projection.ts\";\nexport type {\n  AthenaRoleDefinition,\n  AthenaRoleDefinitionScope,\n  AthenaRoleSnapshotProjection,\n  AthenaRoleSystemKind,\n  AthenaRolesIr,\n  AthenaRolesMetadata,\n} from \"./types.ts\";\nexport {\n  ATHENA_ROLES_IR_KIND,\n  ATHENA_ROLES_IR_VERSION,\n} from \"./types.ts\";\n","import { AthenaAuthRuntimeError } from \"../../auth/runtime-error.ts\";\nimport { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport {\n  AUTHORIZATION_PLATFORM_DELEGATE,\n  AUTHORIZATION_ROLES_DELEGATE,\n  getAthenaAuthorizationRight,\n} from \"./catalog.ts\";\nimport type {\n  AthenaAuthorizationRoleRecord,\n  AthenaAuthorizationRoleScope,\n  AthenaAuthorizationScopeKind,\n} from \"./types.ts\";\n\nexport const AUTHORIZATION_ROLE_PROTECTED = \"AUTHORIZATION_ROLE_PROTECTED\";\nexport const AUTHORIZATION_ROLE_VERSION_CONFLICT =\n  \"AUTHORIZATION_ROLE_VERSION_CONFLICT\";\nexport const AUTHORIZATION_ROLE_HAS_ASSIGNMENTS =\n  \"AUTHORIZATION_ROLE_HAS_ASSIGNMENTS\";\nexport const AUTHORIZATION_RIGHT_UNKNOWN = \"AUTHORIZATION_RIGHT_UNKNOWN\";\nexport const AUTHORIZATION_RIGHT_NOT_ASSIGNABLE =\n  \"AUTHORIZATION_RIGHT_NOT_ASSIGNABLE\";\nexport const AUTHORIZATION_RIGHT_SCOPE_MISMATCH =\n  \"AUTHORIZATION_RIGHT_SCOPE_MISMATCH\";\nexport const AUTHORIZATION_RIGHT_DELEGATION_DENIED =\n  \"AUTHORIZATION_RIGHT_DELEGATION_DENIED\";\nexport const AUTHORIZATION_ROLE_NOT_FOUND = \"AUTHORIZATION_ROLE_NOT_FOUND\";\nexport const AUTHORIZATION_REASSIGNMENT_INVALID =\n  \"AUTHORIZATION_REASSIGNMENT_INVALID\";\nexport const AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT =\n  \"AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT\";\nexport const AUTHORIZATION_LAST_PLATFORM_ADMIN =\n  \"AUTHORIZATION_LAST_PLATFORM_ADMIN\";\nexport const AUTHORIZATION_FOUNDING_OWNER_PROTECTED =\n  \"AUTHORIZATION_FOUNDING_OWNER_PROTECTED\";\nexport const AUTHORIZATION_CROSS_ORGANIZATION_ROLE =\n  \"AUTHORIZATION_CROSS_ORGANIZATION_ROLE\";\nexport const AUTHORIZATION_BASE_ROLE_REQUIRED =\n  \"AUTHORIZATION_BASE_ROLE_REQUIRED\";\n\nfunction authorizationError(\n  status: number,\n  code: string,\n  message: string\n): AthenaAuthRuntimeError {\n  return new AthenaAuthRuntimeError(status, message, { code });\n}\n\nexport function throwRoleProtected(): never {\n  throw authorizationError(\n    403,\n    AUTHORIZATION_ROLE_PROTECTED,\n    \"Protected roles cannot be renamed, deleted, or have their rights changed\"\n  );\n}\n\nexport function throwRoleVersionConflict(): never {\n  throw authorizationError(\n    409,\n    AUTHORIZATION_ROLE_VERSION_CONFLICT,\n    \"Role version conflict\"\n  );\n}\n\nexport function throwRoleHasAssignments(): never {\n  throw authorizationError(\n    409,\n    AUTHORIZATION_ROLE_HAS_ASSIGNMENTS,\n    \"Role has assignments\"\n  );\n}\n\nexport function throwRoleNotFound(): never {\n  throw authorizationError(404, AUTHORIZATION_ROLE_NOT_FOUND, \"Role not found\");\n}\n\nexport function throwReassignmentInvalid(\n  message = \"Invalid reassignment role\"\n): never {\n  throw authorizationError(400, AUTHORIZATION_REASSIGNMENT_INVALID, message);\n}\n\nexport function throwAssignmentVersionConflict(): never {\n  throw authorizationError(\n    409,\n    AUTHORIZATION_ASSIGNMENT_VERSION_CONFLICT,\n    \"Assignment version conflict\"\n  );\n}\n\nexport function throwLastPlatformAdmin(): never {\n  throw authorizationError(\n    409,\n    AUTHORIZATION_LAST_PLATFORM_ADMIN,\n    \"The last platform administrator cannot be removed\"\n  );\n}\n\nexport function throwFoundingOwnerProtected(): never {\n  throw authorizationError(\n    403,\n    AUTHORIZATION_FOUNDING_OWNER_PROTECTED,\n    \"The organization's founding owner cannot be reassigned\"\n  );\n}\n\nexport function throwCrossOrganizationRole(): never {\n  throw authorizationError(\n    403,\n    AUTHORIZATION_CROSS_ORGANIZATION_ROLE,\n    \"Role does not belong to this organization\"\n  );\n}\n\nexport function throwBaseRoleRequired(): never {\n  throw authorizationError(\n    400,\n    AUTHORIZATION_BASE_ROLE_REQUIRED,\n    \"Exactly one protected organization base role is required\"\n  );\n}\n\nexport function assertProtectedRoleImmutable(\n  role: Pick<AthenaAuthorizationRoleRecord, \"protected\">\n): void {\n  if (role.protected) {\n    throwRoleProtected();\n  }\n}\n\nexport function assertExpectedVersion(\n  role: Pick<AthenaAuthorizationRoleRecord, \"version\">,\n  expectedVersion: number\n): void {\n  if (role.version !== expectedVersion) {\n    throwRoleVersionConflict();\n  }\n}\n\nfunction rightAllowedOnRoleScope(\n  roleScope: AthenaAuthorizationRoleScope,\n  rightScope: AthenaAuthorizationScopeKind\n): boolean {\n  if (rightScope === \"self\") {\n    return true;\n  }\n  if (roleScope === \"platform\") {\n    return rightScope === \"platform\";\n  }\n  return rightScope === \"organization\";\n}\n\nexport function assertRoleRightAssignmentAllowed(input: {\n  organizationId?: string | null;\n  right: string;\n  roleScope: AthenaAuthorizationRoleScope;\n}): void {\n  void input.organizationId;\n  const parsed = tryParseAthenaRightKey(input.right);\n  if (!parsed) {\n    throw authorizationError(\n      400,\n      AUTHORIZATION_RIGHT_UNKNOWN,\n      \"Unknown authorization right\"\n    );\n  }\n  const definition = getAthenaAuthorizationRight(parsed);\n  if (!definition) {\n    throw authorizationError(\n      400,\n      AUTHORIZATION_RIGHT_UNKNOWN,\n      \"Unknown authorization right\"\n    );\n  }\n  if (!definition.assignable) {\n    throw authorizationError(\n      400,\n      AUTHORIZATION_RIGHT_NOT_ASSIGNABLE,\n      \"Right is not assignable\"\n    );\n  }\n  if (!rightAllowedOnRoleScope(input.roleScope, definition.scopeKind)) {\n    throw authorizationError(\n      400,\n      AUTHORIZATION_RIGHT_SCOPE_MISMATCH,\n      \"Right is not allowed on this role scope\"\n    );\n  }\n}\n\nexport function assertRightsReplaceAllowed(input: {\n  organizationId?: string | null;\n  rights: readonly string[];\n  roleScope: AthenaAuthorizationRoleScope;\n}): void {\n  for (const right of input.rights) {\n    assertRoleRightAssignmentAllowed({\n      organizationId: input.organizationId,\n      right,\n      roleScope: input.roleScope,\n    });\n  }\n}\n\nexport function addedAuthorizationRights(\n  beforeRights: readonly string[],\n  afterRights: readonly string[]\n): string[] {\n  const before = new Set(beforeRights);\n  return [...new Set(afterRights)].filter((right) => !before.has(right));\n}\n\nexport function actorMayDelegateRight(input: {\n  actorRights: readonly string[];\n  right: string;\n  unrestrictedGrant: boolean;\n}): boolean {\n  if (input.unrestrictedGrant) {\n    return true;\n  }\n  const held = new Set(input.actorRights);\n  if (held.has(input.right)) {\n    return true;\n  }\n  const parsed = tryParseAthenaRightKey(input.right);\n  if (!parsed) {\n    return false;\n  }\n  const definition = getAthenaAuthorizationRight(parsed);\n  if (!definition) {\n    return false;\n  }\n  if (\n    definition.scopeKind === \"platform\" &&\n    held.has(AUTHORIZATION_PLATFORM_DELEGATE)\n  ) {\n    return true;\n  }\n  if (\n    (definition.scopeKind === \"organization\" ||\n      definition.scopeKind === \"self\") &&\n    held.has(AUTHORIZATION_ROLES_DELEGATE)\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport function assertAuthorizationDelegationAllowed(input: {\n  actorRights: readonly string[];\n  afterRights: readonly string[];\n  beforeRights: readonly string[];\n  organizationId?: string | null;\n  roleScope: AthenaAuthorizationRoleScope;\n  unrestrictedGrant?: boolean;\n}): void {\n  assertRightsReplaceAllowed({\n    organizationId: input.organizationId,\n    rights: input.afterRights,\n    roleScope: input.roleScope,\n  });\n  const unrestrictedGrant = input.unrestrictedGrant === true;\n  for (const right of addedAuthorizationRights(\n    input.beforeRights,\n    input.afterRights\n  )) {\n    if (\n      actorMayDelegateRight({\n        actorRights: input.actorRights,\n        right,\n        unrestrictedGrant,\n      })\n    ) {\n      continue;\n    }\n    throw authorizationError(\n      403,\n      AUTHORIZATION_RIGHT_DELEGATION_DENIED,\n      \"Cannot grant a right beyond the actor's delegation authority\"\n    );\n  }\n}\n\nexport function requireExpectedVersion(value: unknown): number {\n  if (typeof value === \"number\" && Number.isInteger(value) && value >= 1) {\n    return value;\n  }\n  if (typeof value === \"string\" && /^\\d+$/.test(value.trim())) {\n    const parsed = Number(value.trim());\n    if (parsed >= 1) {\n      return parsed;\n    }\n  }\n  throw AthenaAuthRuntimeError.badRequest(\"expectedVersion is required\");\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { ATHENA_BUILTIN_ROLE_DEFINITIONS } from \"../../roles/builtin.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"./types.ts\";\n\nexport const PLATFORM_ADMIN_ROLE = \"platform_admin\";\nexport const PLATFORM_BILLING_ADMIN_ROLE = \"billing_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\n/** Legacy persistence template projection of the canonical Roles IR built-ins. */\nexport type BuiltInAuthorizationRoleTemplate = {\n  assignable: boolean;\n  description: string;\n  id: string;\n  key: string;\n  name: string;\n  protected: boolean;\n  rights: readonly AthenaRightKey[];\n  scopeKind: \"platform\" | \"organization\";\n  systemKind: \"owner\" | \"admin\" | \"member\" | null;\n};\n\n/** Compatibility projection for existing authorization persistence callers. */\nexport const BUILTIN_AUTHORIZATION_ROLES: readonly BuiltInAuthorizationRoleTemplate[] =\n  Object.freeze(\n    ATHENA_BUILTIN_ROLE_DEFINITIONS.map(\n      (role): BuiltInAuthorizationRoleTemplate => ({\n        assignable: role.assignable,\n        description: role.description ?? role.displayName,\n        id: role.id,\n        key: role.key,\n        name: role.displayName,\n        protected: role.protected,\n        rights: role.rights,\n        scopeKind: role.scope.kind === \"platform\" ? \"platform\" : \"organization\",\n        systemKind: role.systemKind,\n      })\n    )\n  );\n\nexport function mapLegacyUserRole(role: string | null | undefined): string {\n  const trimmed = role?.trim() ?? \"\";\n  if (trimmed === \"admin\") {\n    return PLATFORM_ADMIN_ROLE;\n  }\n  if (trimmed === \"unauthorized\") {\n    return PLATFORM_UNAUTHORIZED_ROLE;\n  }\n  if (trimmed === \"\" || trimmed === \"customer\") {\n    return PLATFORM_CUSTOMER_ROLE;\n  }\n  return PLATFORM_UNAUTHORIZED_ROLE;\n}\n\nexport function mapLegacyMemberRole(role: string | null | undefined): string {\n  const trimmed = role?.trim().toLowerCase() ?? \"member\";\n  if (trimmed === \"owner\") {\n    return ORGANIZATION_OWNER_ROLE;\n  }\n  if (trimmed === \"admin\") {\n    return ORGANIZATION_ADMIN_ROLE;\n  }\n  if (trimmed === \"member\") {\n    return ORGANIZATION_MEMBER_ROLE;\n  }\n  return ORGANIZATION_MEMBER_ROLE;\n}\n\nexport function resolveMemberAssignmentRole(\n  role: string | null | undefined\n): string {\n  const trimmed = role?.trim() ?? \"member\";\n  const lower = trimmed.toLowerCase();\n  if (lower === \"owner\" || lower === ORGANIZATION_OWNER_ROLE) {\n    return ORGANIZATION_OWNER_ROLE;\n  }\n  if (lower === \"admin\" || lower === ORGANIZATION_ADMIN_ROLE) {\n    return ORGANIZATION_ADMIN_ROLE;\n  }\n  if (lower === \"member\" || lower === ORGANIZATION_MEMBER_ROLE) {\n    return ORGANIZATION_MEMBER_ROLE;\n  }\n  return trimmed;\n}\n\nexport function persistedMemberRole(\n  role: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">\n): string {\n  if (role.systemKind === \"owner\") {\n    return \"owner\";\n  }\n  if (role.systemKind === \"admin\") {\n    return \"admin\";\n  }\n  if (role.systemKind === \"member\") {\n    return \"member\";\n  }\n  return role.key;\n}\n\nexport function grantRankRole(\n  role: Pick<AthenaAuthorizationRoleRecord, \"key\" | \"systemKind\">\n): string {\n  if (role.systemKind === \"owner\" || role.key === ORGANIZATION_OWNER_ROLE) {\n    return \"owner\";\n  }\n  if (role.systemKind === \"admin\" || role.key === ORGANIZATION_ADMIN_ROLE) {\n    return \"admin\";\n  }\n  if (role.systemKind === \"member\" || role.key === ORGANIZATION_MEMBER_ROLE) {\n    return \"member\";\n  }\n  return \"admin\";\n}\n\nexport function builtinRoleRecord(\n  template: BuiltInAuthorizationRoleTemplate\n): AthenaAuthorizationRoleRecord {\n  return {\n    assignable: template.assignable,\n    id: template.id,\n    key: template.key,\n    name: template.name,\n    organizationId: null,\n    protected: template.protected,\n    scopeKind: template.scopeKind,\n    systemKind: template.systemKind,\n    version: 1,\n  };\n}\n\nexport function compatibilityMemberRole(roleKey: string): string {\n  if (roleKey === ORGANIZATION_OWNER_ROLE) {\n    return \"owner\";\n  }\n  if (roleKey === ORGANIZATION_ADMIN_ROLE) {\n    return \"admin\";\n  }\n  return \"member\";\n}\n\nexport function compatibilityUserRole(roleKey: string): string | null {\n  if (roleKey === PLATFORM_ADMIN_ROLE) {\n    return \"admin\";\n  }\n  if (roleKey === PLATFORM_UNAUTHORIZED_ROLE) {\n    return \"unauthorized\";\n  }\n  if (roleKey === PLATFORM_CUSTOMER_ROLE) {\n    return \"customer\";\n  }\n  return null;\n}\n","import { tryParseAthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n  throwBaseRoleRequired,\n  throwCrossOrganizationRole,\n  throwFoundingOwnerProtected,\n  throwLastPlatformAdmin,\n} from \"./role-invariants.ts\";\nimport {\n  ORGANIZATION_ADMIN_ROLE,\n  ORGANIZATION_MEMBER_ROLE,\n  ORGANIZATION_OWNER_ROLE,\n  PLATFORM_ADMIN_ROLE,\n} from \"./templates.ts\";\nimport type { AthenaAuthorizationRoleRecord } from \"./types.ts\";\n\nconst ORGANIZATION_BASE_ROLE_KEYS = new Set([\n  ORGANIZATION_OWNER_ROLE,\n  ORGANIZATION_ADMIN_ROLE,\n  ORGANIZATION_MEMBER_ROLE,\n]);\n\nexport function assertPlatformAssignmentRoles(\n  roles: readonly AthenaAuthorizationRoleRecord[]\n): void {\n  for (const role of roles) {\n    if (role.scopeKind !== \"platform\" || role.organizationId != null) {\n      throwCrossOrganizationRole();\n    }\n  }\n}\n\nexport function assertOrganizationAssignmentRoles(input: {\n  foundingOwnerUserId?: string | null;\n  memberUserId: string;\n  organizationId: string;\n  roles: readonly AthenaAuthorizationRoleRecord[];\n}): void {\n  const base = input.roles.filter(\n    (role) => role.protected && ORGANIZATION_BASE_ROLE_KEYS.has(role.key)\n  );\n  if (base.length !== 1) {\n    throwBaseRoleRequired();\n  }\n  for (const role of input.roles) {\n    if (role.scopeKind !== \"organization\") {\n      throwCrossOrganizationRole();\n    }\n    if (\n      role.organizationId != null &&\n      role.organizationId !== input.organizationId\n    ) {\n      throwCrossOrganizationRole();\n    }\n  }\n  const nextBase = base[0];\n  if (\n    input.foundingOwnerUserId != null &&\n    input.foundingOwnerUserId === input.memberUserId &&\n    nextBase?.key !== ORGANIZATION_OWNER_ROLE\n  ) {\n    throwFoundingOwnerProtected();\n  }\n}\n\nexport function assertActorCanGrantRoles(input: {\n  actorRights: readonly string[];\n  roles: readonly { rights: readonly string[] }[];\n}): void {\n  const granted = [\n    ...new Set(\n      input.roles.flatMap((role) =>\n        role.rights.flatMap((key) => {\n          const parsed = tryParseAthenaRightKey(key);\n          return parsed ? [parsed] : [];\n        })\n      )\n    ),\n  ];\n  const actor = input.actorRights.flatMap((key) => {\n    const parsed = tryParseAthenaRightKey(key);\n    return parsed ? [parsed] : [];\n  });\n  if (missingRequiredRights(actor, granted).length > 0) {\n    throw new Error(\"AUTHORIZATION_RIGHT_DELEGATION_DENIED\");\n  }\n}\n\nexport function wouldRemoveLastPlatformAdmin(input: {\n  currentAdminUserIds: readonly string[];\n  nextHasAdmin: boolean;\n  targetUserId: string;\n}): boolean {\n  const remaining = new Set(input.currentAdminUserIds);\n  if (input.nextHasAdmin) {\n    remaining.add(input.targetUserId);\n  } else {\n    remaining.delete(input.targetUserId);\n  }\n  return remaining.size === 0;\n}\n\nexport function assertNotLastPlatformAdmin(input: {\n  currentAdminUserIds: readonly string[];\n  nextHasAdmin: boolean;\n  targetUserId: string;\n}): void {\n  if (wouldRemoveLastPlatformAdmin(input)) {\n    throwLastPlatformAdmin();\n  }\n}\n\nexport { ORGANIZATION_BASE_ROLE_KEYS, PLATFORM_ADMIN_ROLE };\n","declare const platformAssignmentRevisionBrand: unique symbol;\ndeclare const organizationAssignmentRevisionBrand: unique symbol;\n\nexport type PlatformAssignmentRevision = number & {\n  readonly [platformAssignmentRevisionBrand]: true;\n};\n\nexport type OrganizationAssignmentRevision = number & {\n  readonly [organizationAssignmentRevisionBrand]: true;\n};\n\nexport interface PlatformUserRoleAssignment {\n  readonly roleIds: readonly string[];\n  readonly userId: string;\n}\n\nexport interface PlatformUserAssignmentSnapshot {\n  readonly assignments: readonly PlatformUserRoleAssignment[];\n  readonly revision: PlatformAssignmentRevision;\n}\n\nexport interface OrganizationMemberRoleAssignment {\n  readonly memberId: string;\n  readonly roleIds: readonly string[];\n  readonly userId: string;\n}\n\nexport interface OrganizationMemberAssignmentSnapshot {\n  readonly assignments: readonly OrganizationMemberRoleAssignment[];\n  readonly organizationId: string;\n  readonly revision: OrganizationAssignmentRevision;\n}\n\nexport function asPlatformAssignmentRevision(\n  value: number\n): PlatformAssignmentRevision {\n  return value as PlatformAssignmentRevision;\n}\n\nexport function asOrganizationAssignmentRevision(\n  value: number\n): OrganizationAssignmentRevision {\n  return value as OrganizationAssignmentRevision;\n}\n\nexport function freezeRoleIds(ids: readonly string[]): readonly string[] {\n  return Object.freeze([...ids]);\n}\n\nexport function clonePlatformUserAssignment(\n  assignment: PlatformUserRoleAssignment\n): PlatformUserRoleAssignment {\n  return Object.freeze({\n    roleIds: freezeRoleIds(assignment.roleIds),\n    userId: assignment.userId,\n  });\n}\n\nexport function cloneOrganizationMemberAssignment(\n  assignment: OrganizationMemberRoleAssignment\n): OrganizationMemberRoleAssignment {\n  return Object.freeze({\n    memberId: assignment.memberId,\n    roleIds: freezeRoleIds(assignment.roleIds),\n    userId: assignment.userId,\n  });\n}\n\nexport function groupPlatformUserAssignments(\n  rows: readonly { roleId: string; userId: string }[],\n  userIds?: readonly string[]\n): PlatformUserRoleAssignment[] {\n  const grouped = new Map<string, string[]>();\n  const wanted = userIds == null ? null : [...userIds];\n  if (wanted) {\n    for (const userId of wanted) {\n      grouped.set(userId, []);\n    }\n  }\n  for (const row of rows) {\n    if (wanted && !grouped.has(row.userId)) {\n      continue;\n    }\n    const bucket = grouped.get(row.userId) ?? [];\n    bucket.push(row.roleId);\n    grouped.set(row.userId, bucket);\n  }\n  return [...grouped.entries()].map(([userId, roleIds]) =>\n    clonePlatformUserAssignment({ roleIds, userId })\n  );\n}\n\nexport function groupOrganizationMemberAssignments(\n  rows: readonly {\n    memberId: string;\n    roleId: string;\n    userId: string;\n  }[]\n): OrganizationMemberRoleAssignment[] {\n  const grouped = new Map<string, { roleIds: string[]; userId: string }>();\n  for (const row of rows) {\n    const bucket = grouped.get(row.memberId) ?? {\n      roleIds: [],\n      userId: row.userId,\n    };\n    bucket.roleIds.push(row.roleId);\n    grouped.set(row.memberId, bucket);\n  }\n  return [...grouped.entries()].map(([memberId, value]) =>\n    cloneOrganizationMemberAssignment({\n      memberId,\n      roleIds: value.roleIds,\n      userId: value.userId,\n    })\n  );\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport {\n  AUTHORIZATION_PLATFORM_WRITE,\n  AUTHORIZATION_ROLES_WRITE,\n  ORGANIZATION_LIFECYCLE_DELETE,\n  ORGANIZATION_MEMBERS_INVITE,\n  ORGANIZATION_MEMBERS_WRITE,\n} from \"./capability-rights.ts\";\nimport type { AuthorizationCapabilities } from \"./types.ts\";\n\nexport function authorizationAffordancesFromRights(\n  rights: readonly AthenaRightKey[]\n): AuthorizationCapabilities {\n  const holds = (required: AthenaRightKey) =>\n    missingRequiredRights(rights, [required]).length === 0;\n  const canManagePlatform = holds(AUTHORIZATION_PLATFORM_WRITE);\n  const canManageMembers =\n    holds(ORGANIZATION_MEMBERS_WRITE) || canManagePlatform;\n  return {\n    canChangeMemberRole: canManageMembers,\n    canDeleteOrganization: holds(ORGANIZATION_LIFECYCLE_DELETE),\n    canInviteMembers: canManageMembers || holds(ORGANIZATION_MEMBERS_INVITE),\n    canManageOrganizationRoles:\n      holds(AUTHORIZATION_ROLES_WRITE) || canManagePlatform,\n    canManagePlatformRoles: canManagePlatform,\n    canRemoveMember: canManageMembers,\n  };\n}\n\n/** @deprecated Use authorizationAffordancesFromRights for new code. */\nexport function capabilitiesFromRights(\n  rights: readonly AthenaRightKey[]\n): AuthorizationCapabilities {\n  return authorizationAffordancesFromRights(rights);\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport type { AthenaRightDefinition } from \"../types.ts\";\nimport { canonicalizeAthenaRightsIr } from \"./canonicalize.ts\";\n\nfunction semanticDefinition(\n  definition: AthenaRightDefinition\n): AthenaRightDefinition {\n  return {\n    assignable: definition.assignable,\n    description: definition.description,\n    displayName: definition.displayName,\n    domain: definition.domain,\n    key: definition.key,\n    riskLevel: definition.riskLevel,\n    scopeKind: definition.scopeKind,\n  };\n}\n\nexport function fingerprintAthenaRightsIr(value: unknown): string {\n  const canonical = canonicalizeAthenaRightsIr(value);\n  return bytesToHex(\n    sha256(\n      utf8ToBytes(\n        JSON.stringify({\n          kind: canonical.kind,\n          irVersion: canonical.irVersion,\n          rights: canonical.rights.map(semanticDefinition),\n        })\n      )\n    )\n  );\n}\n","import { ATHENA_BUILTIN_ROLE_DEFINITIONS } from \"../../roles/builtin.ts\";\nimport { fingerprintAthenaRolesIr } from \"../../roles/ir/fingerprint.ts\";\nimport {\n  ATHENA_ROLES_IR_KIND,\n  ATHENA_ROLES_IR_VERSION,\n} from \"../../roles/types.ts\";\nimport {\n  AUTHORIZATION_CATALOG_VERSION,\n  getAthenaAuthorizationRightsIr,\n  getAthenaAuthorizationRightsAuthority,\n} from \"./catalog.ts\";\nimport { fingerprintAthenaRightsIr } from \"../../rights/ir/fingerprint.ts\";\n\nexport { AUTHORIZATION_CATALOG_VERSION };\n\n/**\n * Transaction-owned catalog materialization lock.\n * Distinct from Auth DDL (`ATHENA_AUTH_INIT_ADVISORY_LOCK`) and signing-key\n * activation. Must be `pg_advisory_xact_lock` on the transaction client.\n */\nexport const AUTHORIZATION_CATALOG_LOCK = 872_046_055;\n\nexport function authorizationRightsFingerprint(): string {\n  return fingerprintAthenaRightsIr(getAthenaAuthorizationRightsIr());\n}\n\nexport function authorizationRolesFingerprint(): string {\n  const rightsAuthority = getAthenaAuthorizationRightsAuthority();\n  return fingerprintAthenaRolesIr({\n    irVersion: ATHENA_ROLES_IR_VERSION,\n    kind: ATHENA_ROLES_IR_KIND,\n    metadata: {},\n    roles: ATHENA_BUILTIN_ROLE_DEFINITIONS,\n  }, rightsAuthority);\n}\n\nexport function catalogStateIsCurrent(\n  current:\n    | {\n        catalogVersion: number;\n        rightsFingerprint: string;\n        rolesFingerprint: string;\n      }\n    | undefined\n): boolean {\n  return (\n    current !== undefined &&\n    current.catalogVersion === AUTHORIZATION_CATALOG_VERSION &&\n    current.rightsFingerprint === authorizationRightsFingerprint() &&\n    current.rolesFingerprint === authorizationRolesFingerprint()\n  );\n}\n\nexport const AUTHORIZATION_CATALOG_STATE_SQL = `\nCREATE TABLE IF NOT EXISTS athena.authorization_catalog_state (\n    id BOOLEAN PRIMARY KEY DEFAULT TRUE CHECK (id),\n    catalog_version INTEGER NOT NULL,\n    materialized_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    rights_fingerprint TEXT NOT NULL,\n    roles_fingerprint TEXT NOT NULL\n);\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  sourceOrganizationId: string | null;\n  sourceScopeKind: AthenaAuthorizationRoleScope;\n  targetOrganizationId: string | null | undefined;\n}): void {\n  const targetOrganizationId = input.targetOrganizationId ?? null;\n  if (input.sourceScopeKind === \"platform\" && targetOrganizationId) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Platform roles cannot be cloned into an organization\"\n    );\n  }\n  if (input.sourceScopeKind === \"organization\" && !targetOrganizationId) {\n    throw AthenaAuthRuntimeError.badRequest(\n      \"Organization roles must be cloned into an organization\"\n    );\n  }\n  if (\n    input.sourceScopeKind === \"organization\" &&\n    input.sourceOrganizationId !== null &&\n    input.sourceOrganizationId !== targetOrganizationId\n  ) {\n    throw AthenaAuthRuntimeError.forbidden();\n  }\n}\n","import type { AthenaRightKey } from \"../../rights/key.ts\";\nimport type {\n  AthenaAuthorizationRoleDetail,\n  AthenaAuthorizationRoleRecord,\n  RoleDescriptor,\n} from \"./types.ts\";\n\nexport function toRoleDescriptor(\n  role: AthenaAuthorizationRoleRecord,\n  counts: { assignmentCount: number; rightCount: number },\n  description?: string\n): RoleDescriptor {\n  return {\n    assignable: role.assignable,\n    assignmentCount: counts.assignmentCount,\n    ...(description ? { description } : {}),\n    displayName: role.name,\n    id: role.id,\n    key: role.key,\n    organizationId: role.organizationId,\n    protected: role.protected,\n    rightCount: counts.rightCount,\n    scopeKind: role.scopeKind,\n    systemKind: role.systemKind,\n    version: role.version,\n  };\n}\n\nexport function toRoleDetail(\n  role: AthenaAuthorizationRoleRecord,\n  rights: readonly AthenaRightKey[],\n  assignmentCount: number\n): AthenaAuthorizationRoleDetail {\n  return {\n    ...role,\n    assignmentCount,\n    rightCount: rights.length,\n    rights,\n  };\n}\n","import type { AuthorizationCapabilities, RoleDescriptor } from \"./types.ts\";\n\nexport function projectAssignableRoles(input: {\n  activeOrganizationId?: string | null;\n  capabilities: AuthorizationCapabilities;\n  roles: readonly RoleDescriptor[];\n}): RoleDescriptor[] {\n  const organizationId = input.activeOrganizationId?.trim() ?? \"\";\n  const { capabilities } = input;\n  return input.roles.filter((role) => {\n    if (!role.assignable) {\n      return false;\n    }\n    if (role.scopeKind === \"platform\") {\n      return capabilities.canManagePlatformRoles;\n    }\n    if (organizationId.length === 0) {\n      return false;\n    }\n    if (\n      role.organizationId !== null &&\n      role.organizationId !== organizationId\n    ) {\n      return false;\n    }\n    if (role.organizationId === organizationId) {\n      return (\n        capabilities.canManageOrganizationRoles ||\n        capabilities.canChangeMemberRole ||\n        capabilities.canInviteMembers\n      );\n    }\n    return (\n      capabilities.canManageOrganizationRoles ||\n      capabilities.canChangeMemberRole ||\n      capabilities.canInviteMembers\n    );\n  });\n}\n","import {\n  type AthenaAuthDatabase,\n  assertQueryResult,\n} from \"../../auth/local/database.ts\";\nimport { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport type { AuthMemberRow } from \"../../auth/local/models.ts\";\nimport {\n  FOUNDING_OWNER_REMOVE_FORBIDDEN,\n  FOUNDING_OWNER_ROLE_LOCKED,\n} from \"../../auth/local/organization-invariants.ts\";\nimport {\n  type AthenaRightKey,\n  parseAthenaRightKey,\n  tryParseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport {\n  projectAuthorizationSnapshotRole,\n  tryHydrateAthenaRoleDefinition,\n} from \"../../roles/index.ts\";\nimport {\n  assertNotLastPlatformAdmin,\n  assertOrganizationAssignmentRoles,\n  assertPlatformAssignmentRoles,\n} from \"./assignment-replace.ts\";\nimport {\n  asOrganizationAssignmentRevision,\n  asPlatformAssignmentRevision,\n  groupOrganizationMemberAssignments,\n  groupPlatformUserAssignments,\n  type OrganizationMemberAssignmentSnapshot,\n  type OrganizationMemberRoleAssignment,\n  type PlatformUserAssignmentSnapshot,\n  type PlatformUserRoleAssignment,\n} from \"./assignment-snapshot.ts\";\nimport { capabilitiesFromRights } from \"./capabilities.ts\";\nimport {\n  AUTHORIZATION_CATALOG_VERSION,\n  getAthenaAuthorizationRightsIr,\n} from \"./catalog.ts\";\nimport {\n  AUTHORIZATION_CATALOG_LOCK,\n  AUTHORIZATION_CATALOG_STATE_SQL,\n  authorizationRightsFingerprint,\n  authorizationRolesFingerprint,\n  catalogStateIsCurrent,\n} from \"./catalog-state.ts\";\nimport { assertCloneRoleTenantBoundary } from \"./clone-source.ts\";\nimport type { AthenaAuthorizationInspectGraph } from \"./inspect.ts\";\nimport { toRoleDescriptor, toRoleDetail } from \"./role-descriptor.ts\";\nimport {\n  assertAuthorizationDelegationAllowed,\n  assertProtectedRoleImmutable,\n  throwAssignmentVersionConflict,\n  throwReassignmentInvalid,\n  throwRoleHasAssignments,\n  throwRoleNotFound,\n  throwRoleVersionConflict,\n} from \"./role-invariants.ts\";\nimport { projectAssignableRoles } from \"./snapshot-catalog.ts\";\nimport type { AthenaAuthorizationStore } from \"./store.ts\";\nimport {\n  BUILTIN_AUTHORIZATION_ROLES,\n  mapLegacyMemberRole,\n  mapLegacyUserRole,\n  ORGANIZATION_OWNER_ROLE,\n  PLATFORM_ADMIN_ROLE,\n  persistedMemberRole,\n  resolveMemberAssignmentRole,\n} from \"./templates.ts\";\nimport type {\n  AssignedRoleSummary,\n  AthenaAuthorizationRoleDetail,\n  AthenaAuthorizationRoleRecord,\n  AuthorizationSnapshot,\n  MemberAuthorizationActions,\n  RoleDescriptor,\n} from \"./types.ts\";\n\nexport const ATHENA_AUTHORIZATION_ROLE_KEY_MISMATCH =\n  \"ATHENA_AUTHORIZATION_ROLE_KEY_MISMATCH\";\n\ninterface RoleRow {\n  assignable: boolean;\n  id: string;\n  key: string;\n  name: string;\n  organization_id: string | null;\n  protected: boolean;\n  scope_kind: \"platform\" | \"organization\";\n  system_kind: \"owner\" | \"admin\" | \"member\" | null;\n  version: number;\n}\n\nfunction mapRoleRow(row: RoleRow): AthenaAuthorizationRoleRecord {\n  return {\n    assignable: row.assignable,\n    id: row.id,\n    key: row.key,\n    name: row.name,\n    organizationId: row.organization_id,\n    protected: row.protected,\n    scopeKind: row.scope_kind,\n    systemKind: row.system_kind,\n    version: row.version,\n  };\n}\n\nexport class PostgresAuthorizationStore implements AthenaAuthorizationStore {\n  constructor(private readonly db: AthenaAuthDatabase) {}\n\n  async ensureCatalog(): Promise<void> {\n    // Reads only. Catalog writes go through materialize()'s locked transaction.\n    if (!(await authorizationCatalogStateRelationVisible(this.db))) {\n      await this.materialize();\n      return;\n    }\n    if (catalogStateIsCurrent(await this.readCatalogState(this.db))) {\n      return;\n    }\n    await this.materialize();\n  }\n\n  /** Sole catalog writer: xact lock, DDL, then writeCatalog on this transaction. */\n  async materialize(): Promise<void> {\n    await this.db.transaction(async (tx) => {\n      await tx.query(\"SELECT pg_advisory_xact_lock($1)\", [\n        AUTHORIZATION_CATALOG_LOCK,\n      ]);\n      // CREATE TABLE IF NOT EXISTS before the first fingerprint read.\n      await tx.query(AUTHORIZATION_CATALOG_STATE_SQL);\n      if (catalogStateIsCurrent(await this.readCatalogState(tx))) {\n        return;\n      }\n      await this.writeCatalog(tx);\n    });\n  }\n\n  private async writeCatalog(db: AthenaAuthDatabase): Promise<void> {\n    for (const right of getAthenaAuthorizationRightsIr().rights) {\n      await db.query(\n        `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        [\n          right.key,\n          right.domain,\n          right.displayName,\n          right.description,\n          right.scopeKind,\n          right.riskLevel,\n          right.assignable,\n          AUTHORIZATION_CATALOG_VERSION,\n        ]\n      );\n    }\n    for (const template of BUILTIN_AUTHORIZATION_ROLES) {\n      const roleUpsert = await db.query(\n        `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\tWHERE authorization_roles.key = EXCLUDED.key\n\t\t\t\tRETURNING id`,\n        [\n          template.id,\n          template.key,\n          template.name,\n          template.scopeKind,\n          template.systemKind,\n          template.protected,\n          template.assignable,\n        ]\n      );\n      if (roleUpsert.rowCount !== 1) {\n        throw new AthenaAuthRuntimeError(\n          500,\n          \"Authorization catalog is inconsistent.\",\n          {\n            code: ATHENA_AUTHORIZATION_ROLE_KEY_MISMATCH,\n            internalMessage: `Built-in role ${template.id} has a different persisted key. Role keys are immutable identity.`,\n          }\n        );\n      }\n      await db.query(\n        `WITH desired AS (\n\t\t\t\t\tSELECT UNNEST($2::text[]) AS right_key\n\t\t\t\t),\n\t\t\t\tdeleted AS (\n\t\t\t\t\tDELETE FROM athena.authorization_role_rights existing\n\t\t\t\t\tWHERE existing.role_id = $1\n\t\t\t\t\t  AND NOT EXISTS (\n\t\t\t\t\t    SELECT 1 FROM desired d WHERE d.right_key = existing.right_key\n\t\t\t\t\t  )\n\t\t\t\t\tRETURNING existing.right_key\n\t\t\t\t)\n\t\t\t\tINSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\tSELECT $1, d.right_key\n\t\t\t\tFROM desired d\n\t\t\t\tON CONFLICT DO NOTHING`,\n        [template.id, [...template.rights]]\n      );\n    }\n    await db.query(\n      `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      [\"platform_admin\"]\n    );\n    await db.query(\n      `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      [\"platform_unauthorized\"]\n    );\n    await db.query(\n      `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      [\"platform_customer\"]\n    );\n    await db.query(\n      `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      [\"platform_unauthorized\"]\n    );\n    await db.query(\n      `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    );\n    await this.persistCatalogState(db);\n  }\n\n  /** Fingerprint row. Caller must have probed `to_regclass` or applied `AUTHORIZATION_CATALOG_STATE_SQL`. */\n  private async readCatalogState(db: AthenaAuthDatabase): Promise<\n    | {\n        catalogVersion: number;\n        rightsFingerprint: string;\n        rolesFingerprint: string;\n      }\n    | undefined\n  > {\n    const result = await db.query<{\n      catalog_version: number;\n      rights_fingerprint: string;\n      roles_fingerprint: string;\n    }>(\n      `SELECT catalog_version, rights_fingerprint, roles_fingerprint\n\t\t\t\t FROM athena.authorization_catalog_state\n\t\t\t\t WHERE id = TRUE`\n    );\n    const row = result.rows[0];\n    if (!row) {\n      return;\n    }\n    return {\n      catalogVersion: Number(row.catalog_version),\n      rightsFingerprint: String(row.rights_fingerprint),\n      rolesFingerprint: String(row.roles_fingerprint),\n    };\n  }\n\n  private async persistCatalogState(db: AthenaAuthDatabase): Promise<void> {\n    await db.query(\n      `INSERT INTO athena.authorization_catalog_state (\n\t\t\t\tid, catalog_version, materialized_at, rights_fingerprint, roles_fingerprint\n\t\t\t) VALUES (TRUE, $1, NOW(), $2, $3)\n\t\t\t ON CONFLICT (id) DO UPDATE SET\n\t\t\t\tcatalog_version = EXCLUDED.catalog_version,\n\t\t\t\tmaterialized_at = NOW(),\n\t\t\t\trights_fingerprint = EXCLUDED.rights_fingerprint,\n\t\t\t\troles_fingerprint = EXCLUDED.roles_fingerprint`,\n      [\n        AUTHORIZATION_CATALOG_VERSION,\n        authorizationRightsFingerprint(),\n        authorizationRolesFingerprint(),\n      ]\n    );\n  }\n\n  async hasUserAssignment(userId: string): Promise<boolean> {\n    const result = await this.db.query(\n      \"SELECT 1 FROM athena.authorization_user_roles WHERE user_id = $1\",\n      [userId]\n    );\n    return result.rowCount > 0;\n  }\n\n  async assignUserRole(\n    userId: string,\n    roleKey: string,\n    assignedBy?: string\n  ): Promise<void> {\n    const mapped = mapLegacyUserRole(\n      roleKey === \"admin\" ||\n        roleKey === \"customer\" ||\n        roleKey === \"unauthorized\"\n        ? roleKey\n        : roleKey\n    );\n    const key = roleKey.startsWith(\"platform_\") ? roleKey : mapped;\n    const inserted = await this.db.query(\n      \"DELETE FROM athena.authorization_user_roles WHERE user_id = $1\",\n      [userId]\n    );\n    void inserted;\n    const assigned = await this.db.query(\n      `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      [userId, key, assignedBy ?? null]\n    );\n    if (assigned.rowCount < 1) {\n      throw AthenaAuthRuntimeError.badRequest(\"Unknown platform role\");\n    }\n    await this.bumpRevision(null);\n    await this.writeAudit({\n      action: \"user.role.assign\",\n      actorUserId: assignedBy,\n      after: { roleKey: key },\n      targetId: userId,\n      targetKind: \"user\",\n    });\n  }\n\n  async assignMemberRole(\n    memberId: string,\n    roleKey: string,\n    assignedBy?: string,\n    organizationId?: string | null\n  ): Promise<void> {\n    const member = await this.db.query<{ organization_id: string }>(\n      \"SELECT organization_id FROM athena.member WHERE id = $1\",\n      [memberId]\n    );\n    const orgId = organizationId ?? member.rows[0]?.organization_id ?? null;\n    if (!orgId) {\n      throw AthenaAuthRuntimeError.badRequest(\"Member not found\");\n    }\n    const role = await this.lookupAssignableOrganizationRole(orgId, roleKey);\n    if (!role) {\n      throw AthenaAuthRuntimeError.badRequest(\"Unknown or unassignable role\");\n    }\n    await this.db.query(\n      \"DELETE FROM athena.authorization_member_roles WHERE member_id = $1\",\n      [memberId]\n    );\n    await this.db.query(\n      `INSERT INTO athena.authorization_member_roles (member_id, role_id, assigned_by)\n\t\t\t VALUES ($1, $2, $3)`,\n      [memberId, role.id, assignedBy ?? null]\n    );\n    await this.bumpRevision(orgId);\n    await this.writeAudit({\n      action: \"member.role.assign\",\n      actorUserId: assignedBy,\n      after: { roleKey: role.key },\n      organizationId: orgId,\n      targetId: memberId,\n      targetKind: \"member\",\n    });\n  }\n\n  async lookupAssignableOrganizationRole(\n    organizationId: string,\n    roleRef: string\n  ): Promise<AthenaAuthorizationRoleRecord | undefined> {\n    const mapped = resolveMemberAssignmentRole(roleRef);\n    const result = await this.db.query<RoleRow>(\n      `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      [organizationId, roleRef, mapped]\n    );\n    const row = result.rows[0];\n    if (!row) {\n      return;\n    }\n    return mapRoleRow(row);\n  }\n\n  async readUserRoleAssignmentsSnapshot(input?: {\n    userIds?: readonly string[];\n  }): Promise<PlatformUserAssignmentSnapshot> {\n    const filterIds = input?.userIds;\n    const result = await this.db.query<{\n      revision: string;\n      role_id: string | null;\n      user_id: string | null;\n    }>(\n      filterIds && filterIds.length > 0\n        ? `WITH rev AS (\n\t\t\t\t\t\tSELECT COALESCE((\n\t\t\t\t\t\t\tSELECT revision FROM athena.authorization_revisions\n\t\t\t\t\t\t\tWHERE scope_kind = 'platform' AND organization_id IS NULL\n\t\t\t\t\t\t), 1) AS revision\n\t\t\t\t\t),\n\t\t\t\t\twanted AS (\n\t\t\t\t\t\tSELECT UNNEST($1::text[]) AS user_id\n\t\t\t\t\t)\n\t\t\t\t\tSELECT rev.revision::text AS revision, wanted.user_id, ur.role_id\n\t\t\t\t\tFROM rev\n\t\t\t\t\tCROSS JOIN wanted\n\t\t\t\t\tLEFT JOIN athena.authorization_user_roles ur\n\t\t\t\t\t\tON ur.user_id = wanted.user_id`\n        : `WITH rev AS (\n\t\t\t\t\t\tSELECT COALESCE((\n\t\t\t\t\t\t\tSELECT revision FROM athena.authorization_revisions\n\t\t\t\t\t\t\tWHERE scope_kind = 'platform' AND organization_id IS NULL\n\t\t\t\t\t\t), 1) AS revision\n\t\t\t\t\t)\n\t\t\t\t\tSELECT rev.revision::text AS revision, ur.user_id, ur.role_id\n\t\t\t\t\tFROM rev\n\t\t\t\t\tLEFT JOIN athena.authorization_user_roles ur ON TRUE`,\n      filterIds && filterIds.length > 0 ? [filterIds] : []\n    );\n    const revision = asPlatformAssignmentRevision(\n      Number(result.rows[0]?.revision ?? 1)\n    );\n    const rows = result.rows.flatMap((row) =>\n      row.user_id && row.role_id\n        ? [{ roleId: row.role_id, userId: row.user_id }]\n        : []\n    );\n    return {\n      assignments: groupPlatformUserAssignments(rows, filterIds),\n      revision,\n    };\n  }\n\n  async listUserRoleAssignments(input?: {\n    userIds?: readonly string[];\n  }): Promise<readonly PlatformUserRoleAssignment[]> {\n    return (await this.readUserRoleAssignmentsSnapshot(input)).assignments;\n  }\n\n  async readMemberRoleAssignmentsSnapshot(input: {\n    organizationId: string;\n  }): Promise<OrganizationMemberAssignmentSnapshot> {\n    const result = await this.db.query<{\n      member_id: string | null;\n      revision: string;\n      role_id: string | null;\n      user_id: string | null;\n    }>(\n      `WITH rev AS (\n\t\t\t\t\tSELECT COALESCE((\n\t\t\t\t\t\tSELECT revision FROM athena.authorization_revisions\n\t\t\t\t\t\tWHERE organization_id = $1\n\t\t\t\t\t), 1) AS revision\n\t\t\t\t)\n\t\t\t\tSELECT rev.revision::text AS revision, mr.member_id, mr.role_id, m.user_id\n\t\t\t\tFROM rev\n\t\t\t\tLEFT JOIN athena.member m ON m.organization_id = $1\n\t\t\t\tLEFT JOIN athena.authorization_member_roles mr ON mr.member_id = m.id`,\n      [input.organizationId]\n    );\n    const revision = asOrganizationAssignmentRevision(\n      Number(result.rows[0]?.revision ?? 1)\n    );\n    const rows = result.rows.flatMap((row) =>\n      row.member_id && row.role_id && row.user_id\n        ? [\n            {\n              memberId: row.member_id,\n              roleId: row.role_id,\n              userId: row.user_id,\n            },\n          ]\n        : []\n    );\n    return {\n      assignments: groupOrganizationMemberAssignments(rows),\n      organizationId: input.organizationId,\n      revision,\n    };\n  }\n\n  async listMemberRoleAssignments(input: {\n    organizationId: string;\n  }): Promise<readonly OrganizationMemberRoleAssignment[]> {\n    return (await this.readMemberRoleAssignmentsSnapshot(input)).assignments;\n  }\n\n  async replaceUserRoleAssignments(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    roleIds: readonly string[];\n    userId: string;\n  }): Promise<{ revision: number }> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      return nested.replaceUserRoleAssignmentsInTransaction(input);\n    });\n  }\n\n  async replaceMemberRoleAssignments(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    foundingOwnerUserId?: string | null;\n    memberId: string;\n    memberUserId: string;\n    organizationId: string;\n    roleIds: readonly string[];\n  }): Promise<{ revision: number }> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      return nested.replaceMemberRoleAssignmentsInTransaction(input);\n    });\n  }\n\n  async cloneRole(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    organizationId?: string | null;\n    sourceRoleId: string;\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      return nested.cloneRoleInTransaction(input);\n    });\n  }\n\n  private async cloneRoleInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    organizationId?: string | null;\n    sourceRoleId: string;\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    const id = crypto.randomUUID();\n    const source = await this.db.query<RoleRow>(\n      \"SELECT * FROM athena.authorization_roles WHERE id = $1\",\n      [input.sourceRoleId]\n    );\n    const row = source.rows[0];\n    if (!row) {\n      throw AthenaAuthRuntimeError.badRequest(\"Source role not found\");\n    }\n    const organizationId = input.organizationId ?? row.organization_id;\n    assertCloneRoleTenantBoundary({\n      sourceOrganizationId: row.organization_id,\n      sourceScopeKind: row.scope_kind,\n      targetOrganizationId: organizationId,\n    });\n    const sourceRights = await this.listRoleRights(input.sourceRoleId);\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights: sourceRights,\n      beforeRights: [],\n      organizationId,\n      roleScope: row.scope_kind,\n      unrestrictedGrant: input.unrestrictedGrant,\n    });\n    const key = `custom_${id.slice(0, 8)}`;\n    const name = input.name.trim() || `${row.name} copy`;\n    await this.db.query(\n      `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      [id, key, name, row.scope_kind, organizationId]\n    );\n    await this.db.query(\n      `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      [id, input.sourceRoleId]\n    );\n    await this.bumpRevision(organizationId);\n    const clonedRights = await this.listRoleRights(id);\n    await this.writeAudit({\n      action: \"role.clone\",\n      actorUserId: input.actorUserId,\n      after: { rights: [...clonedRights] },\n      organizationId,\n      targetId: id,\n      targetKind: \"role\",\n    });\n    return {\n      assignable: true,\n      id,\n      key,\n      name,\n      organizationId,\n      protected: false,\n      scopeKind: row.scope_kind,\n      systemKind: null,\n      version: 1,\n    };\n  }\n\n  async createRole(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    organizationId?: string | null;\n    rights?: readonly string[];\n    scopeKind: \"platform\" | \"organization\";\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      return nested.createRoleInTransaction(input);\n    });\n  }\n\n  async getRole(\n    id: string,\n    organizationId?: string | null\n  ): Promise<AthenaAuthorizationRoleDetail | undefined> {\n    const role = await this.loadScopedRole(id, organizationId);\n    if (!role) {\n      return;\n    }\n    const rights = await this.listRoleRights(role.id);\n    return toRoleDetail(role, rights, await this.countAssignments(role));\n  }\n\n  async listRoles(input: {\n    organizationId?: string | null;\n    scopeKind: \"platform\" | \"organization\";\n  }): Promise<readonly RoleDescriptor[]> {\n    const result = input.organizationId\n      ? await this.db.query<\n          RoleRow & { assignment_count: string; right_count: string }\n        >(\n          `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          [input.organizationId]\n        )\n      : await this.db.query<\n          RoleRow & { assignment_count: string; right_count: string }\n        >(\n          `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        );\n    return result.rows\n      .filter((row) => row.scope_kind === input.scopeKind)\n      .map((row) =>\n        toRoleDescriptor(mapRoleRow(row), {\n          assignmentCount: Number(row.assignment_count),\n          rightCount: Number(row.right_count),\n        })\n      );\n  }\n\n  async listRoleRights(roleId: string): Promise<readonly AthenaRightKey[]> {\n    const result = await this.db.query<{ right_key: string }>(\n      `SELECT right_key FROM athena.authorization_role_rights\n\t\t\t WHERE role_id = $1 ORDER BY right_key`,\n      [roleId]\n    );\n    return result.rows.map((row) => parseAthenaRightKey(row.right_key));\n  }\n\n  async updateRole(input: {\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    name: string;\n    organizationId?: string | null;\n    rights?: readonly string[];\n    actorRights?: readonly string[];\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      if (input.rights) {\n        return nested.replaceRoleDefinitionInTransaction({\n          actorRights: input.actorRights ?? [],\n          actorUserId: input.actorUserId,\n          expectedVersion: input.expectedVersion,\n          id: input.id,\n          name: input.name,\n          organizationId: input.organizationId,\n          rights: input.rights,\n          unrestrictedGrant: input.unrestrictedGrant,\n        });\n      }\n      return nested.updateRoleInTransaction(input);\n    });\n  }\n\n  async replaceRoleRights(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    organizationId?: string | null;\n    rights: readonly string[];\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    return this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      return nested.replaceRoleRightsInTransaction(input);\n    });\n  }\n\n  async deleteRole(input: {\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    organizationId?: string | null;\n    reassignmentRoleId?: string | null;\n  }): Promise<void> {\n    await this.db.transaction(async (tx) => {\n      const nested = new PostgresAuthorizationStore(tx);\n      await nested.deleteRoleInTransaction(input);\n    });\n  }\n\n  private async createRoleInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    name: string;\n    organizationId?: string | null;\n    rights?: readonly string[];\n    scopeKind: \"platform\" | \"organization\";\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    const name = input.name.trim();\n    if (!name) {\n      throw AthenaAuthRuntimeError.badRequest(\"name is required\");\n    }\n    if (input.scopeKind === \"organization\" && !input.organizationId) {\n      throw AthenaAuthRuntimeError.badRequest(\"organizationId is required\");\n    }\n    const rights = input.rights ?? [];\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights: rights,\n      beforeRights: [],\n      organizationId: input.organizationId,\n      roleScope: input.scopeKind,\n      unrestrictedGrant: input.unrestrictedGrant,\n    });\n    const id = crypto.randomUUID();\n    const key = `custom_${id.slice(0, 8)}`;\n    const organizationId =\n      input.scopeKind === \"organization\"\n        ? (input.organizationId ?? null)\n        : null;\n    await this.db.query(\n      `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      [id, key, name, input.scopeKind, organizationId]\n    );\n    await this.replaceMapping(id, rights);\n    await this.bumpRevision(organizationId);\n    await this.writeAudit({\n      action: \"role.create\",\n      actorUserId: input.actorUserId,\n      after: { rights: [...rights].sort() },\n      organizationId,\n      targetId: id,\n      targetKind: \"role\",\n    });\n    return {\n      assignable: true,\n      id,\n      key,\n      name,\n      organizationId,\n      protected: false,\n      scopeKind: input.scopeKind,\n      systemKind: null,\n      version: 1,\n    };\n  }\n\n  private async updateRoleInTransaction(input: {\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    name: string;\n    organizationId?: string | null;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    const role = await this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    const name = input.name.trim();\n    if (!name) {\n      throw AthenaAuthRuntimeError.badRequest(\"name is required\");\n    }\n    const updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n    await this.db.query(\n      \"UPDATE athena.authorization_roles SET name = $1, updated_at = NOW() WHERE id = $2\",\n      [name, role.id]\n    );\n    await this.bumpRevision(role.organizationId);\n    await this.writeAudit({\n      action: \"role.rename\",\n      actorUserId: input.actorUserId,\n      after: { name },\n      before: { name: role.name },\n      organizationId: role.organizationId,\n      targetId: role.id,\n      targetKind: \"role\",\n    });\n    return { ...updated, name };\n  }\n\n  private async replaceRoleDefinitionInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    name: string;\n    organizationId?: string | null;\n    rights: readonly string[];\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    const role = await this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    const name = input.name.trim();\n    if (!name) {\n      throw AthenaAuthRuntimeError.badRequest(\"name is required\");\n    }\n    const beforeRights = [...(await this.listRoleRights(role.id))].sort();\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights: input.rights,\n      beforeRights,\n      organizationId: role.organizationId,\n      roleScope: role.scopeKind,\n      unrestrictedGrant: input.unrestrictedGrant,\n    });\n    const after = [...new Set(input.rights)].sort();\n    const updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n    await this.db.query(\n      \"UPDATE athena.authorization_roles SET name = $1, updated_at = NOW() WHERE id = $2\",\n      [name, role.id]\n    );\n    await this.replaceMapping(role.id, after);\n    await this.bumpRevision(role.organizationId);\n    await this.writeAudit({\n      action: \"role.definition.update\",\n      actorUserId: input.actorUserId,\n      after: { name, rights: after },\n      before: { name: role.name, rights: beforeRights },\n      organizationId: role.organizationId,\n      targetId: role.id,\n      targetKind: \"role\",\n    });\n    return { ...updated, name };\n  }\n\n  private async replaceRoleRightsInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    organizationId?: string | null;\n    rights: readonly string[];\n    unrestrictedGrant?: boolean;\n  }): Promise<AthenaAuthorizationRoleRecord> {\n    const role = await this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    const before = [...(await this.listRoleRights(role.id))].sort();\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights: input.rights,\n      beforeRights: before,\n      organizationId: role.organizationId,\n      roleScope: role.scopeKind,\n      unrestrictedGrant: input.unrestrictedGrant,\n    });\n    const after = [...new Set(input.rights)].sort();\n    const updated = await this.bumpRoleVersion(role.id, input.expectedVersion);\n    await this.replaceMapping(role.id, after);\n    await this.bumpRevision(role.organizationId);\n    await this.writeAudit({\n      action: \"role.rights.replace\",\n      actorUserId: input.actorUserId,\n      after: { rights: after },\n      before: { rights: before },\n      organizationId: role.organizationId,\n      targetId: role.id,\n      targetKind: \"role\",\n    });\n    return updated;\n  }\n\n  private async deleteRoleInTransaction(input: {\n    actorUserId: string;\n    expectedVersion: number;\n    id: string;\n    organizationId?: string | null;\n    reassignmentRoleId?: string | null;\n  }): Promise<void> {\n    const role = await this.requireScopedRole(input.id, input.organizationId);\n    assertProtectedRoleImmutable(role);\n    await this.bumpRoleVersion(role.id, input.expectedVersion);\n    const assigned = await this.countAssignments(role);\n    if (assigned > 0) {\n      const replacementId = input.reassignmentRoleId?.trim() ?? \"\";\n      if (!replacementId) {\n        throwRoleHasAssignments();\n      }\n      const replacement = await this.requireScopedRole(\n        replacementId,\n        input.organizationId\n      );\n      if (\n        replacement.id === role.id ||\n        !replacement.assignable ||\n        replacement.scopeKind !== role.scopeKind\n      ) {\n        throwReassignmentInvalid();\n      }\n      if (role.scopeKind === \"organization\") {\n        await this.db.query(\n          `UPDATE athena.authorization_member_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n          [replacement.id, role.id]\n        );\n      } else {\n        await this.db.query(\n          `UPDATE athena.authorization_user_roles SET role_id = $1, updated_at = NOW()\n\t\t\t\t\t WHERE role_id = $2`,\n          [replacement.id, role.id]\n        );\n      }\n    }\n    const before = [...(await this.listRoleRights(role.id))].sort();\n    await this.db.query(\n      \"DELETE FROM athena.authorization_roles WHERE id = $1\",\n      [role.id]\n    );\n    await this.bumpRevision(role.organizationId);\n    await this.writeAudit({\n      action: \"role.delete\",\n      actorUserId: input.actorUserId,\n      before: { rights: before },\n      organizationId: role.organizationId,\n      targetId: role.id,\n      targetKind: \"role\",\n    });\n  }\n\n  async inspectGraph(): Promise<AthenaAuthorizationInspectGraph> {\n    const roleResult = await this.db.query<\n      RoleRow & { assignment_count: string; right_count: string }\n    >(\n      `SELECT r.*,\n\t\t\t        CASE\n\t\t\t          WHEN r.scope_kind = 'organization'\n\t\t\t          THEN (SELECT COUNT(*)::text FROM athena.authorization_member_roles mr WHERE mr.role_id = r.id)\n\t\t\t          ELSE (SELECT COUNT(*)::text FROM athena.authorization_user_roles ur WHERE ur.role_id = r.id)\n\t\t\t        END AS assignment_count,\n\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 FROM athena.authorization_roles r\n\t\t\t ORDER BY r.scope_kind, r.protected DESC, r.key`\n    );\n    const rightResult = await this.db.query<{\n      right_key: string;\n      role_id: string;\n    }>(\n      \"SELECT role_id, right_key FROM athena.authorization_role_rights ORDER BY role_id, right_key\"\n    );\n    const rightsByRole = new Map<string, AthenaRightKey[]>();\n    for (const row of rightResult.rows) {\n      const bucket = rightsByRole.get(row.role_id) ?? [];\n      bucket.push(parseAthenaRightKey(row.right_key));\n      rightsByRole.set(row.role_id, bucket);\n    }\n    const roles = roleResult.rows.map((row) => {\n      const record = mapRoleRow(row);\n      const rights = rightsByRole.get(record.id) ?? [];\n      return {\n        ...record,\n        assignmentCount: Number(row.assignment_count),\n        rightCount: Number(row.right_count),\n        rights,\n      };\n    });\n    const userAssignments = await this.db.query<{\n      role_id: string;\n      role_key: string;\n      user_id: string;\n    }>(\n      `SELECT ur.user_id, ur.role_id, r.key AS role_key\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    );\n    const memberAssignments = await this.db.query<{\n      member_id: string;\n      organization_id: string | null;\n      role_id: string;\n      role_key: string;\n      user_id: string;\n    }>(\n      `SELECT mr.member_id, mr.role_id, m.user_id, m.organization_id, r.key AS role_key\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 JOIN athena.authorization_roles r ON r.id = mr.role_id`\n    );\n    const assignments = [\n      ...userAssignments.rows.map((row) => ({\n        memberId: null,\n        organizationId: null,\n        roleId: row.role_id,\n        roleKey: row.role_key,\n        scopeKind: \"platform\" as const,\n        userId: row.user_id,\n      })),\n      ...memberAssignments.rows.map((row) => ({\n        memberId: row.member_id,\n        organizationId: row.organization_id,\n        roleId: row.role_id,\n        roleKey: row.role_key,\n        scopeKind: \"organization\" as const,\n        userId: row.user_id,\n      })),\n    ];\n    const auditResult = await this.db.query<{\n      action: string;\n      actor_user_id: string | null;\n      created_at: Date | string | null;\n      organization_id: string | null;\n      target_id: string | null;\n      target_kind: string | null;\n    }>(\n      `SELECT action, actor_user_id, created_at, organization_id, target_id, target_kind\n\t\t\t FROM athena.authorization_audit_log\n\t\t\t ORDER BY created_at DESC\n\t\t\t LIMIT 100`\n    );\n    const audit = auditResult.rows.map((row) => ({\n      action: row.action,\n      actorUserId: row.actor_user_id,\n      createdAt:\n        row.created_at instanceof Date\n          ? row.created_at.toISOString()\n          : typeof row.created_at === \"string\"\n            ? row.created_at\n            : null,\n      organizationId: row.organization_id,\n      targetId: row.target_id,\n      targetKind: row.target_kind,\n    }));\n    const revisionResult = await this.db.query<{ revision: string }>(\n      `SELECT COALESCE(MAX(revision), 1)::text AS revision\n\t\t\t FROM athena.authorization_revisions`\n    );\n    const revision = Number(revisionResult.rows[0]?.revision ?? 1);\n    return {\n      assignments,\n      audit,\n      revision: Number.isFinite(revision) ? revision : 1,\n      roles,\n    };\n  }\n\n  async listAudit(input: {\n    limit?: number;\n    organizationId?: string | null;\n  }): Promise<readonly Record<string, unknown>[]> {\n    const result = await this.db.query<Record<string, unknown>>(\n      `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      [input.organizationId ?? null, input.limit ?? 50]\n    );\n    return result.rows;\n  }\n\n  async resolveEffectiveRights(input: {\n    activeOrganizationId?: string | null;\n    getMember: (\n      organizationId: string,\n      userId: string\n    ) => Promise<AuthMemberRow | undefined>;\n    userId: string;\n  }): Promise<readonly AthenaRightKey[]> {\n    const platform = await this.db.query<{ right_key: string }>(\n      `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      [input.userId]\n    );\n    const keys = new Set(platform.rows.map((row) => row.right_key));\n    const organizationId = input.activeOrganizationId?.trim() ?? \"\";\n    if (organizationId.length > 0) {\n      const member = await input.getMember(organizationId, input.userId);\n      if (member) {\n        const org = await this.db.query<{ right_key: string }>(\n          `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          [member.id]\n        );\n        for (const row of org.rows) {\n          keys.add(row.right_key);\n        }\n      }\n    }\n    return [...keys]\n      .sort()\n      .map((key) => tryParseAthenaRightKey(key))\n      .filter((key): key is AthenaRightKey => key !== undefined);\n  }\n\n  async readSnapshot(input: {\n    activeOrganizationId?: string | null;\n    foundingOwnerUserId?: string | null;\n    getMember: (\n      organizationId: string,\n      userId: string\n    ) => Promise<AuthMemberRow | undefined>;\n    listMembers: (organizationId: string) => Promise<AuthMemberRow[]>;\n    userId: string;\n  }): Promise<AuthorizationSnapshot> {\n    void input.foundingOwnerUserId;\n    void input.listMembers;\n    const effectiveRights = await this.resolveEffectiveRights(input);\n    const capabilities = capabilitiesFromRights(effectiveRights);\n    const roleRows = await this.db.query<{\n      key: string;\n      name: string;\n      scope_kind: \"platform\" | \"organization\";\n    }>(\n      `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      [input.userId, input.activeOrganizationId ?? null]\n    );\n    const roles: AssignedRoleSummary[] = roleRows.rows.map((row) => ({\n      displayName: row.name,\n      key: row.key,\n      scopeKind: row.scope_kind,\n    }));\n    const assignable = await this.db.query<{\n      assignable: boolean;\n      assignment_count: string;\n      id: string;\n      key: string;\n      name: string;\n      organization_id: string | null;\n      protected: boolean;\n      right_count: string;\n      right_keys: string[];\n      scope_kind: \"platform\" | \"organization\";\n      system_kind: \"owner\" | \"admin\" | \"member\" | null;\n      version: number;\n    }>(\n      `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        (\n\t\t\t          SELECT COALESCE(\n\t\t\t            ARRAY_AGG(rr.right_key ORDER BY rr.right_key),\n\t\t\t            ARRAY[]::text[]\n\t\t\t          )\n\t\t\t          FROM athena.authorization_role_rights rr\n\t\t\t          WHERE rr.role_id = r.id\n\t\t\t        ) AS right_keys\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      [input.activeOrganizationId ?? null]\n    );\n    const hydratedAssignableRoles = assignable.rows\n      .map((row) => {\n        const record = mapRoleRow(row);\n        const rights = Array.isArray(row.right_keys)\n          ? row.right_keys.filter((key) => typeof key === \"string\")\n          : [];\n        const definition = tryHydrateAthenaRoleDefinition({\n          record,\n          rights,\n        });\n        if (!definition) {\n          return;\n        }\n        return projectAuthorizationSnapshotRole(definition, {\n          activeOrganizationId: input.activeOrganizationId,\n          assignmentCount: Number(row.assignment_count),\n          version: row.version,\n        });\n      })\n      .filter((role) => role !== undefined);\n    const assignableRoles = projectAssignableRoles({\n      activeOrganizationId: input.activeOrganizationId,\n      capabilities,\n      roles: hydratedAssignableRoles,\n    });\n    const organizationId = input.activeOrganizationId?.trim() ?? \"\";\n    const revisionRow = await this.db.query<{ revision: string }>(\n      organizationId.length > 0\n        ? `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'organization' AND organization_id = $1`\n        : `SELECT revision::text AS revision FROM athena.authorization_revisions\n\t\t\t\t   WHERE scope_kind = 'platform' AND organization_id IS NULL`,\n      organizationId.length > 0 ? [organizationId] : []\n    );\n    return {\n      ...(organizationId.length > 0\n        ? { activeOrganizationId: organizationId }\n        : {}),\n      assignableRoles,\n      capabilities,\n      effectiveRights,\n      revision: Number(revisionRow.rows[0]?.revision ?? 1),\n      roles,\n    };\n  }\n\n  async annotateMember(\n    member: AuthMemberRow,\n    actor: {\n      foundingOwnerUserId: string | null;\n      getMember: (\n        organizationId: string,\n        userId: string\n      ) => Promise<AuthMemberRow | undefined>;\n      userId: string;\n    }\n  ): Promise<MemberAuthorizationActions> {\n    const roleRow = await this.db.query<{\n      id: string;\n      key: string;\n      name: string;\n    }>(\n      `SELECT r.id, 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      [member.id]\n    );\n    const assignedRoleIds = roleRow.rows.map((row) => row.id);\n    const roleKey = roleRow.rows[0]?.key ?? mapLegacyMemberRole(member.role);\n    const roleName = roleRow.rows[0]?.name ?? roleKey;\n    const actorRights = await this.resolveEffectiveRights({\n      activeOrganizationId: member.organization_id,\n      getMember: actor.getMember,\n      userId: actor.userId,\n    });\n    const capabilities = capabilitiesFromRights(actorRights);\n    const denialReasons: MemberAuthorizationActions[\"denialReasons\"] = {};\n    if (actor.foundingOwnerUserId === member.user_id) {\n      denialReasons.changeRole = FOUNDING_OWNER_ROLE_LOCKED;\n      denialReasons.remove = FOUNDING_OWNER_REMOVE_FORBIDDEN;\n    } else if (\n      actor.userId === member.user_id &&\n      roleKey === ORGANIZATION_OWNER_ROLE\n    ) {\n      denialReasons.changeRole =\n        \"Owners can't change their own role from the members table.\";\n      denialReasons.remove =\n        \"Owners can't suspend or remove themselves from the members table.\";\n    } else if (!capabilities.canChangeMemberRole) {\n      denialReasons.changeRole = \"Not allowed to change member roles.\";\n      denialReasons.remove = \"Not allowed to remove members.\";\n    }\n    return {\n      assignedRoleIds,\n      canChangeRole: denialReasons.changeRole === undefined,\n      canRemove: denialReasons.remove === undefined,\n      denialReasons,\n      roleDisplayName: roleName,\n      roleKey,\n    };\n  }\n\n  private async loadScopedRole(\n    id: string,\n    organizationId?: string | null\n  ): Promise<AthenaAuthorizationRoleRecord | undefined> {\n    const result = organizationId\n      ? await this.db.query<RoleRow>(\n          `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          [id, organizationId]\n        )\n      : await this.db.query<RoleRow>(\n          `SELECT * FROM athena.authorization_roles\n\t\t\t\t\t WHERE id = $1 AND scope_kind = 'platform' AND organization_id IS NULL`,\n          [id]\n        );\n    const row = result.rows[0];\n    return row ? mapRoleRow(row) : undefined;\n  }\n\n  private async requireScopedRole(\n    id: string,\n    organizationId?: string | null\n  ): Promise<AthenaAuthorizationRoleRecord> {\n    const role = await this.loadScopedRole(id, organizationId);\n    if (!role) {\n      throwRoleNotFound();\n    }\n    return role;\n  }\n\n  private async countAssignments(\n    role: Pick<AthenaAuthorizationRoleRecord, \"id\" | \"scopeKind\">\n  ): Promise<number> {\n    if (role.scopeKind === \"organization\") {\n      const result = await this.db.query<{ count: string }>(\n        \"SELECT COUNT(*)::text AS count FROM athena.authorization_member_roles WHERE role_id = $1\",\n        [role.id]\n      );\n      return Number(result.rows[0]?.count ?? 0);\n    }\n    const result = await this.db.query<{ count: string }>(\n      \"SELECT COUNT(*)::text AS count FROM athena.authorization_user_roles WHERE role_id = $1\",\n      [role.id]\n    );\n    return Number(result.rows[0]?.count ?? 0);\n  }\n\n  private async replaceMapping(\n    roleId: string,\n    rights: readonly string[]\n  ): Promise<void> {\n    await this.db.query(\n      \"DELETE FROM athena.authorization_role_rights WHERE role_id = $1\",\n      [roleId]\n    );\n    for (const key of rights) {\n      await this.db.query(\n        `INSERT INTO athena.authorization_role_rights (role_id, right_key)\n\t\t\t\t VALUES ($1, $2)`,\n        [roleId, parseAthenaRightKey(key)]\n      );\n    }\n  }\n\n  private async replaceUserRoleAssignmentsInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    roleIds: readonly string[];\n    userId: string;\n  }): Promise<{ revision: number }> {\n    const current = await this.readRevision(null);\n    if (input.expectedVersion !== current) {\n      throwAssignmentVersionConflict();\n    }\n    const uniqueIds = [...new Set(input.roleIds)];\n    const roles: AthenaAuthorizationRoleRecord[] = [];\n    for (const id of uniqueIds) {\n      roles.push(await this.requireScopedRole(id, null));\n    }\n    assertPlatformAssignmentRoles(roles);\n    const afterRights = (\n      await Promise.all(uniqueIds.map((id) => this.listRoleRights(id)))\n    ).flat();\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights,\n      beforeRights: [],\n      roleScope: \"platform\",\n    });\n    const admins = await this.db.query<{ user_id: string }>(\n      `SELECT ur.user_id\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 r.key = $1`,\n      [PLATFORM_ADMIN_ROLE]\n    );\n    assertNotLastPlatformAdmin({\n      currentAdminUserIds: admins.rows.map((row) => row.user_id),\n      nextHasAdmin: roles.some((role) => role.key === PLATFORM_ADMIN_ROLE),\n      targetUserId: input.userId,\n    });\n    await this.db.query(\n      \"DELETE FROM athena.authorization_user_roles WHERE user_id = $1\",\n      [input.userId]\n    );\n    for (const role of roles) {\n      await this.db.query(\n        `INSERT INTO athena.authorization_user_roles (user_id, role_id, assigned_by)\n\t\t\t\t VALUES ($1, $2, $3)`,\n        [input.userId, role.id, input.actorUserId]\n      );\n    }\n    await this.bumpRevision(null);\n    await this.writeAudit({\n      action: \"user.roles.replace\",\n      actorUserId: input.actorUserId,\n      after: { roleIds: uniqueIds },\n      targetId: input.userId,\n      targetKind: \"user\",\n    });\n    return { revision: current + 1 };\n  }\n\n  private async replaceMemberRoleAssignmentsInTransaction(input: {\n    actorRights: readonly string[];\n    actorUserId: string;\n    expectedVersion: number;\n    foundingOwnerUserId?: string | null;\n    memberId: string;\n    memberUserId: string;\n    organizationId: string;\n    roleIds: readonly string[];\n  }): Promise<{ revision: number }> {\n    const current = await this.readRevision(input.organizationId);\n    if (input.expectedVersion !== current) {\n      throwAssignmentVersionConflict();\n    }\n    const uniqueIds = [...new Set(input.roleIds)];\n    const roles: AthenaAuthorizationRoleRecord[] = [];\n    for (const id of uniqueIds) {\n      roles.push(await this.requireScopedRole(id, input.organizationId));\n    }\n    assertOrganizationAssignmentRoles({\n      foundingOwnerUserId: input.foundingOwnerUserId,\n      memberUserId: input.memberUserId,\n      organizationId: input.organizationId,\n      roles,\n    });\n    const afterRights = (\n      await Promise.all(uniqueIds.map((id) => this.listRoleRights(id)))\n    ).flat();\n    assertAuthorizationDelegationAllowed({\n      actorRights: input.actorRights,\n      afterRights,\n      beforeRights: [],\n      organizationId: input.organizationId,\n      roleScope: \"organization\",\n    });\n    await this.db.query(\n      \"DELETE FROM athena.authorization_member_roles WHERE member_id = $1\",\n      [input.memberId]\n    );\n    for (const role of roles) {\n      await this.db.query(\n        `INSERT INTO athena.authorization_member_roles (member_id, role_id, assigned_by)\n\t\t\t\t VALUES ($1, $2, $3)`,\n        [input.memberId, role.id, input.actorUserId]\n      );\n    }\n    const base = roles.find(\n      (role) => role.protected && role.systemKind != null\n    );\n    if (base) {\n      await this.db.query(\n        \"UPDATE athena.member SET role = $1, updated_at = NOW() WHERE id = $2\",\n        [persistedMemberRole(base), input.memberId]\n      );\n    }\n    await this.bumpRevision(input.organizationId);\n    await this.writeAudit({\n      action: \"member.roles.replace\",\n      actorUserId: input.actorUserId,\n      after: { roleIds: uniqueIds },\n      organizationId: input.organizationId,\n      targetId: input.memberId,\n      targetKind: \"member\",\n    });\n    return { revision: current + 1 };\n  }\n\n  private async readRevision(organizationId: string | null): Promise<number> {\n    const result = organizationId\n      ? await this.db.query<{ revision: string }>(\n          `SELECT revision::text AS revision\n\t\t\t\t\t FROM athena.authorization_revisions\n\t\t\t\t\t WHERE organization_id = $1`,\n          [organizationId]\n        )\n      : await this.db.query<{ revision: string }>(\n          `SELECT revision::text AS revision\n\t\t\t\t\t FROM athena.authorization_revisions\n\t\t\t\t\t WHERE scope_kind = 'platform' AND organization_id IS NULL`\n        );\n    return Number(result.rows[0]?.revision ?? 1);\n  }\n\n  private async bumpRoleVersion(\n    id: string,\n    expectedVersion: number\n  ): Promise<AthenaAuthorizationRoleRecord> {\n    const updated = await this.db.query<RoleRow>(\n      `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      [id, expectedVersion]\n    );\n    const row = updated.rows[0];\n    if (!row) {\n      throwRoleVersionConflict();\n    }\n    return mapRoleRow(row);\n  }\n\n  private async bumpRevision(organizationId: string | null): Promise<void> {\n    if (organizationId) {\n      await this.db.query(\n        `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        [organizationId]\n      );\n      return;\n    }\n    await this.db.query(\n      `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    );\n  }\n\n  private async writeAudit(input: {\n    action: string;\n    actorUserId?: string;\n    after?: unknown;\n    before?: unknown;\n    organizationId?: string | null;\n    targetId: string;\n    targetKind: string;\n  }): Promise<void> {\n    await this.db.query(\n      `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      [\n        crypto.randomUUID(),\n        input.actorUserId ?? null,\n        input.action,\n        input.targetKind,\n        input.targetId,\n        input.organizationId ?? null,\n        JSON.stringify(input.before ?? {}),\n        JSON.stringify(input.after ?? {}),\n      ]\n    );\n  }\n}\n\nasync function authorizationCatalogStateRelationVisible(\n  db: AthenaAuthDatabase,\n): Promise<boolean> {\n  const probed = assertQueryResult<Record<string, unknown>>(\n    await db.query(\n      \"SELECT to_regclass('athena.authorization_catalog_state') AS oid\",\n    ),\n    \"probing authorization catalog state\",\n  );\n  const oid = probed.rows[0]?.oid;\n  return oid != null && String(oid).length > 0;\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\n/** Embedded Auth generation 35 — multi-role assignments. */\nexport const ATHENA_AUTHORIZATION_MULTI_ROLE_SQL = `\nALTER TABLE athena.authorization_user_roles\n    DROP CONSTRAINT IF EXISTS authorization_user_roles_pkey;\nALTER TABLE athena.authorization_user_roles\n    ADD PRIMARY KEY (user_id, role_id);\nCREATE INDEX IF NOT EXISTS idx_authorization_user_roles_user\n    ON athena.authorization_user_roles (user_id);\nALTER TABLE athena.authorization_member_roles\n    DROP CONSTRAINT IF EXISTS authorization_member_roles_pkey;\nALTER TABLE athena.authorization_member_roles\n    ADD PRIMARY KEY (member_id, role_id);\nCREATE INDEX IF NOT EXISTS idx_authorization_member_roles_member\n    ON athena.authorization_member_roles (member_id);\n`;\n","export const authEmailEvents = {\n  organization: {\n    created: \"organization.create\",\n    member: {\n      added: \"organization.member.added\",\n      invite: \"organization.member.invite\",\n      inviteReminder: \"organization.member.invite.reminder\",\n      inviteRevoked: \"organization.member.invite.revoked\",\n      removed: \"organization.member.removed\",\n      roleUpdated: \"organization.member.role.updated\",\n    },\n  },\n  user: {\n    account: {\n      deletionConfirmation: \"user.account.delete.confirmation\",\n    },\n    email: {\n      changeConfirmation: \"user.email.change.confirmation\",\n      verify: \"user.email.verify\",\n    },\n    password: {\n      changed: \"user.password.changed\",\n      reset: \"user.password.reset\",\n    },\n    security: {\n      alert: \"user.security.alert\",\n    },\n    signIn: {\n      email: \"user.sign-in.email\",\n      otp: \"user.sign-in.otp\",\n    },\n    signUp: {\n      welcome: \"user.sign-up.welcome\",\n    },\n  },\n} as const;\n\nexport type AuthEmailEventNested = typeof authEmailEvents;\n\nexport interface AthenaAuthEmailEventDefinition {\n  category: string;\n  default_template_key: string;\n  description: string;\n  event_type: string;\n  is_active: boolean;\n  is_system: boolean;\n  optional_variables: readonly string[];\n  required_variables: readonly string[];\n}\n\nexport const AUTH_EMAIL_EVENT_CATALOG: readonly AthenaAuthEmailEventDefinition[] =\n  [\n    {\n      category: \"user_lifecycle\",\n      default_template_key: \"verification_email\",\n      description:\n        \"Verify a user email address after signup or manual verification resend.\",\n      event_type: authEmailEvents.user.email.verify,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"verification_url\"],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"password_reset_email\",\n      description: \"Send a password reset link.\",\n      event_type: authEmailEvents.user.password.reset,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"reset_url\"],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"change_email_confirmation_email\",\n      description: \"Confirm a pending user email address change.\",\n      event_type: authEmailEvents.user.email.changeConfirmation,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"verification_url\"],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"account_deletion_confirmation_email\",\n      description: \"Confirm account deletion before destructive delete.\",\n      event_type: authEmailEvents.user.account.deletionConfirmation,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"verification_url\"],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"two_factor_otp_email\",\n      description: \"Deliver one-time passcode for two-factor authentication.\",\n      event_type: authEmailEvents.user.signIn.otp,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"otp_code\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_invitation_email\",\n      description: \"Invite a member to join an organization.\",\n      event_type: authEmailEvents.organization.member.invite,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\n        \"organization_name\",\n        \"role\",\n        \"inviter_identity\",\n        \"invitation_url\",\n      ],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"magic_link_email\",\n      description:\n        \"Email-based sign-in link or magic-link authentication flow.\",\n      event_type: authEmailEvents.user.signIn.email,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\"],\n      required_variables: [\"sign_in_url\"],\n    },\n    {\n      category: \"user_lifecycle\",\n      default_template_key: \"welcome_email\",\n      description: \"Welcome message after account creation.\",\n      event_type: authEmailEvents.user.signUp.welcome,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"dashboard_url\"],\n      required_variables: [\"user_name\"],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"password_changed_email\",\n      description: \"Security notification after password change completes.\",\n      event_type: authEmailEvents.user.password.changed,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"support_url\"],\n      required_variables: [],\n    },\n    {\n      category: \"user_security\",\n      default_template_key: \"security_alert_email\",\n      description:\n        \"General security alert notification (suspicious sign-in, new device, policy event).\",\n      event_type: authEmailEvents.user.security.alert,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"support_url\"],\n      required_variables: [\"alert_title\", \"alert_details\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_created_email\",\n      description: \"Organization creation confirmation and onboarding.\",\n      event_type: authEmailEvents.organization.created,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"organization_url\"],\n      required_variables: [\"organization_name\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_member_added_email\",\n      description: \"Notify when a member is added without invite flow.\",\n      event_type: authEmailEvents.organization.member.added,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"actor_identity\"],\n      required_variables: [\"organization_name\", \"member_identity\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_member_removed_email\",\n      description: \"Notify when a member is removed from an organization.\",\n      event_type: authEmailEvents.organization.member.removed,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"actor_identity\"],\n      required_variables: [\"organization_name\", \"member_identity\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_member_role_updated_email\",\n      description: \"Notify when organization member role is changed.\",\n      event_type: authEmailEvents.organization.member.roleUpdated,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"previous_role\", \"actor_identity\"],\n      required_variables: [\"organization_name\", \"member_identity\", \"new_role\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_invitation_reminder_email\",\n      description: \"Reminder message for pending organization invitations.\",\n      event_type: authEmailEvents.organization.member.inviteReminder,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"role\", \"inviter_identity\"],\n      required_variables: [\"organization_name\", \"invitation_url\"],\n    },\n    {\n      category: \"organization_lifecycle\",\n      default_template_key: \"organization_invitation_revoked_email\",\n      description: \"Notification that an invitation has been revoked.\",\n      event_type: authEmailEvents.organization.member.inviteRevoked,\n      is_active: true,\n      is_system: true,\n      optional_variables: [\"app_name\", \"inviter_identity\"],\n      required_variables: [\"organization_name\", \"invited_email\"],\n    },\n  ];\n\nexport function flattenAuthEmailEvents(\n  tree: unknown,\n  acc: string[] = []\n): string[] {\n  if (typeof tree === \"string\") {\n    acc.push(tree);\n    return acc;\n  }\n  if (tree && typeof tree === \"object\") {\n    for (const value of Object.values(tree)) {\n      flattenAuthEmailEvents(value, acc);\n    }\n  }\n  return acc;\n}\n\nexport function getAuthEmailEventDefinition(\n  eventType: string | null | undefined\n): AthenaAuthEmailEventDefinition | undefined {\n  if (!eventType) {\n    return;\n  }\n  return AUTH_EMAIL_EVENT_CATALOG.find(\n    (entry) => entry.event_type === eventType\n  );\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\n    .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    )\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","export const ATHENA_AUTH_SIGNING_KEYS_SQL = `\nCREATE TABLE IF NOT EXISTS athena.auth_signing_keys (\n    kid TEXT PRIMARY KEY,\n    issuer TEXT NOT NULL,\n    status TEXT NOT NULL,\n    algorithm TEXT NOT NULL DEFAULT 'ES256',\n    public_jwk JSONB NOT NULL,\n    private_jwk_ciphertext TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    activated_at TIMESTAMPTZ,\n    retires_at TIMESTAMPTZ,\n    expires_at TIMESTAMPTZ\n);\nCREATE UNIQUE INDEX IF NOT EXISTS uq_auth_signing_keys_active_issuer\n    ON athena.auth_signing_keys (issuer)\n    WHERE status = 'active';\nCREATE INDEX IF NOT EXISTS idx_auth_signing_keys_issuer_status\n    ON athena.auth_signing_keys (issuer, status);\n`;\n\nexport const ATHENA_AUTH_EMAIL_FAILURE_PROVENANCE_SQL = `\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS error_code TEXT;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS template_id TEXT;\nALTER TABLE athena.email_send_failures\n    ADD COLUMN IF NOT EXISTS template_key TEXT;\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 {\n  ATHENA_AUTHORIZATION_ASSIGNMENT_SQL,\n  ATHENA_AUTHORIZATION_CONSTRAINTS_SQL,\n  ATHENA_AUTHORIZATION_MULTI_ROLE_SQL,\n} from \"../local/authorization-sql.ts\";\nimport { ATHENA_AUTH_EMAIL_SCHEMA_STATEMENTS } from \"../local/email/schema-sql.ts\";\nimport {\n  ATHENA_AUTH_EMAIL_FAILURE_PROVENANCE_SQL,\n  ATHENA_AUTH_SIGNING_KEYS_SQL,\n} from \"../local/signing-keys-sql.ts\";\nimport { ATHENA_AUTH_SCHEMA_GENERATION } from \"./generation.ts\";\n\nexport { ATHENA_AUTH_SCHEMA_GENERATION } from \"./generation.ts\";\n\nexport interface AthenaAuthCanonicalMigration {\n  name: string;\n  sql: string;\n  version: number;\n}\n\nexport const 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    name: \"033_auth_signing_keys\",\n    sql: ATHENA_AUTH_SIGNING_KEYS_SQL,\n    version: 33,\n  },\n  {\n    name: \"034_email_failure_provenance\",\n    sql: ATHENA_AUTH_EMAIL_FAILURE_PROVENANCE_SQL,\n    version: 34,\n  },\n  {\n    name: \"035_authorization_multi_role_assignments\",\n    sql: ATHENA_AUTHORIZATION_MULTI_ROLE_SQL,\n    version: 35,\n  },\n  {\n    name: \"036_api_key_organization_scope\",\n    sql: `\nALTER TABLE athena.api_keys\n  ADD COLUMN IF NOT EXISTS organization_id TEXT REFERENCES athena.organization (id) ON DELETE SET NULL;\nCREATE INDEX IF NOT EXISTS idx_api_keys_organization_id\n  ON athena.api_keys (organization_id);\n`,\n    version: 36,\n  },\n  {\n    name: \"037_api_key_scope_discriminator\",\n    sql: `\nALTER TABLE athena.api_keys\n  ADD COLUMN IF NOT EXISTS scope_kind TEXT NOT NULL DEFAULT 'legacy';\nALTER TABLE athena.api_keys\n  DROP CONSTRAINT IF EXISTS api_keys_organization_id_fkey;\nALTER TABLE athena.api_keys\n  ADD CONSTRAINT api_keys_organization_id_fkey\n  FOREIGN KEY (organization_id) REFERENCES athena.organization (id) ON DELETE CASCADE;\nALTER TABLE athena.api_keys\n  DROP CONSTRAINT IF EXISTS api_keys_scope_kind_check;\nALTER TABLE athena.api_keys\n  ADD CONSTRAINT api_keys_scope_kind_check\n  CHECK (\n    (scope_kind = 'organization' AND organization_id IS NOT NULL)\n    OR\n    (scope_kind IN ('legacy', 'platform') AND organization_id IS NULL)\n  );\n`,\n    version: 37,\n  },\n  {\n    name: \"038_auth_rate_limits\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.auth_rate_limits (\n  key TEXT PRIMARY KEY,\n  count INTEGER NOT NULL,\n  reset_at TIMESTAMPTZ NOT NULL,\n  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\nCREATE INDEX IF NOT EXISTS idx_auth_rate_limits_reset_at\n  ON athena.auth_rate_limits (reset_at);\n`,\n    version: 38,\n  },\n  {\n    name: \"039_oauth_clients\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_clients (\n    id TEXT PRIMARY KEY,\n    client_name TEXT NOT NULL,\n    client_type TEXT NOT NULL DEFAULT 'public',\n    registration_kind TEXT NOT NULL DEFAULT 'pre-registered',\n    provider TEXT,\n    response_type TEXT NOT NULL DEFAULT 'code',\n    grant_type TEXT NOT NULL DEFAULT 'authorization_code',\n    token_authentication_method TEXT NOT NULL DEFAULT 'none',\n    redirect_uris TEXT[] NOT NULL,\n    scopes TEXT[] NOT NULL DEFAULT '{}',\n    resource_uris TEXT[] NOT NULL DEFAULT '{}',\n    client_url TEXT,\n    is_active BOOLEAN NOT NULL DEFAULT TRUE,\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 oauth_clients_type_check CHECK (client_type = 'public'),\n    CONSTRAINT oauth_clients_response_type_check CHECK (response_type = 'code'),\n    CONSTRAINT oauth_clients_grant_type_check CHECK (grant_type = 'authorization_code'),\n    CONSTRAINT oauth_clients_token_auth_check CHECK (token_authentication_method = 'none')\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_clients_active\n  ON athena.oauth_clients (is_active);\n`,\n    version: 39,\n  },\n  {\n    name: \"040_oauth_authorization_grants\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_authorization_grants (\n    id TEXT PRIMARY KEY,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    client_id TEXT NOT NULL REFERENCES athena.oauth_clients (id) ON DELETE CASCADE,\n    resource TEXT NOT NULL,\n    scopes TEXT[] NOT NULL DEFAULT '{}',\n    status TEXT NOT NULL DEFAULT 'active',\n    authorized_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    last_used_at TIMESTAMPTZ,\n    expires_at TIMESTAMPTZ,\n    revoked_at TIMESTAMPTZ,\n    revoked_by TEXT,\n    revoke_reason TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    CONSTRAINT oauth_grants_status_check\n      CHECK (status IN ('active', 'expired', 'revoked')),\n    CONSTRAINT oauth_grants_revoked_state_check\n      CHECK ((status = 'revoked' AND revoked_at IS NOT NULL) OR status <> 'revoked')\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_grants_user_id\n  ON athena.oauth_authorization_grants (user_id);\nCREATE INDEX IF NOT EXISTS idx_oauth_grants_client_id\n  ON athena.oauth_authorization_grants (client_id);\nCREATE INDEX IF NOT EXISTS idx_oauth_grants_organization_id\n  ON athena.oauth_authorization_grants (organization_id);\nCREATE INDEX IF NOT EXISTS idx_oauth_grants_status\n  ON athena.oauth_authorization_grants (status);\nCREATE INDEX IF NOT EXISTS idx_oauth_grants_expires_at\n  ON athena.oauth_authorization_grants (expires_at);\nDROP INDEX IF EXISTS athena.uq_oauth_grants_client_user_resource;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_oauth_grants_client_user_resource_org\n  ON athena.oauth_authorization_grants (client_id, user_id, organization_id, resource)\n  WHERE status = 'active' AND organization_id IS NOT NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_oauth_grants_client_user_resource_platform\n  ON athena.oauth_authorization_grants (client_id, user_id, resource)\n  WHERE status = 'active' AND organization_id IS NULL;\n`,\n    version: 40,\n  },\n  {\n    name: \"041_oauth_authorization_requests\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_authorization_requests (\n    id TEXT PRIMARY KEY,\n    request_hash TEXT NOT NULL UNIQUE,\n    client_id TEXT NOT NULL REFERENCES athena.oauth_clients (id) ON DELETE CASCADE,\n    redirect_uri TEXT NOT NULL,\n    resource TEXT NOT NULL,\n    requested_scopes TEXT[] NOT NULL DEFAULT '{}',\n    state_ciphertext TEXT NOT NULL,\n    code_challenge TEXT NOT NULL,\n    code_challenge_method TEXT NOT NULL DEFAULT 'S256',\n    user_id TEXT REFERENCES athena.users (id) ON DELETE CASCADE,\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    status TEXT NOT NULL DEFAULT 'pending',\n    expires_at TIMESTAMPTZ NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    resolved_at TIMESTAMPTZ,\n    CONSTRAINT oauth_requests_status_check\n      CHECK (status IN ('pending', 'approved', 'denied', 'expired', 'consumed')),\n    CONSTRAINT oauth_requests_pkce_check\n      CHECK (code_challenge_method = 'S256')\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_requests_expires_at\n  ON athena.oauth_authorization_requests (expires_at);\nCREATE INDEX IF NOT EXISTS idx_oauth_requests_user_id\n  ON athena.oauth_authorization_requests (user_id);\n`,\n    version: 41,\n  },\n  {\n    name: \"042_oauth_authorization_codes\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_authorization_codes (\n    id TEXT PRIMARY KEY,\n    code_hash TEXT NOT NULL UNIQUE,\n    grant_id TEXT NOT NULL REFERENCES athena.oauth_authorization_grants (id) ON DELETE CASCADE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    client_id TEXT NOT NULL REFERENCES athena.oauth_clients (id) ON DELETE CASCADE,\n    redirect_uri TEXT NOT NULL,\n    resource TEXT NOT NULL,\n    scopes TEXT[] NOT NULL DEFAULT '{}',\n    code_challenge TEXT NOT NULL,\n    code_challenge_method TEXT NOT NULL DEFAULT 'S256',\n    expires_at TIMESTAMPTZ NOT NULL,\n    consumed_at TIMESTAMPTZ,\n    consume_reason TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    CONSTRAINT oauth_codes_pkce_check\n      CHECK (code_challenge_method = 'S256')\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_codes_expires_at\n  ON athena.oauth_authorization_codes (expires_at);\nCREATE INDEX IF NOT EXISTS idx_oauth_codes_grant_id\n  ON athena.oauth_authorization_codes (grant_id);\n`,\n    version: 42,\n  },\n  {\n    name: \"043_oauth_refresh_tokens\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_refresh_tokens (\n    id TEXT PRIMARY KEY,\n    token_hash TEXT NOT NULL UNIQUE,\n    family_id TEXT NOT NULL,\n    grant_id TEXT NOT NULL REFERENCES athena.oauth_authorization_grants (id) ON DELETE CASCADE,\n    client_id TEXT NOT NULL REFERENCES athena.oauth_clients (id) ON DELETE CASCADE,\n    user_id TEXT NOT NULL REFERENCES athena.users (id) ON DELETE CASCADE,\n    organization_id TEXT REFERENCES athena.organization (id) ON DELETE CASCADE,\n    resource TEXT NOT NULL,\n    scopes TEXT[] NOT NULL DEFAULT '{}',\n    parent_token_id TEXT REFERENCES athena.oauth_refresh_tokens (id) ON DELETE SET NULL,\n    status TEXT NOT NULL DEFAULT 'active',\n    expires_at TIMESTAMPTZ NOT NULL,\n    used_at TIMESTAMPTZ,\n    rotated_at TIMESTAMPTZ,\n    revoked_at TIMESTAMPTZ,\n    revoke_reason TEXT,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    CONSTRAINT oauth_refresh_status_check\n      CHECK (status IN ('active', 'rotated', 'revoked', 'expired', 'reuse_detected'))\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_refresh_family_id\n  ON athena.oauth_refresh_tokens (family_id);\nCREATE INDEX IF NOT EXISTS idx_oauth_refresh_grant_id\n  ON athena.oauth_refresh_tokens (grant_id);\nCREATE INDEX IF NOT EXISTS idx_oauth_refresh_expires_at\n  ON athena.oauth_refresh_tokens (expires_at);\n`,\n    version: 43,\n  },\n  {\n    name: \"044_oauth_revoked_access_tokens\",\n    sql: `\nCREATE TABLE IF NOT EXISTS athena.oauth_revoked_access_tokens (\n    jti TEXT PRIMARY KEY,\n    grant_id TEXT NOT NULL REFERENCES athena.oauth_authorization_grants (id) ON DELETE CASCADE,\n    expires_at TIMESTAMPTZ NOT NULL,\n    revoked_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n    reason TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_oauth_revoked_access_tokens_expires_at\n  ON athena.oauth_revoked_access_tokens (expires_at);\nCREATE INDEX IF NOT EXISTS idx_oauth_revoked_access_tokens_grant_id\n  ON athena.oauth_revoked_access_tokens (grant_id);\n`,\n    version: 44,\n  },\n  {\n    name: \"045_session_authentication_context\",\n    sql: `\nALTER TABLE athena.sessions\n  ADD COLUMN IF NOT EXISTS authenticated_at TIMESTAMPTZ;\nUPDATE athena.sessions\n  SET authenticated_at = created_at\n  WHERE authenticated_at IS NULL;\nALTER TABLE athena.sessions\n  ALTER COLUMN authenticated_at SET NOT NULL;\nALTER TABLE athena.sessions\n  ADD COLUMN IF NOT EXISTS authentication_methods TEXT[] NOT NULL DEFAULT '{}';\n`,\n    version: 45,\n  },\n];\n\nexport const ATHENA_AUTH_CANONICAL_MIGRATIONS: readonly AthenaAuthCanonicalMigration[] =\n  ATHENA_AUTH_SCHEMA_STATEMENTS.filter(\n    (statement) => statement.version > 0\n  ).sort((left, right) => left.version - right.version);\n\nfunction latestCanonicalMigration(): AthenaAuthCanonicalMigration {\n  const latest = ATHENA_AUTH_CANONICAL_MIGRATIONS.at(-1);\n  if (latest == null) {\n    throw new Error(\"Embedded Auth canonical migration catalog is empty.\");\n  }\n  return latest;\n}\n\nexport const ATHENA_AUTH_LATEST_MIGRATION = latestCanonicalMigration();\n\nif (ATHENA_AUTH_LATEST_MIGRATION.version !== ATHENA_AUTH_SCHEMA_GENERATION) {\n  throw new Error(\n    `Embedded Auth catalog latest version ${String(ATHENA_AUTH_LATEST_MIGRATION.version)} does not match ATHENA_AUTH_SCHEMA_GENERATION ${String(ATHENA_AUTH_SCHEMA_GENERATION)}.`\n  );\n}\n\nexport function listAthenaAuthCanonicalMigrations(): AthenaAuthCanonicalMigration[] {\n  return [...ATHENA_AUTH_CANONICAL_MIGRATIONS];\n}\n\nexport function listAthenaAuthSchemaSqlStatements(): AthenaAuthCanonicalMigration[] {\n  return [...ATHENA_AUTH_SCHEMA_STATEMENTS];\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  | \"UNINITIALIZED\"\n  | \"UNREACHABLE\"\n  | \"PERMISSION_DENIED\"\n  | \"INVALID_LEDGER\"\n  | \"FUTURE_GENERATION\"\n  | \"DRIFT\"\n  | \"HEALTHY\";\n\nexport type AthenaAuthLedgerQueryFailure =\n  | \"UNINITIALIZED\"\n  | \"UNREACHABLE\"\n  | \"PERMISSION_DENIED\"\n  | \"INVALID_LEDGER\";\n\nconst NETWORK_NODE_CODES = new Set([\n  \"ECONNREFUSED\",\n  \"ECONNRESET\",\n  \"ETIMEDOUT\",\n  \"ENOTFOUND\",\n  \"EAI_AGAIN\",\n  \"EPIPE\",\n  \"EHOSTUNREACH\",\n  \"ENETUNREACH\",\n]);\n\nfunction codeOf(error: unknown): string {\n  if (error && typeof error === \"object\" && \"code\" in error) {\n    const code = (error as { code?: unknown }).code;\n    if (typeof code === \"string\" && code.trim()) {\n      return code.trim();\n    }\n  }\n  return \"\";\n}\n\nfunction messageOf(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return String(error);\n}\n\nfunction walkCauses(error: unknown): unknown[] {\n  const seen: unknown[] = [];\n  let current: unknown = error;\n  for (let depth = 0; depth < 6 && current; depth += 1) {\n    seen.push(current);\n    if (\n      typeof current !== \"object\" ||\n      current === null ||\n      !(\"cause\" in current)\n    ) {\n      break;\n    }\n    current = (current as { cause: unknown }).cause;\n  }\n  return seen;\n}\n\n/**\n * Classify an error raised while reading `athena.auth_schema_migrations`.\n */\nexport function classifyAuthLedgerQueryError(\n  error: unknown\n): AthenaAuthLedgerQueryFailure {\n  for (const node of walkCauses(error)) {\n    const code = codeOf(node);\n    if (code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\") {\n      return \"INVALID_LEDGER\";\n    }\n    if (code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\") {\n      return \"UNREACHABLE\";\n    }\n    if (code === \"ATHENA_AUTH_LEDGER_PERMISSION_DENIED\") {\n      return \"PERMISSION_DENIED\";\n    }\n    const sqlState = /^[0-9A-Z]{5}$/i.test(code) ? code.toUpperCase() : \"\";\n    if (sqlState === \"42P01\" || sqlState === \"3F000\") {\n      return \"UNINITIALIZED\";\n    }\n    if (\n      sqlState === \"42501\" ||\n      sqlState === \"25006\" ||\n      sqlState === \"28P01\" ||\n      sqlState === \"28000\"\n    ) {\n      return \"PERMISSION_DENIED\";\n    }\n    if (\n      sqlState.startsWith(\"08\") ||\n      sqlState === \"57P03\" ||\n      NETWORK_NODE_CODES.has(code)\n    ) {\n      return \"UNREACHABLE\";\n    }\n  }\n\n  const message = messageOf(error);\n  if (\n    /relation [\"']?athena\\.auth_schema_migrations[\"']? does not exist/i.test(\n      message\n    ) ||\n    /relation [\"']?auth_schema_migrations[\"']? does not exist/i.test(message) ||\n    /schema [\"']?athena[\"']? does not exist/i.test(message)\n  ) {\n    return \"UNINITIALIZED\";\n  }\n  if (\n    /permission denied|insufficient privilege|password authentication failed|not authorized/i.test(\n      message\n    )\n  ) {\n    return \"PERMISSION_DENIED\";\n  }\n  if (\n    /econnrefused|enotfound|etimedout|eai_again|econnreset|connection refused|connection terminated|timeout expired/i.test(\n      message\n    )\n  ) {\n    return \"UNREACHABLE\";\n  }\n\n  return \"UNREACHABLE\";\n}\n\nexport function healthFromAuthPlan(input: {\n  conflictCount: number;\n  hasBlockingDrift: boolean;\n  entries: ReadonlyArray<{ ledgerState: string }>;\n}): AthenaAuthLedgerHealth {\n  if (input.entries.some((entry) => entry.ledgerState === \"unknown\")) {\n    return \"FUTURE_GENERATION\";\n  }\n  if (input.hasBlockingDrift) {\n    return \"DRIFT\";\n  }\n  if (\n    input.entries.length > 0 &&\n    input.entries.every((entry) => entry.ledgerState === \"absent\")\n  ) {\n    return \"UNINITIALIZED\";\n  }\n  if (input.conflictCount > 0) {\n    return \"DRIFT\";\n  }\n  return \"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  | \"constraint-mismatch\";\n\nexport interface AthenaAuthSchemaDrift {\n  actual?: unknown;\n  expected?: unknown;\n  kind: AthenaAuthSchemaDriftKind;\n  object: string;\n}\n\ninterface CatalogSnapshot {\n  columns: Set<string>;\n  constraints: Set<string>;\n  constraintDefinitions: Map<string, string>;\n  indexes: Set<string>;\n  schemas: Set<string>;\n  tables: Set<string>;\n}\n\nconst INSPECT_SAVEPOINT = \"athena_auth_schema_inspect\";\n\n/**\n * Physical catalog probes must not abort an in-flight Auth migrate transaction.\n * PostgreSQL treats any statement error as fatal for the rest of the transaction.\n */\nasync function withInspectSavepoint<T>(\n  db: AthenaAuthDatabase,\n  run: () => Promise<T>\n): Promise<T> {\n  await db.query(`SAVEPOINT ${INSPECT_SAVEPOINT}`);\n  try {\n    const value = await run();\n    await db.query(`RELEASE SAVEPOINT ${INSPECT_SAVEPOINT}`);\n    return value;\n  } catch (error) {\n    try {\n      await db.query(`ROLLBACK TO SAVEPOINT ${INSPECT_SAVEPOINT}`);\n      await db.query(`RELEASE SAVEPOINT ${INSPECT_SAVEPOINT}`);\n    } catch {\n      // Session may already be failed closed.\n    }\n    throw error;\n  }\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  const constraintDefinitionsResult = assertQueryResult<{\n    definition: string;\n    table_schema: string;\n    table_name: string;\n    constraint_name: string;\n  }>(\n    await db.query<{\n      definition: string;\n      table_schema: string;\n      table_name: string;\n      constraint_name: string;\n    }>(\n      `SELECT n.nspname AS table_schema,\n              rel.relname AS table_name,\n              pg_con.conname AS constraint_name,\n              pg_get_constraintdef(pg_con.oid) AS definition\n       FROM pg_catalog.pg_constraint AS pg_con\n       JOIN pg_catalog.pg_class AS rel\n         ON rel.oid = pg_con.conrelid\n       JOIN pg_catalog.pg_namespace AS n\n         ON n.oid = rel.relnamespace\n       WHERE n.nspname = 'athena'`\n    ),\n    \"schema-inspect constraint definitions\"\n  );\n\n  return {\n    columns: new Set(\n      columnsResult.rows.map(\n        (row) => `${row.table_schema}.${row.table_name}.${row.column_name}`\n      )\n    ),\n    constraints: new Set(\n      constraintsResult.rows.map(\n        (row) => `${row.table_schema}.${row.table_name}.${row.constraint_name}`\n      )\n    ),\n    constraintDefinitions: new Map(\n      constraintDefinitionsResult.rows.map((row) => [\n        `${row.table_schema}.${row.table_name}.${row.constraint_name}`,\n        row.definition,\n      ])\n    ),\n    indexes: new Set(\n      indexesResult.rows.map((row) => `${row.schemaname}.${row.indexname}`)\n    ),\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  };\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          expected: name,\n          kind: \"missing-schema\",\n          object: expectation.object,\n        };\n      }\n      return;\n    }\n    case \"table\": {\n      if (!catalog.tables.has(expectation.object)) {\n        return {\n          expected: expectation.object,\n          kind: \"missing-table\",\n          object: expectation.object,\n        };\n      }\n      return;\n    }\n    case \"column\": {\n      if (!catalog.columns.has(expectation.object)) {\n        return {\n          expected: expectation.object,\n          kind: \"missing-column\",\n          object: expectation.object,\n        };\n      }\n      return;\n    }\n    case \"index\": {\n      if (!catalog.indexes.has(expectation.object)) {\n        return {\n          expected: expectation.object,\n          kind: \"missing-index\",\n          object: expectation.object,\n        };\n      }\n      return;\n    }\n    case \"constraint\": {\n      if (!catalog.constraints.has(expectation.object)) {\n        return {\n          expected: expectation.object,\n          kind: \"missing-constraint\",\n          object: expectation.object,\n        };\n      }\n      if (expectation.definition != null) {\n        const actual = catalog.constraintDefinitions.get(expectation.object);\n        if (\n          actual == null ||\n          !constraintDefinitionsMatch(actual, expectation.definition)\n        ) {\n          return {\n            actual,\n            expected: expectation.definition,\n            kind: \"constraint-mismatch\",\n            object: expectation.object,\n          };\n        }\n      }\n      return;\n    }\n    default:\n      return;\n  }\n}\n\nfunction normalizeDefinition(definition: string): string {\n  return definition.replace(/\\s+/g, \" \").trim().toLowerCase();\n}\n\nfunction unwrapBalancedParens(value: string): string {\n  let text = value.trim();\n  while (text.startsWith(\"(\") && text.endsWith(\")\")) {\n    let depth = 0;\n    let wrapsAll = true;\n    for (let index = 0; index < text.length; index += 1) {\n      const character = text[index];\n      if (character === \"(\") {\n        depth += 1;\n      } else if (character === \")\") {\n        depth -= 1;\n        if (depth === 0 && index < text.length - 1) {\n          wrapsAll = false;\n          break;\n        }\n      }\n    }\n    if (!wrapsAll) {\n      break;\n    }\n    text = text.slice(1, -1).trim();\n  }\n  return text;\n}\n\nfunction canonicalConstraintDefinition(definition: string): string {\n  let text = normalizeDefinition(definition);\n  if (text.startsWith(\"check \")) {\n    text = text.slice(\"check \".length).trim();\n  }\n  return unwrapBalancedParens(text);\n}\n\nfunction constraintDefinitionsMatch(actual: string, expected: string): boolean {\n  const canonicalActual = canonicalConstraintDefinition(actual);\n  const canonicalExpected = canonicalConstraintDefinition(expected);\n  return (\n    canonicalActual === canonicalExpected ||\n    canonicalActual.includes(canonicalExpected) ||\n    canonicalExpected.includes(canonicalActual)\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 byMigration = await inspectAthenaAuthMigrationExpectations(db, [\n    { expectations, version: 0 },\n  ]);\n  return byMigration.get(0) ?? [];\n}\n\nexport async function inspectAthenaAuthMigrationExpectations(\n  db: AthenaAuthDatabase,\n  expectationSets: readonly {\n    expectations: readonly SchemaExpectation[];\n    version: number;\n  }[]\n): Promise<ReadonlyMap<number, AthenaAuthSchemaDrift[]>> {\n  const inspectCatalog = () =>\n    inspectCatalogAgainstExpectations(db, expectationSets);\n  if (db.inTransaction !== true) {\n    return inspectCatalog();\n  }\n  return withInspectSavepoint(db, inspectCatalog);\n}\n\nasync function inspectCatalogAgainstExpectations(\n  db: AthenaAuthDatabase,\n  expectationSets: readonly {\n    expectations: readonly SchemaExpectation[];\n    version: number;\n  }[]\n): Promise<ReadonlyMap<number, AthenaAuthSchemaDrift[]>> {\n  const catalog = await loadCatalogSnapshot(db);\n  const driftByMigration = new Map<number, AthenaAuthSchemaDrift[]>();\n  for (const set of expectationSets) {\n    if (set.expectations.length === 0) {\n      continue;\n    }\n    const drift: AthenaAuthSchemaDrift[] = [];\n    for (const expectation of set.expectations) {\n      const item = evaluateExpectation(expectation, catalog);\n      if (item) {\n        drift.push(item);\n      }\n    }\n    if (drift.length > 0) {\n      driftByMigration.set(set.version, drift);\n    }\n  }\n  return driftByMigration;\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  column?: string;\n  definition?: string;\n  kind: SchemaExpectationKind;\n  name?: string;\n  /** Fully-qualified display name, e.g. athena.users or athena.idx_users_email */\n  object: string;\n  schema?: string;\n  table?: string;\n}\n\nexport interface AthenaAuthMigrationDefinition {\n  expectations?: readonly SchemaExpectation[];\n  name: string;\n  repairability?: MigrationRepairability;\n  sql: string;\n  version: number;\n}\n\nexport function schema(name: string): SchemaExpectation {\n  return { kind: \"schema\", name, object: name, schema: name };\n}\n\nexport function table(\n  schemaName: string,\n  tableName: string\n): SchemaExpectation {\n  return {\n    kind: \"table\",\n    name: tableName,\n    object: `${schemaName}.${tableName}`,\n    schema: schemaName,\n    table: tableName,\n  };\n}\n\nexport function column(\n  schemaName: string,\n  tableName: string,\n  columnName: string\n): SchemaExpectation {\n  return {\n    column: columnName,\n    kind: \"column\",\n    name: columnName,\n    object: `${schemaName}.${tableName}.${columnName}`,\n    schema: schemaName,\n    table: tableName,\n  };\n}\n\nexport function index(\n  schemaName: string,\n  indexName: string\n): SchemaExpectation {\n  return {\n    kind: \"index\",\n    name: indexName,\n    object: `${schemaName}.${indexName}`,\n    schema: schemaName,\n  };\n}\n\nexport function constraint(\n  schemaName: string,\n  tableName: string,\n  constraintName: string,\n  definition?: string\n): SchemaExpectation {\n  return {\n    kind: \"constraint\",\n    name: constraintName,\n    object: `${schemaName}.${tableName}.${constraintName}`,\n    schema: schemaName,\n    table: tableName,\n    ...(definition ? { definition } : {}),\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(\n      \"athena\",\n      \"authorization_roles\",\n      \"authorization_roles_scope_organization_id\"\n    ),\n    constraint(\n      \"athena\",\n      \"authorization_revisions\",\n      \"authorization_revisions_scope_nullability\"\n    ),\n  ],\n  33: [table(\"athena\", \"auth_signing_keys\")],\n  34: [\n    column(\"athena\", \"email_send_failures\", \"error_code\"),\n    column(\"athena\", \"email_send_failures\", \"template_id\"),\n    column(\"athena\", \"email_send_failures\", \"template_key\"),\n  ],\n  35: [\n    constraint(\n      \"athena\",\n      \"authorization_user_roles\",\n      \"authorization_user_roles_pkey\",\n      \"PRIMARY KEY (user_id, role_id)\"\n    ),\n    constraint(\n      \"athena\",\n      \"authorization_member_roles\",\n      \"authorization_member_roles_pkey\",\n      \"PRIMARY KEY (member_id, role_id)\"\n    ),\n    index(\"athena\", \"idx_authorization_user_roles_user\"),\n    index(\"athena\", \"idx_authorization_member_roles_member\"),\n  ],\n  36: [\n    column(\"athena\", \"api_keys\", \"organization_id\"),\n    index(\"athena\", \"idx_api_keys_organization_id\"),\n  ],\n  37: [\n    column(\"athena\", \"api_keys\", \"scope_kind\"),\n    constraint(\n      \"athena\",\n      \"api_keys\",\n      \"api_keys_organization_id_fkey\",\n      \"FOREIGN KEY (organization_id) REFERENCES athena.organization(id) ON DELETE CASCADE\"\n    ),\n    constraint(\n      \"athena\",\n      \"api_keys\",\n      \"api_keys_scope_kind_check\",\n      \"CHECK (((scope_kind = 'organization'::text) AND (organization_id IS NOT NULL)) OR ((scope_kind = ANY (ARRAY['legacy'::text, 'platform'::text])) AND (organization_id IS NULL)))\"\n    ),\n  ],\n  38: [\n    table(\"athena\", \"auth_rate_limits\"),\n    index(\"athena\", \"idx_auth_rate_limits_reset_at\"),\n  ],\n  39: [\n    table(\"athena\", \"oauth_clients\"),\n    column(\"athena\", \"oauth_clients\", \"resource_uris\"),\n    index(\"athena\", \"idx_oauth_clients_active\"),\n  ],\n  40: [\n    table(\"athena\", \"oauth_authorization_grants\"),\n    index(\"athena\", \"idx_oauth_grants_user_id\"),\n    index(\"athena\", \"idx_oauth_grants_client_id\"),\n    index(\"athena\", \"uq_oauth_grants_client_user_resource_org\"),\n    index(\"athena\", \"uq_oauth_grants_client_user_resource_platform\"),\n  ],\n  41: [\n    table(\"athena\", \"oauth_authorization_requests\"),\n    column(\"athena\", \"oauth_authorization_requests\", \"code_challenge\"),\n    index(\"athena\", \"idx_oauth_requests_expires_at\"),\n  ],\n  42: [\n    table(\"athena\", \"oauth_authorization_codes\"),\n    column(\"athena\", \"oauth_authorization_codes\", \"code_hash\"),\n    index(\"athena\", \"idx_oauth_codes_expires_at\"),\n  ],\n  43: [\n    table(\"athena\", \"oauth_refresh_tokens\"),\n    column(\"athena\", \"oauth_refresh_tokens\", \"family_id\"),\n    index(\"athena\", \"idx_oauth_refresh_family_id\"),\n  ],\n  44: [\n    table(\"athena\", \"oauth_revoked_access_tokens\"),\n    column(\"athena\", \"oauth_revoked_access_tokens\", \"jti\"),\n    index(\"athena\", \"idx_oauth_revoked_access_tokens_expires_at\"),\n  ],\n  45: [\n    column(\"athena\", \"sessions\", \"authenticated_at\"),\n    column(\"athena\", \"sessions\", \"authentication_methods\"),\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 {\n  ATHENA_MIGRATE_REPAIR_COMMAND,\n  ATHENA_MIGRATE_REPAIR_YES_COMMAND,\n  ATHENA_NPX_MIGRATE_COMMAND,\n} from \"../../migrations/commands.ts\";\nimport { PostgresAuthorizationStore } from \"../../runtime/authorization/postgres.ts\";\nimport { ATHENA_AUTH_MIGRATION_ADVISORY_LOCK } from \"../contract/index.ts\";\nimport {\n  ATHENA_AUTH_CANONICAL_MIGRATIONS,\n  ATHENA_AUTH_SCHEMA_GENERATION,\n  ATHENA_AUTH_SCHEMA_STATEMENTS,\n  type AthenaAuthCanonicalMigration,\n} from \"../schema/migrations.ts\";\nimport {\n  ATHENA_AUTH_SCHEMA_MIGRATE_TIMEOUT_MS,\n  type AthenaAuthDatabase,\n  assertQueryResult,\n} from \"./database.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 { inspectAthenaAuthMigrationExpectations } from \"./schema-inspect.ts\";\nimport {\n  ATHENA_AUTH_MIGRATION_EXPECTATIONS,\n  type MigrationRepairability,\n  repairabilityForAuthMigration,\n} from \"./schema-manifest.ts\";\n\nconst SCHEMA_STATEMENTS = ATHENA_AUTH_SCHEMA_STATEMENTS;\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 interface AthenaAuthSchemaReadiness {\n  currentGeneration: number;\n  ledger: AthenaAuthSchemaCompatibility;\n  missingMigrations: number[];\n  physicalSchemaDrift: AthenaAuthSchemaDrift[];\n  physicalSchemaValid: boolean;\n  ready: boolean;\n  requiredGeneration: 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 = \"none\" | \"apply\" | \"repair\" | \"blocked\";\n\nexport interface AthenaAuthMigrationPlanEntry {\n  action: AthenaAuthMigrationAction;\n  checksum: string;\n  drift?: AthenaAuthSchemaDrift[];\n  ledgerState: AthenaAuthLedgerState;\n  name: string;\n  repairability: MigrationRepairability;\n  schemaState: AthenaAuthSchemaState;\n  version: number;\n}\n\nexport interface AthenaAuthMigrationPlan {\n  appliedCount: number;\n  conflictCount: number;\n  driftCount: number;\n  entries: AthenaAuthMigrationPlanEntry[];\n  hasBlockingDrift: boolean;\n  health: AthenaAuthLedgerHealth;\n  pendingCount: number;\n}\n\nexport interface AthenaAuthRepairResult {\n  dryRun: boolean;\n  repaired: AthenaAuthMigrationPlanEntry[];\n  skipped: AthenaAuthMigrationPlanEntry[];\n}\n\nfunction ledgeredStatements(): (typeof SCHEMA_STATEMENTS)[number][] {\n  return [...ATHENA_AUTH_CANONICAL_MIGRATIONS];\n}\n\nfunction statementByVersion(\n  version: number,\n): (typeof SCHEMA_STATEMENTS)[number] | undefined {\n  return ATHENA_AUTH_CANONICAL_MIGRATIONS.find(\n    (statement) => statement.version === version,\n  );\n}\n\nexport type { AthenaAuthCanonicalMigration } from \"../schema/migrations.ts\";\n\n/** Package-owned Auth generations (ledgered, version > 0). Execution SSOT. */\nexport function listAthenaAuthCanonicalMigrations(): AthenaAuthCanonicalMigration[] {\n  return [...ATHENA_AUTH_CANONICAL_MIGRATIONS];\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: readonly 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(\n    (version) => version > expectedGeneration,\n  );\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(\n  status: AthenaAuthSchemaCompatibility,\n): {\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    ${ATHENA_NPX_MIGRATE_COMMAND}\\n${formatMissingLines(status.missing)}${mismatch}${unknown}`,\n    };\n  }\n  if (status.current === 0) {\n    return {\n      code: \"ATHENA_AUTH_SCHEMA_MISSING\",\n      message: `ATHENA_AUTH_SCHEMA_MISSING\\n\\nAthena Auth schema is not installed.\\n\\nRun:\\n\\n    ${ATHENA_NPX_MIGRATE_COMMAND}`,\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    ${ATHENA_NPX_MIGRATE_COMMAND}${formatMissingLines(status.missing)}`,\n  };\n}\n\nfunction formatSchemaPhysicalError(readiness: AthenaAuthSchemaReadiness): {\n  code: string;\n  message: string;\n} {\n  const missing = readiness.physicalSchemaDrift\n    .map((item) => `    ${item.kind.replace(\"missing-\", \"\")} ${item.object}`)\n    .join(\"\\n\");\n  return {\n    code: \"ATHENA_AUTH_SCHEMA_INVALID\",\n    message: [\n      \"ATHENA_AUTH_SCHEMA_INVALID\",\n      \"\",\n      `Embedded Athena Auth schema generation ${readiness.requiredGeneration} has physical drift.`,\n      `Database currently has generation ${readiness.currentGeneration}.`,\n      \"\",\n      \"Missing invariants:\",\n      missing || \"    (structural invariant)\",\n      \"\",\n      \"Run:\",\n      \"\",\n      `    ${ATHENA_MIGRATE_REPAIR_YES_COMMAND}`,\n    ].join(\"\\n\"),\n  };\n}\n\nfunction authSchemaMigrationsRelationVisible(\n  row: Record<string, unknown> | undefined,\n): boolean {\n  if (row == null) {\n    return false;\n  }\n  if (\"oid\" in row) {\n    const oid = row.oid;\n    return oid != null && String(oid).length > 0;\n  }\n  // Test doubles often return ledger rows for any auth_schema_migrations SQL.\n  return true;\n}\n\nasync function authSchemaMigrationsTableExists(\n  db: AthenaAuthDatabase,\n): Promise<boolean> {\n  const probed = assertQueryResult<Record<string, unknown>>(\n    await db.query(\n      \"SELECT to_regclass('athena.auth_schema_migrations') AS oid\",\n    ),\n    \"probing migration ledger\",\n  );\n  return authSchemaMigrationsRelationVisible(probed.rows[0]);\n}\n\nasync function authSchemaMigrationsHasChecksumColumn(\n  db: AthenaAuthDatabase,\n): Promise<boolean> {\n  const columns = assertQueryResult<{\n    column_name?: string;\n    version?: number;\n  }>(\n    await db.query(\n      `SELECT column_name\n       FROM information_schema.columns\n       WHERE table_schema = 'athena'\n         AND table_name = 'auth_schema_migrations'\n         AND column_name = 'checksum'`,\n    ),\n    \"probing migration ledger checksum column\",\n  );\n  if (columns.rows.some((row) => row.column_name === \"checksum\")) {\n    return true;\n  }\n  return columns.rows.some((row) => row.version != null);\n}\n\nasync function readAuthSchemaLedgerRows(\n  db: AthenaAuthDatabase,\n): Promise<AthenaAuthLedgerEntry[]> {\n  try {\n    if (!(await authSchemaMigrationsTableExists(db))) {\n      return [];\n    }\n    const includeChecksum = await authSchemaMigrationsHasChecksumColumn(db);\n    if (includeChecksum) {\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    }\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 (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    throw wrapAuthLedgerQueryError(error);\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      error.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\")\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 * Transaction-owned advisory lock for Embedded Auth migrations.\n * Must not use pooled `pg_advisory_lock` — that lock is session-scoped and\n * `AthenaAuthDatabase.query()` does not pin a physical connection.\n * Distinct from application `pg_advisory_lock(ATHA, MIGS)` on the migrate\n * backend session.\n * Uses the schema-migrate budget, not the 15s request-path SQL timeout —\n * empty-DB apply of the full Auth catalog is one transaction.\n */\nexport async function withAthenaAuthMigrationLock<T>(\n  db: AthenaAuthDatabase,\n  fn: (tx: AthenaAuthDatabase) => Promise<T>,\n): Promise<T> {\n  return db.transaction(\n    async (tx) => {\n      await tx.query(\"SELECT pg_advisory_xact_lock($1)\", [\n        ATHENA_AUTH_MIGRATION_ADVISORY_LOCK,\n      ]);\n      return fn(tx);\n    },\n    { operationTimeoutMs: ATHENA_AUTH_SCHEMA_MIGRATE_TIMEOUT_MS },\n  );\n}\n\nfunction formatDriftBlock(\n  entries: readonly AthenaAuthMigrationPlanEntry[],\n): 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: {\n    inspectSchema?: boolean;\n    ledgerRows?: readonly AthenaAuthLedgerEntry[];\n  } = {},\n): Promise<AthenaAuthMigrationPlan> {\n  const inspectSchema = options.inspectSchema !== false;\n  const expected = getAthenaAuthExpectedLedger();\n  let actualRows: AthenaAuthLedgerEntry[];\n  if (options.ledgerRows) {\n    actualRows = [...options.ledgerRows];\n  } else {\n    try {\n      actualRows = await readAuthSchemaLedgerRows(db);\n    } catch (error) {\n      throw wrapAuthLedgerQueryError(error);\n    }\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  let driftByVersion = new Map<number, AthenaAuthSchemaDrift[]>();\n  let inspectionError: unknown;\n  const inspectAppliedSchema = inspectSchema && actualRows.length > 0;\n  if (inspectAppliedSchema) {\n    try {\n      driftByVersion = new Map(\n        await inspectAthenaAuthMigrationExpectations(\n          db,\n          expected.map((entry) => ({\n            expectations:\n              ATHENA_AUTH_MIGRATION_EXPECTATIONS[entry.version] ?? [],\n            version: entry.version,\n          })),\n        ),\n      );\n    } catch (error) {\n      if (\n        error instanceof AthenaAuthRuntimeError &&\n        (error.code === \"ATHENA_AUTH_DATABASE_RESULT_INVALID\" ||\n          error.code === \"ATHENA_AUTH_DATABASE_TIMEOUT\" ||\n          error.code === \"ATHENA_AUTH_LEDGER_UNREACHABLE\")\n      ) {\n        throw error;\n      }\n      inspectionError = error;\n    }\n  }\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 (entry.checksum && checksum && checksum !== entry.checksum) {\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        if (inspectionError) {\n          schemaState = \"unknown\";\n        } else {\n          drift = driftByVersion.get(entry.version);\n          schemaState = drift ? \"drift\" : \"healthy\";\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      action,\n      checksum: entry.checksum ?? \"\",\n      drift,\n      ledgerState,\n      name: entry.name,\n      repairability: repairabilityForAuthMigration(),\n      schemaState,\n      version: entry.version,\n    });\n  }\n\n  for (const [version, row] of actualByVersion) {\n    if (expectedVersions.has(version)) {\n      continue;\n    }\n    entries.push({\n      action: \"blocked\",\n      checksum: row.checksum ?? \"\",\n      ledgerState: \"unknown\",\n      name: row.name ?? String(version).padStart(3, \"0\"),\n      repairability: \"manual\",\n      schemaState: \"unknown\",\n      version,\n    });\n  }\n\n  entries.sort((a, b) => a.version - b.version);\n\n  const appliedCount = entries.filter(\n    (e) => e.ledgerState === \"applied\" && e.schemaState !== \"drift\",\n  ).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    appliedCount,\n    conflictCount,\n    driftCount,\n    entries,\n    hasBlockingDrift,\n    health: healthFromAuthPlan({\n      conflictCount,\n      entries,\n      hasBlockingDrift,\n    }),\n    pendingCount,\n  };\n}\n\nexport async function repairAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { dryRun?: boolean } = {},\n): Promise<AthenaAuthRepairResult> {\n  return withAthenaAuthMigrationLock(db, async (tx) => {\n    const plan = await planAthenaAuthSchema(tx, { inspectSchema: true });\n    const toRepair = plan.entries.filter((entry) => entry.action === \"repair\");\n    const skipped = toRepair.filter(\n      (entry) => entry.repairability !== \"idempotent\",\n    );\n    const repairable = toRepair.filter(\n      (entry) => entry.repairability === \"idempotent\",\n    );\n\n    if (options.dryRun) {\n      return { dryRun: true, repaired: repairable, skipped };\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    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    return { dryRun: false, repaired: repairable, skipped };\n  });\n}\n\nexport async function migrateAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n  options: { allowDrift?: boolean } = {},\n): Promise<AthenaAuthSchemaStatus> {\n  await withAthenaAuthMigrationLock(db, async (tx) => {\n    const expected = getAthenaAuthExpectedLedger();\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    // 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(tx, { 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_MIGRATE_REPAIR_COMMAND}`,\n          ].join(\"\\n\"),\n          { code: \"ATHENA_AUTH_SCHEMA_DRIFT\" },\n        );\n      }\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        compatible: false,\n        direction: \"history-diverged\",\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).ensureCatalog();\n  await assertAthenaAuthSchemaCompatible(db, { inspectSchema: true });\n  return readAthenaAuthSchemaStatus(db);\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 inspectAthenaAuthSchema(\n  db: AthenaAuthDatabase,\n): Promise<AthenaAuthSchemaReadiness> {\n  const ledgerRows = await readAuthSchemaLedgerRows(db);\n  const ledger = compareAthenaAuthLedgers(ledgerRows);\n  const plan = await planAthenaAuthSchema(db, {\n    inspectSchema: true,\n    ledgerRows,\n  });\n  const physicalSchemaDrift = plan.entries.flatMap(\n    (entry) => entry.drift ?? [],\n  );\n  const physicalSchemaValid =\n    !plan.hasBlockingDrift &&\n    plan.entries.every(\n      (entry) =>\n        entry.ledgerState !== \"applied\" || entry.schemaState === \"healthy\",\n    );\n  return {\n    currentGeneration: ledger.current,\n    ledger,\n    missingMigrations: ledger.missing,\n    physicalSchemaDrift,\n    physicalSchemaValid,\n    ready: ledger.compatible && physicalSchemaValid,\n    requiredGeneration: ledger.expected,\n  };\n}\n\nexport async function assertAthenaAuthSchemaCompatible(\n  db: AthenaAuthDatabase,\n  options: { inspectSchema?: boolean } = {},\n): Promise<AthenaAuthSchemaCompatibility> {\n  const readiness = options.inspectSchema\n    ? await inspectAthenaAuthSchema(db)\n    : undefined;\n  const status = readiness?.ledger ?? (await readAthenaAuthSchemaStatus(db));\n  if (status.compatible) {\n    if (readiness && !readiness.physicalSchemaValid) {\n      const formatted = formatSchemaPhysicalError(readiness);\n      throw new AthenaAuthRuntimeError(500, formatted.message, {\n        code: formatted.code,\n      });\n    }\n    return status;\n  }\n  const formatted = formatSchemaCompatibilityError(status);\n  throw new AthenaAuthRuntimeError(500, formatted.message, {\n    code: formatted.code,\n  });\n}\n","import type { AthenaGatewayErrorCode } from \"../gateway/types.ts\";\nimport type { AthenaErrorKind } from \"./types.ts\";\n\nexport function classifyAthenaError(\n  status: number | undefined,\n  code: AthenaGatewayErrorCode | undefined,\n  message: string\n): AthenaErrorKind {\n  const lower = message.toLowerCase();\n  if (\n    status === 409 ||\n    lower.includes(\"unique constraint\") ||\n    lower.includes(\"duplicate key\") ||\n    lower.includes(\"already exists\") ||\n    lower.includes(\"duplicate\")\n  ) {\n    return \"unique_violation\";\n  }\n  if (status === 404 || lower.includes(\"not found\") || lower.includes(\"no rows\")) {\n    return \"not_found\";\n  }\n  if (\n    status === 401 ||\n    status === 403 ||\n    lower.includes(\"unauthorized\") ||\n    lower.includes(\"forbidden\") ||\n    lower.includes(\"auth\")\n  ) {\n    return \"auth\";\n  }\n  if (\n    status === 429 ||\n    lower.includes(\"rate limit\") ||\n    lower.includes(\"too many requests\")\n  ) {\n    return \"rate_limit\";\n  }\n  if (\n    code === \"INVALID_URL\" ||\n    status === 400 ||\n    status === 422 ||\n    lower.includes(\"validation\") ||\n    lower.includes(\"invalid\") ||\n    lower.includes(\"malformed\")\n  ) {\n    return \"validation\";\n  }\n  if (\n    code === \"NETWORK_ERROR\" ||\n    status === 0 ||\n    (status !== undefined && status >= 500) ||\n    lower.includes(\"timeout\") ||\n    lower.includes(\"temporar\") ||\n    lower.includes(\"connection reset\") ||\n    lower.includes(\"socket\") ||\n    lower.includes(\"deadlock\")\n  ) {\n    return \"transient\";\n  }\n  return \"unknown\";\n}\n","export type AthenaErrorKind =\n  | \"unique_violation\"\n  | \"not_found\"\n  | \"validation\"\n  | \"auth\"\n  | \"rate_limit\"\n  | \"transient\"\n  | \"unknown\";\n\nexport const AthenaErrorKind = {\n  Auth: \"auth\",\n  NotFound: \"not_found\",\n  RateLimit: \"rate_limit\",\n  Transient: \"transient\",\n  UniqueViolation: \"unique_violation\",\n  Unknown: \"unknown\",\n  Validation: \"validation\",\n} as const;\n\nexport type AthenaErrorCode =\n  | \"UNIQUE_VIOLATION\"\n  | \"NOT_FOUND\"\n  | \"VALIDATION_FAILED\"\n  | \"AUTH_UNAUTHORIZED\"\n  | \"AUTH_FORBIDDEN\"\n  | \"RATE_LIMITED\"\n  | \"NETWORK_UNAVAILABLE\"\n  | \"TRANSIENT_FAILURE\"\n  | \"HTTP_FAILURE\"\n  | \"UNKNOWN\";\n\nexport const AthenaErrorCode = {\n  AuthForbidden: \"AUTH_FORBIDDEN\",\n  AuthUnauthorized: \"AUTH_UNAUTHORIZED\",\n  HttpFailure: \"HTTP_FAILURE\",\n  NetworkUnavailable: \"NETWORK_UNAVAILABLE\",\n  NotFound: \"NOT_FOUND\",\n  RateLimited: \"RATE_LIMITED\",\n  TransientFailure: \"TRANSIENT_FAILURE\",\n  UniqueViolation: \"UNIQUE_VIOLATION\",\n  Unknown: \"UNKNOWN\",\n  ValidationFailed: \"VALIDATION_FAILED\",\n} as const satisfies Record<string, AthenaErrorCode>;\n\nexport type AthenaErrorCategory =\n  | \"transport\"\n  | \"client\"\n  | \"server\"\n  | \"database\"\n  | \"unknown\";\n\nexport const AthenaErrorCategory = {\n  Client: \"client\",\n  Database: \"database\",\n  Server: \"server\",\n  Transport: \"transport\",\n  Unknown: \"unknown\",\n} as const satisfies Record<string, AthenaErrorCategory>;\n\nexport interface AthenaOperationContext {\n  identity?: string | Record<string, unknown>;\n  operation?: string;\n  table?: string;\n}\n\nexport interface NormalizedAthenaError {\n  category: AthenaErrorCategory;\n  code: AthenaErrorCode;\n  constraint?: string;\n  kind: AthenaErrorKind;\n  message: string;\n  operation?: string;\n  raw: unknown;\n  retryable: boolean;\n  status?: number;\n  table?: string;\n}\n\nexport interface AthenaErrorInput {\n  category: AthenaErrorCategory;\n  code: AthenaErrorCode;\n  context?: AthenaOperationContext;\n  kind: AthenaErrorKind;\n  message: string;\n  raw?: unknown;\n  requestId?: string;\n  retryable?: boolean;\n  status?: number;\n}\n\nexport class AthenaError extends Error {\n  readonly code: AthenaErrorCode;\n  readonly kind: AthenaErrorKind;\n  readonly category: AthenaErrorCategory;\n  readonly status?: number;\n  readonly retryable: boolean;\n  readonly requestId?: string;\n  readonly context?: AthenaOperationContext;\n  readonly raw?: unknown;\n\n  constructor(input: AthenaErrorInput) {\n    super(input.message);\n    this.name = \"AthenaError\";\n    this.code = input.code;\n    this.kind = input.kind;\n    this.category = input.category;\n    this.status = input.status;\n    this.retryable = input.retryable ?? false;\n    this.requestId = input.requestId;\n    this.context = input.context;\n    this.raw = input.raw;\n  }\n}\n","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 { normalizeAthenaError } from \"../auxiliaries.ts\";\nimport type { AthenaErrorKind } from \"./types.ts\";\n\nexport interface RetryNormalizedAthenaError {\n  kind: AthenaErrorKind;\n  retryable: boolean;\n}\n\nexport function normalizeAthenaErrorForRetry(\n  error: unknown\n): RetryNormalizedAthenaError {\n  const normalized = normalizeAthenaError(error);\n  return {\n    kind: normalized.kind,\n    retryable: normalized.retryable,\n  };\n}\n","import { normalizeAthenaErrorForRetry } from \"../error/normalize.ts\";\n\nexport type RetryBackoffStrategy =\n  | \"linear\"\n  | \"exponential\"\n  | ((attempt: number, error: unknown) => number);\n\nexport interface RetryConfig {\n  backoff?: RetryBackoffStrategy;\n  baseDelayMs?: number;\n  jitter?: boolean | number;\n  maxDelayMs?: number;\n  retries: number;\n  shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>;\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n  const normalized = normalizeAthenaErrorForRetry(error);\n  return normalized.kind === \"transient\" || normalized.kind === \"rate_limit\";\n}\n\nfunction computeDelayMs(\n  attempt: number,\n  error: unknown,\n  config: Required<\n    Pick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n  >\n): number {\n  const rawDelay =\n    typeof config.backoff === \"function\"\n      ? config.backoff(attempt, error)\n      : config.backoff === \"linear\"\n        ? config.baseDelayMs * attempt\n        : config.baseDelayMs * 2 ** (attempt - 1);\n  const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0;\n  const clamped = Math.min(config.maxDelayMs, safeDelay);\n  const jitterFactor =\n    typeof config.jitter === \"number\"\n      ? Math.max(0, Math.min(1, config.jitter))\n      : config.jitter\n        ? 0.2\n        : 0;\n  if (!jitterFactor) {\n    return clamped;\n  }\n  const deviation = clamped * jitterFactor;\n  const offset = (Math.random() * 2 - 1) * deviation;\n  return Math.max(0, clamped + offset);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\n/**\n * @deprecated Prefer capability-specific retry handling at the execution\n * boundary. This helper remains exported for compatibility.\n */\nexport async function withRetry<T>(\n  config: RetryConfig,\n  fn: () => Promise<T>\n): Promise<T> {\n  const retries = Math.max(0, Math.trunc(config.retries));\n  const shouldRetry = config.shouldRetry ?? defaultShouldRetry;\n  const resolvedConfig = {\n    backoff: config.backoff ?? \"exponential\",\n    baseDelayMs: config.baseDelayMs ?? 100,\n    jitter: config.jitter ?? false,\n    maxDelayMs: config.maxDelayMs ?? 10_000,\n  } satisfies Required<\n    Pick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n  >;\n\n  for (let attempts = 0; attempts <= retries; attempts += 1) {\n    try {\n      return await fn();\n    } catch (error) {\n      if (attempts >= retries) {\n        throw error;\n      }\n      const currentAttempt = attempts + 1;\n      if (!(await shouldRetry(error, currentAttempt))) {\n        throw error;\n      }\n      await sleep(computeDelayMs(currentAttempt, error, resolvedConfig));\n    }\n  }\n\n  throw new Error(\"withRetry reached an unexpected state\");\n}\n","import type { AthenaResult } from \"./client-result.ts\";\nimport { AthenaGatewayError, isAthenaGatewayError } from \"./gateway/errors.ts\";\nimport type {\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n} from \"./gateway/types.ts\";\nimport { classifyAthenaError } from \"./error/classify.ts\";\nimport {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  type AthenaOperationContext,\n  type NormalizedAthenaError,\n} from \"./error/types.ts\";\nimport { parseBooleanFlag as parseBooleanFlagUtil } from \"./utils/parse-boolean-flag.ts\";\nexport type {\n  AthenaErrorInput,\n  AthenaOperationContext,\n  NormalizedAthenaError,\n} from \"./error/types.ts\";\nexport {\n  AthenaError,\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n} from \"./error/types.ts\";\nexport interface UnwrapOptions {\n  allowNull?: boolean;\n  context?: AthenaOperationContext;\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n  requireExactlyOne?: boolean;\n}\n\nexport interface IntCoercionOptions {\n  max?: number;\n  min?: number;\n  strictBigInt?: boolean;\n}\n\nexport interface RequireAffectedOptions {\n  min?: number;\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean\n): boolean {\n  return parseBooleanFlagUtil(rawValue, fallback);\n}\n\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}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n  if (typeof error === \"string\" && error.trim().length > 0) {\n    return error.trim();\n  }\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message.trim();\n  }\n  if (!isRecord(error)) {\n    return;\n  }\n  return firstNonEmptyString(error.message, error.error, error.details);\n}\n\nfunction gatewayCodeFromUnknownError(\n  error: unknown\n): AthenaGatewayErrorCode | undefined {\n  if (!isRecord(error) || typeof error.gatewayCode !== \"string\") {\n    return;\n  }\n  return error.gatewayCode as AthenaGatewayErrorCode;\n}\n\nfunction isAthenaResultErrorLike(value: unknown): value is {\n  message: string;\n  athenaCode?: AthenaErrorCode;\n  kind?: AthenaErrorKind;\n  category?: AthenaErrorCategory;\n  retryable?: boolean;\n  status?: number;\n  constraint?: string;\n  table?: string;\n  operation?: string;\n  raw?: unknown;\n} {\n  return (\n    isRecord(value) &&\n    typeof value.message === \"string\" &&\n    (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n    (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n    (value.category === undefined || isAthenaErrorCategory(value.category)) &&\n    (value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n    (value.status === undefined || typeof value.status === \"number\")\n  );\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n  return (\n    value === \"unique_violation\" ||\n    value === \"not_found\" ||\n    value === \"validation\" ||\n    value === \"auth\" ||\n    value === \"rate_limit\" ||\n    value === \"transient\" ||\n    value === \"unknown\"\n  );\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n  return (\n    value === \"UNIQUE_VIOLATION\" ||\n    value === \"NOT_FOUND\" ||\n    value === \"VALIDATION_FAILED\" ||\n    value === \"AUTH_UNAUTHORIZED\" ||\n    value === \"AUTH_FORBIDDEN\" ||\n    value === \"RATE_LIMITED\" ||\n    value === \"NETWORK_UNAVAILABLE\" ||\n    value === \"TRANSIENT_FAILURE\" ||\n    value === \"HTTP_FAILURE\" ||\n    value === \"UNKNOWN\"\n  );\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n  return (\n    value === \"transport\" ||\n    value === \"client\" ||\n    value === \"server\" ||\n    value === \"database\" ||\n    value === \"unknown\"\n  );\n}\n\nfunction isNormalizedAthenaError(\n  value: unknown\n): value is NormalizedAthenaError {\n  return (\n    isRecord(value) &&\n    isAthenaErrorKind(value.kind) &&\n    isAthenaErrorCode(value.code) &&\n    isAthenaErrorCategory(value.category) &&\n    typeof value.retryable === \"boolean\" &&\n    typeof value.message === \"string\" &&\n    \"raw\" in value\n  );\n}\n\nfunction withContextOverrides(\n  normalized: NormalizedAthenaError,\n  context?: AthenaOperationContext\n): NormalizedAthenaError {\n  if (!(context?.table || context?.operation)) {\n    return normalized;\n  }\n\n  return {\n    ...normalized,\n    operation: context.operation ?? normalized.operation,\n    table: context.table ?? normalized.table,\n  };\n}\n\nfunction resolveAttachedNormalizedError(\n  resultOrError: unknown\n): NormalizedAthenaError | undefined {\n  if (!isRecord(resultOrError)) {\n    return;\n  }\n  if (!(\"__athenaNormalizedError\" in resultOrError)) {\n    return;\n  }\n  const candidate = resultOrError.__athenaNormalizedError;\n  return isNormalizedAthenaError(candidate) ? candidate : undefined;\n}\n\nfunction safeStringify(value: unknown): string {\n  try {\n    const serialized = JSON.stringify(value);\n    return serialized ?? String(value);\n  } catch {\n    return \"[unserializable]\";\n  }\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n  if (!context?.identity) {\n    return;\n  }\n  const identity =\n    typeof context.identity === \"string\"\n      ? context.identity\n      : safeStringify(context.identity);\n  return `Identity: ${identity}`;\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n  return (\n    isRecord(value) &&\n    \"status\" in value &&\n    \"error\" in value &&\n    \"data\" in value &&\n    typeof value.status === \"number\"\n  );\n}\n\nfunction operationFromDetails(\n  details?: AthenaGatewayErrorDetails | null\n): string | undefined {\n  if (!details?.endpoint) {\n    return;\n  }\n  if (\n    details.endpoint === \"/gateway/fetch\" ||\n    details.endpoint === \"/gateway/query\"\n  ) {\n    return \"select\";\n  }\n  if (details.endpoint === \"/gateway/insert\") {\n    return \"insert\";\n  }\n  if (details.endpoint === \"/gateway/update\") {\n    return \"update\";\n  }\n  if (details.endpoint === \"/gateway/delete\") {\n    return \"delete\";\n  }\n  if (\n    details.endpoint === \"/gateway/rpc\" ||\n    details.endpoint.startsWith(\"/rpc/\")\n  ) {\n    return \"rpc\";\n  }\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n  for (const pattern of patterns) {\n    const match = pattern.exec(input);\n    if (match?.[1]) {\n      return match[1];\n    }\n  }\n}\n\nfunction extractConstraint(message: string): string | undefined {\n  return matchRegex(message, [\n    /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n  ]);\n}\n\nfunction extractTable(message: string): string | undefined {\n  return matchRegex(message, [\n    /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n  ]);\n}\n\nfunction toAthenaErrorCode(\n  kind: AthenaErrorKind,\n  status: number | undefined,\n  gatewayCode?: AthenaGatewayErrorCode\n): AthenaErrorCode {\n  if (gatewayCode === \"INVALID_URL\") {\n    return AthenaErrorCode.ValidationFailed;\n  }\n\n  if (\n    gatewayCode === \"NETWORK_ERROR\" ||\n    (kind === \"transient\" && status === 0)\n  ) {\n    return AthenaErrorCode.NetworkUnavailable;\n  }\n\n  switch (kind) {\n    case \"unique_violation\":\n      return AthenaErrorCode.UniqueViolation;\n    case \"not_found\":\n      return AthenaErrorCode.NotFound;\n    case \"validation\":\n      return AthenaErrorCode.ValidationFailed;\n    case \"rate_limit\":\n      return AthenaErrorCode.RateLimited;\n    case \"auth\":\n      if (status === 403) {\n        return AthenaErrorCode.AuthForbidden;\n      }\n      return AthenaErrorCode.AuthUnauthorized;\n    case \"transient\":\n      return status !== undefined && status >= 500\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.TransientFailure;\n    default:\n      return status !== undefined && status >= 400\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.Unknown;\n  }\n}\n\nfunction toAthenaErrorCategory(\n  kind: AthenaErrorKind,\n  status: number | undefined\n): AthenaErrorCategory {\n  if (kind === \"transient\" && (status === 0 || status === undefined)) {\n    return AthenaErrorCategory.Transport;\n  }\n  if (kind === \"unique_violation\") {\n    return AthenaErrorCategory.Database;\n  }\n  if (kind === \"validation\" || kind === \"auth\" || kind === \"not_found\") {\n    return AthenaErrorCategory.Client;\n  }\n  if (kind === \"rate_limit\" || kind === \"transient\") {\n    return AthenaErrorCategory.Server;\n  }\n  return AthenaErrorCategory.Unknown;\n}\n\nfunction isRetryable(\n  kind: AthenaErrorKind,\n  status: number | undefined\n): boolean {\n  if (kind === \"rate_limit\" || kind === \"transient\") {\n    return true;\n  }\n  return status !== undefined && status >= 500;\n}\n\nfunction toGatewayCode(\n  kind: AthenaErrorKind,\n  status?: number\n): AthenaGatewayErrorCode {\n  if (kind === \"transient\" && (status === 0 || status === undefined)) {\n    return \"NETWORK_ERROR\";\n  }\n  if (kind === \"validation\") {\n    return \"INVALID_JSON\";\n  }\n  if (status !== undefined && status >= 400) {\n    return \"HTTP_ERROR\";\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nexport function toAthenaGatewayError(\n  source: unknown,\n  fallbackMessage: string,\n  context?: AthenaOperationContext\n): AthenaGatewayError {\n  if (isAthenaGatewayError(source)) {\n    return source;\n  }\n\n  if (isAthenaResultLike(source) && source.errorDetails) {\n    const message =\n      messageFromUnknownError(source.error) ??\n      source.errorDetails.message ??\n      fallbackMessage;\n    return new AthenaGatewayError({\n      cause:\n        (isRecord(source.error)\n          ? firstNonEmptyString(source.error.cause)\n          : undefined) ?? source.errorDetails.cause,\n      code: source.errorDetails.code,\n      endpoint: source.errorDetails.endpoint,\n      hint:\n        (isRecord(source.error)\n          ? firstNonEmptyString(source.error.hint)\n          : undefined) ?? source.errorDetails.hint,\n      message,\n      method: source.errorDetails.method,\n      requestId: source.errorDetails.requestId,\n      status: source.status,\n    });\n  }\n\n  const normalized = normalizeAthenaError(source, context);\n  const message =\n    isAthenaResultLike(source) &&\n    source.error === null &&\n    source.errorDetails === null\n      ? fallbackMessage\n      : normalized.message || fallbackMessage;\n\n  return new AthenaGatewayError({\n    cause:\n      typeof normalized.raw === \"string\"\n        ? normalized.raw\n        : safeStringify(normalized.raw),\n    code: toGatewayCode(normalized.kind, normalized.status),\n    hint:\n      normalized.constraint === null\n        ? contextHint(context)\n        : `Constraint: ${normalized.constraint}`,\n    message,\n    status: normalized.status ?? 0,\n  });\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n  return result.error === null && result.status >= 200 && result.status < 300;\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n  resultOrError: unknown,\n  context?: AthenaOperationContext\n): NormalizedAthenaError {\n  const attached = resolveAttachedNormalizedError(resultOrError);\n  if (attached) {\n    return withContextOverrides(attached, context);\n  }\n\n  if (isAthenaResultLike(resultOrError)) {\n    if (isAthenaResultErrorLike(resultOrError.error)) {\n      return {\n        category:\n          resultOrError.error.category ??\n          toAthenaErrorCategory(\n            resultOrError.error.kind ??\n              classifyAthenaError(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status\n          ),\n        code:\n          resultOrError.error.athenaCode ??\n          toAthenaErrorCode(\n            resultOrError.error.kind ??\n              classifyAthenaError(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error)\n          ),\n        constraint: resultOrError.error.constraint,\n        kind:\n          resultOrError.error.kind ??\n          classifyAthenaError(\n            resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error),\n            resultOrError.error.message\n          ),\n        message: resultOrError.error.message,\n        operation: context?.operation ?? resultOrError.error.operation,\n        raw: resultOrError.error.raw ?? resultOrError.raw,\n        retryable:\n          resultOrError.error.retryable ??\n          isRetryable(\n            resultOrError.error.kind ??\n              classifyAthenaError(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status\n          ),\n        status: resultOrError.error.status ?? resultOrError.status,\n        table: context?.table ?? resultOrError.error.table,\n      };\n    }\n\n    const details = resultOrError.errorDetails;\n    const message =\n      messageFromUnknownError(resultOrError.error) ??\n      details?.message ??\n      `Athena ${context?.operation ?? operationFromDetails(details) ?? \"request\"} failed`;\n    const operation = context?.operation ?? operationFromDetails(details);\n    const table = context?.table ?? extractTable(message);\n    const constraint = extractConstraint(message);\n    const gatewayCode =\n      details?.code ?? gatewayCodeFromUnknownError(resultOrError.error);\n    const kind = classifyAthenaError(resultOrError.status, gatewayCode, message);\n    const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode);\n    const category = toAthenaErrorCategory(kind, resultOrError.status);\n    return {\n      category,\n      code,\n      constraint,\n      kind,\n      message,\n      operation,\n      raw: resultOrError.raw,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      table,\n    };\n  }\n\n  if (isAthenaGatewayError(resultOrError)) {\n    const details = resultOrError.toDetails();\n    const operation = context?.operation ?? operationFromDetails(details);\n    const table = context?.table ?? extractTable(resultOrError.message);\n    const constraint = extractConstraint(resultOrError.message);\n    const kind = classifyAthenaError(\n      resultOrError.status,\n      resultOrError.code,\n      resultOrError.message\n    );\n    const code = toAthenaErrorCode(\n      kind,\n      resultOrError.status,\n      resultOrError.code\n    );\n    const category = toAthenaErrorCategory(kind, resultOrError.status);\n    return {\n      category,\n      code,\n      constraint,\n      kind,\n      message: resultOrError.message,\n      operation,\n      raw: resultOrError,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      table,\n    };\n  }\n\n  if (resultOrError instanceof Error) {\n    const maybeStatus =\n      isRecord(resultOrError) && typeof resultOrError.status === \"number\"\n        ? resultOrError.status\n        : undefined;\n    const kind = classifyAthenaError(maybeStatus, undefined, resultOrError.message);\n    return {\n      category: toAthenaErrorCategory(kind, maybeStatus),\n      code: toAthenaErrorCode(kind, maybeStatus),\n      constraint: extractConstraint(resultOrError.message),\n      kind,\n      message: resultOrError.message,\n      operation: context?.operation,\n      raw: resultOrError,\n      retryable: isRetryable(kind, maybeStatus),\n      status: maybeStatus,\n      table: context?.table ?? extractTable(resultOrError.message),\n    };\n  }\n\n  const status =\n    isRecord(resultOrError) && typeof resultOrError.status === \"number\"\n      ? resultOrError.status\n      : undefined;\n  const gatewayCode = gatewayCodeFromUnknownError(resultOrError);\n  const message =\n    messageFromUnknownError(resultOrError) ??\n    (typeof resultOrError === \"string\" ? resultOrError : \"Unknown Athena error\");\n  const kind = classifyAthenaError(status, gatewayCode, message);\n  return {\n    category: toAthenaErrorCategory(kind, status),\n    code: toAthenaErrorCode(kind, status, gatewayCode),\n    constraint: extractConstraint(message),\n    kind,\n    message,\n    operation: context?.operation,\n    raw: resultOrError,\n    retryable: isRetryable(kind, status),\n    status,\n    table: context?.table ?? extractTable(message),\n  };\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOptions\n): T[] {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      \"Athena request failed\",\n      options?.context\n    );\n  }\n  if (result.data === null) {\n    return [];\n  }\n  return Array.isArray(result.data) ? result.data : [result.data];\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options: UnwrapOptions & { allowNull: true }\n): T | null;\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions\n): T;\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions\n): T | null {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      \"Athena request failed\",\n      options?.context\n    );\n  }\n  if (result.data === null && !options?.allowNull) {\n    throw toAthenaGatewayError(\n      result,\n      \"Expected data but received null\",\n      options?.context\n    );\n  }\n  return result.data;\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options: UnwrapOneOptions & { allowNull: true }\n): T | null;\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions\n): T;\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions\n): T | null {\n  const rows = unwrapRows(result, options);\n  if (!rows.length) {\n    if (options?.allowNull) {\n      return null;\n    }\n    throw toAthenaGatewayError(\n      result,\n      \"Expected one row but received none\",\n      options?.context\n    );\n  }\n  if (options?.requireExactlyOne && rows.length !== 1) {\n    throw toAthenaGatewayError(\n      result,\n      `Expected exactly one row but received ${rows.length}`,\n      options.context\n    );\n  }\n  return rows[0];\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n  result: AthenaResult<T>,\n  context?: AthenaOperationContext\n): AthenaResult<T> {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      `Athena ${context?.operation ?? \"request\"} failed`,\n      context\n    );\n  }\n  return result;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n  return 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  result: AthenaResult<T>,\n  options?: RequireAffectedOptions,\n  context?: AthenaOperationContext\n): number {\n  requireSuccess(result, context);\n\n  const count = isFiniteNumber(result.count)\n    ? result.count\n    : isFiniteNumber(result.affectedRows)\n      ? result.affectedRows\n      : null;\n  if (count === null) {\n    throw new AthenaGatewayError({\n      cause: safeStringify(result.raw),\n      code: \"UNKNOWN_ERROR\",\n      hint: \"Fluent mutations expose count or affectedRows from adapter meta (PostgreSQL rowCount, D1 changes, Gateway envelope). Never fabricated.\",\n      message:\n        \"Expected affected row count but response.count/affectedRows is missing\",\n      status: result.status,\n    });\n  }\n\n  const minimum = options?.min;\n  if (minimum !== undefined && count < minimum) {\n    throw new AthenaGatewayError({\n      cause: safeStringify(result.raw),\n      code: \"UNKNOWN_ERROR\",\n      hint: contextHint(context),\n      message: `Expected at least ${minimum} affected rows but received ${count}`,\n      status: result.status,\n    });\n  }\n\n  return count;\n}\n\nfunction applyBounds(\n  value: number,\n  options?: IntCoercionOptions\n): number | null {\n  if (options?.min !== undefined && value < options.min) {\n    return null;\n  }\n  if (options?.max !== undefined && value > options.max) {\n    return null;\n  }\n  return value;\n}\n\nfunction parseIntegerString(value: string): number | null {\n  const normalized = value.trim();\n  if (!/^[-+]?\\d+$/.test(normalized)) {\n    return null;\n  }\n  const parsed = Number(normalized);\n  if (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n    return null;\n  }\n  return parsed;\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(\n  value: unknown,\n  options?: IntCoercionOptions\n): number | null {\n  if (value === null) {\n    return null;\n  }\n\n  if (typeof value === \"number\") {\n    if (!(Number.isFinite(value) && Number.isInteger(value))) {\n      return null;\n    }\n    return applyBounds(value, options);\n  }\n\n  if (typeof value === \"string\") {\n    const parsed = parseIntegerString(value);\n    if (parsed === null) {\n      return null;\n    }\n    return applyBounds(parsed, options);\n  }\n\n  if (typeof value === \"bigint\") {\n    if (\n      options?.strictBigInt &&\n      (value > BigInt(Number.MAX_SAFE_INTEGER) ||\n        value < BigInt(Number.MIN_SAFE_INTEGER))\n    ) {\n      return null;\n    }\n    const parsed = Number(value);\n    if (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n      return null;\n    }\n    return applyBounds(parsed, options);\n  }\n\n  return null;\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(\n  value: unknown,\n  label = \"value\",\n  options?: IntCoercionOptions\n): number {\n  const parsed = coerceInt(value, options);\n  if (parsed === null) {\n    throw new TypeError(`${label} must be a finite integer`);\n  }\n  return parsed;\n}\n\nexport {\n  withRetry,\n  type RetryBackoffStrategy,\n  type RetryConfig,\n} from \"./auxiliaries/retry.ts\";\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  \"athena/managed/auth/migrations\";\n","import type {\n  AthenaConfig,\n  AthenaConfigIr,\n  AthenaGeneratorConfig,\n  GeneratorProviderInputConfig,\n} from \"./types.ts\";\n\n/**\n * Projects a loaded project config into the shared raw configuration shape.\n *\n * Keeping this projection explicit prevents loaders from silently acquiring\n * different field vocabularies while preserving the project-only fields.\n */\nexport function toAthenaConfigIr(input: AthenaConfig): AthenaConfigIr {\n  return {\n    ...(input.experimental === undefined\n      ? {}\n      : { experimental: input.experimental }),\n    ...(input.features === undefined ? {} : { features: input.features }),\n    ...(input.filter === undefined ? {} : { filter: input.filter }),\n    ...(input.migrations === undefined ? {} : { migrations: input.migrations }),\n    ...(input.local === undefined ? {} : { local: input.local }),\n    ...(input.models === undefined ? {} : { models: input.models }),\n    ...(input.modules === undefined ? {} : { modules: input.modules }),\n    ...(input.naming === undefined ? {} : { naming: input.naming }),\n    ...(input.output === undefined ? {} : { output: input.output }),\n    ...(input.policies === undefined ? {} : { policies: input.policies }),\n    ...(input.provider === undefined ? {} : { provider: input.provider }),\n    ...(input.tooling === undefined ? {} : { tooling: input.tooling }),\n  };\n}\n\nexport function toAthenaGeneratorConfigIr(\n  input: AthenaGeneratorConfig\n): AthenaConfigIr & { provider: GeneratorProviderInputConfig } {\n  return {\n    ...toAthenaConfigIr(input),\n    provider: input.provider,\n  };\n}\n","import type {\n  GeneratorProviderConfig,\n  GeneratorSchemaSelection,\n} from \"./types.ts\";\n\nexport const DEFAULT_POSTGRES_SCHEMAS = [\"public\"] as const;\n\nfunction collectSchemaNames(\n  input: GeneratorSchemaSelection | undefined\n): string[] {\n  if (!input) {\n    return [];\n  }\n\n  const values = typeof input === \"string\" ? [input] : input;\n  return values.flatMap((value) => String(value).split(\",\"));\n}\n\n/**\n * Normalizes schema selection from config or env-backed strings into a stable,\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\n */\nexport function normalizeSchemaSelection(\n  input: GeneratorSchemaSelection | undefined\n): string[] {\n  const schemas: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of collectSchemaNames(input)) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    schemas.push(schema);\n  }\n\n  return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS];\n}\n\n/**\n * Resolves the effective schema list for provider-backed generator runs.\n */\nexport function resolveProviderSchemas(\n  providerConfig: GeneratorProviderConfig\n): string[] {\n  if (providerConfig.kind === \"postgres\") {\n    return normalizeSchemaSelection(providerConfig.schemas);\n  }\n\n  return [...DEFAULT_POSTGRES_SCHEMAS];\n}\n","import type {\n  IntrospectionSchema,\n  IntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport type {\n  GeneratorTableSelection,\n  NormalizedGeneratorFilterConfig,\n} from \"./types.ts\";\n\nfunction normalizeTableSelector(value: string): string | undefined {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function normalizeTableSelection(\n  value: GeneratorTableSelection | undefined\n): string[] {\n  if (typeof value === \"string\") {\n    return Array.from(\n      new Set(\n        value\n          .split(\",\")\n          .map(normalizeTableSelector)\n          .filter((entry): entry is string => Boolean(entry))\n      )\n    );\n  }\n\n  if (Array.isArray(value)) {\n    return Array.from(\n      new Set(\n        value\n          .map((entry) =>\n            typeof entry === \"string\"\n              ? normalizeTableSelector(entry)\n              : undefined\n          )\n          .filter((entry): entry is string => Boolean(entry))\n      )\n    );\n  }\n\n  return [];\n}\n\n/**\n * Returns repeated selectors without changing the normalized filter used for\n * matching. Keeping this separate preserves the historical set semantics while\n * allowing the generator to report configuration mistakes.\n */\nexport function findDuplicateTableSelectors(\n  value: GeneratorTableSelection | undefined\n): string[] {\n  const selectors =\n    typeof value === \"string\"\n      ? value\n          .split(\",\")\n          .map(normalizeTableSelector)\n          .filter((entry): entry is string => Boolean(entry))\n      : Array.isArray(value)\n        ? value\n            .map((entry) =>\n              typeof entry === \"string\"\n                ? normalizeTableSelector(entry)\n                : undefined\n            )\n            .filter((entry): entry is string => Boolean(entry))\n        : [];\n  const seen = new Set<string>();\n  const duplicates = new Set<string>();\n  for (const selector of selectors) {\n    if (seen.has(selector)) {\n      duplicates.add(selector);\n    }\n    seen.add(selector);\n  }\n  return [...duplicates];\n}\n\nfunction matchesTableSelector(\n  schemaName: string,\n  tableName: string,\n  selector: string\n): boolean {\n  const separatorIndex = selector.indexOf(\".\");\n  if (separatorIndex < 0) {\n    return tableName === selector;\n  }\n\n  const selectorSchema = selector.slice(0, separatorIndex).trim();\n  const selectorTable = selector.slice(separatorIndex + 1).trim();\n  return selectorSchema === schemaName && selectorTable === tableName;\n}\n\nfunction shouldKeepTable(\n  schemaName: string,\n  tableName: string,\n  filter: NormalizedGeneratorFilterConfig\n): boolean {\n  const included =\n    filter.includeTables.length === 0 ||\n    filter.includeTables.some((selector) =>\n      matchesTableSelector(schemaName, tableName, selector)\n    );\n  if (!included) {\n    return false;\n  }\n\n  return !filter.excludeTables.some((selector) =>\n    matchesTableSelector(schemaName, tableName, selector)\n  );\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n  return filter.includeTables.length > 0 || filter.excludeTables.length > 0;\n}\n\nexport function filterIntrospectionSnapshot(\n  snapshot: IntrospectionSnapshot,\n  filter: NormalizedGeneratorFilterConfig\n): IntrospectionSnapshot {\n  if (!hasTableFilters(filter)) {\n    return snapshot;\n  }\n\n  const schemas: Record<string, IntrospectionSchema> = {};\n\n  for (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n    const tables = Object.fromEntries(\n      Object.entries(schema.tables).filter(([tableName]) =>\n        shouldKeepTable(schemaName, tableName, filter)\n      )\n    );\n\n    if (Object.keys(tables).length === 0) {\n      continue;\n    }\n\n    schemas[schemaName] = {\n      ...schema,\n      tables,\n    };\n  }\n\n  if (Object.keys(schemas).length === 0) {\n    const includeLabel =\n      filter.includeTables.length > 0\n        ? ` includeTables=${filter.includeTables.join(\", \")}`\n        : \"\";\n    const excludeLabel =\n      filter.excludeTables.length > 0\n        ? ` excludeTables=${filter.excludeTables.join(\", \")}`\n        : \"\";\n    throw new Error(\n      `Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`\n    );\n  }\n\n  return {\n    ...snapshot,\n    schemas,\n  };\n}\n","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 {\n  defineAthenaConfig,\n  defineGeneratorConfig,\n} from \"../config/project-helpers.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 { toAthenaConfigIr, toAthenaGeneratorConfigIr } from \"./config-ir.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport { normalizeTableSelection } from \"./table-selection.ts\";\nimport type {\n  AthenaConfig,\n  AthenaGeneratorConfig,\n  AthenaMigrationsConfig,\n  GeneratorArtifactWriteConfig,\n  GeneratorArtifactWritePolicy,\n  GeneratorExperimentalFlags,\n  GeneratorFeatureFlags,\n  GeneratorFilterConfig,\n  GeneratorInternalConfig,\n  GeneratorNamingConfig,\n  GeneratorOutputConfig,\n  GeneratorOutputFormat,\n  GeneratorOutputPreset,\n  GeneratorOutputTargets,\n  GeneratorProviderConfig,\n  GeneratorProviderInputConfig,\n  LoadAthenaConfigOptions,\n  LoadedAthenaConfig,\n  LoadedGeneratorConfig,\n  LoadGeneratorConfigOptions,\n  NormalizedAthenaGeneratorConfig,\n  NormalizedAthenaMigrationsConfig,\n  NormalizedGeneratorFilterConfig,\n  NormalizedGeneratorOutputConfig,\n  PostgresDirectProviderInputConfig,\n} from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n  \"athena.config.ts\",\n  \"athena.config.js\",\n  \"athena-js.config.ts\",\n  \"athena-js.config.js\",\n  \".athena.config.ts\",\n  \".athena.config.js\",\n];\n\n/**\n * N-1 layout (Architecture 3 / early 4-RC root `athena/*`).\n * Generator still accepts this preset; doctor warns; migrate upgrades to N.\n */\nconst LEGACY_DEFAULT_TARGETS: GeneratorOutputTargets = {\n  database: \"athena/relations.ts\",\n  model: \"athena/models/{schema_kebab}/{model_kebab}.ts\",\n  registry: \"athena/registry.generated.ts\",\n  schema: \"athena/schemas/{schema_kebab}.ts\",\n};\n\n/**\n * 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  database: `${ATHENA_PROJECT_GENERATED_ROOT}/relations.ts`,\n  model: `${ATHENA_PROJECT_GENERATED_ROOT}/models/{schema_kebab}/{model_kebab}.ts`,\n  registry: `${ATHENA_PROJECT_GENERATED_ROOT}/registry.ts`,\n  schema: `${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  return 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  const path = normalizeGeneratedPath(pathValue);\n  return (\n    path === ATHENA_PROJECT_GENERATED_ROOT ||\n    path.startsWith(`${ATHENA_PROJECT_GENERATED_ROOT}/`) ||\n    path === ATHENA_RUNTIME_GENERATED_ROOT ||\n    path.startsWith(`${ATHENA_RUNTIME_GENERATED_ROOT}/`)\n  );\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  const path = normalizeGeneratedPath(pathValue);\n  if (isCurrentAthenaGeneratedPath(path)) {\n    return false;\n  }\n  return 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  \"merge\",\n  \"skip\",\n  \"overwrite\",\n]);\n\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\n  databaseConst: \"camel\",\n  modelConst: \"camel\",\n  modelType: \"pascal\",\n  registryConst: \"camel\",\n  schemaConst: \"camel\",\n};\n\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\n  emitRegistry: true,\n  emitRelations: true,\n};\n\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n  postgresGatewayIntrospection: false,\n  scyllaProviderContracts: true,\n};\n\nconst DEFAULT_INTERNAL_CONFIG: GeneratorInternalConfig = {\n  schemaVersion: 1,\n};\n\nconst DEFAULT_FILTER_CONFIG = {\n  excludeTables: [],\n  includeTables: [],\n} as const;\n\nconst PROJECT_ENV_FILENAMES = [\".env\", \".env.local\"] as const;\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\n\nconst POSTGRES_DATABASE_ENV_KEYS = [\n  \"ATHENA_GENERATOR_DB\",\n  \"ATHENA_DATABASE\",\n  \"PGDATABASE\",\n] as const;\n\nconst POSTGRES_PASSWORD_ENV_KEYS = [\n  \"ATHENA_GENERATOR_PG_PASSWORD\",\n  \"PGPASSWORD\",\n] as const;\n\n/**\n * Generator gateway URL keys (server/CLI only — intentionally omits NEXT_PUBLIC_*).\n * Includes primary + gateway alias keys, plus generator-only ATHENA_GENERATOR_URL.\n */\nconst GATEWAY_URL_ENV_KEYS = [\n  \"ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"ATHENA_GENERATOR_URL\",\n] as const;\n\n/**\n * Generator API key keys (server/CLI only — no NEXT_PUBLIC_*, adds ATHENA_GENERATOR_API_KEY).\n */\nconst GATEWAY_API_KEY_ENV_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Registry client name for gateway introspection (`X-Athena-Client`).\n * Shared 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  \"ATHENA_GENERATOR_MODEL_TYPE\",\n  \"ATHENA_GENERATOR_MODEL_STYLE\",\n] as const;\nconst MODEL_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_CONST\"] as const;\nconst SCHEMA_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_CONST\"] as const;\nconst DATABASE_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_CONST\"] as const;\nconst REGISTRY_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_CONST\"] as const;\nconst EMIT_RELATIONS_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_RELATIONS\"] as const;\nconst EMIT_REGISTRY_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_REGISTRY\"] as const;\nconst GATEWAY_BACKEND_ENV_KEYS = [\"ATHENA_GENERATOR_BACKEND\"] as const;\nconst GATEWAY_EXPERIMENTAL_ENV_KEYS = [\n  \"ATHENA_GENERATOR_GATEWAY_EXPERIMENTAL\",\n] as const;\nconst SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS = [\n  \"ATHENA_GENERATOR_SCYLLA_PROVIDER_CONTRACTS\",\n] as const;\nconst ENV_ONLY_CONFIG_PATH = \"[environment defaults]\";\n\nconst NAMING_STYLE_VALUES = [\n  \"preserve\",\n  \"camel\",\n  \"pascal\",\n  \"snake\",\n  \"kebab\",\n] as const;\nconst OUTPUT_FORMAT_VALUES = [\"define-model\", \"table-builder\"] as const;\nconst OUTPUT_PRESET_VALUES = [\"legacy\", \"athena-direct\"] as const;\nconst BACKEND_TYPE_VALUES = [\n  \"athena\",\n  \"postgrest\",\n  \"postgresql\",\n  \"scylladb\",\n] as const;\n\nconst OUTPUT_PRESET_TARGETS: Record<\n  GeneratorOutputPreset,\n  GeneratorOutputTargets\n> = {\n  \"athena-direct\": ATHENA_DIRECT_TARGETS,\n  legacy: LEGACY_DEFAULT_TARGETS,\n};\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n  if (\n    rawValue.startsWith('\"') &&\n    rawValue.endsWith('\"') &&\n    rawValue.length >= 2\n  ) {\n    const inner = rawValue.slice(1, -1);\n    return inner\n      .replace(/\\\\n/g, \"\\n\")\n      .replace(/\\\\r/g, \"\\r\")\n      .replace(/\\\\t/g, \"\\t\")\n      .replace(/\\\\\"/g, '\"')\n      .replace(/\\\\\\\\/g, \"\\\\\");\n  }\n\n  if (\n    rawValue.startsWith(\"'\") &&\n    rawValue.endsWith(\"'\") &&\n    rawValue.length >= 2\n  ) {\n    return rawValue.slice(1, -1);\n  }\n\n  const commentIndex = rawValue.search(/\\s+#/);\n  const withoutComment =\n    commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n  return withoutComment.trim();\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n  const trimmed = line.trim();\n  if (!trimmed || trimmed.startsWith(\"#\")) {\n    return;\n  }\n\n  const match = trimmed.match(\n    /^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/\n  );\n  if (!match) {\n    return;\n  }\n\n  const [, key, rawValue] = match;\n  return [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n  const nodeEnv = process.env.NODE_ENV?.trim();\n  const filenames = [\n    ...PROJECT_ENV_FILENAMES,\n    ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n  ];\n\n  const entries = new Map<string, string>();\n\n  for (const filename of filenames) {\n    const absolutePath = resolve(cwd, filename);\n    if (!existsSync(absolutePath)) {\n      continue;\n    }\n\n    const content = readFileSync(absolutePath, \"utf8\");\n    const lines = content.split(/\\r?\\n/g);\n    for (const line of lines) {\n      const parsed = parseEnvLine(line);\n      if (!parsed) {\n        continue;\n      }\n      const [key, value] = parsed;\n      entries.set(key, value);\n    }\n  }\n\n  return entries;\n}\n\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  const envEntries = readProjectEnvEntries(cwd);\n  if (envEntries.size === 0) {\n    return () => { };\n  }\n\n  const initialKeys = new Set<string>(\n    Object.keys(process.env).filter((key) => process.env[key] !== undefined)\n  );\n  const staged = new Map<string, string>();\n\n  for (const [key, value] of envEntries.entries()) {\n    if (initialKeys.has(key)) {\n      continue;\n    }\n    staged.set(key, value);\n  }\n\n  for (const [key, value] of staged.entries()) {\n    process.env[key] = value;\n  }\n\n  return () => {\n    for (const key of staged.keys()) {\n      delete process.env[key];\n    }\n  };\n}\n\n/** @deprecated Use {@link applyGeneratorProjectEnv}. */\nconst applyProjectEnv = applyGeneratorProjectEnv;\n\nfunction readEnvStringValue(key: string): string | undefined {\n  const value = process.env[key];\n  if (typeof value !== \"string\") {\n    return;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction resolveFallbackValue(\n  fallbackKeys: readonly string[]\n): string | undefined {\n  for (const key of fallbackKeys) {\n    const value = readEnvStringValue(key);\n    if (value) {\n      return value;\n    }\n  }\n}\n\nfunction normalizeOneOfValue<const T extends string>(\n  rawValue: string | undefined,\n  allowedValues: readonly T[],\n  envKeys: readonly string[]\n): T | undefined {\n  if (!rawValue) {\n    return;\n  }\n  if (allowedValues.includes(rawValue as T)) {\n    return rawValue as T;\n  }\n  throw new Error(\n    `Generator config env vars ${envKeys.join(\", \")} must resolve to one of: ${allowedValues.join(\", \")}. Received: ${rawValue}.`\n  );\n}\n\nfunction resolveOptionalOneOf<const T extends string>(\n  envKeys: readonly string[],\n  allowedValues: readonly T[]\n): T | undefined {\n  return normalizeOneOfValue(\n    resolveFallbackValue(envKeys),\n    allowedValues,\n    envKeys\n  );\n}\n\nfunction resolveOptionalBoolean(\n  envKeys: readonly string[]\n): boolean | undefined {\n  const rawValue = resolveFallbackValue(envKeys);\n  return rawValue === undefined ? undefined : parseBooleanFlag(rawValue, false);\n}\n\nfunction resolveOptionalJson<T>(envKeys: readonly string[]): T | undefined {\n  const rawValue = resolveFallbackValue(envKeys);\n  if (rawValue === undefined) {\n    return;\n  }\n  try {\n    return JSON.parse(rawValue) as T;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(\n      `Generator config env vars ${envKeys.join(\", \")} must contain valid JSON. ${message}`,\n      { cause: error }\n    );\n  }\n}\n\nfunction deriveDatabaseNameFromConnectionString(\n  connectionString: string\n): string | undefined {\n  try {\n    const parsedUrl = new URL(connectionString);\n    if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n      return;\n    }\n    const pathname = parsedUrl.pathname.replace(/^\\/+/, \"\").trim();\n    return pathname.length > 0 ? decodeURIComponent(pathname) : undefined;\n  } catch {\n    // Invalid connection string — no database name.\n  }\n}\n\nfunction normalizeOptionalString(\n  value: unknown,\n  fallbackKeys: readonly string[]\n): string | undefined {\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    if (trimmed.length > 0) {\n      return trimmed;\n    }\n  }\n\n  return resolveFallbackValue(fallbackKeys);\n}\n\nfunction normalizeRequiredString(\n  value: unknown,\n  fieldLabel: string,\n  fallbackKeys: readonly string[]\n): string {\n  const resolved = normalizeOptionalString(value, fallbackKeys);\n  if (resolved) {\n    return resolved;\n  }\n\n  throw new Error(\n    `Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(\", \")}.`\n  );\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n  let parsedUrl: URL;\n  try {\n    parsedUrl = new URL(connectionString);\n  } catch {\n    return connectionString;\n  }\n\n  if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n    return connectionString;\n  }\n\n  if (!parsedUrl.username || parsedUrl.password) {\n    return connectionString;\n  }\n\n  const fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS);\n  if (!fallbackPassword) {\n    return connectionString;\n  }\n\n  parsedUrl.password = fallbackPassword;\n  return parsedUrl.toString();\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n  if (typeof rawValue === \"boolean\") {\n    return rawValue;\n  }\n  if (typeof rawValue === \"string\") {\n    return parseBooleanFlag(rawValue, fallback);\n  }\n  return fallback;\n}\n\nfunction normalizeFeatureFlags(\n  input: Partial<GeneratorFeatureFlags> | undefined\n): GeneratorFeatureFlags {\n  return {\n    emitRegistry: normalizeBooleanFlag(\n      input?.emitRegistry,\n      DEFAULT_FEATURES.emitRegistry\n    ),\n    emitRelations: normalizeBooleanFlag(\n      input?.emitRelations,\n      DEFAULT_FEATURES.emitRelations\n    ),\n  };\n}\n\nfunction normalizeExperimentalFlags(\n  input: Partial<GeneratorExperimentalFlags> | undefined\n): GeneratorExperimentalFlags {\n  return {\n    postgresGatewayIntrospection: normalizeBooleanFlag(\n      input?.postgresGatewayIntrospection,\n      DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection\n    ),\n    scyllaProviderContracts: normalizeBooleanFlag(\n      input?.scyllaProviderContracts,\n      DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts\n    ),\n  };\n}\n\nfunction normalizeFilterConfig(\n  input: GeneratorFilterConfig | undefined,\n): NormalizedGeneratorFilterConfig {\n  const normalized: NormalizedGeneratorFilterConfig = {\n    excludeTables: normalizeTableSelection(input?.excludeTables),\n    includeTables: normalizeTableSelection(input?.includeTables),\n  };\n  if (input !== undefined) {\n    normalized.raw = input;\n  }\n  return normalized;\n}\n\nfunction normalizeArtifactWritePolicy(\n  value: unknown,\n  fieldName: string\n): GeneratorArtifactWritePolicy {\n  if (value === undefined || value === null || value === \"\") {\n    return DEFAULT_ARTIFACT_WRITE_POLICY;\n  }\n  if (\n    typeof value === \"string\" &&\n    ARTIFACT_WRITE_POLICIES.has(value as GeneratorArtifactWritePolicy)\n  ) {\n    return value as GeneratorArtifactWritePolicy;\n  }\n  throw new Error(\n    `Invalid output.artifactWrite.${fieldName}: expected one of merge | skip | overwrite, received ${JSON.stringify(value)}.`\n  );\n}\n\nfunction normalizeArtifactWriteConfig(\n  input: GeneratorArtifactWriteConfig | undefined\n): NormalizedGeneratorOutputConfig[\"artifactWrite\"] {\n  return {\n    database: normalizeArtifactWritePolicy(input?.database, \"database\"),\n    registry: normalizeArtifactWritePolicy(input?.registry, \"registry\"),\n  };\n}\n\nfunction normalizeOutputConfig(\n  output: GeneratorOutputConfig | undefined\n): NormalizedGeneratorOutputConfig {\n  const preset = output?.preset ?? DEFAULT_OUTPUT_PRESET;\n  return {\n    artifactWrite: normalizeArtifactWriteConfig(output?.artifactWrite),\n    format: output?.format ?? DEFAULT_OUTPUT_FORMAT,\n    placeholderMap: {\n      ...(output?.placeholderMap ?? {}),\n    },\n    preset,\n    targets: {\n      ...OUTPUT_PRESET_TARGETS[preset],\n      ...(output?.targets ?? {}),\n    },\n  };\n}\n\nfunction normalizeProviderConfig(\n  provider: GeneratorProviderInputConfig\n): GeneratorProviderConfig {\n  if (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n    const connectionString = normalizeRequiredString(\n      provider.connectionString,\n      \"provider.connectionString\",\n      DIRECT_CONNECTION_STRING_ENV_KEYS\n    );\n    const database =\n      normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n      deriveDatabaseNameFromConnectionString(connectionString);\n\n    return {\n      ...provider,\n      connectionString: applyPostgresPasswordFallback(connectionString),\n      database,\n      schemas: normalizeSchemaSelection(provider.schemas),\n    };\n  }\n\n  if (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n    const gatewayUrl = normalizeRequiredString(\n      provider.gatewayUrl,\n      \"provider.gatewayUrl\",\n      GATEWAY_URL_ENV_KEYS\n    );\n    const apiKey = normalizeRequiredString(\n      provider.apiKey,\n      \"provider.apiKey\",\n      GATEWAY_API_KEY_ENV_KEYS\n    );\n    const database =\n      normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n      \"postgres\";\n    const client = normalizeOptionalString(\n      provider.client,\n      GATEWAY_CLIENT_ENV_KEYS\n    );\n\n    return {\n      ...provider,\n      apiKey,\n      database,\n      gatewayUrl,\n      ...(client ? { client } : {}),\n      schemas: normalizeSchemaSelection(provider.schemas),\n    };\n  }\n\n  if (provider.kind === \"scylla\" && provider.mode === \"direct\") {\n    if (!provider.contactPoints?.length) {\n      throw new Error(\n        \"Generator config is missing provider.contactPoints for scylla direct mode.\"\n      );\n    }\n    const keyspace = normalizeOptionalString(provider.keyspace, []);\n    if (!keyspace) {\n      throw new Error(\n        \"Generator config is missing provider.keyspace for scylla direct mode.\"\n      );\n    }\n\n    return {\n      contactPoints: provider.contactPoints.slice(),\n      datacenter: normalizeOptionalString(provider.datacenter, []),\n      keyspace,\n      kind: \"scylla\",\n      mode: \"direct\",\n    };\n  }\n\n  return provider;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isOptionalObjectField(\n  record: Record<string, unknown>,\n  key: string\n): boolean {\n  const value = record[key];\n  return value === undefined || (typeof value === \"object\" && value !== null);\n}\n\nfunction isAthenaConfig(value: unknown): value is AthenaConfig {\n  if (!isPlainRecord(value)) {\n    return false;\n  }\n  if (\n    !(\n      isOptionalObjectField(value, \"provider\") &&\n      isOptionalObjectField(value, \"output\") &&\n      isOptionalObjectField(value, \"tooling\") &&\n      isOptionalObjectField(value, \"models\") &&\n      isOptionalObjectField(value, \"policies\") &&\n      isOptionalObjectField(value, \"migrations\") &&\n      isOptionalObjectField(value, \"local\") &&\n      isOptionalObjectField(value, \"modules\") &&\n      isOptionalObjectField(value, \"features\") &&\n      isOptionalObjectField(value, \"experimental\") &&\n      isOptionalObjectField(value, \"filter\") &&\n      isOptionalObjectField(value, \"naming\")\n    )\n  ) {\n    return false;\n  }\n  return (\n    value.provider !== undefined ||\n    value.models !== undefined ||\n    value.policies !== undefined ||\n    value.tooling !== undefined ||\n    value.output !== undefined ||\n    value.migrations !== undefined ||\n    value.local !== undefined ||\n    value.modules !== undefined ||\n    value.features !== undefined ||\n    value.experimental !== undefined ||\n    value.filter !== undefined ||\n    value.naming !== undefined\n  );\n}\n\nfunction isAthenaGeneratorConfig(\n  value: unknown\n): value is AthenaGeneratorConfig {\n  return (\n    isAthenaConfig(value) &&\n    Boolean(value.provider && typeof value.provider === \"object\")\n  );\n}\n\nconst PROJECT_CONFIG_NESTED_KEYS = new Set([\n  \"experimental\",\n  \"features\",\n  \"filter\",\n  \"migrations\",\n  \"local\",\n  \"models\",\n  \"modules\",\n  \"naming\",\n  \"output\",\n  \"policies\",\n  \"provider\",\n  \"tooling\",\n]);\n\nfunction retainAthenaConfig(input: AthenaConfig): AthenaConfig {\n  return toAthenaConfigIr(input);\n}\n\nfunction normalizeMigrationsConfig(\n  input: AthenaMigrationsConfig | undefined\n): NormalizedAthenaMigrationsConfig {\n  const directory =\n    typeof input?.directory === \"string\" && input.directory.trim().length > 0\n      ? input.directory.trim()\n      : DEFAULT_MIGRATIONS_DIRECTORY;\n  return { directory };\n}\n\nfunction applyProviderOverride(\n  config: AthenaGeneratorConfig,\n  providerOverride: PostgresDirectProviderInputConfig\n): AthenaGeneratorConfig {\n  return {\n    ...config,\n    provider: providerOverride,\n  };\n}\n\nexport function normalizeGeneratorConfig(\n  input: AthenaGeneratorConfig\n): NormalizedAthenaGeneratorConfig {\n  const config = toAthenaGeneratorConfigIr(input);\n  const normalizedFilter = normalizeFilterConfig(config.filter);\n  const filter: NormalizedGeneratorFilterConfig = {\n    ...DEFAULT_FILTER_CONFIG,\n    ...normalizedFilter,\n  };\n  if (normalizedFilter.raw !== undefined) {\n    filter.raw = normalizedFilter.raw;\n  }\n  return {\n    experimental: normalizeExperimentalFlags(config.experimental),\n    features: normalizeFeatureFlags(config.features),\n    filter,\n    internal: {\n      ...DEFAULT_INTERNAL_CONFIG,\n    },\n    migrations: normalizeMigrationsConfig(config.migrations),\n    ...(config.modules === undefined ? {} : { modules: config.modules }),\n    naming: {\n      ...DEFAULT_NAMING,\n      ...(config.naming ?? {}),\n    },\n    output: normalizeOutputConfig(config.output),\n    provider: normalizeProviderConfig(config.provider),\n  };\n}\n\nexport { defineAthenaConfig, defineGeneratorConfig };\n\n/**\n * Finds a supported generator config filename in the provided directory.\n */\nexport function findGeneratorConfigPath(\n  cwd: string = process.cwd()\n): string | undefined {\n  for (const candidate of DEFAULT_CONFIG_CANDIDATES) {\n    const absolutePath = resolve(cwd, candidate);\n    if (existsSync(absolutePath)) {\n      return absolutePath;\n    }\n  }\n}\n\nfunction enqueueConfigExportCandidates(\n  record: Record<string, unknown>,\n  queue: unknown[]\n): void {\n  const defaultExport = record.default;\n  if (defaultExport && typeof defaultExport === \"object\") {\n    queue.push(defaultExport);\n  }\n\n  const namedConfigExport = record.config;\n  if (namedConfigExport && typeof namedConfigExport === \"object\") {\n    queue.push(namedConfigExport);\n  }\n\n  const moduleExports = record[\"module.exports\"];\n  if (moduleExports && typeof moduleExports === \"object\") {\n    queue.push(moduleExports);\n  }\n\n  for (const [key, value] of Object.entries(record)) {\n    if (PROJECT_CONFIG_NESTED_KEYS.has(key)) {\n      continue;\n    }\n    if (value && typeof value === \"object\") {\n      queue.push(value);\n    }\n  }\n}\n\nfunction extractAthenaConfigExport(module: unknown): AthenaConfig {\n  const visited = new Set<unknown>();\n  const queue: unknown[] = [module];\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current || typeof current !== \"object\" || visited.has(current)) {\n      continue;\n    }\n    visited.add(current);\n\n    const record = current as Record<string, unknown>;\n    if (isAthenaConfig(record)) {\n      return record;\n    }\n\n    enqueueConfigExportCandidates(record, queue);\n  }\n\n  throw new Error(\n    \"Athena config file must export a config object as default export or `config`.\"\n  );\n}\n\nfunction extractGeneratorConfigExport(module: unknown): AthenaGeneratorConfig {\n  const visited = new Set<unknown>();\n  const queue: unknown[] = [module];\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current || typeof current !== \"object\" || visited.has(current)) {\n      continue;\n    }\n    visited.add(current);\n\n    const record = current as Record<string, unknown>;\n    if (isAthenaGeneratorConfig(record)) {\n      return record;\n    }\n\n    enqueueConfigExportCandidates(record, queue);\n  }\n\n  throw new Error(\n    \"Generator config file must export a config object as default export or `config`.\"\n  );\n}\n\nfunction isTypeScriptConfigPath(filePath: string): boolean {\n  return /\\.[cm]?tsx?$/i.test(filePath);\n}\n\nfunction isUnknownTypeScriptModuleError(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  const code = \"code\" in error ? String(error.code) : \"\";\n  const message = error instanceof Error ? error.message : String(error);\n  return (\n    ((code === \"ERR_UNKNOWN_FILE_EXTENSION\" ||\n      code === \"ERR_UNKNOWN_MODULE_FORMAT\") &&\n      /\\.tsx?/i.test(message)) ||\n    /Unknown file extension [\"']\\.tsx?[\"']/i.test(message)\n  );\n}\n\nfunction isNodeUnsupportedTypescriptSyntax(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") {\n    return false;\n  }\n  const code = \"code\" in error ? error.code : undefined;\n  const message = error instanceof Error ? error.message : String(error);\n  return (\n    code === \"ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX\" ||\n    /strip-only mode/i.test(message) ||\n    /parameter property is not supported/i.test(message)\n  );\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  error: unknown,\n  configPath: string\n): AthenaConfigurationError {\n  if (error instanceof AthenaConfigurationError) {\n    return error;\n  }\n\n  const cause = error instanceof Error ? { cause: error } : undefined;\n  if (isNodeUnsupportedTypescriptSyntax(error)) {\n    const message = [\n      `Cannot load ${configPath}: Node.js type-stripping cannot compile this TypeScript.`,\n      \"Constructor parameter properties (`constructor(private foo: T)`) and similar syntax are not supported in strip-only mode.\",\n      \"Import `defineAthenaConfig` / `generatorEnv` from `@xylex-group/athena/config` (the compiled package), not from `./src/...`.\",\n      error instanceof Error ? error.message : String(error),\n    ].join(\"\\n\");\n    return new AthenaConfigurationError(\n      \"ATHENA_CONFIG_IMPORT_FAILED\",\n      message,\n      undefined,\n      cause\n    );\n  }\n\n  if (isUnknownTypeScriptModuleError(error)) {\n    const message = [\n      `Cannot load ${configPath}: this Node.js cannot import TypeScript config files.`,\n      \"Use Node.js 22.18+ (native type-stripping) or keep `tsx` installed next to the Athena CLI.\",\n      error instanceof Error ? error.message : String(error),\n    ].join(\"\\n\");\n    return new AthenaConfigurationError(\n      \"ATHENA_CONFIG_IMPORT_FAILED\",\n      message,\n      undefined,\n      cause\n    );\n  }\n\n  const detail = error instanceof Error ? error.message : String(error);\n  return new AthenaConfigurationError(\n    \"ATHENA_CONFIG_IMPORT_FAILED\",\n    `Cannot load ${configPath}: ${detail}`,\n    undefined,\n    cause\n  );\n}\n\nfunction createRuntimeImport(): (moduleSpecifier: string) => Promise<unknown> {\n  // Keep this as an indirect import so bundlers do not try to statically resolve\n  // runtime file-system config paths when athena-js is consumed in Next.js.\n  return new Function(\"moduleSpecifier\", \"return import(moduleSpecifier)\") as (\n    moduleSpecifier: string\n  ) => Promise<unknown>;\n}\n\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\n  return createRuntimeImport()(moduleSpecifier);\n}\n\nlet typeScriptConfigLoaderPromise: Promise<boolean> | undefined;\n\nasync function ensureTypeScriptConfigLoader(\n  anchorPath: string\n): Promise<boolean> {\n  if (typeScriptConfigLoaderPromise) {\n    return typeScriptConfigLoaderPromise;\n  }\n  typeScriptConfigLoaderPromise = (async () => {\n    const runtimeImport = createRuntimeImport();\n    const nodeModule = (await runtimeImport(\"node:module\")) as {\n      createRequire: (filename: string) => {\n        resolve: (id: string) => string;\n      };\n    };\n    const anchors = [anchorPath, fileURLToPath(import.meta.url)];\n    for (const anchor of anchors) {\n      try {\n        const require = nodeModule.createRequire(anchor);\n        const tsxLoader = require.resolve(\"tsx\");\n        await runtimeImport(pathToFileURL(tsxLoader).href);\n        return true;\n      } catch {\n        /* tsx not resolvable from this anchor */\n      }\n    }\n    try {\n      await runtimeImport(\"tsx\");\n      return true;\n    } catch {\n      return false;\n    }\n  })();\n  return typeScriptConfigLoaderPromise;\n}\n\nasync function importConfigFile(resolvedPath: string): Promise<unknown> {\n  const moduleUrl = pathToFileURL(resolvedPath);\n  const load = () =>\n    importConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`);\n  try {\n    return await load();\n  } catch (error) {\n    if (\n      isTypeScriptConfigPath(resolvedPath) &&\n      isUnknownTypeScriptModuleError(error)\n    ) {\n      const registered = await ensureTypeScriptConfigLoader(resolvedPath);\n      if (registered) {\n        try {\n          return await load();\n        } catch (retryError) {\n          throw explainGeneratorConfigLoadError(retryError, resolvedPath);\n        }\n      }\n    }\n    throw explainGeneratorConfigLoadError(error, resolvedPath);\n  }\n}\n\nfunction buildEnvironmentOutputConfig(): GeneratorOutputConfig | undefined {\n  const format = resolveOptionalOneOf(\n    OUTPUT_FORMAT_ENV_KEYS,\n    OUTPUT_FORMAT_VALUES\n  );\n  const preset = resolveOptionalOneOf(\n    OUTPUT_PRESET_ENV_KEYS,\n    OUTPUT_PRESET_VALUES\n  );\n  const modelTarget = resolveFallbackValue(MODEL_TARGET_ENV_KEYS);\n  const schemaTarget = resolveFallbackValue(SCHEMA_TARGET_ENV_KEYS);\n  const databaseTarget = resolveFallbackValue(DATABASE_TARGET_ENV_KEYS);\n  const registryTarget = resolveFallbackValue(REGISTRY_TARGET_ENV_KEYS);\n  const placeholderMap = resolveOptionalJson<Record<string, string>>(\n    PLACEHOLDER_MAP_ENV_KEYS\n  );\n\n  if (\n    format === undefined &&\n    preset === undefined &&\n    modelTarget === undefined &&\n    schemaTarget === undefined &&\n    databaseTarget === undefined &&\n    registryTarget === undefined &&\n    placeholderMap === undefined\n  ) {\n    return;\n  }\n\n  return {\n    format,\n    placeholderMap,\n    preset,\n    targets: {\n      ...(modelTarget ? { model: modelTarget } : {}),\n      ...(schemaTarget ? { schema: schemaTarget } : {}),\n      ...(databaseTarget ? { database: databaseTarget } : {}),\n      ...(registryTarget ? { registry: registryTarget } : {}),\n    },\n  };\n}\n\nfunction buildEnvironmentFilterConfig(): GeneratorFilterConfig | undefined {\n  const includeTables = resolveFallbackValue(TABLES_ENV_KEYS);\n  const excludeTables = resolveFallbackValue(EXCLUDE_TABLES_ENV_KEYS);\n\n  if (includeTables === undefined && excludeTables === undefined) {\n    return;\n  }\n\n  return {\n    ...(includeTables === undefined ? {} : { includeTables }),\n    ...(excludeTables === undefined ? {} : { excludeTables }),\n  };\n}\n\nfunction buildEnvironmentNamingConfig():\n  | Partial<GeneratorNamingConfig>\n  | undefined {\n  const modelType = resolveOptionalOneOf(\n    MODEL_TYPE_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const modelConst = resolveOptionalOneOf(\n    MODEL_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const schemaConst = resolveOptionalOneOf(\n    SCHEMA_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const databaseConst = resolveOptionalOneOf(\n    DATABASE_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const registryConst = resolveOptionalOneOf(\n    REGISTRY_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n\n  if (\n    modelType === undefined &&\n    modelConst === undefined &&\n    schemaConst === undefined &&\n    databaseConst === undefined &&\n    registryConst === undefined\n  ) {\n    return;\n  }\n\n  return {\n    ...(modelType ? { modelType } : {}),\n    ...(modelConst ? { modelConst } : {}),\n    ...(schemaConst ? { schemaConst } : {}),\n    ...(databaseConst ? { databaseConst } : {}),\n    ...(registryConst ? { registryConst } : {}),\n  };\n}\n\nfunction buildEnvironmentFeatureFlags():\n  | Partial<GeneratorFeatureFlags>\n  | undefined {\n  const emitRelations = resolveOptionalBoolean(EMIT_RELATIONS_ENV_KEYS);\n  const emitRegistry = resolveOptionalBoolean(EMIT_REGISTRY_ENV_KEYS);\n\n  if (emitRelations === undefined && emitRegistry === undefined) {\n    return;\n  }\n\n  return {\n    ...(emitRelations === undefined ? {} : { emitRelations }),\n    ...(emitRegistry === undefined ? {} : { emitRegistry }),\n  };\n}\n\nfunction buildEnvironmentExperimentalFlags():\n  | Partial<GeneratorExperimentalFlags>\n  | undefined {\n  const postgresGatewayIntrospection = resolveOptionalBoolean(\n    GATEWAY_EXPERIMENTAL_ENV_KEYS\n  );\n  const scyllaProviderContracts = resolveOptionalBoolean(\n    SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS\n  );\n\n  if (\n    postgresGatewayIntrospection === undefined &&\n    scyllaProviderContracts === undefined\n  ) {\n    return;\n  }\n\n  return {\n    ...(postgresGatewayIntrospection === undefined\n      ? {}\n      : { postgresGatewayIntrospection }),\n    ...(scyllaProviderContracts === undefined\n      ? {}\n      : { scyllaProviderContracts }),\n  };\n}\n\nfunction buildEnvironmentProviderConfig():\n  | GeneratorProviderInputConfig\n  | undefined {\n  const directConnectionString = resolveFallbackValue(\n    DIRECT_CONNECTION_STRING_ENV_KEYS\n  );\n  if (directConnectionString) {\n    return {\n      connectionString: directConnectionString,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      kind: \"postgres\",\n      mode: \"direct\",\n      schemas: normalizeSchemaSelection(\n        resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)\n      ),\n    };\n  }\n\n  const gatewayUrl = resolveFallbackValue(GATEWAY_URL_ENV_KEYS);\n  const apiKey = resolveFallbackValue(GATEWAY_API_KEY_ENV_KEYS);\n  if (gatewayUrl && apiKey) {\n    const backend = resolveOptionalOneOf(\n      GATEWAY_BACKEND_ENV_KEYS,\n      BACKEND_TYPE_VALUES\n    ) as BackendType | undefined;\n    const client = resolveFallbackValue(GATEWAY_CLIENT_ENV_KEYS);\n    return {\n      apiKey,\n      backend,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      gatewayUrl,\n      kind: \"postgres\",\n      mode: \"gateway\",\n      schemas: normalizeSchemaSelection(\n        resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)\n      ),\n      ...(client ? { client } : {}),\n    };\n  }\n}\n\nfunction createEnvironmentGeneratorConfig(): AthenaGeneratorConfig | undefined {\n  const provider = buildEnvironmentProviderConfig();\n  if (!provider) {\n    return;\n  }\n\n  return {\n    experimental: buildEnvironmentExperimentalFlags(),\n    features: buildEnvironmentFeatureFlags(),\n    filter: buildEnvironmentFilterConfig(),\n    naming: buildEnvironmentNamingConfig(),\n    output: buildEnvironmentOutputConfig(),\n    provider,\n  };\n}\n\n/**\n * Loads 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  options: LoadAthenaConfigOptions = {}\n): Promise<LoadedAthenaConfig> {\n  const cwd = options.cwd ?? process.cwd();\n  const restoreProjectEnv = applyProjectEnv(cwd);\n  try {\n    const resolvedPath = options.configPath\n      ? resolve(cwd, options.configPath)\n      : findGeneratorConfigPath(cwd);\n\n    if (!resolvedPath) {\n      throw new Error(\n        `No Athena config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}.`\n      );\n    }\n\n    const module = await importConfigFile(resolvedPath);\n    const rawConfig = extractAthenaConfigExport(module);\n    return {\n      config: retainAthenaConfig(rawConfig),\n      configPath: resolvedPath,\n    };\n  } finally {\n    restoreProjectEnv();\n  }\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  options: LoadGeneratorConfigOptions = {}\n): Promise<LoadedGeneratorConfig> {\n  const cwd = options.cwd ?? process.cwd();\n  const restoreAppliedEnv =\n    options.applyProjectEnv === false ? () => { } : applyProjectEnv(cwd);\n  try {\n    const resolvedPath = options.configPath\n      ? resolve(cwd, options.configPath)\n      : findGeneratorConfigPath(cwd);\n\n    if (!resolvedPath) {\n      const environmentConfig = createEnvironmentGeneratorConfig();\n      if (environmentConfig) {\n        return {\n          config: normalizeGeneratorConfig(\n            options.providerOverride\n              ? applyProviderOverride(\n                environmentConfig,\n                options.providerOverride\n              )\n              : environmentConfig\n          ),\n          configPath: ENV_ONLY_CONFIG_PATH,\n        };\n      }\n      throw new Error(\n        `No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}. To run without a config file, set DATABASE_URL (direct mode) or ATHENA_URL + ATHENA_API_KEY (gateway mode).`\n      );\n    }\n\n    const module = await importConfigFile(resolvedPath);\n    const rawConfig = extractGeneratorConfigExport(module);\n\n    return {\n      config: normalizeGeneratorConfig(\n        options.providerOverride\n          ? applyProviderOverride(rawConfig, options.providerOverride)\n          : rawConfig\n      ),\n      configPath: resolvedPath,\n    };\n  } finally {\n    if (options.restoreProjectEnv !== false) {\n      restoreAppliedEnv();\n    }\n  }\n}\n","import {\n  applyGeneratorProjectEnv,\n  normalizeGeneratorConfig,\n} from \"./config.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratorProviderConfig,\n  LoadedGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorDatabaseAuthorityMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport type GeneratorDatabaseAuthoritySource =\n  | \"explicit-provider\"\n  | \"loaded-config\"\n  | \"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  | \"discovered\"\n  | \"configured\"\n  | \"explicit\"\n  | \"fallback\";\n\nexport interface ResolvedGeneratorDatabaseAuthority {\n  mode: \"direct\" | \"gateway\";\n  provider: GeneratorProviderConfig;\n  restoreEnv: () => void;\n  source: GeneratorDatabaseAuthoritySource;\n}\n\nexport interface ResolveGeneratorDatabaseAuthorityOptions {\n  /**\n   * When false, skip loading project `.env*` into `process.env`.\n   * Defaults to true. Pass false when the caller already applied project env\n   * (for example inside `loadGeneratorConfig`).\n   */\n  applyProjectEnv?: boolean;\n  cwd?: string;\n  loaded?: LoadedGeneratorConfig;\n  /** Preferred provider mode when probing from environment. */\n  mode?: GeneratorDatabaseAuthorityMode;\n  /** Pre-resolved provider (skips probe / loaded lookup). */\n  provider?: GeneratorProviderConfig;\n}\n\nfunction hasNonEmptyEnv(keys: readonly string[]): boolean {\n  for (const key of keys) {\n    const value = process.env[key];\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return true;\n    }\n  }\n  return false;\n}\n\nconst DIRECT_CONNECTION_KEYS = [\n  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"ATHENA_GENERATOR_URL\",\n] as const;\n\nconst GATEWAY_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Picks 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  preferred: GeneratorDatabaseAuthorityMode = \"auto\"\n): \"direct\" | \"gateway\" {\n  if (preferred === \"direct\" || preferred === \"gateway\") {\n    return preferred;\n  }\n\n  const hasDirect = hasNonEmptyEnv(DIRECT_CONNECTION_KEYS);\n  const hasGateway =\n    hasNonEmptyEnv(GATEWAY_URL_KEYS) && hasNonEmptyEnv(GATEWAY_KEY_KEYS);\n\n  if (hasDirect) {\n    return \"direct\";\n  }\n  if (hasGateway) {\n    return \"gateway\";\n  }\n\n  return \"direct\";\n}\n\nfunction providerModeOf(\n  provider: GeneratorProviderConfig | undefined,\n  preferred: GeneratorDatabaseAuthorityMode\n): \"direct\" | \"gateway\" {\n  if (provider && provider.kind === \"postgres\") {\n    if (provider.mode === \"gateway\") {\n      return \"gateway\";\n    }\n    if (provider.mode === \"direct\") {\n      return \"direct\";\n    }\n  }\n  return 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  options: ResolveGeneratorDatabaseAuthorityOptions = {}\n): ResolvedGeneratorDatabaseAuthority {\n  const cwd = options.cwd ?? process.cwd();\n  const preferredMode = options.mode ?? \"auto\";\n  const restoreEnv =\n    options.applyProjectEnv === false\n      ? () => {}\n      : applyGeneratorProjectEnv(cwd);\n\n  try {\n    if (options.provider) {\n      return {\n        mode: providerModeOf(options.provider, preferredMode),\n        provider: options.provider,\n        restoreEnv,\n        source: \"explicit-provider\",\n      };\n    }\n\n    if (options.loaded) {\n      return {\n        mode: providerModeOf(options.loaded.config.provider, preferredMode),\n        provider: options.loaded.config.provider,\n        restoreEnv,\n        source: \"loaded-config\",\n      };\n    }\n\n    const mode = detectAuthorityMode(preferredMode);\n    const probeConfig: AthenaGeneratorConfig = {\n      provider:\n        mode === \"gateway\"\n          ? { kind: \"postgres\", mode: \"gateway\" }\n          : { kind: \"postgres\", mode: \"direct\" },\n    };\n    const normalized = normalizeGeneratorConfig(probeConfig);\n    return {\n      mode,\n      provider: normalized.provider,\n      restoreEnv,\n      source: \"environment-probe\",\n    };\n  } catch (error) {\n    restoreEnv();\n    throw error;\n  }\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  discoveryError?: string;\n  schemas: readonly string[];\n  /** Optional hint of schemas that often exist after migrate (e.g. athena). */\n  expectedLiveSchemas?: readonly string[];\n}): string[] {\n  const reason =\n    options.discoveryError?.trim() ||\n    \"no PostgreSQL connection could be resolved.\";\n  const schemaList = options.schemas.join(\", \") || \"public\";\n  const lines = [\n    `Schema discovery unavailable: ${reason}`,\n    `Config created with fallback schemas: ${schemaList}.`,\n    \"These schemas were NOT discovered from the database.\",\n    \"\",\n    \"To discover schemas, provide DATABASE_URL or another supported\",\n    \"connection source and rerun:\",\n    \"\",\n    \"  athena-js init\",\n  ];\n\n  const hints = options.expectedLiveSchemas?.filter((value) => value.trim());\n  if (hints && hints.length > 0) {\n    lines.push(\"\", \"Expected live schemas may include:\");\n    for (const schema of hints) {\n      lines.push(`  ${schema}`);\n    }\n  }\n\n  return lines;\n}\n","import { resolve } from \"node:path\";\nimport type { NormalizedAthenaGeneratorConfig } from \"../../generator/types.ts\";\nimport { ATHENA_MIGRATE_COMMAND } from \"../commands.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"../constants.ts\";\nimport { MigrationError } from \"../types.ts\";\n\nexport function resolveMigrationsDirectory(\n  config: NormalizedAthenaGeneratorConfig,\n  cwd: string\n): string {\n  const configured = config.migrations.directory;\n  return resolve(cwd, configured || DEFAULT_MIGRATIONS_DIRECTORY);\n}\n\nexport function providerLabel(config: NormalizedAthenaGeneratorConfig): string {\n  const { provider } = config;\n  if (provider.kind === \"postgres\") {\n    return `postgres/${provider.mode}`;\n  }\n  return `${provider.kind}/${provider.mode}`;\n}\n\nexport function databaseLabel(config: NormalizedAthenaGeneratorConfig): string {\n  const { provider } = config;\n  if (provider.kind === \"postgres\") {\n    if (provider.mode === \"direct\") {\n      return (\n        provider.database ??\n        extractDatabaseName(provider.connectionString) ??\n        \"postgres\"\n      );\n    }\n    return provider.database;\n  }\n  if (provider.kind === \"scylla\") {\n    return provider.keyspace;\n  }\n  return \"unknown\";\n}\n\nexport function extractDatabaseName(\n  connectionString: string\n): string | undefined {\n  try {\n    const normalized = connectionString.replace(/^postgresql:/i, \"postgres:\");\n    const url = new URL(normalized);\n    const name = url.pathname.replace(/^\\//, \"\");\n    return name.length > 0 ? decodeURIComponent(name) : undefined;\n  } catch {\n    /* invalid connection string */\n  }\n}\n\nexport function relativeDirectoryDisplay(\n  cwd: string,\n  absoluteDirectory: string\n): string {\n  const normalizedCwd = cwd.replace(/\\\\/g, \"/\");\n  const normalizedDir = absoluteDirectory.replace(/\\\\/g, \"/\");\n  if (normalizedDir.startsWith(`${normalizedCwd}/`)) {\n    return normalizedDir.slice(normalizedCwd.length + 1);\n  }\n  if (normalizedDir === normalizedCwd) {\n    return \".\";\n  }\n  return absoluteDirectory.replace(/\\\\/g, \"/\");\n}\n\nexport function assertDirectPostgres(config: NormalizedAthenaGeneratorConfig): {\n  connectionString: string;\n  database?: string;\n} {\n  const { provider } = config;\n  if (provider.kind !== \"postgres\") {\n    throw new MigrationError(\n      \"PROVIDER\",\n      `${ATHENA_MIGRATE_COMMAND} currently requires a direct PostgreSQL provider.\\nUnsupported provider: ${provider.kind}/${provider.mode}.`\n    );\n  }\n  if (provider.mode !== \"direct\") {\n    throw new MigrationError(\n      \"PROVIDER\",\n      [\n        `${ATHENA_MIGRATE_COMMAND} currently requires a direct PostgreSQL provider.`,\n        \"Gateway-backed migration execution is not yet supported.\",\n        \"Raw DDL needs privileged database access outside the normal query gateway.\",\n      ].join(\"\\n\")\n    );\n  }\n  if (!provider.connectionString) {\n    throw new MigrationError(\n      \"CONFIG\",\n      \"Direct PostgreSQL provider is missing connectionString (set DATABASE_URL / PG_URL or provider.connectionString).\"\n    );\n  }\n  return {\n    connectionString: provider.connectionString,\n    database: provider.database,\n  };\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { AthenaBillingAuditEntry } from \"./types.ts\";\n\nexport interface AthenaBillingAuditWriter {\n  write(entry: AthenaBillingAuditEntry): Promise<void>;\n}\n\nexport interface MemoryBillingAuditSink {\n  entries: AthenaBillingAuditEntry[];\n}\n\nexport function createMemoryBillingAuditWriter(\n  sink: MemoryBillingAuditSink\n): AthenaBillingAuditWriter {\n  return {\n    async write(entry) {\n      sink.entries.push({\n        ...entry,\n        previous: redactBillingAuditSnapshot(entry.previous),\n        result: redactBillingAuditSnapshot(entry.result),\n      });\n    },\n  };\n}\n\nexport function createPostgresBillingAuditWriter(\n  sql: BillingSqlExecutor\n): AthenaBillingAuditWriter {\n  return {\n    async write(entry) {\n      await insertAuditLogBilling(sql, entry);\n    },\n  };\n}\n\nfunction redactBillingAuditSnapshot(value: unknown): unknown {\n  if (value == null) {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((entry) => redactBillingAuditSnapshot(entry));\n  }\n  if (typeof value !== \"object\") {\n    return value;\n  }\n  const record = value as Record<string, unknown>;\n  const out: Record<string, unknown> = {};\n  const drop = new Set([\n    \"email\",\n    \"emailSnapshot\",\n    \"raw\",\n    \"metadata\",\n    \"amount\",\n    \"amountRefunded\",\n    \"description\",\n    \"name\",\n    \"customer\",\n    \"billingAddress\",\n    \"shippingAddress\",\n  ]);\n  for (const [key, entry] of Object.entries(record)) {\n    if (drop.has(key)) {\n      continue;\n    }\n    if (\n      key === \"subject\" ||\n      key === \"providerSubject\" ||\n      key === \"result\" ||\n      key === \"previous\"\n    ) {\n      out[key] = redactBillingAuditSnapshot(entry);\n      continue;\n    }\n    if (\n      typeof entry === \"string\" ||\n      typeof entry === \"number\" ||\n      typeof entry === \"boolean\" ||\n      entry == null\n    ) {\n      out[key] = entry;\n      continue;\n    }\n    if (typeof entry === \"object\") {\n      out[key] = redactBillingAuditSnapshot(entry);\n    }\n  }\n  return out;\n}\n\nexport async function insertAuditLogBilling(\n  sql: BillingSqlExecutor,\n  entry: AthenaBillingAuditEntry\n): Promise<void> {\n  await sql.query(\n    `\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    [\n      entry.id,\n      entry.eventId,\n      entry.traceId,\n      entry.correlationId ?? null,\n      entry.causationId ?? null,\n      entry.event,\n      entry.actor.kind,\n      entry.actor.userId ?? null,\n      entry.connectionId,\n      entry.provider,\n      entry.subject?.kind ?? null,\n      entry.subject?.id ?? null,\n      entry.providerSubject?.kind ?? null,\n      entry.providerSubject?.id ?? null,\n      JSON.stringify(redactBillingAuditSnapshot(entry.previous ?? null)),\n      JSON.stringify(redactBillingAuditSnapshot(entry.result ?? null)),\n      entry.outcome,\n    ]\n  );\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n  AthenaBillingObservabilityConfig,\n  NormalizedAthenaBillingObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaBillingObservability(\n  input?: AthenaBillingObservabilityConfig\n): NormalizedAthenaBillingObservability {\n  const tracesInput = input?.traces;\n  const tracesEnabled =\n    tracesInput === undefined\n      ? true\n      : typeof tracesInput === \"boolean\"\n        ? tracesInput\n        : tracesInput.sampleRate !== 0;\n  const sampleRate =\n    typeof tracesInput === \"object\" &&\n    typeof tracesInput.sampleRate === \"number\" &&\n    Number.isFinite(tracesInput.sampleRate)\n      ? Math.min(1, Math.max(0, tracesInput.sampleRate))\n      : 1;\n  const retentionDays =\n    typeof tracesInput === \"object\" &&\n    typeof tracesInput.retentionDays === \"number\" &&\n    Number.isFinite(tracesInput.retentionDays)\n      ? Math.max(1, Math.trunc(tracesInput.retentionDays))\n      : 30;\n  const auditRetentionDays =\n    typeof input?.auditRetentionDays === \"number\" &&\n    Number.isFinite(input.auditRetentionDays)\n      ? Math.max(1, Math.trunc(input.auditRetentionDays))\n      : undefined;\n  const webhookIngressRetentionDays =\n    typeof input?.webhookIngressRetentionDays === \"number\" &&\n    Number.isFinite(input.webhookIngressRetentionDays)\n      ? Math.max(1, Math.trunc(input.webhookIngressRetentionDays))\n      : 30;\n  return {\n    auditLog: input?.auditLog !== false,\n    auditRetentionDays,\n    traces: {\n      enabled: tracesEnabled,\n      retentionDays,\n      sampleRate: tracesEnabled ? sampleRate : 0,\n    },\n    webhookIngressRetentionDays,\n  };\n}\n\nexport function assertLocalBillingObservability(billing: unknown): void {\n  if (!billing || typeof billing !== \"object\") {\n    return;\n  }\n  const raw = billing as Record<string, unknown>;\n  if (!(\"observability\" in raw) || raw.observability === undefined) {\n    return;\n  }\n  const mode = (billing as { mode?: unknown }).mode;\n  if (mode === \"remote\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n      'billing.observability is an embedded billing capability. Set billing.mode to \"local\" or omit observability for remote Billing.',\n      \"billing\"\n    );\n  }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type {\n  AthenaBillingTraceRecord,\n  AthenaBillingTraceStart,\n  BillingTracePhase,\n} from \"./types.ts\";\n\nexport interface AthenaBillingActiveTrace {\n  failure(error: unknown, phase?: BillingTracePhase): Promise<void>;\n  phase(name: BillingTracePhase): { finish(): void };\n  setCounters(input: {\n    customersScanned?: number;\n    pagesProcessed?: number;\n  }): void;\n  success(): Promise<void>;\n}\n\nexport interface AthenaBillingTraceRecorder {\n  start(input: AthenaBillingTraceStart): AthenaBillingActiveTrace;\n}\n\nconst activeTraceStorage = new AsyncLocalStorage<AthenaBillingActiveTrace>();\n\nexport function currentBillingTrace(): AthenaBillingActiveTrace | undefined {\n  return activeTraceStorage.getStore();\n}\n\nexport function runWithBillingTrace<T>(\n  trace: AthenaBillingActiveTrace,\n  fn: () => Promise<T>\n): Promise<T> {\n  return activeTraceStorage.run(trace, fn);\n}\n\nexport interface MemoryBillingTraceSink {\n  records: AthenaBillingTraceRecord[];\n}\n\nfunction sampleAllows(sampleRate: number): boolean {\n  if (sampleRate >= 1) {\n    return true;\n  }\n  if (sampleRate <= 0) {\n    return false;\n  }\n  return Math.random() < sampleRate;\n}\n\nfunction errorCodeOf(error: unknown): string | undefined {\n  if (!error || typeof error !== \"object\") {\n    return;\n  }\n  const code = (error as { code?: unknown }).code;\n  return typeof code === \"string\" && code.trim() ? code : undefined;\n}\n\nfunction redactMetadata(\n  value: Record<string, unknown>\n): Record<string, unknown> {\n  const next: Record<string, unknown> = {};\n  for (const [key, entry] of Object.entries(value)) {\n    const normalized = key.toLowerCase();\n    if (\n      normalized.includes(\"key\") ||\n      normalized.includes(\"secret\") ||\n      normalized.includes(\"token\") ||\n      normalized.includes(\"password\") ||\n      normalized.includes(\"authorization\")\n    ) {\n      next[key] = \"[REDACTED]\";\n      continue;\n    }\n    next[key] = entry;\n  }\n  return next;\n}\n\nfunction createActiveTrace(\n  input: AthenaBillingTraceStart,\n  persist: (record: AthenaBillingTraceRecord) => Promise<void>\n): AthenaBillingActiveTrace {\n  const startedAt = input.startedAt ?? new Date();\n  const startedMs = performance.now();\n  const timings: Partial<Record<BillingTracePhase, number>> = {};\n  let pagesProcessed = 0;\n  let customersScanned = 0;\n  let finished = false;\n\n  const persistSafe = async (record: AthenaBillingTraceRecord) => {\n    if (finished) {\n      return;\n    }\n    finished = true;\n    try {\n      await persist(record);\n    } catch (error) {\n      console.error(\"[athena-billing] trace persistence failed\", {\n        error: error instanceof Error ? error.message : String(error),\n        traceId: record.traceId,\n      });\n    }\n  };\n\n  const complete = async (\n    outcome: \"failure\" | \"success\",\n    error?: unknown,\n    errorPhase?: BillingTracePhase\n  ) => {\n    await persistSafe({\n      causationId: input.causationId,\n      checkpointMs: timings.checkpoint,\n      completedAt: new Date(),\n      connectionId: input.connectionId,\n      correlationId: input.correlationId,\n      customersScanned,\n      errorCode: error ? errorCodeOf(error) : undefined,\n      errorPhase,\n      id: crypto.randomUUID(),\n      leaseMs: timings.lease,\n      metadata: redactMetadata({}),\n      operation: input.operation,\n      outcome,\n      pagesProcessed,\n      projectionMs: timings.document_projection,\n      provider: input.provider,\n      providerMs: timings.provider_fetch,\n      resolveMs: timings.candidate_resolution,\n      startedAt,\n      totalMs: performance.now() - startedMs,\n      traceId: input.traceId,\n      transactionMs: timings.apply,\n      trigger: input.trigger,\n    });\n  };\n\n  return {\n    async failure(error, phase) {\n      await complete(\"failure\", error, phase);\n    },\n    phase(name) {\n      const started = performance.now();\n      return {\n        finish() {\n          timings[name] = (timings[name] ?? 0) + (performance.now() - started);\n        },\n      };\n    },\n    setCounters(counters) {\n      if (typeof counters.customersScanned === \"number\") {\n        customersScanned = counters.customersScanned;\n      }\n      if (typeof counters.pagesProcessed === \"number\") {\n        pagesProcessed = counters.pagesProcessed;\n      }\n    },\n    async success() {\n      await complete(\"success\");\n    },\n  };\n}\n\nexport function createNoopBillingTrace(): AthenaBillingActiveTrace {\n  return {\n    async failure() {},\n    phase() {\n      return { finish() {} };\n    },\n    setCounters() {},\n    async success() {},\n  };\n}\n\nexport function createMemoryBillingTraceRecorder(\n  sink: MemoryBillingTraceSink,\n  sampleRate = 1\n): AthenaBillingTraceRecorder {\n  return {\n    start(input) {\n      if (!sampleAllows(sampleRate)) {\n        return createNoopBillingTrace();\n      }\n      return createActiveTrace(input, async (record) => {\n        sink.records.push(record);\n      });\n    },\n  };\n}\n\nexport function createDisabledBillingTraceRecorder(): AthenaBillingTraceRecorder {\n  return {\n    start() {\n      return createNoopBillingTrace();\n    },\n  };\n}\n\nexport function createPostgresBillingTraceRecorder(\n  sql: BillingSqlExecutor,\n  sampleRate = 1\n): AthenaBillingTraceRecorder {\n  return {\n    start(input) {\n      if (!sampleAllows(sampleRate)) {\n        return createNoopBillingTrace();\n      }\n      return createActiveTrace(input, (record) =>\n        insertTraceBilling(sql, record)\n      );\n    },\n  };\n}\n\nexport async function insertTraceBilling(\n  sql: BillingSqlExecutor,\n  record: AthenaBillingTraceRecord\n): Promise<void> {\n  await sql.query(\n    `\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    [\n      record.id,\n      record.traceId,\n      record.correlationId ?? null,\n      record.causationId ?? null,\n      record.operation,\n      record.trigger,\n      record.connectionId,\n      record.provider,\n      record.outcome,\n      record.errorCode ?? null,\n      record.errorPhase ?? null,\n      record.leaseMs ?? null,\n      record.providerMs ?? null,\n      record.resolveMs ?? null,\n      record.transactionMs ?? null,\n      record.projectionMs ?? null,\n      record.checkpointMs ?? null,\n      record.totalMs,\n      record.pagesProcessed ?? 0,\n      record.customersScanned ?? 0,\n      JSON.stringify(record.metadata ?? {}),\n      record.startedAt,\n      record.completedAt,\n    ]\n  );\n}\n\nexport function billingTraceToDevtoolsEvent(record: AthenaBillingTraceRecord): {\n  connectionId: string;\n  correlationId?: string;\n  domain: \"billing\";\n  errorPhase?: string;\n  event: string;\n  operation: string;\n  outcome: string;\n  provider: string;\n  timings: {\n    billing: {\n      phaseTimings: {\n        checkpointMs?: number;\n        projectionMs?: number;\n        providerMs?: number;\n        resolveMs?: number;\n        transactionMs?: number;\n      };\n      providerResourceId?: string;\n      resourceId?: string;\n      resourceKind?: string;\n    };\n    totalMs: number;\n  };\n  traceId: string;\n} {\n  return {\n    connectionId: record.connectionId,\n    correlationId: record.correlationId,\n    domain: \"billing\",\n    errorPhase: record.errorPhase,\n    event: record.operation,\n    operation: record.operation,\n    outcome: record.outcome,\n    provider: record.provider,\n    timings: {\n      billing: {\n        phaseTimings: {\n          checkpointMs: record.checkpointMs ?? undefined,\n          projectionMs: record.projectionMs ?? undefined,\n          providerMs: record.providerMs ?? undefined,\n          resolveMs: record.resolveMs ?? undefined,\n          transactionMs: record.transactionMs ?? undefined,\n        },\n        providerResourceId:\n          typeof record.metadata?.providerResourceId === \"string\"\n            ? record.metadata.providerResourceId\n            : undefined,\n        resourceId:\n          typeof record.metadata?.resourceId === \"string\"\n            ? record.metadata.resourceId\n            : undefined,\n        resourceKind:\n          typeof record.metadata?.resourceKind === \"string\"\n            ? record.metadata.resourceKind\n            : undefined,\n      },\n      totalMs: record.totalMs,\n    },\n    traceId: record.traceId,\n  };\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  | BillingReconciliationContext\n  | undefined {\n  return storage.getStore();\n}\n\nexport function runWithBillingReconciliationContext<T>(\n  context: BillingReconciliationContext,\n  fn: () => Promise<T>\n): Promise<T> {\n  return storage.run(context, fn);\n}\n\nexport function mintManualBillingReconciliationContext(input: {\n  connectionId: string;\n  provider: string;\n  runId?: string;\n  trigger?: \"bootstrap\" | \"manual\";\n}): BillingReconciliationContext {\n  const runId = input.runId ?? crypto.randomUUID();\n  return {\n    connectionId: input.connectionId,\n    correlationId: runId,\n    provider: input.provider,\n    traceId: crypto.randomUUID(),\n    trigger: input.trigger ?? \"manual\",\n  };\n}\n\nexport function mintScheduledBillingReconciliationContext(input: {\n  connectionId: string;\n  provider: string;\n  schedulerExecutionId: string;\n  runId?: string;\n}): BillingReconciliationContext {\n  return {\n    causationId: input.schedulerExecutionId,\n    connectionId: input.connectionId,\n    correlationId: input.runId ?? crypto.randomUUID(),\n    provider: input.provider,\n    traceId: crypto.randomUUID(),\n    trigger: \"scheduled\",\n  };\n}\n\nexport function inheritWebhookBillingReconciliationContext(input: {\n  causationId: string;\n  connectionId: string;\n  correlationId: string;\n  provider: string;\n  traceId: string;\n}): BillingReconciliationContext {\n  return {\n    causationId: input.causationId,\n    connectionId: input.connectionId,\n    correlationId: input.correlationId,\n    provider: input.provider,\n    traceId: input.traceId,\n    trigger: \"webhook\",\n  };\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  \"webhook_registrations\" as const;\n\nexport interface BillingReconciliationLease {\n  connectionId: string;\n  epoch: number;\n  expiresAt: Date;\n  ownerId: string;\n  resourceKind: string;\n}\n\nexport interface BillingReconciliationLeaseStore {\n  acquire(input: {\n    connectionId: string;\n    ownerId: string;\n    resourceKind?: string;\n    ttlMs?: number;\n  }): Promise<BillingReconciliationLease | null>;\n  heartbeat(input: {\n    connectionId: string;\n    epoch?: number;\n    ownerId: string;\n    resourceKind?: string;\n    ttlMs?: number;\n  }): Promise<boolean>;\n  release(input: {\n    connectionId: string;\n    ownerId: string;\n    resourceKind?: string;\n  }): 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  return maxDurationMs + BILLING_RECONCILIATION_LEASE_TTL_BUFFER_MS;\n}\n\nexport function createMemoryBillingReconciliationLeaseStore(now?: () => Date): {\n  leases: Map<string, BillingReconciliationLease>;\n  store: BillingReconciliationLeaseStore;\n} {\n  const clock = now ?? (() => new Date());\n  const leases = new Map<string, BillingReconciliationLease>();\n  const keyOf = (connectionId: string, resourceKind: string) =>\n    `${connectionId}:${resourceKind}`;\n  return {\n    leases,\n    store: {\n      async acquire(input) {\n        const resourceKind =\n          input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n        const key = keyOf(input.connectionId, resourceKind);\n        const existing = leases.get(key);\n        const instant = clock();\n        if (existing && existing.expiresAt > instant) {\n          return null;\n        }\n        const ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n        const nextEpoch = existing ? existing.epoch + 1 : 1;\n        const lease: BillingReconciliationLease = {\n          connectionId: input.connectionId,\n          epoch: nextEpoch,\n          expiresAt: new Date(instant.getTime() + ttlMs),\n          ownerId: input.ownerId,\n          resourceKind,\n        };\n        leases.set(key, lease);\n        return lease;\n      },\n      async heartbeat(input) {\n        const resourceKind =\n          input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n        const key = keyOf(input.connectionId, resourceKind);\n        const existing = leases.get(key);\n        if (!existing || existing.ownerId !== input.ownerId) {\n          return false;\n        }\n        if (input.epoch != null && existing.epoch !== input.epoch) {\n          return false;\n        }\n        const instant = clock();\n        if (existing.expiresAt <= instant) {\n          return false;\n        }\n        const ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n        existing.expiresAt = new Date(instant.getTime() + ttlMs);\n        return true;\n      },\n      async release(input) {\n        const resourceKind =\n          input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n        const key = keyOf(input.connectionId, resourceKind);\n        const existing = leases.get(key);\n        if (existing && existing.ownerId === input.ownerId) {\n          leases.delete(key);\n        }\n      },\n    },\n  };\n}\n\nexport function createPostgresBillingReconciliationLeaseStore(\n  sql: BillingSqlExecutor\n): BillingReconciliationLeaseStore {\n  return {\n    async acquire(input) {\n      const resourceKind =\n        input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n      const ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n      const result = await sql.query(\n        `\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        [input.connectionId, resourceKind, input.ownerId, ttlMs]\n      );\n      const row = result.rows[0];\n      if (!row) {\n        return null;\n      }\n      return {\n        connectionId: String(row.connection_id),\n        epoch: Number(row.epoch ?? 0),\n        expiresAt:\n          row.expires_at instanceof Date\n            ? row.expires_at\n            : new Date(String(row.expires_at)),\n        ownerId: String(row.owner_id),\n        resourceKind: String(row.resource_kind),\n      };\n    },\n    async heartbeat(input) {\n      const resourceKind =\n        input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n      const ttlMs = input.ttlMs ?? DEFAULT_TTL_MS;\n      const result = await sql.query(\n        `\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        [\n          input.connectionId,\n          resourceKind,\n          input.ownerId,\n          ttlMs,\n          input.epoch ?? null,\n        ]\n      );\n      return result.rows.length > 0;\n    },\n    async release(input) {\n      const resourceKind =\n        input.resourceKind ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS;\n      await sql.query(\n        `\nDELETE FROM billing.billing_reconciliation_leases\nWHERE connection_id = $1::uuid\n  AND resource_kind = $2\n  AND owner_id = $3\n`,\n        [input.connectionId, resourceKind, input.ownerId]\n      );\n    },\n  };\n}\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","import { ATHENA_BILLING_ERROR_DESCRIPTORS } from \"../../runtime/error/generated/billing.ts\";\n\nexport const ATHENA_BILLING_IMPORT_CONFLICT =\n  \"ATHENA_BILLING_IMPORT_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT =\n  \"ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\" as const;\nexport const ATHENA_BILLING_IMPORT_PROVIDER_FAILED =\n  \"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\" as const;\nexport const ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND =\n  \"ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\" as const;\nexport const ATHENA_BILLING_IMPORT_BINDING_CONFLICT =\n  \"ATHENA_BILLING_IMPORT_BINDING_CONFLICT\" as const;\nexport const ATHENA_BILLING_IMPORT_CURSOR_INVALID =\n  \"ATHENA_BILLING_IMPORT_CURSOR_INVALID\" as const;\n\nexport type AthenaBillingImportErrorCode =\n  | typeof ATHENA_BILLING_IMPORT_CONFLICT\n  | typeof ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT\n  | typeof ATHENA_BILLING_IMPORT_PROVIDER_FAILED\n  | typeof ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND\n  | typeof ATHENA_BILLING_IMPORT_BINDING_CONFLICT\n  | typeof ATHENA_BILLING_IMPORT_CURSOR_INVALID;\n\nconst IR_BY_CONSTANT: Record<AthenaBillingImportErrorCode, string> = {\n  ATHENA_BILLING_IMPORT_AMBIGUOUS_SUBJECT: \"billing_import_ambiguous_subject\",\n  ATHENA_BILLING_IMPORT_BINDING_CONFLICT: \"billing_import_binding_conflict\",\n  ATHENA_BILLING_IMPORT_CONFLICT: \"billing_import_conflict\",\n  ATHENA_BILLING_IMPORT_CURSOR_INVALID: \"billing_import_cursor_invalid\",\n  ATHENA_BILLING_IMPORT_PROVIDER_FAILED: \"billing_import_provider_failed\",\n  ATHENA_BILLING_IMPORT_SUBJECT_NOT_FOUND: \"billing_import_subject_not_found\",\n};\n\nexport class AthenaBillingImportError extends Error {\n  readonly code: AthenaBillingImportErrorCode;\n  readonly errorNumber: number;\n  readonly status: number;\n\n  constructor(input: { code: AthenaBillingImportErrorCode; message: string }) {\n    super(input.message);\n    this.name = \"AthenaBillingImportError\";\n    this.code = input.code;\n    const ir = ATHENA_BILLING_ERROR_DESCRIPTORS.find(\n      (entry) => entry.code === IR_BY_CONSTANT[input.code]\n    );\n    this.errorNumber = ir?.errorNumber ?? 4015;\n    this.status = ir?.status ?? 409;\n  }\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n  AthenaBillingMutationKind,\n  AthenaBillingPreviousPolicy,\n  AthenaBillingResultPolicy,\n} from \"./contract.ts\";\nimport type { AthenaBillingAuditEvent } from \"./types.ts\";\n\nexport interface AthenaBillingAuditResolveContext {\n  connectionId: string;\n  previous?: unknown;\n  provider: string;\n  providerCustomerId?: string;\n  providerWebhookId?: string;\n  result?: unknown;\n  subject?: BillingSubjectRef;\n}\n\nexport interface AthenaBillingEventSubject {\n  id: string;\n  kind: \"organization\" | \"user\";\n}\n\nexport interface AthenaBillingEventDefinition {\n  audit: true;\n  mutationKind: AthenaBillingMutationKind;\n  previous: AthenaBillingPreviousPolicy;\n  resolveProviderSubject: (\n    context: AthenaBillingAuditResolveContext\n  ) => { id: string; kind: \"customer\" | \"webhook\" } | undefined;\n  resolveSubject: (\n    context: AthenaBillingAuditResolveContext\n  ) => AthenaBillingEventSubject | undefined;\n  result: AthenaBillingResultPolicy;\n  subjectType: \"billing_subject\" | \"billing_webhook_registration\";\n}\n\nfunction subjectFrom(\n  context: AthenaBillingAuditResolveContext\n): AthenaBillingEventSubject | undefined {\n  const subject = context.subject;\n  if (!subject || subject.id.length === 0) {\n    return;\n  }\n  return { id: subject.id, kind: subject.kind };\n}\n\nfunction providerCustomerFrom(\n  context: AthenaBillingAuditResolveContext\n): { id: string; kind: \"customer\" } | undefined {\n  const id = context.providerCustomerId;\n  if (typeof id !== \"string\" || id.length === 0) {\n    return;\n  }\n  return { id, kind: \"customer\" };\n}\n\nfunction providerWebhookFrom(\n  context: AthenaBillingAuditResolveContext\n): { id: string; kind: \"webhook\" } | undefined {\n  const id = context.providerWebhookId;\n  if (typeof id !== \"string\" || id.length === 0) {\n    return;\n  }\n  return { id, kind: \"webhook\" };\n}\n\nconst webhookRegistrationIr = {\n  audit: true as const,\n  previous: \"optional\" as const,\n  resolveProviderSubject: providerWebhookFrom,\n  resolveSubject: () => undefined,\n  result: \"resource\" as const,\n  subjectType: \"billing_webhook_registration\" as const,\n};\n\nexport const ATHENA_BILLING_EVENT_DEFINITIONS = {\n  \"billing.document.ownership.conflict\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"optional\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"resource\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.document.ownership.resolved\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"optional\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"resource\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.reconciliation.cursor.reset\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"optional\",\n    resolveProviderSubject: () => undefined,\n    resolveSubject: subjectFrom,\n    result: \"receipt\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.reconciliation.failed\": {\n    audit: true,\n    mutationKind: \"action\",\n    previous: \"optional\",\n    resolveProviderSubject: (context) =>\n      providerCustomerFrom(context) ?? providerWebhookFrom(context),\n    resolveSubject: subjectFrom,\n    result: \"receipt\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.subject.binding.activated\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"required\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"resource\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.subject.binding.conflict\": {\n    audit: true,\n    mutationKind: \"update\",\n    previous: \"optional\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"resource\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.subject.binding.created\": {\n    audit: true,\n    mutationKind: \"create\",\n    previous: \"none\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"resource\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.subject.binding.revoked\": {\n    audit: true,\n    mutationKind: \"delete\",\n    previous: \"required\",\n    resolveProviderSubject: providerCustomerFrom,\n    resolveSubject: subjectFrom,\n    result: \"receipt\",\n    subjectType: \"billing_subject\",\n  },\n  \"billing.webhook.registration.created\": {\n    ...webhookRegistrationIr,\n    mutationKind: \"create\",\n    previous: \"none\",\n  },\n  \"billing.webhook.registration.disabled\": {\n    ...webhookRegistrationIr,\n    mutationKind: \"update\",\n  },\n  \"billing.webhook.registration.drift_detected\": {\n    ...webhookRegistrationIr,\n    mutationKind: \"action\",\n  },\n  \"billing.webhook.registration.secret_rotated\": {\n    ...webhookRegistrationIr,\n    mutationKind: \"update\",\n  },\n  \"billing.webhook.registration.updated\": {\n    ...webhookRegistrationIr,\n    mutationKind: \"update\",\n  },\n} as const satisfies Record<\n  AthenaBillingAuditEvent,\n  AthenaBillingEventDefinition\n>;\n\nexport function billingEventDefinition(\n  event: AthenaBillingAuditEvent\n): AthenaBillingEventDefinition {\n  return 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  /^[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  readonly code: string;\n\n  constructor(code: string) {\n    super(code);\n    this.name = \"AthenaBillingAuditError\";\n    this.code = code;\n  }\n}\n\nexport function assertBillingAuditUuid(value: string, code: string): void {\n  if (!BILLING_AUDIT_UUID.test(value)) {\n    throw new AthenaBillingAuditError(code);\n  }\n}\n\nexport function mintBillingAuditIdentity(): {\n  eventId: string;\n  id: string;\n} {\n  return {\n    eventId: crypto.randomUUID(),\n    id: crypto.randomUUID(),\n  };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return null;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction isPresentSnapshot(value: unknown): boolean {\n  if (value === undefined || value === null) {\n    return false;\n  }\n  const record = asRecord(value);\n  if (record && Object.keys(record).length === 0) {\n    return false;\n  }\n  return true;\n}\n\nfunction isRunLevelAuditEvent(\n  event: AthenaBillingAuditEntry[\"event\"]\n): boolean {\n  return (\n    event === \"billing.reconciliation.cursor.reset\" ||\n    event === \"billing.reconciliation.failed\"\n  );\n}\n\nexport function validateBillingAuditEntry(\n  entry: AthenaBillingAuditEntry,\n  ir: Pick<\n    AthenaBillingEventDefinition,\n    \"mutationKind\" | \"previous\" | \"result\" | \"subjectType\"\n  >\n): void {\n  assertBillingAuditUuid(entry.id, \"ATHENA_BILLING_AUDIT_INVALID_ID\");\n  assertBillingAuditUuid(\n    entry.eventId,\n    \"ATHENA_BILLING_AUDIT_INVALID_EVENT_ID\"\n  );\n  assertBillingAuditUuid(\n    entry.connectionId,\n    \"ATHENA_BILLING_AUDIT_INVALID_CONNECTION_ID\"\n  );\n  if (entry.outcome !== \"success\" && entry.outcome !== \"failure\") {\n    throw new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_OUTCOME\");\n  }\n  if (!isPresentSnapshot(entry.result)) {\n    throw new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_RESULT_REQUIRED\");\n  }\n  if (\n    entry.outcome === \"success\" &&\n    ir.result === \"resource\" &&\n    asRecord(entry.result) === null\n  ) {\n    throw new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_INVALID_RESULT\");\n  }\n  if (\n    entry.outcome === \"success\" &&\n    ir.previous === \"required\" &&\n    !isPresentSnapshot(entry.previous)\n  ) {\n    throw new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_PREVIOUS_REQUIRED\");\n  }\n  if (\n    !isRunLevelAuditEvent(entry.event) &&\n    ir.subjectType !== \"billing_webhook_registration\" &&\n    (typeof entry.subject?.id !== \"string\" ||\n      entry.subject.id.length === 0 ||\n      (entry.subject.kind !== \"user\" && entry.subject.kind !== \"organization\"))\n  ) {\n    throw new AthenaBillingAuditError(\"ATHENA_BILLING_AUDIT_SUBJECT_REQUIRED\");\n  }\n  if (\n    typeof entry.connectionId !== \"string\" ||\n    entry.connectionId.length === 0 ||\n    typeof entry.provider !== \"string\" ||\n    entry.provider.length === 0\n  ) {\n    throw new AthenaBillingAuditError(\n      \"ATHENA_BILLING_AUDIT_CONNECTION_REQUIRED\"\n    );\n  }\n  if (ir.subjectType === \"billing_webhook_registration\") {\n    if (\n      typeof entry.providerSubject?.id !== \"string\" ||\n      entry.providerSubject.id.length === 0 ||\n      entry.providerSubject.kind !== \"webhook\"\n    ) {\n      throw new AthenaBillingAuditError(\n        \"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\"\n      );\n    }\n  } else if (\n    !isRunLevelAuditEvent(entry.event) &&\n    (typeof entry.providerSubject?.id !== \"string\" ||\n      entry.providerSubject.id.length === 0 ||\n      entry.providerSubject.kind !== \"customer\")\n  ) {\n    throw new AthenaBillingAuditError(\n      \"ATHENA_BILLING_AUDIT_PROVIDER_SUBJECT_REQUIRED\"\n    );\n  }\n}\n","import type { BillingImportPlan } from \"../import/types.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport {\n  ATHENA_BILLING_EVENT_DEFINITIONS,\n  billingEventDefinition,\n} from \"../observability/events.ts\";\nimport type {\n  AthenaBillingAuditEntry,\n  AthenaBillingAuditEvent,\n  BillingReconciliationContext,\n} from \"../observability/types.ts\";\nimport {\n  mintBillingAuditIdentity,\n  validateBillingAuditEntry,\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  applied: \"activated\" | \"conflict\" | \"created\" | \"noop\";\n  context: BillingReconciliationContext;\n  plan: BillingImportPlan;\n  previous: BillingSubjectBindingRecord | null;\n  projectionConflicts: number;\n  writer: AthenaBillingAuditWriter;\n}): Promise<void> {\n  const events: AthenaBillingAuditEvent[] = [];\n  if (input.applied === \"created\") {\n    events.push(\"billing.subject.binding.created\");\n  } else if (input.applied === \"activated\") {\n    events.push(\"billing.subject.binding.activated\");\n  } else if (input.applied === \"conflict\") {\n    events.push(\"billing.subject.binding.conflict\");\n  }\n  if (input.projectionConflicts > 0) {\n    events.push(\"billing.document.ownership.conflict\");\n  } else if (\n    (input.applied === \"created\" || input.applied === \"activated\") &&\n    input.plan.subject\n  ) {\n    events.push(\"billing.document.ownership.resolved\");\n  }\n  for (const event of events) {\n    const ir = billingEventDefinition(event);\n    const resolveContext = {\n      connectionId: input.context.connectionId,\n      previous: input.previous,\n      provider: input.context.provider,\n      providerCustomerId: input.plan.providerCustomerId,\n      result: {\n        action: input.applied,\n        decision: input.plan.decision,\n        subject: input.plan.subject,\n      },\n      subject: input.plan.subject,\n    };\n    const subject = ir.resolveSubject(resolveContext);\n    const providerSubject = ir.resolveProviderSubject(resolveContext);\n    const entry: AthenaBillingAuditEntry = {\n      actor: { kind: \"system\" },\n      causationId: input.context.causationId,\n      connectionId: input.context.connectionId,\n      correlationId: input.context.correlationId,\n      event,\n      ...mintBillingAuditIdentity(),\n      outcome: \"success\",\n      previous: input.previous ?? undefined,\n      provider: input.context.provider,\n      providerSubject,\n      result: resolveContext.result,\n      subject,\n      traceId: input.context.traceId,\n    };\n    validateBillingAuditEntry(entry, ir);\n    await input.writer.write(entry);\n  }\n}\n\nexport async function emitBillingAuditFailure(input: {\n  context: BillingReconciliationContext;\n  error: unknown;\n  providerCustomerId?: string;\n  providerWebhookId?: string;\n  subject?: BillingSubjectRef;\n  writer: AthenaBillingAuditWriter;\n}): Promise<void> {\n  const ir = billingEventDefinition(\"billing.reconciliation.failed\");\n  const resolveContext = {\n    connectionId: input.context.connectionId,\n    provider: input.context.provider,\n    providerCustomerId: input.providerCustomerId,\n    providerWebhookId: input.providerWebhookId,\n    result: {\n      error:\n        input.error instanceof Error\n          ? input.error.message\n          : \"billing operation failed\",\n    },\n    subject: input.subject,\n  };\n  const entry: AthenaBillingAuditEntry = {\n    actor: { kind: \"system\" },\n    causationId: input.context.causationId,\n    connectionId: input.context.connectionId,\n    correlationId: input.context.correlationId,\n    event: \"billing.reconciliation.failed\",\n    ...mintBillingAuditIdentity(),\n    outcome: \"failure\",\n    provider: input.context.provider,\n    providerSubject: ir.resolveProviderSubject(resolveContext),\n    result: resolveContext.result,\n    subject: ir.resolveSubject(resolveContext),\n    traceId: input.context.traceId,\n  };\n  validateBillingAuditEntry(entry, ir);\n  await input.writer.write(entry);\n}\n\nexport function billingAuditEventCatalogKeys(): readonly string[] {\n  return Object.keys(ATHENA_BILLING_EVENT_DEFINITIONS);\n}\n","export type BillingEnvironmentName = \"test\" | \"live\";\n\nexport interface BillingEnvironment {\n  readonly name: BillingEnvironmentName;\n  readonly testMode: boolean;\n}\n\n/** Named live-selection invariant (see billing/safety/environment.ts). */\nexport type BillingLiveCredentialSelection = BillingEnvironment;\n\nexport function billingEnvironmentName(\n  testMode: boolean\n): BillingEnvironmentName {\n  return 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  testMode?: boolean;\n}): BillingEnvironment {\n  const testMode = input?.testMode !== false;\n  return {\n    name: billingEnvironmentName(testMode),\n    testMode,\n  };\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 { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_ENV_APP_URL_KEYS } from \"../env/index.ts\";\n\nexport interface AthenaAppIdentityInput {\n  id?: string | null;\n  name?: string | null;\n  url?: string | null;\n}\n\nexport interface AthenaAppIdentity {\n  readonly hostname: string;\n  readonly name: string;\n  readonly origin: string;\n}\n\nexport interface ResolveAthenaAppIdentityOptions {\n  app?: AthenaAppIdentityInput;\n  env?: Record<string, string | undefined>;\n  environment?: \"development\" | \"production\";\n  /** When true, production missing URL fails closed. */\n  required?: boolean;\n}\n\nconst FORBIDDEN_IDENTITY_ENV_KEYS = new Set([\n  \"HOST\",\n  \"HTTP_HOST\",\n  \"X_FORWARDED_HOST\",\n  \"x-forwarded-host\",\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;\n    }\n    return url.origin;\n  } catch {\n    /* invalid URL */\n  }\n}\n\nfunction firstConfiguredOrigin(\n  env: Record<string, string | undefined>\n): string | undefined {\n  for (const key of ATHENA_ENV_APP_URL_KEYS) {\n    const raw = env[key];\n    if (typeof raw !== \"string\" || !raw.trim()) {\n      continue;\n    }\n    const origin = originFromConfiguredUrl(raw);\n    if (origin) {\n      return origin;\n    }\n  }\n}\n\n/**\n * Resolve one immutable app identity at Auth / client init.\n */\nexport function resolveAthenaAppIdentity(\n  options: ResolveAthenaAppIdentityOptions = {}\n): AthenaAppIdentity | null {\n  const env = options.env ?? {};\n  for (const key of FORBIDDEN_IDENTITY_ENV_KEYS) {\n    void env[key];\n  }\n\n  const explicitUrl =\n    typeof options.app?.url === \"string\" ? options.app.url.trim() : \"\";\n  let origin: string | undefined;\n  if (explicitUrl) {\n    origin = originFromConfiguredUrl(explicitUrl);\n    if (!origin) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        \"createClient({ app: { url } }) must be an absolute http(s) URL.\",\n        \"auth\"\n      );\n    }\n  } else {\n    origin = firstConfiguredOrigin(env);\n  }\n\n  if (!origin) {\n    if (options.required && options.environment === \"production\") {\n      throw new AthenaConfigurationError(\n        \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\",\n        \"Passkeys require a trusted application origin (createClient app.url or APP_URL). Production does not default to localhost and never reads Host.\",\n        \"auth\"\n      );\n    }\n    return null;\n  }\n\n  const hostname = new URL(origin).hostname;\n  const name =\n    typeof options.app?.name === \"string\" && options.app.name.trim()\n      ? options.app.name.trim()\n      : \"Athena\";\n  return Object.freeze({ hostname, name, origin });\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  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n  return btoa(binary)\n    .replaceAll(\"+\", \"-\")\n    .replaceAll(\"/\", \"_\")\n    .replace(/[=]+$/g, \"\");\n}\n\nfunction fromBase64Url(value: string): Uint8Array {\n  const padded = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n  const padLength = (4 - (padded.length % 4)) % 4;\n  const binary = atob(`${padded}${\"=\".repeat(padLength)}`);\n  const bytes = new Uint8Array(binary.length);\n  for (let index = 0; index < binary.length; index += 1) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n  return bytes;\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  let hex = \"\";\n  for (const byte of bytes) {\n    hex += byte.toString(16).padStart(2, \"0\");\n  }\n  return hex;\n}\n\nfunction isLoopbackHost(hostname: string): boolean {\n  const host = hostname.toLowerCase();\n  return (\n    host === \"localhost\" ||\n    host === \"127.0.0.1\" ||\n    host === \"::1\" ||\n    host === \"[::1]\"\n  );\n}\n\nexport function generateAuthBridgeCode(): string {\n  const bytes = new Uint8Array(AUTH_BRIDGE_CODE_ENTROPY_BYTES);\n  crypto.getRandomValues(bytes);\n  return `${AUTH_BRIDGE_CODE_PREFIX}${toBase64Url(bytes)}`;\n}\n\nexport function parseAuthBridgeCode(code: string): ParsedAuthBridgeCode {\n  if (!code.startsWith(AUTH_BRIDGE_CODE_PREFIX)) {\n    throw new Error(\"Invalid auth bridge code\");\n  }\n  const payload = code.slice(AUTH_BRIDGE_CODE_PREFIX.length);\n  if (!/^[A-Za-z0-9_-]+$/.test(payload)) {\n    throw new Error(\"Invalid auth bridge code\");\n  }\n  const bytes = fromBase64Url(payload);\n  if (bytes.byteLength !== AUTH_BRIDGE_CODE_ENTROPY_BYTES) {\n    throw new Error(\"Invalid auth bridge code\");\n  }\n  return {\n    bytes,\n    entropyBits: bytes.byteLength * 8,\n  };\n}\n\nexport async function hashAuthBridgeCode(code: string): Promise<string> {\n  const encoded = new TextEncoder().encode(\n    `${AUTH_BRIDGE_CODE_HASH_PREFIX}${code}`\n  );\n  const digest = await crypto.subtle.digest(\"SHA-256\", encoded);\n  return toHex(new Uint8Array(digest));\n}\n\nexport function normalizeAuthBridgeDestinationOrigin(input: string): string {\n  let url: URL;\n  try {\n    url = new URL(input);\n  } catch {\n    throw new Error(\"Invalid destination origin\");\n  }\n  if (url.username || url.password) {\n    throw new Error(\"Invalid destination origin\");\n  }\n  if (url.search !== \"\" || url.hash !== \"\") {\n    throw new Error(\"Invalid destination origin\");\n  }\n  if (url.pathname !== \"/\" && url.pathname !== \"\") {\n    throw new Error(\"Invalid destination origin\");\n  }\n  if (url.protocol === \"http:\") {\n    if (!isLoopbackHost(url.hostname)) {\n      throw new Error(\"Invalid destination origin\");\n    }\n  } else if (url.protocol !== \"https:\") {\n    throw new Error(\"Invalid destination origin\");\n  }\n  return url.origin;\n}\n\nexport function normalizeAuthBridgeRedirectPath(input: string): string {\n  if (\n    typeof input !== \"string\" ||\n    input.length === 0 ||\n    !input.startsWith(\"/\")\n  ) {\n    throw new Error(\"Invalid redirect path\");\n  }\n  if (input.startsWith(\"//\") || input.includes(\"\\\\\") || input.includes(\"://\")) {\n    throw new Error(\"Invalid redirect path\");\n  }\n  if (/%5c/i.test(input) || /javascript:/i.test(input)) {\n    throw new Error(\"Invalid redirect path\");\n  }\n  return input;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type {\n  AthenaAuthObservabilityConfig,\n  NormalizedAthenaAuthObservability,\n} from \"./types.ts\";\n\nexport function normalizeAthenaAuthObservability(\n  input?: AthenaAuthObservabilityConfig\n): NormalizedAthenaAuthObservability {\n  const tracesInput = input?.traces;\n  const tracesEnabled =\n    tracesInput === undefined\n      ? true\n      : typeof tracesInput === \"boolean\"\n        ? tracesInput\n        : tracesInput.sampleRate !== 0;\n  const sampleRate =\n    typeof tracesInput === \"object\" &&\n    typeof tracesInput.sampleRate === \"number\" &&\n    Number.isFinite(tracesInput.sampleRate)\n      ? Math.min(1, Math.max(0, tracesInput.sampleRate))\n      : 1;\n  const retentionDays =\n    typeof tracesInput === \"object\" &&\n    typeof tracesInput.retentionDays === \"number\" &&\n    Number.isFinite(tracesInput.retentionDays)\n      ? Math.max(1, Math.trunc(tracesInput.retentionDays))\n      : undefined;\n  return {\n    auditLog: input?.auditLog !== false,\n    traces: {\n      enabled: tracesEnabled,\n      retentionDays,\n      sampleRate: tracesEnabled ? sampleRate : 0,\n    },\n  };\n}\n\nexport function assertLocalAuthObservability(auth: unknown): void {\n  if (!auth || typeof auth !== \"object\") {\n    return;\n  }\n  const raw = auth as Record<string, unknown>;\n  if (!(\"observability\" in raw) || raw.observability === undefined) {\n    return;\n  }\n  const mode = (auth as { mode?: unknown }).mode;\n  if (mode !== \"local\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_OBSERVABILITY_REQUIRES_LOCAL_RUNTIME\",\n      'auth.observability is an embedded-auth capability. Set auth.mode to \"local\" or omit observability for remote Auth.',\n      \"auth\"\n    );\n  }\n}\n","import { AthenaConfigurationError } from \"../config/errors.ts\";\nimport type { AthenaAppIdentity } from \"./app-identity.ts\";\nimport type { NormalizedAthenaAuthorizationServerConfig } from \"./config.ts\";\n\nexport interface AthenaAuthProtocolIdentity {\n  readonly authorizationEndpoint: string;\n  readonly issuer: string;\n  readonly jwksUri: string;\n  readonly oauthMetadataUri: string;\n  readonly publicBaseUrl: string;\n  readonly revocationEndpoint: string;\n  readonly tokenEndpoint: string;\n}\n\nexport interface CreateAthenaAuthProtocolIdentityInput {\n  appIdentity: AthenaAppIdentity | null;\n  authorizationServer: NormalizedAthenaAuthorizationServerConfig;\n  basePath: string;\n  environment?: \"development\" | \"production\";\n}\n\n/** Documented non-production JWT/JWKS issuer when no init-time URL is configured. */\nexport const ATHENA_AUTH_DEV_DEFAULT_ISSUER = \"http://localhost:3000\";\n\nexport function joinAuthProtocolUrl(base: string, path: string): string {\n  const root = base.replace(/\\/$/, \"\");\n  const suffix = path.startsWith(\"/\") ? path : `/${path}`;\n  return `${root}${suffix}`;\n}\n\nexport function protocolPublicBaseUrl(\n  issuer: string,\n  basePath: string\n): string {\n  const path = basePath === \"/\" ? \"\" : basePath.replace(/\\/$/, \"\");\n  return `${issuer}${path}`;\n}\n\nexport function assertOriginOnlyIssuer(issuer: string, field: string): string {\n  let parsed: URL;\n  try {\n    parsed = new URL(issuer);\n  } catch {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `${field} must be an absolute HTTP(S) origin`,\n      \"auth\"\n    );\n  }\n  if (\n    (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") ||\n    parsed.username ||\n    parsed.password ||\n    parsed.search ||\n    parsed.hash\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `${field} must be an absolute HTTP(S) origin without credentials, query, or fragment`,\n      \"auth\"\n    );\n  }\n  if (parsed.pathname !== \"/\" && parsed.pathname !== \"\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `${field} must be origin-only; pathful issuers are rejected`,\n      \"auth\"\n    );\n  }\n  return parsed.origin;\n}\n\nfunction configuredProtocolIssuer(\n  input: CreateAthenaAuthProtocolIdentityInput\n): string | null {\n  return input.authorizationServer.issuer ?? input.appIdentity?.origin ?? null;\n}\n\n/**\n * Init-time issuer sources only: authorizationServer.issuer, then\n * app.url/APP_URL. Never request Host, forwarded host, or callback/trust\n * origin lists. Non-production JWT surfaces may use a documented localhost\n * default when no issuer is configured.\n */\nexport function resolveAthenaAuthProtocolIssuer(\n  input: CreateAthenaAuthProtocolIdentityInput\n): string {\n  const issuer = configuredProtocolIssuer(input);\n  if (issuer) {\n    return assertOriginOnlyIssuer(issuer, \"auth.authorizationServer.issuer\");\n  }\n  if (input.environment !== \"production\") {\n    return assertOriginOnlyIssuer(\n      ATHENA_AUTH_DEV_DEFAULT_ISSUER,\n      \"auth.authorizationServer.issuer\"\n    );\n  }\n  throw new AthenaConfigurationError(\n    \"ATHENA_RUNTIME_CONFIG_INVALID\",\n    \"Athena Auth protocol identity requires authorizationServer.issuer or app.url/APP_URL\",\n    \"auth\"\n  );\n}\n\nexport function createAthenaAuthProtocolIdentity(\n  input: CreateAthenaAuthProtocolIdentityInput\n): AthenaAuthProtocolIdentity {\n  const origin = resolveAthenaAuthProtocolIssuer(input);\n  const publicBaseUrl = protocolPublicBaseUrl(origin, input.basePath);\n  return Object.freeze({\n    authorizationEndpoint:\n      input.authorizationServer.authorizationEndpoint ??\n      joinAuthProtocolUrl(publicBaseUrl, \"/oauth/authorize\"),\n    issuer: origin,\n    jwksUri: joinAuthProtocolUrl(publicBaseUrl, \"/.well-known/jwks.json\"),\n    oauthMetadataUri: joinAuthProtocolUrl(\n      publicBaseUrl,\n      \"/.well-known/oauth-authorization-server\"\n    ),\n    publicBaseUrl,\n    revocationEndpoint: joinAuthProtocolUrl(publicBaseUrl, \"/oauth/revoke\"),\n    tokenEndpoint: joinAuthProtocolUrl(publicBaseUrl, \"/oauth/token\"),\n  });\n}\n\nexport function tryCreateAthenaAuthProtocolIdentity(\n  input: CreateAthenaAuthProtocolIdentityInput\n): AthenaAuthProtocolIdentity | null {\n  if (!configuredProtocolIssuer(input)) {\n    return null;\n  }\n  return createAthenaAuthProtocolIdentity(input);\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\n\nexport interface AthenaAuthSocialProviderOptions {\n  authorizationEndpoint?: string;\n  clientId: string;\n  clientSecret?: string;\n  issuer?: string;\n  jwksEndpoint?: string;\n  scope?: string[];\n  tokenEndpoint?: string;\n  userInfoEndpoint?: string;\n}\n\nexport interface AthenaAuthSocialOptions {\n  providers?: Record<string, AthenaAuthSocialProviderOptions>;\n}\n\nexport interface NormalizedSocialAuthConfig {\n  providers: Record<string, AthenaAuthSocialProviderOptions>;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return;\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 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 normalizeSocialProviderBag(\n  value: unknown,\n  preserveSecret: boolean\n): AthenaAuthSocialProviderOptions | undefined {\n  const record = asRecord(value);\n  if (!record) {\n    return;\n  }\n  const normalized = {\n    ...record,\n    authorizationEndpoint: asString(record.authorizationEndpoint),\n    clientId: asString(record.clientId) ?? \"\",\n    issuer: asString(record.issuer),\n    jwksEndpoint: asString(record.jwksEndpoint),\n    tokenEndpoint: asString(record.tokenEndpoint),\n    userInfoEndpoint: asString(record.userInfoEndpoint),\n  } as AthenaAuthSocialProviderOptions;\n  if (preserveSecret) {\n    normalized.clientSecret = asString(record.clientSecret) ?? \"\";\n  } else {\n    delete normalized.clientSecret;\n  }\n  return normalized;\n}\n\nfunction normalizeSocialProviderMap(\n  value: unknown,\n  preserveSecret: boolean\n): Record<string, AthenaAuthSocialProviderOptions> {\n  const record = asRecord(value);\n  if (!record) {\n    return {};\n  }\n  const providers: Record<string, AthenaAuthSocialProviderOptions> = {};\n  for (const [id, bag] of Object.entries(record)) {\n    const normalized = normalizeSocialProviderBag(bag, preserveSecret);\n    if (!normalized) {\n      continue;\n    }\n    providers[id] = normalized;\n  }\n  return providers;\n}\n\nfunction extractSocialProviderMap(value: unknown): unknown {\n  const record = asRecord(value);\n  if (!record) {\n    return;\n  }\n  const nested = asRecord(record.providers);\n  return nested ?? record;\n}\n\n/**\n * Normalize the public social provider aliases without importing the\n * Node-only social adapter. Remote/browser configs never retain secrets.\n */\nexport function normalizeAuthSocialProviders(\n  raw: Record<string, unknown>\n): NormalizedSocialAuthConfig {\n  assertSocialConfigObject(\"social\", raw.social);\n  assertSocialConfigObject(\"oauth\", raw.oauth);\n  assertSocialConfigObject(\"socialProviders\", raw.socialProviders);\n  const providers = normalizeSocialProviderMap(\n    extractSocialProviderMap(raw.social) ?? raw.oauth ?? raw.socialProviders,\n    raw.mode === \"local\"\n  );\n  return { providers };\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  | \"discouraged\"\n  | \"preferred\"\n  | \"required\";\n\nexport type AthenaPasskeyResidentKey = \"discouraged\" | \"preferred\" | \"required\";\n\nexport type AthenaPasskeyAuthenticatorAttachment =\n  | \"cross-platform\"\n  | \"platform\";\n\nexport interface AthenaPasskeyRegistrationExtensions {\n  credProps?: boolean;\n}\n\n/** Intentionally empty until Athena defines an authentication-extension contract. */\nexport type AthenaPasskeyAuthenticationExtensions = Record<string, never>;\n\nexport interface AthenaPasskeyRegistrationPolicy {\n  authenticatorAttachment: AthenaPasskeyAuthenticatorAttachment | null;\n  extensions: AthenaPasskeyRegistrationExtensions;\n  residentKey: AthenaPasskeyResidentKey | null;\n  userVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticationPolicy {\n  extensions: AthenaPasskeyAuthenticationExtensions;\n  userVerification: AthenaPasskeyUserVerification | null;\n}\n\nexport interface AthenaPasskeyAuthenticatorSelection {\n  authenticatorAttachment?: AthenaPasskeyAuthenticatorAttachment;\n  requireResidentKey?: boolean;\n  residentKey?: AthenaPasskeyResidentKey;\n  userVerification?: AthenaPasskeyUserVerification;\n}\n\nconst USER_VERIFICATION = new Set<AthenaPasskeyUserVerification>([\n  \"discouraged\",\n  \"preferred\",\n  \"required\",\n]);\nconst RESIDENT_KEY = new Set<AthenaPasskeyResidentKey>([\n  \"discouraged\",\n  \"preferred\",\n  \"required\",\n]);\nconst ATTACHMENT = new Set<AthenaPasskeyAuthenticatorAttachment>([\n  \"cross-platform\",\n  \"platform\",\n]);\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction pickEnum<T extends string>(\n  value: unknown,\n  allowed: ReadonlySet<T>\n): T | null {\n  return typeof value === \"string\" && allowed.has(value as T)\n    ? (value as T)\n    : null;\n}\n\nexport function normalizePasskeyRegistrationPolicy(\n  raw: unknown\n): AthenaPasskeyRegistrationPolicy {\n  const record = asRecord(raw);\n  const extensionsRaw = asRecord(record?.extensions);\n  return {\n    authenticatorAttachment: pickEnum(\n      record?.authenticatorAttachment,\n      ATTACHMENT\n    ),\n    extensions: {\n      ...(extensionsRaw?.credProps === true ? { credProps: true } : {}),\n      ...(extensionsRaw?.credProps === false ? { credProps: false } : {}),\n    },\n    residentKey: pickEnum(record?.residentKey, RESIDENT_KEY),\n    userVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n  };\n}\n\nexport function normalizePasskeyAuthenticationPolicy(\n  raw: unknown\n): AthenaPasskeyAuthenticationPolicy {\n  const record = asRecord(raw);\n  return {\n    extensions: {},\n    userVerification: pickEnum(record?.userVerification, USER_VERIFICATION),\n  };\n}\n\nexport function requireUserVerificationFromPolicy(\n  userVerification: AthenaPasskeyUserVerification | null\n): boolean {\n  return userVerification === \"required\";\n}\n\nexport function registrationAuthenticatorSelection(input: {\n  attachmentOverride?: AthenaPasskeyAuthenticatorAttachment | null;\n  policy: AthenaPasskeyRegistrationPolicy;\n}): AthenaPasskeyAuthenticatorSelection | undefined {\n  const attachment =\n    input.attachmentOverride ?? input.policy.authenticatorAttachment;\n  const selection: AthenaPasskeyAuthenticatorSelection = {};\n  if (attachment) {\n    selection.authenticatorAttachment = attachment;\n  }\n  const residentKey = input.policy.residentKey ?? \"required\";\n  selection.residentKey = residentKey;\n  selection.requireResidentKey = residentKey === \"required\";\n  if (input.policy.userVerification) {\n    selection.userVerification = input.policy.userVerification;\n  }\n  return selection;\n}\n\nexport function supportedRegistrationExtensions(\n  policy: AthenaPasskeyRegistrationPolicy\n): AthenaPasskeyRegistrationExtensions | undefined {\n  if (policy.extensions.credProps === false) {\n    return;\n  }\n  return { credProps: true };\n}\n\n/**\n * Persist only Athena-normalized extension meaning. Never store raw\n * `clientExtensionResults`.\n */\nexport function normalizeCredPropsResidentKey(\n  clientExtensionResults: unknown\n): boolean | null {\n  const record = asRecord(clientExtensionResults);\n  const credProps = asRecord(record?.credProps);\n  if (typeof credProps?.rk === \"boolean\") {\n    return credProps.rk;\n  }\n  return 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 { AthenaConfigurationError } from \"../config/errors.ts\";\nimport {\n  type AthenaAppIdentity,\n  type AthenaAppIdentityInput,\n  resolveAthenaAppIdentity,\n} from \"./app-identity.ts\";\nimport { normalizeAuthBridgeDestinationOrigin } from \"./bridge/code.ts\";\nimport { ATHENA_AUTH_DEFAULT_BASE_PATH } from \"./contract/index.ts\";\nimport type { AthenaAuthHooks } from \"./hooks/types.ts\";\nimport { normalizeAthenaAuthObservability } from \"./observability/config.ts\";\nimport type {\n  AthenaAuthObservabilityConfig,\n  NormalizedAthenaAuthObservability,\n} from \"./observability/types.ts\";\nimport { assertOriginOnlyIssuer } from \"./protocol-identity.ts\";\nimport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/config.ts\";\nimport { normalizeAuthSocialProviders } from \"./social/config.ts\";\n\nexport type {\n  AthenaAppIdentity,\n  AthenaAppIdentityInput,\n} from \"./app-identity.ts\";\nexport { resolveAthenaAppIdentity } from \"./app-identity.ts\";\n\nimport {\n  type AthenaPasskeyAuthenticationPolicy,\n  type AthenaPasskeyRegistrationPolicy,\n  normalizePasskeyAuthenticationPolicy,\n  normalizePasskeyRegistrationPolicy,\n} from \"./passkey/policy.ts\";\n\nexport type {\n  AthenaPasskeyAuthenticationExtensions,\n  AthenaPasskeyAuthenticationPolicy,\n  AthenaPasskeyAuthenticatorAttachment,\n  AthenaPasskeyRegistrationExtensions,\n  AthenaPasskeyRegistrationPolicy,\n  AthenaPasskeyResidentKey,\n  AthenaPasskeyUserVerification,\n} from \"./passkey/policy.ts\";\nexport type {\n  AthenaAuthSocialOptions,\n  AthenaAuthSocialProviderOptions,\n  NormalizedSocialAuthConfig,\n} from \"./social/server/social-config.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 AthenaAuthorizationServerResourceOptions {\n  description?: string;\n  scopes: Record<string, { description?: string }>;\n}\n\nexport interface AthenaAuthorizationServerOptions {\n  accessTokenTtlSeconds?: number;\n  authorizationCodeTtlSeconds?: number;\n  authorizationEndpoint?: string;\n  authorizationRequestTtlSeconds?: number;\n  consentUrl?: string;\n  enabled?: boolean;\n  issuer?: string;\n  issueRefreshTokens?: boolean;\n  refreshTokenTtlSeconds?: number;\n  resources?: Record<string, AthenaAuthorizationServerResourceOptions>;\n  signInUrl?: string;\n}\n\nexport interface NormalizedAthenaAuthorizationServerResource {\n  description?: string;\n  scopes: Readonly<Record<string, { description?: string }>>;\n}\n\nexport interface NormalizedAthenaAuthorizationServerConfig {\n  accessTokenTtlSeconds: number;\n  authorizationCodeTtlSeconds: number;\n  authorizationEndpoint: string | null;\n  authorizationRequestTtlSeconds: number;\n  consentUrl: string | null;\n  enabled: boolean;\n  issuer: string | null;\n  issueRefreshTokens: boolean;\n  refreshTokenTtlSeconds: number;\n  resources: Readonly<\n    Record<string, NormalizedAthenaAuthorizationServerResource>\n  >;\n  signInUrl: string | null;\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  registration?: {\n    authenticatorAttachment?: \"cross-platform\" | \"platform\";\n    extensions?: { credProps?: boolean };\n    residentKey?: \"discouraged\" | \"preferred\" | \"required\";\n    userVerification?: \"discouraged\" | \"preferred\" | \"required\";\n  };\n  relatedOrigins?: readonly string[];\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  authorizationServer?: AthenaAuthorizationServerOptions;\n  basePath?: string;\n  bridge?: AthenaAuthBridgeOptions;\n  emailAndPassword?: AthenaAuthEmailAndPasswordOptions;\n  /**\n   * Embedded-only domain lifecycle hooks. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  hooks?: AthenaAuthHooks;\n  mode: \"local\";\n  oauth?: Record<string, AthenaAuthSocialProviderOptions>;\n  /**\n   * Embedded-only audit/trace tables. Discarded by\n   * `normalizeAthenaAuthConfig`; pass through `athenaAuthConfig()` into\n   * `createAthenaAuthRuntime`.\n   */\n  observability?: AthenaAuthObservabilityConfig;\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\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  authorizationServer: NormalizedAthenaAuthorizationServerConfig;\n  emailAndPassword: Required<AthenaAuthEmailAndPasswordOptions>;\n  execution: AthenaAuthExecutionMode;\n  observability: NormalizedAthenaAuthObservability;\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  secret?: string;\n  security: {\n    bodyLimitBytes: number;\n    cookieSecure: boolean | \"auto\";\n    trustedOrigins: string[];\n    trustedProxy: boolean;\n  };\n  session: Required<AthenaAuthSessionOptions>;\n  social: NormalizedSocialAuthConfig;\n  upstreamUrl?: string;\n  url?: string;\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_AUTHORIZATION_SERVER: NormalizedAthenaAuthorizationServerConfig =\n{\n  accessTokenTtlSeconds: 600,\n  authorizationCodeTtlSeconds: 90,\n  authorizationEndpoint: null,\n  authorizationRequestTtlSeconds: 600,\n  consentUrl: null,\n  enabled: false,\n  issuer: null,\n  issueRefreshTokens: true,\n  refreshTokenTtlSeconds: 30 * 24 * 60 * 60,\n  resources: {},\n  signInUrl: null,\n};\n\nconst AUTHORIZATION_TTL_LIMITS = {\n  accessToken: { max: 3600, min: 60 },\n  authorizationCode: { max: 600, min: 30 },\n  authorizationRequest: { max: 15 * 60, min: 60 },\n  refreshToken: { max: 365 * 24 * 60 * 60, min: 5 * 60 },\n} as const;\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;\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;\n    }\n    return url.origin;\n  } catch {\n    /* invalid URL */\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    const origin = originFromConfiguredUrl(trimmed);\n    if (!origin) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        \"Auth trusted origins must be absolute HTTP(S) URLs\",\n        \"auth\",\n      );\n    }\n    unique.add(origin);\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 normalizeBoundedAuthorizationTtl(\n  value: unknown,\n  fallback: number,\n  bounds: { max: number; min: number },\n): number {\n  if (typeof value !== \"number\" || !Number.isFinite(value)) {\n    return fallback;\n  }\n  return Math.min(bounds.max, Math.max(bounds.min, Math.trunc(value)));\n}\n\nfunction normalizeConfiguredAuthorizationUrl(\n  value: unknown,\n  field: string,\n): string | null {\n  if (value == null || value === \"\") {\n    return null;\n  }\n  if (typeof value !== \"string\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `auth.authorizationServer.${field} must be an absolute HTTP(S) URL`,\n      \"auth\",\n    );\n  }\n  try {\n    const url = new URL(value);\n    if (\n      (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n      url.username ||\n      url.password ||\n      url.search ||\n      url.hash\n    ) {\n      throw new Error(\"invalid authorization URL\");\n    }\n    return url.toString().replace(/\\/$/, \"\");\n  } catch {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      `auth.authorizationServer.${field} must be an absolute HTTP(S) URL without credentials, query, or fragment`,\n      \"auth\",\n    );\n  }\n}\n\nfunction normalizeAuthorizationIssuer(\n  value: unknown,\n  appIdentity: AthenaAppIdentity | null,\n  enabled: boolean,\n): string | null {\n  const configured = normalizeConfiguredAuthorizationUrl(value, \"issuer\");\n  const issuer = configured ?? appIdentity?.origin ?? null;\n  if (!enabled) {\n    return issuer\n      ? assertOriginOnlyIssuer(issuer, \"auth.authorizationServer.issuer\")\n      : issuer;\n  }\n  if (!issuer) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"auth.authorizationServer.enabled requires issuer or app.url/APP_URL\",\n      \"auth\",\n    );\n  }\n  const origin = assertOriginOnlyIssuer(\n    issuer,\n    \"auth.authorizationServer.issuer\",\n  );\n  if (process.env.NODE_ENV === \"production\" && !origin.startsWith(\"https://\")) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"auth.authorizationServer.issuer must use HTTPS in production\",\n      \"auth\",\n    );\n  }\n  return origin;\n}\n\nfunction normalizeAuthorizationResources(\n  value: unknown,\n): Readonly<Record<string, NormalizedAthenaAuthorizationServerResource>> {\n  if (value === undefined) {\n    return {};\n  }\n  const record = asRecord(value);\n  if (!record) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"auth.authorizationServer.resources must be a resource map\",\n      \"auth\",\n    );\n  }\n  const resources: Record<string, NormalizedAthenaAuthorizationServerResource> =\n    {};\n  for (const [resource, rawResource] of Object.entries(record)) {\n    let parsedResource: URL;\n    try {\n      parsedResource = new URL(resource);\n      if (\n        !parsedResource.protocol ||\n        parsedResource.username ||\n        parsedResource.password ||\n        parsedResource.hash\n      ) {\n        throw new Error(\"invalid resource\");\n      }\n    } catch {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        `auth.authorizationServer resource \"${resource}\" must be an absolute URI without credentials or fragment`,\n        \"auth\",\n      );\n    }\n    const resourceRecord = asRecord(rawResource);\n    const rawScopes = resourceRecord?.scopes;\n    const scopesRecord = asRecord(rawScopes);\n    if (!scopesRecord || Object.keys(scopesRecord).length === 0) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_RUNTIME_CONFIG_INVALID\",\n        `auth.authorizationServer resource \"${resource}\" requires scopes`,\n        \"auth\",\n      );\n    }\n    const scopes: Record<string, { description?: string }> = {};\n    for (const [scope, rawScope] of Object.entries(scopesRecord)) {\n      if (!/^[\\x21-\\x7e]+$/.test(scope) || scope.includes(\" \")) {\n        throw new AthenaConfigurationError(\n          \"ATHENA_RUNTIME_CONFIG_INVALID\",\n          `auth.authorizationServer scope \"${scope}\" is invalid`,\n          \"auth\",\n        );\n      }\n      const scopeRecord = asRecord(rawScope);\n      scopes[scope] = {\n        ...(typeof scopeRecord?.description === \"string\"\n          ? { description: scopeRecord.description }\n          : {}),\n      };\n    }\n    resources[parsedResource.toString().replace(/\\/$/, \"\")] = {\n      ...(typeof resourceRecord?.description === \"string\"\n        ? { description: resourceRecord.description }\n        : {}),\n      scopes: Object.freeze(scopes),\n    };\n  }\n  return Object.freeze(resources);\n}\n\nfunction normalizeAuthorizationServerConfig(\n  rawValue: unknown,\n  appIdentity: AthenaAppIdentity | null,\n): NormalizedAthenaAuthorizationServerConfig {\n  const raw = asRecord(rawValue);\n  if (!raw) {\n    return { ...DEFAULT_AUTHORIZATION_SERVER };\n  }\n  const enabled = raw.enabled === true;\n  const issuer = normalizeAuthorizationIssuer(raw.issuer, appIdentity, enabled);\n  return {\n    accessTokenTtlSeconds: normalizeBoundedAuthorizationTtl(\n      raw.accessTokenTtlSeconds,\n      DEFAULT_AUTHORIZATION_SERVER.accessTokenTtlSeconds,\n      AUTHORIZATION_TTL_LIMITS.accessToken,\n    ),\n    authorizationCodeTtlSeconds: normalizeBoundedAuthorizationTtl(\n      raw.authorizationCodeTtlSeconds,\n      DEFAULT_AUTHORIZATION_SERVER.authorizationCodeTtlSeconds,\n      AUTHORIZATION_TTL_LIMITS.authorizationCode,\n    ),\n    authorizationEndpoint: normalizeConfiguredAuthorizationUrl(\n      raw.authorizationEndpoint,\n      \"authorizationEndpoint\",\n    ),\n    authorizationRequestTtlSeconds: normalizeBoundedAuthorizationTtl(\n      raw.authorizationRequestTtlSeconds,\n      DEFAULT_AUTHORIZATION_SERVER.authorizationRequestTtlSeconds,\n      AUTHORIZATION_TTL_LIMITS.authorizationRequest,\n    ),\n    consentUrl: normalizeConfiguredAuthorizationUrl(\n      raw.consentUrl,\n      \"consentUrl\",\n    ),\n    enabled,\n    issuer,\n    issueRefreshTokens: raw.issueRefreshTokens !== false,\n    refreshTokenTtlSeconds: normalizeBoundedAuthorizationTtl(\n      raw.refreshTokenTtlSeconds,\n      DEFAULT_AUTHORIZATION_SERVER.refreshTokenTtlSeconds,\n      AUTHORIZATION_TTL_LIMITS.refreshToken,\n    ),\n    resources: normalizeAuthorizationResources(raw.resources),\n    signInUrl: normalizeConfiguredAuthorizationUrl(raw.signInUrl, \"signInUrl\"),\n  };\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 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(\n      asStringList(record.relatedOrigins),\n      [],\n      [],\n    ),\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;\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    authorizationServer: { ...DEFAULT_AUTHORIZATION_SERVER },\n    emailAndPassword: { ...DEFAULT_EMAIL_PASSWORD, enabled: false },\n    execution: \"disabled\",\n    observability: normalizeAthenaAuthObservability(),\n    organizationsEnabled: false,\n    passkey: { ...DEFAULT_PASSKEY, origins: [], relatedOrigins: [] },\n    passkeyConfigured: false,\n    security: {\n      bodyLimitBytes: 1_048_576,\n      cookieSecure: \"auto\",\n      trustedOrigins: [],\n      trustedProxy: false,\n    },\n    session: { ...DEFAULT_SESSION },\n    social: { providers: {} },\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 ||\n      raw.url !== undefined ||\n      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\n      | AthenaAuthEmailAndPasswordOptions\n      | 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  if (raw.oauth != null) {\n    warnings.push(\n      \"auth.oauth is deprecated; configure auth.social.providers instead.\",\n    );\n  }\n  const social: NormalizedSocialAuthConfig = normalizeAuthSocialProviders(raw);\n  const envForIdentity = options.env ?? process.env;\n  const appIdentity =\n    options.identity === undefined\n      ? resolveAthenaAppIdentity({\n        app: options.app,\n        env: envForIdentity,\n        required: false,\n      })\n      : options.identity;\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    authorizationServer: normalizeAuthorizationServerConfig(\n      raw.authorizationServer,\n      appIdentity,\n    ),\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    observability: normalizeAthenaAuthObservability(\n      asRecord(raw.observability) as AthenaAuthObservabilityConfig | undefined,\n    ),\n    organizationsEnabled: organizations?.enabled !== false,\n    passkey,\n    passkeyConfigured,\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    social,\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 type { AthenaChatConfig, AthenaChatMode } from \"./types.ts\";\n\nexport type { AthenaChatMode };\n/** Resolved constructor outcome. Disabled is `chat: false` / omitted, not a mode. */\nexport type AthenaChatExecutionMode = \"disabled\" | AthenaChatMode;\n\nexport function isAthenaChatConfig(value: unknown): value is AthenaChatConfig {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction chatUrlOf(\n  chat: boolean | AthenaChatConfig | undefined\n): string | undefined {\n  if (!isAthenaChatConfig(chat)) {\n    return;\n  }\n  const url = chat.url?.trim();\n  return url ? url : undefined;\n}\n\n/**\n * Resolve Chat runtime. Same structural pattern as Embedded Auth:\n * `chat: false` / omitted → disabled; `mode` is only `\"local\" | \"remote\"`.\n *\n * `chat: true` + `databaseUrl` + no `chat.url` → local.\n * Explicit `chat.mode` wins. Local + `chat.url` is a conflict.\n */\nexport function resolveChatMode(input: {\n  chat?: boolean | AthenaChatConfig;\n  clusterUrl?: string | null;\n  databaseUrl?: string | null;\n}): AthenaChatExecutionMode {\n  const chat = input.chat;\n  if (chat === undefined || chat === false) {\n    return \"disabled\";\n  }\n\n  const databaseUrl = input.databaseUrl?.trim() || undefined;\n  const url = chatUrlOf(chat);\n  const explicitMode = isAthenaChatConfig(chat) ? chat.mode : undefined;\n\n  if (\n    explicitMode !== undefined &&\n    explicitMode !== \"local\" &&\n    explicitMode !== \"remote\"\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_CHAT_MODE_INVALID\",\n      'chat.mode must be \"local\" or \"remote\". Pass chat: false to disable Chat.',\n      \"chat\"\n    );\n  }\n\n  if (explicitMode === \"local\") {\n    if (url) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_CHAT_LOCAL_REMOTE_CONFLICT\",\n        'chat.mode \"local\" cannot be combined with chat.url. Use remote Chat or omit the URL.',\n        \"chat\"\n      );\n    }\n    if (!databaseUrl) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n        'chat.mode \"local\" requires databaseUrl (DATABASE_URL).',\n        \"chat\"\n      );\n    }\n    return \"local\";\n  }\n\n  if (explicitMode === \"remote\") {\n    if (!url) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_CHAT_REMOTE_URL_REQUIRED\",\n        'chat.mode \"remote\" requires chat.url.',\n        \"chat\"\n      );\n    }\n    return \"remote\";\n  }\n\n  if (chat === true) {\n    if (databaseUrl) {\n      return \"local\";\n    }\n    throw new AthenaConfigurationError(\n      \"ATHENA_CHAT_LOCAL_DATABASE_REQUIRED\",\n      \"chat: true requires databaseUrl for local Chat, or pass chat.url for remote Chat.\",\n      \"chat\"\n    );\n  }\n\n  if (url) {\n    return \"remote\";\n  }\n\n  const clusterUrl = input.clusterUrl?.trim() || undefined;\n  if (clusterUrl) {\n    return \"remote\";\n  }\n\n  if (databaseUrl) {\n    return \"local\";\n  }\n\n  throw new AthenaConfigurationError(\n    \"ATHENA_CHAT_CONFIG_INCOMPLETE\",\n    \"Chat config needs chat.url (remote) or databaseUrl (local).\",\n    \"chat\"\n  );\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 { resolveChatMode } from \"../chat/config.ts\";\nimport type { AthenaChatConfig } from \"../chat/types.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\n\nfunction normalizeOptional(\n  value: string | null | undefined\n): 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  billing?: {\n    endpoint?: string | null;\n    mode?: string | null;\n    providers?: Record<string, unknown> | null;\n    url?: string | null;\n  };\n  chat?: boolean | AthenaChatConfig;\n  databaseUrl?: string | null;\n  db?: {\n    d1?: unknown;\n    pgUri?: string | null;\n    pool?: unknown;\n    sqlite?: unknown;\n    url?: string | null;\n  };\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\" | \"sqlite\";\nexport type AthenaAuthRuntime = \"embedded\" | \"remote\" | \"disabled\";\nexport type AthenaStorageTransport = \"http\" | \"r2\" | \"local\" | \"s3\" | \"none\";\nexport type AthenaChatTransport = \"local\" | \"remote\" | \"none\";\n\nexport interface ResolvedAthenaRuntime {\n  auth: { runtime: AthenaAuthRuntime };\n  chat: { transport: AthenaChatTransport };\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  chat: AthenaChatTransport;\n  database: \"postgres-direct\" | \"gateway\" | \"d1\" | \"sqlite-local\";\n  runtime: AthenaRuntimeEnvironment;\n  storage: AthenaStorageTransport;\n}\n\nexport function toAthenaRuntimeDiagnostics(\n  plan: ResolvedAthenaRuntime\n): AthenaRuntimeDiagnostics {\n  return {\n    auth: plan.auth.runtime,\n    chat: plan.chat.transport,\n    database:\n      plan.db.transport === \"postgres\"\n        ? \"postgres-direct\"\n        : plan.db.transport === \"sqlite\"\n          ? \"sqlite-local\"\n          : 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\" || key === \"http\" || key === \"remote\" || key === \"server\"\n  );\n}\n\nexport function detectAthenaRuntimeEnvironment(): AthenaRuntimeEnvironment {\n  const nav = (\n    globalThis as { navigator?: { product?: string; userAgent?: string } }\n  ).navigator;\n  if (nav?.product === \"ReactNative\") {\n    return \"react-native\";\n  }\n  if (\n    typeof nav?.userAgent === \"string\" &&\n    /Cloudflare-Workers/i.test(nav.userAgent)\n  ) {\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 input (`db.pgUri`,\n * `databaseUrl`, `env.DATABASE_URL`, or `db.pool`) + no auth.url means\n * embedded Auth. Explicit mode and auth.url always win. `auth: false` stays\n * 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) && !hasBinding(config.db?.pool)) {\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 = options.environment ?? detectAthenaRuntimeEnvironment();\n  const trustedNode = options.trustedNode ?? environment === \"node\";\n  const pgUri = resolveDatabaseUri(config);\n  const hasPool = hasBinding(config.db?.pool);\n  const chatMode = resolveChatMode({\n    chat: config.chat,\n    clusterUrl: config.url,\n    databaseUrl: pgUri,\n  });\n  const hasD1 = hasBinding(config.db?.d1);\n  const hasSqlite = hasBinding(config.db?.sqlite);\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 (hasSqlite && !gatewayForced) {\n    dbTransport = \"sqlite\";\n  } else if ((pgUri || hasPool) && 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 || hasPool) && 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    chat: {\n      transport: chatMode === \"disabled\" ? \"none\" : chatMode,\n    },\n    db: { transport: dbTransport },\n    runtime: { environment },\n    storage: { transport: storageTransport },\n  };\n}\n","import { sha256HexUtf8 } from \"../../node-crypto.ts\";\nimport {\n  ATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n  AthenaBillingCredentialError,\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  | \"api_key\"\n  | \"secret_key\"\n  | \"restricted_key\"\n  | \"advanced_access_token\"\n  | \"organization_access_token\"\n  | \"oauth_access_token\";\n\nconst REDACTED = \"[REDACTED]\";\n\nexport class BillingSecret {\n  readonly #value: string;\n\n  constructor(value: string) {\n    this.#value = value;\n  }\n\n  revealForProviderRuntime(): string {\n    return this.#value;\n  }\n\n  toJSON(): string {\n    return REDACTED;\n  }\n\n  toString(): string {\n    return REDACTED;\n  }\n\n  valueOf(): string {\n    return REDACTED;\n  }\n\n  [Symbol.for(\"nodejs.util.inspect.custom\")](): string {\n    return REDACTED;\n  }\n}\n\nexport interface BillingStoredCredential {\n  readonly kind: BillingCredentialKind;\n  readonly secret: BillingSecret;\n}\n\nexport interface BillingEnvironmentCredentials<TCredential> {\n  readonly live?: TCredential;\n  readonly test?: TCredential;\n}\n\nexport interface BillingProviderBindingCredentials {\n  readonly live?: BillingStoredCredential;\n  readonly test?: BillingStoredCredential;\n}\n\nexport interface BillingCredentialBinding {\n  readonly credentials: BillingProviderBindingCredentials;\n  readonly kind: \"configured\" | \"connection\";\n  readonly provider: BillingProviderName;\n}\n\nexport interface BillingResolvedCredential {\n  readonly environment: BillingCredentialEnvironment;\n  /** SHA-256 hex of the secret. Never the plaintext secret. */\n  readonly fingerprint: string;\n  readonly kind: BillingCredentialKind;\n  readonly provider: BillingProviderName;\n  /** Configured provider vs connection `credential_reference`. */\n  readonly slot: string;\n  revealForProviderRuntime(): string;\n}\n\nexport interface BillingCredentialSelection {\n  readonly credential: BillingResolvedCredential;\n  readonly credentialKind: BillingCredentialKind;\n  readonly environment: BillingCredentialEnvironment;\n  readonly provider: BillingProviderName;\n  readonly testMode: boolean;\n}\n\nexport type BillingCredentialEnvironmentInference = \"test\" | \"live\" | \"unknown\";\n\nexport function credentialClassForKind(\n  kind: BillingCredentialKind\n): BillingCredentialClass {\n  return kind === \"advanced_access_token\" ||\n    kind === \"organization_access_token\" ||\n    kind === \"oauth_access_token\"\n    ? \"access_token\"\n    : \"api_key\";\n}\n\nexport function availableBillingCredentialEnvironments(\n  credentials: BillingProviderBindingCredentials\n): BillingCredentialEnvironment[] {\n  const available: BillingCredentialEnvironment[] = [];\n  if (credentials.test != null) {\n    available.push(\"test\");\n  }\n  if (credentials.live != null) {\n    available.push(\"live\");\n  }\n  return available;\n}\n\nexport function billingCredentialFingerprint(secret: string): string {\n  return sha256HexUtf8(secret);\n}\n\nexport function billingCredentialSlot(input: {\n  credentialReference?: string;\n  kind: \"configured\" | \"connection\";\n}): string {\n  if (input.kind === \"configured\") {\n    return \"configured\";\n  }\n  const reference = input.credentialReference?.trim();\n  return reference != null && reference.length > 0\n    ? reference\n    : \"connection\";\n}\n\nexport function resolveBillingCredential(input: {\n  binding: BillingCredentialBinding;\n  provider: BillingProviderName;\n  slot?: string;\n  testMode: boolean;\n}): BillingCredentialSelection {\n  const environment = billingEnvironmentName(input.testMode);\n  const stored = input.binding.credentials[environment];\n  if (stored == null) {\n    const available = availableBillingCredentialEnvironments(\n      input.binding.credentials\n    );\n    throw new AthenaBillingCredentialError({\n      code: ATHENA_BILLING_CREDENTIAL_UNAVAILABLE,\n      environment,\n      message: `${formatProviderLabel(input.provider)} ${environment} billing credential is unavailable. Configured environments: ${available.length > 0 ? available.join(\", \") : \"none\"}.`,\n      provider: input.provider,\n    });\n  }\n  const secret = stored.secret.revealForProviderRuntime();\n  const slot =\n    input.slot != null && input.slot.trim() !== \"\"\n      ? input.slot.trim()\n      : billingCredentialSlot({ kind: input.binding.kind });\n  const credential: BillingResolvedCredential = {\n    environment,\n    fingerprint: billingCredentialFingerprint(secret),\n    kind: stored.kind,\n    provider: input.provider,\n    slot,\n    revealForProviderRuntime: () => stored.secret.revealForProviderRuntime(),\n  };\n  return {\n    credential,\n    credentialKind: stored.kind,\n    environment,\n    provider: input.provider,\n    testMode: input.testMode,\n  };\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n  if (provider.length === 0) {\n    return \"Billing\";\n  }\n  return provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import {\n  ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n  AthenaBillingCredentialError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type {\n  BillingCredentialEnvironment,\n  BillingCredentialEnvironmentInference,\n} from \"../../credentials.ts\";\n\nexport function assertCredentialSlotEnvironment(input: {\n  provider: BillingProviderName;\n  environment: BillingCredentialEnvironment;\n  inferred: BillingCredentialEnvironmentInference;\n}): void {\n  if (input.inferred === \"unknown\" || input.inferred === input.environment) {\n    return;\n  }\n  throw new AthenaBillingCredentialError({\n    code: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n    environment: input.environment,\n    message: `${formatProviderLabel(input.provider)} ${input.environment} billing credential does not match the ${input.inferred} environment encoded in the secret.`,\n    provider: input.provider,\n  });\n}\n\nexport type MollieCredentialPrefixClass =\n  | \"api_key\"\n  | \"access_token\"\n  | \"unknown\";\n\nexport function classifyMollieCredentialPrefix(\n  secret: string\n): MollieCredentialPrefixClass {\n  if (secret.startsWith(\"test_\") || secret.startsWith(\"live_\")) {\n    return \"api_key\";\n  }\n  if (secret.startsWith(\"access_\")) {\n    return \"access_token\";\n  }\n  return \"unknown\";\n}\n\nexport function inferMollieCredentialEnvironment(\n  secret: string\n): BillingCredentialEnvironmentInference {\n  if (secret.startsWith(\"test_\")) {\n    return \"test\";\n  }\n  if (secret.startsWith(\"live_\")) {\n    return \"live\";\n  }\n  return \"unknown\";\n}\n\nexport function inferStripeCredentialEnvironment(\n  secret: string\n): BillingCredentialEnvironmentInference {\n  if (\n    secret.includes(\"_test_\") ||\n    secret.startsWith(\"sk_test\") ||\n    secret.startsWith(\"rk_test\") ||\n    secret.startsWith(\"pk_test\")\n  ) {\n    return \"test\";\n  }\n  if (\n    secret.includes(\"_live_\") ||\n    secret.startsWith(\"sk_live\") ||\n    secret.startsWith(\"rk_live\") ||\n    secret.startsWith(\"pk_live\")\n  ) {\n    return \"live\";\n  }\n  return \"unknown\";\n}\n\nfunction formatProviderLabel(provider: BillingProviderName): string {\n  if (provider.length === 0) {\n    return \"Billing\";\n  }\n  return provider.charAt(0).toUpperCase() + provider.slice(1);\n}\n","import {\n  ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n  AthenaBillingProviderError,\n} from \"../../../../errors.ts\";\nimport type {\n  NormalizedStripeBillingProviderConfig,\n  StripeBillingCredentialKind,\n  StripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport {\n  type BillingProviderBindingCredentials,\n  BillingSecret,\n  type BillingStoredCredential,\n} from \"../../../credentials.ts\";\nimport {\n  assertCredentialSlotEnvironment,\n  inferStripeCredentialEnvironment,\n} from \"../inspect.ts\";\n\nconst DEFAULT_STRIPE_API_BASE_URL = \"https://api.stripe.com\";\n\nfunction nonEmpty(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 storeStripeCredential(\n  secret: string,\n  environment: \"test\" | \"live\",\n  kind: StripeBillingCredentialKind\n): BillingStoredCredential {\n  assertCredentialSlotEnvironment({\n    environment,\n    inferred: inferStripeCredentialEnvironment(secret),\n    provider: \"stripe\",\n  });\n  return {\n    kind,\n    secret: new BillingSecret(secret),\n  };\n}\n\nexport function normalizeStripeBillingProviderConfig(\n  config: StripeBillingProviderConfig\n): NormalizedStripeBillingProviderConfig {\n  const credentialKind: StripeBillingCredentialKind =\n    config.credentialKind ?? \"secret_key\";\n  const testSecret =\n    credentialKind === \"oauth_access_token\"\n      ? nonEmpty(\"testToken\" in config ? config.testToken : undefined)\n      : nonEmpty(\"testKey\" in config ? config.testKey : undefined);\n  const liveSecret =\n    credentialKind === \"oauth_access_token\"\n      ? nonEmpty(\"liveToken\" in config ? config.liveToken : undefined)\n      : nonEmpty(\"liveKey\" in config ? config.liveKey : undefined);\n  const credentials: BillingProviderBindingCredentials = {\n    ...(testSecret\n      ? { test: storeStripeCredential(testSecret, \"test\", credentialKind) }\n      : {}),\n    ...(liveSecret\n      ? { live: storeStripeCredential(liveSecret, \"live\", credentialKind) }\n      : {}),\n  };\n  if (credentials.test == null && credentials.live == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: \"billing.providers.stripe requires a test or live credential.\",\n    });\n  }\n  const accountId = nonEmpty(\n    \"accountId\" in config ? config.accountId : undefined\n  );\n  return {\n    accountId: accountId ?? null,\n    apiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_STRIPE_API_BASE_URL,\n    credentialKind,\n    credentials,\n    provider: \"stripe\",\n  };\n}\n\nfunction isNormalizedStripeConfig(\n  config: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig\n): config is NormalizedStripeBillingProviderConfig {\n  return \"provider\" in config && config.provider === \"stripe\";\n}\n\nexport function normalizeStripeRuntimeConfig(\n  config: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig\n): NormalizedStripeBillingProviderConfig {\n  if (isNormalizedStripeConfig(config)) {\n    return config;\n  }\n  return normalizeStripeBillingProviderConfig(config);\n}\n","import type { MollieBillingApiMode } from \"../../../providers/types.ts\";\nimport type { BillingCredentialAuthority } from \"../../authority.ts\";\n\nexport const STANDARD_MOLLIE_API_KEY_PERMISSIONS = {\n  \"customers.read\": true,\n  \"customers.write\": true,\n  \"mandates.read\": true,\n  \"mandates.write\": true,\n  \"orders.read\": true,\n  \"orders.write\": true,\n  \"payment-links.read\": true,\n  \"payment-links.write\": true,\n  \"payments.read\": true,\n  \"payments.write\": true,\n  \"refunds.read\": true,\n  \"refunds.write\": true,\n  \"sales-invoices.read\": true,\n  \"shipments.read\": true,\n  \"shipments.write\": true,\n  \"subscriptions.read\": true,\n  \"subscriptions.write\": true,\n} as const;\n\nexport type MollieDeclaredPermissionInput = Record<\n  string,\n  boolean | Record<string, boolean | undefined>\n>;\n\nexport function normalizeMollieDeclaredPermissions(\n  input: MollieDeclaredPermissionInput | undefined\n): Record<string, boolean> {\n  if (input == null) {\n    return {};\n  }\n  const permissions: Record<string, boolean> = {};\n  for (const [key, value] of Object.entries(input)) {\n    if (typeof value === \"boolean\") {\n      permissions[key] = value;\n      continue;\n    }\n    if (value == null || typeof value !== \"object\") {\n      continue;\n    }\n    for (const [action, allowed] of Object.entries(value)) {\n      if (typeof allowed !== \"boolean\") {\n        continue;\n      }\n      permissions[`${key}.${action}`] = allowed;\n    }\n  }\n  return permissions;\n}\n\nexport function resolveMollieApiKeyAuthority(input: {\n  profileId?: string | null;\n  modes: { test: boolean; live: boolean };\n}): BillingCredentialAuthority {\n  return {\n    modes: input.modes,\n    permissions: { ...STANDARD_MOLLIE_API_KEY_PERMISSIONS },\n    scope: {\n      kind: \"profile\",\n      ...(input.profileId != null && input.profileId.length > 0\n        ? { profileId: input.profileId }\n        : {}),\n    },\n    source: \"derived\",\n  };\n}\n\nexport function resolveMollieAdvancedTokenAuthority(input: {\n  apiMode: MollieBillingApiMode;\n  declaredPermissions?: MollieDeclaredPermissionInput;\n  scope: { kind: \"organization\" } | { kind: \"profile\"; profileId?: string };\n}): BillingCredentialAuthority {\n  return {\n    modes: modesForApiMode(input.apiMode),\n    permissions: normalizeMollieDeclaredPermissions(input.declaredPermissions),\n    scope: input.scope,\n    source: \"declared\",\n  };\n}\n\nexport function resolveMollieCompatibleTokenAuthority(input: {\n  modes: { test: boolean; live: boolean };\n  declaredPermissions?: MollieDeclaredPermissionInput;\n  profileId?: string | null;\n}): BillingCredentialAuthority {\n  const declared = normalizeMollieDeclaredPermissions(\n    input.declaredPermissions\n  );\n  return {\n    modes: input.modes,\n    permissions: declared,\n    scope: {\n      kind: \"profile\",\n      ...(input.profileId != null && input.profileId.length > 0\n        ? { profileId: input.profileId }\n        : {}),\n    },\n    source: \"declared\",\n  };\n}\n\nexport function modesForApiMode(apiMode: MollieBillingApiMode): {\n  test: boolean;\n  live: boolean;\n} {\n  if (apiMode === \"both\") {\n    return { live: true, test: true };\n  }\n  if (apiMode === \"live\") {\n    return { live: true, test: false };\n  }\n  return { live: false, test: true };\n}\n","import {\n  type AthenaRuntimeEnvironment,\n  detectAthenaRuntimeEnvironment,\n} from \"../../../../runtime/resolve.ts\";\nimport {\n  ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n  ATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n  ATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n  BillingProviderConfigMap,\n  BillingProviderDiagnostics,\n  MollieBillingApiMode,\n  MollieBillingCredentialKind,\n  MollieBillingProviderConfig,\n  MollieSdkAdapterFactory,\n  MollieSdkConstructor,\n  NormalizedBillingProviderConfigs,\n  NormalizedMollieBillingProviderConfig,\n  StripeBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { BillingCredentialAuthority } from \"../../authority.ts\";\nimport {\n  availableBillingCredentialEnvironments,\n  type BillingProviderBindingCredentials,\n  BillingSecret,\n  type BillingStoredCredential,\n} from \"../../credentials.ts\";\nimport {\n  assertCredentialSlotEnvironment,\n  classifyMollieCredentialPrefix,\n  inferMollieCredentialEnvironment,\n} from \"./inspect.ts\";\nimport { normalizeStripeBillingProviderConfig } from \"./stripe/config.ts\";\nimport {\n  resolveMollieAdvancedTokenAuthority,\n  resolveMollieApiKeyAuthority,\n  resolveMollieCompatibleTokenAuthority,\n} from \"./token-authority.ts\";\n\nconst DEFAULT_MOLLIE_API_BASE_URL = \"https://api.mollie.com\";\n\nfunction configuredProviderNames(\n  configured: BillingProviderConfigMap | undefined\n): string[] {\n  if (configured == null) {\n    return [];\n  }\n\n  return Object.keys(configured).filter((name) => configured[name] != null);\n}\n\nfunction canonicalProviderDefault(\n  configured: BillingProviderConfigMap | undefined,\n  provider: \"mollie\" | \"stripe\"\n): unknown {\n  const value = configured?.[provider];\n  if (\n    value != null &&\n    typeof value === \"object\" &&\n    !Array.isArray(value) &&\n    \"default\" in value\n  ) {\n    return (value as { default?: unknown }).default;\n  }\n  return value;\n}\n\nexport function assertBillingProviderRuntimeEnvironment(\n  configured?: BillingProviderConfigMap,\n  options?: { environment?: AthenaRuntimeEnvironment }\n): void {\n  if (configuredProviderNames(configured).length === 0) {\n    return;\n  }\n  const environment = options?.environment ?? detectAthenaRuntimeEnvironment();\n  if (environment === \"browser\" || environment === \"react-native\") {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_SERVER_REQUIRED,\n      message:\n        \"billing.providers requires a trusted server runtime and cannot be configured in the browser or React Native.\",\n    });\n  }\n}\n\nfunction nonEmpty(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 defaultProfileIdFrom(config: {\n  defaultProfileId?: string | null;\n  profileId?: string | null;\n}): string | undefined {\n  return nonEmpty(config.defaultProfileId) ?? nonEmpty(config.profileId);\n}\n\nfunction storeMollieCredential(\n  secret: string,\n  environment: \"test\" | \"live\",\n  kind: MollieBillingCredentialKind\n): BillingStoredCredential {\n  assertCredentialSlotEnvironment({\n    environment,\n    inferred: inferMollieCredentialEnvironment(secret),\n    provider: \"mollie\",\n  });\n  return {\n    kind,\n    secret: new BillingSecret(secret),\n  };\n}\n\nfunction assertMollieSecretKind(\n  secret: string,\n  kind: MollieBillingCredentialKind\n): void {\n  const prefix = classifyMollieCredentialPrefix(secret);\n  if (kind === \"api_key\" && prefix === \"access_token\") {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message:\n        \"billing.providers.mollie API keys cannot use an Advanced Access Token secret.\",\n    });\n  }\n  if (kind === \"advanced_access_token\" && prefix !== \"access_token\") {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message:\n        prefix === \"api_key\"\n          ? \"billing.providers.mollie advanced_access_token cannot use a test_ or live_ API key.\"\n          : \"billing.providers.mollie advanced_access_token requires an access_ token prefix.\",\n    });\n  }\n}\n\nfunction pairCredentials(\n  testSecret: string | undefined,\n  liveSecret: string | undefined,\n  kind: MollieBillingCredentialKind\n): BillingProviderBindingCredentials {\n  if (testSecret) {\n    assertMollieSecretKind(testSecret, kind);\n  }\n  if (liveSecret) {\n    assertMollieSecretKind(liveSecret, kind);\n  }\n  const credentials: BillingProviderBindingCredentials = {\n    ...(testSecret\n      ? { test: storeMollieCredential(testSecret, \"test\", kind) }\n      : {}),\n    ...(liveSecret\n      ? { live: storeMollieCredential(liveSecret, \"live\", kind) }\n      : {}),\n  };\n  if (credentials.test == null && credentials.live == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: \"billing.providers.mollie requires a test or live credential.\",\n    });\n  }\n  return credentials;\n}\n\nfunction modesFromCredentials(credentials: BillingProviderBindingCredentials): {\n  test: boolean;\n  live: boolean;\n} {\n  return {\n    live: credentials.live != null,\n    test: credentials.test != null,\n  };\n}\n\nfunction adapterBackedSdk(\n  adapter: MollieSdkAdapterFactory\n): MollieSdkConstructor {\n  return adapter as unknown as MollieSdkConstructor;\n}\n\nfunction requireMollieSdkBinding(config: MollieBillingProviderConfig): {\n  adapter?: MollieSdkAdapterFactory;\n  sdk: MollieSdkConstructor;\n} {\n  if (config.adapter != null) {\n    return {\n      adapter: config.adapter,\n      sdk: config.sdk ?? adapterBackedSdk(config.adapter),\n    };\n  }\n  if (config.sdk == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_SDK_REQUIRED,\n      message:\n        \"billing.providers.mollie.sdk or adapter is required. Inject the official mollie-api-typescript Client constructor.\",\n    });\n  }\n  return { sdk: config.sdk };\n}\n\nfunction declaredPermissionsFrom(config: {\n  authority?: { permissions?: Record<string, unknown> };\n  permissions?: Record<string, unknown>;\n}): Record<string, boolean | Record<string, boolean | undefined>> | undefined {\n  return (\n    (config.permissions as\n      | Record<string, boolean | Record<string, boolean | undefined>>\n      | undefined) ??\n    (config.authority?.permissions as\n      | Record<string, boolean | Record<string, boolean | undefined>>\n      | undefined)\n  );\n}\n\nfunction normalizeAdvancedMollieConfig(\n  config: Extract<MollieBillingProviderConfig, { accessToken: string }>\n): NormalizedMollieBillingProviderConfig {\n  const accessToken = nonEmpty(config.accessToken);\n  if (accessToken == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message:\n        \"billing.providers.mollie.accessToken is required for advanced_access_token.\",\n    });\n  }\n  assertMollieSecretKind(accessToken, \"advanced_access_token\");\n  const apiMode: MollieBillingApiMode = config.apiMode ?? \"test\";\n  const credentials = pairCredentials(\n    apiMode === \"live\" ? undefined : accessToken,\n    apiMode === \"test\" ? undefined : accessToken,\n    \"advanced_access_token\"\n  );\n  const inferredProfileId = nonEmpty(config.profileId);\n  const configuredScopeProfileId =\n    config.scope?.kind === \"profile\"\n      ? nonEmpty(config.scope.profileId)\n      : undefined;\n  if (config.scope?.kind === \"profile\" && configuredScopeProfileId == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message:\n        \"billing.providers.mollie.scope.profileId is required when scope.kind is profile.\",\n    });\n  }\n  const scope =\n    config.scope == null\n      ? inferredProfileId === null\n        ? { kind: \"organization\" as const }\n        : { kind: \"profile\" as const, profileId: inferredProfileId }\n      : config.scope.kind === \"profile\" && configuredScopeProfileId != null\n        ? { kind: \"profile\" as const, profileId: configuredScopeProfileId }\n        : config.scope;\n  const profileId =\n    scope.kind === \"profile\" ? scope.profileId : defaultProfileIdFrom(config);\n  const authority: BillingCredentialAuthority =\n    resolveMollieAdvancedTokenAuthority({\n      apiMode,\n      declaredPermissions: declaredPermissionsFrom(config),\n      scope,\n    });\n  const defaultProfileId = defaultProfileIdFrom(config);\n  return {\n    apiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n    authority,\n    credentialKind: \"advanced_access_token\",\n    credentials,\n    defaultProfileId: defaultProfileId ?? null,\n    profileId: profileId ?? defaultProfileId ?? null,\n    provider: \"mollie\",\n    ...requireMollieSdkBinding(config),\n  };\n}\n\nexport function normalizeMollieBillingProviderConfig(\n  config: MollieBillingProviderConfig\n): NormalizedMollieBillingProviderConfig {\n  const credentialKind: MollieBillingCredentialKind =\n    config.credentialKind ??\n    (\"accessToken\" in config && nonEmpty(config.accessToken) != null\n      ? \"advanced_access_token\"\n      : \"api_key\");\n  if (credentialKind === \"advanced_access_token\") {\n    if (!(\"accessToken\" in config)) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n        message:\n          \"billing.providers.mollie advanced_access_token configuration is invalid.\",\n      });\n    }\n    return normalizeAdvancedMollieConfig(config);\n  }\n  const testSecret =\n    credentialKind === \"api_key\"\n      ? nonEmpty(\"testKey\" in config ? config.testKey : undefined)\n      : nonEmpty(\"testToken\" in config ? config.testToken : undefined);\n  const liveSecret =\n    credentialKind === \"api_key\"\n      ? nonEmpty(\"liveKey\" in config ? config.liveKey : undefined)\n      : nonEmpty(\"liveToken\" in config ? config.liveToken : undefined);\n  const credentials = pairCredentials(testSecret, liveSecret, credentialKind);\n  const profileId =\n    credentialKind === \"api_key\"\n      ? nonEmpty(\"profileId\" in config ? config.profileId : undefined)\n      : defaultProfileIdFrom({\n          defaultProfileId:\n            \"defaultProfileId\" in config ? config.defaultProfileId : undefined,\n          profileId: \"profileId\" in config ? config.profileId : undefined,\n        });\n  if (\n    (credentialKind === \"organization_access_token\" ||\n      credentialKind === \"oauth_access_token\") &&\n    profileId == null\n  ) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message:\n        \"billing.providers.mollie.defaultProfileId or profileId is required for organization_access_token and oauth_access_token.\",\n    });\n  }\n  const declaredPermissions =\n    \"permissions\" in config || \"authority\" in config\n      ? declaredPermissionsFrom(config)\n      : undefined;\n  const authority =\n    credentialKind === \"api_key\"\n      ? resolveMollieApiKeyAuthority({\n          modes: modesFromCredentials(credentials),\n          profileId,\n        })\n      : resolveMollieCompatibleTokenAuthority({\n          declaredPermissions,\n          modes: modesFromCredentials(credentials),\n          profileId,\n        });\n  return {\n    apiBaseUrl: nonEmpty(config.apiBaseUrl) ?? DEFAULT_MOLLIE_API_BASE_URL,\n    authority,\n    credentialKind,\n    credentials,\n    defaultProfileId: profileId ?? null,\n    profileId: profileId ?? null,\n    provider: \"mollie\",\n    ...requireMollieSdkBinding(config),\n  };\n}\n\nexport function normalizeBillingProviderConfig(\n  configured?: BillingProviderConfigMap\n): NormalizedBillingProviderConfigs {\n  assertBillingProviderRuntimeEnvironment(configured);\n  const next: NormalizedBillingProviderConfigs = {};\n  const mollie = canonicalProviderDefault(configured, \"mollie\");\n  if (mollie != null) {\n    next.mollie = normalizeMollieBillingProviderConfig(\n      mollie as MollieBillingProviderConfig\n    );\n  }\n  const stripe = canonicalProviderDefault(configured, \"stripe\");\n  if (stripe != null) {\n    next.stripe = normalizeStripeBillingProviderConfig(\n      stripe as StripeBillingProviderConfig\n    );\n  }\n  return next;\n}\n\nexport function toBillingProviderDiagnostics(\n  normalized: NormalizedBillingProviderConfigs\n): BillingProviderDiagnostics {\n  if (normalized.mollie != null) {\n    return {\n      availableEnvironments: availableBillingCredentialEnvironments(\n        normalized.mollie.credentials\n      ),\n      configured: true,\n      credentialKind: normalized.mollie.credentialKind,\n      profileId: normalized.mollie.profileId ?? undefined,\n      provider: \"mollie\",\n    };\n  }\n  if (normalized.stripe != null) {\n    return {\n      availableEnvironments: availableBillingCredentialEnvironments(\n        normalized.stripe.credentials\n      ),\n      configured: true,\n      credentialKind: normalized.stripe.credentialKind,\n      provider: \"stripe\",\n    };\n  }\n  return { configured: false };\n}\n","import {\n  ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n  AthenaBillingProviderError,\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  provider: BillingProviderName;\n  configuredProviders?: BillingProviderConfigMap;\n}): ConfiguredBillingProviderBinding {\n  const normalized = normalizeBillingProviderConfig(input.configuredProviders);\n  if (input.provider === \"mollie\" && normalized.mollie != null) {\n    return {\n      credentials: normalized.mollie.credentials,\n      kind: \"configured\",\n      provider: \"mollie\",\n      providerConfig: {\n        apiBaseUrl: normalized.mollie.apiBaseUrl,\n        authority: normalized.mollie.authority,\n        credentialKind: normalized.mollie.credentialKind,\n        profileId: normalized.mollie.profileId ?? null,\n      },\n    };\n  }\n  if (input.provider === \"stripe\" && normalized.stripe != null) {\n    return {\n      credentials: normalized.stripe.credentials,\n      kind: \"configured\",\n      provider: \"stripe\",\n      providerConfig: {\n        accountId: normalized.stripe.accountId ?? null,\n        apiBaseUrl: normalized.stripe.apiBaseUrl,\n        credentialKind: normalized.stripe.credentialKind,\n      },\n    };\n  }\n  throw new AthenaBillingProviderError({\n    code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n    message: `Billing provider \"${input.provider}\" is not configured.`,\n  });\n}\n","import type { BillingProviderName } from \"../../../../types.ts\";\nimport type { BillingConfiguredProviderSlot } from \"./ir.ts\";\n\nexport function credentialReferenceForConfiguredSlot(input: {\n  environment: \"test\" | \"live\";\n  provider: BillingProviderName;\n  slotKey: string | null;\n}): string {\n  if (input.slotKey == null) {\n    return input.environment === \"live\"\n      ? `providers.${input.provider}-live`\n      : `providers.${input.provider}`;\n  }\n  return `providers.${input.provider}:${input.slotKey}`;\n}\n\nexport function slotName(slot: BillingConfiguredProviderSlot): string {\n  return slot.slotKey ?? \"default\";\n}\n","import {\n  ATHENA_BILLING_CONFIG_CONFLICT,\n  AthenaBillingProviderError,\n} from \"../../../../errors.ts\";\nimport type { BillingConfiguredProviders } from \"./ir.ts\";\n\nexport function validateBillingConfiguredProviders(\n  configured: BillingConfiguredProviders\n): BillingConfiguredProviders {\n  for (const provider of configured.providers.values()) {\n    const seen = new Set<string>();\n    const slots = [\n      ...(provider.defaultSlot == null ? [] : [provider.defaultSlot]),\n      ...provider.slots.values(),\n    ];\n    for (const slot of slots) {\n      const key = slot.slotKey ?? \"default\";\n      if (seen.has(key)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_CONFIG_CONFLICT,\n          message: `Billing provider slot \"${provider.provider}:${key}\" is declared more than once.`,\n        });\n      }\n      seen.add(key);\n    }\n  }\n  return configured;\n}\n","import type {\n  BillingProviderConfigMap,\n  MollieBillingProviderConfig,\n  StripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport {\n  ATHENA_BILLING_PROVIDER_SLOT_CONFLICT,\n  AthenaBillingProviderError,\n} from \"../../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../../types.ts\";\nimport {\n  credentialReferenceForConfiguredSlot,\n} from \"./slots.ts\";\nimport type {\n  BillingConfiguredProvider,\n  BillingConfiguredProviderSlot,\n  BillingConfiguredProviders,\n} from \"./ir.ts\";\nimport { validateBillingConfiguredProviders } from \"./validate.ts\";\n\ntype RecordValue = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is RecordValue {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction credentialKind(provider: BillingProviderName, config: unknown): string {\n  if (isRecord(config) && typeof config.credentialKind === \"string\") {\n    return config.credentialKind;\n  }\n  if (\n    provider === \"mollie\" &&\n    isRecord(config) &&\n    typeof config.accessToken === \"string\"\n  ) {\n    return \"advanced_access_token\";\n  }\n  return provider === \"stripe\" ? \"secret_key\" : \"api_key\";\n}\n\nfunction slot(\n  provider: BillingProviderName,\n  slotKey: string | null,\n  config: unknown,\n  environment: \"test\" | \"live\"\n): BillingConfiguredProviderSlot {\n  return {\n    credentialKind: credentialKind(provider, config),\n    credentialReference: credentialReferenceForConfiguredSlot({\n      environment,\n      provider,\n      slotKey,\n    }),\n    provider,\n    rawConfig: config,\n    slotKey,\n  };\n}\n\nfunction providerEntry(\n  provider: BillingProviderName,\n  value: unknown,\n  sidecar: unknown,\n  environment: \"test\" | \"live\"\n): BillingConfiguredProvider | undefined {\n  const canonical = isRecord(value) ? value : undefined;\n  const isCanonical =\n    canonical != null &&\n    (Object.hasOwn(canonical, \"default\") || Object.hasOwn(canonical, \"accounts\"));\n  const canonicalDefault =\n    isCanonical\n      ? canonical.default\n      : value;\n  const canonicalAccounts =\n    canonical && isRecord(canonical.accounts) ? canonical.accounts : undefined;\n  const sidecarAccounts = isRecord(sidecar) ? sidecar : undefined;\n  const defaultSlot =\n    canonicalDefault == null\n      ? undefined\n      : slot(provider, null, canonicalDefault, environment);\n  const slots = new Map<string, BillingConfiguredProviderSlot>();\n  if (canonicalAccounts) {\n    for (const [key, config] of Object.entries(canonicalAccounts)) {\n      const trimmed = key.trim();\n      if (trimmed.length > 0 && config != null) {\n        if (slots.has(trimmed)) {\n          throw new AthenaBillingProviderError({\n            code: ATHENA_BILLING_PROVIDER_SLOT_CONFLICT,\n            message: `Billing provider slot \"${provider}:${trimmed}\" is declared more than once.`,\n          });\n        }\n        slots.set(trimmed, slot(provider, trimmed, config, environment));\n      }\n    }\n  }\n  if (sidecarAccounts) {\n    for (const [key, config] of Object.entries(sidecarAccounts)) {\n      const trimmed = key.trim();\n      if (trimmed.length === 0 || config == null) {\n        continue;\n      }\n      if (slots.has(trimmed)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_SLOT_CONFLICT,\n          message: `Billing provider slot \"${provider}:${trimmed}\" is declared in both canonical and legacy configuration.`,\n        });\n      }\n      slots.set(trimmed, slot(provider, trimmed, config, environment));\n    }\n  }\n  if (defaultSlot == null && slots.size === 0) {\n    return undefined;\n  }\n  return {\n    ...(defaultSlot == null ? {} : { defaultSlot }),\n    provider,\n    slots,\n  };\n}\n\nexport function normalizeBillingProviderConfiguration(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  environment: \"test\" | \"live\";\n}): BillingConfiguredProviders {\n  const raw = input.configuredProviders as RecordValue | undefined;\n  const providers = new Map<BillingProviderName, BillingConfiguredProvider>();\n  if (raw == null) {\n    return { providers };\n  }\n\n  const providerNames = new Set<string>();\n  for (const key of Object.keys(raw)) {\n    if (key.endsWith(\"Accounts\")) {\n      providerNames.add(key.slice(0, -\"Accounts\".length));\n      continue;\n    }\n    providerNames.add(key);\n  }\n  for (const name of providerNames) {\n    const value = raw[name];\n    const sidecar = raw[`${name}Accounts`];\n    const entry = providerEntry(name, value, sidecar, input.environment);\n    if (entry) {\n      providers.set(name, entry);\n    }\n  }\n  return validateBillingConfiguredProviders({ providers });\n}\n\nexport function configuredProviderSlot(\n  configured: BillingConfiguredProviders,\n  provider: BillingProviderName,\n  slotKey: string | null\n): BillingConfiguredProviderSlot | undefined {\n  const entry = configured.providers.get(provider);\n  if (entry == null) {\n    return;\n  }\n  return slotKey == null ? entry.defaultSlot : entry.slots.get(slotKey);\n}\n\nexport function rawMollieConfig(\n  slot: BillingConfiguredProviderSlot\n): MollieBillingProviderConfig {\n  return slot.rawConfig as MollieBillingProviderConfig;\n}\n\nexport function rawStripeConfig(\n  slot: BillingConfiguredProviderSlot\n): StripeBillingProviderConfig {\n  return slot.rawConfig as StripeBillingProviderConfig;\n}\n\nexport function configuredProviderNames(\n  configured: BillingConfiguredProviders\n): readonly BillingProviderName[] {\n  return [...configured.providers.keys()];\n}\n\nexport function configuredProviderSlotEntries(\n  configured: BillingConfiguredProviders\n): readonly BillingConfiguredProviderSlot[] {\n  return [...configured.providers.values()].flatMap((provider) => [\n    ...(provider.defaultSlot == null ? [] : [provider.defaultSlot]),\n    ...provider.slots.values(),\n  ]);\n}\n","export type {\n  BillingConfiguredProvider,\n  BillingConfiguredProviderSlot,\n  BillingConfiguredProviders,\n} from \"./ir.ts\";\nexport {\n  configuredProviderNames,\n  configuredProviderSlot,\n  configuredProviderSlotEntries,\n  normalizeBillingProviderConfiguration,\n  rawMollieConfig,\n  rawStripeConfig,\n} from \"./normalize.ts\";\nexport { credentialReferenceForConfiguredSlot, slotName } from \"./slots.ts\";\nexport { validateBillingConfiguredProviders } from \"./validate.ts\";\n","import {\n  type BillingResolvedCredential,\n  billingCredentialSlot,\n  resolveBillingCredential,\n} from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport type {\n  BillingProviderBinding,\n  BillingProviderExecutionContext,\n} from \"./types.ts\";\n\nexport function createBillingProviderExecutionContext(input: {\n  binding: BillingProviderBinding;\n  idempotencyKey?: string;\n  ingress?: {\n    classicWebhookUrl?: string;\n    classicWebhookUrlsByConnectionId?: Readonly<Record<string, string>>;\n  };\n  operationScope?: \"organization\" | \"profile\" | \"automatic\";\n  signal?: AbortSignal;\n  target?: { profileId?: string };\n  testMode?: boolean;\n}): BillingProviderExecutionContext {\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  });\n  const resolved = resolveBillingCredential({\n    binding: input.binding,\n    provider: input.binding.provider,\n    slot: billingCredentialSlot(\n      input.binding.kind === \"connection\"\n        ? {\n            credentialReference: input.binding.credentialReference,\n            kind: \"connection\",\n          }\n        : { kind: \"configured\" }\n    ),\n    testMode: environment.testMode,\n  });\n  const credential: BillingResolvedCredential = resolved.credential;\n  const connectionId =\n    \"connectionId\" in input.binding ? input.binding.connectionId : undefined;\n  const connectionWebhookUrl =\n    connectionId == null\n      ? undefined\n      : input.ingress?.classicWebhookUrlsByConnectionId?.[connectionId];\n  const ingress =\n    input.ingress != null && connectionWebhookUrl != null\n      ? { ...input.ingress, classicWebhookUrl: connectionWebhookUrl }\n      : input.ingress;\n  return {\n    binding: input.binding,\n    credential,\n    environment,\n    provider: input.binding.provider,\n    ...(input.operationScope === null\n      ? {}\n      : { operationScope: input.operationScope }),\n    idempotencyKey: input.idempotencyKey,\n    signal: input.signal,\n    target: {\n      profileId: input.target?.profileId,\n    },\n    ...(ingress ? { ingress } : {}),\n  };\n}\n","import {\n  ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type { BillingProviderRuntime } from \"./types.ts\";\n\nexport function normalizeBillingProviderName(\n  provider: string\n): BillingProviderName {\n  return provider.trim().toLowerCase() as BillingProviderName;\n}\n\nexport class BillingProviderRegistry {\n  ingress?: {\n    classicWebhookUrl?: string;\n    classicWebhookUrlsByConnectionId?: Readonly<Record<string, string>>;\n  };\n  private readonly runtimes = new Map<string, BillingProviderRuntime>();\n\n  constructor(\n    runtimes: readonly BillingProviderRuntime[] = [],\n    options?: {\n      ingress?: {\n        classicWebhookUrl?: string;\n        classicWebhookUrlsByConnectionId?: Readonly<Record<string, string>>;\n      };\n    }\n  ) {\n    this.ingress = options?.ingress;\n    for (const runtime of runtimes) {\n      this.register(runtime);\n    }\n  }\n\n  register(runtime: BillingProviderRuntime): void {\n    const name = normalizeBillingProviderName(runtime.provider);\n    if (this.runtimes.has(name)) {\n      throw new Error(`Billing provider \"${name}\" is already registered.`);\n    }\n    this.runtimes.set(name, runtime);\n  }\n\n  has(provider: string): boolean {\n    return this.runtimes.has(normalizeBillingProviderName(provider));\n  }\n\n  get(provider: string): BillingProviderRuntime | undefined {\n    return this.runtimes.get(normalizeBillingProviderName(provider));\n  }\n\n  require(provider: string): BillingProviderRuntime {\n    const runtime = this.get(provider);\n    if (runtime == null) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n        message: `Billing provider \"${normalizeBillingProviderName(provider)}\" is not registered.`,\n      });\n    }\n    return runtime;\n  }\n\n  list(): readonly BillingProviderRuntime[] {\n    return Object.freeze([...this.runtimes.values()]);\n  }\n}\n","import {\n  ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type {\n  BillingProviderConfigMap,\n  MollieBillingProviderConfig,\n} from \"../../../providers/types.ts\";\nimport type { ResolvedBillingProviderConnection } from \"../../../reconciliation/types.ts\";\nimport { createConfiguredProviderBinding } from \"./binding.ts\";\nimport {\n  configuredProviderSlot,\n  normalizeBillingProviderConfiguration,\n  rawMollieConfig,\n  rawStripeConfig,\n} from \"./configuration/index.ts\";\nimport { createBillingProviderExecutionContext } from \"./execution-context.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type {\n  BillingProviderExecutionContext,\n  PersistedBillingProviderBinding,\n} from \"./types.ts\";\n\nexport function defaultBillingCredentialReference(\n  provider: string,\n  environment?: \"test\" | \"live\"\n): string {\n  const name = normalizeBillingProviderName(provider);\n  if (environment === \"live\") {\n    return `providers.${name}-live`;\n  }\n  return `providers.${name}`;\n}\n\n/** Declared credential_reference values for a provider + environment. */\nexport function configuredBillingCredentialReferences(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  environment: \"test\" | \"live\";\n  provider: string;\n}): string[] {\n  const configured = input.configuredProviders;\n  if (configured == null) {\n    return [];\n  }\n  const provider = normalizeBillingProviderName(input.provider);\n  const normalized = normalizeBillingProviderConfiguration({\n    configuredProviders: configured,\n    environment: input.environment,\n  });\n  const providerConfig = normalized.providers.get(provider);\n  if (providerConfig == null) {\n    return [];\n  }\n  return [\n    ...(providerConfig.defaultSlot == null\n      ? []\n      : [providerConfig.defaultSlot.credentialReference]),\n    ...[...providerConfig.slots.values()].map(\n      (slot) => slot.credentialReference,\n    ),\n  ];\n}\n\nfunction billingProviderFromCredentialPart(\n  providerPart: string,\n  trimmed: string\n): \"mollie\" | \"stripe\" {\n  const base = providerPart.replace(/-(test|live)$/, \"\");\n  if (base !== \"mollie\" && base !== \"stripe\") {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: `Billing credential_reference \"${trimmed}\" is not a mollie or stripe slot.`,\n    });\n  }\n  return base;\n}\n\nexport function parseBillingCredentialReference(raw: string): {\n  accountId?: string;\n  provider: \"mollie\" | \"stripe\";\n} {\n  const trimmed = raw.trim();\n  if (trimmed.length === 0) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: \"Billing connection credential_reference is empty.\",\n    });\n  }\n  const body = trimmed.startsWith(\"providers.\")\n    ? trimmed.slice(\"providers.\".length)\n    : trimmed;\n  const colon = body.indexOf(\":\");\n  const providerPart = (\n    colon === -1 ? body : body.slice(0, colon)\n  ).toLowerCase();\n  const accountId = colon === -1 ? undefined : body.slice(colon + 1).trim();\n  const provider = billingProviderFromCredentialPart(providerPart, trimmed);\n  if (colon !== -1 && (accountId == null || accountId.length === 0)) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: `Billing credential_reference \"${trimmed}\" is missing an account slot.`,\n    });\n  }\n  return accountId === null ? { provider } : { accountId, provider };\n}\n\nexport function mollieConfigForCredentialReference(\n  configured: BillingProviderConfigMap | undefined,\n  reference: string\n): MollieBillingProviderConfig | undefined {\n  const parsed = parseBillingCredentialReference(reference);\n  if (parsed.provider !== \"mollie\") {\n    return;\n  }\n  const normalized = normalizeBillingProviderConfiguration({\n    configuredProviders: configured,\n    environment: \"test\",\n  });\n  const slot = configuredProviderSlot(\n    normalized,\n    \"mollie\",\n    parsed.accountId ?? null,\n  );\n  return slot == null ? undefined : rawMollieConfig(slot);\n}\n\nexport function firstConfiguredMollieProvider(\n  configured?: BillingProviderConfigMap\n): MollieBillingProviderConfig | undefined {\n  const normalized = normalizeBillingProviderConfiguration({\n    configuredProviders: configured,\n    environment: \"test\",\n  });\n  const provider = normalized.providers.get(\"mollie\");\n  const slot = provider?.defaultSlot ?? provider?.slots.values().next().value;\n  return slot == null ? undefined : rawMollieConfig(slot);\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  connectionTestMode: boolean,\n  processTestMode: boolean | undefined\n): boolean {\n  return connectionTestMode === (processTestMode !== false);\n}\n\n/** True when process config has a credential for this connection's environment. */\nexport function billingConnectionHasConfiguredCredential(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connection: Pick<\n    ResolvedBillingProviderConnection,\n    \"credentialReference\" | \"provider\" | \"testMode\"\n  >;\n}): boolean {\n  try {\n    const binding = createPersistedProviderBinding({\n      configuredProviders: input.configuredProviders,\n      connectionId: input.connection.credentialReference,\n      credentialReference: input.connection.credentialReference,\n      provider: input.connection.provider,\n    });\n    return input.connection.testMode\n      ? binding.credentials.test != null\n      : binding.credentials.live != null;\n  } catch {\n    return false;\n  }\n}\n\n/** Active rows that match this process environment and have a usable credential. */\nexport function eligibleBillingConnectionsForProcess<\n  T extends Pick<\n    ResolvedBillingProviderConnection,\n    \"credentialReference\" | \"provider\" | \"testMode\"\n  >,\n>(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connections: readonly T[];\n  processTestMode?: boolean;\n}): T[] {\n  return input.connections.filter(\n    (connection) =>\n      billingConnectionMatchesProcessTestMode(\n        connection.testMode,\n        input.processTestMode\n      ) &&\n      billingConnectionHasConfiguredCredential({\n        configuredProviders: input.configuredProviders,\n        connection,\n      })\n  );\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  T extends Pick<ResolvedBillingProviderConnection, \"credentialReference\">,\n>(eligible: readonly T[]): T | undefined {\n  if (eligible.length === 0) {\n    return;\n  }\n  if (eligible.length === 1) {\n    return eligible[0];\n  }\n  const defaults = eligible.filter(\n    (connection) => connection.credentialReference === \"providers.mollie\"\n  );\n  return defaults.length === 1 ? defaults[0] : undefined;\n}\n\nexport function createPersistedProviderBinding(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId: string;\n  credentialReference: string;\n  provider: string;\n}): PersistedBillingProviderBinding {\n  const parsed = parseBillingCredentialReference(input.credentialReference);\n  const connectionProvider = normalizeBillingProviderName(input.provider);\n  if (parsed.provider !== connectionProvider) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: `Connection provider \"${connectionProvider}\" does not match credential_reference \"${input.credentialReference}\".`,\n    });\n  }\n  const slotMap = slotConfigMap(\n    parsed.provider,\n    parsed.accountId,\n    input.configuredProviders,\n    input.credentialReference\n  );\n  const configured = createConfiguredProviderBinding({\n    configuredProviders: slotMap,\n    provider: parsed.provider,\n  });\n  return {\n    connectionId: input.connectionId,\n    credentialReference: input.credentialReference,\n    credentials: configured.credentials,\n    kind: \"connection\",\n    provider: configured.provider,\n    providerConfig: configured.providerConfig,\n  };\n}\n\nexport function createConnectionProviderExecutionContext(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connection: ResolvedBillingProviderConnection;\n  ingress?: {\n    classicWebhookUrl?: string;\n    classicWebhookUrlsByConnectionId?: Readonly<Record<string, string>>;\n  };\n  operationScope?: \"organization\" | \"profile\" | \"automatic\";\n}): BillingProviderExecutionContext {\n  const binding = createPersistedProviderBinding({\n    configuredProviders: input.configuredProviders,\n    connectionId: input.connection.id,\n    credentialReference: input.connection.credentialReference,\n    provider: input.connection.provider,\n  });\n  return createBillingProviderExecutionContext({\n    binding,\n    ...(input.ingress ? { ingress: input.ingress } : {}),\n    ...(input.operationScope === null\n      ? {}\n      : { operationScope: input.operationScope }),\n    testMode: input.connection.testMode,\n  });\n}\n\nfunction slotConfigMap(\n  provider: \"mollie\" | \"stripe\",\n  accountId: string | undefined,\n  configured: BillingProviderConfigMap | undefined,\n  reference: string\n): BillingProviderConfigMap {\n  const normalized = normalizeBillingProviderConfiguration({\n    configuredProviders: configured,\n    environment: \"test\",\n  });\n  const slot = configuredProviderSlot(\n    normalized,\n    provider,\n    accountId ?? null,\n  );\n  if (slot == null) {\n    throw missingSlot(reference);\n  }\n  return provider === \"mollie\"\n    ? { mollie: rawMollieConfig(slot) }\n    : { stripe: rawStripeConfig(slot) };\n}\n\nfunction missingSlot(reference: string): AthenaBillingProviderError {\n  return new AthenaBillingProviderError({\n    code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n    message: `No billing provider config is registered for credential_reference \"${reference}\".`,\n  });\n}\n","import type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\n\nfunction row(\n  operation: BillingOperation,\n  mutationClass: BillingOperationSafetyProfile[\"mutationClass\"],\n  idempotency: BillingOperationSafetyProfile[\"idempotency\"],\n  replayGuarantee: BillingOperationSafetyProfile[\"replayGuarantee\"],\n  money: BillingOperationSafetyProfile[\"money\"],\n  authorityMode: BillingOperationSafetyProfile[\"authorityMode\"]\n): BillingOperationSafetyProfile {\n  return {\n    authorityMode,\n    idempotency,\n    money,\n    mutationClass,\n    operation,\n    preflightIsConcurrencyGuarantee: false,\n    replayGuarantee,\n  };\n}\n\nconst readTrust = (\n  operation: BillingOperation\n): BillingOperationSafetyProfile =>\n  row(\n    operation,\n    \"read\",\n    \"not_applicable\",\n    \"none\",\n    \"not_applicable\",\n    \"provider-trust\"\n  );\n\nconst financialCreate = (\n  operation: BillingOperation,\n  money: BillingOperationSafetyProfile[\"money\"]\n): BillingOperationSafetyProfile =>\n  row(\n    operation,\n    \"financial_create\",\n    \"required_caller_owned\",\n    \"provider_same_key\",\n    money,\n    \"declared-required\"\n  );\n\nconst financialCancel = (\n  operation: BillingOperation\n): BillingOperationSafetyProfile =>\n  row(\n    operation,\n    \"financial_cancel\",\n    \"not_applicable\",\n    \"none\",\n    \"not_applicable\",\n    \"declared-required\"\n  );\n\nconst nonFinancialWrite = (\n  operation: BillingOperation\n): BillingOperationSafetyProfile =>\n  row(\n    operation,\n    \"non_financial_write\",\n    \"not_applicable\",\n    \"none\",\n    \"not_applicable\",\n    \"declared-required\"\n  );\n\nexport const BILLING_OPERATION_SAFETY = {\n  \"admin.conflicts.list\": readTrust(\"admin.conflicts.list\"),\n  \"admin.conflicts.resolve\": nonFinancialWrite(\"admin.conflicts.resolve\"),\n  \"admin.connections.materialize\": nonFinancialWrite(\n    \"admin.connections.materialize\"\n  ),\n  \"admin.bootstrap.retry\": nonFinancialWrite(\"admin.bootstrap.retry\"),\n  \"admin.ingestion.health\": readTrust(\"admin.ingestion.health\"),\n  \"admin.reconciliation.retry\": nonFinancialWrite(\"admin.reconciliation.retry\"),\n  \"admin.reconciliation.run\": nonFinancialWrite(\"admin.reconciliation.run\"),\n  \"admin.webhooks.reconcile\": nonFinancialWrite(\"admin.webhooks.reconcile\"),\n  \"admin.webhooks.status\": readTrust(\"admin.webhooks.status\"),\n  \"admin.webhooks.verify\": readTrust(\"admin.webhooks.verify\"),\n  \"checkout.create\": financialCreate(\"checkout.create\", \"not_applicable\"),\n  \"customers.create\": financialCreate(\"customers.create\", \"not_applicable\"),\n  \"customers.delete\": nonFinancialWrite(\"customers.delete\"),\n  \"customers.get\": readTrust(\"customers.get\"),\n  \"customers.list\": readTrust(\"customers.list\"),\n  \"customers.update\": nonFinancialWrite(\"customers.update\"),\n  \"invoices.get\": readTrust(\"invoices.get\"),\n  \"invoices.list\": readTrust(\"invoices.list\"),\n  \"paymentLinks.create\": financialCreate(\"paymentLinks.create\", \"required\"),\n  \"paymentLinks.delete\": nonFinancialWrite(\"paymentLinks.delete\"),\n  \"paymentLinks.get\": readTrust(\"paymentLinks.get\"),\n  \"paymentLinks.list\": readTrust(\"paymentLinks.list\"),\n  \"paymentLinks.update\": nonFinancialWrite(\"paymentLinks.update\"),\n  \"payments.cancel\": financialCancel(\"payments.cancel\"),\n  \"payments.create\": financialCreate(\"payments.create\", \"required\"),\n  \"payments.get\": readTrust(\"payments.get\"),\n  \"payments.list\": readTrust(\"payments.list\"),\n  \"prices.list\": readTrust(\"prices.list\"),\n  \"products.list\": readTrust(\"products.list\"),\n  \"relations.list\": readTrust(\"relations.list\"),\n  \"refunds.cancel\": financialCancel(\"refunds.cancel\"),\n  \"refunds.create\": financialCreate(\"refunds.create\", \"required\"),\n  \"refunds.get\": readTrust(\"refunds.get\"),\n  \"refunds.list\": readTrust(\"refunds.list\"),\n  \"self.checkout.create\": financialCreate(\n    \"self.checkout.create\",\n    \"not_applicable\"\n  ),\n  \"self.checkout.resume\": nonFinancialWrite(\"self.checkout.resume\"),\n  \"self.customer.get\": readTrust(\"self.customer.get\"),\n  \"self.entitlements\": readTrust(\"self.entitlements\"),\n  \"self.invoices.get\": readTrust(\"self.invoices.get\"),\n  \"self.invoices.list\": readTrust(\"self.invoices.list\"),\n  \"self.payments.get\": readTrust(\"self.payments.get\"),\n  \"self.payments.list\": readTrust(\"self.payments.list\"),\n  \"self.subscription.cancel\": financialCancel(\"self.subscription.cancel\"),\n  \"self.subscription.change\": financialCreate(\n    \"self.subscription.change\",\n    \"not_applicable\"\n  ),\n  \"self.subscription.enroll\": financialCreate(\n    \"self.subscription.enroll\",\n    \"not_applicable\"\n  ),\n  \"self.subscription.get\": readTrust(\"self.subscription.get\"),\n  \"subscriptions.cancel\": financialCancel(\"subscriptions.cancel\"),\n  \"subscriptions.create\": financialCreate(\"subscriptions.create\", \"required\"),\n  \"subscriptions.get\": readTrust(\"subscriptions.get\"),\n  \"subscriptions.list\": readTrust(\"subscriptions.list\"),\n  \"subscriptions.update\": nonFinancialWrite(\"subscriptions.update\"),\n  \"webhooks.create\": nonFinancialWrite(\"webhooks.create\"),\n  \"webhooks.delete\": nonFinancialWrite(\"webhooks.delete\"),\n  \"webhooks.get\": readTrust(\"webhooks.get\"),\n  \"webhooks.list\": readTrust(\"webhooks.list\"),\n  \"webhooks.test\": nonFinancialWrite(\"webhooks.test\"),\n  \"webhooks.update\": nonFinancialWrite(\"webhooks.update\"),\n} as const satisfies Record<BillingOperation, BillingOperationSafetyProfile>;\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n  BillingSqlExecutor,\n  BillingSubjectBindingRecord,\n  BillingSubjectRepository,\n} from \"./repository.ts\";\n\nexport function isBillingUniqueViolation(error: unknown): boolean {\n  if (error == null || typeof error !== \"object\") {\n    return false;\n  }\n  return (error as { code?: unknown }).code === \"23505\";\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n  return {\n    connectionId: String(row.connection_id),\n    emailSnapshot:\n      typeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n    emailVerificationSource:\n      row.email_verification_source === \"athena-auth\"\n        ? \"athena-auth\"\n        : null,\n    verifiedEmailObservedAt:\n      row.email_observed_at instanceof Date\n        ? row.email_observed_at.toISOString()\n        : typeof row.email_observed_at === \"string\"\n          ? row.email_observed_at\n          : null,\n    id: String(row.id),\n    isPrimary: row.is_primary === true,\n    providerSubjectId: String(row.provider_subject_id),\n    providerSubjectKind:\n      row.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n    reservationToken:\n      typeof row.reservation_token === \"string\" ? row.reservation_token : null,\n    source:\n      row.source === \"imported\" || row.source === \"reconciled\"\n        ? row.source\n        : \"created\",\n    status:\n      row.status === \"active\" ||\n      row.status === \"conflict\" ||\n      row.status === \"revoked\"\n        ? row.status\n        : \"pending\",\n    subjectId: String(row.subject_id),\n    subjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n  };\n}\n\nexport function createPostgresBillingSubjectRepository(\n  sql: BillingSqlExecutor\n): BillingSubjectRepository {\n  return {\n    async activate(input) {\n      const result = await sql.query(\n        `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     reservation_token = NULL,\n\t\t\t\t     reservation_expires_at = NULL\n\t\t\t\t WHERE id = $2\n\t\t\t\t   AND status = 'pending'\n\t\t\t\t   AND ($3::text IS NULL OR reservation_token = $3)\n\t\t\t\t RETURNING *`,\n        [input.providerSubjectId, input.id, input.reservationToken ?? null]\n      );\n      const row = result.rows[0];\n      if (!row) {\n        throw new Error(\"Failed to activate billing subject binding.\");\n      }\n      return asBinding(row);\n    },\n    async getBinding(id) {\n      const result = await sql.query(\n        \"SELECT * FROM billing.billing_subject_bindings WHERE id = $1\",\n        [id]\n      );\n      const row = result.rows[0];\n      return row ? asBinding(row) : undefined;\n    },\n    async listActiveBindings(input) {\n      const result = await sql.query(\n        `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        [input.connectionId, input.subject.kind, input.subject.id]\n      );\n      return result.rows.map(asBinding);\n    },\n    async reserve(input) {\n      try {\n        const result = await sql.query(\n          `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\treservation_token,\n\t\t\t\t\t\treservation_expires_at,\n\t\t\t\t\t\tlease_epoch,\n\t\t\t\t\t\temail_snapshot,\n\t\t\t\t\t\temail_verification_source,\n\t\t\t\t\t\temail_observed_at\n\t\t\t\t\t) VALUES ($1, $2, $3, $4, $5, 'pending', $6, false, $7, now() + interval '15 minutes', 1, $8, $9, $10::timestamptz)\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          [\n            input.connectionId,\n            input.subject.kind,\n            input.subject.id,\n            input.providerSubjectKind,\n            input.providerSubjectId ?? `reserve:${input.subject.id}`,\n            input.source,\n            crypto.randomUUID(),\n            input.contact?.email ?? null,\n            input.contact?.source ?? null,\n            input.contact?.verifiedEmailObservedAt ?? null,\n          ]\n        );\n        const inserted = result.rows[0];\n        if (inserted) {\n          return { binding: asBinding(inserted), inserted: true };\n        }\n      } catch (error) {\n        if (\n          !isBillingUniqueViolation(error) &&\n          (error as { code?: string }).code !== \"42P10\"\n        ) {\n          throw error;\n        }\n      }\n      const reclaimed = await sql.query(\n        `UPDATE billing.billing_subject_bindings\n\t\t\t\t SET reservation_token = $5,\n\t\t\t\t     reservation_expires_at = now() + interval '15 minutes',\n\t\t\t\t     lease_epoch = lease_epoch + 1,\n\t\t\t\t     last_error = NULL,\n\t\t\t\t     attempt_count = attempt_count + 1\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 = 'pending'\n\t\t\t\t   AND reservation_expires_at IS NOT NULL\n\t\t\t\t   AND reservation_expires_at < now()\n\t\t\t\t RETURNING *`,\n        [\n          input.connectionId,\n          input.subject.kind,\n          input.subject.id,\n          input.providerSubjectKind,\n          crypto.randomUUID(),\n        ]\n      );\n      if (reclaimed.rows[0]) {\n        return { binding: asBinding(reclaimed.rows[0]), inserted: true };\n      }\n      const existing = await sql.query(\n        `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        [\n          input.connectionId,\n          input.subject.kind,\n          input.subject.id,\n          input.providerSubjectKind,\n        ]\n      );\n      const row = existing.rows[0];\n      if (!row) {\n        throw new Error(\"Failed to reserve billing subject binding.\");\n      }\n      return { binding: asBinding(row), inserted: false };\n    },\n    async recordContact(input) {\n      const result = await sql.query(\n        `UPDATE billing.billing_subject_bindings\n         SET email_snapshot = $2,\n             email_verification_source = $3,\n             email_observed_at = $4::timestamptz,\n             updated_at = now()\n         WHERE id = $1\n           AND subject_id = $5\n           AND subject_kind = $6\n             AND status IN ('active')\n         RETURNING *`,\n        [\n          input.bindingId,\n          input.contact.email,\n          input.contact.source,\n          input.contact.verifiedEmailObservedAt,\n          input.contact.subjectId,\n          \"user\",\n        ],\n      );\n      const row = result.rows[0];\n      return row ? asBinding(row) : undefined;\n    },\n  };\n}\n\nexport function subjectFromPrincipalUser(userId: string): BillingSubjectRef {\n  return { id: userId, kind: \"user\" };\n}\n","import { ATHENA_POSTGRES_POOL_DEFAULTS } from \"../../postgres/driver.ts\";\nimport { PostgresDeadline } from \"../../postgres/pool/deadline.ts\";\nimport type { PostgresPoolManager } from \"../../postgres/pool/manager.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport interface BillingImportDatabase\n  extends Omit<BillingSqlExecutor, \"transaction\"> {\n  transaction<T>(fn: (tx: BillingSqlExecutor) => Promise<T>): Promise<T>;\n}\n\nexport function createBillingSqlExecutor(input: {\n  query: (\n    text: string,\n    values?: unknown[]\n  ) => Promise<{ rows: unknown[]; rowCount?: number | null }>;\n}): BillingSqlExecutor {\n  return {\n    async query(sql, params) {\n      const result = await input.query(sql, params ? [...params] : undefined);\n      return { rows: result.rows as Record<string, unknown>[] };\n    },\n  };\n}\n\nexport function createBillingSqlExecutorFromManager(\n  manager: PostgresPoolManager\n): BillingSqlExecutor {\n  return createBillingSqlExecutor({\n    async query(text, values) {\n      return manager.query(\n        {\n          deadline: PostgresDeadline.after(\n            ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n          ),\n          target: \"pooled\",\n          workload: \"billing\",\n        },\n        text,\n        values\n      );\n    },\n  });\n}\n\nexport function createBillingImportDatabaseFromManager(\n  manager: PostgresPoolManager\n): BillingImportDatabase {\n  const root = createBillingSqlExecutorFromManager(manager);\n  return {\n    query: root.query.bind(root),\n    async transaction(fn) {\n      const lease = await manager.acquire({\n        deadline: PostgresDeadline.after(\n          ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n        ),\n        target: \"pooled\",\n        workload: \"billing\",\n      });\n      const client = lease.client;\n      try {\n        await client.query(\"BEGIN\");\n        const tx = createBillingSqlExecutor(client);\n        const value = await fn(tx);\n        await client.query(\"COMMIT\");\n        return value;\n      } catch (error) {\n        try {\n          await client.query(\"ROLLBACK\");\n        } catch (rollbackError) {\n          lease.destroy(rollbackError);\n          throw error;\n        }\n        throw error;\n      } finally {\n        lease.release();\n      }\n    },\n  };\n}\n\nexport function wrapBillingSqlExecutorAsDatabase(\n  sql: BillingSqlExecutor\n): BillingImportDatabase {\n  return {\n    query: sql.query.bind(sql),\n    async transaction(fn) {\n      return fn(sql);\n    },\n  };\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  BillingSqlExecutor,\n  BillingSubjectBindingRecord,\n} from \"../subject/repository.ts\";\nimport type { BillingSubjectRef } from \"../types.ts\";\nimport type {\n  BillingImportBindingStore,\n  BillingImportCursorStore,\n  BillingImportDocumentStore,\n} from \"./apply.ts\";\nimport { wrapBillingSqlExecutorAsDatabase } from \"./database.ts\";\nimport {\n  ATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n  AthenaBillingImportError,\n} from \"./errors.ts\";\nimport type {\n  BillingImportDocumentHint,\n  BillingSubjectDirectory,\n  BillingSubjectRecord,\n} from \"./types.ts\";\n\nexport {\n  createBillingImportDatabaseFromManager,\n  createBillingSqlExecutor,\n  createBillingSqlExecutorFromManager,\n} from \"./database.ts\";\n\nconst DOCUMENT_TABLES = [\n  \"billing.billing_payments\",\n  \"billing.billing_subscriptions\",\n  \"billing.billing_invoices\",\n] as const;\n\nconst CONNECTION_LIST_COLUMNS =\n  \"id::text AS id, provider, status, account_reference, environment, credential_reference, metadata\";\n\nfunction connectionEnvironment(value: unknown): \"live\" | \"test\" {\n  return value === \"test\" ? \"test\" : \"live\";\n}\n\nfunction webhookIngressTokenFromMetadata(\n  metadata: unknown\n): string | undefined {\n  if (\n    metadata == null ||\n    typeof metadata !== \"object\" ||\n    Array.isArray(metadata)\n  ) {\n    return;\n  }\n  const token = (metadata as { webhookIngressToken?: unknown })\n    .webhookIngressToken;\n  return typeof token === \"string\" && token.length > 0 ? token : undefined;\n}\n\nfunction asResolvedConnection(\n  row: Record<string, unknown>\n): ResolvedBillingProviderConnection {\n  const environment = connectionEnvironment(row.environment);\n  const provider = String(row.provider ?? \"\");\n  const credentialReference =\n    typeof row.credential_reference === \"string\" &&\n    row.credential_reference.trim() !== \"\"\n      ? row.credential_reference.trim()\n      : `providers.${provider.toLowerCase() || \"mollie\"}`;\n  const webhookIngressToken = webhookIngressTokenFromMetadata(row.metadata);\n  return {\n    accountReference: String(row.account_reference ?? \"\"),\n    credentialReference,\n    environment,\n    id: String(row.id),\n    provider,\n    status: String(row.status ?? \"\"),\n    testMode: environment === \"test\",\n    ...(webhookIngressToken ? { webhookIngressToken } : {}),\n  };\n}\n\nfunction asBinding(row: Record<string, unknown>): BillingSubjectBindingRecord {\n  return {\n    connectionId: String(row.connection_id),\n    emailSnapshot:\n      typeof row.email_snapshot === \"string\" ? row.email_snapshot : null,\n    emailVerificationSource:\n      row.email_verification_source === \"athena-auth\"\n        ? \"athena-auth\"\n        : null,\n    verifiedEmailObservedAt:\n      row.email_observed_at instanceof Date\n        ? row.email_observed_at.toISOString()\n        : typeof row.email_observed_at === \"string\"\n          ? row.email_observed_at\n          : null,\n    id: String(row.id),\n    isPrimary: row.is_primary === true,\n    providerSubjectId: String(row.provider_subject_id),\n    providerSubjectKind:\n      row.provider_subject_kind === \"recipient\" ? \"recipient\" : \"customer\",\n    source:\n      row.source === \"imported\" || row.source === \"reconciled\"\n        ? row.source\n        : \"created\",\n    status:\n      row.status === \"active\" ||\n      row.status === \"conflict\" ||\n      row.status === \"revoked\"\n        ? row.status\n        : \"pending\",\n    subjectId: String(row.subject_id),\n    subjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n  };\n}\n\nfunction ownershipStatus(\n  value: unknown\n): BillingImportDocumentHint[\"ownershipStatus\"] {\n  if (value === \"resolved\" || value === \"conflict\") {\n    return value;\n  }\n  return \"unresolved\";\n}\n\nfunction hintFromRow(row: Record<string, unknown>): BillingImportDocumentHint {\n  const subjectId =\n    typeof row.subject_id === \"string\" && row.subject_id.length > 0\n      ? row.subject_id\n      : undefined;\n  const subjectKind =\n    row.subject_kind === \"organization\" || row.subject_kind === \"user\"\n      ? row.subject_kind\n      : undefined;\n  return {\n    connectionId: String(row.connection_id ?? \"\"),\n    ownershipStatus: ownershipStatus(row.ownership_status),\n    providerCustomerId: String(row.provider_customer_id ?? \"\"),\n    subject:\n      subjectId && subjectKind\n        ? { id: subjectId, kind: subjectKind }\n        : undefined,\n  };\n}\n\nexport type BillingImportConnectionRow = ResolvedBillingProviderConnection;\n\nexport async function listActiveBillingImportConnections(\n  sql: BillingSqlExecutor,\n  provider?: string\n): Promise<readonly BillingImportConnectionRow[]> {\n  const result =\n    provider != null && provider.trim() !== \"\"\n      ? await sql.query(\n          `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          [provider]\n        )\n      : await sql.query(\n          `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        );\n  return result.rows.map((row) => asResolvedConnection(row));\n}\n\nexport type BillingWebhookIngressBindingInspection =\n  | { kind: \"unknown\" }\n  | { kind: \"resolved\"; connectionId: string }\n  | {\n      kind: \"environment_superseded\";\n      connectionEnvironment: \"live\" | \"test\";\n      connectionId: string;\n      processEnvironment: \"live\" | \"test\";\n      status: string;\n    };\n\nexport async function inspectBillingWebhookIngressBinding(\n  sql: BillingSqlExecutor,\n  input: { processEnvironment: \"live\" | \"test\"; token: string }\n): Promise<BillingWebhookIngressBindingInspection> {\n  const trimmed = input.token.trim();\n  if (trimmed.length === 0) {\n    return { kind: \"unknown\" };\n  }\n  const result = await sql.query(\n    `SELECT id::text AS id, status, environment\n\t\t FROM billing.billing_provider_connections\n\t\t WHERE deleted_at IS NULL\n\t\t   AND metadata->>'webhookIngressToken' = $1\n\t\t LIMIT 2`,\n    [trimmed]\n  );\n  if (result.rows.length !== 1) {\n    return { kind: \"unknown\" };\n  }\n  const row = result.rows[0];\n  const id = row?.id;\n  if (typeof id !== \"string\" || id.length === 0) {\n    return { kind: \"unknown\" };\n  }\n  const status =\n    typeof row?.status === \"string\" && row.status.length > 0\n      ? row.status\n      : \"active\";\n  const boundEnvironment = connectionEnvironment(row?.environment);\n  if (status === \"active\") {\n    return { kind: \"resolved\", connectionId: id };\n  }\n  if (boundEnvironment !== input.processEnvironment) {\n    return {\n      kind: \"environment_superseded\",\n      connectionEnvironment: boundEnvironment,\n      connectionId: id,\n      processEnvironment: input.processEnvironment,\n      status,\n    };\n  }\n  return { kind: \"unknown\" };\n}\n\nexport async function resolveBillingConnectionIdByWebhookIngressToken(\n  sql: BillingSqlExecutor,\n  token: string\n): Promise<string | undefined> {\n  const inspected = await inspectBillingWebhookIngressBinding(sql, {\n    processEnvironment: \"test\",\n    token,\n  });\n  return inspected.kind === \"resolved\" ? inspected.connectionId : undefined;\n}\n\nexport async function resolveBillingImportConnection(\n  sql: BillingSqlExecutor,\n  input: { connectionId?: string; provider?: string }\n): Promise<BillingImportConnectionRow> {\n  if (input.connectionId != null && input.connectionId.trim() !== \"\") {\n    const result = await sql.query(\n      `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      [input.connectionId, input.provider ?? null]\n    );\n    const row = result.rows[0];\n    if (!row || result.rows.length !== 1) {\n      throw new Error(\n        result.rows.length > 1\n          ? \"Multiple billing connections matched --connection. Pass the connection UUID.\"\n          : \"No billing provider connection matched --connection.\"\n      );\n    }\n    return asResolvedConnection(row);\n  }\n  const active = await listActiveBillingImportConnections(sql, input.provider);\n  if (active.length === 1) {\n    const only = active[0];\n    if (only) {\n      return only;\n    }\n  }\n  if (active.length === 0) {\n    throw new Error(\n      \"No active billing provider connections. Pass --connection <uuid>.\"\n    );\n  }\n  throw new Error(\n    \"Multiple active billing connections. Pass --connection <uuid>.\"\n  );\n}\n\nexport function createPostgresBillingSubjectDirectory(\n  sql: BillingSqlExecutor\n): BillingSubjectDirectory {\n  return {\n    async findUsersByEmail(email: string) {\n      const result = await sql.query(\n        `SELECT id, email FROM ${ATHENA_AUTH_TABLES.users}\n\t\t\t\t WHERE LOWER(btrim(email)) = LOWER(btrim($1))`,\n        [email]\n      );\n      return result.rows.map((row) => ({\n        email: typeof row.email === \"string\" ? row.email : null,\n        subject: { id: String(row.id), kind: \"user\" as const },\n      }));\n    },\n    async getById(subject: BillingSubjectRef) {\n      if (subject.kind === \"organization\") {\n        const result = await sql.query(\n          `SELECT id FROM ${ATHENA_AUTH_TABLES.organization} WHERE id = $1`,\n          [subject.id]\n        );\n        const row = result.rows[0];\n        if (!row) {\n          return null;\n        }\n        const record: BillingSubjectRecord = {\n          email: null,\n          subject,\n        };\n        return record;\n      }\n      const result = await sql.query(\n        `SELECT id, email FROM ${ATHENA_AUTH_TABLES.users} WHERE id = $1`,\n        [subject.id]\n      );\n      const row = result.rows[0];\n      if (!row) {\n        return null;\n      }\n      return {\n        email: typeof row.email === \"string\" ? row.email : null,\n        subject: { id: String(row.id), kind: \"user\" as const },\n      };\n    },\n  };\n}\n\nasync function findBindingByLocator(\n  sql: BillingSqlExecutor,\n  input: { connectionId: string; providerCustomerId: string }\n): Promise<BillingSubjectBindingRecord | null> {\n  const result = await sql.query(\n    `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    [input.connectionId, input.providerCustomerId]\n  );\n  const row = result.rows[0];\n  return row ? asBinding(row) : null;\n}\n\nexport function createPostgresBillingImportBindingStore(\n  sql: BillingSqlExecutor\n): BillingImportBindingStore {\n  return {\n    async activate(input) {\n      await sql.query(\n        `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        [input.id, input.source, input.emailSnapshot ?? null]\n      );\n    },\n    async findActivePrimary(input) {\n      const result = await sql.query(\n        `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        [input.connectionId, input.subject.kind, input.subject.id]\n      );\n      const row = result.rows[0];\n      return row ? asBinding(row) : null;\n    },\n    async findByLocator(input) {\n      return findBindingByLocator(sql, input);\n    },\n    async insertActive(input) {\n      try {\n        const result = await sql.query(\n          `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          [\n            input.connectionId,\n            input.subject.kind,\n            input.subject.id,\n            input.providerCustomerId,\n            input.source,\n            input.emailSnapshot ?? null,\n          ]\n        );\n        const row = result.rows[0];\n        if (!row) {\n          throw new Error(\"Failed to insert billing subject binding.\");\n        }\n        return asBinding(row);\n      } catch (error) {\n        if (!isBillingUniqueViolation(error)) {\n          throw error;\n        }\n        const existing = await findBindingByLocator(sql, {\n          connectionId: input.connectionId,\n          providerCustomerId: input.providerCustomerId,\n        });\n        if (\n          existing &&\n          existing.subjectId === input.subject.id &&\n          existing.subjectKind === input.subject.kind\n        ) {\n          return existing;\n        }\n        throw new AthenaBillingImportError({\n          code: ATHENA_BILLING_IMPORT_BINDING_CONFLICT,\n          message:\n            \"Provider customer locator already bound to a different Athena subject.\",\n        });\n      }\n    },\n    async recordConflict(input) {\n      await sql.query(\n        `INSERT INTO billing.billing_binding_conflicts (\n\t\t\t\t\tsubject_kind, subject_id, connection_id, candidate_provider_customer_id,\n\t\t\t\t\treason, confidence, status, last_observed_at, observation_count\n\t\t\t\t) VALUES ($1, $2, $3::uuid, $4, $5, $6, 'open', now(), 1)\n\t\t\t\tON CONFLICT (\n\t\t\t\t\tconnection_id,\n\t\t\t\t\tcandidate_provider_customer_id,\n\t\t\t\t\tidentity_subject_kind,\n\t\t\t\t\tidentity_subject_id\n\t\t\t\t)\n\t\t\t\tWHERE status = 'open'\n\t\t\t\tDO UPDATE SET\n\t\t\t\t\treason = EXCLUDED.reason,\n\t\t\t\t\tconfidence = EXCLUDED.confidence,\n\t\t\t\t\tlast_observed_at = now(),\n\t\t\t\t\tobservation_count = billing.billing_binding_conflicts.observation_count + 1`,\n        [\n          input.subject?.kind ?? null,\n          input.subject?.id ?? null,\n          input.connectionId,\n          input.providerCustomerId,\n          input.reason,\n          input.confidence,\n        ]\n      );\n    },\n  };\n}\n\nexport function createPostgresBillingImportCursorStore(\n  sql: BillingSqlExecutor\n): BillingImportCursorStore {\n  return {\n    async get(connectionId) {\n      const result = await sql.query(\n        `SELECT cursor FROM billing.billing_import_state\n\t\t\t\t WHERE connection_id = $1::uuid AND resource_kind = 'customers'`,\n        [connectionId]\n      );\n      const cursor = result.rows[0]?.cursor;\n      return typeof cursor === \"string\" && cursor.length > 0 ? cursor : null;\n    },\n    async set(connectionId, cursor) {\n      await sql.query(\n        `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        [connectionId, cursor]\n      );\n    },\n  };\n}\n\nexport function createPostgresBillingImportDocumentStore(\n  sql: BillingSqlExecutor\n): BillingImportDocumentStore {\n  return {\n    async hintsForCustomer(input) {\n      const hints: BillingImportDocumentHint[] = [];\n      for (const table of DOCUMENT_TABLES) {\n        const result = await sql.query(\n          `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          [input.connectionId, input.providerCustomerId]\n        );\n        for (const row of result.rows) {\n          hints.push(hintFromRow(row));\n        }\n      }\n      return hints;\n    },\n    async projectForBinding(input) {\n      const params = [\n        input.providerCustomerId,\n        input.connectionId,\n        input.subject.kind,\n        input.subject.id,\n      ];\n      const db = wrapBillingSqlExecutorAsDatabase(sql);\n      return db.transaction(async (tx) => {\n        let conflicts = 0;\n        let resolved = 0;\n        for (const table of DOCUMENT_TABLES) {\n          const projected = await tx.query(\n            `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            params\n          );\n          for (const row of projected.rows) {\n            if (row.ownership_status === \"conflict\") {\n              conflicts += 1;\n            } else if (row.ownership_status === \"resolved\") {\n              resolved += 1;\n            }\n          }\n        }\n        return { conflicts, resolved };\n      });\n    },\n  };\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  | \"pending\"\n  | \"active\"\n  | \"drifted\"\n  | \"degraded\"\n  | \"disabled\"\n  | \"error\";\n\nexport type BillingWebhookReconciliationAction =\n  | \"noop\"\n  | \"create\"\n  | \"update\"\n  | \"replace\"\n  | \"disable\"\n  | \"conflict\";\n\nexport type BillingIngestionChannelHealth =\n  | \"active\"\n  | \"disabled\"\n  | \"unsupported\"\n  | \"error\";\n\nexport type BillingNextGenIngestionHealth =\n  | BillingIngestionChannelHealth\n  | \"degraded\";\n\nexport interface BillingConnectionIngestionHealth {\n  classic: BillingIngestionChannelHealth;\n  drifted: boolean;\n  lastDeliveryAt?: Date;\n  lastVerifiedAt?: Date;\n  nextGen: BillingNextGenIngestionHealth;\n}\n\nexport interface MollieWebhookEndpoints {\n  classic: string;\n  nextGen: string;\n}\n\nexport interface ResolvedBillingIngressEndpoints\n  extends MollieWebhookEndpoints {\n  classicUrl: string;\n  eventsUrl: string;\n}\n\nexport interface AthenaBillingWebhookClassicConfig {\n  enabled?: boolean;\n}\n\nexport interface AthenaBillingWebhookNextGenConfig {\n  enabled?: BillingManagedWebhookEnablement;\n  eventTypes?: readonly string[];\n  previousSigningSecrets?: readonly string[];\n  signingSecret?: string;\n}\n\n/**\n * Bounded webhook admit before parse. Defaults: 1 MiB body, 20/s, burst 40,\n * 16 concurrent, `trustProxy` false.\n */\nexport interface BillingIngressAdmissionPolicy {\n  burst?: number;\n  maxBodyBytes?: number;\n  maxConcurrent?: number;\n  ratePerSecond?: number;\n  /**\n   * Allow the HTTP adapter to use forwarding headers for admission identity.\n   * Enable only when the adapter is behind a trusted proxy.\n   */\n  trustProxy?: boolean;\n}\n\nexport interface AthenaBillingMollieWebhookProviderConfig {\n  classic?: AthenaBillingWebhookClassicConfig;\n  nextGen?: AthenaBillingWebhookNextGenConfig;\n  strategy?: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface AthenaBillingWebhooksObjectConfig {\n  /** Bounded admit before parse. See {@link BillingIngressAdmissionPolicy}. */\n  admission?: BillingIngressAdmissionPolicy;\n  enabled?: boolean;\n  execution?: \"embedded\" | \"external\";\n  management?: BillingWebhookManagementMode;\n  providers?: {\n    mollie?: AthenaBillingMollieWebhookProviderConfig;\n  };\n  publicBaseUrl?: string;\n  /** Envelope key for provider signing secrets. Prefer env ATHENA_BILLING_WEBHOOK_MASTER_KEY. */\n  secretMasterKey?: string;\n}\n\nexport type AthenaBillingWebhooksConfig =\n  | boolean\n  | AthenaBillingWebhooksObjectConfig;\n\nexport interface AthenaBillingIngestionConfig {\n  webhooks?: AthenaBillingWebhooksConfig;\n}\n\nexport const DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES = [\n  \"payment.paid\",\n  \"payment.failed\",\n  \"payment.canceled\",\n  \"payment.expired\",\n] as const;\n\nexport interface NormalizedMollieWebhookProviderConfig {\n  classic: { enabled: boolean };\n  nextGen: {\n    enabled: BillingManagedWebhookEnablement;\n    eventTypes: readonly string[];\n    previousSigningSecrets: readonly string[];\n    signingSecret?: string;\n  };\n  strategy: \"hybrid\" | \"classic\" | \"next_gen\";\n}\n\nexport interface NormalizedAthenaBillingWebhooksConfig {\n  enabled: boolean;\n  execution: \"embedded\" | \"external\";\n  management: BillingWebhookManagementMode;\n  providers: {\n    mollie: NormalizedMollieWebhookProviderConfig;\n  };\n  publicBaseUrl?: string;\n  secretMasterKey?: string;\n}\n\nexport interface NormalizedAthenaBillingIngestionConfig {\n  webhooks: NormalizedAthenaBillingWebhooksConfig;\n}\n\nexport interface BillingSigningSecretSet {\n  current?: string;\n  previous: readonly string[];\n}\n\nexport interface BillingWebhookOwnershipMarker {\n  applicationId: string;\n  connectionId: string;\n  value: string;\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { ResolvedBillingIngressEndpoints } from \"./types.ts\";\n\nexport const BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH =\n  \"/api/athena/billing/webhook/mollie/classic\";\nexport const BILLING_MOLLIE_EVENTS_WEBHOOK_PATH =\n  \"/api/athena/billing/webhook/mollie/events\";\nexport const BILLING_WEBHOOK_COMPAT_PATH = \"/api/athena/billing/webhook\";\n\nfunction isLoopbackHostname(hostname: string): boolean {\n  const host = hostname.replace(/^\\[(.*)\\]$/u, \"$1\").toLowerCase();\n  return (\n    host === \"localhost\" ||\n    host === \"127.0.0.1\" ||\n    host === \"::1\" ||\n    host === \"0.0.0.0\" ||\n    host.endsWith(\".localhost\") ||\n    host.endsWith(\".local\")\n  );\n}\n\nexport function billingWebhookUrlIsLoopback(value: string): boolean {\n  try {\n    return isLoopbackHostname(new URL(value).hostname);\n  } catch {\n    return false;\n  }\n}\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/u, \"\");\n}\n\nfunction isHttpsPublicUrl(value: string): boolean {\n  try {\n    const parsed = new URL(value);\n    return parsed.protocol === \"https:\" && parsed.hostname.length > 0;\n  } catch {\n    return false;\n  }\n}\n\nexport function resolveBillingPublicBaseUrl(input: {\n  appUrl?: string | null;\n  publicBaseUrl?: string | null;\n}): string | undefined {\n  const candidate = input.publicBaseUrl?.trim() || input.appUrl?.trim();\n  if (!candidate) {\n    return;\n  }\n  return trimTrailingSlash(candidate);\n}\n\nexport function resolveBillingIngressEndpoints(input: {\n  appUrl?: string | null;\n  publicBaseUrl?: string | null;\n  webhookIngressToken?: string;\n}): ResolvedBillingIngressEndpoints | undefined {\n  const base = resolveBillingPublicBaseUrl(input);\n  if (!base) {\n    return;\n  }\n  const token = input.webhookIngressToken?.trim();\n  const suffix =\n    token != null && WEBHOOK_INGRESS_BINDING_TOKEN.test(token)\n      ? `/${token}`\n      : \"\";\n  const classic = `${base}${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}${suffix}`;\n  const nextGen = `${base}${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}${suffix}`;\n  return {\n    classic,\n    classicUrl: classic,\n    eventsUrl: nextGen,\n    nextGen,\n  };\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n  try {\n    const parsed = new URL(value);\n    return (\n      (parsed.protocol === \"https:\" || parsed.protocol === \"http:\") &&\n      parsed.hostname.length > 0\n    );\n  } catch {\n    return false;\n  }\n}\n\nexport function assertStableHttpsBillingPublicUrl(input: {\n  appUrl?: string | null;\n  live?: boolean;\n  management: \"automatic\" | \"manual\";\n  publicBaseUrl?: string | null;\n  webhooksEnabled: boolean;\n}): string | undefined {\n  if (!input.webhooksEnabled || input.management !== \"automatic\") {\n    return resolveBillingPublicBaseUrl(input);\n  }\n  const base = resolveBillingPublicBaseUrl(input);\n  const live = input.live === true;\n  if (!(base && isAbsoluteHttpUrl(base)) || (live && !isHttpsPublicUrl(base))) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_INGESTION_PUBLIC_URL_REQUIRED\",\n      \"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      \"billing\"\n    );\n  }\n  return base;\n}\n\nconst WEBHOOK_INGRESS_BINDING_TOKEN = /^[A-Za-z0-9_-]{16,128}$/;\n\nexport function isBillingWebhookIngressBindingToken(value: string): boolean {\n  return WEBHOOK_INGRESS_BINDING_TOKEN.test(value.trim());\n}\n\nfunction normalizeWebhookPathname(pathname: string): string {\n  return pathname.length > 1 ? pathname.replace(/\\/+$/u, \"\") : pathname;\n}\n\nexport function billingWebhookPathKind(\n  pathname: string\n): \"classic\" | \"events\" | \"compat\" {\n  const normalized = normalizeWebhookPathname(pathname);\n  if (\n    normalized === BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH ||\n    normalized.startsWith(`${BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH}/`)\n  ) {\n    return \"classic\";\n  }\n  if (\n    normalized === BILLING_MOLLIE_EVENTS_WEBHOOK_PATH ||\n    normalized.startsWith(`${BILLING_MOLLIE_EVENTS_WEBHOOK_PATH}/`)\n  ) {\n    return \"events\";\n  }\n  return \"compat\";\n}\n\n/** Opaque ingress binding from `/classic/<token>` or `/events/<token>`. */\nexport function billingWebhookIngressBindingToken(\n  pathname: string\n): string | undefined {\n  const normalized = normalizeWebhookPathname(pathname);\n  const kind = billingWebhookPathKind(normalized);\n  const prefix =\n    kind === \"classic\"\n      ? BILLING_MOLLIE_CLASSIC_WEBHOOK_PATH\n      : kind === \"events\"\n        ? BILLING_MOLLIE_EVENTS_WEBHOOK_PATH\n        : undefined;\n  if (prefix == null || normalized === prefix) {\n    return;\n  }\n  const rest = normalized.slice(prefix.length + 1);\n  if (rest.includes(\"/\") || !isBillingWebhookIngressBindingToken(rest)) {\n    return;\n  }\n  return rest;\n}\n\nexport function billingWebhookUrlTemplate(value: string): string {\n  try {\n    const parsed = new URL(value);\n    const token = billingWebhookIngressBindingToken(parsed.pathname);\n    if (token == null) {\n      return value;\n    }\n    parsed.pathname = `${parsed.pathname.slice(0, -token.length)}<binding-token>`;\n    return parsed.toString().replaceAll(\"%3Cbinding-token%3E\", \"<binding-token>\");\n  } catch {\n    return \"[invalid webhook URL]\";\n  }\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { BillingCredentialKind } from \"../runtime/credentials.ts\";\nimport {\n  type AthenaBillingIngestionConfig,\n  type AthenaBillingWebhooksConfig,\n  type BillingManagedWebhookEnablement,\n  type BillingSigningSecretSet,\n  DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n  type NormalizedAthenaBillingIngestionConfig,\n  type NormalizedAthenaBillingWebhooksConfig,\n  type NormalizedMollieWebhookProviderConfig,\n} from \"./types.ts\";\nimport { assertStableHttpsBillingPublicUrl } from \"./urls.ts\";\n\nconst DEFAULT_MOLLIE: NormalizedMollieWebhookProviderConfig = {\n  classic: { enabled: true },\n  nextGen: {\n    enabled: \"auto\",\n    eventTypes: DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n    previousSigningSecrets: [],\n  },\n  strategy: \"hybrid\",\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeEnablement(value: unknown): BillingManagedWebhookEnablement {\n  if (value === false) {\n    return false;\n  }\n  if (value === \"required\") {\n    return \"required\";\n  }\n  return \"auto\";\n}\n\nfunction stringList(value: unknown): readonly string[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.filter(\n    (entry): entry is string => typeof entry === \"string\" && entry.trim() !== \"\"\n  );\n}\n\nfunction normalizeMollieProvider(\n  raw: unknown\n): NormalizedMollieWebhookProviderConfig {\n  if (!isRecord(raw)) {\n    return { ...DEFAULT_MOLLIE, nextGen: { ...DEFAULT_MOLLIE.nextGen } };\n  }\n  const classic = isRecord(raw.classic) ? raw.classic : {};\n  const nextGen = isRecord(raw.nextGen) ? raw.nextGen : {};\n  const strategy =\n    raw.strategy === \"classic\" || raw.strategy === \"next_gen\"\n      ? raw.strategy\n      : \"hybrid\";\n  const eventTypes = stringList(nextGen.eventTypes);\n  return {\n    classic: { enabled: classic.enabled !== false },\n    nextGen: {\n      enabled: normalizeEnablement(nextGen.enabled),\n      eventTypes:\n        eventTypes.length > 0\n          ? eventTypes\n          : DEFAULT_MOLLIE_NEXT_GEN_EVENT_TYPES,\n      previousSigningSecrets: stringList(nextGen.previousSigningSecrets),\n      ...(typeof nextGen.signingSecret === \"string\" &&\n      nextGen.signingSecret.length > 0\n        ? { signingSecret: nextGen.signingSecret }\n        : {}),\n    },\n    strategy,\n  };\n}\n\nexport function normalizeAthenaBillingWebhooks(\n  input?: AthenaBillingWebhooksConfig\n): NormalizedAthenaBillingWebhooksConfig {\n  if (input === true) {\n    return {\n      enabled: true,\n      execution: \"embedded\",\n      management: \"automatic\",\n      providers: { mollie: normalizeMollieProvider(undefined) },\n    };\n  }\n  if (input === false || input === undefined) {\n    return {\n      enabled: false,\n      execution: \"embedded\",\n      management: \"manual\",\n      providers: { mollie: normalizeMollieProvider(undefined) },\n    };\n  }\n  const publicBaseUrl =\n    typeof input.publicBaseUrl === \"string\" && input.publicBaseUrl.trim()\n      ? input.publicBaseUrl.trim()\n      : undefined;\n  const secretMasterKey =\n    typeof input.secretMasterKey === \"string\" && input.secretMasterKey.trim()\n      ? input.secretMasterKey.trim()\n      : undefined;\n  return {\n    enabled: input.enabled !== false,\n    execution: input.execution === \"external\" ? \"external\" : \"embedded\",\n    management: input.management === \"manual\" ? \"manual\" : \"automatic\",\n    providers: {\n      mollie: normalizeMollieProvider(input.providers?.mollie),\n    },\n    ...(publicBaseUrl ? { publicBaseUrl } : {}),\n    ...(secretMasterKey ? { secretMasterKey } : {}),\n  };\n}\n\nexport function normalizeAthenaBillingIngestion(\n  input?: AthenaBillingIngestionConfig\n): NormalizedAthenaBillingIngestionConfig {\n  return {\n    webhooks: normalizeAthenaBillingWebhooks(input?.webhooks),\n  };\n}\n\nexport function signingSecretsFromWebhookConfig(\n  webhooks: NormalizedAthenaBillingWebhooksConfig\n): BillingSigningSecretSet {\n  const nextGen = webhooks.providers.mollie.nextGen;\n  return {\n    current:\n      typeof nextGen.signingSecret === \"string\"\n        ? nextGen.signingSecret.trim() || undefined\n        : nextGen.signingSecret,\n    previous: nextGen.previousSigningSecrets\n      .map((entry) => entry.trim())\n      .filter((entry) => entry.length > 0),\n  };\n}\n\nexport function flattenSigningSecrets(\n  secrets: BillingSigningSecretSet\n): readonly string[] {\n  const values = [\n    ...(secrets.current ? [secrets.current] : []),\n    ...secrets.previous,\n  ];\n  return [...new Set(values)];\n}\n\nexport function mollieCredentialSupportsManagedNextGen(\n  kind?: BillingCredentialKind\n): boolean {\n  return (\n    kind === \"advanced_access_token\" ||\n    kind === \"organization_access_token\" ||\n    kind === \"oauth_access_token\"\n  );\n}\n\nexport function assertAthenaBillingIngestion(input: {\n  appUrl?: string | null;\n  credentialKind?: BillingCredentialKind;\n  ingestion?: AthenaBillingIngestionConfig;\n  live?: boolean;\n}): NormalizedAthenaBillingIngestionConfig {\n  const normalized = normalizeAthenaBillingIngestion(input.ingestion);\n  const webhooks = normalized.webhooks;\n  if (!webhooks.enabled) {\n    return normalized;\n  }\n  assertStableHttpsBillingPublicUrl({\n    appUrl: input.appUrl,\n    live: input.live,\n    management: webhooks.management,\n    publicBaseUrl: webhooks.publicBaseUrl,\n    webhooksEnabled: webhooks.enabled,\n  });\n  if (\n    webhooks.providers.mollie.nextGen.enabled === \"required\" &&\n    !mollieCredentialSupportsManagedNextGen(input.credentialKind)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_INGESTION_NEXT_GEN_REQUIRED\",\n      'billing.ingestion.webhooks Mollie nextGen.enabled is \"required\" but the configured credential cannot register managed Next-gen webhooks (API keys are Classic-only).',\n      \"billing\"\n    );\n  }\n  if (\n    webhooks.providers.mollie.strategy === \"next_gen\" &&\n    webhooks.providers.mollie.nextGen.enabled === false\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n      \"Mollie webhook strategy next_gen cannot disable nextGen.\",\n      \"billing\"\n    );\n  }\n  return normalized;\n}\n","import { createHash } from \"node:crypto\";\n\nexport function fingerprintBillingSigningSecret(secret: string): string {\n  return 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  applicationId: string;\n  connectionId: string;\n}): string {\n  const full = `athena:${input.applicationId}:${input.connectionId}:billing`;\n  if (full.length <= MOLLIE_WEBHOOK_OWNERSHIP_NAME_MAX) {\n    return full;\n  }\n  const digest = createHash(\"sha256\")\n    .update(`${input.applicationId}\\0${input.connectionId}`, \"utf8\")\n    .digest(\"hex\")\n    .slice(0, 16);\n  return `athena:${digest}`;\n}\n\nexport function isAthenaOwnedWebhookName(\n  name: string | undefined,\n  marker: string\n): boolean {\n  if (name == null || name.length === 0) {\n    return false;\n  }\n  return name === marker || name.startsWith(`${marker}:`);\n}\n","export const BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_STATES = [\n  \"provider_registration_pending\",\n  \"provider_registered_secret_pending\",\n  \"secret_persisted_activation_pending\",\n  \"verification_pending\",\n  \"active\",\n  \"rotation_pending\",\n  \"rotation_secret_pending\",\n  \"attention_required\",\n  \"failed\",\n  \"verification_failed\",\n] as const;\n\nexport type BillingWebhookRegistrationLifecycleState =\n  (typeof BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_STATES)[number];\n\nexport function isBillingWebhookRegistrationLifecycleState(\n  value: string\n): value is BillingWebhookRegistrationLifecycleState {\n  return (\n    BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_STATES as readonly string[]\n  ).includes(value);\n}\n\nexport const BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_TRANSITIONS: Readonly<\n  Record<\n    BillingWebhookRegistrationLifecycleState,\n    readonly BillingWebhookRegistrationLifecycleState[]\n  >\n> = {\n  active: [\"rotation_pending\", \"attention_required\", \"failed\"],\n  attention_required: [],\n  failed: [],\n  provider_registered_secret_pending: [\n    \"secret_persisted_activation_pending\",\n    \"rotation_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  provider_registration_pending: [\n    \"provider_registered_secret_pending\",\n    \"rotation_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  rotation_pending: [\n    \"rotation_secret_pending\",\n    \"secret_persisted_activation_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  rotation_secret_pending: [\n    \"secret_persisted_activation_pending\",\n    \"active\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  secret_persisted_activation_pending: [\n    \"verification_pending\",\n    \"attention_required\",\n    \"failed\",\n  ],\n  verification_failed: [\"verification_pending\", \"attention_required\"],\n  verification_pending: [\"active\", \"verification_failed\", \"attention_required\"],\n};\n\nexport function billingWebhookRegistrationLifecycle(input: {\n  providerRegistered: boolean;\n  secretPersisted: boolean;\n  verificationPassed: boolean;\n}): BillingWebhookRegistrationLifecycleState {\n  if (!input.providerRegistered) {\n    return \"provider_registration_pending\";\n  }\n  if (!input.secretPersisted) {\n    return \"provider_registered_secret_pending\";\n  }\n  if (!input.verificationPassed) {\n    return \"verification_pending\";\n  }\n  return \"active\";\n}\n\nexport function assertBillingWebhookRegistrationLifecycle(\n  current: BillingWebhookRegistrationLifecycleState,\n  input: { hasSecret: boolean; next: BillingWebhookRegistrationLifecycleState }\n): void {\n  if (input.next === \"active\" && !input.hasSecret) {\n    throw new Error(\n      \"Webhook registration cannot become active without durable secret material.\"\n    );\n  }\n  if (current === input.next) {\n    return;\n  }\n  if (\n    !BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_TRANSITIONS[current].includes(\n      input.next\n    )\n  ) {\n    throw new Error(\n      `Illegal webhook registration lifecycle transition: ${current} -> ${input.next}.`\n    );\n  }\n}\n","import type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"./types.ts\";\nimport {\n  BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_STATES,\n  type BillingWebhookRegistrationLifecycleState,\n} from \"./lifecycle.ts\";\nimport type { BillingWebhookReconciliationState } from \"./types.ts\";\n\nexport interface BillingWebhookRegistrationStore {\n  get(input: {\n    connectionId: string;\n    kind: BillingWebhookRegistrationRecord[\"kind\"];\n  }): Promise<BillingWebhookRegistrationRecord | null>;\n  list(\n    connectionId: string\n  ): Promise<readonly BillingWebhookRegistrationRecord[]>;\n  touchLastDelivery(input: {\n    connectionId: string;\n    kind: BillingWebhookRegistrationRecord[\"kind\"];\n  }): Promise<void>;\n  upsert(record: BillingWebhookRegistrationRecord): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookRegistrationStore(): {\n  rows: BillingWebhookRegistrationRecord[];\n  store: BillingWebhookRegistrationStore;\n} {\n  const rows: BillingWebhookRegistrationRecord[] = [];\n  return {\n    rows,\n    store: {\n      async get(input) {\n        return (\n          rows.find(\n            (row) =>\n              row.connectionId === input.connectionId && row.kind === input.kind\n          ) ?? null\n        );\n      },\n      async list(connectionId) {\n        return rows.filter((row) => row.connectionId === connectionId);\n      },\n      async touchLastDelivery(input) {\n        const row = rows.find(\n          (entry) =>\n            entry.connectionId === input.connectionId &&\n            entry.kind === input.kind\n        );\n        if (row) {\n          row.lastDeliveryAt = new Date();\n        }\n      },\n      async upsert(record) {\n        const index = rows.findIndex(\n          (row) =>\n            row.connectionId === record.connectionId && row.kind === record.kind\n        );\n        if (index >= 0) {\n          rows[index] = record;\n          return;\n        }\n        rows.push(record);\n      },\n    },\n  };\n}\n\nexport function createPostgresBillingWebhookRegistrationStore(\n  sql: BillingSqlExecutor\n): BillingWebhookRegistrationStore {\n  return {\n    async get(input) {\n      const result = await sql.query(\n        `\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n        [input.connectionId, input.kind]\n      );\n      const row = result.rows[0];\n      return row ? mapRow(row) : null;\n    },\n    async list(connectionId) {\n      const result = await sql.query(\n        `\nSELECT * FROM billing.billing_webhook_registrations\nWHERE connection_id = $1::uuid\n`,\n        [connectionId]\n      );\n      return result.rows.map(mapRow);\n    },\n    async touchLastDelivery(input) {\n      await sql.query(\n        `\nUPDATE billing.billing_webhook_registrations\nSET last_delivery_at = now(), updated_at = now()\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n        [input.connectionId, input.kind]\n      );\n    },\n    async upsert(record) {\n      await sql.query(\n        `\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\tprovider_registration_idempotency_key, provider_registration_attempts,\n\tsecret_persistence_attempts, activation_attempts, last_provider_evidence,\n\tlifecycle_error, lifecycle_updated_at, reconciliation_state, created_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, $19, $20, $21, $22, $23::jsonb,\n\t$24::jsonb, $25, $26, 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\tprovider_registration_idempotency_key = EXCLUDED.provider_registration_idempotency_key,\n\tprovider_registration_attempts = EXCLUDED.provider_registration_attempts,\n\tsecret_persistence_attempts = EXCLUDED.secret_persistence_attempts,\n\tactivation_attempts = EXCLUDED.activation_attempts,\n\tlast_provider_evidence = EXCLUDED.last_provider_evidence,\n\tlifecycle_error = EXCLUDED.lifecycle_error,\n\tlifecycle_updated_at = EXCLUDED.lifecycle_updated_at,\n\treconciliation_state = EXCLUDED.reconciliation_state,\n\tupdated_at = now()\n`,\n        [\n          record.id,\n          record.connectionId,\n          record.provider,\n          record.providerWebhookId ?? null,\n          record.kind,\n          record.environment,\n          record.name,\n          record.url,\n          JSON.stringify(record.eventTypes),\n          record.status,\n          record.configHash,\n          record.secretVersion ?? null,\n          record.secretFingerprint ?? null,\n          record.lastReconciledAt ?? new Date(),\n          record.lastVerifiedAt ?? null,\n          record.lastDeliveryAt ?? null,\n          JSON.stringify(record.lastError ?? null),\n          JSON.stringify({}),\n          record.providerRegistrationIdempotencyKey ?? null,\n          record.providerRegistrationAttempts ?? 0,\n          record.secretPersistenceAttempts ?? 0,\n          record.activationAttempts ?? 0,\n          JSON.stringify(record.lastProviderEvidence ?? null),\n          JSON.stringify(record.lifecycleError ?? null),\n          record.lifecycleUpdatedAt ?? new Date(),\n          record.reconciliationState ?? null,\n        ]\n      );\n    },\n  };\n}\n\nfunction mapRow(\n  row: Record<string, unknown>\n): BillingWebhookRegistrationRecord {\n  const eventTypes = Array.isArray(row.event_types)\n    ? row.event_types.filter(\n        (entry): entry is string => typeof entry === \"string\"\n      )\n    : [];\n  return {\n    configHash: String(row.config_hash ?? \"\"),\n    connectionId: String(row.connection_id),\n    environment: row.environment === \"live\" ? \"live\" : \"test\",\n    eventTypes,\n    id: String(row.id),\n    kind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n    name: String(row.name ?? \"\"),\n    provider: String(row.provider),\n    ...(typeof row.provider_webhook_id === \"string\"\n      ? { providerWebhookId: row.provider_webhook_id }\n      : {}),\n    status:\n      (row.status as BillingWebhookRegistrationRecord[\"status\"]) ?? \"pending\",\n    url: String(row.url ?? \"\"),\n    ...(reconciliationState(row.reconciliation_state)\n      ? { reconciliationState: reconciliationState(row.reconciliation_state) }\n      : {}),\n    ...(typeof row.secret_fingerprint === \"string\"\n      ? { secretFingerprint: row.secret_fingerprint }\n      : {}),\n    ...(typeof row.secret_version === \"number\"\n      ? { secretVersion: row.secret_version }\n      : {}),\n    ...(typeof row.provider_registration_idempotency_key === \"string\"\n      ? {\n          providerRegistrationIdempotencyKey:\n            row.provider_registration_idempotency_key,\n        }\n      : {}),\n    ...(typeof row.provider_registration_attempts === \"number\"\n      ? { providerRegistrationAttempts: row.provider_registration_attempts }\n      : {}),\n    ...(typeof row.secret_persistence_attempts === \"number\"\n      ? { secretPersistenceAttempts: row.secret_persistence_attempts }\n      : {}),\n    ...(typeof row.activation_attempts === \"number\"\n      ? { activationAttempts: row.activation_attempts }\n      : {}),\n    ...(row.last_provider_evidence !== null &&\n    row.last_provider_evidence !== undefined\n      ? { lastProviderEvidence: row.last_provider_evidence }\n      : {}),\n    ...(row.lifecycle_error !== null && row.lifecycle_error !== undefined\n      ? { lifecycleError: row.lifecycle_error }\n      : {}),\n    ...(row.lifecycle_updated_at instanceof Date\n      ? { lifecycleUpdatedAt: row.lifecycle_updated_at }\n      : typeof row.lifecycle_updated_at === \"string\"\n        ? { lifecycleUpdatedAt: new Date(row.lifecycle_updated_at) }\n        : {}),\n    ...(row.last_verified_at instanceof Date\n      ? { lastVerifiedAt: row.last_verified_at }\n      : typeof row.last_verified_at === \"string\"\n        ? { lastVerifiedAt: new Date(row.last_verified_at) }\n        : {}),\n    ...(row.last_delivery_at instanceof Date\n      ? { lastDeliveryAt: row.last_delivery_at }\n      : typeof row.last_delivery_at === \"string\"\n        ? { lastDeliveryAt: new Date(row.last_delivery_at) }\n        : {}),\n    ...(row.last_reconciled_at instanceof Date\n      ? { lastReconciledAt: row.last_reconciled_at }\n      : typeof row.last_reconciled_at === \"string\"\n        ? { lastReconciledAt: new Date(row.last_reconciled_at) }\n        : {}),\n    ...(row.last_accepted_at instanceof Date\n      ? { lastAcceptedAt: row.last_accepted_at }\n      : typeof row.last_accepted_at === \"string\"\n        ? { lastAcceptedAt: new Date(row.last_accepted_at) }\n        : {}),\n    ...(row.last_rejected_at instanceof Date\n      ? { lastRejectedAt: row.last_rejected_at }\n      : typeof row.last_rejected_at === \"string\"\n        ? { lastRejectedAt: new Date(row.last_rejected_at) }\n        : {}),\n    ...(typeof row.last_rejection_code === \"string\"\n      ? { lastRejectionCode: row.last_rejection_code }\n      : {}),\n    ...(row.last_reconciliation_outcome === \"completed\" ||\n    row.last_reconciliation_outcome === \"failed\" ||\n    row.last_reconciliation_outcome === \"skipped\"\n      ? { lastReconciliationOutcome: row.last_reconciliation_outcome }\n      : {}),\n    ...(typeof row.last_ingress_stage === \"string\"\n      ? { lastIngressStage: row.last_ingress_stage }\n      : {}),\n    ...(row.last_error === null ? {} : { lastError: row.last_error }),\n  };\n}\n\nconst LEGACY_RECONCILIATION_STATES = [\n  \"create_pending\",\n  \"remote_created_secret_pending\",\n  \"rotation_required\",\n  \"update_pending\",\n] as const;\n\nfunction reconciliationState(\n  value: unknown\n): BillingWebhookReconciliationState | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  if (\n    (\n      BILLING_WEBHOOK_REGISTRATION_LIFECYCLE_STATES as readonly string[]\n    ).includes(value) ||\n    (LEGACY_RECONCILIATION_STATES as readonly string[]).includes(value)\n  ) {\n    return value as\n      | BillingWebhookRegistrationLifecycleState\n      | (typeof LEGACY_RECONCILIATION_STATES)[number];\n  }\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  BHD: 3,\n  BIF: 0,\n  CLF: 4,\n  CLP: 0,\n  DJF: 0,\n  GNF: 0,\n  IQD: 3,\n  ISK: 0,\n  JOD: 3,\n  JPY: 0,\n  KMF: 0,\n  KRW: 0,\n  KWD: 3,\n  LYD: 3,\n  OMR: 3,\n  PYG: 0,\n  RWF: 0,\n  TND: 3,\n  UGX: 0,\n  UYI: 0,\n  UYW: 4,\n  VND: 0,\n  VUV: 0,\n  XAF: 0,\n  XOF: 0,\n  XPF: 0,\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction exponentForCurrency(currency: string): number {\n  return ISO_4217_MINOR_UNITS[currency] ?? 2;\n}\n\nfunction digitsAreZero(digits: string): boolean {\n  for (const ch of digits) {\n    if (ch !== \"0\") {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function parseBillingMoney(value: unknown): BillingMoney {\n  if (!isRecord(value)) {\n    throw new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    throw new Error(\"ATHENA_BILLING_MONEY_INVALID\");\n  }\n  const currency = value.currency.trim().toUpperCase();\n  if (!CURRENCY_PATTERN.test(currency)) {\n    throw new Error(\"ATHENA_BILLING_MONEY_CURRENCY_INVALID\");\n  }\n  const raw = value.value.trim();\n  if (!MONEY_PATTERN.test(raw)) {\n    throw new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n  }\n  return { currency, value: raw };\n}\n\nfunction stripLeadingZeros(digits: string): string {\n  let index = 0;\n  while (index < digits.length - 1 && digits[index] === \"0\") {\n    index += 1;\n  }\n  return digits.slice(index);\n}\n\nfunction scaledValue(raw: string, exponent: number): string {\n  const negative = raw.startsWith(\"-\");\n  const unsigned = negative ? raw.slice(1) : raw;\n  const dot = unsigned.indexOf(\".\");\n  const intDigits = stripLeadingZeros(\n    dot < 0 ? unsigned : unsigned.slice(0, dot)\n  );\n  const fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n  if (intDigits.length > MAX_MONEY_INTEGER_DIGITS) {\n    throw new Error(\"ATHENA_BILLING_MONEY_VALUE_INVALID\");\n  }\n  if (fracDigits.length > exponent) {\n    throw new Error(\"ATHENA_BILLING_MONEY_SCALE_INVALID\");\n  }\n  const paddedFrac = fracDigits.padEnd(exponent, \"0\");\n  const body = exponent === 0 ? intDigits : `${intDigits}.${paddedFrac}`;\n  return negative ? `-${body}` : body;\n}\n\nexport function normalizeBillingMoney(value: unknown): BillingMoney {\n  const parsed = parseBillingMoney(value);\n  const exponent = exponentForCurrency(parsed.currency);\n  return {\n    currency: parsed.currency,\n    value: scaledValue(parsed.value, exponent),\n  };\n}\n\nexport function assertBillingMoney(value: unknown): BillingMoney {\n  const normalized = normalizeBillingMoney(value);\n  const unsigned = normalized.value.startsWith(\"-\")\n    ? normalized.value.slice(1)\n    : normalized.value;\n  const dot = unsigned.indexOf(\".\");\n  const intDigits = dot < 0 ? unsigned : unsigned.slice(0, dot);\n  const fracDigits = dot < 0 ? \"\" : unsigned.slice(dot + 1);\n  if (\n    normalized.value.startsWith(\"-\") ||\n    digitsAreZero(intDigits + fracDigits)\n  ) {\n    throw new Error(\"ATHENA_BILLING_MONEY_NON_POSITIVE\");\n  }\n  return normalized;\n}\n\nfunction moneyToMinorUnits(money: BillingMoney): {\n  currency: string;\n  exponent: number;\n  minor: bigint;\n} {\n  const normalized = normalizeBillingMoney(money);\n  const exponent = exponentForCurrency(normalized.currency);\n  const negative = normalized.value.startsWith(\"-\");\n  const unsigned = negative ? normalized.value.slice(1) : normalized.value;\n  const dot = unsigned.indexOf(\".\");\n  const intDigits = dot < 0 ? unsigned : unsigned.slice(0, dot);\n  const fracDigits = (dot < 0 ? \"\" : unsigned.slice(dot + 1)).padEnd(\n    exponent,\n    \"0\"\n  );\n  const digits = `${intDigits}${fracDigits}`;\n  const minor = BigInt(digits.length === 0 ? \"0\" : digits);\n  return {\n    currency: normalized.currency,\n    exponent,\n    minor: negative ? -minor : minor,\n  };\n}\n\nfunction moneyFromMinorUnits(input: {\n  currency: string;\n  exponent: number;\n  minor: bigint;\n}): BillingMoney {\n  const negative = input.minor < 0n;\n  const unsigned = negative ? -input.minor : input.minor;\n  const digits = unsigned.toString().padStart(input.exponent + 1, \"0\");\n  const split = digits.length - input.exponent;\n  const intDigits = stripLeadingZeros(digits.slice(0, split));\n  const fracDigits = digits.slice(split);\n  const value =\n    input.exponent === 0\n      ? intDigits\n      : `${intDigits}.${fracDigits}`;\n  return {\n    currency: input.currency,\n    value: negative ? `-${value}` : value,\n  };\n}\n\nexport function addBillingMoney(\n  left: BillingMoney,\n  right: BillingMoney\n): BillingMoney {\n  const a = moneyToMinorUnits(left);\n  const b = moneyToMinorUnits(right);\n  if (a.currency !== b.currency) {\n    throw new Error(\"ATHENA_BILLING_MONEY_CURRENCY_MISMATCH\");\n  }\n  return moneyFromMinorUnits({\n    currency: a.currency,\n    exponent: a.exponent,\n    minor: a.minor + b.minor,\n  });\n}\n\nexport function scaleBillingMoney(\n  money: BillingMoney,\n  quantity: number\n): BillingMoney {\n  if (!Number.isInteger(quantity) || quantity < 1) {\n    throw new Error(\"ATHENA_BILLING_QUANTITY_INVALID\");\n  }\n  const a = moneyToMinorUnits(money);\n  return moneyFromMinorUnits({\n    currency: a.currency,\n    exponent: a.exponent,\n    minor: a.minor * BigInt(quantity),\n  });\n}\n","import {\n  type BillingEnvironment,\n  resolveBillingEnvironment as resolveRuntimeBillingEnvironment,\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  credentials?: { live?: unknown; test?: unknown };\n  testMode?: boolean;\n}): BillingLiveCredentialSelection {\n  return resolveRuntimeBillingEnvironment({\n    testMode: input?.testMode,\n  });\n}\n\nexport function assertBillingLiveCredentialSelection(input?: {\n  credentials?: { live?: unknown; test?: unknown };\n  testMode?: boolean;\n}): BillingLiveCredentialSelection {\n  return resolveBillingEnvironment(input);\n}\n","export interface BillingSelfCheckoutLineRequest {\n  priceId: string;\n  quantity: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function resolveSelfCheckoutLineRequests(\n  payload: Record<string, unknown>\n): BillingSelfCheckoutLineRequest[] {\n  const rawLines = payload.lines;\n  if (Array.isArray(rawLines) && rawLines.length > 0) {\n    return rawLines.map((entry, index) => {\n      if (!isRecord(entry)) {\n        throw new Error(`ATHENA_BILLING_FIELD_REQUIRED:lines[${index}].priceId`);\n      }\n      const priceId = entry.priceId;\n      if (typeof priceId !== \"string\" || priceId.trim() === \"\") {\n        throw new Error(`ATHENA_BILLING_FIELD_REQUIRED:lines[${index}].priceId`);\n      }\n      const quantity = entry.quantity;\n      if (quantity == null) {\n        return { priceId: priceId.trim(), quantity: 1 };\n      }\n      if (typeof quantity !== \"number\" || !Number.isInteger(quantity) || quantity < 1) {\n        throw new Error(`ATHENA_BILLING_FIELD_REQUIRED:lines[${index}].quantity`);\n      }\n      return { priceId: priceId.trim(), quantity };\n    });\n  }\n  const priceId = payload.priceId;\n  if (typeof priceId === \"string\" && priceId.trim() !== \"\") {\n    return [{ priceId: priceId.trim(), quantity: 1 }];\n  }\n  return [];\n}\n","const MAX_IDEMPOTENCY_KEY_LENGTH = 64;\nconst FORBIDDEN_IDEMPOTENCY_CHARS = new RegExp(\n  `[${String.fromCharCode(0)}-${String.fromCharCode(31)}${String.fromCharCode(127)}\\\\s]`\n);\n\nexport function assertBillingIdempotencyKey(\n  key: unknown\n): asserts key is string {\n  if (typeof key !== \"string\" || key.trim() === \"\") {\n    throw new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_REQUIRED\");\n  }\n  const normalized = key.trim();\n  if (\n    normalized.length > MAX_IDEMPOTENCY_KEY_LENGTH ||\n    FORBIDDEN_IDEMPOTENCY_CHARS.test(normalized)\n  ) {\n    throw new Error(\"ATHENA_BILLING_IDEMPOTENCY_KEY_INVALID\");\n  }\n}\n","import { AthenaBillingError } from \"../errors.ts\";\nimport type { BillingOperation } from \"../runtime/capabilities.ts\";\nimport { resolveSelfCheckoutLineRequests } from \"../runtime/self/checkout-lines.ts\";\nimport type { BillingMoney } from \"../types.ts\";\nimport { assertBillingIdempotencyKey } from \"./idempotency.ts\";\nimport { assertBillingMoney, normalizeBillingMoney } from \"./money.ts\";\nimport type { BillingOperationSafetyProfile } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requiredNonEmptyString(value: unknown, field: string): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new Error(`ATHENA_BILLING_FIELD_REQUIRED:${field}`);\n  }\n  return value;\n}\n\nfunction requiredMoney(value: unknown): BillingMoney {\n  return assertBillingMoney(value);\n}\n\nfunction requiredWebhookEventTypes(\n  value: unknown,\n  operation: \"webhooks.create\" | \"webhooks.update\"\n): string[] {\n  if (\n    !Array.isArray(value) ||\n    value.length === 0 ||\n    value.some((entry) => typeof entry !== \"string\" || entry.trim() === \"\")\n  ) {\n    throw new AthenaBillingError({\n      body: { field: \"eventTypes\", operation },\n      code: \"ATHENA_BILLING_INVALID_REQUEST\",\n      endpoint: \"\",\n      message: \"Webhook eventTypes must contain at least one non-empty string.\",\n      method: operation === \"webhooks.create\" ? \"POST\" : \"PATCH\",\n      status: 400,\n    });\n  }\n  return value.map((entry) => entry.trim());\n}\n\nexport function validateBillingOperationPayload(input: {\n  deferIdempotency?: boolean;\n  operation: BillingOperation;\n  payload: unknown;\n  profile: BillingOperationSafetyProfile;\n}): Record<string, unknown> {\n  if (!isRecord(input.payload)) {\n    throw new Error(\"ATHENA_BILLING_PAYLOAD_INVALID\");\n  }\n  const next: Record<string, unknown> = { ...input.payload };\n  if (input.profile.money === \"required\") {\n    next.amount = requiredMoney(next.amount);\n  } else if (next.amount != null) {\n    next.amount = normalizeBillingMoney(next.amount);\n  }\n  switch (input.operation) {\n    case \"refunds.create\":\n      requiredNonEmptyString(next.paymentId, \"paymentId\");\n      break;\n    case \"paymentLinks.create\":\n      requiredNonEmptyString(next.description, \"description\");\n      break;\n    case \"subscriptions.create\":\n      requiredNonEmptyString(next.customerId, \"customerId\");\n      requiredNonEmptyString(next.interval, \"interval\");\n      requiredNonEmptyString(next.description, \"description\");\n      break;\n    case \"checkout.create\":\n      requiredNonEmptyString(next.successUrl, \"successUrl\");\n      break;\n    case \"self.checkout.create\": {\n      const lines = resolveSelfCheckoutLineRequests(next);\n      if (lines.length === 0) {\n        requiredNonEmptyString(next.priceId, \"priceId\");\n      }\n      const hasSuccessUrl =\n        typeof next.successUrl === \"string\" && next.successUrl.trim() !== \"\";\n      const hasCancelUrl =\n        typeof next.cancelUrl === \"string\" && next.cancelUrl.trim() !== \"\";\n      if (!(hasSuccessUrl || hasCancelUrl)) {\n        throw new Error(\"ATHENA_BILLING_FIELD_REQUIRED:successUrl|cancelUrl\");\n      }\n      next.lines = lines;\n      next.priceId = lines[0]?.priceId;\n      break;\n    }\n    case \"self.checkout.resume\":\n      requiredNonEmptyString(next.returnToken, \"returnToken\");\n      break;\n    case \"self.subscription.enroll\":\n      requiredNonEmptyString(next.priceId, \"priceId\");\n      break;\n    case \"self.subscription.change\":\n      requiredNonEmptyString(next.priceId, \"priceId\");\n      break;\n    case \"webhooks.create\":\n    case \"webhooks.update\":\n      if (next.eventTypes !== undefined) {\n        next.eventTypes = requiredWebhookEventTypes(\n          next.eventTypes,\n          input.operation\n        );\n      }\n      break;\n    default:\n      break;\n  }\n  if (\n    input.profile.idempotency === \"required_caller_owned\" &&\n    input.deferIdempotency !== true\n  ) {\n    assertBillingIdempotencyKey(next.idempotencyKey);\n  }\n  return 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  /** Defer caller-owned idempotency until after capability gating. */\n  idempotency?: \"enforce\" | \"defer\";\n  operation: BillingOperation;\n  payload: unknown;\n  testMode?: boolean;\n}\n\nexport interface BillingPreparedCommand {\n  readonly environment: {\n    readonly name: \"test\" | \"live\";\n    readonly testMode: boolean;\n  };\n  readonly operation: BillingOperation;\n  readonly payload: Readonly<Record<string, unknown>>;\n  readonly profile: BillingOperationSafetyProfile;\n}\n\nexport function prepareBillingCommand(\n  input: PrepareBillingCommandInput\n): BillingPreparedCommand {\n  const profile = BILLING_OPERATION_SAFETY[input.operation];\n  if (profile == null) {\n    throw new Error(`ATHENA_BILLING_OPERATION_UNKNOWN:${input.operation}`);\n  }\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  });\n  const payload = validateBillingOperationPayload({\n    deferIdempotency: input.idempotency === \"defer\",\n    operation: input.operation,\n    payload: input.payload,\n    profile,\n  });\n  return Object.freeze({\n    environment: Object.freeze({\n      name: environment.name,\n      testMode: environment.testMode,\n    }),\n    operation: input.operation,\n    payload: Object.freeze(payload),\n    profile,\n  });\n}\n\n/** Enforce deferred idempotency after capability and authority have been resolved. */\nexport function finalizeBillingCommand(\n  input: Omit<PrepareBillingCommandInput, \"idempotency\">\n): BillingPreparedCommand {\n  return prepareBillingCommand({\n    ...input,\n    idempotency: \"enforce\",\n  });\n}\n","export class AthenaBillingSubjectError extends Error {\n  readonly code: string;\n  readonly conflict?: string;\n  readonly status: number;\n\n  constructor(input: {\n    code: string;\n    conflict?: string;\n    message: string;\n    status: number;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingSubjectError\";\n    this.code = input.code;\n    this.status = input.status;\n    if (input.conflict != null) {\n      this.conflict = input.conflict;\n    }\n  }\n}\n\nexport function billingSubjectNotFound(\n  message = \"Billing document not found.\"\n): AthenaBillingSubjectError {\n  return new AthenaBillingSubjectError({\n    code: \"ATHENA_BILLING_NOT_FOUND\",\n    message,\n    status: 404,\n  });\n}\n\nexport function isAthenaBillingSubjectError(\n  error: unknown\n): error is AthenaBillingSubjectError {\n  if (error instanceof AthenaBillingSubjectError) {\n    return true;\n  }\n  if (error == null || typeof error !== \"object\") {\n    return false;\n  }\n  const record = error as { code?: unknown; name?: unknown; status?: unknown };\n  return (\n    record.code === \"ATHENA_BILLING_NOT_FOUND\" ||\n    record.name === \"AthenaBillingSubjectError\" ||\n    (typeof record.code === \"string\" &&\n      record.code.startsWith(\"ATHENA_BILLING_SUBJECT_\") &&\n      typeof record.status === \"number\")\n  );\n}\n\nexport function billingSubjectConflict(\n  message = \"Billing subject binding is in conflict.\"\n): AthenaBillingSubjectError {\n  return new AthenaBillingSubjectError({\n    code: \"ATHENA_BILLING_SUBJECT_CONFLICT\",\n    message,\n    status: 409,\n  });\n}\n\nexport const SUBSCRIPTION_ALREADY_ACTIVE =\n  \"subscription_already_active\" as const;\n\nexport function billingSubscriptionAlreadyActive(\n  message = \"An active subscription already exists for this subject.\"\n): AthenaBillingSubjectError {\n  return new AthenaBillingSubjectError({\n    code: \"ATHENA_BILLING_SUBJECT_CONFLICT\",\n    conflict: SUBSCRIPTION_ALREADY_ACTIVE,\n    message,\n    status: 409,\n  });\n}\n","import { mollieCredentialSupportsManagedNextGen } from \"../../../../ingestion/config.ts\";\nimport type {\n  BillingProviderBinding,\n  BillingWebhookManagementCapability,\n} from \"../types.ts\";\n\nexport function resolveMollieWebhookManagementCapability(\n  binding: BillingProviderBinding\n): BillingWebhookManagementCapability {\n  const live = binding.credentials.live;\n  const test = binding.credentials.test;\n  const kind = live?.kind ?? test?.kind;\n  if (\n    kind === \"api_key\" ||\n    kind === \"secret_key\" ||\n    kind === \"restricted_key\"\n  ) {\n    return {\n      classic: true,\n      nextGen: {\n        available: false,\n        list: false,\n        reason: \"api_key_classic_only\",\n        write: false,\n      },\n    };\n  }\n  if (mollieCredentialSupportsManagedNextGen(kind)) {\n    const authority = binding.providerConfig.authority;\n    const scope =\n      authority && typeof authority === \"object\"\n        ? (authority as { scope?: { kind?: unknown } }).scope\n        : undefined;\n    const permissions =\n      authority && typeof authority === \"object\"\n        ? (\n            authority as {\n              permissions?: {\n                \"webhooks.read\"?: unknown;\n                \"webhooks.write\"?: unknown;\n                webhooks?: { read?: unknown; write?: unknown };\n              };\n            }\n          ).permissions\n        : undefined;\n    const webhooksRead =\n      permissions?.[\"webhooks.read\"] ?? permissions?.webhooks?.read;\n    const webhooksWrite =\n      permissions?.[\"webhooks.write\"] ?? permissions?.webhooks?.write;\n    if (scope?.kind !== \"organization\" || webhooksWrite !== true) {\n      return {\n        classic: true,\n        nextGen: {\n          available: false,\n          list: scope?.kind === \"organization\" && webhooksRead === true,\n          reason: \"credential_missing_webhooks_write\",\n          write: false,\n        },\n      };\n    }\n    return {\n      classic: true,\n      nextGen: {\n        available: true,\n        list: webhooksRead === true,\n        reason: \"verified_organization_webhooks_write\",\n        write: true,\n      },\n    };\n  }\n  return {\n    classic: true,\n    nextGen: {\n      available: false,\n      list: false,\n      reason: \"credential_missing_webhooks_write\",\n      write: false,\n    },\n  };\n}\n","import { randomBytes } from \"node:crypto\";\nimport {\n  isBillingWebhookIngressBindingToken,\n  resolveBillingIngressEndpoints,\n} from \"../../../ingestion/urls.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type { BillingSqlExecutor } from \"../../../subject/repository.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport { resolveBillingCredential } from \"../../credentials.ts\";\nimport { resolveBillingEnvironment } from \"../../environment.ts\";\nimport {\n  createPersistedProviderBinding,\n} from \"../providers/connection-binding.ts\";\nimport {\n  configuredProviderSlotEntries,\n  normalizeBillingProviderConfiguration,\n} from \"../providers/configuration/index.ts\";\nimport type { BillingConnectionIdentity } from \"./identity.ts\";\nimport {\n  type BillingConnectionIntent,\n  createBillingConnectionIntent,\n  convergeBillingConnections,\n} from \"./coordinator.ts\";\nimport { createBillingConvergenceController } from \"./convergence-controller.ts\";\n\nexport interface MaterializedBillingConnection {\n  accountReference: string;\n  classicWebhookUrl?: string;\n  credentialReference: string;\n  eventsWebhookUrl?: string;\n  id: string;\n  provider: BillingProviderName;\n  webhookIngressToken?: string;\n}\n\nexport interface MaterializeConfiguredBillingConnectionsResult {\n  connections: readonly MaterializedBillingConnection[];\n}\n\nexport interface ConfiguredBillingConnectionIntent {\n  accountReference: string;\n  credentialKind: string;\n  credentialReference: string;\n  environment: \"test\" | \"live\";\n  identity: BillingConnectionIdentity;\n  provider: BillingProviderName;\n  /**\n   * Provider-confirmed remote account identity (e.g. a Mollie organization\n   * id returned by discovery). Null until verification — never invent one\n   * from config. `accountReference` stays the local upsert identity.\n   */\n  providerAccountId: string | null;\n}\n\nfunction configuredBillingProviderConnectionIntents(input: {\n  applicationId: string;\n  configuredProviders?: BillingProviderConfigMap;\n  provider?: BillingProviderName;\n  testMode?: boolean;\n}): readonly BillingConnectionIntent[] {\n  const applicationId = input.applicationId.trim();\n  if (applicationId.length === 0) {\n    return [];\n  }\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  }).name;\n  const configured = normalizeBillingProviderConfiguration({\n    configuredProviders: input.configuredProviders,\n    environment,\n  });\n  return configuredProviderSlotEntries(configured)\n    .filter(\n      (slot) => input.provider == null || slot.provider === input.provider,\n    )\n    .map((slot) =>\n      createBillingConnectionIntent({\n        applicationId,\n        environment,\n        slot,\n      }),\n    );\n}\n\nexport function configuredBillingConnectionIntents(input: {\n  applicationId: string;\n  configuredProviders?: BillingProviderConfigMap;\n  provider?: BillingProviderName;\n  testMode?: boolean;\n}): readonly ConfiguredBillingConnectionIntent[] {\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  }).name;\n  const providerIntents = configuredBillingProviderConnectionIntents(input);\n  const intents: ConfiguredBillingConnectionIntent[] = [];\n  for (const providerIntent of providerIntents) {\n    intents.push({\n      accountReference: providerIntent.localIdentity.accountReference,\n      credentialKind: providerIntent.slot.credentialKind,\n      credentialReference: providerIntent.slot.credentialReference,\n      environment,\n      identity: {\n        credentialReference: providerIntent.slot.credentialReference,\n        environment,\n        provider: providerIntent.provider,\n        ...(providerIntent.slot.key == null\n          ? {}\n          : { scopeKey: providerIntent.slot.key }),\n      },\n      provider: providerIntent.provider,\n      providerAccountId: null,\n    });\n  }\n  return intents;\n}\n\nconst CONFIGURED_CONNECTION_INIT = Symbol.for(\n  \"@xylex-group/athena.billingConfiguredConnectionInit\"\n);\n\ntype ConfiguredConnectionInitCache = ReturnType<\n  typeof createBillingConvergenceController<MaterializeConfiguredBillingConnectionsResult>\n>;\n\nfunction configuredConnectionInitCache(): ConfiguredConnectionInitCache {\n  const holder = globalThis as typeof globalThis & {\n    [CONFIGURED_CONNECTION_INIT]?: ConfiguredConnectionInitCache;\n  };\n  holder[CONFIGURED_CONNECTION_INIT] ??=\n    createBillingConvergenceController<MaterializeConfiguredBillingConnectionsResult>();\n  return holder[CONFIGURED_CONNECTION_INIT];\n}\n\n/**\n * Process-global materialize identity. Environment is part of the key so\n * test and live do not share a cached result. Generation is not: HMR must\n * reuse the in-flight/completed promise instead of opening another Neon\n * connection during Next compile.\n */\nexport function configuredBillingConnectionInitKey(input: {\n  applicationId: string;\n  databaseIdentity?: string;\n  provider?: BillingProviderName;\n  testMode?: boolean;\n}): string {\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  }).name;\n  return `${input.applicationId.trim()}\\0${input.databaseIdentity ?? \"\"}\\0${environment}\\0${input.provider ?? \"*\"}`;\n}\n\n/**\n * One initialization attempt per process runtime. Concurrent startup callers\n * share it. Failed attempts remain observable, while recovery explicitly\n * starts a later generation.\n */\nexport function singleFlightConfiguredBillingConnectionMaterialize(\n  key: string,\n  run: () => Promise<MaterializeConfiguredBillingConnectionsResult>\n): Promise<MaterializeConfiguredBillingConnectionsResult> {\n  return configuredConnectionInitCache().start(key, run);\n}\n\nexport function retryConfiguredBillingConnectionMaterialize(\n  key: string,\n  run: () => Promise<MaterializeConfiguredBillingConnectionsResult>,\n  project?: (\n    result: MaterializeConfiguredBillingConnectionsResult,\n  ) => Promise<void> | void,\n): Promise<MaterializeConfiguredBillingConnectionsResult> {\n  const current = configuredConnectionInitCache().current(key);\n  if (current?.state === \"running\") {\n    const runningGeneration = current.generation;\n    return current.promise\n      .catch(() => undefined)\n      .then(() => {\n        const settled = configuredConnectionInitCache().current(key);\n        if (runningGeneration === 1 && settled?.generation === 1) {\n          return configuredConnectionInitCache().retry(key, run);\n        }\n        return settled?.promise ?? configuredConnectionInitCache().retry(key, run);\n      })\n      .then(async (result) => {\n        await project?.(result);\n        return result;\n      });\n  }\n  return configuredConnectionInitCache()\n    .retry(key, run)\n    .then(async (result) => {\n      await project?.(result);\n      return result;\n    });\n}\n\nexport function configuredBillingConnectionConvergenceGeneration(\n  key: string\n): number {\n  return configuredConnectionInitCache().current(key)?.generation ?? 0;\n}\n\nfunction upsertConfiguredConnectionSql(input: {\n  accountReference: string;\n  applicationId: string;\n  credentialKind: string;\n  credentialReference: string;\n  environment: \"test\" | \"live\";\n  provider: BillingProviderName;\n  providerAccountId: string | null;\n  webhookIngressToken: string;\n}): { params: readonly unknown[]; sql: string } {\n  return {\n    params: [\n      input.applicationId,\n      input.provider,\n      input.environment,\n      input.environment,\n      input.credentialKind,\n      input.credentialReference,\n      input.providerAccountId,\n      input.accountReference,\n      input.webhookIngressToken,\n    ],\n    sql: `\nINSERT INTO billing.billing_provider_connections (\n\towner_kind,\n\towner_id,\n\tprovider,\n\tmode,\n\tenvironment,\n\tstatus,\n\tcredential_kind,\n\tcredential_reference,\n\tprovider_account_id,\n\taccount_reference,\n\tscopes,\n\tconfig,\n\tmetadata\n)\nVALUES (\n\t'tenant',\n\t$1,\n\t$2,\n\t$3,\n\t$4,\n\t'active',\n\t$5,\n\t$6,\n\t$7,\n\t$8,\n\t'[]'::jsonb,\n\t'{}'::jsonb,\n\tjsonb_build_object(\n\t\t'managedBy', 'application_config',\n\t\t'webhookIngressToken', $9::text\n\t)\n)\nON CONFLICT (owner_kind, owner_id, provider, environment, credential_reference)\nWHERE deleted_at IS NULL\nDO UPDATE SET\n\tstatus = 'active',\n\tcredential_kind = EXCLUDED.credential_kind,\n\tcredential_reference = EXCLUDED.credential_reference,\n\tmode = EXCLUDED.mode,\n\tenvironment = EXCLUDED.environment,\n\tprovider_account_id = COALESCE(\n\t\tEXCLUDED.provider_account_id,\n\t\tbilling.billing_provider_connections.provider_account_id\n\t),\n\taccount_reference = EXCLUDED.account_reference,\n\tscopes = EXCLUDED.scopes,\n\tconfig = EXCLUDED.config,\n\tmetadata = COALESCE(billing.billing_provider_connections.metadata, '{}'::jsonb)\n\t\t|| jsonb_build_object('managedBy', 'application_config')\n\t\t|| jsonb_build_object(\n\t\t\t'webhookIngressToken',\n\t\t\tCOALESCE(\n\t\t\t\tNULLIF(\n\t\t\t\t\tbilling.billing_provider_connections.metadata->>'webhookIngressToken',\n\t\t\t\t\t''\n\t\t\t\t),\n\t\t\t\tEXCLUDED.metadata->>'webhookIngressToken'\n\t\t\t)\n\t\t),\n\tupdated_at = now()\nRETURNING id::text AS id,\n\tmetadata->>'webhookIngressToken' AS webhook_ingress_token\n`,\n  };\n}\n\n/**\n * Disable managed connections in the other billing environment.\n * Call only after the candidate connection's remote webhook registration is\n * confirmed — materialize must not do this, or Mollie still posting the old\n * binding token 404s before the replacement URL is live.\n */\nexport async function supersedeOtherEnvironmentBillingConnections(input: {\n  applicationId: string;\n  credentialReference: string;\n  environment: \"test\" | \"live\";\n  id: string;\n  provider: BillingProviderName;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  const statement = supersedeOtherEnvironmentSql(input);\n  await input.sql.query(statement.sql, statement.params);\n}\n\nfunction supersedeOtherEnvironmentSql(input: {\n  applicationId: string;\n  credentialReference: string;\n  environment: \"test\" | \"live\";\n  id: string;\n  provider: BillingProviderName;\n}): { params: readonly unknown[]; sql: string } {\n  return {\n    params: [\n      input.environment,\n      input.credentialReference,\n      input.applicationId,\n      input.provider,\n      input.id,\n      input.credentialReference,\n      input.environment,\n    ],\n    sql: `\nUPDATE billing.billing_provider_connections\nSET status = 'disabled',\n\tupdated_at = now(),\n\tmetadata = COALESCE(metadata, '{}'::jsonb)\n\t\t|| jsonb_build_object(\n\t\t\t'managedBy', 'application_config',\n\t\t\t'supersededByEnvironment', $1::text,\n\t\t\t'supersededByCredentialReference', $2::text\n\t\t)\nWHERE deleted_at IS NULL\n  AND status = 'active'\n  AND owner_kind = 'tenant'\n  AND owner_id = $3\n  AND lower(provider) = lower($4)\n  AND id::text <> $5\n  AND (\n    credential_reference = $6\n    OR (\n      position(':' in credential_reference) = 0\n      AND environment <> $7\n    )\n  )\n`,\n  };\n}\n\nfunction mintWebhookIngressToken(): string {\n  return randomBytes(24).toString(\"base64url\");\n}\n\nfunction assertNoSecretMaterial(value: unknown, label: string): void {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  const lowered = value.toLowerCase();\n  if (\n    lowered.startsWith(\"access_\") ||\n    lowered.startsWith(\"live_\") ||\n    lowered.startsWith(\"test_\") ||\n    lowered.startsWith(\"sk_\") ||\n    lowered.includes(\"secret\")\n  ) {\n    throw new Error(\n      `Configured billing connection ${label} must not contain credential material.`\n    );\n  }\n}\n\nfunction assertConfiguredIntentCredentials(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  intents: readonly ConfiguredBillingConnectionIntent[];\n}): void {\n  for (const intent of input.intents) {\n    const binding = createPersistedProviderBinding({\n      configuredProviders: input.configuredProviders,\n      connectionId: intent.accountReference,\n      credentialReference: intent.credentialReference,\n      provider: intent.provider,\n    });\n    resolveBillingCredential({\n      binding,\n      provider: intent.provider,\n      slot: intent.credentialReference,\n      testMode: intent.environment === \"test\",\n    });\n  }\n}\n\nexport async function materializeConfiguredBillingConnections(input: {\n  applicationId: string;\n  appUrl?: string | null;\n  configuredProviders?: BillingProviderConfigMap;\n  publicBaseUrl?: string | null;\n  provider?: BillingProviderName;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<MaterializeConfiguredBillingConnectionsResult> {\n  const applicationId = input.applicationId.trim();\n  const testMode = resolveBillingEnvironment({\n    testMode: input.testMode,\n  }).testMode;\n  const intents = configuredBillingConnectionIntents({\n    applicationId,\n    configuredProviders: input.configuredProviders,\n    provider: input.provider,\n    testMode,\n  });\n  const providerIntents = configuredBillingProviderConnectionIntents({\n    applicationId,\n    configuredProviders: input.configuredProviders,\n    provider: input.provider,\n    testMode,\n  });\n  assertConfiguredIntentCredentials({\n    configuredProviders: input.configuredProviders,\n    intents,\n  });\n  for (const intent of intents) {\n    assertNoSecretMaterial(intent.credentialReference, \"credential_reference\");\n    assertNoSecretMaterial(intent.accountReference, \"account_reference\");\n  }\n  if (intents.length > 0) {\n    const duplicates = await input.sql.query(\n      `SELECT owner_kind, owner_id, provider, environment, credential_reference, COUNT(*)::int AS n\n\t\t\t FROM billing.billing_provider_connections\n\t\t\t WHERE deleted_at IS NULL\n\t\t\t GROUP BY owner_kind, owner_id, provider, environment, credential_reference\n\t\t\t HAVING COUNT(*) > 1\n\t\t\t LIMIT 1`\n    );\n    if (duplicates.rows[0]) {\n      throw new Error(\n        \"ATHENA_BILLING: duplicate owner-slot connections exist; run an explicit remediation migration before materialize.\"\n      );\n    }\n  }\n  const intentsBySlot = new Map(\n    intents.map((intent) => [\n      `${intent.provider}\\0${intent.environment}\\0${intent.credentialReference}`,\n      intent,\n    ]),\n  );\n  const converged = await convergeBillingConnections({\n    applicationId,\n    environment: resolveBillingEnvironment({ testMode }).name,\n    intents: providerIntents,\n    repository: {\n      upsertDeclared: async (providerIntent) => {\n        const intent = intentsBySlot.get(\n          `${providerIntent.provider}\\0${providerIntent.environment}\\0${providerIntent.slot.credentialReference}`,\n        );\n        if (intent == null) {\n          throw new Error(\n            `Missing configured connection intent for \"${providerIntent.slot.credentialReference}\".`,\n          );\n        }\n        if (\n          intent.providerAccountId !== null &&\n          intent.providerAccountId.length > 0\n        ) {\n          const collision = await input.sql.query(\n            `SELECT owner_id\n\t\t\t\t FROM billing.billing_provider_connections\n\t\t\t\t WHERE provider_account_id = $1\n\t\t\t\t   AND deleted_at IS NULL\n\t\t\t\t   AND owner_id <> $2\n\t\t\t\t LIMIT 1`,\n            [intent.providerAccountId, applicationId],\n          );\n          if (collision.rows[0]) {\n            throw new Error(\n              \"Provider account is already bound to another billing owner.\",\n            );\n          }\n        }\n        const mintedWebhookIngressToken = mintWebhookIngressToken();\n        assertNoSecretMaterial(\n          mintedWebhookIngressToken,\n          \"webhook_ingress_token\",\n        );\n        const statement = upsertConfiguredConnectionSql({\n          accountReference: intent.accountReference,\n          applicationId,\n          credentialKind: intent.credentialKind,\n          credentialReference: intent.credentialReference,\n          environment: intent.environment,\n          provider: intent.provider,\n          providerAccountId: intent.providerAccountId,\n          webhookIngressToken: mintedWebhookIngressToken,\n        });\n        const result = await input.sql.query(statement.sql, statement.params);\n        const row = result.rows[0];\n        const id = row?.id;\n        const webhookIngressToken = row?.webhook_ingress_token;\n        if (typeof id !== \"string\" || id.length === 0) {\n          throw new Error(\n            \"Configured billing connection materialization did not return an id.\",\n          );\n        }\n        if (\n          typeof webhookIngressToken !== \"string\" ||\n          webhookIngressToken.length === 0\n        ) {\n          throw new Error(\n            \"Configured billing connection materialization did not return a webhook ingress token.\",\n          );\n        }\n        assertNoSecretMaterial(webhookIngressToken, \"webhook_ingress_token\");\n        if (!isBillingWebhookIngressBindingToken(webhookIngressToken)) {\n          throw new Error(\n            \"Configured billing connection materialization returned an invalid webhook ingress token.\",\n          );\n        }\n        const ingressEndpoints = resolveBillingIngressEndpoints({\n          appUrl: input.appUrl,\n          publicBaseUrl: input.publicBaseUrl,\n          webhookIngressToken,\n        });\n        return {\n          accountReference: intent.accountReference,\n          ...(ingressEndpoints\n            ? {\n                classicWebhookUrl: ingressEndpoints.classicUrl,\n                eventsWebhookUrl: ingressEndpoints.eventsUrl,\n              }\n            : {}),\n          credentialReference: intent.credentialReference,\n          id,\n          provider: intent.provider,\n          webhookIngressToken,\n        };\n      },\n    },\n  });\n  return { connections: converged.connections };\n}\n\n/** Declared `billing.providers` converge here; apps must not call createConnection(). */\nexport const DECLARED_BILLING_PROVIDER_MATERIALIZES_WITHOUT_CREATE_CONNECTION =\n  true as const;\n","import { createHash } from \"node:crypto\";\nimport { billingWebhookOwnershipMarker } from \"../ownership.ts\";\nimport type {\n  BillingWebhookDesiredState,\n  BillingWebhookReconcileInput,\n} from \"./types.ts\";\n\nexport function billingWebhookConfigHash(input: {\n  eventTypes: readonly string[];\n  kind: string;\n  url: string;\n}): string {\n  return createHash(\"sha256\")\n    .update(\n      JSON.stringify({\n        eventTypes: [...input.eventTypes].sort(),\n        kind: input.kind,\n        url: input.url,\n      }),\n      \"utf8\"\n    )\n    .digest(\"hex\")\n    .slice(0, 32);\n}\n\nexport function buildDesiredBillingWebhookState(\n  input: BillingWebhookReconcileInput\n): BillingWebhookDesiredState {\n  const marker = billingWebhookOwnershipMarker({\n    applicationId: input.applicationId,\n    connectionId: input.connectionId,\n  });\n  const mollie = input.webhooks.providers.mollie;\n  const classicEnabled =\n    mollie.classic.enabled && mollie.strategy !== \"next_gen\";\n  const nextGenWanted =\n    mollie.nextGen.enabled !== false && mollie.strategy !== \"classic\";\n  const nextGenEnabled =\n    nextGenWanted &&\n    (mollie.nextGen.enabled === \"required\" ||\n      input.capability.nextGen.available);\n  return {\n    marker,\n    ...(classicEnabled\n      ? {\n          classic: {\n            enabled: true,\n            url: input.endpoints.classic,\n          },\n        }\n      : {}),\n    ...(nextGenWanted\n      ? {\n          nextGen: {\n            enabled: nextGenEnabled,\n            eventTypes: mollie.nextGen.eventTypes,\n            name: marker,\n            required: mollie.nextGen.enabled === \"required\",\n            url: input.endpoints.nextGen,\n          },\n        }\n      : {}),\n  };\n}\n","import type { BillingProviderWebhook } from \"../../runtime/local/providers/types.ts\";\nimport { isAthenaOwnedWebhookName } from \"../ownership.ts\";\nimport { billingWebhookUrlIsLoopback } from \"../urls.ts\";\nimport type {\n  BillingWebhookDesiredState,\n  BillingWebhookReconciliationPlan,\n} from \"./types.ts\";\n\nfunction sameEventTypes(\n  left: readonly string[],\n  right: readonly string[]\n): boolean {\n  if (left.length !== right.length) {\n    return false;\n  }\n  const a = [...left].sort();\n  const b = [...right].sort();\n  return a.every((value, index) => value === b[index]);\n}\n\nexport function planBillingWebhookReconciliation(input: {\n  actual: readonly BillingProviderWebhook[];\n  desired: BillingWebhookDesiredState;\n  hasDecryptableLocalSecret?: boolean;\n  management: \"automatic\" | \"manual\";\n}): {\n  foreign: readonly BillingProviderWebhook[];\n  plans: readonly BillingWebhookReconciliationPlan[];\n} {\n  const foreign = input.actual.filter(\n    (webhook) => !isAthenaOwnedWebhookName(webhook.name, input.desired.marker)\n  );\n  const owned = input.actual.filter((webhook) =>\n    isAthenaOwnedWebhookName(webhook.name, input.desired.marker)\n  );\n  const plans: BillingWebhookReconciliationPlan[] = [];\n  const nextGen = input.desired.nextGen;\n  if (nextGen) {\n    if (billingWebhookUrlIsLoopback(nextGen.url)) {\n      plans.push({\n        action: \"noop\",\n        kind: \"next_gen\",\n        owned: true,\n        reason: \"loopback_webhook_url\",\n      });\n    } else if (nextGen.enabled) {\n      const match = owned.find((webhook) => webhook.url.length > 0);\n      if (!match) {\n        plans.push({\n          action: input.management === \"manual\" ? \"conflict\" : \"create\",\n          kind: \"next_gen\",\n          owned: true,\n          reason: \"owned_webhook_missing\",\n        });\n      } else if (\n        match.url !== nextGen.url ||\n        !sameEventTypes(match.eventTypes, nextGen.eventTypes) ||\n        match.status === \"disabled\"\n      ) {\n        plans.push({\n          action: input.management === \"manual\" ? \"conflict\" : \"update\",\n          kind: \"next_gen\",\n          owned: true,\n          providerWebhook: match,\n          reason:\n            match.status === \"disabled\"\n              ? \"registration_disabled\"\n              : \"owned_webhook_drift\",\n        });\n      } else if (input.hasDecryptableLocalSecret === false) {\n        plans.push({\n          action: input.management === \"manual\" ? \"conflict\" : \"update\",\n          kind: \"next_gen\",\n          owned: true,\n          providerWebhook: match,\n          reason: \"owned_webhook_drift\",\n        });\n      } else {\n        plans.push({\n          action: \"noop\",\n          kind: \"next_gen\",\n          owned: true,\n          providerWebhook: match,\n          reason: \"in_sync\",\n        });\n      }\n    } else {\n      plans.push({\n        action: \"noop\",\n        kind: \"next_gen\",\n        owned: false,\n        reason: \"next_gen_unsupported\",\n      });\n    }\n  }\n  if (input.desired.classic) {\n    plans.push({\n      action: \"noop\",\n      kind: \"classic\",\n      owned: true,\n      reason: \"classic_url_injection\",\n    });\n  }\n  return { 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  AthenaBillingAuditEntry,\n  BillingReconciliationContext,\n} from \"../../observability/types.ts\";\nimport {\n  mintBillingAuditIdentity,\n  validateBillingAuditEntry,\n} from \"../../observability/validate.ts\";\nimport {\n  BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n  type BillingReconciliationLeaseStore,\n  billingReconciliationLeaseTtlMs,\n} from \"../../reconciliation/lease.ts\";\nimport { emitBillingAuditFailure } from \"../../reconciliation/semantic-audit.ts\";\nimport type {\n  BillingProviderExecutionContext,\n  BillingWebhooksPort,\n} from \"../../runtime/local/providers/types.ts\";\nimport {\n  billingWebhookOwnershipMarker,\n  fingerprintBillingSigningSecret,\n} from \"../ownership.ts\";\nimport type { BillingWebhookSecretStore } from \"../secrets/types.ts\";\nimport {\n  billingWebhookConfigHash,\n  buildDesiredBillingWebhookState,\n} from \"./desired-state.ts\";\nimport {\n  assertBillingWebhookRegistrationLifecycle,\n  isBillingWebhookRegistrationLifecycleState,\n} from \"./lifecycle.ts\";\nimport { planBillingWebhookReconciliation } from \"./planner.ts\";\nimport type { BillingWebhookRegistrationStore } from \"./repository.ts\";\nimport type {\n  BillingWebhookReconcileInput,\n  BillingWebhookReconciliationPlan,\n  BillingWebhookRegistrationRecord,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingWebhooksResult {\n  foreignUntouched: number;\n  plans: readonly BillingWebhookReconciliationPlan[];\n  traceId: string;\n}\n\nexport async function reconcileBillingWebhookRegistrations(input: {\n  audit?: AthenaBillingAuditWriter;\n  context: BillingReconciliationContext;\n  dryRun?: boolean;\n  execution: BillingProviderExecutionContext;\n  lease?: BillingReconciliationLeaseStore;\n  port?: BillingWebhooksPort;\n  reconcile: BillingWebhookReconcileInput;\n  registrations?: BillingWebhookRegistrationStore;\n  rememberSigningSecret?: (input: {\n    connectionId: string;\n    secret: string;\n  }) => void;\n  secretStore?: BillingWebhookSecretStore;\n  traces?: AthenaBillingTraceRecorder;\n}): Promise<ReconcileBillingWebhooksResult> {\n  const desired = buildDesiredBillingWebhookState(input.reconcile);\n  const trace = input.traces?.start({\n    causationId: input.context.causationId,\n    connectionId: input.reconcile.connectionId,\n    correlationId: input.context.correlationId,\n    operation: \"billing.webhook.reconcile\",\n    provider: input.reconcile.provider,\n    traceId: input.context.traceId,\n    trigger: input.context.trigger,\n  });\n  const ownerId = crypto.randomUUID();\n  const run = async (): Promise<ReconcileBillingWebhooksResult> => {\n    let leaseEpoch: number | undefined;\n    if (!input.dryRun && input.lease) {\n      const leasePhase = trace?.phase(\"lease\");\n      const acquired = await input.lease.acquire({\n        connectionId: input.reconcile.connectionId,\n        ownerId,\n        resourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n        ttlMs: billingReconciliationLeaseTtlMs(120_000),\n      });\n      leasePhase?.finish();\n      if (!acquired) {\n        throw new Error(\n          \"Another reconciler holds the webhook_registrations lease.\"\n        );\n      }\n      leaseEpoch = acquired.epoch;\n    }\n    const fetchPhase = trace?.phase(\"provider_fetch\");\n    const listed = input.port\n      ? await input.port.list(input.execution, {})\n      : { items: [] };\n    fetchPhase?.finish();\n    const localSecretSet = input.secretStore\n      ? await input.secretStore.resolve(input.reconcile.connectionId)\n      : undefined;\n    const diffPhase = trace?.phase(\"diff\");\n    const planned = planBillingWebhookReconciliation({\n      actual: listed.items,\n      desired,\n      hasDecryptableLocalSecret:\n        typeof input.reconcile.hasDecryptableLocalSecret === \"boolean\"\n          ? input.reconcile.hasDecryptableLocalSecret\n          : input.secretStore\n            ? localSecretSet?.current != null\n            : true,\n      management: input.reconcile.management,\n    });\n    diffPhase?.finish();\n    if (\n      !input.dryRun &&\n      input.reconcile.management === \"automatic\" &&\n      input.port\n    ) {\n      if (desired.nextGen?.enabled && input.secretStore == null) {\n        throw new Error(\n          \"Signed Events webhooks require a durable secret store (secret_rotation_required).\"\n        );\n      }\n      const applyPhase = trace?.phase(\"apply\");\n      if (input.lease && leaseEpoch != null) {\n        const held = await input.lease.heartbeat({\n          connectionId: input.reconcile.connectionId,\n          epoch: leaseEpoch,\n          ownerId,\n          resourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n          ttlMs: billingReconciliationLeaseTtlMs(120_000),\n        });\n        if (!held) {\n          throw new Error(\"Reconciliation lease was lost.\");\n        }\n      }\n      for (const plan of planned.plans) {\n        if (plan.kind !== \"next_gen\" || !desired.nextGen?.enabled) {\n          continue;\n        }\n        const registration = input.registrations\n          ? await input.registrations.get({\n              connectionId: input.reconcile.connectionId,\n              kind: \"next_gen\",\n            })\n          : undefined;\n        if (plan.action === \"create\") {\n          const idempotencyKey =\n            registration?.providerRegistrationIdempotencyKey ??\n            crypto.randomUUID();\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.created\",\n            eventTypes: desired.nextGen.eventTypes,\n            kind: \"next_gen\",\n            providerWebhookId: \"create_pending\",\n            providerRegistrationAttempts:\n              (registration?.providerRegistrationAttempts ?? 0) + 1,\n            providerRegistrationIdempotencyKey: idempotencyKey,\n            reconciliationState: \"provider_registration_pending\",\n            status: \"pending\",\n            url: desired.nextGen.url,\n          });\n          const created = await input.port.create(input.execution, {\n            eventTypes: desired.nextGen.eventTypes,\n            idempotencyKey,\n            name: desired.nextGen.name,\n            url: desired.nextGen.url,\n          });\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.created\",\n            eventTypes: created.eventTypes,\n            kind: \"next_gen\",\n            lastProviderEvidence: {\n              eventTypes: created.eventTypes,\n              providerWebhookId: created.id,\n              url: created.url,\n            },\n            providerWebhookId: created.id,\n            reconciliationState: \"provider_registered_secret_pending\",\n            status: \"pending\",\n            url: created.url,\n          });\n          if (!created.signingSecret) {\n            await persistAndAudit(input, {\n              event: \"billing.webhook.registration.drift_detected\",\n              eventTypes: created.eventTypes,\n              kind: \"next_gen\",\n              lifecycleError: {\n                code: \"webhook_secret_missing_after_create\",\n              },\n              providerWebhookId: created.id,\n              reconciliationState: \"attention_required\",\n              status: \"drifted\",\n              url: created.url,\n            });\n            throw new Error(\n              \"Provider webhook secret missing after create; rotation_required / decrypt-only key ring.\"\n            );\n          }\n          await persistSecretAndActivate(input, {\n            event: \"billing.webhook.registration.created\",\n            eventTypes: created.eventTypes,\n            kind: \"next_gen\",\n            providerSigningSecret: created.signingSecret,\n            providerWebhookId: created.id,\n            url: created.url,\n          });\n        } else if (\n          plan.action === \"noop\" &&\n          plan.providerWebhook &&\n          (registration?.reconciliationState !== \"active\" ||\n            localSecretSet?.current == null)\n        ) {\n          const state = registration?.reconciliationState;\n          if (state === \"active\" && localSecretSet?.current == null) {\n            await persistAndAudit(input, {\n              event: \"billing.webhook.registration.drift_detected\",\n              eventTypes: plan.providerWebhook.eventTypes,\n              kind: \"next_gen\",\n              lifecycleError: {\n                code: \"webhook_active_without_secret\",\n              },\n              providerWebhookId: plan.providerWebhook.id,\n              reconciliationState: \"attention_required\",\n              status: \"drifted\",\n              url: plan.providerWebhook.url,\n            });\n            throw new Error(\n              \"Active provider webhook has no durable signing secret.\"\n            );\n          }\n          if (\n            state !== \"secret_persisted_activation_pending\" &&\n            state !== \"verification_pending\"\n          ) {\n            await persistAndAudit(input, {\n              event: \"billing.webhook.registration.updated\",\n              eventTypes: plan.providerWebhook.eventTypes,\n              kind: \"next_gen\",\n              providerWebhookId: plan.providerWebhook.id,\n              reconciliationState: \"secret_persisted_activation_pending\",\n              status: \"pending\",\n              url: plan.providerWebhook.url,\n            });\n          }\n          if (state !== \"verification_pending\") {\n            await persistAndAudit(input, {\n              event: \"billing.webhook.registration.updated\",\n              eventTypes: plan.providerWebhook.eventTypes,\n              kind: \"next_gen\",\n              providerWebhookId: plan.providerWebhook.id,\n              reconciliationState: \"verification_pending\",\n              status: \"pending\",\n              url: plan.providerWebhook.url,\n            });\n          }\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.updated\",\n            eventTypes: plan.providerWebhook.eventTypes,\n            kind: \"next_gen\",\n            providerWebhookId: plan.providerWebhook.id,\n            reconciliationState: \"active\",\n            status: \"active\",\n            url: plan.providerWebhook.url,\n          });\n        } else if (\n          plan.action === \"update\" &&\n          plan.providerWebhook &&\n          input.port.update\n        ) {\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.updated\",\n            eventTypes: desired.nextGen.eventTypes,\n            kind: \"next_gen\",\n            previous: {\n              eventTypes: plan.providerWebhook.eventTypes,\n              url: plan.providerWebhook.url,\n            },\n            providerWebhookId: plan.providerWebhook.id,\n            reconciliationState: \"rotation_pending\",\n            status: \"pending\",\n            url: desired.nextGen.url,\n          });\n          const updated = await input.port.update(input.execution, {\n            eventTypes: desired.nextGen.eventTypes,\n            id: plan.providerWebhook.id,\n            name: desired.nextGen.name,\n            url: desired.nextGen.url,\n          });\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.updated\",\n            eventTypes: updated.eventTypes,\n            kind: \"next_gen\",\n            previous: {\n              eventTypes: plan.providerWebhook.eventTypes,\n              url: plan.providerWebhook.url,\n            },\n            providerWebhookId: updated.id,\n            reconciliationState: \"rotation_secret_pending\",\n            status: \"pending\",\n            url: updated.url,\n          });\n          if (updated.signingSecret) {\n            await persistSecretAndActivate(input, {\n              event: \"billing.webhook.registration.updated\",\n              eventTypes: updated.eventTypes,\n              providerSigningSecret: updated.signingSecret,\n              providerWebhookId: updated.id,\n              url: updated.url,\n            });\n          } else {\n            const durableSecret = input.secretStore\n              ? await input.secretStore.resolve(input.reconcile.connectionId)\n              : undefined;\n            if (durableSecret?.current == null) {\n              await persistAndAudit(input, {\n                event: \"billing.webhook.registration.drift_detected\",\n                eventTypes: updated.eventTypes,\n                kind: \"next_gen\",\n                lifecycleError: {\n                  code: \"webhook_secret_unrecoverable\",\n                },\n                providerWebhookId: updated.id,\n                reconciliationState: \"attention_required\",\n                status: \"drifted\",\n                url: updated.url,\n              });\n              throw new Error(\n                \"Provider webhook secret is unavailable after registration recovery.\"\n              );\n            }\n            await persistAndAudit(input, {\n              event: \"billing.webhook.registration.updated\",\n              eventTypes: updated.eventTypes,\n              kind: \"next_gen\",\n              providerWebhookId: updated.id,\n              reconciliationState: \"active\",\n              status: \"active\",\n              url: updated.url,\n            });\n          }\n        } else if (\n          plan.action === \"update\" &&\n          plan.providerWebhook &&\n          !input.port.update\n        ) {\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.drift_detected\",\n            eventTypes: desired.nextGen.eventTypes,\n            kind: \"next_gen\",\n            lifecycleError: { code: \"webhook_update_unavailable\" },\n            providerWebhookId: plan.providerWebhook.id,\n            reconciliationState: \"attention_required\",\n            status: \"drifted\",\n            url: desired.nextGen.url,\n          });\n        } else if (plan.action === \"conflict\") {\n          await persistAndAudit(input, {\n            event: \"billing.webhook.registration.drift_detected\",\n            eventTypes: desired.nextGen.eventTypes,\n            kind: \"next_gen\",\n            providerWebhookId: plan.providerWebhook?.id ?? \"unregistered\",\n            status: \"drifted\",\n            url: desired.nextGen.url,\n          });\n        }\n      }\n      applyPhase?.finish();\n    } else if (\n      !input.dryRun &&\n      input.reconcile.management === \"manual\" &&\n      planned.plans.some((plan) => plan.action === \"conflict\")\n    ) {\n      const drifted = planned.plans.find((plan) => plan.action === \"conflict\");\n      if (drifted && desired.nextGen) {\n        await persistAndAudit(input, {\n          event: \"billing.webhook.registration.drift_detected\",\n          eventTypes: desired.nextGen.eventTypes,\n          kind: \"next_gen\",\n          providerWebhookId: drifted.providerWebhook?.id ?? \"unregistered\",\n          status: \"drifted\",\n          url: desired.nextGen.url,\n        });\n      }\n    }\n    if (!input.dryRun && desired.classic && input.registrations) {\n      await input.registrations.upsert({\n        configHash: billingWebhookConfigHash({\n          eventTypes: [],\n          kind: \"classic\",\n          url: desired.classic.url,\n        }),\n        connectionId: input.reconcile.connectionId,\n        environment: input.reconcile.environment,\n        eventTypes: [],\n        id: crypto.randomUUID(),\n        kind: \"classic\",\n        name: desired.marker,\n        provider: input.reconcile.provider,\n        status: \"active\",\n        url: desired.classic.url,\n      });\n    }\n    await trace?.success();\n    return {\n      foreignUntouched: planned.foreign.length,\n      plans: planned.plans,\n      traceId: input.context.traceId,\n    };\n  };\n  try {\n    return await (trace ? runWithBillingTrace(trace, run) : run());\n  } catch (error) {\n    if (input.audit) {\n      try {\n        await emitBillingAuditFailure({\n          context: input.context,\n          error,\n          writer: input.audit,\n        });\n      } catch {\n        /* persistence of the failure row must not hide the original error */\n      }\n    }\n    await trace?.failure(error, \"apply\");\n    throw error;\n  } finally {\n    if (!input.dryRun && input.lease) {\n      await input.lease.release({\n        connectionId: input.reconcile.connectionId,\n        ownerId,\n        resourceKind: BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n      });\n    }\n  }\n}\n\nasync function persistAndAudit(\n  input: {\n    audit?: AthenaBillingAuditWriter;\n    context: BillingReconciliationContext;\n    reconcile: BillingWebhookReconcileInput;\n    registrations?: BillingWebhookRegistrationStore;\n    secretStore?: BillingWebhookSecretStore;\n  },\n  record: {\n    event: AthenaBillingAuditEntry[\"event\"];\n    eventTypes: readonly string[];\n    kind: BillingWebhookRegistrationRecord[\"kind\"];\n    previous?: unknown;\n    providerSigningSecret?: string;\n    providerWebhookId: string;\n    reconciliationState?: BillingWebhookRegistrationRecord[\"reconciliationState\"];\n    activationAttempts?: number;\n    lastProviderEvidence?: unknown;\n    lifecycleError?: unknown;\n    lifecycleUpdatedAt?: Date;\n    providerRegistrationAttempts?: number;\n    providerRegistrationIdempotencyKey?: string;\n    secretPersistenceAttempts?: number;\n    status: BillingWebhookRegistrationRecord[\"status\"];\n    url: string;\n  }\n): Promise<void> {\n  const existing = input.registrations\n    ? await input.registrations.get({\n        connectionId: input.reconcile.connectionId,\n        kind: record.kind,\n      })\n    : undefined;\n  let secretFingerprint: string | undefined;\n  if (record.providerSigningSecret && record.providerSigningSecret.length > 0) {\n    if (!input.secretStore) {\n      throw new Error(\n        \"Webhook provider secret cannot be activated without a durable secret store.\"\n      );\n    }\n    secretFingerprint = fingerprintBillingSigningSecret(\n      record.providerSigningSecret\n    );\n    await input.secretStore.storeCurrent({\n      connectionId: input.reconcile.connectionId,\n      fingerprint: secretFingerprint,\n      secret: record.providerSigningSecret,\n    });\n  } else if (input.secretStore) {\n    const existing = await input.secretStore.resolve(\n      input.reconcile.connectionId\n    );\n    if (existing.current) {\n      secretFingerprint = fingerprintBillingSigningSecret(existing.current);\n    }\n  } else if (existing) {\n    secretFingerprint = existing?.secretFingerprint;\n  }\n  if (\n    record.kind === \"next_gen\" &&\n    record.status === \"active\" &&\n    secretFingerprint == null\n  ) {\n    throw new Error(\n      \"Webhook registration cannot become active without durable secret material.\"\n    );\n  }\n  if (\n    existing?.reconciliationState &&\n    record.reconciliationState &&\n    existing.reconciliationState !== record.reconciliationState\n  ) {\n    const legacyStates = new Set([\n      \"create_pending\",\n      \"remote_created_secret_pending\",\n      \"rotation_required\",\n      \"update_pending\",\n    ]);\n    if (\n      !legacyStates.has(existing.reconciliationState) &&\n      isBillingWebhookRegistrationLifecycleState(\n        existing.reconciliationState\n      ) &&\n      isBillingWebhookRegistrationLifecycleState(record.reconciliationState)\n    ) {\n      assertBillingWebhookRegistrationLifecycle(existing.reconciliationState, {\n        hasSecret: secretFingerprint != null,\n        next: record.reconciliationState,\n      });\n    }\n  }\n  const row: BillingWebhookRegistrationRecord = {\n    configHash: billingWebhookConfigHash({\n      eventTypes: record.eventTypes,\n      kind: record.kind,\n      url: record.url,\n    }),\n    connectionId: input.reconcile.connectionId,\n    environment: input.reconcile.environment,\n    eventTypes: record.eventTypes,\n    id: existing?.id ?? crypto.randomUUID(),\n    kind: record.kind,\n    name: billingWebhookConfigHash({\n      eventTypes: record.eventTypes,\n      kind: record.kind,\n      url: record.url,\n    }),\n    provider: input.reconcile.provider,\n    providerWebhookId: record.providerWebhookId,\n    status: record.status,\n    url: record.url,\n    lastReconciledAt: new Date(),\n    ...(record.status === \"active\" ? { lastVerifiedAt: new Date() } : {}),\n    ...(record.activationAttempts != null ||\n    existing?.activationAttempts != null\n      ? {\n          activationAttempts:\n            record.activationAttempts ?? existing?.activationAttempts,\n        }\n      : {}),\n    ...(record.lastProviderEvidence !== undefined ||\n    existing?.lastProviderEvidence !== undefined\n      ? {\n          lastProviderEvidence:\n            record.lastProviderEvidence ?? existing?.lastProviderEvidence,\n        }\n      : {}),\n    ...(record.lifecycleError !== undefined ||\n    existing?.lifecycleError !== undefined\n      ? {\n          lifecycleError: record.lifecycleError ?? existing?.lifecycleError,\n        }\n      : {}),\n    ...(record.lifecycleUpdatedAt || existing?.lifecycleUpdatedAt\n      ? {\n          lifecycleUpdatedAt:\n            record.lifecycleUpdatedAt ?? existing?.lifecycleUpdatedAt,\n        }\n      : {}),\n    ...(record.providerRegistrationAttempts != null ||\n    existing?.providerRegistrationAttempts != null\n      ? {\n          providerRegistrationAttempts:\n            record.providerRegistrationAttempts ??\n            existing?.providerRegistrationAttempts,\n        }\n      : {}),\n    ...(record.providerRegistrationIdempotencyKey ||\n    existing?.providerRegistrationIdempotencyKey\n      ? {\n          providerRegistrationIdempotencyKey:\n            record.providerRegistrationIdempotencyKey ??\n            existing?.providerRegistrationIdempotencyKey,\n        }\n      : {}),\n    ...(record.secretPersistenceAttempts != null ||\n    existing?.secretPersistenceAttempts != null\n      ? {\n          secretPersistenceAttempts:\n            record.secretPersistenceAttempts ??\n            existing?.secretPersistenceAttempts,\n        }\n      : {}),\n    ...(secretFingerprint ? { secretFingerprint } : {}),\n    ...((record.reconciliationState ?? existing?.reconciliationState)\n      ? {\n          reconciliationState:\n            record.reconciliationState ?? existing?.reconciliationState,\n        }\n      : {}),\n  };\n  if (input.registrations) {\n    await input.registrations.upsert({\n      ...row,\n      name: billingWebhookOwnershipMarker({\n        applicationId: input.reconcile.applicationId,\n        connectionId: input.reconcile.connectionId,\n      }),\n    });\n  }\n  if (!input.audit) {\n    return;\n  }\n  const ir = billingEventDefinition(record.event);\n  const entry: AthenaBillingAuditEntry = {\n    actor: { kind: \"system\" },\n    causationId: input.context.causationId,\n    connectionId: input.reconcile.connectionId,\n    correlationId: input.context.correlationId,\n    event: record.event,\n    ...mintBillingAuditIdentity(),\n    outcome: \"success\",\n    previous: record.previous,\n    provider: input.reconcile.provider,\n    providerSubject: { id: record.providerWebhookId, kind: \"webhook\" },\n    result: {\n      eventTypes: record.eventTypes,\n      status: record.status,\n      url: record.url,\n    },\n    traceId: input.context.traceId,\n  };\n  validateBillingAuditEntry(entry, ir);\n  await input.audit.write(entry);\n}\n\nasync function persistSecretAndActivate(\n  input: {\n    audit?: AthenaBillingAuditWriter;\n    context: BillingReconciliationContext;\n    reconcile: BillingWebhookReconcileInput;\n    registrations?: BillingWebhookRegistrationStore;\n    rememberSigningSecret?: (input: {\n      connectionId: string;\n      secret: string;\n    }) => void;\n    secretStore?: BillingWebhookSecretStore;\n  },\n  record: {\n    event: AthenaBillingAuditEntry[\"event\"];\n    eventTypes: readonly string[];\n    kind?: \"next_gen\";\n    previous?: unknown;\n    providerSigningSecret: string;\n    providerWebhookId: string;\n    url: string;\n  }\n): Promise<void> {\n  if (!input.secretStore) {\n    throw new Error(\n      \"Webhook provider secret cannot be activated without a durable secret store.\"\n    );\n  }\n  const fingerprint = fingerprintBillingSigningSecret(\n    record.providerSigningSecret\n  );\n  await input.secretStore.storeCurrent({\n    connectionId: input.reconcile.connectionId,\n    fingerprint,\n    secret: record.providerSigningSecret,\n  });\n  input.rememberSigningSecret?.({\n    connectionId: input.reconcile.connectionId,\n    secret: record.providerSigningSecret,\n  });\n  await persistAndAudit(input, {\n    event: record.event,\n    eventTypes: record.eventTypes,\n    kind: record.kind ?? \"next_gen\",\n    previous: record.previous,\n    providerWebhookId: record.providerWebhookId,\n    reconciliationState: \"secret_persisted_activation_pending\",\n    secretPersistenceAttempts: 1,\n    status: \"pending\",\n    url: record.url,\n  });\n  await persistAndAudit(input, {\n    event: record.event,\n    eventTypes: record.eventTypes,\n    kind: record.kind ?? \"next_gen\",\n    previous: record.previous,\n    providerWebhookId: record.providerWebhookId,\n    reconciliationState: \"verification_pending\",\n    status: \"pending\",\n    url: record.url,\n  });\n  await persistAndAudit(input, {\n    event: record.event,\n    eventTypes: record.eventTypes,\n    kind: record.kind ?? \"next_gen\",\n    previous: record.previous,\n    providerWebhookId: record.providerWebhookId,\n    reconciliationState: \"active\",\n    activationAttempts: 1,\n    status: \"active\",\n    url: record.url,\n  });\n}\n","import { listActiveBillingImportConnections } from \"../import/postgres.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n  createDisabledBillingTraceRecorder,\n  createPostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n  mintManualBillingReconciliationContext,\n  mintScheduledBillingReconciliationContext,\n} from \"../reconciliation/context.ts\";\nimport { createPostgresBillingReconciliationLeaseStore } from \"../reconciliation/lease.ts\";\nimport { resolveBillingEnvironment } from \"../runtime/environment.ts\";\nimport { supersedeOtherEnvironmentBillingConnections } from \"../runtime/local/connections/materialize.ts\";\nimport {\n  billingConnectionHasConfiguredCredential,\n  billingConnectionMatchesProcessTestMode,\n  createConnectionProviderExecutionContext,\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  billingWebhookUrlIsLoopback,\n  resolveBillingIngressEndpoints,\n} from \"./urls.ts\";\n\nconst warnedLoopbackWebhookUrls = new Set<string>();\nconst warnedSkippedWebhookConnections = new Set<string>();\n\nexport async function runAutomaticBillingWebhookReconcileIfEnabled(input: {\n  applicationId: string;\n  appUrl?: string | null;\n  configuredProviders?: BillingProviderConfigMap;\n  observability?: NormalizedAthenaBillingObservability;\n  registry?: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n  trigger: \"bootstrap\" | \"scheduled\" | \"manual\";\n  webhooks: NormalizedAthenaBillingWebhooksConfig;\n  rememberSigningSecret?: (input: {\n    connectionId: string;\n    secret: string;\n  }) => void;\n  secretStore?: BillingWebhookSecretStore;\n}): Promise<void> {\n  if (!input.webhooks.enabled) {\n    return;\n  }\n  const connections = await listActiveBillingImportConnections(\n    input.sql,\n    \"mollie\"\n  );\n  const observability =\n    input.observability ?? normalizeAthenaBillingObservability();\n  const traces = observability.traces.enabled\n    ? createPostgresBillingTraceRecorder(\n        input.sql,\n        observability.traces.sampleRate\n      )\n    : createDisabledBillingTraceRecorder();\n  const audit = observability.auditLog\n    ? createPostgresBillingAuditWriter(input.sql)\n    : undefined;\n  const mollie = input.configuredProviders?.mollie;\n  if (mollie == null && input.configuredProviders?.mollieAccounts == null) {\n    return;\n  }\n  const runtime = input.registry?.get(\"mollie\");\n  for (const connection of connections) {\n    if (\n      !billingConnectionMatchesProcessTestMode(\n        connection.testMode,\n        input.testMode\n      )\n    ) {\n      const skipKey = `env:${connection.id}`;\n      if (!warnedSkippedWebhookConnections.has(skipKey)) {\n        warnedSkippedWebhookConnections.add(skipKey);\n        console.warn(\n          \"[athena-billing] skipping webhook reconciliation; connection environment does not match process billing.testMode\",\n          {\n            connectionId: connection.id,\n            environment: connection.environment,\n            processTestMode: resolveBillingEnvironment({\n              testMode: input.testMode,\n            }).testMode,\n          }\n        );\n      }\n      continue;\n    }\n    if (\n      !billingConnectionHasConfiguredCredential({\n        configuredProviders: input.configuredProviders,\n        connection,\n      })\n    ) {\n      const skipKey = `cred:${connection.id}`;\n      if (!warnedSkippedWebhookConnections.has(skipKey)) {\n        warnedSkippedWebhookConnections.add(skipKey);\n        console.warn(\n          \"[athena-billing] skipping webhook reconciliation; connection environment has no configured credential\",\n          {\n            connectionId: connection.id,\n            environment: connection.environment,\n          }\n        );\n      }\n      continue;\n    }\n    const endpoints = resolveBillingIngressEndpoints({\n      appUrl: input.appUrl,\n      publicBaseUrl: input.webhooks.publicBaseUrl,\n      webhookIngressToken: connection.webhookIngressToken,\n    });\n    if (!endpoints) {\n      continue;\n    }\n    const skipProviderWebhookApi = billingWebhookUrlIsLoopback(\n      endpoints.eventsUrl\n    );\n    if (\n      skipProviderWebhookApi &&\n      !warnedLoopbackWebhookUrls.has(endpoints.eventsUrl)\n    ) {\n      warnedLoopbackWebhookUrls.add(endpoints.eventsUrl);\n      console.warn(\n        \"[athena-billing] skipping Mollie next-gen webhook registration; the public URL is loopback and Mollie cannot reach it\",\n        { url: endpoints.eventsUrl }\n      );\n    }\n    const context =\n      input.trigger === \"scheduled\"\n        ? mintScheduledBillingReconciliationContext({\n            connectionId: connection.id,\n            provider: connection.provider,\n            schedulerExecutionId: crypto.randomUUID(),\n          })\n        : mintManualBillingReconciliationContext({\n            connectionId: connection.id,\n            provider: connection.provider,\n            trigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n          });\n    const execution = createConnectionProviderExecutionContext({\n      configuredProviders: input.configuredProviders,\n      connection,\n      ingress: { classicWebhookUrl: endpoints.classicUrl },\n      operationScope: \"organization\",\n    });\n    const capability = resolveMollieWebhookManagementCapability(\n      execution.binding\n    );\n    const reconciled = await reconcileBillingWebhookRegistrations({\n      audit,\n      context,\n      execution,\n      lease: createPostgresBillingReconciliationLeaseStore(input.sql),\n      port: skipProviderWebhookApi ? undefined : runtime?.webhooks,\n      reconcile: {\n        applicationId: input.applicationId,\n        capability,\n        connectionId: connection.id,\n        endpoints,\n        environment: connection.environment,\n        management: input.webhooks.management,\n        provider: connection.provider,\n        webhooks: input.webhooks,\n      },\n      registrations: createPostgresBillingWebhookRegistrationStore(input.sql),\n      rememberSigningSecret: input.rememberSigningSecret,\n      secretStore: input.secretStore,\n      traces,\n    });\n    if (skipProviderWebhookApi || connection.provider !== \"mollie\") {\n      continue;\n    }\n    if (reconciled.plans.some((plan) => plan.action === \"conflict\")) {\n      continue;\n    }\n    await supersedeOtherEnvironmentBillingConnections({\n      applicationId: input.applicationId,\n      credentialReference: connection.credentialReference,\n      environment: connection.environment,\n      id: connection.id,\n      provider: \"mollie\",\n      sql: input.sql,\n    });\n  }\n}\n","import type { MigrationDisplayStatus } from \"./types.ts\";\n\nexport function statusSymbol(\n  status: MigrationDisplayStatus,\n  interactive: boolean\n): string {\n  if (!interactive) {\n    return `[${status}]`;\n  }\n  switch (status) {\n    case \"applied\":\n    case \"repaired\":\n      return \"✓\";\n    case \"pending\":\n      return \"○\";\n    case \"applying\":\n      return \"◐\";\n    case \"legacy-compatible\":\n    case \"drift\":\n      return \"!\";\n    case \"checksum-mismatch\":\n    case \"failed\":\n    case \"missing-local\":\n    case \"name-mismatch\":\n    case \"historical-insertion\":\n      return \"✗\";\n    case \"skipped\":\n      return \"–\";\n    default:\n      return \"?\";\n  }\n}\n\nexport function statusPhrase(status: MigrationDisplayStatus): string {\n  switch (status) {\n    case \"checksum-mismatch\":\n      return \"checksum mismatch\";\n    case \"legacy-compatible\":\n      return \"legacy ledger identity\";\n    case \"missing-local\":\n      return \"missing locally\";\n    case \"name-mismatch\":\n      return \"name mismatch\";\n    case \"historical-insertion\":\n      return \"historical insertion\";\n    default:\n      return status;\n  }\n}\n\nexport function statusLabel(\n  status: MigrationDisplayStatus,\n  interactive: boolean\n): string {\n  if (!interactive) {\n    return `[${status}]`;\n  }\n  return `${statusSymbol(status, true)} ${statusPhrase(status)}`;\n}\n","export function padEnd(value: string, width: number): string {\n  if (value.length >= width) {\n    return value;\n  }\n  return value + \" \".repeat(width - value.length);\n}\n\nexport function padStart(value: string, width: number): string {\n  if (value.length >= width) {\n    return value;\n  }\n  return \" \".repeat(width - value.length) + value;\n}\n\nexport function columnWidth(values: readonly string[], min = 8): number {\n  let max = min;\n  for (const value of values) {\n    if (value.length > max) {\n      max = value.length;\n    }\n  }\n  return 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\n    .split(\"\\n\")\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(outcome: string): \"red\" | \"yellow\" | \"green\" | \"none\" {\n  const text = outcome.toLowerCase();\n  if (\n    text.includes(\"conflict\") ||\n    text.includes(\"drift\") ||\n    text.includes(\"error\")\n  ) {\n    return \"red\";\n  }\n  if (\n    text.includes(\"pending\") ||\n    text.includes(\"remain\") ||\n    text.includes(\"reconcil\")\n  ) {\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(`${padEnd(\"Migration\", nameWidth)}  Status`, \"dim\", capabilities)\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          ? \"\"\n          : paint(`  ${row.durationMs}ms`, \"dim\", capabilities);\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    async confirm() {\n      // Non-interactive plain UI never prompts.\n      return false;\n    },\n    error(message) {\n      emit(paint(message, \"red\", 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    intro(title) {\n      if (capabilities.quiet) {\n        return;\n      }\n      write(railStart(title, 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    outro(message) {\n      if (capabilities.quiet) {\n        return;\n      }\n      write(railEnd(message, capabilities));\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    success(message) {\n      if (capabilities.quiet) {\n        return;\n      }\n      emit(paint(message, \"green\", capabilities));\n    },\n    warn(message) {\n      emit(paint(message, \"yellow\", capabilities));\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  AthenaCliUI,\n  CliCapabilities,\n  MigrationReportView,\n} from \"./types.ts\";\n\ntype ClackModule = {\n  intro?: (message: string) => void;\n  outro?: (message: string) => void;\n  confirm?: (opts: { message: string }) => Promise<boolean | symbol>;\n  isCancel?: (value: unknown) => boolean;\n};\n\nasync function loadClack(): Promise<ClackModule | undefined> {\n  try {\n    return (await import(\"@clack/prompts\")) as ClackModule;\n  } catch {\n    /* @clack/prompts not installed */\n  }\n}\n\nexport function createClackUi(\n  capabilities: CliCapabilities,\n  write: (message: string) => void = (message) => {\n    console.log(message);\n  }\n): AthenaCliUI {\n  // Prefer Clack when available; fall back to plain structured rendering.\n  // Domain correctness does not depend on this module.\n  const plain = createPlainUi({ ...capabilities, mode: \"interactive\" }, write);\n\n  return {\n    ...plain,\n    capabilities,\n    async confirm(message) {\n      const clack = await loadClack();\n      if (!clack?.confirm) {\n        return false;\n      }\n      const value = await clack.confirm({ message });\n      if (clack.isCancel?.(value)) {\n        return false;\n      }\n      return Boolean(value);\n    },\n    intro(title) {\n      // Stay synchronous so intro cannot race past the migration table.\n      plain.intro(title);\n    },\n    outro(message) {\n      plain.outro(message);\n    },\n    renderMigrationReport(report: MigrationReportView) {\n      plain.renderMigrationReport(report);\n    },\n  };\n}\n","import type {\n  AthenaCliUI,\n  CliCapabilities,\n  MigrationReportView,\n} from \"./types.ts\";\n\nexport function createJsonUi(\n  capabilities: CliCapabilities,\n  write: (message: string) => void = (message) => {\n    console.log(message);\n  }\n): AthenaCliUI {\n  let lastReport: MigrationReportView | undefined;\n\n  return {\n    capabilities,\n    async confirm() {\n      return false;\n    },\n    error(message) {\n      write(JSON.stringify({ level: \"error\", message }));\n    },\n    info() {},\n    intro() {},\n    note() {},\n    outro() {\n      if (lastReport) {\n        write(JSON.stringify(lastReport, null, 2));\n      }\n    },\n    renderMigrationReport(report) {\n      lastReport = report;\n      write(JSON.stringify(report, null, 2));\n    },\n    success() {},\n    warn(message) {\n      write(JSON.stringify({ level: \"warn\", message }));\n    },\n  };\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  resolveCliCapabilities,\n  resolveCliOutputMode,\n} from \"./capabilities.ts\";\nexport { colorizeTaggedLine, styleHelpText } from \"./help.ts\";\nexport {\n  cliRail,\n  frameBlock,\n  railBar,\n  railEnd,\n  railError,\n  railStart,\n  usesRail,\n} from \"./rail.ts\";\nexport type {\n  AthenaCliUI,\n  CliCapabilities,\n  CliOutputMode,\n  Diagnostic,\n  MigrationDisplayStatus,\n  MigrationReportView,\n  MigrationRowView,\n  MigrationSectionView,\n} from \"./types.ts\";\n\nexport function createCliUi(\n  options: ResolveCliCapabilitiesOptions & {\n    write?: (message: string) => void;\n    capabilities?: CliCapabilities;\n  } = {}\n): AthenaCliUI {\n  const capabilities = options.capabilities ?? resolveCliCapabilities(options);\n  const write = options.write;\n\n  if (capabilities.mode === \"json\") {\n    return createJsonUi(capabilities, write);\n  }\n  if (capabilities.mode === \"interactive\") {\n    return createClackUi(capabilities, write);\n  }\n  return createPlainUi(capabilities, write);\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 = 4;\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    end: offsetToPosition(sql, startOffset + Math.max(0, length)),\n    filename,\n    start: offsetToPosition(sql, startOffset),\n  };\n}\n","import {\n  formatObjectRef,\n  type SchemaObjectRef,\n  type SqlSourceLocation,\n} 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  BASELINE: \"ATHENA-MIG-DEP-003\",\n  COL_MISSING: \"ATHENA-MIG-DEP-002\",\n  DEP_MISSING: \"ATHENA-MIG-DEP-001\",\n  DRIFT: \"ATHENA-MIG-DRIFT-001\",\n  DYNAMIC: \"ATHENA-MIG-DYN-001\",\n  ORDER: \"ATHENA-MIG-ORD-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 = [`ERROR ${diagnostic.code}`, \"\", diagnostic.message];\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(\n    \"\",\n    \"Missing dependency:\",\n    `  ${formatObjectRef(diagnostic.object)}`\n  );\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(\n      \"\",\n      \"Classification:\",\n      `  ${diagnostic.classification.replaceAll(\"_\", \" \")}`\n    );\n  }\n  return lines.join(\"\\n\");\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}\n\nfunction unwrapStmt(wrapped: unknown): ParsedStatement | undefined {\n  const wrapper = asRecord(wrapped);\n  if (!wrapper) {\n    return;\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:\n      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;\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}\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: (\n    kind: string,\n    value: PgAstNode,\n    parent: PgAstNode | undefined\n  ) => 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  parameters: Set<string>;\n  rowVariables: Map<string, TableRef>;\n  variables: Set<string>;\n}\n\nexport function emptyPlpgsqlBindings(\n  parameters: readonly string[] = []\n): PlpgsqlBindings {\n  const names = new Set(parameters.filter((name) => name.trim().length > 0));\n  return {\n    parameters: names,\n    rowVariables: new Map(),\n    variables: new Set(names),\n  };\n}\n\nexport function isProceduralName(\n  bindings: PlpgsqlBindings | undefined,\n  name: string\n): boolean {\n  if (!bindings) {\n    return false;\n  }\n  return bindings.variables.has(name) || bindings.parameters.has(name);\n}\n\nfunction declareSection(body: string): string | undefined {\n  const declareMatch = /\\bDECLARE\\b/i.exec(body);\n  if (!declareMatch || declareMatch.index === undefined) {\n    return;\n  }\n  const from = declareMatch.index + declareMatch[0].length;\n  const beginMatch = /\\bBEGIN\\b/i.exec(body.slice(from));\n  if (!beginMatch || beginMatch.index === undefined) {\n    return;\n  }\n  return body.slice(from, from + beginMatch.index);\n}\n\nfunction stripLineComment(line: string): string {\n  const index = line.indexOf(\"--\");\n  if (index === -1) {\n    return line.trim();\n  }\n  return line.slice(0, index).trim();\n}\n\nfunction tableFromRowType(typeName: string): TableRef {\n  const parts = typeName.split(\".\").filter((part) => part.length > 0);\n  if (parts.length >= 2) {\n    return {\n      kind: \"table\",\n      name: parts[parts.length - 1] ?? typeName,\n      schema: parts[0] ?? \"public\",\n    };\n  }\n  return {\n    kind: \"table\",\n    name: typeName,\n    schema: \"public\",\n  };\n}\n\nexport function parsePlpgsqlBindings(\n  body: string,\n  parameters: readonly string[] = []\n): PlpgsqlBindings {\n  const bindings = emptyPlpgsqlBindings(parameters);\n  const section = declareSection(body);\n  if (!section) {\n    return bindings;\n  }\n  for (const rawLine of section.split(\";\")) {\n    const line = stripLineComment(rawLine);\n    if (line.length === 0) {\n      continue;\n    }\n    const rowType =\n      /^([A-Za-z_][\\w$]*)\\s+(?:CONSTANT\\s+)?((?:[A-Za-z_][\\w$]*\\.)?[A-Za-z_][\\w$]*)\\s*%ROWTYPE\\b/i.exec(\n        line\n      );\n    if (rowType) {\n      const name = rowType[1];\n      const typeName = rowType[2];\n      if (name && typeName) {\n        bindings.variables.add(name);\n        bindings.rowVariables.set(name, tableFromRowType(typeName));\n      }\n      continue;\n    }\n    const scalar = /^([A-Za-z_][\\w$]*)\\s+/u.exec(line);\n    if (scalar?.[1] && !/^ALIAS\\b/i.test(line.slice(scalar[0].length))) {\n      bindings.variables.add(scalar[1]);\n    }\n  }\n  return bindings;\n}\n","import {\n  formatObjectRef,\n  locationFromOffset,\n  type SchemaObjectRef,\n  type SequenceRef,\n  type TableRef,\n} from \"./ast.ts\";\nimport { type PgAstNode, pgNameList, pgString } from \"./parser.ts\";\nimport { isProceduralName, type PlpgsqlBindings } from \"./plpgsql-bindings.ts\";\nimport type {\n  DependencyCategory,\n  DependencyConfidence,\n  NameResolution,\n  SemanticDependency,\n} from \"./semantic-ir.ts\";\n\nconst QUERY_KINDS = new Set([\n  \"SelectStmt\",\n  \"InsertStmt\",\n  \"UpdateStmt\",\n  \"DeleteStmt\",\n]);\n\nconst POSTGRES_SYSTEM_COLUMNS = new Set([\n  \"tableoid\",\n  \"xmin\",\n  \"cmin\",\n  \"xmax\",\n  \"cmax\",\n  \"ctid\",\n]);\n\nfunction isPostgresSystemColumn(name: string): boolean {\n  return POSTGRES_SYSTEM_COLUMNS.has(name.toLowerCase());\n}\n\ninterface QueryScope {\n  aliases: Map<string, { kind: \"cte\" | \"relation\"; table?: TableRef }>;\n  ctes: Set<string>;\n  parent?: QueryScope;\n}\n\nexport interface QueryDepContext {\n  baseOffset: number;\n  filename: string;\n  proceduralBindings?: PlpgsqlBindings;\n  sql: string;\n}\n\nfunction asRecord(value: unknown): PgAstNode | undefined {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as PgAstNode;\n  }\n}\n\nfunction unwrap(node: unknown, kind: string): PgAstNode | undefined {\n  const record = asRecord(node);\n  if (!record) {\n    return;\n  }\n  const inner = asRecord(record[kind]);\n  return inner ?? record;\n}\n\nfunction snippetAt(sql: string, offset: number, length = 48): string {\n  const start = Math.max(0, offset);\n  return sql\n    .slice(start, start + length)\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\nfunction dep(\n  category: DependencyCategory,\n  object: SchemaObjectRef,\n  confidence: DependencyConfidence,\n  ctx: QueryDepContext,\n  locationOffset: number,\n  resolution: NameResolution,\n  explicitlyQualified: boolean,\n  snippet?: string\n): SemanticDependency {\n  return {\n    category,\n    confidence,\n    explicitlyQualified,\n    location: locationFromOffset(\n      ctx.filename,\n      ctx.sql,\n      ctx.baseOffset + locationOffset\n    ),\n    object,\n    resolution,\n    snippet: snippet ?? snippetAt(ctx.sql, ctx.baseOffset + locationOffset),\n  };\n}\n\nfunction emptyScope(parent?: QueryScope): QueryScope {\n  return {\n    aliases: new Map(parent?.aliases),\n    ctes: new Set(parent?.ctes),\n    parent,\n  };\n}\n\nfunction hasCte(scope: QueryScope, name: string): boolean {\n  let current: QueryScope | undefined = scope;\n  while (current) {\n    if (current.ctes.has(name)) {\n      return true;\n    }\n    current = current.parent;\n  }\n  return false;\n}\n\nfunction cteEntries(\n  withClause: unknown\n): Array<{ name: string; query: unknown }> {\n  const clause = unwrap(withClause, \"WithClause\") ?? asRecord(withClause);\n  if (!clause) {\n    return [];\n  }\n  const ctes = Array.isArray(clause.ctes) ? clause.ctes : [];\n  const entries: Array<{ name: string; query: unknown }> = [];\n  for (const item of ctes) {\n    const cte = unwrap(item, \"CommonTableExpr\") ?? asRecord(item);\n    if (!cte || typeof cte.ctename !== \"string\") {\n      continue;\n    }\n    entries.push({ name: cte.ctename, query: cte.ctequery });\n  }\n  return entries;\n}\n\nfunction isRecursiveWith(withClause: unknown): boolean {\n  const clause = unwrap(withClause, \"WithClause\") ?? asRecord(withClause);\n  return Boolean(clause?.recursive);\n}\n\nfunction constString(node: unknown): string | undefined {\n  const direct = pgString(node);\n  if (direct) {\n    return direct;\n  }\n  const record = asRecord(node);\n  if (!record) {\n    return;\n  }\n  const aConst = unwrap(record, \"A_Const\") ?? record;\n  const fromSval = pgString(aConst.sval) ?? pgString(aConst);\n  if (fromSval) {\n    return fromSval;\n  }\n  const cast = unwrap(record, \"TypeCast\") ?? asRecord(record.TypeCast);\n  if (cast) {\n    return constString(cast.arg);\n  }\n}\n\nfunction firstFuncArg(node: PgAstNode): unknown {\n  if (Array.isArray(node.args) && node.args.length > 0) {\n    return node.args[0];\n  }\n}\n\nfunction sequenceRefFromLiteral(raw: string): SequenceRef {\n  const trimmed = raw.replaceAll('\"', \"\").trim();\n  const parts = trimmed.split(\".\").filter((part) => part.length > 0);\n  if (parts.length >= 2) {\n    return {\n      kind: \"sequence\",\n      name: parts[parts.length - 1],\n      schema: parts[0],\n    };\n  }\n  return { kind: \"sequence\", name: trimmed, schema: \"\" };\n}\n\nfunction emitRangeVar(\n  value: PgAstNode,\n  scope: QueryScope,\n  ctx: QueryDepContext,\n  into: SemanticDependency[]\n): void {\n  const relname = typeof value.relname === \"string\" ? value.relname : undefined;\n  if (!relname) {\n    return;\n  }\n  const explicitlyQualified = typeof value.schemaname === \"string\";\n  const aliasNode =\n    asRecord(asRecord(value.alias)?.Alias) ?? asRecord(value.alias);\n  const alias =\n    (aliasNode && typeof aliasNode.aliasname === \"string\"\n      ? aliasNode.aliasname\n      : relname) ?? relname;\n  const location = typeof value.location === \"number\" ? value.location : 0;\n  if (!explicitlyQualified && hasCte(scope, relname)) {\n    scope.aliases.set(alias, { kind: \"cte\" });\n    scope.aliases.set(relname, { kind: \"cte\" });\n    return;\n  }\n  if (\n    !explicitlyQualified &&\n    isProceduralName(ctx.proceduralBindings, relname)\n  ) {\n    return;\n  }\n  const schema = explicitlyQualified ? String(value.schemaname) : \"\";\n  const table: TableRef = { kind: \"table\", name: relname, schema };\n  scope.aliases.set(alias, { kind: \"relation\", table });\n  scope.aliases.set(relname, { kind: \"relation\", table });\n  if (schema) {\n    scope.aliases.set(`${schema}.${relname}`, { kind: \"relation\", table });\n  }\n  const resolution: NameResolution = explicitlyQualified\n    ? \"exact\"\n    : \"search_path\";\n  const confidence: DependencyConfidence = explicitlyQualified\n    ? \"certain\"\n    : \"probable\";\n  into.push(\n    dep(\n      \"REQUIRES_TABLE\",\n      table,\n      confidence,\n      ctx,\n      location,\n      resolution,\n      explicitlyQualified\n    )\n  );\n  into.push(\n    dep(\n      \"READS\",\n      table,\n      confidence,\n      ctx,\n      location,\n      resolution,\n      explicitlyQualified\n    )\n  );\n  if (schema && schema !== \"pg_catalog\") {\n    into.push(\n      dep(\n        \"REQUIRES_SCHEMA\",\n        { kind: \"schema\", name: schema },\n        \"certain\",\n        ctx,\n        location,\n        \"exact\",\n        true\n      )\n    );\n  }\n}\n\nfunction emitFuncCall(\n  value: PgAstNode,\n  scope: QueryScope,\n  ctx: QueryDepContext,\n  into: SemanticDependency[]\n): void {\n  const names = pgNameList(value.funcname);\n  if (names.length === 0) {\n    return;\n  }\n  const qualified = names.length > 1;\n  const schema = qualified ? names[0] : \"\";\n  const name = names[names.length - 1];\n  const location = typeof value.location === \"number\" ? value.location : 0;\n  if (name === \"nextval\" || name === \"setval\") {\n    const literal = constString(firstFuncArg(value));\n    if (literal) {\n      const sequence = sequenceRefFromLiteral(literal);\n      into.push(\n        dep(\n          \"REQUIRES_SEQUENCE\",\n          sequence,\n          sequence.schema ? \"certain\" : \"probable\",\n          ctx,\n          location,\n          sequence.schema ? \"exact\" : \"search_path\",\n          Boolean(sequence.schema)\n        )\n      );\n    }\n  }\n  if (name === \"format\") {\n    return;\n  }\n  const resolution: NameResolution = qualified\n    ? schema === \"pg_catalog\"\n      ? \"catalog_builtin\"\n      : \"exact\"\n    : \"search_path\";\n  const confidence: DependencyConfidence = qualified ? \"certain\" : \"probable\";\n  const object: SchemaObjectRef = { kind: \"function\", name, schema };\n  into.push(\n    dep(\"INVOKES\", object, confidence, ctx, location, resolution, qualified)\n  );\n  into.push(\n    dep(\n      \"REQUIRES_FUNCTION\",\n      object,\n      confidence,\n      ctx,\n      location,\n      resolution,\n      qualified\n    )\n  );\n  void scope;\n}\n\nfunction emitColumnRef(\n  value: PgAstNode,\n  scope: QueryScope,\n  ctx: QueryDepContext,\n  into: SemanticDependency[]\n): void {\n  const fields = Array.isArray(value.fields) ? value.fields : [];\n  const names = fields\n    .map((field) => pgString(field))\n    .filter((item): item is string => Boolean(item));\n  if (names.length < 2) {\n    return;\n  }\n  const column = names[names.length - 1];\n  if (isPostgresSystemColumn(column)) {\n    return;\n  }\n  const alias = names[names.length - 2];\n  const binding = scope.aliases.get(alias);\n  if (!binding || binding.kind === \"cte\" || !binding.table) {\n    return;\n  }\n  const location = typeof value.location === \"number\" ? value.location : 0;\n  into.push(\n    dep(\n      \"REQUIRES_COLUMN\",\n      {\n        kind: \"column\",\n        name: column,\n        schema: binding.table.schema,\n        table: binding.table.name,\n      },\n      binding.table.schema ? \"certain\" : \"probable\",\n      ctx,\n      location,\n      binding.table.schema ? \"exact\" : \"search_path\",\n      Boolean(binding.table.schema)\n    )\n  );\n}\n\nfunction analyzeQueryStmt(\n  stmt: PgAstNode,\n  parent: QueryScope,\n  ctx: QueryDepContext,\n  into: SemanticDependency[]\n): void {\n  const scope = emptyScope(parent);\n  const withClause = stmt.withClause;\n  const entries = cteEntries(withClause);\n  const recursive = isRecursiveWith(withClause);\n  for (const cte of entries) {\n    if (recursive) {\n      scope.ctes.add(cte.name);\n    }\n    walkNode(cte.query, scope, ctx, into);\n    scope.ctes.add(cte.name);\n    scope.aliases.set(cte.name, { kind: \"cte\" });\n  }\n  const rest: PgAstNode = { ...stmt };\n  delete rest.withClause;\n  walkNode(rest.relation, scope, ctx, into);\n  walkNode(rest.fromClause, scope, ctx, into);\n  const remainder: PgAstNode = { ...rest };\n  delete remainder.relation;\n  delete remainder.fromClause;\n  walkNode(remainder, scope, ctx, into);\n}\n\nfunction walkNode(\n  node: unknown,\n  scope: QueryScope,\n  ctx: QueryDepContext,\n  into: SemanticDependency[]\n): void {\n  if (!node) {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (const item of node) {\n      walkNode(item, scope, ctx, into);\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    const kind = keys[0];\n    const inner = asRecord(record[kind]);\n    if (!inner) {\n      return;\n    }\n    if (QUERY_KINDS.has(kind)) {\n      analyzeQueryStmt(inner, scope, ctx, into);\n      return;\n    }\n    if (kind === \"RangeVar\") {\n      emitRangeVar(inner, scope, ctx, into);\n      return;\n    }\n    if (kind === \"FuncCall\") {\n      emitFuncCall(inner, scope, ctx, into);\n      walkNode(inner.args, scope, ctx, into);\n      return;\n    }\n    if (kind === \"ColumnRef\") {\n      emitColumnRef(inner, scope, ctx, into);\n      return;\n    }\n    if (kind === \"Alias\") {\n      return;\n    }\n    walkNode(inner, scope, ctx, into);\n    return;\n  }\n  if (\n    typeof record.relname === \"string\" &&\n    record.funcname == null &&\n    !Array.isArray(record.tableElts) &&\n    !Array.isArray(record.targetList) &&\n    !Array.isArray(record.cmds)\n  ) {\n    emitRangeVar(record, scope, ctx, into);\n    return;\n  }\n  if (Array.isArray(record.funcname)) {\n    emitFuncCall(record, scope, ctx, into);\n    walkNode(record.args, scope, ctx, into);\n    return;\n  }\n  if (Array.isArray(record.fields) && record.relname == null) {\n    emitColumnRef(record, scope, ctx, into);\n    return;\n  }\n  for (const value of Object.values(record)) {\n    walkNode(value, scope, ctx, into);\n  }\n}\n\nfunction looksLikeQueryStmt(record: PgAstNode): boolean {\n  return (\n    Array.isArray(record.fromClause) ||\n    Array.isArray(record.targetList) ||\n    record.withClause != null ||\n    record.selectStmt != null ||\n    record.valuesLists != null ||\n    (record.relation != null &&\n      (record.cols != null ||\n        record.targetList != null ||\n        record.whereClause != null ||\n        record.returningList != null ||\n        record.fromClause != null))\n  );\n}\n\nexport function extractQueryDependencies(\n  node: unknown,\n  filename: string,\n  sql: string,\n  baseOffset: number,\n  options?: { proceduralBindings?: PlpgsqlBindings }\n): SemanticDependency[] {\n  const into: SemanticDependency[] = [];\n  const ctx: QueryDepContext = {\n    baseOffset,\n    filename,\n    proceduralBindings: options?.proceduralBindings,\n    sql,\n  };\n  const record = asRecord(node);\n  if (record && looksLikeQueryStmt(record)) {\n    analyzeQueryStmt(record, emptyScope(), ctx, into);\n    return uniqueDeps(into);\n  }\n  walkNode(node, emptyScope(), ctx, into);\n  return uniqueDeps(into);\n}\n\nexport function writeTargetFromNode(node: unknown):\n  | {\n    explicitlyQualified: boolean;\n    table: TableRef;\n  }\n  | undefined {\n  const record = asRecord(node);\n  const rel =\n    unwrap(record?.relation, \"RangeVar\") ??\n    asRecord(asRecord(record?.relation)?.RangeVar) ??\n    asRecord(record?.relation);\n  if (!rel || typeof rel.relname !== \"string\") {\n    return;\n  }\n  const explicitlyQualified = typeof rel.schemaname === \"string\";\n  return {\n    explicitlyQualified,\n    table: {\n      kind: \"table\",\n      name: rel.relname,\n      schema: explicitlyQualified ? String(rel.schemaname) : \"\",\n    },\n  };\n}\n\nexport function uniqueDeps(\n  dependencies: SemanticDependency[]\n): SemanticDependency[] {\n  const seen = new Set<string>();\n  const result: SemanticDependency[] = [];\n  for (const item of dependencies) {\n    const key = `${item.statementIndex ?? \"\"}:${item.category}:${item.confidence}:${item.resolution ?? \"\"}:${formatObjectRef(item.object)}:${item.object.kind}`;\n    if (seen.has(key)) {\n      continue;\n    }\n    seen.add(key);\n    result.push(item);\n  }\n  return 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 { parsePlpgsqlBindings } from \"./plpgsql-bindings.ts\";\nimport {\n  extractQueryDependencies,\n  uniqueDeps,\n  writeTargetFromNode,\n} from \"./query-deps.ts\";\nimport type {\n  DependencyCategory,\n  DependencyConfidence,\n  MigrationAnalysis,\n  MigrationEffects,\n  SemanticDependency,\n  SemanticStatement,\n  StatementKind,\n} from \"./semantic-ir.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}\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 ownedByNames(options: unknown): string[] | undefined {\n  if (!Array.isArray(options)) {\n    return;\n  }\n  for (const option of options) {\n    const def = asRecord(asRecord(option)?.DefElem) ?? asRecord(option);\n    if (!def || def.defname !== \"owned_by\") {\n      continue;\n    }\n    const list = asRecord(asRecord(def.arg)?.List);\n    const items = Array.isArray(list?.items) ? list.items : [];\n    return items\n      .map((item) => pgString(item))\n      .filter((item): item is string => Boolean(item));\n  }\n}\n\nfunction defElemArgString(options: unknown, name: string): string | undefined {\n  if (!Array.isArray(options)) {\n    return;\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    const first = items?.[0];\n    if (first) {\n      return pgString(first);\n    }\n  }\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\" ? parsePlpgsqlBindings(body, parameters) : 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 { name: names[names.length - 1], schema: names[0] };\n  }\n  return { name: names[0] ?? \"unknown\", schema: fallbackSchema };\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 \"AlterSeqStmt\": {\n      const seq = asRecord(node.sequence) ?? {};\n      const ident = qualifiedName(seq);\n      object = { kind: \"sequence\", name: ident.name, schema: ident.schema };\n      dependencies.push(\n        dep(\n          \"REQUIRES_SEQUENCE\",\n          { kind: \"sequence\", name: ident.name, schema: ident.schema },\n          \"certain\",\n          loc\n        )\n      );\n      const ownedBy = ownedByNames(node.options);\n      if (\n        ownedBy &&\n        !(ownedBy.length === 1 && ownedBy[0]?.toLowerCase() === \"none\")\n      ) {\n        const column = ownedBy[ownedBy.length - 1];\n        const table =\n          ownedBy.length >= 2 ? ownedBy[ownedBy.length - 2] : undefined;\n        const schema =\n          ownedBy.length >= 3 ? ownedBy[ownedBy.length - 3] : DEFAULT_SCHEMA;\n        if (column && table) {\n          dependencies.push(\n            dep(\n              \"REQUIRES_TABLE\",\n              { kind: \"table\", name: table, schema },\n              \"certain\",\n              loc\n            )\n          );\n          dependencies.push(\n            dep(\n              \"REQUIRES_COLUMN\",\n              {\n                kind: \"column\",\n                name: column,\n                schema,\n                table,\n              },\n              \"certain\",\n              loc\n            )\n          );\n        }\n      }\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 { 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(\n    cachePath(cwd),\n    `${JSON.stringify(payload, null, 2)}\\n`,\n    \"utf8\"\n  );\n}\n\nexport function cacheKey(checksum: string, filename: string): string {\n  return `${ANALYZER_ID}:${checksum}:${filename}`;\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 isPhysicalCatalogObservable(\n  object: SchemaObjectRef\n): boolean {\n  switch (object.kind) {\n    case \"column\":\n      return PHYSICAL_CATALOG_CAPABILITIES.columns;\n    case \"extension\":\n      return PHYSICAL_CATALOG_CAPABILITIES.extensions;\n    case \"function\":\n    case \"procedure\":\n      return PHYSICAL_CATALOG_CAPABILITIES.routines;\n    case \"schema\":\n      return PHYSICAL_CATALOG_CAPABILITIES.schemas;\n    case \"sequence\":\n      return PHYSICAL_CATALOG_CAPABILITIES.sequences;\n    case \"table\":\n    case \"view\":\n    case \"materialized_view\":\n      return PHYSICAL_CATALOG_CAPABILITIES.relations;\n    case \"type\":\n    case \"domain\":\n    case \"enum\":\n      return PHYSICAL_CATALOG_CAPABILITIES.types;\n    default:\n      return false;\n  }\n}\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(\n  object: Extract<SchemaObjectRef, { kind: \"function\" | \"procedure\" }>\n): string[] {\n  const base = object.schema ? `${object.schema}.${object.name}` : 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(\n  schema: ProjectedSchema,\n  schemaName: string,\n  name: string\n): 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(\n          object.name\n        );\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\n        .get(tableKey(object.schema, object.table))\n        ?.columns.delete(object.name);\n      return;\n    case \"index\":\n      if (object.table) {\n        schema.tables\n          .get(tableKey(object.schema, object.table))\n          ?.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(\n  schema: ProjectedSchema,\n  object: SchemaObjectRef\n): 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\n          .get(tableKey(object.schema, object.table))\n          ?.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 (\n            key === object.name ||\n            key.endsWith(suffix) ||\n            key.startsWith(`${object.name}(`)\n          ) {\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 (\n        schema.views.has(`${object.schema}.${object.name}`) ||\n        schema.tables.has(tableKey(object.schema, object.name))\n      );\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(\n  objects: readonly SchemaObjectRef[]\n): 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 {\n  catalogToProjected,\n  type ProjectedSchema,\n} 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>(\n    SCHEMA_SQL\n  );\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({\n        kind: \"sequence\",\n        name: row.relname,\n        schema: row.nspname,\n      });\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 { objectKey, type SchemaObjectRef } from \"./ast.ts\";\n\nexport type SchemaProviderSource =\n  | \"application\"\n  | \"embedded-auth\"\n  | \"embedded-chat\"\n  | \"embedded-event-ingress\"\n  | \"embedded-billing\";\n\nexport interface SchemaProvider {\n  filename: string;\n  object: SchemaObjectRef;\n  source: SchemaProviderSource;\n  state: \"applied\" | \"pending\";\n  version: number;\n}\n\nexport function findSchemaProvider(\n  providers: readonly SchemaProvider[],\n  object: SchemaObjectRef\n): SchemaProvider | undefined {\n  const key = objectKey(object);\n  return 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 { findSchemaProvider, type SchemaProvider } 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 (\n        mutation.kind === \"add_column\" &&\n        objectKey(mutation.object) === key\n      ) {\n        return analysis;\n      }\n    }\n  }\n}\n\nfunction shouldCheck(dependency: SemanticDependency): boolean {\n  if (\n    dependency.confidence === \"dynamic\" ||\n    dependency.confidence === \"unknown\"\n  ) {\n    return false;\n  }\n  if (\n    dependency.resolution === \"cte\" ||\n    dependency.resolution === \"unverified\"\n  ) {\n    return false;\n  }\n  if (SKIP_KINDS.has(dependency.category)) {\n    return false;\n  }\n  if (\n    dependency.object.kind === \"table\" &&\n    dependency.object.name.startsWith(\"<\")\n  ) {\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  analyses: readonly MigrationAnalysis[];\n  analysis: 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 (\n      !shouldCheck(dependency) ||\n      parentTableMissing(input.projected, dependency)\n    ) {\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 type { MigrationAnalysis } from \"./semantic-ir.ts\";\nimport { findProvider } from \"./verifier.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(\n        (item) =>\n          item.category === \"REQUIRES_TABLE\" || item.category === \"READS\"\n      )\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(\n        `   reads ${[...new Set(node.reads)].slice(0, 12).join(\", \")}`\n      );\n    }\n    const outgoing = graph.edges.filter(\n      (edge) => edge.fromVersion === node.version\n    );\n    for (const edge of outgoing) {\n      const target = graph.nodes.find(\n        (item) => item.version === edge.toVersion\n      );\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 { analyzeMigrationFile } from \"./analyzer.ts\";\nimport { formatObjectRef, objectKey } from \"./ast.ts\";\nimport { cacheKey, loadAnalysisCache, saveAnalysisCache } from \"./cache.ts\";\nimport type { PhysicalCatalog } from \"./catalog.ts\";\nimport { emptyPhysicalCatalog } from \"./catalog.ts\";\nimport {\n  buildMigrationGraph,\n  type MigrationGraph,\n} from \"./dependency-graph.ts\";\nimport { formatDiagnostic, type MigrationDiagnostic } 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          analyses,\n          analysis,\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          externalProviders: input.externalProviders,\n          projected,\n        })\n      );\n    }\n    for (const statement of analysis.statements) {\n      diagnostics.push(\n        ...verifyMigrationAgainstSchema({\n          analyses,\n          analysis,\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(\n    (object) =>\n      `  ${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  );\n  const reads = [\n    ...new Set(\n      analysis.dependencies\n        .filter(\n          (item) =>\n            item.category === \"REQUIRES_TABLE\" || item.category === \"READS\"\n        )\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) =>\n              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\n      ? `warnings\\n${analysis.warnings.map((w) => `  ${w}`).join(\"\\n\")}`\n      : \"\",\n  ]\n    .filter((line) => line !== \"\")\n    .join(\"\\n\");\n}\n\nfunction formatObjectLine(\n  object: MigrationAnalysis[\"dependencies\"][number][\"object\"]\n): 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 { analyzeMigrationFile } from \"./analyzer.ts\";\nexport type {\n  ColumnRef,\n  SchemaObjectRef,\n  SqlSourceLocation,\n  TableRef,\n} from \"./ast.ts\";\nexport {\n  ANALYSIS_IR_VERSION,\n  ANALYZER_ID,\n  ANALYZER_SEMANTICS_VERSION,\n  formatObjectRef,\n  objectKey,\n  offsetToPosition,\n  PARSER_ID,\n} from \"./ast.ts\";\nexport { ANALYSIS_CACHE_FILENAME, cacheKey } from \"./cache.ts\";\nexport type { PhysicalCatalog } from \"./catalog.ts\";\nexport { emptyPhysicalCatalog, inspectPhysicalCatalog } from \"./catalog.ts\";\nexport type { CompileMigrationsResult } from \"./compiler.ts\";\nexport {\n  analyzeAll,\n  compileMigrations,\n  explainMigration,\n  formatPreflightFailure,\n} from \"./compiler.ts\";\nexport {\n  buildMigrationGraph,\n  formatMigrationGraph,\n} from \"./dependency-graph.ts\";\nexport type {\n  DriftClassification,\n  MigrationDiagnostic,\n} from \"./diagnostics.ts\";\nexport { DIAGNOSTIC_CODES, formatDiagnostic } from \"./diagnostics.ts\";\nexport { parsePostgresSql } from \"./parser.ts\";\nexport type { ProjectedSchema } from \"./projected-schema.ts\";\nexport {\n  applyAnalysis,\n  catalogToProjected,\n  emptyProjectedSchema,\n  fingerprintProjectedSchema,\n  mergeProjectedSchemas,\n  PHYSICAL_CATALOG_CAPABILITIES,\n  schemaHas,\n} from \"./projected-schema.ts\";\nexport type {\n  SchemaProvider,\n  SchemaProviderSource,\n} from \"./schema-provider.ts\";\nexport type { MigrationAnalysis, SemanticDependency } from \"./semantic-ir.ts\";\nexport {\n  findProvider,\n  verifyAppliedDrift,\n  verifyMigrationAgainstSchema,\n} from \"./verifier.ts\";\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport type { MigrationBackend } from \"../backend.ts\";\nimport type { AppliedMigrationResult, MigrationPlanEntry } from \"../types.ts\";\n\nexport async function applyApplicationMigrations(\n  backend: MigrationBackend,\n  pending: readonly MigrationPlanEntry[],\n  ui: AthenaCliUI\n): Promise<AppliedMigrationResult[]> {\n  const newlyApplied: AppliedMigrationResult[] = [];\n  for (const entry of pending) {\n    ui.info(`→ ${entry.migration.filename} applying`);\n    const result = await backend.applyMigration(entry.migration);\n    newlyApplied.push(result);\n    ui.success(`✓ ${entry.migration.filename} ${result.executionMs} ms`);\n  }\n  return newlyApplied;\n}\n","import { ATHENA_MIGRATE_COMMAND } from \"./commands.ts\";\nimport { 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(\n  sql: string\n): string | undefined {\n  const scanned = stripSqlCommentsAndLiterals(sql);\n  const match = TRANSACTION_CONTROL_RE.exec(scanned);\n  if (!match) {\n    return;\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_MIGRATE_COMMAND} 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;\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;\n  }\n  return { name, version };\n}\n\nexport interface DiscoverMigrationsOptions {\n  cwd?: string;\n  /** Absolute or cwd-relative directory path. */\n  directory: 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: Awaited<ReturnType<typeof stat>>;\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(\n    (a, b) => a.version - b.version || a.filename.localeCompare(b.filename)\n  );\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 { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface EnsureApplicationMigrationsDirectoryOptions {\n  /** Absolute migrations directory path. */\n  directory: string;\n  /** When true, report would-be creation without writing. */\n  dryRun?: boolean;\n  /** Write `.gitkeep` so an empty folder is committable. Defaults to true. */\n  keepFile?: boolean;\n}\n\nexport interface EnsureApplicationMigrationsDirectoryResult {\n  created: boolean;\n  directory: string;\n  keepFileWritten: 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  options: EnsureApplicationMigrationsDirectoryOptions\n): Promise<EnsureApplicationMigrationsDirectoryResult> {\n  const keepFile = options.keepFile !== false;\n  const keepPath = join(options.directory, \".gitkeep\");\n  const directoryMissing = !existsSync(options.directory);\n  const keepMissing = keepFile && !existsSync(keepPath);\n\n  if (!(directoryMissing || keepMissing)) {\n    return {\n      created: false,\n      directory: options.directory,\n      keepFileWritten: false,\n    };\n  }\n\n  if (options.dryRun) {\n    return {\n      created: directoryMissing,\n      directory: options.directory,\n      keepFileWritten: keepMissing,\n    };\n  }\n\n  if (directoryMissing) {\n    await mkdir(options.directory, { recursive: true });\n  }\n  if (keepMissing) {\n    await writeFile(keepPath, \"\", \"utf8\");\n  }\n\n  return {\n    created: directoryMissing,\n    directory: options.directory,\n    keepFileWritten: keepMissing,\n  };\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 { ATHENA_MIGRATE_AUTH_SYNC_COMMAND } from \"./commands.ts\";\nimport {\n  DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY,\n  DEFAULT_MIGRATIONS_DIRECTORY,\n} from \"./constants.ts\";\nimport { ensureApplicationMigrationsDirectory } from \"./ensure-directory.ts\";\n\nexport const MANAGED_AUTH_MIGRATION_HEADER = [\n  \"-- AUTO-GENERATED BY @xylex-group/athena\",\n  \"-- Embedded Athena Auth managed migration.\",\n  \"-- Do not edit. The package-owned migration definition is authoritative.\",\n].join(\"\\n\");\n\nexport type ManagedAuthFileStatus =\n  | \"ok\"\n  | \"missing\"\n  | \"modified\"\n  | \"unexpected\";\n\nexport interface ManagedAuthMigrationArtifact {\n  contents: string;\n  filename: string;\n  name: string;\n  version: number;\n}\n\nexport interface ManagedAuthFileInspection {\n  filename: string;\n  status: ManagedAuthFileStatus;\n}\n\nexport interface ManagedAuthInspection {\n  directory: string;\n  drifted: boolean;\n  files: ManagedAuthFileInspection[];\n}\n\nexport interface MaterializeManagedAuthMigrationsOptions {\n  cwd?: string;\n  directory?: string;\n  dryRun?: boolean;\n  /** When true, overwrite locally edited managed files. Default true. */\n  overwrite?: boolean;\n}\n\nexport interface MaterializeManagedAuthMigrationsResult {\n  directory: string;\n  restored: string[];\n  unchanged: string[];\n  unexpected: string[];\n  written: string[];\n}\n\nexport interface EnsureAthenaProjectLayoutOptions {\n  applicationDirectory?: string;\n  cwd?: string;\n  dryRun?: boolean;\n  managedDirectory?: string;\n}\n\nexport interface EnsureAthenaProjectLayoutResult {\n  applicationDirectory: string;\n  createdApplicationMigrations: boolean;\n  createdManagedAuthMigrations: boolean;\n  managedDirectory: string;\n}\n\nexport function managedAuthMigrationFilename(name: string): string {\n  return name.endsWith(\".sql\") ? name : `${name}.sql`;\n}\n\nexport function renderManagedAuthMigrationFile(sql: string): string {\n  const body = sql.trim();\n  return `${MANAGED_AUTH_MIGRATION_HEADER}\\n\\n${body}\\n`;\n}\n\nexport function listManagedAuthMigrationArtifacts(): ManagedAuthMigrationArtifact[] {\n  return listAthenaAuthCanonicalMigrations().map((entry) => ({\n    contents: renderManagedAuthMigrationFile(entry.sql),\n    filename: managedAuthMigrationFilename(entry.name),\n    name: entry.name,\n    version: entry.version,\n  }));\n}\n\nexport function resolveManagedAuthMigrationsDirectory(\n  cwd: string,\n  directory = DEFAULT_MANAGED_AUTH_MIGRATIONS_DIRECTORY\n): string {\n  return resolve(cwd, directory);\n}\n\nexport async function ensureAthenaProjectLayout(\n  options: EnsureAthenaProjectLayoutOptions = {}\n): Promise<EnsureAthenaProjectLayoutResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const applicationDirectory = resolve(\n    cwd,\n    options.applicationDirectory ?? DEFAULT_MIGRATIONS_DIRECTORY\n  );\n  const managedDirectory = resolveManagedAuthMigrationsDirectory(\n    cwd,\n    options.managedDirectory\n  );\n  const application = await ensureApplicationMigrationsDirectory({\n    directory: applicationDirectory,\n    dryRun: options.dryRun,\n  });\n  const managedMissing = !existsSync(managedDirectory);\n  if (managedMissing && !options.dryRun) {\n    await mkdir(managedDirectory, { recursive: true });\n  }\n  return {\n    applicationDirectory,\n    createdApplicationMigrations: application.created,\n    createdManagedAuthMigrations: managedMissing,\n    managedDirectory,\n  };\n}\n\nfunction ignoreManagedName(name: string): boolean {\n  return name.startsWith(\".\") || name === \"README.md\";\n}\n\nexport async function inspectManagedAuthMigrations(\n  options: MaterializeManagedAuthMigrationsOptions = {}\n): Promise<ManagedAuthInspection> {\n  const cwd = options.cwd ?? process.cwd();\n  const directory = resolveManagedAuthMigrationsDirectory(\n    cwd,\n    options.directory\n  );\n  const expected = listManagedAuthMigrationArtifacts();\n  const expectedByName = new Map(\n    expected.map((item) => [item.filename, item.contents])\n  );\n  const files: ManagedAuthFileInspection[] = [];\n\n  if (!existsSync(directory)) {\n    for (const artifact of expected) {\n      files.push({ filename: artifact.filename, status: \"missing\" });\n    }\n    return { directory, drifted: files.length > 0, files };\n  }\n\n  const listed = await readdir(directory);\n  const seen = new Set<string>();\n  for (const name of listed) {\n    if (ignoreManagedName(name)) {\n      continue;\n    }\n    seen.add(name);\n    const expectedContents = expectedByName.get(name);\n    if (expectedContents === undefined) {\n      files.push({ filename: name, status: \"unexpected\" });\n      continue;\n    }\n    const actual = await readFile(join(directory, name), \"utf8\");\n    files.push({\n      filename: name,\n      status: actual === expectedContents ? \"ok\" : \"modified\",\n    });\n  }\n  for (const artifact of expected) {\n    if (!seen.has(artifact.filename)) {\n      files.push({ filename: artifact.filename, status: \"missing\" });\n    }\n  }\n  files.sort((left, right) => left.filename.localeCompare(right.filename));\n  const drifted = files.some((file) => file.status !== \"ok\");\n  return { directory, drifted, files };\n}\n\nexport function formatManagedAuthDrift(\n  inspection: ManagedAuthInspection\n): string {\n  const drifted = inspection.files.filter((file) => file.status !== \"ok\");\n  if (drifted.length === 0) {\n    return \"\";\n  }\n  const lines = [\n    \"Managed Embedded Auth migration files drifted from the package-owned definitions.\",\n    \"Local files are a read-only view. Athena will not execute edited copies.\",\n    \"\",\n    ...drifted.map((file) => `  ${file.status}: ${file.filename}`),\n    \"\",\n    \"Restore with:\",\n    \"\",\n    `  ${ATHENA_MIGRATE_AUTH_SYNC_COMMAND}`,\n  ];\n  return lines.join(\"\\n\");\n}\n\nexport async function materializeManagedAuthMigrations(\n  options: MaterializeManagedAuthMigrationsOptions = {}\n): Promise<MaterializeManagedAuthMigrationsResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const overwrite = options.overwrite !== false;\n  const directory = resolveManagedAuthMigrationsDirectory(\n    cwd,\n    options.directory\n  );\n  const expected = listManagedAuthMigrationArtifacts();\n  const written: string[] = [];\n  const unchanged: string[] = [];\n  const restored: string[] = [];\n  const unexpected: string[] = [];\n\n  if (!options.dryRun) {\n    await mkdir(directory, { recursive: true });\n  }\n\n  const existing = existsSync(directory) ? await readdir(directory) : [];\n  const existingSet = new Set(\n    existing.filter((name) => !ignoreManagedName(name))\n  );\n  const expectedNames = new Set(expected.map((item) => item.filename));\n  for (const name of existingSet) {\n    if (!expectedNames.has(name)) {\n      unexpected.push(name);\n    }\n  }\n\n  for (const artifact of expected) {\n    const path = join(directory, artifact.filename);\n    const present = existingSet.has(artifact.filename);\n    if (!present) {\n      if (!options.dryRun) {\n        await writeFile(path, artifact.contents, \"utf8\");\n      }\n      written.push(artifact.filename);\n      continue;\n    }\n    const actual = await readFile(path, \"utf8\");\n    if (actual === artifact.contents) {\n      unchanged.push(artifact.filename);\n      continue;\n    }\n    if (overwrite) {\n      if (!options.dryRun) {\n        await writeFile(path, artifact.contents, \"utf8\");\n      }\n      restored.push(artifact.filename);\n    }\n  }\n\n  return { directory, restored, unchanged, unexpected, written };\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(\n        token\n      );\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 = /^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;\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;\n  }\n  const sha = result.stdout.trim();\n  return sha.length > 0 ? sha : undefined;\n}\n\nexport function gitBranchName(cwd: string): {\n  branch?: string;\n  detached: boolean;\n} {\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, [\n    \"ls-files\",\n    \"--error-unmatch\",\n    \"--\",\n    relativePath,\n  ]);\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;\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(\n  record: PorcelainV2Record\n): 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(\n  cwd: string,\n  repoPath: string,\n  toplevel: string\n): 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((item): item is string =>\n    Boolean(item)\n  );\n  return candidates.some((path) => {\n    if (\n      migrationsPrefix &&\n      (path === migrationsPrefix || path.startsWith(`${migrationsPrefix}/`))\n    ) {\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 { ATHENA_MIGRATE_ALLOW_DIRTY_COMMAND } from \"../commands.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(\n  change: MigrationWorktreeChange\n): 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_MIGRATE_ALLOW_DIRTY_COMMAND}`,\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(\n      (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\"\n      ? \"\"\n      : \"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(\n  state: MigrationSourceControlState\n): 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 { randomUUID } from \"node:crypto\";\nimport { relative, resolve } from \"node:path\";\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;\n  }\n  const relativePath = toPosix(\n    relative(state.repositoryRoot, resolve(file.path))\n  );\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\n      ? gitBlobSha(state.repositoryRoot, relativePath)\n      : 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      ...(file.executionSql === undefined\n        ? {}\n        : { executionSql: file.executionSql }),\n      ...(file.executionTransform === undefined\n        ? {}\n        : { executionTransform: file.executionTransform }),\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    ...(prepared.executionSql === undefined\n      ? {}\n      : { executionSql: prepared.executionSql }),\n    ...(prepared.executionTransform === undefined\n      ? {}\n      : { executionTransform: prepared.executionTransform }),\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 {\n  freezePreparedMigrations,\n  preparedToMigrationFile,\n} 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 {\n  loadGeneratorConfig,\n  normalizeGeneratorConfig,\n} from \"../../generator/config.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../generator/database-authority.ts\";\nimport type { NormalizedAthenaGeneratorConfig } from \"../../generator/types.ts\";\nimport { ATHENA_MIGRATE_ALLOW_DIRTY_YES_COMMAND } from \"../commands.ts\";\nimport { discoverMigrations } from \"../discovery.ts\";\nimport type { DirtyMigrationWorktree } from \"../git-worktree.ts\";\nimport {\n  ensureAthenaProjectLayout,\n  formatManagedAuthDrift,\n  inspectManagedAuthMigrations,\n  type ManagedAuthInspection,\n  materializeManagedAuthMigrations,\n} from \"../managed-auth.ts\";\nimport {\n  applyWouldBeRefused,\n  classifySourceSafety,\n  formatOverridePrompt,\n  formatSourceSafetyError,\n  formatSourceSafetyWarning,\n  freezePreparedMigrations,\n  inspectSourceControl,\n  preparedToMigrationFile,\n} from \"../source-control/index.ts\";\nimport type {\n  MigrationSourceControlState,\n  MigrationSourceSafety,\n} from \"../source-control/types.ts\";\nimport {\n  type MigrationCommandMode,\n  MigrationError,\n  type MigrationFile,\n  type RunMigrationsOptions,\n} from \"../types.ts\";\nimport {\n  relativeDirectoryDisplay,\n  resolveMigrationsDirectory,\n} from \"./authority.ts\";\n\nexport interface PreparedApplicationMigrationRun {\n  allowDirtyMigrations: boolean;\n  config: NormalizedAthenaGeneratorConfig;\n  cwd: string;\n  directoryDisplay: string;\n  dryRun: boolean;\n  gitWorktree: DirtyMigrationWorktree;\n  local: MigrationFile[];\n  managedAuth: ManagedAuthInspection;\n  mode: MigrationCommandMode;\n  mutating: boolean;\n  sourceControl: MigrationSourceControlState;\n  sourceSafety: MigrationSourceSafety;\n  ui: AthenaCliUI;\n}\n\nfunction resolveUi(options: RunMigrationsOptions): AthenaCliUI {\n  if (options.ui) {\n    return options.ui;\n  }\n  return createCliUi({\n    json: options.json,\n    plain: options.plain,\n    write: options.log,\n  });\n}\n\nexport async function prepareApplicationMigrationRun(\n  options: RunMigrationsOptions\n): Promise<PreparedApplicationMigrationRun> {\n  const cwd = options.cwd ?? process.cwd();\n  const ui = resolveUi(options);\n  const mode: MigrationCommandMode =\n    options.mode ?? (options.dryRun ? \"dry-run\" : \"apply\");\n  const dryRun =\n    mode === \"dry-run\" ||\n    mode === \"plan\" ||\n    mode === \"verify\" ||\n    Boolean(options.dryRun);\n  const explicitProvider = options.databaseUrl\n    ? {\n        connectionString: options.databaseUrl,\n        kind: \"postgres\" as const,\n        mode: \"direct\" as const,\n      }\n    : undefined;\n\n  const loaded = options.config\n    ? (() => {\n        const provider = explicitProvider ?? options.config.provider;\n        if (!provider) {\n          throw new Error(\n            \"Migration runs require a provider or an explicit database URL.\"\n          );\n        }\n        return {\n          config: normalizeGeneratorConfig({\n            ...options.config,\n            provider,\n          }),\n          configPath: options.configPath ?? \"athena.config.ts\",\n        };\n      })()\n    : await loadGeneratorConfig({\n        configPath: options.configPath,\n        cwd,\n        ...(explicitProvider ? { providerOverride: explicitProvider } : {}),\n      });\n  const authority = resolveGeneratorDatabaseAuthority({\n    applyProjectEnv: false,\n    cwd,\n    loaded,\n    mode: \"direct\",\n    ...(explicitProvider ? { provider: explicitProvider } : {}),\n  });\n  const config = {\n    ...loaded.config,\n    provider: authority.provider,\n  };\n  authority.restoreEnv();\n  const absoluteDirectory = resolveMigrationsDirectory(config, cwd);\n  const directoryDisplay = relativeDirectoryDisplay(cwd, absoluteDirectory);\n  const layout = await ensureAthenaProjectLayout({\n    applicationDirectory: absoluteDirectory,\n    cwd,\n    dryRun,\n  });\n  if (layout.createdApplicationMigrations && !dryRun) {\n    ui.note(`Created application migrations directory ${directoryDisplay}`);\n  }\n  const mutating = mode === \"apply\" || mode === \"repair\";\n  if (!dryRun) {\n    const materialized = await materializeManagedAuthMigrations({\n      cwd,\n      overwrite: mutating,\n    });\n    if (\n      mutating &&\n      (materialized.written.length > 0 || materialized.restored.length > 0)\n    ) {\n      ui.note(\n        \"Materialized Embedded Auth migrations in athena/managed/auth/migrations\"\n      );\n    }\n  }\n  const managedAuth = await inspectManagedAuthMigrations({ cwd });\n  if (managedAuth.drifted) {\n    ui.warn(formatManagedAuthDrift(managedAuth));\n  }\n\n  const discover =\n    options.discover ??\n    ((directory: string) => discoverMigrations({ cwd, directory }));\n\n  const discovered = await discover(\n    absoluteDirectory.startsWith(cwd)\n      ? relativeDirectoryDisplay(cwd, absoluteDirectory)\n      : absoluteDirectory\n  );\n\n  const resolvedConfigPath =\n    options.configPath ??\n    (loaded.configPath.startsWith(\"[\") ? undefined : loaded.configPath);\n  const sourceControl = (options.inspectSourceControl ?? inspectSourceControl)({\n    configPath: resolvedConfigPath,\n    cwd,\n    migrationsDirectory: relativeDirectoryDisplay(cwd, absoluteDirectory),\n  });\n  const sourceSafety = classifySourceSafety(sourceControl);\n  const allowDirtyMigrations = Boolean(\n    options.allowDirtyMigrations ?? options.allowDirty\n  );\n  if (mutating && applyWouldBeRefused(sourceSafety) && !allowDirtyMigrations) {\n    throw new MigrationError(\n      \"INTEGRITY\",\n      formatSourceSafetyError(sourceControl, sourceSafety)\n    );\n  }\n  if (\n    mutating &&\n    applyWouldBeRefused(sourceSafety) &&\n    allowDirtyMigrations &&\n    !options.yes\n  ) {\n    if (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n      throw new MigrationError(\n        \"CONFIG\",\n        [\n          formatSourceSafetyWarning(sourceControl, sourceSafety),\n          \"\",\n          \"Non-interactive override requires:\",\n          \"\",\n          `  ${ATHENA_MIGRATE_ALLOW_DIRTY_YES_COMMAND}`,\n        ].join(\"\\n\")\n      );\n    }\n    const confirmed = await ui.confirm(formatOverridePrompt(sourceControl));\n    if (!confirmed) {\n      throw new MigrationError(\"CONFIG\", \"Dirty migration apply cancelled.\");\n    }\n  }\n\n  const prepared = freezePreparedMigrations(discovered, sourceControl);\n  const local = prepared.map(preparedToMigrationFile);\n  const gitWorktree = {\n    dirty: applyWouldBeRefused(sourceSafety),\n    entries: sourceControl.changedFiles\n      .filter((item) => item.affectsMigrations)\n      .map((item) => ({\n        code:\n          item.kind === \"untracked\"\n            ? \"??\"\n            : item.kind === \"deleted\"\n              ? \"D\"\n              : item.kind === \"renamed\"\n                ? \"R\"\n                : item.kind === \"added\"\n                  ? \"A\"\n                  : \"M\",\n        origPath: item.origPath,\n        path: item.path,\n      })),\n    inGitWorktree: sourceControl.available,\n  };\n\n  return {\n    allowDirtyMigrations,\n    config,\n    cwd,\n    directoryDisplay,\n    dryRun,\n    gitWorktree,\n    local,\n    managedAuth,\n    mode,\n    mutating,\n    sourceControl,\n    sourceSafety,\n    ui,\n  };\n}\n","import {\n  type ProjectedSchema,\n  isPhysicalCatalogObservable,\n  schemaHas,\n} from \"../analysis/projected-schema.ts\";\nimport type { MigrationAnalysis } from \"../analysis/semantic-ir.ts\";\nimport {\n  IDENTITY_MIGRATION_EXECUTION_TRANSFORM,\n  checksumMigrationSql,\n  resolveMigrationExecution,\n} from \"../checksum.ts\";\nimport type {\n  ArchivedMigrationSource,\n  LedgerMigrationTruth,\n  ReconciliationConfidence,\n  ReconciliationReport,\n  RepositoryMigrationTruth,\n  PhysicalMatchEvidence,\n  VersionReconciliation,\n} from \"./types.ts\";\n\nfunction canRestoreArchivedSource(archive: ArchivedMigrationSource): boolean {\n  const hasExecutionMetadata =\n    archive.executionChecksum !== undefined ||\n    archive.executionSql !== undefined ||\n    archive.executionTransformId !== undefined ||\n    archive.executionTransformVersion !== undefined;\n  if (!hasExecutionMetadata) {\n    return true;\n  }\n\n  return (\n    archive.executionTransformId === IDENTITY_MIGRATION_EXECUTION_TRANSFORM.id &&\n    archive.executionTransformVersion ===\n      IDENTITY_MIGRATION_EXECUTION_TRANSFORM.version &&\n    (archive.executionChecksum === undefined ||\n      archive.executionChecksum === archive.checksum) &&\n    (archive.executionSql === undefined ||\n      checksumMigrationSql(archive.executionSql) === archive.checksum)\n  );\n}\n\nexport interface ReconcileVersionInput {\n  archive?: ArchivedMigrationSource;\n  archiveAnalysis?: MigrationAnalysis;\n  archiveExecutionAnalysis?: MigrationAnalysis;\n  archiveSelectionAmbiguous?: boolean;\n  laterDependenciesSatisfied: boolean;\n  ledger?: LedgerMigrationTruth;\n  physical: ProjectedSchema;\n  repository?: RepositoryMigrationTruth;\n  repositoryAnalysis?: MigrationAnalysis;\n  repositoryExecutionAnalysis?: MigrationAnalysis;\n}\n\nfunction physicalMatchesAnalysis(\n  physical: ProjectedSchema,\n  analysis: MigrationAnalysis | undefined\n): PhysicalMatchEvidence {\n  if (!analysis) {\n    return \"unknown\";\n  }\n  if (\n    analysis.warnings.length > 0 ||\n    analysis.effects.modifies.length > 0 ||\n    analysis.effects.drops.length > 0 ||\n    analysis.effects.creates.length === 0\n  ) {\n    return \"unknown\";\n  }\n  return analysis.effects.creates.every(\n    (object) =>\n      isPhysicalCatalogObservable(object) && schemaHas(physical, object)\n  );\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\nfunction matchesLedgerExecution(\n  ledger: LedgerMigrationTruth,\n  repository: RepositoryMigrationTruth\n): boolean {\n  const execution = resolveMigrationExecution(repository);\n  if (ledger.executionChecksum === undefined) {\n    return (\n      repository.executionSql === undefined &&\n      execution.transform.id === IDENTITY_MIGRATION_EXECUTION_TRANSFORM.id &&\n      execution.transform.version === IDENTITY_MIGRATION_EXECUTION_TRANSFORM.version\n    );\n  }\n  return (\n    ledger.executionChecksum === execution.checksum &&\n    ledger.executionTransformId === execution.transform.id &&\n    ledger.executionTransformVersion === execution.transform.version\n  );\n}\n\nfunction matchesArchivedExecution(\n  ledger: LedgerMigrationTruth,\n  archive: ArchivedMigrationSource\n): boolean {\n  if (ledger.executionChecksum === undefined) {\n    return (\n      archive.executionChecksum === undefined &&\n      archive.executionSql === undefined &&\n      archive.executionTransformId === undefined &&\n      archive.executionTransformVersion === undefined\n    );\n  }\n  return (\n    archive.executionChecksum === ledger.executionChecksum &&\n    archive.executionTransformId === ledger.executionTransformId &&\n    archive.executionTransformVersion === ledger.executionTransformVersion\n  );\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.repositoryExecutionAnalysis ?? input.repositoryAnalysis\n  );\n  const physicalMatchesArchive = physicalMatchesAnalysis(\n    input.physical,\n    input.archiveExecutionAnalysis ?? input.archiveAnalysis\n  );\n  const executionMatchesLedger =\n    input.ledger && input.repository\n      ? matchesLedgerExecution(input.ledger, input.repository)\n      : true;\n  const archiveExecutionMatchesLedger =\n    input.archive && input.ledger\n      ? matchesArchivedExecution(input.ledger, input.archive)\n      : true;\n  const evidence = {\n    archiveChecksum: input.archive?.checksum,\n    archiveExecutionMatchesLedger,\n    competingArchive: Boolean(\n      input.archiveSelectionAmbiguous ||\n        (input.archive &&\n          input.repository &&\n          input.archive.checksum !== input.repository.checksum)\n    ),\n    executionMatchesLedger,\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: {\n        kind: \"manual-review\",\n        reason: \"No evidence for this version.\",\n      },\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:\n        physicalMatchesRepository === true ? \"MEDIUM\" : \"AMBIGUOUS\",\n      evidence,\n      repository: input.repository,\n      version,\n    };\n  }\n\n  if (input.ledger && !input.repository) {\n    if (\n      input.archive &&\n      input.archive.checksum === input.ledger.checksum &&\n      archiveExecutionMatchesLedger &&\n      canRestoreArchivedSource(input.archive) &&\n      !input.archiveSelectionAmbiguous &&\n      input.laterDependenciesSatisfied\n    ) {\n      return {\n        action: {\n          kind: \"restore-local-source\",\n          source: \"database-archive\",\n          version,\n        },\n        archive: input.archive,\n        autoEligible: physicalMatchesArchive === true,\n        classification: \"MISSING_SOURCE\",\n        confidence:\n          physicalMatchesArchive === true ? \"HIGH\" : \"MEDIUM\",\n        evidence,\n        ledger: input.ledger,\n        version,\n      };\n    }\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          input.archive && !canRestoreArchivedSource(input.archive)\n            ? \"Archived execution metadata cannot be restored automatically.\"\n            : \"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 (!executionMatchesLedger) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Authored SQL agrees, but execution provenance disagrees. 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 (repo.checksum === ledger.checksum) {\n    if (physicalMatchesRepository === true) {\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    if (physicalMatchesRepository === \"unknown\") {\n      return {\n        action: {\n          kind: \"manual-review\",\n          reason:\n            \"Physical postconditions include effects that cannot be fully proven from the catalog. Automatic repair is unsafe.\",\n        },\n        archive: input.archive,\n        autoEligible: false,\n        classification: \"MISSING_PHYSICAL_EFFECT\",\n        confidence: \"AMBIGUOUS\",\n        evidence,\n        ledger,\n        repository: repo,\n        version,\n      };\n    }\n    return {\n      action: {\n        kind: \"create-forward-repair\",\n        reason:\n          \"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 (input.archiveSelectionAmbiguous) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Multiple archives exist for this version, but none matches the ledger checksum. Automatic repair is unsafe.\",\n      },\n      autoEligible: false,\n      classification: \"AMBIGUOUS_HISTORY\",\n      confidence: \"AMBIGUOUS\",\n      evidence,\n      ledger,\n      repository: repo,\n      version,\n    };\n  }\n\n  if (input.archive && !archiveExecutionMatchesLedger) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Authored SQL agrees, but execution provenance disagrees. 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    input.archive &&\n    input.archive.checksum === ledger.checksum &&\n    physicalMatchesArchive === true &&\n    physicalMatchesRepository === true\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 === true &&\n    physicalMatchesRepository === false &&\n    input.laterDependenciesSatisfied\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 (\n    physicalMatchesRepository === \"unknown\" ||\n    (input.archive && physicalMatchesArchive === \"unknown\")\n  ) {\n    return {\n      action: {\n        kind: \"manual-review\",\n        reason:\n          \"Physical postconditions include effects that cannot be fully proven from the catalog. Automatic repair is unsafe.\",\n      },\n      archive: input.archive,\n      autoEligible: false,\n      classification: \"MISSING_PHYSICAL_EFFECT\",\n      confidence: \"AMBIGUOUS\",\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 === true &&\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    (!input.archive || physicalMatchesArchive === false)\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:\n          \"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(\n    (item) => item.classification !== \"CONSISTENT\"\n  );\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(diagnosis: VersionReconciliation): boolean {\n  return diagnosis.autoEligible && diagnosis.confidence === \"HIGH\";\n}\n\nexport type { ReconciliationConfidence };\n","import { analyzeMigrationFile } from \"../analysis/analyzer.ts\";\nimport { objectKey } from \"../analysis/ast.ts\";\nimport {\n  type ProjectedSchema,\n  schemaHas,\n} from \"../analysis/projected-schema.ts\";\nimport type { MigrationAnalysis } from \"../analysis/semantic-ir.ts\";\nimport { checksumMigrationSql } from \"../checksum.ts\";\nimport type { AppliedMigration, MigrationFile } from \"../types.ts\";\nimport { buildReconciliationReport, reconcileVersion } from \"./engine.ts\";\nimport type {\n  ArchivedMigrationSource,\n  ReconciliationReport,\n  VersionReconciliation,\n} from \"./types.ts\";\n\nfunction effectObjectsProvidedByMigration(\n  analysis: MigrationAnalysis\n): Set<string> {\n  const provided = new Set(\n    analysis.effects.creates.map((object) => objectKey(object))\n  );\n  for (const mutation of analysis.effects.modifies) {\n    if (mutation.kind === \"add_column\") {\n      provided.add(objectKey(mutation.object));\n    }\n  }\n  return provided;\n}\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 = effectObjectsProvidedByMigration(provider);\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 versionArchives = input.archives.filter(\n      (item) => item.version === version\n    );\n    const archive = ledger\n      ? versionArchives.find((item) => item.checksum === ledger.checksum)\n      : versionArchives.length === 1\n        ? versionArchives[0]\n        : undefined;\n    const archiveSelectionAmbiguous =\n      versionArchives.length > 1 &&\n      (ledger === undefined ||\n        !versionArchives.some((item) => item.checksum === ledger.checksum));\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    const archiveExecutionAnalysis =\n      archive?.executionSql === undefined\n        ? archiveAnalysis\n        : await analyzeMigrationFile({\n            checksum:\n              archive.executionChecksum ??\n              checksumMigrationSql(archive.executionSql),\n            filename: `${archive.sourcePath ?? `${version}_archive.sql`}#execution`,\n            name: \"archive-execution\",\n            path: archive.sourcePath ?? \"archive\",\n            sql: archive.executionSql,\n            version,\n          });\n    const repositoryExecutionAnalysis =\n      file?.executionSql === undefined\n        ? repositoryAnalysis\n        : await analyzeMigrationFile({\n            checksum: checksumMigrationSql(file.executionSql),\n            filename: `${file.filename}#execution`,\n            name: `${file.name}-execution`,\n            path: file.path,\n            sql: file.executionSql,\n            version,\n          });\n    diagnoses.push(\n      reconcileVersion({\n        archive,\n        archiveAnalysis,\n        archiveExecutionAnalysis,\n        archiveSelectionAmbiguous,\n        laterDependenciesSatisfied: laterDependenciesSatisfied(\n          version,\n          input.analyses,\n          input.physical\n        ),\n        ledger: ledger\n          ? {\n              checksum: ledger.checksum,\n              executionChecksum: ledger.executionChecksum,\n              executionTransformId: ledger.executionTransformId,\n              executionTransformVersion: ledger.executionTransformVersion,\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              ...(file.executionSql === undefined\n                ? {}\n                : { executionSql: file.executionSql }),\n              ...(file.executionTransform === undefined\n                ? {}\n                : { executionTransform: file.executionTransform }),\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        repositoryExecutionAnalysis,\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    repo && ledger\n      ? diagnosis.evidence.executionMatchesLedger\n        ? \"  execution provenance matches repository\"\n        : \"  execution provenance does not match repository\"\n      : \"  execution provenance unavailable\",\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.archive && ledger\n      ? diagnosis.evidence.archiveExecutionMatchesLedger\n        ? \"  archived execution provenance matches ledger\"\n        : \"  archived execution provenance does not match ledger\"\n      : \"  archived execution provenance 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\" ? \"Automatic repair is unsafe.\\n\" : \"\",\n    \"Migration SQL will NOT be executed.\",\n  ].filter((line) => line !== \"\");\n  return lines.join(\"\\n\");\n}\n\nexport function serializeReconciliationReport(\n  report: ReconciliationReport\n): 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 [\n    \"Athena migration reconciliation\",\n    \"\",\n    body || \"No divergences detected.\",\n  ].join(\"\\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 { ATHENA_MIGRATE_RECONCILE_APPLY_YES_COMMAND } from \"../commands.ts\";\nimport {\n  assembleReconciliationReport,\n  formatReconciliationReport,\n  isHighAutoRepair,\n  serializeReconciliationReport,\n} from \"../reconciliation/index.ts\";\nimport { MigrationError, type RunMigrationsOptions } from \"../types.ts\";\n\nexport async function reconcileApplicationMigrations(input: {\n  backend: MigrationBackend;\n  cwd: string;\n  directoryDisplay: string;\n  local: readonly import(\"../types.ts\").MigrationFile[];\n  options: RunMigrationsOptions;\n  semantic: CompileMigrationsResult;\n  ui: AthenaCliUI;\n}): Promise<import(\"../reconciliation/types.ts\").ReconciliationReport> {\n  const { backend, cwd, directoryDisplay, local, options, semantic, ui } =\n    input;\n  if (options.applyReconcile) {\n    await backend.ensureLedger();\n  }\n  const archives = (await backend.listArchivedSources?.()) ?? [];\n  const reconciliation = await assembleReconciliationReport({\n    analyses: semantic.analyses,\n    applied: await backend.listAppliedMigrations(),\n    archives,\n    files: local,\n    physical: semantic.physical,\n  });\n  if (options.json) {\n    (options.log ?? console.log)(serializeReconciliationReport(reconciliation));\n  } else {\n    ui.info(formatReconciliationReport(reconciliation.diagnoses));\n    ui.info(reconciliation.summary);\n  }\n  const eligible = reconciliation.diagnoses.filter(isHighAutoRepair);\n  if (options.applyReconcile && eligible.length > 0) {\n    if (!options.yes) {\n      if (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n        throw new MigrationError(\n          \"CONFIG\",\n          [\n            reconciliation.summary,\n            \"\",\n            \"Applying HIGH-confidence metadata repairs requires confirmation.\",\n            \"\",\n            `  ${ATHENA_MIGRATE_RECONCILE_APPLY_YES_COMMAND}`,\n          ].join(\"\\n\")\n        );\n      }\n      const confirmed = await ui.confirm(\n        `Apply ${eligible.length} HIGH-confidence metadata repair(s)? Migration SQL will not run.`\n      );\n      if (!confirmed) {\n        throw new MigrationError(\"CONFIG\", \"Reconciliation apply cancelled.\");\n      }\n    }\n    for (const diagnosis of eligible) {\n      if (diagnosis.action.kind === \"repair-ledger\") {\n        await backend.repairLedgerChecksum?.(\n          diagnosis.action.version,\n          diagnosis.action.toChecksum\n        );\n      }\n      if (\n        diagnosis.action.kind === \"restore-local-source\" &&\n        diagnosis.archive\n      ) {\n        const filename =\n          basename(\n            diagnosis.repository?.path ?? diagnosis.archive.sourcePath ?? \"\"\n          ) || `${String(diagnosis.version).padStart(4, \"0\")}_restored.sql`;\n        const target =\n          diagnosis.repository?.path ??\n          resolve(cwd, directoryDisplay, filename);\n        if (target && basename(target)) {\n          await writeFile(target, diagnosis.archive.sql, \"utf8\");\n        }\n      }\n      await backend.insertReconciliation?.({\n        action: diagnosis.action.kind,\n        classification: diagnosis.classification,\n        confidence: diagnosis.confidence,\n        evidence: diagnosis.evidence,\n        newChecksum:\n          diagnosis.action.kind === \"repair-ledger\"\n            ? diagnosis.action.toChecksum\n            : diagnosis.repository?.checksum,\n        oldChecksum: diagnosis.ledger?.checksum,\n        repositoryCommit: diagnosis.repository?.gitBlobSha,\n        version: diagnosis.version,\n      });\n    }\n  }\n  return reconciliation;\n}\n","import { listAthenaAuthCanonicalMigrations } from \"../../auth/schema/migrations.ts\";\nimport { analyzeAll } from \"../analysis/compiler.ts\";\nimport {\n  applyAnalysis,\n  emptyProjectedSchema,\n  type 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  entries: readonly {\n    action: string;\n    ledgerState: string;\n    version: number;\n  }[];\n}\n\nexport interface PackagedMigrationProjection {\n  providers: SchemaProvider[];\n  schema: ProjectedSchema;\n}\n\nfunction authFiles(): MigrationFile[] {\n  return listAthenaAuthCanonicalMigrations().map((entry) => ({\n    checksum: checksumMigrationSql(entry.sql),\n    filename: entry.name,\n    name: entry.name,\n    path: entry.name,\n    sql: entry.sql,\n    version: entry.version,\n  }));\n}\n\nfunction pendingAuthVersions(\n  authPlan: PackagedAuthPlanSlice | undefined\n): ReadonlySet<number> {\n  if (!authPlan) {\n    return new Set();\n  }\n  return new Set(\n    authPlan.entries\n      .filter(\n        (entry) => entry.action === \"apply\" || entry.ledgerState === \"absent\"\n      )\n      .map((entry) => entry.version)\n  );\n}\n\nexport async function buildPackagedMigrationProjection(input: {\n  authPlan?: PackagedAuthPlanSlice;\n  cacheDir?: string;\n}): Promise<PackagedMigrationProjection> {\n  const pending = pendingAuthVersions(input.authPlan);\n  if (pending.size === 0) {\n    return {\n      providers: [],\n      schema: emptyProjectedSchema(),\n    };\n  }\n  const files = authFiles().filter((file) => pending.has(file.version));\n  const analyses = await analyzeAll(files, input.cacheDir);\n  let schema = emptyProjectedSchema();\n  const providers: SchemaProvider[] = [];\n  for (const analysis of analyses) {\n    schema = applyAnalysis(schema, analysis);\n    for (const object of analysis.effects.creates) {\n      providers.push({\n        filename: analysis.filename,\n        object,\n        source: \"embedded-auth\",\n        state: \"pending\",\n        version: analysis.version,\n      });\n    }\n  }\n  return { providers, schema };\n}\n","export type AthenaAuthMigrationModules = {\n  auth?: boolean;\n  billing?: boolean;\n  chat?: boolean;\n  eventIngress?: boolean;\n};\n\n/**\n * Embedded Auth applies when `modules` is omitted (legacy) or `modules.auth === true`.\n */\nexport function shouldApplyEmbeddedAuthMigrations(\n  modules: AthenaAuthMigrationModules | undefined\n): boolean {\n  if (modules == null) {\n    return true;\n  }\n  return modules.auth === true;\n}\n","import type { AthenaConfig } from \"../../generator/types.ts\";\nimport {\n  type CompileMigrationsResult,\n  compileMigrations,\n} from \"../analysis/index.ts\";\nimport { emptyProjectedSchema } from \"../analysis/projected-schema.ts\";\nimport type { MigrationBackend } from \"../backend.ts\";\nimport {\n  buildPackagedMigrationProjection,\n  type PackagedAuthPlanSlice,\n} from \"../embedded/semantics.ts\";\nimport { shouldApplyEmbeddedAuthMigrations } from \"../embedded-auth/enablement.ts\";\n\nexport async function compileApplicationSemantics(input: {\n  authPlan?: PackagedAuthPlanSlice;\n  backend: MigrationBackend;\n  cacheDir?: string;\n  local: readonly import(\"../types.ts\").MigrationFile[];\n  modules?: AthenaConfig[\"modules\"];\n  plan: import(\"../types.ts\").MigrationPlan;\n  strict?: boolean;\n}): Promise<CompileMigrationsResult> {\n  const catalog = await input.backend.inspectCatalog();\n  const packaged = shouldApplyEmbeddedAuthMigrations(input.modules)\n    ? await buildPackagedMigrationProjection({\n        authPlan: input.authPlan,\n        cacheDir: input.cacheDir,\n      })\n    : { providers: [], schema: emptyProjectedSchema() };\n  return compileMigrations({\n    appliedVersions: new Set(\n      input.plan.applied.map((entry) => entry.migration.version)\n    ),\n    cacheDir: input.cacheDir,\n    catalog,\n    externalProviders: packaged.providers,\n    files: input.local,\n    projectedPrerequisites: packaged.schema,\n    strict: input.strict,\n  });\n}\n\nexport function blockingSemantic(result: CompileMigrationsResult): boolean {\n  return result.diagnostics.some(\n    (item) => item.classification !== \"dynamic_sql\"\n  );\n}\n","/**\n * Node CLI / tooling adapter for Embedded Auth schema apply.\n *\n * Do not import auth/server-entry, server.ts, next/*, or server-only.\n */\nexport {\n  inspectAthenaAuthSchema,\n  migrateAthenaAuthSchema,\n  readAthenaAuthSchemaStatus,\n} from \"../local/schema.ts\";\n","import {\n  type AthenaAuthDatabase,\n  createPostgresAuthDatabase,\n} from \"../../auth/local/database.ts\";\nimport { AthenaAuthRuntimeError } from \"../../auth/local/errors.ts\";\nimport {\n  classifyAuthLedgerQueryError,\n  healthFromAuthPlan,\n} from \"../../auth/local/ledger-health.ts\";\nimport {\n  type AthenaAuthMigrationPlan,\n  getAthenaAuthExpectedLedger,\n  planAthenaAuthSchema,\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  const expected = getAthenaAuthExpectedLedger();\n  const entries = expected.map((entry) => ({\n    action: \"apply\" as const,\n    checksum: entry.checksum ?? \"\",\n    ledgerState: \"absent\" as const,\n    name: entry.name,\n    repairability: repairabilityForAuthMigration(),\n    schemaState: \"unknown\" as const,\n    version: entry.version,\n  }));\n  const plan = {\n    appliedCount: 0,\n    conflictCount: 0,\n    driftCount: 0,\n    entries,\n    hasBlockingDrift: false,\n    health: healthFromAuthPlan({\n      conflictCount: 0,\n      entries,\n      hasBlockingDrift: false,\n    }),\n    pendingCount: entries.length,\n  } satisfies AthenaAuthMigrationPlan;\n  return plan;\n}\n\nexport async function openAuthDatabase(\n  options: RunMigrationsOptions,\n  connectionString: string\n): Promise<AthenaAuthDatabase | undefined> {\n  if (options.createAuthDatabase) {\n    return options.createAuthDatabase(connectionString);\n  }\n  if (options.createBackend) {\n    // Test backends typically skip live Auth DB access.\n    return;\n  }\n  return createPostgresAuthDatabase(connectionString);\n}\n\nfunction withPlanHealth(\n  plan: AthenaAuthMigrationPlan\n): AthenaAuthMigrationPlan {\n  return {\n    ...plan,\n    health: plan.health ?? healthFromAuthPlan(plan),\n  };\n}\n\nfunction authPlanLoadError(error: unknown): MigrationError {\n  if (error instanceof MigrationError) {\n    return error;\n  }\n  if (error instanceof AthenaAuthRuntimeError) {\n    const kind = classifyAuthLedgerQueryError(error);\n    if (kind === \"PERMISSION_DENIED\") {\n      return new MigrationError(\"PROVIDER\", error.publicMessage, {\n        cause: error,\n      });\n    }\n    if (kind === \"INVALID_LEDGER\") {\n      return new MigrationError(\"EXECUTION\", error.publicMessage, {\n        cause: error,\n      });\n    }\n    if (kind === \"UNREACHABLE\") {\n      return new MigrationError(\"PROVIDER\", error.publicMessage, {\n        cause: error,\n      });\n    }\n    return new MigrationError(\"EXECUTION\", error.publicMessage, {\n      cause: error,\n    });\n  }\n  const kind = classifyAuthLedgerQueryError(error);\n  const message = error instanceof Error ? error.message : String(error);\n  if (kind === \"PERMISSION_DENIED\") {\n    return new MigrationError(\n      \"PROVIDER\",\n      `ATHENA_AUTH_LEDGER_PERMISSION_DENIED\\n\\n${message}`,\n      { cause: error }\n    );\n  }\n  return new MigrationError(\n    \"PROVIDER\",\n    `ATHENA_AUTH_LEDGER_UNREACHABLE\\n\\nEmbedded Auth could not reach the database to read the migration ledger.\\n\\n${message}`,\n    { cause: error }\n  );\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  options: RunMigrationsOptions,\n  connectionString: string,\n  inspectSchema: boolean\n): Promise<AthenaAuthMigrationPlan> {\n  if (options.planAuthSchema) {\n    return withPlanHealth(await options.planAuthSchema());\n  }\n  let database: AthenaAuthDatabase | undefined;\n  try {\n    database = await openAuthDatabase(options, connectionString);\n  } catch (error) {\n    const kind = classifyAuthLedgerQueryError(error);\n    if (kind === \"UNINITIALIZED\") {\n      return offlineExpectedAuthPlan();\n    }\n    throw authPlanLoadError(error);\n  }\n  if (!database) {\n    return offlineExpectedAuthPlan();\n  }\n  try {\n    return withPlanHealth(\n      await planAthenaAuthSchema(database, { inspectSchema })\n    );\n  } catch (error) {\n    const kind = classifyAuthLedgerQueryError(error);\n    if (kind === \"UNINITIALIZED\") {\n      return offlineExpectedAuthPlan();\n    }\n    throw authPlanLoadError(error);\n  } finally {\n    await database.close?.();\n  }\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  type AthenaAuthMigrationModules,\n  shouldApplyEmbeddedAuthMigrations,\n} from \"./enablement.ts\";\nimport { openAuthDatabase } from \"./plan.ts\";\n\nexport async function applyEmbeddedAuthMigrations(\n  options: RunMigrationsOptions,\n  connectionString: string,\n  ui: AthenaCliUI,\n  modules?: AthenaAuthMigrationModules\n): Promise<void> {\n  if (!shouldApplyEmbeddedAuthMigrations(modules)) {\n    return;\n  }\n  if (options.migrateAuthSchema) {\n    ui.info(\"→ Embedded Auth schema applying\");\n    await options.migrateAuthSchema();\n    ui.success(\"✓ Embedded Auth schema applied\");\n    return;\n  }\n  if (options.createBackend && !options.createAuthDatabase) {\n    return;\n  }\n  ui.info(\"→ Embedded Auth schema applying\");\n  const database = await openAuthDatabase(options, connectionString);\n  if (!database) {\n    return;\n  }\n  try {\n    await migrateAthenaAuthSchema(database);\n  } finally {\n    await database.close?.();\n  }\n  ui.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  options: RunMigrationsOptions,\n  connectionString: string,\n  dryRun: boolean\n): Promise<void> {\n  if (options.repairAuthSchema) {\n    await options.repairAuthSchema({ dryRun });\n    return;\n  }\n  if (options.createBackend && !options.createAuthDatabase) {\n    return;\n  }\n  const database = await openAuthDatabase(options, connectionString);\n  if (!database) {\n    return;\n  }\n  try {\n    await repairAthenaAuthSchema(database, { dryRun });\n  } finally {\n    await database.close?.();\n  }\n}\n","export type AthenaEventIngressMigrationModules = {\n  auth?: boolean;\n  billing?: boolean;\n  chat?: boolean;\n  eventIngress?: boolean;\n};\n\nexport function shouldApplyEmbeddedEventIngressMigrations(\n  modules: AthenaEventIngressMigrationModules | undefined\n): boolean {\n  return modules?.eventIngress === true || modules?.billing === true;\n}\n\nexport function shouldApplyEmbeddedBillingMigrations(\n  modules: AthenaEventIngressMigrationModules | undefined\n): boolean {\n  return modules?.billing === true;\n}\n","import type { AthenaCliUI } from \"../cli/ui/index.ts\";\nimport type {\n  AthenaPostgresClient,\n  AthenaPostgresQueryable,\n} from \"../postgres/driver.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../postgres/owned-runtime.ts\";\nimport { PostgresDeadline } from \"../postgres/pool/deadline.ts\";\nimport type { PostgresPoolManager } from \"../postgres/pool/manager.ts\";\nimport { MigrationError } from \"./types.ts\";\n\nexport interface EmbeddedSqlRelation {\n  readonly schema: string;\n  readonly table: string;\n}\n\nexport interface EmbeddedSqlColumn {\n  readonly column: string;\n  readonly schema: string;\n  readonly table: string;\n}\n\nexport interface EmbeddedSqlMigration {\n  readonly checksum: string;\n  readonly filename: string;\n  readonly legacyChecksums?: readonly string[];\n  readonly name: string;\n  readonly requiredColumns?: readonly EmbeddedSqlColumn[];\n  readonly requiredRelations?: readonly EmbeddedSqlRelation[];\n  readonly sql: string;\n  readonly version: number;\n}\n\nexport type EmbeddedLedgerEntryStatus =\n  | \"applied\"\n  | \"pending\"\n  | \"legacy-compatible\"\n  | \"checksum-mismatch\";\n\nexport interface EmbeddedLedgerEntry {\n  readonly checksum: string;\n  readonly filename: string;\n  readonly name: string;\n  readonly status: EmbeddedLedgerEntryStatus;\n  readonly storedChecksum?: string;\n  readonly version: number;\n}\n\nexport interface EmbeddedLedgerInspection {\n  readonly entries: readonly EmbeddedLedgerEntry[];\n  readonly ledgerExists: boolean;\n  readonly ledgerTable: string;\n  readonly missingColumns?: readonly string[];\n  readonly missingRelations?: readonly string[];\n}\n\nconst LEDGER_TABLE_PATTERN =\n  /^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)?$/;\n\nexport function assertLedgerTableName(ledgerTable: string): string {\n  if (!LEDGER_TABLE_PATTERN.test(ledgerTable)) {\n    throw new MigrationError(\n      \"CONFIG\",\n      `Invalid embedded migration ledger table: ${ledgerTable}`\n    );\n  }\n  return ledgerTable;\n}\n\nexport function quoteLedgerTable(ledgerTable: string): string {\n  return assertLedgerTableName(ledgerTable)\n    .split(\".\")\n    .map((part) => `\"${part}\"`)\n    .join(\".\");\n}\n\nfunction ledgerChecksum(\n  row: Record<string, unknown> | undefined\n): string | undefined {\n  const value = row?.checksum;\n  return typeof value === \"string\" ? value : undefined;\n}\n\nexport async function embeddedLedgerExists(\n  queryable: AthenaPostgresQueryable,\n  ledgerTable: string\n): Promise<boolean> {\n  const name = assertLedgerTableName(ledgerTable);\n  const result = await queryable.query<{ oid: string | null }>(\n    \"SELECT to_regclass($1) AS oid\",\n    [name]\n  );\n  const oid = result.rows[0]?.oid;\n  return oid != null && String(oid).length > 0;\n}\n\nasync function readLedgerChecksum(\n  queryable: AthenaPostgresQueryable,\n  ledgerTable: string,\n  version: number\n): Promise<string | undefined> {\n  const quoted = quoteLedgerTable(ledgerTable);\n  const applied = await queryable.query(\n    `SELECT checksum FROM ${quoted} WHERE version = $1`,\n    [version]\n  );\n  return ledgerChecksum(applied.rows[0] as Record<string, unknown> | undefined);\n}\n\nexport function isLegacyLedgerChecksum(\n  migration: EmbeddedSqlMigration,\n  stored: string\n): boolean {\n  return migration.legacyChecksums?.includes(stored) === true;\n}\n\nexport async function physicalRelationsPresent(\n  queryable: AthenaPostgresQueryable,\n  relations: readonly EmbeddedSqlRelation[] | undefined\n): Promise<boolean> {\n  if (relations == null || relations.length === 0) {\n    return false;\n  }\n  for (const relation of relations) {\n    const qualified = `${relation.schema}.${relation.table}`;\n    const result = await queryable.query<{ oid: string | null }>(\n      \"SELECT to_regclass($1) AS oid\",\n      [qualified]\n    );\n    const oid = result.rows[0]?.oid;\n    if (oid == null || String(oid).length === 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport async function physicalColumnsPresent(\n  queryable: AthenaPostgresQueryable,\n  columns: readonly EmbeddedSqlColumn[] | undefined\n): Promise<boolean> {\n  if (columns == null || columns.length === 0) {\n    return false;\n  }\n  for (const column of columns) {\n    const result = await queryable.query<{ column_name: string }>(\n      `SELECT column_name\n       FROM information_schema.columns\n       WHERE table_schema = $1\n         AND table_name = $2\n         AND column_name = $3`,\n      [column.schema, column.table, column.column]\n    );\n    if (result.rows.length === 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\nasync function physicalSchemaPresent(\n  queryable: AthenaPostgresQueryable,\n  migration: EmbeddedSqlMigration\n): Promise<boolean> {\n  const relationsPresent =\n    migration.requiredRelations == null || migration.requiredRelations.length === 0\n      ? true\n      : await physicalRelationsPresent(queryable, migration.requiredRelations);\n  const columnsPresent =\n    migration.requiredColumns == null || migration.requiredColumns.length === 0\n      ? true\n      : await physicalColumnsPresent(queryable, migration.requiredColumns);\n  return relationsPresent && columnsPresent;\n}\n\nfunction checksumMismatchMessage(\n  migration: EmbeddedSqlMigration,\n  stored: string,\n  physicalOk: boolean\n): string {\n  const legacy = isLegacyLedgerChecksum(migration, stored);\n  if (legacy && !physicalOk) {\n    return [\n      `${migration.filename} version ${migration.version} ledger identity is legacy (${stored}) but the physical schema does not match the packaged generation.`,\n      `Packaged checksum: ${migration.checksum}.`,\n      \"Athena will not rewrite the ledger. Restore the schema or apply a forward migration.\",\n    ].join(\" \");\n  }\n  return [\n    `${migration.filename} version ${migration.version} checksum mismatch.`,\n    `Ledger: ${stored}.`,\n    `Package: ${migration.checksum}.`,\n    legacy\n      ? \"Legacy identity is listed but physical fingerprint was not confirmed.\"\n      : \"Unknown checksum drift fails closed.\",\n  ].join(\" \");\n}\n\nasync function classifyStoredChecksum(input: {\n  migration: EmbeddedSqlMigration;\n  queryable: AthenaPostgresQueryable;\n  stored: string;\n}): Promise<EmbeddedLedgerEntryStatus> {\n  const { migration, queryable, stored } = input;\n  if (stored === migration.checksum) {\n    return \"applied\";\n  }\n  if (!isLegacyLedgerChecksum(migration, stored)) {\n    return \"checksum-mismatch\";\n  }\n  const physicalOk = await physicalSchemaPresent(queryable, migration);\n  return physicalOk ? \"legacy-compatible\" : \"checksum-mismatch\";\n}\n\nasync function adoptLegacyLedgerChecksum(input: {\n  client: AthenaPostgresClient;\n  ledgerTable: string;\n  migration: EmbeddedSqlMigration;\n  stored: string;\n}): Promise<void> {\n  const quoted = quoteLedgerTable(input.ledgerTable);\n  await input.client.query(\"BEGIN\");\n  try {\n    const updated = await input.client.query(\n      `UPDATE ${quoted}\n\t\t\t SET checksum = $1, name = $2\n\t\t\t WHERE version = $3 AND checksum = $4`,\n      [\n        input.migration.checksum,\n        input.migration.name,\n        input.migration.version,\n        input.stored,\n      ]\n    );\n    const rowCount =\n      typeof (updated as { rowCount?: number }).rowCount === \"number\"\n        ? (updated as { rowCount: number }).rowCount\n        : 0;\n    if (rowCount < 1) {\n      throw new MigrationError(\n        \"INTEGRITY\",\n        `${input.migration.filename} version ${input.migration.version} legacy adoption updated 0 ledger rows.`\n      );\n    }\n    await input.client.query(\"COMMIT\");\n  } catch (error) {\n    try {\n      await input.client.query(\"ROLLBACK\");\n    } catch {\n      // Session may already be aborted.\n    }\n    throw error;\n  }\n}\n\nexport async function inspectEmbeddedSqlLedger(input: {\n  ledgerTable: string;\n  migrations: readonly EmbeddedSqlMigration[];\n  queryable: AthenaPostgresQueryable;\n}): Promise<EmbeddedLedgerInspection> {\n  const ledgerExists = await embeddedLedgerExists(\n    input.queryable,\n    input.ledgerTable\n  );\n  const entries: EmbeddedLedgerEntry[] = [];\n  for (const migration of input.migrations) {\n    if (!ledgerExists) {\n      entries.push({\n        checksum: migration.checksum,\n        filename: migration.filename,\n        name: migration.name,\n        status: \"pending\",\n        version: migration.version,\n      });\n      continue;\n    }\n    const stored = await readLedgerChecksum(\n      input.queryable,\n      input.ledgerTable,\n      migration.version\n    );\n    if (stored == null) {\n      entries.push({\n        checksum: migration.checksum,\n        filename: migration.filename,\n        name: migration.name,\n        status: \"pending\",\n        version: migration.version,\n      });\n      continue;\n    }\n    const status = await classifyStoredChecksum({\n      migration,\n      queryable: input.queryable,\n      stored,\n    });\n    entries.push({\n      checksum: migration.checksum,\n      filename: migration.filename,\n      name: migration.name,\n      status,\n      storedChecksum: stored,\n      version: migration.version,\n    });\n  }\n  const latest = input.migrations[input.migrations.length - 1];\n  const latestEntry = entries[entries.length - 1];\n  const missingRelations: string[] = [];\n  const missingColumns: string[] = [];\n  if (\n    latest &&\n    latestEntry?.status === \"applied\" &&\n    latest.requiredRelations &&\n    latest.requiredRelations.length > 0\n  ) {\n    for (const relation of latest.requiredRelations) {\n      const qualified = `${relation.schema}.${relation.table}`;\n      const present = await physicalRelationsPresent(input.queryable, [\n        relation,\n      ]);\n      if (!present) {\n        missingRelations.push(qualified);\n      }\n    }\n  }\n  if (\n    latest &&\n    latestEntry?.status === \"applied\" &&\n    latest.requiredColumns &&\n    latest.requiredColumns.length > 0\n  ) {\n    for (const column of latest.requiredColumns) {\n      const present = await physicalColumnsPresent(input.queryable, [column]);\n      if (!present) {\n        missingColumns.push(\n          `${column.schema}.${column.table}.${column.column}`\n        );\n      }\n    }\n  }\n  return {\n    entries,\n    ledgerExists,\n    ledgerTable: input.ledgerTable,\n    ...(missingColumns.length > 0 ? { missingColumns } : {}),\n    ...(missingRelations.length > 0 ? { missingRelations } : {}),\n  };\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 applyEmbeddedSqlMigrationsWithRuntime(input: {\n  connectionString: string;\n  ledgerTable: string;\n  migrations: readonly EmbeddedSqlMigration[];\n  postgresRuntime?: AthenaPostgresRuntime;\n  ui: AthenaCliUI;\n}): Promise<void> {\n  const owned =\n    input.postgresRuntime ??\n    createAthenaPostgresRuntime({ connectionString: input.connectionString });\n  try {\n    await applyEmbeddedSqlMigrations({\n      ledgerTable: input.ledgerTable,\n      manager: await owned.getPoolManager(),\n      migrations: input.migrations,\n      ui: input.ui,\n    });\n  } finally {\n    if (!input.postgresRuntime) {\n      await owned.close();\n    }\n  }\n}\n\nexport async function applyEmbeddedSqlMigrations(input: {\n  ledgerTable: string;\n  migrations: readonly EmbeddedSqlMigration[];\n  manager: PostgresPoolManager;\n  ui: AthenaCliUI;\n}): Promise<void> {\n  const lease = await input.manager.acquire({\n    deadline: PostgresDeadline.after(60_000),\n    target: \"direct\",\n    workload: \"migration\",\n  });\n  const client = lease.client;\n  try {\n    const latest = input.migrations[input.migrations.length - 1];\n    let latestSkippedAsApplied = false;\n    for (const migration of input.migrations) {\n      const ledgerExists = await embeddedLedgerExists(\n        client,\n        input.ledgerTable\n      );\n      if (ledgerExists) {\n        const stored = await readLedgerChecksum(\n          client,\n          input.ledgerTable,\n          migration.version\n        );\n        if (stored != null) {\n          if (stored === migration.checksum) {\n            if (latest && migration.version === latest.version) {\n              latestSkippedAsApplied = true;\n            }\n            continue;\n          }\n          if (isLegacyLedgerChecksum(migration, stored)) {\n            const physicalOk = await physicalSchemaPresent(client, migration);\n            if (!physicalOk) {\n              throw new MigrationError(\n                \"INTEGRITY\",\n                checksumMismatchMessage(migration, stored, false)\n              );\n            }\n            await adoptLegacyLedgerChecksum({\n              client,\n              ledgerTable: input.ledgerTable,\n              migration,\n              stored,\n            });\n            input.ui.info(\n              `✓ ${migration.filename} adopted (legacy ${stored} → packaged checksum)`\n            );\n            continue;\n          }\n          throw new MigrationError(\n            \"INTEGRITY\",\n            checksumMismatchMessage(migration, stored, false)\n          );\n        }\n      }\n      await applyPendingMigration(client, input.ledgerTable, migration);\n      input.ui.info(`✓ ${migration.filename} applied`);\n    }\n    if (latestSkippedAsApplied) {\n      if (\n        latest &&\n        !(await physicalSchemaPresent(client, latest))\n      ) {\n        input.ui.info(\n          `${latest.filename} is recorded as applied but the physical schema is incomplete; replaying packaged SQL`\n        );\n        for (const migration of input.migrations) {\n          await applyPendingMigration(client, input.ledgerTable, migration);\n        }\n      }\n      await assertLatestPhysicalSchema(client, input.migrations);\n    }\n  } finally {\n    lease.release();\n  }\n}\n\nasync function assertLatestPhysicalSchema(\n  queryable: AthenaPostgresQueryable,\n  migrations: readonly EmbeddedSqlMigration[]\n): Promise<void> {\n  const latest = migrations[migrations.length - 1];\n  if (\n    !latest ||\n    ((!latest.requiredRelations || latest.requiredRelations.length === 0) &&\n      (!latest.requiredColumns || latest.requiredColumns.length === 0))\n  ) {\n    return;\n  }\n  const missingRelations: string[] = [];\n  if (latest.requiredRelations) {\n    for (const relation of latest.requiredRelations) {\n      const present = await physicalRelationsPresent(queryable, [relation]);\n      if (!present) {\n        missingRelations.push(`${relation.schema}.${relation.table}`);\n      }\n    }\n  }\n  const missingColumns: string[] = [];\n  if (latest.requiredColumns) {\n    for (const column of latest.requiredColumns) {\n      const present = await physicalColumnsPresent(queryable, [column]);\n      if (!present) {\n        missingColumns.push(\n          `${column.schema}.${column.table}.${column.column}`\n        );\n      }\n    }\n  }\n  if (missingRelations.length === 0 && missingColumns.length === 0) {\n    return;\n  }\n  const missing =\n    missingRelations.length > 0 && missingColumns.length > 0\n      ? `required relations are missing: ${missingRelations.join(\", \")}. required columns are missing: ${missingColumns.join(\", \")}`\n      : missingRelations.length > 0\n        ? `required relations are missing: ${missingRelations.join(\", \")}`\n        : `required columns are missing: ${missingColumns.join(\", \")}`;\n  throw new MigrationError(\n    \"INTEGRITY\",\n    `${latest.filename} is recorded as applied but ${missing}. Run a forward migrate or restore the schema.`\n  );\n}\n\nasync function applyPendingMigration(\n  client: AthenaPostgresClient,\n  ledgerTable: string,\n  migration: EmbeddedSqlMigration\n): Promise<void> {\n  const quoted = quoteLedgerTable(ledgerTable);\n  await client.query(\"BEGIN\");\n  try {\n    await client.query(migration.sql);\n    await client.query(\n      `INSERT INTO ${quoted} (version, name, checksum)\n\t\t\t VALUES ($1, $2, $3)\n\t\t\t ON CONFLICT (version) DO NOTHING`,\n      [migration.version, migration.name, migration.checksum]\n    );\n    await client.query(\"COMMIT\");\n  } catch (error) {\n    try {\n      await client.query(\"ROLLBACK\");\n    } catch {\n      // Session may already be aborted.\n    }\n    throw error;\n  }\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","CREATE TABLE IF NOT EXISTS billing.billing_entitlements (\n    subject_kind text NOT NULL CHECK (subject_kind IN ('user', 'organization')),\n    subject_id text NOT NULL,\n    plans jsonb NOT NULL DEFAULT '[]'::jsonb,\n    features jsonb NOT NULL DEFAULT '{}'::jsonb,\n    subscription_status text,\n    renews_at timestamptz,\n    updated_at timestamptz NOT NULL DEFAULT now(),\n    PRIMARY KEY (subject_kind, subject_id)\n);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 19, 'billing_entitlements', 'billing-entitlements-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 19\n);\n","CREATE TABLE IF NOT EXISTS billing.billing_binding_conflicts (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    subject_kind text CHECK (subject_kind IN ('user', 'organization')),\n    subject_id text,\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections(id) ON DELETE CASCADE,\n    candidate_provider_customer_id text NOT NULL,\n    reason text NOT NULL CHECK (reason IN (\n        'multiple_email_matches',\n        'existing_active_binding',\n        'provider_customer_claimed',\n        'identity_changed',\n        'ambiguous_import',\n        'manual_review_required'\n    )),\n    confidence text NOT NULL DEFAULT 'none',\n    status text NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'resolved')),\n    created_at timestamptz NOT NULL DEFAULT now(),\n    resolved_at timestamptz,\n    resolved_by text\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_binding_conflicts_open\n    ON billing.billing_binding_conflicts (connection_id, status)\n    WHERE status = 'open';\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 20, 'billing_binding_conflicts', 'billing-binding-conflicts-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 20\n);\n","ALTER 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            'subject_projection_refreshed',\n            'entitlements_refreshed',\n            'completed',\n            'duplicate',\n            'rejected',\n            'failed'\n        )\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 21, 'billing_webhook_ingress_subject_refresh', 'billing-webhook-ingress-subject-refresh-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 21\n);\n","-- Operator evidence for rejected Mollie webhook envelopes.\n-- Stage ledger stays payload-free; this table holds attempted vs expected bodies.\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_ingress_rejections (\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    code text NOT NULL,\n    content_type text,\n    body_kind text,\n    body_bytes integer,\n    attempted_body text NOT NULL,\n    expected_envelope jsonb NOT NULL,\n    occurred_at timestamptz NOT NULL DEFAULT now (),\n    CONSTRAINT billing_webhook_ingress_rejections_kind_check CHECK (\n        kind IN ('classic', 'next_gen')\n    )\n);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_rejections_occurred_idx\n    ON billing.billing_webhook_ingress_rejections (occurred_at DESC);\n\nCREATE INDEX IF NOT EXISTS billing_webhook_ingress_rejections_connection_idx\n    ON billing.billing_webhook_ingress_rejections (connection_id, occurred_at DESC);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 22, 'billing_webhook_ingress_rejection_evidence', 'billing-webhook-ingress-rejection-evidence-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 22\n);\n","-- Subject-serialized recurring enrollment. One pending or active row per subject.\n\nCREATE TABLE IF NOT EXISTS billing.billing_subscription_enrollments (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    subject_kind text NOT NULL CHECK (\n        subject_kind IN ('user', 'organization')\n    ),\n    subject_id text NOT NULL,\n    price_id text NOT NULL,\n    idempotency_key text NOT NULL,\n    state text NOT NULL CHECK (\n        state IN (\n            'reserved',\n            'first_payment_pending',\n            'advancing',\n            'active',\n            'failed',\n            'canceled',\n            'expired',\n            'superseded'\n        )\n    ),\n    provider_payment_id text,\n    provider_subscription_id text,\n    lease_token text,\n    lease_expires_at timestamptz,\n    attempt_count integer NOT NULL DEFAULT 0,\n    last_error text,\n    provider_idempotency_key text,\n    journal_intent text,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    UNIQUE (\n        subject_kind,\n        subject_id,\n        idempotency_key\n    )\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS billing_subscription_enrollments_live_subject_uidx ON billing.billing_subscription_enrollments (subject_kind, subject_id)\nWHERE\n    state IN (\n        'reserved',\n        'first_payment_pending',\n        'advancing',\n        'active'\n    );\n\nINSERT INTO\n    athena_billing_migrations (version, name, checksum)\nSELECT 23, 'billing_subscription_enrollments', 'billing-subscription-enrollments-v1'\nWHERE\n    NOT EXISTS (\n        SELECT 1\n        FROM athena_billing_migrations\n        WHERE\n            version = 23\n    );","-- Owner-scoped declared slot: (owner_kind, owner_id, provider, environment, credential_reference).\n-- Does not rewrite applied 0014. Ambiguous duplicates are disabled with an audit note.\n\nWITH ranked AS (\n    SELECT id,\n        owner_kind,\n        owner_id,\n        provider,\n        environment,\n        credential_reference,\n        row_number() OVER (\n            PARTITION BY owner_kind, owner_id, provider, environment, credential_reference\n            ORDER BY\n                CASE WHEN status = 'active' THEN 0 ELSE 1 END,\n                updated_at DESC,\n                created_at DESC\n        ) AS rn\n    FROM billing.billing_provider_connections\n    WHERE deleted_at IS NULL\n)\nUPDATE billing.billing_provider_connections AS connections\nSET deleted_at = now(),\n    status = 'disabled',\n    updated_at = now(),\n    metadata = COALESCE(metadata, '{}'::jsonb)\n        || jsonb_build_object('duplicateSlotRemediation', '0024')\nFROM ranked\nWHERE connections.id = ranked.id\n  AND ranked.rn > 1;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_billing_provider_connections_owner_slot\nON billing.billing_provider_connections (\n    owner_kind,\n    owner_id,\n    provider,\n    environment,\n    credential_reference\n)\nWHERE deleted_at IS NULL;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 24, 'billing_connection_owner_slot', 'billing-connection-owner-slot-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 24\n);\n","ALTER TABLE billing.billing_subject_bindings\n    ADD COLUMN IF NOT EXISTS reservation_token text,\n    ADD COLUMN IF NOT EXISTS reservation_expires_at timestamptz,\n    ADD COLUMN IF NOT EXISTS attempt_count integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS last_error text;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 25, 'billing_customer_reservation_leases', 'billing-customer-reservation-leases-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 25\n);\n","ALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS reconciliation_state text\n        CHECK (\n            reconciliation_state IS NULL\n            OR reconciliation_state IN (\n                'create_pending',\n                'remote_created_secret_pending',\n                'active',\n                'rotation_required',\n                'update_pending',\n                'failed'\n            )\n        );\n\nCREATE TABLE IF NOT EXISTS billing.billing_webhook_secret_remediation (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    registration_id uuid,\n    outcome text NOT NULL,\n    detail text,\n    created_at timestamptz NOT NULL DEFAULT now ()\n);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 26, 'billing_webhook_reconciliation_states', 'billing-webhook-reconciliation-states-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 26\n);\n","CREATE TABLE IF NOT EXISTS billing.billing_subject_binding_evidence (\n    binding_id uuid PRIMARY KEY,\n    source text NOT NULL,\n    verified boolean NOT NULL DEFAULT false,\n    quarantined boolean NOT NULL DEFAULT false,\n    recorded_at timestamptz NOT NULL DEFAULT now ()\n);\n\nINSERT INTO billing.billing_subject_binding_evidence (binding_id, source, verified, quarantined)\nSELECT id, COALESCE(source, 'unknown'), false, true\nFROM billing.billing_subject_bindings\nWHERE NOT EXISTS (\n    SELECT 1 FROM billing.billing_subject_binding_evidence evidence\n    WHERE evidence.binding_id = billing.billing_subject_bindings.id\n);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 27, 'billing_subject_binding_evidence', 'billing-subject-binding-evidence-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 27\n);\n","-- Fencing, checkout→enrollment identity, plan-change saga, live-subscription backfill.\n-- Worker leases stay short; checkout expiry remains the business validity window.\n\nALTER TABLE billing.billing_subscription_enrollments\n    ADD COLUMN IF NOT EXISTS fencing_epoch integer NOT NULL DEFAULT 0;\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD COLUMN IF NOT EXISTS enrollment_id uuid REFERENCES billing.billing_subscription_enrollments (id);\n\nALTER TABLE billing.billing_checkout_sessions\n    DROP CONSTRAINT IF EXISTS billing_checkout_sessions_status_check;\n\nALTER TABLE billing.billing_checkout_sessions\n    ADD 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            'late_paid',\n            'reconcile_required',\n            'refund_required'\n        )\n    );\n\nALTER TABLE billing.billing_subscriptions\n    ADD COLUMN IF NOT EXISTS row_version integer NOT NULL DEFAULT 1;\n\nALTER TABLE billing.billing_subject_bindings\n    ADD COLUMN IF NOT EXISTS lease_epoch integer NOT NULL DEFAULT 0;\n\nCREATE TABLE IF NOT EXISTS billing.billing_plan_change_operations (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    subject_kind text NOT NULL CHECK (\n        subject_kind IN ('user', 'organization')\n    ),\n    subject_id text NOT NULL,\n    owned_subscription_id uuid NOT NULL,\n    enrollment_id uuid REFERENCES billing.billing_subscription_enrollments (id),\n    idempotency_key text NOT NULL,\n    expected_row_version integer NOT NULL,\n    fencing_epoch integer NOT NULL DEFAULT 0,\n    state text NOT NULL CHECK (\n        state IN (\n            'requested',\n            'replacement_created',\n            'old_cancelled',\n            'completed',\n            'compensating',\n            'failed'\n        )\n    ),\n    price_id text NOT NULL,\n    replacement_provider_subscription_id text,\n    lease_token text,\n    lease_expires_at timestamptz,\n    last_error text,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    UNIQUE (subject_kind, subject_id, idempotency_key)\n);\n\nCREATE UNIQUE INDEX IF NOT EXISTS billing_plan_change_operations_live_subject_uidx\n    ON billing.billing_plan_change_operations (subject_kind, subject_id)\nWHERE\n    state IN (\n        'requested',\n        'replacement_created',\n        'old_cancelled',\n        'compensating'\n    );\n\nDO $$\nDECLARE\n    duplicate_live integer;\nBEGIN\n    SELECT COUNT(*) INTO duplicate_live\n    FROM (\n        SELECT subject_kind, subject_id\n        FROM billing.billing_subscriptions\n        WHERE ownership_status = 'resolved'\n          AND lower(status) NOT IN ('canceled', 'cancelled', 'expired', 'completed')\n        GROUP BY subject_kind, subject_id\n        HAVING COUNT(*) > 1\n    ) duplicates;\n    IF duplicate_live > 0 THEN\n        RAISE EXCEPTION 'ATHENA_BILLING_DUPLICATE_LIVE_SUBSCRIPTIONS: resolve duplicate live billing_subscriptions before enrollment backfill';\n    END IF;\nEND\n$$;\n\nINSERT INTO billing.billing_subscription_enrollments (\n    connection_id,\n    subject_kind,\n    subject_id,\n    price_id,\n    idempotency_key,\n    state,\n    provider_subscription_id,\n    fencing_epoch\n)\nSELECT\n    subscriptions.connection_id,\n    subscriptions.subject_kind,\n    subscriptions.subject_id,\n    COALESCE(subscriptions.interval, 'unknown'),\n    'backfill:' || subscriptions.id::text,\n    'active',\n    subscriptions.provider_subscription_id,\n    0\nFROM billing.billing_subscriptions AS subscriptions\nWHERE subscriptions.ownership_status = 'resolved'\n  AND subscriptions.connection_id IS NOT NULL\n  AND subscriptions.subject_kind IS NOT NULL\n  AND subscriptions.subject_id IS NOT NULL\n  AND lower(subscriptions.status) NOT IN ('canceled', 'cancelled', 'expired', 'completed')\n  AND NOT EXISTS (\n      SELECT 1\n      FROM billing.billing_subscription_enrollments AS enrollments\n      WHERE enrollments.subject_kind = subscriptions.subject_kind\n        AND enrollments.subject_id = subscriptions.subject_id\n        AND enrollments.state IN (\n            'reserved',\n            'first_payment_pending',\n            'advancing',\n            'active'\n        )\n  );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 28, 'billing_enrollment_fencing_and_plan_change', 'billing-enrollment-fencing-plan-change-v1'\nWHERE\n    NOT EXISTS (\n        SELECT 1\n        FROM athena_billing_migrations\n        WHERE\n            version = 28\n    );\n","-- Durable provider effects for plan-change and future Billing mutations.\n\nALTER TABLE billing.billing_plan_change_operations\n    ADD COLUMN IF NOT EXISTS retry_count integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS next_retry_at timestamptz,\n    ADD COLUMN IF NOT EXISTS last_outcome text;\n\nALTER TABLE billing.billing_plan_change_operations\n    DROP CONSTRAINT IF EXISTS billing_plan_change_operations_state_check;\n\nALTER TABLE billing.billing_plan_change_operations\n    ADD CONSTRAINT billing_plan_change_operations_state_check CHECK (\n        state IN (\n            'requested',\n            'claimed',\n            'provider_update_pending',\n            'provider_update_unknown',\n            'provider_update_applied',\n            'replacement_create_pending',\n            'replacement_create_unknown',\n            'replacement_created',\n            'old_cancel_pending',\n            'old_cancel_unknown',\n            'old_cancelled',\n            'local_commit_pending',\n            'compensating',\n            'compensation_pending',\n            'compensation_unknown',\n            'compensation_applied',\n            'completed',\n            'attention_required',\n            'failed'\n        )\n    );\n\nCREATE TABLE IF NOT EXISTS billing.billing_provider_effects (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid (),\n    operation_id uuid NOT NULL,\n    effect_type text NOT NULL,\n    provider text NOT NULL,\n    connection_id uuid NOT NULL REFERENCES billing.billing_provider_connections (id),\n    idempotency_key text NOT NULL,\n    state text NOT NULL CHECK (\n        state IN ('pending', 'claimed', 'applied', 'unknown', 'failed', 'attention_required')\n    ),\n    attempts integer NOT NULL DEFAULT 0,\n    provider_resource_id text,\n    request_fingerprint text NOT NULL,\n    observed_result jsonb,\n    observed_evidence jsonb,\n    lease_token text,\n    lease_expires_at timestamptz,\n    fencing_epoch integer NOT NULL DEFAULT 0,\n    last_error text,\n    claimed_at timestamptz,\n    completed_at timestamptz,\n    unknown_at timestamptz,\n    failed_at timestamptz,\n    created_at timestamptz NOT NULL DEFAULT now (),\n    updated_at timestamptz NOT NULL DEFAULT now (),\n    UNIQUE (operation_id, effect_type)\n);\n\nCREATE INDEX IF NOT EXISTS billing_provider_effects_operation_idx\n    ON billing.billing_provider_effects (operation_id);\n\nCREATE INDEX IF NOT EXISTS billing_provider_effects_claim_idx\n    ON billing.billing_provider_effects (state, lease_expires_at);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 29, 'billing_provider_effect_journal', 'billing-provider-effect-journal-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 29\n);\n","-- Verified Auth contact evidence is distinct from the Athena subject identity.\n\nALTER TABLE billing.billing_subject_bindings\n    ADD COLUMN IF NOT EXISTS email_verification_source text,\n    ADD COLUMN IF NOT EXISTS email_verified_at timestamptz;\n\nALTER TABLE billing.billing_subject_bindings\n    DROP CONSTRAINT IF EXISTS billing_subject_bindings_email_verification_source_check;\n\nALTER TABLE billing.billing_subject_bindings\n    ADD CONSTRAINT billing_subject_bindings_email_verification_source_check CHECK (\n        email_verification_source IS NULL\n        OR email_verification_source = 'athena-auth'\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 30, 'billing_contact_provenance', 'billing-contact-provenance-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 30\n);\n","-- Durable webhook registration/secret lifecycle.  Legacy reconciliation\n-- states remain accepted so existing rows can be recovered in place.\n\nALTER TABLE billing.billing_webhook_registrations\n    DROP CONSTRAINT IF EXISTS billing_webhook_registrations_reconciliation_state_check;\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD CONSTRAINT billing_webhook_registrations_reconciliation_state_check CHECK (\n        reconciliation_state IS NULL\n        OR reconciliation_state IN (\n            'create_pending',\n            'provider_registration_pending',\n            'provider_registered_secret_pending',\n            'secret_persisted_activation_pending',\n            'verification_pending',\n            'verification_failed',\n            'remote_created_secret_pending',\n            'active',\n            'rotation_pending',\n            'rotation_secret_pending',\n            'rotation_required',\n            'update_pending',\n            'failed',\n            'attention_required'\n        )\n    );\n\nALTER TABLE billing.billing_webhook_registrations\n    ADD COLUMN IF NOT EXISTS provider_registration_idempotency_key text,\n    ADD COLUMN IF NOT EXISTS provider_registration_attempts integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS secret_persistence_attempts integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS activation_attempts integer NOT NULL DEFAULT 0,\n    ADD COLUMN IF NOT EXISTS last_provider_evidence jsonb,\n    ADD COLUMN IF NOT EXISTS lifecycle_error jsonb,\n    ADD COLUMN IF NOT EXISTS lifecycle_updated_at timestamptz;\n\nCREATE INDEX IF NOT EXISTS billing_webhook_registrations_lifecycle_state_idx\n    ON billing.billing_webhook_registrations (reconciliation_state, lifecycle_updated_at);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 31, 'billing_webhook_lifecycle', 'billing-webhook-lifecycle-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 31\n);\n","-- Forward repair for plan-change fencing: generation 28 added row_version,\n-- but the subscription timestamp used by optimistic updates was omitted.\n\nALTER TABLE billing.billing_subscriptions\n    ADD COLUMN IF NOT EXISTS updated_at timestamptz;\n\nUPDATE billing.billing_subscriptions\nSET updated_at = COALESCE(ingested_at, created_at, now())\nWHERE updated_at IS NULL;\n\nALTER TABLE billing.billing_subscriptions\n    ALTER COLUMN updated_at SET DEFAULT now();\n\nALTER TABLE billing.billing_subscriptions\n    ALTER COLUMN updated_at SET NOT NULL;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 32, 'billing_subscription_updated_at', 'billing-subscription-updated-at-v1'\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM athena_billing_migrations\n    WHERE version = 32\n);\n","-- Keep one nonterminal plan-change operation per subject for every durable\n-- state, including provider effects and local commit phases.\n\nDROP INDEX IF EXISTS billing.billing_plan_change_operations_live_subject_uidx;\n\nCREATE UNIQUE INDEX billing_plan_change_operations_live_subject_uidx\n    ON billing.billing_plan_change_operations (subject_kind, subject_id)\nWHERE state NOT IN (\n    'completed',\n    'attention_required',\n    'failed'\n);\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 33, 'billing_plan_change_live_states', 'billing-plan-change-live-states-v1'\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM athena_billing_migrations\n    WHERE version = 33\n);\n","-- Rename the Billing contact timestamp to reflect that Auth exposes a\n-- verification boolean, not the time at which that boolean was established.\n\nDO $$\nBEGIN\n    IF EXISTS (\n        SELECT 1\n        FROM information_schema.columns\n        WHERE table_schema = 'billing'\n          AND table_name = 'billing_subject_bindings'\n          AND column_name = 'email_verified_at'\n    ) AND NOT EXISTS (\n        SELECT 1\n        FROM information_schema.columns\n        WHERE table_schema = 'billing'\n          AND table_name = 'billing_subject_bindings'\n          AND column_name = 'email_observed_at'\n    ) THEN\n        ALTER TABLE billing.billing_subject_bindings\n            RENAME COLUMN email_verified_at TO email_observed_at;\n    END IF;\nEND\n$$;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 34, 'billing_contact_observation', 'billing-contact-observation-v1'\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM athena_billing_migrations\n    WHERE version = 34\n);\n","-- Durable commercial snapshot for composed self-service checkout.\n\nCREATE TABLE IF NOT EXISTS billing.billing_checkout_session_lines (\n    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n    checkout_session_id uuid NOT NULL\n        REFERENCES billing.billing_checkout_sessions (id) ON DELETE CASCADE,\n    ordinal integer NOT NULL,\n    product_id text NOT NULL,\n    price_id text NOT NULL,\n    amount_currency text NOT NULL,\n    amount_value text NOT NULL,\n    interval text,\n    quantity integer NOT NULL DEFAULT 1,\n    relation_id text,\n    CONSTRAINT billing_checkout_session_lines_ordinal_check CHECK (ordinal >= 0),\n    CONSTRAINT billing_checkout_session_lines_quantity_check CHECK (quantity >= 1),\n    CONSTRAINT billing_checkout_session_lines_session_ordinal UNIQUE (\n        checkout_session_id,\n        ordinal\n    )\n);\n\nCREATE INDEX IF NOT EXISTS idx_billing_checkout_session_lines_session\n    ON billing.billing_checkout_session_lines (checkout_session_id);\n","-- One unresolved ownership conflict has exactly one open canonical row.\n-- Repeated reconciliation must observe that row, not append duplicates.\n\nALTER TABLE billing.billing_binding_conflicts\n    ADD COLUMN IF NOT EXISTS last_observed_at timestamptz,\n    ADD COLUMN IF NOT EXISTS observation_count integer NOT NULL DEFAULT 1;\n\nUPDATE billing.billing_binding_conflicts\nSET last_observed_at = created_at\nWHERE last_observed_at IS NULL;\n\nALTER TABLE billing.billing_binding_conflicts\n    ALTER COLUMN last_observed_at SET DEFAULT now(),\n    ALTER COLUMN last_observed_at SET NOT NULL;\n\nALTER TABLE billing.billing_binding_conflicts\n    ADD COLUMN IF NOT EXISTS identity_subject_kind text\n        GENERATED ALWAYS AS (COALESCE(subject_kind, '')) STORED,\n    ADD COLUMN IF NOT EXISTS identity_subject_id text\n        GENERATED ALWAYS AS (COALESCE(subject_id, '')) STORED;\n\nALTER TABLE billing.billing_binding_conflicts\n    DROP CONSTRAINT IF EXISTS billing_binding_conflicts_observation_count_check;\n\nALTER TABLE billing.billing_binding_conflicts\n    ADD CONSTRAINT billing_binding_conflicts_observation_count_check\n    CHECK (observation_count >= 1);\n\nWITH groups AS (\n    SELECT\n        connection_id,\n        candidate_provider_customer_id,\n        COALESCE(subject_kind, '') AS identity_kind,\n        COALESCE(subject_id, '') AS identity_id,\n        (ARRAY_AGG(id ORDER BY created_at ASC, id ASC))[1] AS keep_id,\n        COUNT(*)::int AS observation_n,\n        MAX(created_at) AS last_at\n    FROM billing.billing_binding_conflicts\n    WHERE status = 'open'\n    GROUP BY\n        connection_id,\n        candidate_provider_customer_id,\n        COALESCE(subject_kind, ''),\n        COALESCE(subject_id, '')\n)\nUPDATE billing.billing_binding_conflicts AS canonical\nSET\n    observation_count = groups.observation_n,\n    last_observed_at = groups.last_at\nFROM groups\nWHERE canonical.id = groups.keep_id;\n\nWITH groups AS (\n    SELECT\n        connection_id,\n        candidate_provider_customer_id,\n        COALESCE(subject_kind, '') AS identity_kind,\n        COALESCE(subject_id, '') AS identity_id,\n        (ARRAY_AGG(id ORDER BY created_at ASC, id ASC))[1] AS keep_id\n    FROM billing.billing_binding_conflicts\n    WHERE status = 'open'\n    GROUP BY\n        connection_id,\n        candidate_provider_customer_id,\n        COALESCE(subject_kind, ''),\n        COALESCE(subject_id, '')\n)\nUPDATE billing.billing_binding_conflicts AS duplicate\nSET\n    status = 'resolved',\n    resolved_at = now(),\n    resolved_by = 'system:conflict-deduplication'\nFROM groups\nWHERE duplicate.status = 'open'\n  AND duplicate.id <> groups.keep_id\n  AND duplicate.connection_id = groups.connection_id\n  AND duplicate.candidate_provider_customer_id = groups.candidate_provider_customer_id\n  AND COALESCE(duplicate.subject_kind, '') = groups.identity_kind\n  AND COALESCE(duplicate.subject_id, '') = groups.identity_id;\n\nCREATE UNIQUE INDEX IF NOT EXISTS uq_billing_binding_conflicts_open_identity\n    ON billing.billing_binding_conflicts (\n        connection_id,\n        candidate_provider_customer_id,\n        identity_subject_kind,\n        identity_subject_id\n    )\n    WHERE status = 'open';\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 36, 'billing_binding_conflict_identity', 'billing-binding-conflict-identity-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 36\n);\n","-- Replace durable rejected-webhook bodies with bounded evidence.\n-- Historical rows receive an explicitly legacy, unkeyed SHA-256 digest because\n-- the original request signing secret is unavailable during migration.\nCREATE EXTENSION IF NOT EXISTS pgcrypto;\n\nALTER TABLE billing.billing_webhook_ingress_rejections\n    ADD COLUMN IF NOT EXISTS digest text,\n    ADD COLUMN IF NOT EXISTS classification text,\n    ADD COLUMN IF NOT EXISTS truncated boolean NOT NULL DEFAULT false;\n\nUPDATE billing.billing_webhook_ingress_rejections\nSET\n    digest = encode(digest(convert_to(attempted_body, 'UTF8'), 'sha256'), 'hex'),\n    classification = CASE\n        WHEN body_kind IN ('empty', 'json', 'form') THEN body_kind\n        ELSE 'invalid'\n    END,\n    truncated = false\nWHERE digest IS NULL;\n\nALTER TABLE billing.billing_webhook_ingress_rejections\n    ALTER COLUMN digest SET NOT NULL,\n    ALTER COLUMN classification SET NOT NULL,\n    DROP COLUMN attempted_body;\n\nALTER TABLE billing.billing_webhook_ingress_rejections\n    ADD CONSTRAINT billing_webhook_ingress_rejections_classification_check CHECK (\n        classification IN ('empty', 'form', 'json', 'text', 'binary', 'invalid')\n    );\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 37, 'billing_webhook_ingress_bounded_evidence',\n       'billing-webhook-ingress-bounded-evidence-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 37\n);\n","-- Secretless ingress rejection handling records classification and size only.\n-- Keep historical migration 0037 digests, but permit new rows without a\n-- secret-derived fingerprint.\nALTER TABLE billing.billing_webhook_ingress_rejections\n    ALTER COLUMN digest DROP NOT NULL;\n\nINSERT INTO athena_billing_migrations (version, name, checksum)\nSELECT 38, 'billing_webhook_ingress_nullable_digest',\n       'billing-webhook-ingress-nullable-digest-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_billing_migrations WHERE version = 38\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\";\nimport billingEntitlementsSql from \"./sql/0019_billing_entitlements.sql\";\nimport billingBindingConflictsSql from \"./sql/0020_billing_binding_conflicts.sql\";\nimport billingWebhookIngressSubjectRefreshSql from \"./sql/0021_billing_webhook_ingress_subject_refresh.sql\";\nimport billingWebhookIngressRejectionEvidenceSql from \"./sql/0022_billing_webhook_ingress_rejection_evidence.sql\";\nimport billingSubscriptionEnrollmentsSql from \"./sql/0023_billing_subscription_enrollments.sql\";\nimport billingConnectionOwnerSlotSql from \"./sql/0024_billing_connection_owner_slot.sql\";\nimport billingCustomerReservationLeasesSql from \"./sql/0025_billing_customer_reservation_leases.sql\";\nimport billingWebhookReconciliationStatesSql from \"./sql/0026_billing_webhook_reconciliation_states.sql\";\nimport billingSubjectBindingEvidenceSql from \"./sql/0027_billing_subject_binding_evidence.sql\";\nimport billingEnrollmentFencingAndPlanChangeSql from \"./sql/0028_billing_enrollment_fencing_and_plan_change.sql\";\nimport billingProviderEffectJournalSql from \"./sql/0029_billing_provider_effect_journal.sql\";\nimport billingContactProvenanceSql from \"./sql/0030_billing_contact_provenance.sql\";\nimport billingWebhookLifecycleSql from \"./sql/0031_billing_webhook_lifecycle.sql\";\nimport billingSubscriptionUpdatedAtSql from \"./sql/0032_billing_subscription_updated_at.sql\";\nimport billingPlanChangeLiveStatesSql from \"./sql/0033_billing_plan_change_live_states.sql\";\nimport billingContactObservationSql from \"./sql/0034_billing_contact_observation.sql\";\nimport billingCheckoutSessionLinesSql from \"./sql/0035_billing_checkout_session_lines.sql\";\nimport billingBindingConflictIdentitySql from \"./sql/0036_billing_binding_conflict_identity.sql\";\nimport billingWebhookIngressBoundedEvidenceSql from \"./sql/0037_billing_webhook_ingress_bounded_evidence.sql\";\nimport billingWebhookIngressNullableDigestSql from \"./sql/0038_billing_webhook_ingress_nullable_digest.sql\";\n\nexport const EMBEDDED_BILLING_LEDGER = \"athena_billing_migrations\";\n\nexport const EMBEDDED_BILLING_REQUIRED_TABLES = [\n  \"billing_payments\",\n  \"billing_subscriptions\",\n  \"billing_invoices\",\n  \"billing_subject_bindings\",\n  \"billing_provider_connections\",\n  \"billing_webhook_events\",\n  \"billing_projection_events\",\n  \"billing_import_state\",\n  \"billing_import_runs\",\n  \"billing_import_candidates\",\n  \"billing_reconciliation_leases\",\n  \"billing_webhook_registrations\",\n  \"billing_webhook_ingress_stages\",\n  \"billing_webhook_ingress_rejections\",\n  \"billing_webhook_delivery_health\",\n  \"billing_checkout_sessions\",\n  \"billing_checkout_session_lines\",\n  \"billing_entitlements\",\n  \"billing_binding_conflicts\",\n  \"billing_subscription_enrollments\",\n  \"billing_webhook_secret_remediation\",\n  \"billing_subject_binding_evidence\",\n  \"billing_plan_change_operations\",\n  \"billing_provider_effects\",\n] as const;\n\nexport const EMBEDDED_BILLING_REQUIRED_INTERNAL_TABLES = [\n  \"billing_webhook_signing_secrets\",\n] as const;\n\nexport const EMBEDDED_BILLING_REQUIRED_ATHENA_TABLES = [\n  \"audit_log_billing\",\n  \"traces_billing\",\n] as const;\n\nexport const EMBEDDED_BILLING_REQUIRED_RELATIONS = [\n  ...EMBEDDED_BILLING_REQUIRED_TABLES.map((table) => ({\n    schema: \"billing\",\n    table,\n  })),\n  ...EMBEDDED_BILLING_REQUIRED_INTERNAL_TABLES.map((table) => ({\n    schema: \"athena_internal\",\n    table,\n  })),\n  ...EMBEDDED_BILLING_REQUIRED_ATHENA_TABLES.map((table) => ({\n    schema: \"athena\",\n    table,\n  })),\n] as const;\n\nconst EMBEDDED_BILLING_REQUIRED_SUBSCRIPTION_FENCING_COLUMNS = [\n  {\n    column: \"row_version\",\n    schema: \"billing\",\n    table: \"billing_subscriptions\",\n  },\n] as const;\n\nconst EMBEDDED_BILLING_REQUIRED_BINDING_CONFLICT_COLUMNS = [\n  {\n    column: \"last_observed_at\",\n    schema: \"billing\",\n    table: \"billing_binding_conflicts\",\n  },\n  {\n    column: \"observation_count\",\n    schema: \"billing\",\n    table: \"billing_binding_conflicts\",\n  },\n] as const;\n\nexport const EMBEDDED_BILLING_REQUIRED_COLUMNS = [\n  ...EMBEDDED_BILLING_REQUIRED_SUBSCRIPTION_FENCING_COLUMNS,\n  {\n    column: \"updated_at\",\n    schema: \"billing\",\n    table: \"billing_subscriptions\",\n  },\n  ...EMBEDDED_BILLING_REQUIRED_BINDING_CONFLICT_COLUMNS,\n] as const;\n\nexport const EMBEDDED_BILLING_MIGRATIONS = [\n  {\n    checksum: \"billing-canonical-v1\",\n    filename: \"0001_billing_canonical.sql\",\n    name: \"billing_canonical\",\n    sql: billingCanonicalSql,\n    version: 1,\n  },\n  {\n    checksum: \"billing-subject-bindings-v1\",\n    filename: \"0002_billing_subject_bindings.sql\",\n    name: \"billing_subject_bindings\",\n    sql: billingSubjectBindingsSql,\n    version: 2,\n  },\n  {\n    checksum: \"billing-subject-finality-v2\",\n    filename: \"0003_billing_subject_finality.sql\",\n    name: \"billing_subject_finality\",\n    sql: billingSubjectFinalitySql,\n    version: 3,\n  },\n  {\n    checksum: \"billing-customer-import-v1\",\n    filename: \"0004_billing_customer_import.sql\",\n    name: \"billing_customer_import\",\n    sql: billingCustomerImportSql,\n    version: 4,\n  },\n  {\n    checksum: \"billing-reconciliation-observability-v1\",\n    filename: \"0005_billing_reconciliation_observability.sql\",\n    name: \"billing_reconciliation_observability\",\n    sql: billingReconciliationObservabilitySql,\n    version: 5,\n  },\n  {\n    checksum: \"billing-webhook-management-v1\",\n    filename: \"0006_billing_webhook_management.sql\",\n    name: \"billing_webhook_management\",\n    sql: billingWebhookManagementSql,\n    version: 6,\n  },\n  {\n    checksum: \"billing-connection-credential-reference-v1\",\n    filename: \"0007_billing_connection_credential_reference.sql\",\n    name: \"billing_connection_credential_reference\",\n    sql: billingConnectionCredentialReferenceSql,\n    version: 7,\n  },\n  {\n    checksum: \"billing-webhook-ingress-observability-v1\",\n    filename: \"0008_billing_webhook_ingress_observability.sql\",\n    name: \"billing_webhook_ingress_observability\",\n    sql: billingWebhookIngressObservabilitySql,\n    version: 8,\n  },\n  {\n    checksum: \"billing-webhook-delivery-health-v1\",\n    filename: \"0009_billing_webhook_delivery_health.sql\",\n    name: \"billing_webhook_delivery_health\",\n    sql: billingWebhookDeliveryHealthSql,\n    version: 9,\n  },\n  {\n    checksum: \"billing-checkout-sessions-v1\",\n    filename: \"0010_billing_checkout_sessions.sql\",\n    name: \"billing_checkout_sessions\",\n    sql: billingCheckoutSessionsSql,\n    version: 10,\n  },\n  {\n    checksum: \"billing-subject-binding-uniqueness-v1\",\n    filename: \"0011_billing_subject_binding_uniqueness.sql\",\n    name: \"billing_subject_binding_uniqueness\",\n    sql: billingSubjectBindingUniquenessSql,\n    version: 11,\n  },\n  {\n    checksum: \"billing-reconciliation-lease-epoch-v1\",\n    filename: \"0012_billing_reconciliation_lease_epoch.sql\",\n    name: \"billing_reconciliation_lease_epoch\",\n    sql: billingReconciliationLeaseEpochSql,\n    version: 12,\n  },\n  {\n    checksum: \"billing-audit-failure-outcome-v1\",\n    filename: \"0013_billing_audit_failure_outcome.sql\",\n    name: \"billing_audit_failure_outcome\",\n    sql: billingAuditFailureOutcomeSql,\n    version: 13,\n  },\n  {\n    checksum: \"billing-connection-declared-slot-v1\",\n    filename: \"0014_billing_connection_declared_slot.sql\",\n    name: \"billing_connection_declared_slot\",\n    sql: billingConnectionDeclaredSlotSql,\n    version: 14,\n  },\n  {\n    checksum: \"billing-webhook-signing-secrets-v1\",\n    filename: \"0015_billing_webhook_signing_secrets.sql\",\n    name: \"billing_webhook_signing_secrets\",\n    sql: billingWebhookSigningSecretsSql,\n    version: 15,\n  },\n  {\n    checksum: \"billing-checkout-return-finality-v1\",\n    filename: \"0016_billing_checkout_return_finality.sql\",\n    name: \"billing_checkout_return_finality\",\n    sql: billingCheckoutReturnFinalitySql,\n    version: 16,\n  },\n  {\n    checksum: \"billing-webhook-ingress-stage-catalog-v1\",\n    filename: \"0017_billing_webhook_ingress_stage_catalog.sql\",\n    name: \"billing_webhook_ingress_stage_catalog\",\n    sql: billingWebhookIngressStageCatalogSql,\n    version: 17,\n  },\n  {\n    checksum: \"billing-provider-account-id-nullable-v1\",\n    filename: \"0018_billing_provider_account_id_nullable.sql\",\n    name: \"billing_provider_account_id_nullable\",\n    sql: billingProviderAccountIdNullableSql,\n    version: 18,\n  },\n  {\n    checksum: \"billing-entitlements-v1\",\n    filename: \"0019_billing_entitlements.sql\",\n    name: \"billing_entitlements\",\n    sql: billingEntitlementsSql,\n    version: 19,\n  },\n  {\n    checksum: \"billing-binding-conflicts-v1\",\n    filename: \"0020_billing_binding_conflicts.sql\",\n    name: \"billing_binding_conflicts\",\n    sql: billingBindingConflictsSql,\n    version: 20,\n  },\n  {\n    checksum: \"billing-webhook-ingress-subject-refresh-v1\",\n    filename: \"0021_billing_webhook_ingress_subject_refresh.sql\",\n    name: \"billing_webhook_ingress_subject_refresh\",\n    sql: billingWebhookIngressSubjectRefreshSql,\n    version: 21,\n  },\n  {\n    checksum: \"billing-webhook-ingress-rejection-evidence-v1\",\n    filename: \"0022_billing_webhook_ingress_rejection_evidence.sql\",\n    name: \"billing_webhook_ingress_rejection_evidence\",\n    sql: billingWebhookIngressRejectionEvidenceSql,\n    version: 22,\n  },\n  {\n    checksum: \"billing-subscription-enrollments-v1\",\n    filename: \"0023_billing_subscription_enrollments.sql\",\n    name: \"billing_subscription_enrollments\",\n    sql: billingSubscriptionEnrollmentsSql,\n    version: 23,\n  },\n  {\n    checksum: \"billing-connection-owner-slot-v1\",\n    filename: \"0024_billing_connection_owner_slot.sql\",\n    name: \"billing_connection_owner_slot\",\n    sql: billingConnectionOwnerSlotSql,\n    version: 24,\n  },\n  {\n    checksum: \"billing-customer-reservation-leases-v1\",\n    filename: \"0025_billing_customer_reservation_leases.sql\",\n    name: \"billing_customer_reservation_leases\",\n    sql: billingCustomerReservationLeasesSql,\n    version: 25,\n  },\n  {\n    checksum: \"billing-webhook-reconciliation-states-v1\",\n    filename: \"0026_billing_webhook_reconciliation_states.sql\",\n    name: \"billing_webhook_reconciliation_states\",\n    sql: billingWebhookReconciliationStatesSql,\n    version: 26,\n  },\n  {\n    checksum: \"billing-subject-binding-evidence-v1\",\n    filename: \"0027_billing_subject_binding_evidence.sql\",\n    name: \"billing_subject_binding_evidence\",\n    sql: billingSubjectBindingEvidenceSql,\n    version: 27,\n  },\n  {\n    checksum: \"billing-enrollment-fencing-plan-change-v1\",\n    filename: \"0028_billing_enrollment_fencing_and_plan_change.sql\",\n    name: \"billing_enrollment_fencing_and_plan_change\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_SUBSCRIPTION_FENCING_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingEnrollmentFencingAndPlanChangeSql,\n    version: 28,\n  },\n  {\n    checksum: \"billing-provider-effect-journal-v1\",\n    filename: \"0029_billing_provider_effect_journal.sql\",\n    name: \"billing_provider_effect_journal\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingProviderEffectJournalSql,\n    version: 29,\n  },\n  {\n    checksum: \"billing-contact-provenance-v1\",\n    filename: \"0030_billing_contact_provenance.sql\",\n    name: \"billing_contact_provenance\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingContactProvenanceSql,\n    version: 30,\n  },\n  {\n    checksum: \"billing-webhook-lifecycle-v1\",\n    filename: \"0031_billing_webhook_lifecycle.sql\",\n    name: \"billing_webhook_lifecycle\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingWebhookLifecycleSql,\n    version: 31,\n  },\n  {\n    checksum: \"billing-subscription-updated-at-v1\",\n    filename: \"0032_billing_subscription_updated_at.sql\",\n    name: \"billing_subscription_updated_at\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingSubscriptionUpdatedAtSql,\n    version: 32,\n  },\n  {\n    checksum: \"billing-plan-change-live-states-v1\",\n    filename: \"0033_billing_plan_change_live_states.sql\",\n    name: \"billing_plan_change_live_states\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingPlanChangeLiveStatesSql,\n    version: 33,\n  },\n  {\n    checksum: \"billing-contact-observation-v1\",\n    filename: \"0034_billing_contact_observation.sql\",\n    name: \"billing_contact_observation\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingContactObservationSql,\n    version: 34,\n  },\n  {\n    checksum: \"billing-checkout-session-lines-v1\",\n    filename: \"0035_billing_checkout_session_lines.sql\",\n    name: \"billing_checkout_session_lines\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingCheckoutSessionLinesSql,\n    version: 35,\n  },\n  {\n    checksum: \"billing-binding-conflict-identity-v1\",\n    filename: \"0036_billing_binding_conflict_identity.sql\",\n    name: \"billing_binding_conflict_identity\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingBindingConflictIdentitySql,\n    version: 36,\n  },\n  {\n    checksum: \"billing-webhook-ingress-bounded-evidence-v1\",\n    filename: \"0037_billing_webhook_ingress_bounded_evidence.sql\",\n    name: \"billing_webhook_ingress_bounded_evidence\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingWebhookIngressBoundedEvidenceSql,\n    version: 37,\n  },\n  {\n    checksum: \"billing-webhook-ingress-nullable-digest-v1\",\n    filename: \"0038_billing_webhook_ingress_nullable_digest.sql\",\n    name: \"billing_webhook_ingress_nullable_digest\",\n    requiredColumns: EMBEDDED_BILLING_REQUIRED_COLUMNS,\n    requiredRelations: EMBEDDED_BILLING_REQUIRED_RELATIONS,\n    sql: billingWebhookIngressNullableDigestSql,\n    version: 38,\n  },\n] as const;\n\nexport const AUTH_UI_BILLING_PRESET_TABLES = [\n  \"billing_provider_connections\",\n  \"billing_webhook_events\",\n  \"billing_projection_events\",\n  \"billing_import_runs\",\n  \"billing_import_candidates\",\n  \"billing_webhook_registrations\",\n] as const;\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport type { AthenaEventIngressMigrationModules } from \"../embedded-event-ingress/enablement.ts\";\nimport { shouldApplyEmbeddedBillingMigrations } from \"../embedded-event-ingress/enablement.ts\";\nimport { applyEmbeddedSqlMigrationsWithRuntime } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport {\n  EMBEDDED_BILLING_LEDGER,\n  EMBEDDED_BILLING_MIGRATIONS,\n} from \"./catalog.ts\";\n\nexport async function applyEmbeddedBillingMigrations(\n  options: RunMigrationsOptions,\n  connectionString: string,\n  ui: AthenaCliUI,\n  modules: AthenaEventIngressMigrationModules | undefined\n): Promise<void> {\n  if (!shouldApplyEmbeddedBillingMigrations(modules)) {\n    return;\n  }\n  if (options.createBackend && !options.createAuthDatabase) {\n    return;\n  }\n  ui.info(\"→ Embedded Billing schema applying\");\n  await applyEmbeddedSqlMigrationsWithRuntime({\n    connectionString,\n    ledgerTable: EMBEDDED_BILLING_LEDGER,\n    migrations: EMBEDDED_BILLING_MIGRATIONS,\n    postgresRuntime: options.postgresRuntime,\n    ui,\n  });\n  ui.success(\"✓ Embedded Billing schema applied\");\n}\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 { ATHENA_CHAT_RUNTIME_SCHEMA_VERSION } 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  \"files\",\n  \"chat_rooms\",\n  \"chat_direct_rooms\",\n  \"chat_room_members\",\n  \"chat_messages\",\n  \"chat_message_attachments\",\n  \"chat_message_reactions\",\n  \"chat_outbox\",\n  \"runtime_schema_versions\",\n] as const;\n\nexport const EMBEDDED_CHAT_REQUIRED_RELATIONS =\n  EMBEDDED_CHAT_REQUIRED_TABLES.map((table) => ({ schema: \"athena\", table }));\n\nexport const EMBEDDED_CHAT_LEGACY_CHECKSUMS_V1 = [\"chat-runtime-v4\"] as const;\n\nexport const EMBEDDED_CHAT_MIGRATIONS = [\n  {\n    checksum: checksumMigrationSql(chatRuntimeV4Sql),\n    filename: \"0001_chat_runtime_v4.sql\",\n    legacyChecksums: EMBEDDED_CHAT_LEGACY_CHECKSUMS_V1,\n    name: \"chat_runtime_v4\",\n    requiredRelations: EMBEDDED_CHAT_REQUIRED_RELATIONS,\n    schemaVersion: ATHENA_CHAT_RUNTIME_SCHEMA_VERSION,\n    sql: chatRuntimeV4Sql,\n    version: 1,\n  },\n] as const;\n","export type AthenaChatMigrationModules = {\n  auth?: boolean;\n  chat?: boolean;\n};\n\nexport function shouldApplyEmbeddedChatMigrations(\n  modules: AthenaChatMigrationModules | undefined\n): boolean {\n  return modules?.chat === true;\n}\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { applyEmbeddedSqlMigrationsWithRuntime } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport { EMBEDDED_CHAT_LEDGER, EMBEDDED_CHAT_MIGRATIONS } from \"./catalog.ts\";\nimport {\n  type AthenaChatMigrationModules,\n  shouldApplyEmbeddedChatMigrations,\n} from \"./enablement.ts\";\n\nexport async function applyEmbeddedChatMigrations(\n  options: RunMigrationsOptions,\n  connectionString: string,\n  ui: AthenaCliUI,\n  modules: AthenaChatMigrationModules | undefined\n): Promise<void> {\n  if (!shouldApplyEmbeddedChatMigrations(modules)) {\n    return;\n  }\n  if (options.createBackend && !options.createAuthDatabase) {\n    return;\n  }\n  ui.info(\"→ Embedded Chat schema applying\");\n  await applyEmbeddedSqlMigrationsWithRuntime({\n    connectionString,\n    ledgerTable: EMBEDDED_CHAT_LEDGER,\n    migrations: EMBEDDED_CHAT_MIGRATIONS,\n    postgresRuntime: options.postgresRuntime,\n    ui,\n  });\n  ui.success(\"✓ Embedded Chat schema applied\");\n}\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","-- Persist the ingest channel (classic vs next-gen). Replay must not infer\n-- operation from the body.\n\nALTER TABLE athena.event_ingress\n    ADD COLUMN IF NOT EXISTS operation text;\n\nUPDATE athena.event_ingress\nSET operation = headers->>'x-athena-ingress-operation'\nWHERE operation IS NULL\n  AND headers ? 'x-athena-ingress-operation'\n  AND length(trim(headers->>'x-athena-ingress-operation')) > 0;\n\nINSERT INTO athena_event_ingress_migrations (version, name, checksum)\nSELECT 3, 'event_ingress_operation_channel', 'event-ingress-operation-channel-v1'\nWHERE NOT EXISTS (\n    SELECT 1 FROM athena_event_ingress_migrations WHERE version = 3\n);\n","import eventIngressSql from \"./sql/0001_event_ingress.sql\";\nimport eventIngressFailureMachineSql from \"./sql/0002_event_ingress_failure_machine.sql\";\nimport eventIngressOperationSql from \"./sql/0003_event_ingress_operation.sql\";\n\nexport const EMBEDDED_EVENT_INGRESS_LEDGER = \"athena_event_ingress_migrations\";\n\nexport const EMBEDDED_EVENT_INGRESS_REQUIRED_TABLES = [\n  \"event_ingress\",\n  \"event_ledger\",\n  \"event_outbox\",\n] as const;\n\nexport const EMBEDDED_EVENT_INGRESS_REQUIRED_RELATIONS =\n  EMBEDDED_EVENT_INGRESS_REQUIRED_TABLES.map((table) => ({\n    schema: \"athena\",\n    table,\n  }));\n\nexport const EMBEDDED_EVENT_INGRESS_MIGRATIONS = [\n  {\n    checksum: \"event-ingress-v1\",\n    filename: \"0001_event_ingress.sql\",\n    name: \"event_ingress\",\n    sql: eventIngressSql,\n    version: 1,\n  },\n  {\n    checksum: \"event-ingress-failure-machine-v1\",\n    filename: \"0002_event_ingress_failure_machine.sql\",\n    name: \"event_ingress_failure_machine\",\n    sql: eventIngressFailureMachineSql,\n    version: 2,\n  },\n  {\n    checksum: \"event-ingress-operation-channel-v1\",\n    filename: \"0003_event_ingress_operation.sql\",\n    name: \"event_ingress_operation_channel\",\n    requiredRelations: EMBEDDED_EVENT_INGRESS_REQUIRED_RELATIONS,\n    sql: eventIngressOperationSql,\n    version: 3,\n  },\n] as const;\n","import type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { applyEmbeddedSqlMigrationsWithRuntime } from \"../embedded-sql-apply.ts\";\nimport type { RunMigrationsOptions } from \"../types.ts\";\nimport {\n  EMBEDDED_EVENT_INGRESS_LEDGER,\n  EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n} from \"./catalog.ts\";\nimport {\n  type AthenaEventIngressMigrationModules,\n  shouldApplyEmbeddedEventIngressMigrations,\n} from \"./enablement.ts\";\n\nexport async function applyEmbeddedEventIngressMigrations(\n  options: RunMigrationsOptions,\n  connectionString: string,\n  ui: AthenaCliUI,\n  modules: AthenaEventIngressMigrationModules | undefined\n): Promise<void> {\n  if (!shouldApplyEmbeddedEventIngressMigrations(modules)) {\n    return;\n  }\n  if (options.createBackend && !options.createAuthDatabase) {\n    return;\n  }\n  ui.info(\"→ Embedded Event Ingress schema applying\");\n  await applyEmbeddedSqlMigrationsWithRuntime({\n    connectionString,\n    ledgerTable: EMBEDDED_EVENT_INGRESS_LEDGER,\n    migrations: EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n    postgresRuntime: options.postgresRuntime,\n    ui,\n  });\n  ui.success(\"✓ Embedded Event Ingress schema applied\");\n}\n","import type { MigrationSectionView } from \"../cli/ui/types.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../postgres/owned-runtime.ts\";\nimport {\n  EMBEDDED_BILLING_LEDGER,\n  EMBEDDED_BILLING_MIGRATIONS,\n} from \"./embedded-billing/catalog.ts\";\nimport {\n  EMBEDDED_CHAT_LEDGER,\n  EMBEDDED_CHAT_MIGRATIONS,\n} from \"./embedded-chat/catalog.ts\";\nimport { shouldApplyEmbeddedChatMigrations } from \"./embedded-chat/enablement.ts\";\nimport {\n  EMBEDDED_EVENT_INGRESS_LEDGER,\n  EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n} from \"./embedded-event-ingress/catalog.ts\";\nimport {\n  type AthenaEventIngressMigrationModules,\n  shouldApplyEmbeddedBillingMigrations,\n  shouldApplyEmbeddedEventIngressMigrations,\n} from \"./embedded-event-ingress/enablement.ts\";\nimport {\n  type EmbeddedLedgerInspection,\n  inspectEmbeddedSqlLedger,\n} from \"./embedded-sql-apply.ts\";\n\nexport type EmbeddedMigrateModules = AthenaEventIngressMigrationModules;\n\nexport interface EmbeddedModuleSection {\n  readonly enabled: boolean;\n  readonly id: \"chat\" | \"event-ingress\" | \"billing\";\n  readonly inspection?: EmbeddedLedgerInspection;\n  readonly section: MigrationSectionView;\n}\n\nfunction sectionFromInspection(\n  title: string,\n  enabled: boolean,\n  disabledReason: string,\n  inspection: EmbeddedLedgerInspection | undefined\n): MigrationSectionView {\n  if (!enabled) {\n    return {\n      rows: [{ name: disabledReason, status: \"skipped\" }],\n      summary: \"disabled\",\n      title,\n    };\n  }\n  const entries = inspection?.entries ?? [];\n  const applied = entries.filter((entry) => entry.status === \"applied\").length;\n  const pending = entries.filter((entry) => entry.status === \"pending\").length;\n  const adoptable = entries.filter(\n    (entry) => entry.status === \"legacy-compatible\"\n  ).length;\n  const conflicts = entries.filter(\n    (entry) => entry.status === \"checksum-mismatch\"\n  ).length;\n  const missingRelations = inspection?.missingRelations ?? [];\n  const missingColumns = inspection?.missingColumns ?? [];\n  const missing = [...missingRelations, ...missingColumns];\n  return {\n    rows: [\n      ...entries.map((entry) => ({\n        detail:\n          entry.status === \"checksum-mismatch\"\n            ? `ledger ${entry.storedChecksum} ≠ packaged ${entry.checksum}`\n            : entry.status === \"legacy-compatible\"\n              ? `ledger identity: legacy (${entry.storedChecksum}); packaged identity: SHA-256; action: adopt`\n              : undefined,\n        name: entry.filename,\n        status: entry.status,\n      })),\n      ...missing.map((physicalObject) => ({\n        detail: `ledger applied but ${physicalObject} is missing`,\n        name: physicalObject,\n        status: \"drift\" as const,\n      })),\n    ],\n    summary: `${applied} / ${entries.length} applied${pending > 0 ? ` · ${pending} pending` : \"\"}${adoptable > 0 ? ` · ${adoptable} adopt` : \"\"}${conflicts > 0 ? ` · ${conflicts} conflicts` : \"\"}${missingRelations.length > 0 ? ` · ${missingRelations.length} missing relations` : \"\"}${missingColumns.length > 0 ? ` · ${missingColumns.length} missing columns` : \"\"}`,\n    title,\n  };\n}\n\nexport async function inspectEmbeddedModuleSections(input: {\n  connectionString: string;\n  modules: EmbeddedMigrateModules | undefined;\n  postgresRuntime?: AthenaPostgresRuntime;\n}): Promise<readonly EmbeddedModuleSection[]> {\n  const chatEnabled = shouldApplyEmbeddedChatMigrations(input.modules);\n  const ingressEnabled = shouldApplyEmbeddedEventIngressMigrations(\n    input.modules\n  );\n  const billingEnabled = shouldApplyEmbeddedBillingMigrations(input.modules);\n  if (!(chatEnabled || ingressEnabled || billingEnabled)) {\n    return [\n      {\n        enabled: false,\n        id: \"chat\",\n        section: sectionFromInspection(\n          \"Embedded Chat\",\n          false,\n          \"modules.chat !== true\",\n          undefined\n        ),\n      },\n      {\n        enabled: false,\n        id: \"event-ingress\",\n        section: sectionFromInspection(\n          \"Event Ingress\",\n          false,\n          \"modules.eventIngress / modules.billing not enabled\",\n          undefined\n        ),\n      },\n      {\n        enabled: false,\n        id: \"billing\",\n        section: sectionFromInspection(\n          \"Embedded Billing\",\n          false,\n          \"modules.billing !== true\",\n          undefined\n        ),\n      },\n    ];\n  }\n\n  const owned =\n    input.postgresRuntime ??\n    createAthenaPostgresRuntime({ connectionString: input.connectionString });\n  try {\n    const queryable = {\n      query: owned.query.bind(owned),\n    };\n    const chat = chatEnabled\n      ? await inspectEmbeddedSqlLedger({\n          ledgerTable: EMBEDDED_CHAT_LEDGER,\n          migrations: EMBEDDED_CHAT_MIGRATIONS,\n          queryable,\n        })\n      : undefined;\n    const ingress = ingressEnabled\n      ? await inspectEmbeddedSqlLedger({\n          ledgerTable: EMBEDDED_EVENT_INGRESS_LEDGER,\n          migrations: EMBEDDED_EVENT_INGRESS_MIGRATIONS,\n          queryable,\n        })\n      : undefined;\n    const billing = billingEnabled\n      ? await inspectEmbeddedSqlLedger({\n          ledgerTable: EMBEDDED_BILLING_LEDGER,\n          migrations: EMBEDDED_BILLING_MIGRATIONS,\n          queryable,\n        })\n      : undefined;\n    return [\n      {\n        enabled: chatEnabled,\n        id: \"chat\",\n        inspection: chat,\n        section: sectionFromInspection(\n          \"Embedded Chat\",\n          chatEnabled,\n          \"modules.chat !== true\",\n          chat\n        ),\n      },\n      {\n        enabled: ingressEnabled,\n        id: \"event-ingress\",\n        inspection: ingress,\n        section: sectionFromInspection(\n          \"Event Ingress\",\n          ingressEnabled,\n          \"modules.eventIngress / modules.billing not enabled\",\n          ingress\n        ),\n      },\n      {\n        enabled: billingEnabled,\n        id: \"billing\",\n        inspection: billing,\n        section: sectionFromInspection(\n          \"Embedded Billing\",\n          billingEnabled,\n          \"modules.billing !== true\",\n          billing\n        ),\n      },\n    ];\n  } finally {\n    if (!input.postgresRuntime) {\n      await owned.close();\n    }\n  }\n}\n\nexport function embeddedModuleHasConflicts(\n  sections: readonly EmbeddedModuleSection[]\n): boolean {\n  return sections.some(\n    (section) =>\n      (section.inspection?.missingRelations?.length ?? 0) > 0 ||\n      section.section.rows.some(\n        (row) => row.status === \"checksum-mismatch\" || row.status === \"drift\"\n      )\n  );\n}\n\nexport function embeddedModuleHasPending(\n  sections: readonly EmbeddedModuleSection[]\n): boolean {\n  return sections.some(\n    (section) =>\n      section.enabled &&\n      section.section.rows.some(\n        (row) => row.status === \"pending\" || row.status === \"legacy-compatible\"\n      )\n  );\n}\n\nexport function embeddedModuleNeedsAdoption(\n  sections: readonly EmbeddedModuleSection[]\n): boolean {\n  return sections.some(\n    (section) =>\n      section.enabled &&\n      section.section.rows.some((row) => row.status === \"legacy-compatible\")\n  );\n}\n\nexport function formatEmbeddedModuleConflicts(\n  sections: readonly EmbeddedModuleSection[]\n): string {\n  const lines = [\"Packaged module ledger checksum mismatch.\"];\n  for (const section of sections) {\n    if (!section.enabled) {\n      continue;\n    }\n    for (const row of section.section.rows) {\n      if (row.status !== \"checksum-mismatch\" && row.status !== \"drift\") {\n        continue;\n      }\n      lines.push(`${section.section.title}: ${row.name}`);\n      if (row.detail) {\n        lines.push(`  ${row.detail}`);\n      }\n    }\n  }\n  return lines.join(\"\\n\");\n}\n","import type {\n  AppliedMigration,\n  MigrationConflict,\n  MigrationFile,\n  MigrationPlan,\n  MigrationPlanEntry,\n} from \"./types.ts\";\nimport {\n  IDENTITY_MIGRATION_EXECUTION_TRANSFORM,\n  resolveMigrationExecution,\n} from \"./checksum.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 identities = new Set(\n        appliedRows.map((row) => migrationExecutionIdentity(row))\n      );\n      if (\n        new Set(appliedRows.map((row) => row.checksum)).size > 1 ||\n        identities.size > 1 ||\n        (local &&\n          (!appliedRows.some((row) => row.checksum === local.checksum) ||\n            !appliedRows.some((row) => matchesExecution(row, local))))\n      ) {\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 (!matchesExecution(applied, local)) {\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\nfunction migrationExecutionIdentity(row: AppliedMigration): string {\n  return [\n    row.executionChecksum ?? row.checksum,\n    row.executionTransformId ?? IDENTITY_MIGRATION_EXECUTION_TRANSFORM.id,\n    row.executionTransformVersion ??\n      IDENTITY_MIGRATION_EXECUTION_TRANSFORM.version,\n  ].join(\":\");\n}\n\nfunction matchesExecution(\n  applied: AppliedMigration,\n  local: MigrationFile\n): boolean {\n  const execution = resolveMigrationExecution(local);\n  if (applied.executionChecksum === undefined) {\n    return (\n      local.executionSql === undefined &&\n      execution.transform.id === IDENTITY_MIGRATION_EXECUTION_TRANSFORM.id &&\n      execution.transform.version === IDENTITY_MIGRATION_EXECUTION_TRANSFORM.version\n    );\n  }\n  return (\n    applied.executionChecksum === execution.checksum &&\n    applied.executionTransformId === execution.transform.id &&\n    applied.executionTransformVersion === execution.transform.version\n  );\n}\n","import { randomUUID } from \"node:crypto\";\nimport { sha256HexUtf8 } from \"../node-crypto.ts\";\nimport type {\n  AthenaPostgresClient,\n  AthenaPostgresPool,\n} from \"../postgres/driver.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../postgres/owned-runtime.ts\";\nimport { PostgresDeadline } from \"../postgres/pool/deadline.ts\";\nimport type { PostgresLease } from \"../postgres/pool/lease.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport {\n  inspectPhysicalCatalog,\n  type PhysicalCatalog,\n} from \"./analysis/catalog.ts\";\nimport { fingerprintProjectedSchema } from \"./analysis/projected-schema.ts\";\nimport {\n  resolveMigrationExecution,\n} from \"./checksum.ts\";\nimport type { MigrationBackend } from \"./backend.ts\";\nimport type { ArchivedMigrationSource } from \"./reconciliation/types.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport {\n  type AppliedMigration,\n  type AppliedMigrationResult,\n  type MigrationBackendContext,\n  MigrationError,\n  type MigrationFile,\n} from \"./types.ts\";\n\n/**\n * Stable session advisory-lock key pair for Athena JS **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  ADD COLUMN IF NOT EXISTS execution_checksum text,\n  ADD COLUMN IF NOT EXISTS execution_transform_id text,\n  ADD COLUMN IF NOT EXISTS execution_transform_version 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  execution_checksum text,\n  execution_transform_id text,\n  execution_transform_version text,\n  execution_sql text,\n  archived_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n  PRIMARY KEY (version, checksum)\n);\n\nALTER TABLE athena.schema_migration_sources\n  ADD COLUMN IF NOT EXISTS execution_checksum text,\n  ADD COLUMN IF NOT EXISTS execution_transform_id text,\n  ADD COLUMN IF NOT EXISTS execution_transform_version text,\n  ADD COLUMN IF NOT EXISTS execution_sql text;\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,\n  execution_id, execution_checksum, execution_transform_id,\n  execution_transform_version\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_checksum?: string | null;\n  execution_ms: string | number | bigint;\n  execution_transform_id?: string | null;\n  execution_transform_version?: string | null;\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\ninterface ArchivedRow {\n  checksum: string;\n  execution_checksum?: string | null;\n  execution_id?: string | null;\n  execution_sql?: string | null;\n  execution_transform_id?: string | null;\n  execution_transform_version?: 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\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    executionChecksum: row.execution_checksum ?? undefined,\n    executionId: row.execution_id ?? undefined,\n    executionMs: toNumber(row.execution_ms),\n    executionTransformId: row.execution_transform_id ?? undefined,\n    executionTransformVersion: row.execution_transform_version ?? undefined,\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\n  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 readonly runtime: AthenaPostgresRuntime;\n  private readonly ownsRuntime: boolean;\n  private lease: PostgresLease | undefined;\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    if (options.postgresRuntime) {\n      this.runtime = options.postgresRuntime;\n      this.ownsRuntime = false;\n    } else if (options.pool) {\n      this.runtime = createAthenaPostgresRuntime({\n        ownership: \"borrowed\",\n        pool: options.pool,\n      });\n      this.ownsRuntime = true;\n    } else {\n      const { connectionString } = buildPostgresMigrationPoolOptions(\n        this.connectionString,\n        this.database\n      );\n      this.runtime = createAthenaPostgresRuntime({ connectionString });\n      this.ownsRuntime = true;\n    }\n  }\n\n  private async ensureClient(): Promise<AthenaPostgresClient> {\n    if (this.client) {\n      return this.client;\n    }\n    const manager = await this.runtime.getPoolManager();\n    this.lease = await manager.acquire({\n      deadline: PostgresDeadline.after(60_000),\n      target: \"direct\",\n      workload: \"migration\",\n    });\n    this.client = this.lease.client;\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    const executionSql = migration.executionSql ?? migration.sql;\n    const execution = resolveMigrationExecution(migration);\n    // Transforms are untrusted execution input even though authored `sql` is\n    // the provenance source, so validate the final payload independently.\n    assertMigrationSqlAllowsOuterTransaction(executionSql, 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(\n          await inspectPhysicalCatalog(client)\n        );\n      } catch {\n        preFingerprint = null;\n      }\n\n      // Execute the full transformed SQL file (no semicolon splitting).\n      await client.query(executionSql);\n\n      const executionMs = Math.max(0, Date.now() - started);\n      let postFingerprint: string | null = null;\n      try {\n        postFingerprint = catalogFingerprint(\n          await inspectPhysicalCatalog(client)\n        );\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  execution_checksum, execution_transform_id, execution_transform_version\n)\nVALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12::uuid, $13, $14, $15, $16, $17, $18)\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          execution.checksum,\n          execution.transform.id,\n          execution.transform.version,\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  execution_checksum, execution_transform_id, execution_transform_version, execution_sql\n) VALUES ($1, $2, $3, $4, $5, $6, $7::uuid, $8, $9, $10, $11)\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          execution.checksum,\n          execution.transform.id,\n          execution.transform.version,\n          execution.sql,\n        ]\n      );\n\n      await client.query(\"COMMIT\");\n\n      return {\n        appliedAt: new Date(),\n        checksum: migration.checksum,\n        executionChecksum: execution.checksum,\n        executionMs,\n        executionTransformId: execution.transform.id,\n        executionTransformVersion: execution.transform.version,\n        executionSql: execution.sql,\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 query = `\nSELECT version, checksum, sql, source_commit, source_blob_sha, source_path,\n  execution_id, execution_checksum, execution_transform_id,\n  execution_transform_version, execution_sql\nFROM athena.schema_migration_sources\nORDER BY version ASC\n`.trim();\n      const legacyQuery = `\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      let rows: ArchivedRow[];\n      try {\n        rows = (await client.query<ArchivedRow>(query)).rows;\n      } catch (error) {\n        if (!isUndefinedColumnError(error)) {\n          throw error;\n        }\n        rows = (await client.query<ArchivedRow>(legacyQuery)).rows;\n      }\n      return rows.map((row) => ({\n        checksum: row.checksum,\n        executionChecksum: row.execution_checksum ?? undefined,\n        executionId: row.execution_id ?? undefined,\n        executionSql: row.execution_sql ?? undefined,\n        executionTransformId: row.execution_transform_id ?? undefined,\n        executionTransformVersion: row.execution_transform_version ?? 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.lease) {\n        this.lease.release();\n        this.lease = undefined;\n      }\n      this.client = undefined;\n      if (this.ownsRuntime) {\n        await this.runtime.close();\n      }\n    }\n  }\n}\n\nexport async function createPostgresMigrationBackend(\n  context: MigrationBackendContext\n): Promise<MigrationBackend> {\n  return new PostgresMigrationBackend(context);\n}\n","/**\n * Provider facts -> Data catalog code (one class per SQLSTATE family).\n * SQLSTATE and native provider codes are never public codes.\n */\nconst SQLSTATE = /^[0-9A-Z]{5}$/;\n\nexport type AthenaDataErrorCode =\n  | \"data_backend_unavailable\"\n  | \"data_column_not_found\"\n  | \"data_conflict\"\n  | \"data_constraint_violation\"\n  | \"data_execution_failed\"\n  | \"data_function_not_found\"\n  | \"data_invalid_value\"\n  | \"data_permission_denied\"\n  | \"data_query_cancelled\"\n  | \"data_relation_not_found\"\n  | \"data_schema_not_found\";\n\nexport function dataErrorCodeForProviderFacts(input: {\n  hint?: string;\n  message?: string;\n  providerCode?: string;\n  transportCode?: string;\n}): AthenaDataErrorCode {\n  const sqlState =\n    normalizeSqlState(input.providerCode) ??\n    normalizeSqlState(input.hint) ??\n    sqlStateFromNamedHint(input.hint);\n\n  if (sqlState === \"42P01\") {\n    return \"data_relation_not_found\";\n  }\n  if (sqlState === \"3F000\") {\n    return \"data_schema_not_found\";\n  }\n  if (sqlState === \"42703\") {\n    return \"data_column_not_found\";\n  }\n  if (sqlState === \"42883\") {\n    return \"data_function_not_found\";\n  }\n  if (\n    sqlState === \"23505\" ||\n    sqlState === \"23503\" ||\n    sqlState === \"40001\" ||\n    sqlState === \"40P01\"\n  ) {\n    return \"data_conflict\";\n  }\n  if (\n    sqlState === \"23502\" ||\n    sqlState === \"23514\" ||\n    sqlState?.startsWith(\"22\")\n  ) {\n    return \"data_invalid_value\";\n  }\n  if (sqlState?.startsWith(\"23\")) {\n    return \"data_constraint_violation\";\n  }\n  if (sqlState === \"42501\") {\n    return \"data_permission_denied\";\n  }\n  if (sqlState === \"57014\") {\n    return \"data_query_cancelled\";\n  }\n  if (\n    sqlState?.startsWith(\"08\") ||\n    sqlState === \"53300\" ||\n    sqlState === \"57P03\"\n  ) {\n    return \"data_backend_unavailable\";\n  }\n\n  const providerCode = input.providerCode?.trim().toUpperCase();\n  const haystack =\n    `${input.message ?? \"\"} ${input.hint ?? \"\"} ${input.transportCode ?? \"\"}`.toLowerCase();\n  if (\n    providerCode === \"SQLITE_BUSY\" ||\n    providerCode === \"SQLITE_LOCKED\" ||\n    /(?:busy|locked)/.test(haystack)\n  ) {\n    return \"data_backend_unavailable\";\n  }\n  if (\n    providerCode === \"SQLITE_INTERRUPT\" ||\n    /(?:abort|cancel|deadline|timeout|interrupt)/.test(haystack)\n  ) {\n    return \"data_query_cancelled\";\n  }\n  if (\n    providerCode?.startsWith(\"SQLITE_CONSTRAINT\") ||\n    /(?:constraint|unique|foreign key|not null|check)/.test(haystack)\n  ) {\n    return \"data_constraint_violation\";\n  }\n  if (/(?:no such table|table .* does not exist)/.test(haystack)) {\n    return \"data_relation_not_found\";\n  }\n  if (\n    input.hint === \"connection\" ||\n    input.transportCode === \"NETWORK_ERROR\" ||\n    /(econnrefused|enotfound|econnreset|connection terminated)/.test(haystack)\n  ) {\n    return \"data_backend_unavailable\";\n  }\n\n  return \"data_execution_failed\";\n}\n\nfunction normalizeSqlState(value: string | undefined): string | undefined {\n  if (!value) {\n    return;\n  }\n  const trimmed = value.trim().toUpperCase();\n  return SQLSTATE.test(trimmed) ? trimmed : undefined;\n}\n\nfunction sqlStateFromNamedHint(hint: string | undefined): string | undefined {\n  if (!hint) {\n    return;\n  }\n  if (hint.startsWith(\"unique_violation\")) {\n    return \"23505\";\n  }\n  if (hint.startsWith(\"foreign_key_violation\")) {\n    return \"23503\";\n  }\n  if (hint.startsWith(\"not_null_violation\")) {\n    return \"23502\";\n  }\n  if (hint.startsWith(\"check_violation\")) {\n    return \"23514\";\n  }\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  readonly cause?: unknown;\n  readonly code?: string;\n  readonly details?: unknown;\n  readonly message?: string;\n  readonly status?: number;\n}\n\nexport interface AthenaHttpFailureIR extends AthenaFailureBase {\n  readonly source: \"http\";\n}\n\nexport interface AthenaProviderFailureIR extends AthenaFailureBase {\n  readonly provider?: string;\n  readonly providerCode?: string;\n  readonly source: \"provider\";\n}\n\nexport interface AthenaRuntimeFailureIR extends AthenaFailureBase {\n  readonly reason?: string;\n  readonly source: \"runtime\";\n}\n\nexport type AthenaFailureIR =\n  | AthenaHttpFailureIR\n  | AthenaProviderFailureIR\n  | AthenaRuntimeFailureIR;\n\nexport function failureFromUnknown(\n  source: AthenaFailureIR[\"source\"],\n  error: unknown,\n  input: Omit<Partial<AthenaFailureIR>, \"source\"> = {}\n): AthenaFailureIR {\n  const fromOccurrence = occurrenceFields(error);\n  return {\n    ...fromOccurrence,\n    ...input,\n    cause: input.cause ?? error,\n    message: input.message ?? messageFromUnknown(error),\n    source,\n  } as AthenaFailureIR;\n}\n\nfunction occurrenceFields(\n  error: unknown\n): Omit<Partial<AthenaFailureIR>, \"source\"> {\n  if (!error || typeof error !== \"object\") {\n    return {};\n  }\n  const record = error as {\n    code?: unknown;\n    details?: unknown;\n    status?: unknown;\n  };\n  return {\n    ...(typeof record.code === \"string\" && record.code.length > 0\n      ? { code: record.code }\n      : {}),\n    ...(record.details === undefined ? {} : { details: record.details }),\n    ...(typeof record.status === \"number\" ? { status: record.status } : {}),\n  };\n}\n\nexport function messageFromUnknown(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nexport function failureRecord(\n  failure: AthenaFailureIR\n): Record<string, unknown> {\n  return failure as unknown as Record<string, unknown>;\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/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\": \"authentication\",\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\t    \"code\": \"chat_unauthenticated\",\n\t    \"description\": \"Chat authentication could not resolve an authenticated actor.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5008,\n\t    \"kind\": \"authentication\",\n\t    \"retry\": \"never\",\n\t    \"status\": 401\n\t  },\n\t  {\n\t    \"code\": \"chat_authorization_denied\",\n\t    \"description\": \"The chat operation was denied because the actor lacks a required Right.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5009,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"chat_membership_denied\",\n\t    \"description\": \"The actor is not a member of the requested chat room.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5010,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"chat_role_denied\",\n\t    \"description\": \"The actor's chat role does not permit the requested operation.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5011,\n\t    \"kind\": \"authorization\",\n\t    \"retry\": \"never\",\n\t    \"status\": 403\n\t  },\n\t  {\n\t    \"code\": \"chat_bad_request\",\n\t    \"description\": \"The chat request was invalid.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5012,\n\t    \"kind\": \"validation\",\n\t    \"retry\": \"never\",\n\t    \"status\": 400\n\t  },\n\t  {\n\t    \"code\": \"chat_capability_unsupported\",\n\t    \"description\": \"The requested chat capability is unsupported by this runtime.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5013,\n\t    \"kind\": \"unsupported\",\n\t    \"retry\": \"never\",\n\t    \"status\": 501\n\t  },\n\t  {\n\t    \"code\": \"chat_transaction_failed\",\n\t    \"description\": \"Chat state could not be committed.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5014,\n\t    \"kind\": \"internal\",\n\t    \"retry\": \"never\",\n\t    \"status\": 500\n\t  },\n\t  {\n\t    \"code\": \"chat_publication_failed\",\n\t    \"description\": \"Chat state committed but its event could not be published.\",\n\t    \"domain\": \"chat\",\n\t    \"errorNumber\": 5015,\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  [\n    ...ATHENA_AUTH_ERROR_DESCRIPTORS,\n    ...ATHENA_BILLING_ERROR_DESCRIPTORS,\n    ...ATHENA_CHAT_ERROR_DESCRIPTORS,\n    ...ATHENA_DATA_ERROR_DESCRIPTORS,\n    ...ATHENA_GATEWAY_ERROR_DESCRIPTORS,\n    ...ATHENA_INTERNAL_ERROR_DESCRIPTORS,\n    ...ATHENA_NOTIFICATIONS_ERROR_DESCRIPTORS,\n    ...ATHENA_POLICY_ERROR_DESCRIPTORS,\n    ...ATHENA_STORAGE_ERROR_DESCRIPTORS,\n    ...ATHENA_WEBHOOK_ERROR_DESCRIPTORS,\n  ].map((descriptor) => [`${descriptor.domain}:${descriptor.code}`, descriptor])\n);\nconst DESCRIPTOR_LIST = [...DESCRIPTORS.values()];\nconst DESCRIPTORS_BY_CODE: ReadonlyMap<string, AthenaErrorIR> = new Map(\n  DESCRIPTOR_LIST.map((descriptor) => [descriptor.code, descriptor])\n);\n\nexport function errorDescriptor(\n  domain: AthenaErrorDomain,\n  code: string\n): AthenaErrorIR | undefined {\n  return DESCRIPTORS.get(`${domain}:${normalizeCatalogCode(domain, code)}`);\n}\n\nexport function normalizeCatalogCode(\n  domain: AthenaErrorDomain,\n  code: string\n): string {\n  const normalized = code.trim().toLowerCase();\n  const withoutAthenaPrefix = normalized.startsWith(\"athena_\")\n    ? normalized.slice(\"athena_\".length)\n    : normalized;\n  if (domain === \"internal\") {\n    return withoutAthenaPrefix;\n  }\n  const domainPrefix = `${domain}_`;\n  if (withoutAthenaPrefix.startsWith(domainPrefix)) {\n    return withoutAthenaPrefix;\n  }\n  return `${domainPrefix}${withoutAthenaPrefix}`;\n}\n\nexport function storageErrorDescriptor(\n  code: string\n): AthenaErrorIR<string, \"storage\"> | undefined {\n  return errorDescriptor(\"storage\", code) as\n    | AthenaErrorIR<string, \"storage\">\n    | undefined;\n}\n\nexport function dataErrorDescriptor(\n  code: string\n): AthenaErrorIR<string, \"data\"> | undefined {\n  return errorDescriptor(\"data\", code) as\n    | AthenaErrorIR<string, \"data\">\n    | undefined;\n}\n\nexport function errorDescriptorForPublicCode(\n  code: string\n): AthenaErrorIR | undefined {\n  return DESCRIPTORS_BY_CODE.get(code.trim().toLowerCase());\n}\n\nexport function isCatalogErrorCode(code: string): boolean {\n  return DESCRIPTORS_BY_CODE.has(code.trim().toLowerCase());\n}\n\nexport function errorDescriptorsForDomain(\n  domain: AthenaErrorDomain\n): readonly AthenaErrorIR[] {\n  return DESCRIPTOR_LIST.filter((descriptor) => descriptor.domain === domain);\n}\n","import { dataErrorCodeForProviderFacts } from \"./data.ts\";\nimport {\n  type AthenaFailureIR,\n  failureFromUnknown,\n  messageFromUnknown,\n} from \"./failure.ts\";\nimport type { AthenaErrorDomain, AthenaErrorIR } from \"./ir.ts\";\nimport type { AthenaErrorKind } from \"./kinds.ts\";\nimport {\n  dataErrorDescriptor,\n  errorDescriptor,\n  errorDescriptorsForDomain,\n  storageErrorDescriptor,\n} from \"./registry.ts\";\n\nexport interface ClassifyAthenaErrorInput {\n  readonly domain: AthenaErrorDomain;\n  readonly failure: AthenaFailureIR | unknown;\n}\n\nexport function classifyAthenaError(\n  input: ClassifyAthenaErrorInput\n): AthenaErrorIR {\n  const failure = asFailure(input.failure);\n  const explicit = descriptorForFailure(input.domain, failure);\n  if (explicit) {\n    return explicit;\n  }\n\n  const descriptor = fallbackDescriptor(input.domain, failure);\n  return descriptor;\n}\n\nfunction descriptorForFailure(\n  domain: AthenaErrorDomain,\n  failure: AthenaFailureIR\n): AthenaErrorIR | undefined {\n  if (!failure.code) {\n    return;\n  }\n  const code = failure.code.toLowerCase();\n  if (domain === \"storage\" && code === \"storage_unavailable\") {\n    return storageErrorDescriptor(\"storage_provider_unavailable\");\n  }\n  return errorDescriptor(domain, code);\n}\n\nfunction fallbackDescriptor(\n  domain: AthenaErrorDomain,\n  failure: AthenaFailureIR\n): AthenaErrorIR {\n  if (domain === \"storage\") {\n    return storageFallbackDescriptor(failure);\n  }\n  if (domain === \"data\") {\n    return dataFallbackDescriptor(failure);\n  }\n  if (failure.status === 401 || failure.status === 403) {\n    return descriptorByKind(domain, \"authorization\");\n  }\n  if (failure.status === 404) {\n    return descriptorByKind(domain, \"not_found\");\n  }\n  if (failure.status === 503) {\n    return descriptorByKind(domain, \"unavailable\");\n  }\n  if (failure.status && failure.status >= 400 && failure.status < 500) {\n    return descriptorByKind(domain, \"validation\");\n  }\n  return descriptorByKind(domain, \"internal\");\n}\n\nfunction storageFallbackDescriptor(\n  failure: AthenaFailureIR\n): AthenaErrorIR<string, \"storage\"> {\n  const code = failure.code?.toLowerCase() ?? \"\";\n  const providerCode =\n    \"providerCode\" in failure ? (failure.providerCode ?? \"\") : \"\";\n  const combined =\n    `${code} ${providerCode} ${failure.message ?? \"\"}`.toLowerCase();\n  const status = failure.status;\n\n  if (\n    (status === 401 || status === 403) &&\n    !isProviderAuthenticationFailure(combined)\n  ) {\n    return storageErrorDescriptor(\n      \"storage_authorization_denied\"\n    ) as AthenaErrorIR<string, \"storage\">;\n  }\n  if (\n    combined.includes(\"accessdenied\") ||\n    combined.includes(\"access denied\") ||\n    combined.includes(\"forbidden\")\n  ) {\n    return storageErrorDescriptor(\n      \"storage_authorization_denied\"\n    ) as AthenaErrorIR<string, \"storage\">;\n  }\n  if (\n    status === 404 ||\n    combined.includes(\"nosuchkey\") ||\n    combined.includes(\"not found\") ||\n    combined.includes(\"enoent\")\n  ) {\n    return storageErrorDescriptor(\"storage_file_not_found\") as AthenaErrorIR<\n      string,\n      \"storage\"\n    >;\n  }\n  if (\n    status === 400 ||\n    combined.includes(\"invalidargument\") ||\n    combined.includes(\"invalid request\") ||\n    combined.includes(\"object key\")\n  ) {\n    return storageErrorDescriptor(\"storage_invalid_request\") as AthenaErrorIR<\n      string,\n      \"storage\"\n    >;\n  }\n  if (status === 503 || (failure.source === \"http\" && status === undefined)) {\n    return storageErrorDescriptor(\n      \"storage_provider_unavailable\"\n    ) as AthenaErrorIR<string, \"storage\">;\n  }\n  return storageErrorDescriptor(\"storage_internal\") as AthenaErrorIR<\n    string,\n    \"storage\"\n  >;\n}\n\nfunction dataFallbackDescriptor(\n  failure: AthenaFailureIR\n): AthenaErrorIR<string, \"data\"> {\n  const providerCode =\n    \"providerCode\" in failure ? failure.providerCode : undefined;\n  const details = failure.details;\n  const hint =\n    details && typeof details === \"object\" && !Array.isArray(details)\n      ? (details as { hint?: unknown }).hint\n      : undefined;\n  const code = dataErrorCodeForProviderFacts({\n    hint: typeof hint === \"string\" ? hint : undefined,\n    message: failure.message,\n    providerCode,\n    transportCode: failure.code,\n  });\n  const descriptor = dataErrorDescriptor(code);\n  if (!descriptor) {\n    throw new Error(`No Data Error IR descriptor is registered for ${code}`);\n  }\n  return descriptor;\n}\n\nfunction isProviderAuthenticationFailure(value: string): boolean {\n  return (\n    value.includes(\"invalid access key\") ||\n    value.includes(\"credential\") ||\n    value.includes(\"authentication\")\n  );\n}\n\nfunction descriptorByKind(\n  domain: AthenaErrorDomain,\n  kind: AthenaErrorKind\n): AthenaErrorIR {\n  const descriptor = errorDescriptorsForDomain(domain).find(\n    (candidate) => candidate.kind === kind\n  );\n  if (!descriptor) {\n    throw new Error(\n      `No ${kind} Error IR descriptor is registered for ${domain}`\n    );\n  }\n  return descriptor;\n}\n\nfunction asFailure(value: AthenaFailureIR | unknown): AthenaFailureIR {\n  if (isFailure(value)) {\n    return value;\n  }\n  return failureFromUnknown(\"runtime\", value);\n}\n\nfunction isFailure(value: unknown): value is AthenaFailureIR {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const source = (value as { source?: unknown }).source;\n  return source === \"http\" || source === \"provider\" || source === \"runtime\";\n}\n\nexport function errorKind(error: AthenaErrorIR): AthenaErrorKind {\n  return error.kind;\n}\n\nexport function errorMessage(failure: AthenaFailureIR | unknown): string {\n  return isFailure(failure)\n    ? (failure.message ?? \"Athena request failed\")\n    : messageFromUnknown(failure);\n}\n","import type { AthenaErrorIR } from \"./ir.ts\";\n\nexport interface AthenaErrorInstance<\n  Error extends AthenaErrorIR = AthenaErrorIR,\n> {\n  readonly cause?: unknown;\n  readonly details?: unknown;\n  readonly error: Error;\n  readonly message: string;\n}\n\nexport function createAthenaErrorInstance<Error extends AthenaErrorIR>(\n  error: Error,\n  input: {\n    readonly cause?: unknown;\n    readonly details?: unknown;\n    readonly message?: string;\n  } = {}\n): AthenaErrorInstance<Error> {\n  return Object.freeze({\n    cause: input.cause,\n    details: input.details,\n    error,\n    message: input.message ?? error.description,\n  });\n}\n\nexport interface AthenaErrorResult {\n  readonly error: {\n    readonly code: string;\n    readonly errorNumber: number;\n    readonly message: string;\n    readonly missing?: readonly string[];\n    readonly operation?: string;\n  };\n  readonly ok: false;\n  readonly status: number;\n}\n\nexport function athenaErrorResult(\n  instance: AthenaErrorInstance\n): AthenaErrorResult {\n  const envelope = authorizationEnvelopeFromDetails(instance.details);\n  return {\n    error: {\n      code: instance.error.code,\n      errorNumber: instance.error.errorNumber,\n      message: instance.message,\n      ...envelope,\n    },\n    ok: false,\n    status: instance.error.status,\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n\nfunction authorizationEnvelopeFromDetails(details: unknown): {\n  missing?: readonly string[];\n  operation?: string;\n} {\n  if (!isRecord(details)) {\n    return {};\n  }\n  const extra: {\n    missing?: readonly string[];\n    operation?: string;\n  } = {};\n  if (typeof details.operation === \"string\" && details.operation.length > 0) {\n    extra.operation = details.operation;\n  }\n  if (\n    Array.isArray(details.missing) &&\n    details.missing.length > 0 &&\n    details.missing.every((entry) => typeof entry === \"string\")\n  ) {\n    extra.missing = details.missing;\n  }\n  return extra;\n}\n","export {\n  classifyAthenaError,\n  errorKind,\n  errorMessage,\n} from \"./classifier.ts\";\nexport type {\n  AthenaFailureIR,\n  AthenaHttpFailureIR,\n  AthenaProviderFailureIR,\n  AthenaRuntimeFailureIR,\n} from \"./failure.ts\";\nexport {\n  failureFromUnknown,\n  messageFromUnknown,\n} from \"./failure.ts\";\nexport type {\n  AthenaErrorInstance,\n  AthenaErrorResult,\n} from \"./instance.ts\";\nexport {\n  athenaErrorResult,\n  createAthenaErrorInstance,\n} from \"./instance.ts\";\nexport type {\n  AthenaErrorDomain,\n  AthenaErrorIR,\n} from \"./ir.ts\";\nexport type { AthenaErrorKind } from \"./kinds.ts\";\nexport type { AthenaRetryDisposition } from \"./retry.ts\";\nexport { failureFromAthenaWire } from \"./wire.ts\";\n","import {\n  classifyAthenaError,\n  createAthenaErrorInstance,\n  failureFromUnknown,\n  type AthenaErrorInstance,\n  type AthenaErrorIR,\n  type AthenaProviderFailureIR,\n} from \"../runtime/error/index.ts\";\n\nexport type AthenaSqliteErrorCode =\n  | \"cancelled\"\n  | \"constraint\"\n  | \"relation-not-found\"\n  | \"syntax\"\n  | \"busy\"\n  | \"closed\"\n  | \"unknown-provider\"\n  | \"unsupported\"\n  | \"unknown\";\n\nconst MESSAGES: Record<AthenaSqliteErrorCode, string> = {\n  cancelled: \"SQLite Local operation was cancelled.\",\n  constraint: \"SQLite Local constraint failed.\",\n  \"relation-not-found\": \"SQLite Local table does not exist.\",\n  syntax: \"SQLite Local rejected the statement.\",\n  busy: \"SQLite Local database is busy.\",\n  closed: \"SQLite Local executor is closed.\",\n  \"unknown-provider\": \"SQLite Local provider failed.\",\n  unsupported: \"SQLite Local operation is unsupported.\",\n  unknown: \"SQLite Local operation failed.\",\n};\n\ntype SqliteDataError = AthenaErrorIR<string, \"data\">;\n\nfunction providerCodeFor(\n  code: AthenaSqliteErrorCode,\n  cause: unknown,\n): string {\n  if (cause && typeof cause === \"object\") {\n    const providerCode = (cause as { code?: unknown }).code;\n    if (typeof providerCode === \"string\" && providerCode.length > 0) {\n      return providerCode;\n    }\n  }\n  switch (code) {\n    case \"busy\":\n      return \"SQLITE_BUSY\";\n    case \"cancelled\":\n      return \"SQLITE_INTERRUPT\";\n    case \"constraint\":\n      return \"SQLITE_CONSTRAINT\";\n    default:\n      return \"SQLITE_ERROR\";\n  }\n}\n\nfunction canonicalInstance(\n  code: AthenaSqliteErrorCode,\n  cause: unknown,\n): AthenaErrorInstance<SqliteDataError> {\n  const occurrence =\n    cause ?? new Error(MESSAGES[code]);\n  const baseFailure = failureFromUnknown(\"provider\", occurrence);\n  const failure: AthenaProviderFailureIR = {\n    ...baseFailure,\n    provider: \"sqlite\",\n    providerCode: providerCodeFor(code, cause),\n    source: \"provider\",\n  };\n  const error = classifyAthenaError({\n    domain: \"data\",\n    failure,\n  }) as SqliteDataError;\n  return createAthenaErrorInstance(error, { cause: occurrence });\n}\n\nexport class SqliteLocalError\n  extends Error\n  implements AthenaErrorInstance<SqliteDataError>\n{\n  readonly code: AthenaSqliteErrorCode;\n  readonly error: SqliteDataError;\n  readonly cause?: unknown;\n  readonly details?: unknown;\n  readonly canonical: boolean;\n  readonly retryable: boolean;\n  readonly status: number;\n\n  constructor(\n    code: AthenaSqliteErrorCode,\n    cause?: unknown,\n    canonical = true,\n  ) {\n    const instance = canonicalInstance(code, cause);\n    super(canonical ? instance.message : MESSAGES[code]);\n    this.name = \"SqliteLocalError\";\n    this.code = code;\n    this.error = instance.error;\n    this.cause = cause;\n    this.details = instance.details;\n    this.canonical = canonical;\n    this.retryable = canonical\n      ? instance.error.retry === \"safe\"\n      : code === \"busy\";\n    this.status = canonical\n      ? instance.error.status\n      : code === \"busy\"\n        ? 503\n        : code === \"cancelled\"\n          ? 499\n          : 500;\n  }\n\n  toDetails(): {\n    code: string;\n    errorNumber?: number;\n    message: string;\n    status: number;\n    retryable: boolean;\n  } {\n    if (this.canonical) {\n      return {\n        code: this.error.code,\n        errorNumber: this.error.errorNumber,\n        message: this.message,\n        retryable: this.retryable,\n        status: this.status,\n      };\n    }\n    return {\n      code: `SQLITE_LOCAL_${this.code.toUpperCase()}`,\n      message: this.message,\n      retryable: this.retryable,\n      status: this.status,\n    };\n  }\n}\n\nfunction text(error: unknown): string {\n  if (!error || typeof error !== \"object\") return \"\";\n  const record = error as { code?: unknown; message?: unknown; name?: unknown };\n  return `${String(record.code ?? \"\")} ${String(record.name ?? \"\")} ${String(record.message ?? \"\")}`.toLowerCase();\n}\n\nexport function normalizeSqliteError(error: unknown): SqliteLocalError {\n  if (error instanceof SqliteLocalError) return error;\n  const value = text(error);\n  if (/abort|cancel|deadline|timeout|interrupt/.test(value)) {\n    return new SqliteLocalError(\"cancelled\", error);\n  }\n  if (/constraint|unique|foreign key|not null|check/.test(value)) {\n    return new SqliteLocalError(\"constraint\", error);\n  }\n  if (/no such table|table .* does not exist/.test(value)) {\n    return new SqliteLocalError(\"relation-not-found\", error);\n  }\n  if (/syntax|malformed|near .* syntax|no such column/.test(value)) {\n    return new SqliteLocalError(\"syntax\", error);\n  }\n  if (/busy|locked/.test(value)) return new SqliteLocalError(\"busy\", error);\n  if (/closed|finalized|disposed/.test(value)) {\n    return new SqliteLocalError(\"closed\", error);\n  }\n  if (/unsupported|not implemented/.test(value)) {\n    return new SqliteLocalError(\"unsupported\", error);\n  }\n  if (error && typeof error === \"object\" && \"provider\" in error) {\n    return new SqliteLocalError(\"unknown-provider\", error);\n  }\n  return new SqliteLocalError(\"unknown\", error);\n}\n","import type {\n  AthenaSqliteBindValue,\n  AthenaSqliteExecutionResult,\n  AthenaSqliteStorageValue,\n} from \"./contracts.ts\";\n\n/** Runtime-only normalization at the host executor boundary. */\nexport function normalizeSqliteBindValue(value: unknown): AthenaSqliteBindValue {\n  if (value === undefined) return null;\n  if (\n    value === null ||\n    typeof value === \"boolean\" ||\n    typeof value === \"number\" ||\n    typeof value === \"string\" ||\n    value instanceof Uint8Array\n  ) {\n    return value;\n  }\n  return JSON.stringify(value) ?? null;\n}\n\n/** Validate and normalize host rows without defining query semantics. */\nexport function normalizeSqliteExecutionResult(\n  result: AthenaSqliteExecutionResult,\n): AthenaSqliteExecutionResult {\n  if (\n    !Array.isArray(result.columns) ||\n    !Array.isArray(result.rows) ||\n    result.rows.some((row) => !Array.isArray(row))\n  ) {\n    throw new Error(\"SQLite executor returned an invalid result.\");\n  }\n  const columns = result.columns.map(String);\n  for (const [index, row] of result.rows.entries()) {\n    if (row.length !== columns.length) {\n      throw new Error(\n        `SQLite executor returned row width ${row.length} at row ${index}; expected ${columns.length} columns.`,\n      );\n    }\n  }\n  const rows = result.rows.map(\n    (row) =>\n      row.map((value: AthenaSqliteStorageValue) =>\n        value === undefined ? null : value,\n      ) as AthenaSqliteStorageValue[],\n  );\n  return {\n    columns,\n    rows,\n    ...(typeof result.changes === \"number\" && Number.isFinite(result.changes)\n      ? { changes: result.changes }\n      : {}),\n  };\n}\n","import { normalizeSqliteError } from \"../sqlite-local/errors.ts\";\nimport { normalizeSqliteExecutionResult } from \"../sqlite-local/binds.ts\";\nimport type { AthenaSqliteExecutor } from \"../sqlite-local/contracts.ts\";\nimport {\n  resolveMigrationExecution,\n} from \"./checksum.ts\";\nimport type { PhysicalCatalog } from \"./analysis/catalog.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport type {\n  AppliedMigration,\n  AppliedMigrationResult,\n  MigrationBackend,\n  MigrationFile,\n  MigrationRunSummary,\n} from \"./types.ts\";\nimport { MigrationError } from \"./types.ts\";\nimport { planHasBlockingConflicts, planMigrations } from \"./planner.ts\";\n\nconst LEDGER = \"athena_schema_migrations\";\n\nfunction rows(result: Awaited<ReturnType<AthenaSqliteExecutor[\"execute\"]>>): Record<string, unknown>[] {\n  const normalized = normalizeSqliteExecutionResult(result);\n  return normalized.rows.map((row) =>\n    Object.fromEntries(normalized.columns.map((column, index) => [column, row[index] ?? null])),\n  );\n}\n\nfunction mapRow(row: Record<string, unknown>): AppliedMigration {\n  return {\n    appliedAt: new Date(String(row.applied_at ?? 0)),\n    checksum: String(row.checksum ?? \"\"),\n    executionChecksum: typeof row.execution_checksum === \"string\" ? row.execution_checksum : undefined,\n    executionMs: Number(row.execution_ms ?? 0),\n    name: String(row.name ?? \"\"),\n    version: Number(row.version),\n  };\n}\n\nfunction isMissingLedgerError(error: unknown): boolean {\n  const message = error instanceof Error ? error.message : String(error);\n  return (\n    /no such table(?::\\s*(?:main\\.)?)?athena_schema_migrations/i.test(\n      message,\n    ) ||\n    /table [\"']?athena_schema_migrations[\"']? does not exist/i.test(message)\n  );\n}\n\nexport interface SqliteMigrationBackendOptions {\n  executor: AthenaSqliteExecutor;\n}\n\nexport class SqliteLocalMigrationBackend implements MigrationBackend {\n  readonly kind = \"sqlite-local\";\n  private locked = false;\n\n  constructor(private readonly options: SqliteMigrationBackendOptions) {}\n\n  private execute(sql: string, parameters: readonly unknown[] = []) {\n    return this.options.executor.execute(sql, parameters as never);\n  }\n\n  async acquireLock(): Promise<void> {\n    if (this.locked) {\n      throw new MigrationError(\"LOCK\", \"SQLite migration lock is already held.\");\n    }\n    await this.execute(\"BEGIN IMMEDIATE\");\n    this.locked = true;\n  }\n\n  async releaseLock(): Promise<void> {\n    if (!this.locked) return;\n    try {\n      await this.execute(\"COMMIT\");\n    } finally {\n      this.locked = false;\n    }\n  }\n\n  async ensureLedger(): Promise<void> {\n    try {\n      await this.execute(`\n        CREATE TABLE IF NOT EXISTS ${LEDGER} (\n          version INTEGER PRIMARY KEY,\n          name TEXT NOT NULL,\n          checksum TEXT NOT NULL,\n          applied_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n          execution_ms INTEGER NOT NULL,\n          execution_checksum TEXT\n        )\n      `);\n    } catch (error) {\n      throw new MigrationError(\"LEDGER\", \"Unable to create the SQLite migration ledger.\", {\n        cause: normalizeSqliteError(error),\n      });\n    }\n  }\n\n  async listAppliedMigrations(): Promise<AppliedMigration[]> {\n    try {\n      const result = await this.execute(\n        `SELECT version, name, checksum, applied_at, execution_ms, execution_checksum FROM ${LEDGER} ORDER BY version`,\n      );\n      return rows(result).map(mapRow);\n    } catch (error) {\n      if (isMissingLedgerError(error)) return [];\n      throw error;\n    }\n  }\n\n  async applyMigration(migration: MigrationFile): Promise<AppliedMigrationResult> {\n    assertMigrationSqlAllowsOuterTransaction(migration.sql, migration.filename);\n    const execution = resolveMigrationExecution(migration);\n    assertMigrationSqlAllowsOuterTransaction(execution.sql, migration.filename);\n    const started = Date.now();\n    try {\n      const apply = async (tx: {\n        execute: AthenaSqliteExecutor[\"execute\"];\n      }) => {\n        await tx.execute(execution.sql);\n        await tx.execute(\n          `INSERT INTO ${LEDGER} (version, name, checksum, execution_ms, execution_checksum) VALUES (?, ?, ?, ?, ?)`,\n          [\n            migration.version,\n            migration.name,\n            migration.checksum,\n            Math.max(0, Date.now() - started),\n            execution.checksum,\n          ],\n        );\n      };\n      if (this.locked) {\n        await apply({\n          execute: this.options.executor.execute.bind(this.options.executor),\n        });\n      } else {\n        await this.options.executor.transaction(apply);\n      }\n      return {\n        appliedAt: new Date(),\n        checksum: migration.checksum,\n        executionChecksum: execution.checksum,\n        executionMs: Math.max(0, Date.now() - started),\n        filename: migration.filename,\n        name: migration.name,\n        version: migration.version,\n      };\n    } catch (error) {\n      if (this.locked) {\n        try {\n          await this.execute(\"ROLLBACK\");\n        } finally {\n          this.locked = false;\n        }\n      }\n      throw new MigrationError(\"EXECUTION\", \"SQLite migration failed and was rolled back.\", {\n        cause: normalizeSqliteError(error),\n      });\n    }\n  }\n\n  async inspectCatalog(): Promise<PhysicalCatalog> {\n    return { objects: [], schema: {} as PhysicalCatalog[\"schema\"] };\n  }\n\n  async repairLedgerChecksum(version: number, checksum: string): Promise<void> {\n    await this.execute(`UPDATE ${LEDGER} SET checksum = ? WHERE version = ?`, [checksum, version]);\n  }\n\n  async insertReconciliation(): Promise<void> {\n    // SQLite Local intentionally keeps reconciliation in the generic coordinator;\n    // no second ledger is created for an adapter that has no catalog authority.\n  }\n\n  async close(): Promise<void> {\n    await this.releaseLock();\n  }\n}\n\nexport function createSqliteMigrationBackend(\n  options: SqliteMigrationBackendOptions,\n): MigrationBackend {\n  return new SqliteLocalMigrationBackend(options);\n}\n\n/**\n * Explicit SQLite migration entry point. It is intentionally not called by\n * createClient and has no provider fallback: the caller supplies both the\n * executor and authored SQLite migration files.\n */\nexport async function runSqliteMigrations(input: {\n  executor: AthenaSqliteExecutor;\n  migrations: readonly MigrationFile[];\n  dryRun?: boolean;\n}): Promise<MigrationRunSummary> {\n  const backend = new SqliteLocalMigrationBackend({ executor: input.executor });\n  const mode = input.dryRun ? \"dry-run\" : \"apply\";\n  try {\n    const newlyApplied: AppliedMigrationResult[] = [];\n    let plan: MigrationRunSummary[\"plan\"];\n    if (input.dryRun) {\n      const applied = await backend.listAppliedMigrations();\n      plan = planMigrations({ applied, local: [...input.migrations] });\n    } else {\n      await backend.acquireLock();\n      try {\n        await backend.ensureLedger();\n        const applied = await backend.listAppliedMigrations();\n        plan = planMigrations({ applied, local: [...input.migrations] });\n        if (planHasBlockingConflicts(plan)) {\n          throw new MigrationError(\n            \"HISTORY\",\n            \"SQLite migration history has conflicts.\",\n          );\n        }\n        for (const entry of plan.pending) {\n          newlyApplied.push(await backend.applyMigration(entry.migration));\n        }\n      } finally {\n        await backend.releaseLock();\n      }\n    }\n    return {\n      appliedCount: plan.applied.length,\n      conflicts: plan.conflicts,\n      databaseLabel: \"sqlite-local\",\n      directory: \"injected\",\n      dryRun: Boolean(input.dryRun),\n      failedCount: 0,\n      mode,\n      newlyApplied,\n      pendingCount: plan.pending.length - newlyApplied.length,\n      plan,\n      providerLabel: \"sqlite-local\",\n      skippedCount: 0,\n    };\n  } finally {\n    await backend.close();\n  }\n}\n","import type { MigrationConflict, MigrationPlan } from \"../types.ts\";\n\nexport function formatConflictBlock(plan: MigrationPlan): string {\n  const lines: string[] = [];\n  for (const conflict of plan.conflicts) {\n    lines.push(formatConflict(conflict));\n  }\n  return lines.join(\"\\n\\n\");\n}\n\nfunction formatConflict(conflict: MigrationConflict): string {\n  switch (conflict.kind) {\n    case \"checksum-mismatch\": {\n      const filename =\n        conflict.local?.filename ??\n        `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied?.name ?? \"unknown\"}.sql`;\n      return [\n        \"Migration integrity error\",\n        \"\",\n        `${filename} was already applied but its contents have changed.`,\n        \"\",\n        `  Stored    ${conflict.applied?.checksum ?? \"(missing)\"}`,\n        `  Current   ${conflict.local?.checksum ?? \"(missing local file)\"}`,\n        \"\",\n        \"Applied migrations are immutable.\",\n        \"Create a new forward migration instead of editing an applied file.\",\n      ].join(\"\\n\");\n    }\n    case \"missing-local\": {\n      const label = conflict.applied\n        ? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n        : String(conflict.version).padStart(4, \"0\");\n      return [\n        \"Migration history conflict\",\n        \"\",\n        `Database contains migration ${label}`,\n        \"but no matching local migration exists.\",\n        \"\",\n        \"Refusing to continue because this checkout is older than the database migration history.\",\n      ].join(\"\\n\");\n    }\n    case \"name-mismatch\":\n      return [\n        \"Migration identity changed\",\n        \"\",\n        `Version ${conflict.version} checksum matches, but the name changed.`,\n        \"\",\n        `  Ledger   ${conflict.applied?.name ?? \"(unknown)\"}`,\n        `  Local    ${conflict.local?.name ?? \"(unknown)\"}`,\n        \"\",\n        \"Do not rename applied migrations. Add a new forward migration instead.\",\n      ].join(\"\\n\");\n    case \"historical-insertion\":\n      return [\n        \"Historical migration insertion refused\",\n        \"\",\n        `${conflict.local?.filename ?? conflict.version} is a new local version`,\n        \"below an already-applied migration.\",\n        \"\",\n        \"Inserting migrations into published history is not allowed.\",\n        \"Use a version greater than the current ledger tip.\",\n      ].join(\"\\n\");\n    case \"duplicate-version\":\n      return [\n        \"Duplicate migration version\",\n        \"\",\n        `Version ${conflict.version} appears more than once in history.`,\n      ].join(\"\\n\");\n    default: {\n      const _exhaustive: never = conflict.kind;\n      return _exhaustive;\n    }\n  }\n}\n","import type {\n  AthenaAuthMigrationPlan,\n  AthenaAuthMigrationPlanEntry,\n} from \"../auth/local/schema.ts\";\nimport type {\n  MigrationDisplayStatus,\n  MigrationReportView,\n  MigrationRowView,\n} from \"../cli/ui/types.ts\";\nimport type { MigrationPlan, MigrationRunSummary } from \"./types.ts\";\n\nfunction authEntryStatus(\n  entry: AthenaAuthMigrationPlanEntry\n): MigrationDisplayStatus {\n  if (entry.schemaState === \"drift\") {\n    return \"drift\";\n  }\n  if (entry.ledgerState === \"checksum-mismatch\") {\n    return \"checksum-mismatch\";\n  }\n  if (entry.ledgerState === \"unknown\") {\n    return \"unknown\";\n  }\n  if (entry.ledgerState === \"absent\") {\n    return \"pending\";\n  }\n  return \"applied\";\n}\n\nfunction authEntryDetail(\n  entry: AthenaAuthMigrationPlanEntry\n): string | undefined {\n  if (entry.ledgerState === \"unknown\") {\n    return \"Database has this generation, but this CLI does not. Upgrade or rebuild @xylex-group/athena (workspace: pnpm build in packages/athena-js).\";\n  }\n  if (!entry.drift || entry.drift.length === 0) {\n    return;\n  }\n  return entry.drift\n    .map(\n      (item) => `Missing ${item.kind.replace(\"missing-\", \"\")}: ${item.object}`\n    )\n    .join(\"\\n\");\n}\n\nexport function applicationRowsFromPlan(\n  plan: MigrationPlan\n): MigrationRowView[] {\n  const rows: MigrationRowView[] = [];\n  for (const entry of plan.applied) {\n    rows.push({ name: entry.migration.filename, status: \"applied\" });\n  }\n  for (const conflict of plan.conflicts) {\n    if (conflict.kind === \"checksum-mismatch\") {\n      rows.push({\n        name:\n          conflict.local?.filename ??\n          `${String(conflict.version).padStart(4, \"0\")}_*.sql`,\n        status: \"checksum-mismatch\",\n      });\n    } else if (conflict.kind === \"name-mismatch\") {\n      rows.push({\n        name: conflict.local?.filename ?? String(conflict.version),\n        status: \"name-mismatch\",\n      });\n    } else if (conflict.kind === \"historical-insertion\") {\n      rows.push({\n        name: conflict.local?.filename ?? String(conflict.version),\n        status: \"historical-insertion\",\n      });\n    } else {\n      rows.push({\n        name: conflict.applied\n          ? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n          : String(conflict.version),\n        status: \"missing-local\",\n      });\n    }\n  }\n  for (const entry of plan.pending) {\n    rows.push({ name: entry.migration.filename, status: \"pending\" });\n  }\n  return rows;\n}\n\nexport function authRowsFromPlan(\n  plan: AthenaAuthMigrationPlan\n): MigrationRowView[] {\n  return plan.entries.map((entry) => ({\n    detail: authEntryDetail(entry),\n    name: entry.name,\n    status: authEntryStatus(entry),\n  }));\n}\n\nexport function buildMigrationReportView(input: {\n  summary: Pick<\n    MigrationRunSummary,\n    \"providerLabel\" | \"databaseLabel\" | \"directory\" | \"plan\" | \"mode\"\n  >;\n  authPlan?: AthenaAuthMigrationPlan;\n  modules?: MigrationReportView[\"modules\"];\n  outcome: string;\n  logPath?: string;\n  diagnostics?: MigrationReportView[\"diagnostics\"];\n}): MigrationReportView {\n  const applicationRows = applicationRowsFromPlan(input.summary.plan);\n  const authRows = input.authPlan ? authRowsFromPlan(input.authPlan) : [];\n\n  const appApplied = applicationRows.filter(\n    (r) => r.status === \"applied\"\n  ).length;\n  const appPending = applicationRows.filter(\n    (r) => r.status === \"pending\"\n  ).length;\n  const appConflicts = applicationRows.filter(\n    (r) =>\n      r.status === \"checksum-mismatch\" ||\n      r.status === \"missing-local\" ||\n      r.status === \"name-mismatch\" ||\n      r.status === \"historical-insertion\" ||\n      r.status === \"drift\" ||\n      r.status === \"failed\" ||\n      r.status === \"unknown\"\n  ).length;\n\n  const authApplied = authRows.filter((r) => r.status === \"applied\").length;\n  const authPending = authRows.filter((r) => r.status === \"pending\").length;\n  const authConflicts = authRows.filter(\n    (r) =>\n      r.status === \"drift\" ||\n      r.status === \"checksum-mismatch\" ||\n      r.status === \"failed\" ||\n      r.status === \"unknown\"\n  ).length;\n\n  return {\n    application: {\n      rows: applicationRows,\n      summary: `${appApplied} applied · ${appPending} pending · ${appConflicts} conflicts`,\n      title: \"Application\",\n    },\n    auth: {\n      rows: authRows,\n      summary:\n        authRows.length === 0\n          ? undefined\n          : `${authApplied} applied · ${authPending} pending · ${authConflicts} conflicts`,\n      title: \"Embedded Auth\",\n    },\n    diagnostics: input.diagnostics ?? [],\n    logPath: input.logPath,\n    modules: input.modules,\n    outcome: input.outcome,\n    target: {\n      database: input.summary.databaseLabel,\n      directory: input.summary.directory,\n      provider: input.summary.providerLabel,\n    },\n    title: \"Athena JS · migrations\",\n  };\n}\n","import type { AthenaAuthMigrationPlan } from \"../../auth/local/schema.ts\";\nimport type { AthenaCliUI } from \"../../cli/ui/index.ts\";\nimport { ATHENA_MIGRATE_STATUS_COMMAND } from \"../commands.ts\";\nimport { buildMigrationReportView } from \"../report.ts\";\nimport type { MigrationRunSummary } from \"../types.ts\";\n\nexport function unknownAuthLedgerDiagnostics(\n  authPlan: AthenaAuthMigrationPlan | undefined,\n  level: \"error\" | \"warn\" = \"warn\"\n): NonNullable<MigrationRunSummary[\"diagnostics\"]> {\n  if (!authPlan) {\n    return [];\n  }\n  const unknown = authPlan.entries.filter(\n    (entry) => entry.ledgerState === \"unknown\"\n  );\n  if (unknown.length === 0) {\n    return [];\n  }\n  return [\n    {\n      code: \"ATHENA_AUTH_LEDGER_UNKNOWN\",\n      hint: `Run the workspace CLI after building packages/athena-js (\\`pnpm exec ${ATHENA_MIGRATE_STATUS_COMMAND}\\`). A global or stale \\`athena-js\\` binary will treat newer generations as unknown.`,\n      level,\n      message: formatUnknownAuthLedgerError(authPlan),\n    },\n  ];\n}\n\nexport function formatUnknownAuthLedgerError(\n  authPlan: AthenaAuthMigrationPlan\n): string {\n  const unknown = authPlan.entries.filter(\n    (entry) => entry.ledgerState === \"unknown\"\n  );\n  return [\n    \"Embedded Auth ledger contains generation(s) this CLI does not know:\",\n    ...unknown.map(\n      (entry) => `  ${entry.name} (database version ${entry.version})`\n    ),\n    \"\",\n    \"CI verification (`migrate check` / `migrate drift`) fails closed until this CLI understands that history.\",\n  ].join(\"\\n\");\n}\n\nexport function hasUnknownAuthGenerations(\n  authPlan: AthenaAuthMigrationPlan | undefined\n): boolean {\n  return Boolean(\n    authPlan?.entries.some((entry) => entry.ledgerState === \"unknown\")\n  );\n}\n\nexport function renderReport(\n  ui: AthenaCliUI,\n  summary: Pick<\n    MigrationRunSummary,\n    \"providerLabel\" | \"databaseLabel\" | \"directory\" | \"plan\" | \"mode\"\n  >,\n  authPlan: AthenaAuthMigrationPlan | undefined,\n  outcome: string,\n  diagnostics: MigrationRunSummary[\"diagnostics\"] = [],\n  modules?: import(\"../../cli/ui/types.ts\").MigrationReportView[\"modules\"]\n): void {\n  const report = buildMigrationReportView({\n    authPlan,\n    diagnostics,\n    logPath: undefined,\n    modules,\n    outcome,\n    summary,\n  });\n  ui.renderMigrationReport(report);\n}\n","import { AthenaAuthRuntimeError } from \"../auth/local/errors.ts\";\nimport type { AthenaAuthMigrationPlan } from \"../auth/local/schema.ts\";\nimport { createAthenaPostgresRuntime } from \"../postgres/owned-runtime.ts\";\nimport {\n  ATHENA_MIGRATE_REPAIR_COMMAND,\n  ATHENA_MIGRATE_REPAIR_YES_COMMAND,\n} from \"./commands.ts\";\nimport { formatDiagnostic } from \"./analysis/diagnostics.ts\";\nimport {\n  explainMigration,\n  formatMigrationGraph,\n  formatPreflightFailure,\n} from \"./analysis/index.ts\";\nimport { fingerprintProjectedSchema } from \"./analysis/projected-schema.ts\";\nimport { applyApplicationMigrations } from \"./application/apply.ts\";\nimport {\n  assertDirectPostgres,\n  databaseLabel,\n  providerLabel,\n} from \"./application/authority.ts\";\nimport { prepareApplicationMigrationRun } from \"./application/prepare.ts\";\nimport { reconcileApplicationMigrations } from \"./application/reconcile.ts\";\nimport {\n  blockingSemantic,\n  compileApplicationSemantics,\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 { DEFAULT_MIGRATIONS_DIRECTORY, discoverMigrations } from \"./discovery.ts\";\nimport {\n  type EmbeddedModuleSection,\n  embeddedModuleHasConflicts,\n  embeddedModuleHasPending,\n  embeddedModuleNeedsAdoption,\n  formatEmbeddedModuleConflicts,\n  inspectEmbeddedModuleSections,\n} from \"./embedded-modules-inspect.ts\";\nimport {\n  formatManagedAuthDrift,\n  type ManagedAuthInspection,\n} from \"./managed-auth.ts\";\nimport { planHasBlockingConflicts, planMigrations } from \"./planner.ts\";\nimport { createPostgresMigrationBackend } from \"./postgres.ts\";\nimport { runSqliteMigrations } from \"./sqlite.ts\";\nimport { isHighAutoRepair } from \"./reconciliation/index.ts\";\nimport { formatConflictBlock } from \"./reporting/conflicts.ts\";\nimport {\n  formatUnknownAuthLedgerError,\n  hasUnknownAuthGenerations,\n  renderReport,\n  unknownAuthLedgerDiagnostics,\n} from \"./reporting/render.ts\";\nimport {\n  formatPlanProvenance,\n  formatSourceSafetyWarning,\n} from \"./source-control/index.ts\";\nimport {\n  type AppliedMigrationResult,\n  type MigrationCommandMode,\n  MigrationError,\n  type MigrationFile,\n  type MigrationPlan,\n  type MigrationRunSummary,\n  type RunMigrationsOptions,\n} from \"./types.ts\";\n\nfunction translateRunError(error: unknown): MigrationError {\n  if (error instanceof MigrationError) {\n    return error;\n  }\n  if (error instanceof AthenaAuthRuntimeError) {\n    return new MigrationError(\"EXECUTION\", error.publicMessage, {\n      cause: error,\n    });\n  }\n  return new MigrationError(\n    \"EXECUTION\",\n    error instanceof Error ? error.message : String(error),\n    { cause: error }\n  );\n}\n\nfunction labeledEmbeddedFailure(\n  failed: string,\n  notAttempted: readonly string[],\n  error: unknown\n): MigrationError {\n  const detail = error instanceof Error ? error.message : String(error);\n  return new MigrationError(\n    \"EXECUTION\",\n    [\n      failed,\n      `  ✗ ${detail}`,\n      ...notAttempted.flatMap((name) => [name, \"  - not attempted\"]),\n    ].join(\"\\n\"),\n    { cause: error }\n  );\n}\n\nasync function applyEmbeddedAuthPrerequisites(input: {\n  connectionString: string;\n  modules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n  options: RunMigrationsOptions;\n  ui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n  const { connectionString, modules, options, ui } = input;\n  try {\n    await applyEmbeddedAuthMigrations(options, connectionString, ui, modules);\n  } catch (error) {\n    throw labeledEmbeddedFailure(\n      \"Embedded Auth\",\n      [\"Embedded Chat\", \"Event Ingress\", \"Embedded Billing\"],\n      error\n    );\n  }\n  const packagedInspect = await inspectEmbeddedModuleSections({\n    connectionString,\n    modules,\n    postgresRuntime: options.postgresRuntime,\n  });\n  if (embeddedModuleHasConflicts(packagedInspect)) {\n    throw new MigrationError(\n      \"INTEGRITY\",\n      formatEmbeddedModuleConflicts(packagedInspect)\n    );\n  }\n}\n\nasync function applyEmbeddedDependents(input: {\n  connectionString: string;\n  modules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n  options: RunMigrationsOptions;\n  ui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n  const { connectionString, modules, options, ui } = input;\n  try {\n    await applyEmbeddedChatMigrations(options, connectionString, ui, modules);\n  } catch (error) {\n    throw labeledEmbeddedFailure(\n      \"Embedded Chat\",\n      [\"Event Ingress\", \"Embedded Billing\"],\n      error\n    );\n  }\n  try {\n    await applyEmbeddedEventIngressMigrations(\n      options,\n      connectionString,\n      ui,\n      modules\n    );\n  } catch (error) {\n    throw labeledEmbeddedFailure(\"Event Ingress\", [\"Embedded Billing\"], error);\n  }\n  try {\n    await applyEmbeddedBillingMigrations(\n      options,\n      connectionString,\n      ui,\n      modules\n    );\n  } catch (error) {\n    throw labeledEmbeddedFailure(\"Embedded Billing\", [], error);\n  }\n}\n\nasync function applyPackagedEmbeddedMigrations(input: {\n  connectionString: string;\n  modules: import(\"../generator/types.ts\").AthenaConfig[\"modules\"];\n  options: RunMigrationsOptions;\n  ui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): Promise<void> {\n  await applyEmbeddedAuthPrerequisites(input);\n  await 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 */\nasync function discoverSqliteMigrations(\n  options: RunMigrationsOptions,\n): Promise<MigrationFile[]> {\n  if (options.discover) {\n    return options.discover(DEFAULT_MIGRATIONS_DIRECTORY);\n  }\n  return discoverMigrations({\n    cwd: options.cwd ?? process.cwd(),\n    directory: DEFAULT_MIGRATIONS_DIRECTORY,\n  });\n}\n\nexport async function runMigrations(\n  options: RunMigrationsOptions = {}\n): Promise<MigrationRunSummary> {\n  if (options.sqliteExecutor) {\n    const migrations =\n      options.sqliteMigrations ??\n      (await discoverSqliteMigrations(options));\n    return runSqliteMigrations({\n      dryRun: options.dryRun,\n      executor: options.sqliteExecutor,\n      migrations,\n    });\n  }\n  const prepared = await prepareApplicationMigrationRun(options);\n  const {\n    cwd,\n    ui,\n    mode,\n    dryRun,\n    config,\n    directoryDisplay,\n    local,\n    sourceControl,\n    sourceSafety,\n    gitWorktree,\n    managedAuth,\n    mutating,\n  } = prepared;\n  let backend: MigrationBackend | undefined;\n  let connectionString = \"\";\n  const newlyApplied: AppliedMigrationResult[] = [];\n  let plan: MigrationPlan = { applied: [], conflicts: [], pending: [] };\n  let authPlan: AthenaAuthMigrationPlan | undefined;\n  let postgresRuntime = options.postgresRuntime;\n  const ownsMigrationRuntime = options.postgresRuntime === undefined;\n\n  try {\n    const pg = assertDirectPostgres(config);\n    connectionString = pg.connectionString;\n    postgresRuntime ??= createAthenaPostgresRuntime({\n      connectionString: pg.connectionString,\n    });\n    const optionsWithRuntime: RunMigrationsOptions = {\n      ...options,\n      postgresRuntime,\n    };\n    const applyPackaged = async (connection: string): Promise<void> => {\n      await applyPackagedEmbeddedMigrations({\n        connectionString: connection,\n        modules: config.modules,\n        options: optionsWithRuntime,\n        ui,\n      });\n    };\n    backend =\n      (await options.createBackend?.({\n        connectionString: pg.connectionString,\n        database: pg.database,\n        postgresRuntime,\n      })) ??\n      (await createPostgresMigrationBackend({\n        connectionString: pg.connectionString,\n        database: pg.database,\n        postgresRuntime,\n      }));\n\n    if (mutating) {\n      await backend.acquireLock();\n    }\n    if (mode === \"apply\" || mode === \"repair\") {\n      await backend.ensureLedger();\n    }\n    const applied = await backend.listAppliedMigrations();\n    plan = planMigrations({ applied, local });\n\n    const gitDiagnostics =\n      gitWorktree.dirty && !mutating\n        ? [\n            {\n              code: \"ATHENA-MIG-GIT-001\",\n              level: \"warn\" as const,\n              message: [\n                formatPlanProvenance(sourceControl),\n                \"\",\n                formatSourceSafetyWarning(sourceControl, sourceSafety),\n              ].join(\"\\n\"),\n            },\n          ]\n        : [];\n    if (gitDiagnostics[0]) {\n      ui.warn(gitDiagnostics[0].message);\n    }\n\n    const summaryBase = {\n      databaseLabel: databaseLabel(config),\n      directory: directoryDisplay,\n      dryRun,\n      gitWorktree,\n      mode,\n      plan,\n      providerLabel: providerLabel(config),\n      sourceControl,\n    };\n\n    if (mode === \"repair\") {\n      authPlan = await loadAuthPlan(options, connectionString, true);\n      const repairEntries =\n        authPlan?.entries.filter((entry) => entry.action === \"repair\") ?? [];\n      renderReport(\n        ui,\n        summaryBase,\n        authPlan,\n        repairEntries.length === 0\n          ? \"No Embedded Auth repairs required.\"\n          : `${repairEntries.length} migration(s) require repair`,\n        []\n      );\n\n      if (repairEntries.length === 0) {\n        return {\n          ...summaryBase,\n          appliedCount: plan.applied.length,\n          authPlan,\n          conflicts: plan.conflicts,\n          diagnostics: [],\n          failedCount: 0,\n          newlyApplied: [],\n          pendingCount: plan.pending.length,\n          skippedCount: 0,\n        };\n      }\n\n      if (!(options.yes || dryRun)) {\n        if (!ui.capabilities.isTty || ui.capabilities.mode !== \"interactive\") {\n          throw new MigrationError(\n            \"CONFIG\",\n            [\n              \"migrate repair requires confirmation.\",\n              \"\",\n              \"Re-run with --yes in CI/non-TTY environments:\",\n              \"\",\n              `  ${ATHENA_MIGRATE_REPAIR_YES_COMMAND}`,\n            ].join(\"\\n\")\n          );\n        }\n        const confirmed = await ui.confirm(\n          \"Repair drifted Embedded Auth schema now?\"\n        );\n        if (!confirmed) {\n          throw new MigrationError(\"CONFIG\", \"Repair cancelled.\");\n        }\n      }\n\n      await repairEmbeddedAuthMigrations(options, connectionString, dryRun);\n      authPlan = await loadAuthPlan(options, connectionString, true);\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: plan.conflicts,\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        skippedCount: dryRun ? repairEntries.length : 0,\n      };\n    }\n\n    const inspectAuth =\n      mode === \"status\" ||\n      mode === \"plan\" ||\n      mode === \"apply\" ||\n      mode === \"check\" ||\n      mode === \"drift\" ||\n      mode === \"verify\";\n    authPlan = await loadAuthPlan(options, connectionString, inspectAuth);\n\n    if (!backend) {\n      throw new MigrationError(\n        \"PROVIDER\",\n        \"Migration backend was not initialized.\"\n      );\n    }\n\n    const semantic = await compileApplicationSemantics({\n      authPlan,\n      backend,\n      cacheDir: cwd,\n      local,\n      modules: config.modules,\n      plan,\n      strict: options.strict,\n    });\n\n    if (mode === \"reconcile\") {\n      const reconciliation = await reconcileApplicationMigrations({\n        backend,\n        cwd,\n        directoryDisplay,\n        local,\n        options,\n        semantic,\n        ui,\n      });\n      const eligible = reconciliation.diagnoses.filter(isHighAutoRepair);\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: plan.conflicts,\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        reconciliation,\n        semantic,\n        skippedCount: options.applyReconcile ? 0 : eligible.length,\n      };\n    }\n\n    if (mode === \"graph\") {\n      ui.info(formatMigrationGraph(semantic.graph));\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: plan.conflicts,\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        semantic,\n        skippedCount: 0,\n      };\n    }\n\n    if (mode === \"explain\") {\n      const target = (options.explainTarget ?? \"\").trim();\n      const analysis = semantic.analyses.find(\n        (item) =>\n          item.filename === target ||\n          item.version === Number(target) ||\n          item.filename.startsWith(`${target}_`) ||\n          item.filename.includes(target)\n      );\n      if (!analysis) {\n        throw new MigrationError(\n          \"CONFIG\",\n          `Unknown migration to explain: ${target || \"(missing)\"}. Use a version or filename.`\n        );\n      }\n      ui.info(explainMigration(analysis, semantic.packagedProviders));\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: plan.conflicts,\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        semantic,\n        skippedCount: 0,\n      };\n    }\n\n    if (\n      mode === \"status\" ||\n      mode === \"plan\" ||\n      mode === \"check\" ||\n      mode === \"drift\" ||\n      mode === \"verify\"\n    ) {\n      const embeddedSections = await inspectEmbeddedModuleSections({\n        connectionString,\n        modules: config.modules,\n        postgresRuntime,\n      });\n      return inspectCombinedLedgers({\n        authPlan,\n        embeddedSections,\n        gitDiagnostics,\n        managedAuth,\n        mode,\n        plan,\n        semantic,\n        strict: Boolean(options.strict),\n        summaryBase,\n        ui,\n      });\n    }\n\n    if (planHasBlockingConflicts(plan)) {\n      renderReport(\n        ui,\n        summaryBase,\n        authPlan,\n        \"Application migration history has conflicts.\",\n        [{ level: \"error\", message: formatConflictBlock(plan) }]\n      );\n      throw new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n    }\n\n    if (blockingSemantic(semantic)) {\n      const message = formatPreflightFailure(semantic.diagnostics);\n      const reports = semantic.diagnostics\n        .filter(\n          (item) =>\n            item.classification !== \"dynamic_sql\" &&\n            item.classification !== \"unresolved_search_path\" &&\n            item.classification !== \"unverified\"\n        )\n        .map((item) => ({\n          code: item.code,\n          level: \"error\" as const,\n          message: item.message,\n        }));\n      renderReport(\n        ui,\n        summaryBase,\n        authPlan,\n        \"Migration preflight failed.\",\n        reports.length > 0\n          ? reports\n          : [{ code: \"ATHENA-MIG-PREFLIGHT\", level: \"error\", message }]\n      );\n      throw new MigrationError(\"SEMANTIC\", message);\n    }\n\n    if (mode === \"dry-run\") {\n      const outcome =\n        plan.pending.length === 0\n          ? \"No pending application migrations. No database changes were made.\"\n          : `${plan.pending.length} pending application migration(s). No database changes were made.`;\n      renderReport(ui, summaryBase, authPlan, outcome);\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: plan.conflicts,\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        semantic,\n        skippedCount: plan.pending.length,\n      };\n    }\n\n    if (authPlan?.hasBlockingDrift) {\n      const driftMessage = [\n        \"Embedded Auth schema drift detected\",\n        \"\",\n        ...authPlan.entries\n          .filter((entry) => entry.schemaState === \"drift\")\n          .flatMap((entry) => [\n            entry.name,\n            \"\",\n            ...(entry.drift ?? []).map(\n              (item) =>\n                `  Missing ${item.kind.replace(\"missing-\", \"\")}: ${item.object}`\n            ),\n            \"\",\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_MIGRATE_REPAIR_COMMAND}`,\n      ].join(\"\\n\");\n      renderReport(ui, summaryBase, authPlan, \"Embedded Auth schema drift.\", [\n        {\n          code: \"ATHENA_AUTH_SCHEMA_DRIFT\",\n          level: \"error\",\n          message: driftMessage,\n        },\n      ]);\n      throw new MigrationError(\"HISTORY\", driftMessage);\n    }\n\n    if (local.length === 0 && plan.pending.length === 0) {\n      ui.info(`No application SQL files in ${directoryDisplay}.`);\n      await applyPackaged(connectionString);\n      authPlan = await loadAuthPlan(options, connectionString, true);\n      const embeddedSections = await inspectEmbeddedModuleSections({\n        connectionString,\n        modules: config.modules,\n        postgresRuntime,\n      });\n      renderReport(\n        ui,\n        summaryBase,\n        authPlan,\n        `No application SQL files in ${directoryDisplay}. Packaged ledgers listed above.`,\n        [],\n        embeddedSections.map((section) => section.section)\n      );\n      return {\n        ...summaryBase,\n        appliedCount: 0,\n        authPlan,\n        conflicts: [],\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: 0,\n        skippedCount: 0,\n      };\n    }\n\n    for (const entry of plan.applied) {\n      ui.info(`✓ ${entry.migration.filename} already applied`);\n    }\n\n    if (plan.pending.length === 0) {\n      ui.info(\"Application migrations are up to date.\");\n      await applyPackaged(connectionString);\n      authPlan = await loadAuthPlan(options, connectionString, true);\n      const embeddedSections = await inspectEmbeddedModuleSections({\n        connectionString,\n        modules: config.modules,\n        postgresRuntime,\n      });\n      renderReport(\n        ui,\n        summaryBase,\n        authPlan,\n        `${plan.applied.length} application migrations current.`,\n        [],\n        embeddedSections.map((section) => section.section)\n      );\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        authPlan,\n        conflicts: [],\n        diagnostics: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: 0,\n        skippedCount: 0,\n      };\n    }\n\n    const catalogFingerprint = fingerprintProjectedSchema(semantic.physical);\n    const recatalog = await backend.inspectCatalog();\n    if (fingerprintProjectedSchema(recatalog.schema) !== catalogFingerprint) {\n      throw new MigrationError(\n        \"SEMANTIC\",\n        \"Physical catalog changed after preflight; re-run migrate.\"\n      );\n    }\n\n    await applyEmbeddedAuthPrerequisites({\n      connectionString,\n      modules: config.modules,\n      options,\n      ui,\n    });\n    newlyApplied.push(\n      ...(await applyApplicationMigrations(backend, plan.pending, ui))\n    );\n    await applyEmbeddedDependents({\n      connectionString,\n      modules: config.modules,\n      options,\n      ui,\n    });\n    authPlan = await loadAuthPlan(options, connectionString, true);\n    const embeddedSections = await inspectEmbeddedModuleSections({\n      connectionString,\n      modules: config.modules,\n      postgresRuntime,\n    });\n\n    const outcome = `${newlyApplied.length} migration(s) applied`;\n    renderReport(\n      ui,\n      summaryBase,\n      authPlan,\n      outcome,\n      [],\n      embeddedSections.map((section) => section.section)\n    );\n\n    return {\n      ...summaryBase,\n      appliedCount: plan.applied.length + newlyApplied.length,\n      authPlan,\n      conflicts: [],\n      diagnostics: [],\n      failedCount: 0,\n      newlyApplied,\n      pendingCount: 0,\n      skippedCount: 0,\n    };\n  } catch (error) {\n    throw translateRunError(error);\n  } finally {\n    if (backend) {\n      await backend.close();\n    }\n    if (ownsMigrationRuntime && postgresRuntime) {\n      await postgresRuntime.close();\n    }\n  }\n}\n\nfunction managedAuthDiagnostics(\n  managedAuth: ManagedAuthInspection,\n  level: \"warn\" | \"error\"\n): NonNullable<MigrationRunSummary[\"diagnostics\"]> {\n  if (!managedAuth.drifted) {\n    return [];\n  }\n  return [\n    {\n      code: \"ATHENA-MIG-AUTH-MANAGED-001\",\n      level,\n      message: formatManagedAuthDrift(managedAuth),\n    },\n  ];\n}\n\nfunction describeCombinedLedgerStatus(input: {\n  authPlan: AthenaAuthMigrationPlan | undefined;\n  embeddedAdopt: boolean;\n  embeddedConflicts: boolean;\n  embeddedPending: boolean;\n  plan: MigrationPlan;\n  semanticBlocked: boolean;\n  unknownAuth: boolean;\n}): string {\n  if (planHasBlockingConflicts(input.plan)) {\n    return \"Application migration history has conflicts.\";\n  }\n  if (input.semanticBlocked) {\n    return \"Application schema drift / unsatisfied dependencies.\";\n  }\n  if (input.authPlan?.hasBlockingDrift) {\n    return \"Embedded Auth schema drift detected.\";\n  }\n  if (input.unknownAuth || (input.authPlan?.conflictCount ?? 0) > 0) {\n    return \"Embedded Auth ledger has unknown or conflicting generations.\";\n  }\n  if (input.embeddedConflicts) {\n    return \"Packaged module ledger checksum mismatch.\";\n  }\n  if (input.embeddedAdopt) {\n    return \"Packaged module ledger reconciliation required.\";\n  }\n  const applicationIdle = input.plan.pending.length === 0;\n  const authIdle = (input.authPlan?.pendingCount ?? 0) === 0;\n  if (applicationIdle && authIdle && !input.embeddedPending) {\n    return \"Database is up to date.\";\n  }\n  return \"Pending migrations remain.\";\n}\n\nfunction inspectCombinedLedgers(input: {\n  authPlan: AthenaAuthMigrationPlan | undefined;\n  embeddedSections: readonly EmbeddedModuleSection[];\n  gitDiagnostics: NonNullable<MigrationRunSummary[\"diagnostics\"]>;\n  managedAuth: ManagedAuthInspection;\n  mode: Extract<\n    MigrationCommandMode,\n    \"status\" | \"plan\" | \"check\" | \"drift\" | \"verify\"\n  >;\n  plan: MigrationPlan;\n  semantic: NonNullable<MigrationRunSummary[\"semantic\"]>;\n  strict: boolean;\n  summaryBase: Pick<\n    MigrationRunSummary,\n    | \"providerLabel\"\n    | \"databaseLabel\"\n    | \"directory\"\n    | \"plan\"\n    | \"mode\"\n    | \"dryRun\"\n    | \"gitWorktree\"\n    | \"sourceControl\"\n  >;\n  ui: import(\"../cli/ui/types.ts\").AthenaCliUI;\n}): MigrationRunSummary {\n  const {\n    authPlan,\n    embeddedSections,\n    gitDiagnostics,\n    managedAuth,\n    mode,\n    plan,\n    semantic,\n    strict,\n    summaryBase,\n    ui,\n  } = input;\n  const semanticBlocked = blockingSemantic(semantic);\n  const unknownAuth = hasUnknownAuthGenerations(authPlan);\n  const embeddedConflicts = embeddedModuleHasConflicts(embeddedSections);\n  const embeddedPending = embeddedModuleHasPending(embeddedSections);\n  const embeddedAdopt = embeddedModuleNeedsAdoption(embeddedSections);\n  const moduleViews = embeddedSections.map((section) => section.section);\n\n  const outcome = describeCombinedLedgerStatus({\n    authPlan,\n    embeddedAdopt,\n    embeddedConflicts,\n    embeddedPending,\n    plan,\n    semanticBlocked,\n    unknownAuth,\n  });\n\n  const semanticDiagnostics = semantic.diagnostics.map((item) => ({\n    code: item.code,\n    level: \"error\" as const,\n    message: formatDiagnostic(item),\n  }));\n  const verification =\n    mode === \"check\" || mode === \"drift\" || mode === \"verify\";\n  const managedLevel =\n    strict && (mode === \"check\" || mode === \"verify\") ? \"error\" : \"warn\";\n  const combinedDiagnostics = [\n    ...gitDiagnostics,\n    ...semanticDiagnostics,\n    ...unknownAuthLedgerDiagnostics(authPlan, verification ? \"error\" : \"warn\"),\n    ...managedAuthDiagnostics(managedAuth, managedLevel),\n  ];\n\n  if (mode === \"plan\" || mode === \"check\" || mode === \"drift\") {\n    ui.info(formatMigrationGraph(semantic.graph));\n  }\n\n  renderReport(\n    ui,\n    summaryBase,\n    authPlan,\n    outcome,\n    combinedDiagnostics,\n    moduleViews\n  );\n\n  if (planHasBlockingConflicts(plan)) {\n    throw new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n  }\n  if (\n    semanticBlocked &&\n    (mode === \"check\" || mode === \"drift\" || mode === \"plan\")\n  ) {\n    throw new MigrationError(\n      \"SEMANTIC\",\n      formatPreflightFailure(semantic.diagnostics)\n    );\n  }\n  if (verification && unknownAuth && authPlan) {\n    throw new MigrationError(\"HISTORY\", formatUnknownAuthLedgerError(authPlan));\n  }\n  if (verification && embeddedConflicts) {\n    throw new MigrationError(\n      \"INTEGRITY\",\n      \"Packaged module ledger checksum mismatch.\"\n    );\n  }\n  if (verification && embeddedAdopt) {\n    throw new MigrationError(\n      \"INTEGRITY\",\n      \"Packaged module ledger reconciliation required.\"\n    );\n  }\n  if (managedLevel === \"error\" && managedAuth.drifted) {\n    throw new MigrationError(\"INTEGRITY\", formatManagedAuthDrift(managedAuth));\n  }\n\n  return {\n    ...summaryBase,\n    appliedCount: plan.applied.length,\n    authPlan,\n    conflicts: plan.conflicts,\n    diagnostics: combinedDiagnostics,\n    embedded: embeddedSections,\n    failedCount: semanticBlocked ? 1 : 0,\n    newlyApplied: [],\n    pendingCount: plan.pending.length,\n    semantic,\n    skippedCount: 0,\n  };\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n  isDisabledAthenaAuthConfig,\n  isLocalAthenaAuthConfig,\n} from \"../config.ts\";\n\nexport function assertLocalAuthHooks(auth: unknown): void {\n  if (!auth || typeof auth !== \"object\") {\n    return;\n  }\n  const raw = auth as Record<string, unknown>;\n  if (!(\"hooks\" in raw) || raw.hooks === undefined) {\n    return;\n  }\n  if (isDisabledAthenaAuthConfig(auth) || !isLocalAthenaAuthConfig(auth)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_AUTH_HOOKS_REQUIRE_LOCAL_RUNTIME\",\n      'auth.hooks is an embedded-auth capability. Set auth.mode to \"local\" or omit hooks for remote Auth.',\n      \"auth\"\n    );\n  }\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  \"ATHENA_AUTH_UPSTREAM_URL\",\n  \"ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\n\n/**\n * Auth UI naming parity (`base-url.ts`).\n * Same ordered list as {@link ATHENA_AUTH_UPSTREAM_ENV_KEYS}.\n */\nexport const ATHENA_AUTH_UPSTREAM_URL_ENV_NAMES = ATHENA_AUTH_UPSTREAM_ENV_KEYS;\n\nexport type AthenaAuthUpstreamEnvKey =\n  (typeof ATHENA_AUTH_UPSTREAM_ENV_KEYS)[number];\n\n/** Loose env map (Node `process.env` or a test fixture). */\nexport type EnvLike = Record<string, string | undefined>;\n\nexport type AthenaAuthUpstreamEnv = Partial<\n  Record<AthenaAuthUpstreamEnvKey, string | undefined>\n> &\n  EnvLike;\n\nexport interface AthenaAuthClientBaseUrlOptions {\n  /**\n   * When `true` (default), ensure the client base ends with `/api/auth`.\n   * Set `false` when the auth server is mounted at a custom path or root.\n   */\n  appendAuthPath?: boolean;\n}\n\nconst LEADING_SLASHES_REGEX = /^\\/+/;\n\nfunction stripTrailingSlashes(value: string): string {\n  return value.replace(/\\/+$/g, \"\");\n}\n\nfunction ensureLeadingSlash(value: string): string {\n  return value.startsWith(\"/\") ? value : `/${value}`;\n}\n\nfunction ensureAthenaAuthPath(pathname: string): string {\n  const normalizedPath = stripTrailingSlashes(\n    ensureLeadingSlash(pathname.trim())\n  );\n\n  if (!normalizedPath || normalizedPath === \"/\") {\n    return ATHENA_AUTH_PATH;\n  }\n\n  if (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n    return normalizedPath;\n  }\n\n  return `${normalizedPath}${ATHENA_AUTH_PATH}`;\n}\n\nfunction stripAthenaAuthPath(pathname: string): string {\n  const normalizedPath = stripTrailingSlashes(\n    ensureLeadingSlash(pathname.trim())\n  );\n\n  if (!normalizedPath || normalizedPath === \"/\") {\n    return \"/\";\n  }\n\n  if (normalizedPath === ATHENA_AUTH_PATH) {\n    return \"/\";\n  }\n\n  if (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n    const withoutAuthPath = normalizedPath.slice(0, -ATHENA_AUTH_PATH.length);\n    return withoutAuthPath ? ensureLeadingSlash(withoutAuthPath) : \"/\";\n  }\n\n  return normalizedPath;\n}\n\nfunction readProcessEnv(): EnvLike | undefined {\n  try {\n    const maybeProcess = (globalThis as { process?: { env?: EnvLike } })\n      .process;\n    return maybeProcess?.env;\n  } catch {\n    // Restricted runtimes may throw when reading process.\n  }\n}\n\nfunction getBrowserOrigin(): string | undefined {\n  try {\n    const origin = (\n      globalThis as { window?: { location?: { origin?: string } } }\n    ).window?.location?.origin;\n    return typeof origin === \"string\" && origin.length > 0 ? origin : undefined;\n  } catch {\n    // Non-browser or restricted runtimes may throw on window access.\n  }\n}\n\n/**\n * Returns `true` when the value is an absolute `http://` or `https://` URL.\n */\nexport function isAbsoluteUrl(value: string): boolean {\n  const trimmed = value.trim();\n  return trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\");\n}\n\n/**\n * Read the first non-empty Athena Auth upstream URL from an env-like map.\n *\n * @returns Trimmed URL string, or `undefined` when none of the keys are set\n */\nexport function readAthenaAuthUpstreamUrlFromEnv(\n  env: EnvLike\n): string | undefined {\n  for (const key of ATHENA_AUTH_UPSTREAM_ENV_KEYS) {\n    const value = env[key]?.trim();\n    if (value) {\n      return value;\n    }\n  }\n}\n\nfunction resolveConfiguredAthenaAuthUpstreamUrl(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv\n): string | undefined {\n  if (typeof rawUpstreamUrl === \"string\") {\n    const trimmed = rawUpstreamUrl.trim();\n    return trimmed || undefined;\n  }\n\n  if (rawUpstreamUrl) {\n    return readAthenaAuthUpstreamUrlFromEnv(rawUpstreamUrl);\n  }\n\n  const processEnv = readProcessEnv();\n  return processEnv ? readAthenaAuthUpstreamUrlFromEnv(processEnv) : undefined;\n}\n\n/**\n * Normalize a consumer-supplied auth base URL so it targets `/api/auth`\n * (unless the path already ends with that segment).\n *\n * Absolute URLs keep origin and rewrite pathname; relative paths are ensured\n * to end with `/api/auth`.\n *\n * @example\n * ```ts\n * normalizeAthenaAuthBaseUrl('https://auth.example.com')\n * // => 'https://auth.example.com/api/auth'\n *\n * normalizeAthenaAuthBaseUrl('/api/auth')\n * // => '/api/auth'\n * ```\n */\nexport function normalizeAthenaAuthBaseUrl(urlOrPath: string): string {\n  const trimmed = urlOrPath.trim();\n\n  if (!trimmed) {\n    return ATHENA_AUTH_PATH;\n  }\n\n  if (isAbsoluteUrl(trimmed)) {\n    const url = new URL(trimmed);\n    url.pathname = ensureAthenaAuthPath(url.pathname);\n    url.search = \"\";\n    url.hash = \"\";\n    return stripTrailingSlashes(url.toString());\n  }\n\n  return ensureAthenaAuthPath(trimmed);\n}\n\n/**\n * Resolve the **server-side** Athena Auth upstream origin (no `/api/auth` suffix).\n *\n * Used when proxying or calling the auth host directly from Node / edge.\n *\n * @param rawUpstreamUrl - Explicit URL, env map, or omit to read `process.env`\n * @returns Origin like `https://auth.example.com` (no trailing slash)\n */\nexport function resolveAthenaAuthUpstreamUrl(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv\n): string {\n  const configuredUpstream =\n    resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl) ||\n    DEFAULT_ATHENA_AUTH_ORIGIN;\n\n  if (isAbsoluteUrl(configuredUpstream)) {\n    const upstreamUrl = new URL(configuredUpstream);\n    upstreamUrl.pathname = stripAthenaAuthPath(upstreamUrl.pathname);\n    upstreamUrl.search = \"\";\n    upstreamUrl.hash = \"\";\n    return stripTrailingSlashes(upstreamUrl.toString());\n  }\n\n  const normalizedPath = stripAthenaAuthPath(configuredUpstream);\n  return stripTrailingSlashes(\n    new URL(normalizedPath, LOCAL_DEV_ORIGIN).toString()\n  );\n}\n\nfunction resolveBrowserFacingOrigin(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv\n): string {\n  if (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n    return `${resolveAthenaAuthUpstreamUrl(rawUpstreamUrl)}/`;\n  }\n\n  const browserOrigin = getBrowserOrigin();\n  if (browserOrigin) {\n    return `${browserOrigin}/`;\n  }\n\n  return `${LOCAL_DEV_ORIGIN}/`;\n}\n\nfunction resolvePreservedAthenaAuthBaseUrl(\n  configuredAuthBaseUrl: string,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv\n): string {\n  const trimmed = configuredAuthBaseUrl.trim();\n  const preservedConfiguredBaseUrl = trimmed || ATHENA_AUTH_PATH;\n\n  if (isAbsoluteUrl(preservedConfiguredBaseUrl)) {\n    return stripTrailingSlashes(preservedConfiguredBaseUrl);\n  }\n\n  return stripTrailingSlashes(\n    new URL(\n      ensureLeadingSlash(preservedConfiguredBaseUrl),\n      resolveBrowserFacingOrigin(rawUpstreamUrl)\n    ).toString()\n  );\n}\n\n/**\n * Resolve the **browser-facing** auth client base URL.\n *\n * Default behavior appends `/api/auth` for same-origin proxying. Pass\n * `{ appendAuthPath: false }` to keep a custom path or root mount.\n *\n * Overloads match common call styles from Athena Auth UI and app code:\n * - `resolveAthenaAuthClientBaseUrl(\"https://auth.example.com\")`\n * - `resolveAthenaAuthClientBaseUrl(process.env)`\n * - `resolveAthenaAuthClientBaseUrl(undefined)` → env + defaults\n * - `resolveAthenaAuthClientBaseUrl(path, upstream, { appendAuthPath: false })`\n */\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl?: string | EnvLike,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options?: AthenaAuthClientBaseUrlOptions\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl: string,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options?: AthenaAuthClientBaseUrlOptions\n): string;\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl?: string | EnvLike,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options: AthenaAuthClientBaseUrlOptions = {}\n): string {\n  let baseInput: string;\n\n  if (typeof configuredAuthBaseUrl === \"string\") {\n    baseInput = configuredAuthBaseUrl;\n  } else if (configuredAuthBaseUrl) {\n    baseInput =\n      readAthenaAuthUpstreamUrlFromEnv(configuredAuthBaseUrl) ??\n      ATHENA_AUTH_PATH;\n  } else {\n    const fromEnv = resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl);\n    baseInput = fromEnv ?? ATHENA_AUTH_PATH;\n  }\n\n  if (options.appendAuthPath === false) {\n    return resolvePreservedAthenaAuthBaseUrl(baseInput, rawUpstreamUrl);\n  }\n\n  const normalizedConfiguredBaseUrl = normalizeAthenaAuthBaseUrl(baseInput);\n\n  if (isAbsoluteUrl(normalizedConfiguredBaseUrl)) {\n    return normalizedConfiguredBaseUrl;\n  }\n\n  const browserOrigin = getBrowserOrigin();\n  if (browserOrigin) {\n    return stripTrailingSlashes(\n      new URL(normalizedConfiguredBaseUrl, browserOrigin).toString()\n    );\n  }\n\n  if (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n    // Direct upstream without proxy path: origin only (no /api/auth) when\n    // the configured base was relative — server-side absolute upstream.\n    const upstream = resolveAthenaAuthUpstreamUrl(rawUpstreamUrl);\n    return stripTrailingSlashes(\n      new URL(ATHENA_AUTH_PATH, `${upstream}/`).toString()\n    );\n  }\n\n  return stripTrailingSlashes(\n    new URL(normalizedConfiguredBaseUrl, LOCAL_DEV_ORIGIN).toString()\n  );\n}\n\n/**\n * Build an absolute Athena Auth request URL for a path under the client base.\n *\n * Resolves at **call time** (reads env when `rawBaseUrl` is omitted) so module\n * load order does not freeze a stale URL.\n *\n * @param path - Path relative to the auth base (leading slashes stripped)\n * @param rawBaseUrl - Optional base string or env map\n *\n * @example\n * ```ts\n * resolveAthenaAuthRequestUrl('get-session', 'https://auth.example.com')\n * // => 'https://auth.example.com/api/auth/get-session'\n * ```\n */\nexport function resolveAthenaAuthRequestUrl(\n  path: string,\n  rawBaseUrl?: string | EnvLike\n): string {\n  const normalizedPath = path.replace(LEADING_SLASHES_REGEX, \"\");\n  const base = resolveAthenaAuthClientBaseUrl(rawBaseUrl);\n  return new URL(normalizedPath, `${base}/`).toString();\n}\n\n/** Relative auth path for email verification (`GET /verify-email`). */\nexport const ATHENA_AUTH_VERIFY_EMAIL_PATH = \"verify-email\";\n\n/**\n * Relative segment for session lookup (`GET /get-session`).\n * Prefer with {@link resolveAthenaAuthRequestUrl} when `base` already ends in `/api/auth`.\n */\nexport const ATHENA_AUTH_GET_SESSION_PATH = \"get-session\";\n\n/**\n * Absolute app/proxy path for session lookup.\n * Use with `new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, appOrigin)` when\n * `baseUrl` is the **app origin** (e.g. `https://app.example.com`), not the auth client base.\n */\nexport const ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH = `${ATHENA_AUTH_PATH}/get-session`;\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH} for drop-in\n * replacement of app-local `AUTH_SESSION_PATH` constants. Prefer the `ATHENA_` name.\n */\nexport const AUTH_SESSION_PATH = ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH;\n\n/**\n * Query param that forces Athena Auth / Better Auth style session handlers to\n * skip cookie cache and re-read the live session cookie.\n */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM =\n  \"disableCookieCache\";\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_PARAM =\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM;\n\n/** Value paired with {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}. */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE = \"true\";\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_VALUE =\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE;\n\n/**\n * Optional request/response header some apps use to pass serialized session\n * payload between edge middleware and the app (not set by the SDK itself).\n */\nexport const ATHENA_SESSION_DATA_HEADER = \"x-session-data\";\n\n/**\n * @deprecated Alias of {@link ATHENA_SESSION_DATA_HEADER}.\n */\nexport const SESSION_DATA_HEADER = ATHENA_SESSION_DATA_HEADER;\n\n/**\n * Absolute callback URL for email verification.\n *\n * Equivalent to `resolveAthenaAuthRequestUrl(\"verify-email\")` — use this in\n * sign-up / send-verification payloads as `callbackURL` instead of a local\n * wrapper around Auth UI `base-url` helpers.\n *\n * @param rawBaseUrl - Optional base string or env map (defaults to process env)\n * @returns e.g. `https://auth.example.com/api/auth/verify-email`\n *\n * @example\n * ```ts\n * import { resolveEmailVerificationCallbackUrl } from \"@xylex-group/athena/utils\"\n *\n * await client.auth.signUp.email({\n *   email,\n *   password,\n *   name,\n *   callbackURL: resolveEmailVerificationCallbackUrl(),\n * })\n * ```\n */\nexport function resolveEmailVerificationCallbackUrl(\n  rawBaseUrl?: string | EnvLike\n): string {\n  return resolveAthenaAuthRequestUrl(ATHENA_AUTH_VERIFY_EMAIL_PATH, rawBaseUrl);\n}\n\n/**\n * Build a same-origin (or absolute) **fresh** get-session URL.\n *\n * Appends `disableCookieCache=true` so middleware / RSC session probes do not\n * reuse a stale cookie-cache entry.\n *\n * @param baseUrl - App origin (`https://app.example.com`) or any base accepted by\n *   the `URL` constructor. Resolves {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH}\n *   (`/api/auth/get-session`) against that base.\n * @returns URL such as `https://app.example.com/api/auth/get-session?disableCookieCache=true`\n *\n * @example\n * ```ts\n * import { createFreshSessionLookupUrl } from \"@xylex-group/athena/utils\"\n *\n * const url = createFreshSessionLookupUrl(\"https://app.example.com\")\n * await fetch(url, { headers: { cookie: requestHeaders.get(\"cookie\") ?? \"\" } })\n * ```\n *\n * For auth-client base URLs that already include `/api/auth`, prefer:\n * `resolveAthenaAuthRequestUrl(\"get-session\", authBase) + \"?disableCookieCache=true\"`\n * or pass the **app** origin into this helper when you proxy `/api/auth/*` locally.\n */\nexport function createFreshSessionLookupUrl(baseUrl: string | URL): URL {\n  const url = new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, baseUrl);\n  url.searchParams.set(\n    ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n    ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE\n  );\n  return url;\n}\n","/**\n * 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  /** Browser auth module base (e.g. `/api/auth` or absolute direct host). */\n  browserRequestBaseUrl: string;\n  credentials: AthenaAuthCredentials;\n  mode: AthenaAuthRoutingMode;\n  /** Upstream origin for the same-origin proxy (no trailing slash). */\n  proxyUpstreamBaseUrl?: string;\n  /** Absolute app-origin auth base when request origin is known. */\n  serverRequestBaseUrl?: string;\n  warnings: string[];\n}\n\nexport interface ResolveAthenaAuthRoutingInput {\n  credentials?: AthenaAuthCredentials;\n  /** Emit console warnings for deprecations (default: non-production). */\n  emitWarnings?: boolean;\n  env?: EnvLike;\n  /** Execution runtime. Local mode is same-origin without a remote upstream. */\n  execution?: \"local\" | \"remote\";\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  /**\n   * Unified gateway root used by legacy resolveService path\n   * (`${root}/auth` when no explicit auth url/env).\n   */\n  rootUrl?: string | null;\n  routing?: AthenaAuthRoutingIntent;\n  /** Explicit same-origin proxy upstream. */\n  upstreamUrl?: string | null;\n  /** Explicit auth.url from createClient config. */\n  url?: string | null;\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;\n  }\n  for (const key of keys) {\n    const value = env[key]?.trim();\n    if (value && isAbsoluteHttpUrl(value)) {\n      return value;\n    }\n  }\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) && !URL.canParse(trimmed)) {\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 * 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}\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;\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  bearerDetected: boolean;\n  browserRequestBaseUrl: string | null;\n  cookieDetected: boolean;\n  credentials: AthenaAuthCredentials | null;\n  mode: AthenaAuthRoutingMode | null;\n  proxyUpstreamBaseUrl: string | null;\n  requestOrigin: string | null;\n  serverRequestBaseUrl: string | null;\n  sessionTokenDetected: boolean;\n  source: \"resolved-client\" | \"unresolved\";\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    source: routing ? \"resolved-client\" : \"unresolved\",\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;\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;\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 { AthenaResult } from \"../../client-result.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport type {\n  AthenaExecutable,\n  AthenaQueryDescriptor,\n} from \"../../query/descriptor.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  | \"sqlite-local\"\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 =\n  | \"fetch\"\n  | \"insert\"\n  | \"update\"\n  | \"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> =\n  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 =\n  () => 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 SQLITE_LOCAL_TRANSACTION_CAPABILITIES: AthenaTransactionCapabilities =\n  {\n    atomic: true,\n    backend: \"sqlite-local\",\n    deferrable: false,\n    interactive: true,\n    isolationLevels: [],\n    readOnly: false,\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 { AthenaClientCapabilities } from \"../cloudflare/types.ts\";\nimport type { AthenaCapabilitiesIr } from \"./types.ts\";\n\nfunction capabilityState(\n  ir: AthenaCapabilitiesIr,\n  key: string,\n  fallback: boolean\n): boolean {\n  const entry = ir.capabilities.find((candidate) => candidate.key === key);\n  if (!entry || entry.status === \"unknown\" || entry.status === \"degraded\") {\n    return fallback;\n  }\n  return entry.status === \"available\";\n}\n\nexport function projectAthenaClientCapabilities(\n  ir: AthenaCapabilitiesIr,\n  base: AthenaClientCapabilities\n): AthenaClientCapabilities {\n  return {\n    ...base,\n    db: {\n      ...base.db,\n      layers: {\n        ...base.db.layers,\n        flatCrud:\n          capabilityState(ir, \"data.operation.fetch\", base.db.layers.flatCrud) &&\n          capabilityState(ir, \"data.operation.insert\", base.db.layers.flatCrud) &&\n          capabilityState(ir, \"data.operation.update\", base.db.layers.flatCrud) &&\n          capabilityState(ir, \"data.operation.delete\", base.db.layers.flatCrud),\n        relations: capabilityState(\n          ir,\n          \"data.query.nested-relations\",\n          base.db.layers.relations\n        ),\n        rpc: capabilityState(ir, \"data.operation.rpc\", base.db.layers.rpc),\n      },\n    },\n    storage: {\n      ...base.storage,\n      backups: capabilityState(\n        ir,\n        \"storage.backup.create\",\n        base.storage.backups\n      ),\n      catalogs: capabilityState(\n        ir,\n        \"storage.catalog.read\",\n        base.storage.catalogs\n      ),\n      objects:\n        capabilityState(ir, \"storage.object.get\", base.storage.objects) &&\n        capabilityState(ir, \"storage.object.put\", base.storage.objects) &&\n        capabilityState(ir, \"storage.object.list\", base.storage.objects) &&\n        capabilityState(ir, \"storage.object.delete\", base.storage.objects),\n    },\n  };\n}\n","const CAPABILITY_KEY = /^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$/;\n\nexport type AthenaCapabilityKey = string & {\n  readonly __athenaCapabilityKey: unique symbol;\n};\n\nexport function parseAthenaCapabilityKey(value: string): AthenaCapabilityKey {\n  if (typeof value !== \"string\" || !CAPABILITY_KEY.test(value)) {\n    throw new TypeError(`Invalid Athena capability key: ${String(value)}`);\n  }\n  return value as AthenaCapabilityKey;\n}\n\nexport function tryParseAthenaCapabilityKey(\n  value: unknown\n): AthenaCapabilityKey | undefined {\n  if (typeof value !== \"string\" || !CAPABILITY_KEY.test(value)) {\n    return;\n  }\n  return value as AthenaCapabilityKey;\n}\n\nexport function athenaCapabilityKeyString(\n  value: AthenaCapabilityKey\n): string {\n  return value;\n}\n","import { parseAthenaCapabilityKey } from \"./key.ts\";\nimport type {\n  AthenaCapabilityDomain,\n  AthenaCapabilityImplementation,\n  AthenaCapabilityKind,\n  AthenaCapabilityMaturity,\n  AthenaCapabilityReason,\n  AthenaCapabilitySource,\n  AthenaCapabilityStatus,\n} from \"./types.ts\";\nimport type { AthenaCapabilityContribution } from \"./resolver.ts\";\n\nexport function capabilityContribution(\n  input: {\n    key: string;\n    domain: AthenaCapabilityDomain;\n    kind: AthenaCapabilityKind;\n    implementation?: AthenaCapabilityImplementation;\n    status?: AthenaCapabilityStatus;\n    maturity?: AthenaCapabilityMaturity;\n    reason?: AthenaCapabilityReason;\n  },\n  source: AthenaCapabilitySource\n): AthenaCapabilityContribution {\n  return {\n    key: parseAthenaCapabilityKey(input.key),\n    domain: input.domain,\n    kind: input.kind,\n    implementation: input.implementation ?? \"native\",\n    status: input.status ?? \"available\",\n    maturity: input.maturity ?? \"stable\",\n    source,\n    ...(input.reason ? { reason: input.reason } : {}),\n  };\n}\n\nexport function unsupportedCapabilityContribution(\n  input: {\n    key: string;\n    domain: AthenaCapabilityDomain;\n    kind: AthenaCapabilityKind;\n  },\n  source: AthenaCapabilitySource\n): AthenaCapabilityContribution {\n  return capabilityContribution(\n    {\n      key: input.key,\n      domain: input.domain,\n      kind: input.kind,\n      implementation: \"unsupported\",\n      status: \"unavailable\",\n      maturity: \"stable\",\n      reason: { code: \"provider.unsupported\" },\n    },\n    source\n  );\n}\n\nexport function unconfiguredCapabilityContribution(\n  input: {\n    key: string;\n    domain: AthenaCapabilityDomain;\n    kind: AthenaCapabilityKind;\n  },\n  source: AthenaCapabilitySource\n): AthenaCapabilityContribution {\n  return capabilityContribution(\n    {\n      key: input.key,\n      domain: input.domain,\n      kind: input.kind,\n      implementation: \"native\",\n      status: \"unavailable\",\n      maturity: \"stable\",\n      reason: { code: \"provider.unconfigured\" },\n    },\n    source\n  );\n}\n\nexport function unknownCapabilityContribution(\n  input: {\n    key: string;\n    domain: AthenaCapabilityDomain;\n    kind: AthenaCapabilityKind;\n  },\n  source: AthenaCapabilitySource\n): AthenaCapabilityContribution {\n  return capabilityContribution(\n    {\n      key: input.key,\n      domain: input.domain,\n      kind: input.kind,\n      implementation: \"unknown\",\n      status: \"unknown\",\n      maturity: \"stable\",\n      reason: { code: \"capability.unknown\" },\n    },\n    source\n  );\n}\n\nexport function disabledCapabilityContribution(\n  input: {\n    key: string;\n    domain: AthenaCapabilityDomain;\n    kind: AthenaCapabilityKind;\n  },\n  source: AthenaCapabilitySource\n): AthenaCapabilityContribution {\n  return capabilityContribution(\n    {\n      key: input.key,\n      domain: input.domain,\n      kind: input.kind,\n      implementation: \"native\",\n      status: \"unavailable\",\n      maturity: \"disabled\",\n      reason: { code: \"feature.disabled\" },\n    },\n    source\n  );\n}\n","import { capabilityContribution } from \"../capabilities/contribution.ts\";\nimport { disabledCapabilityContribution } from \"../capabilities/contribution.ts\";\nimport type { AthenaCapabilityContribution } from \"../capabilities/resolver.ts\";\nimport type { AthenaAuthCapabilitiesResult } from \"./capabilities.ts\";\n\nfunction authContribution(\n  key: string,\n  enabled: boolean | null | undefined,\n  source: AthenaAuthCapabilitiesResult[\"source\"],\n  snapshotStatus: AthenaAuthCapabilitiesResult[\"status\"]\n): AthenaCapabilityContribution {\n  if (enabled == null || snapshotStatus === \"unknown\") {\n    return capabilityContribution(\n      {\n        key,\n        domain: \"auth\",\n        kind: \"feature\",\n        implementation: \"unknown\",\n        status: \"unknown\",\n        reason: { code: \"capability.unknown\" },\n      },\n      { kind: \"runtime\", source: `auth:${source}` }\n    );\n  }\n  const sourceInfo = { kind: \"runtime\" as const, source: `auth:${source}` };\n  return enabled\n    ? capabilityContribution(\n        { key, domain: \"auth\", kind: \"feature\" },\n        sourceInfo\n      )\n    : disabledCapabilityContribution(\n        { key, domain: \"auth\", kind: \"feature\" },\n        sourceInfo\n      );\n}\n\nexport function authCapabilitiesToContributions(\n  capabilities: AthenaAuthCapabilitiesResult\n): AthenaCapabilityContribution[] {\n  const socialProviders = capabilities.social?.providers;\n  return [\n    authContribution(\n      \"auth.password.sign-in\",\n      capabilities.emailAndPassword,\n      capabilities.source,\n      capabilities.status\n    ),\n    authContribution(\n      \"auth.password.reset\",\n      capabilities.password,\n      capabilities.source,\n      capabilities.status\n    ),\n    authContribution(\n      \"auth.session.list\",\n      capabilities.sessions,\n      capabilities.source,\n      capabilities.status\n    ),\n    authContribution(\n      \"auth.organization.manage\",\n      capabilities.organizations,\n      capabilities.source,\n      capabilities.status\n    ),\n    authContribution(\n      \"auth.passkey.authentication\",\n      capabilities.passkeys,\n      capabilities.source,\n      capabilities.status\n    ),\n    authContribution(\n      \"auth.social.sign-in\",\n      socialProviders == null ? undefined : socialProviders.length > 0,\n      capabilities.source,\n      capabilities.status\n    ),\n  ];\n}\n","import type { AthenaCapabilityContribution } from \"../capabilities/resolver.ts\";\nimport {\n  capabilityContribution,\n  unsupportedCapabilityContribution,\n} from \"../capabilities/contribution.ts\";\nimport type { AthenaChatCapabilities } from \"./types.ts\";\n\nexport function chatCapabilitiesToContributions(\n  capabilities: AthenaChatCapabilities\n): AthenaCapabilityContribution[] {\n  const source = {\n    kind: \"transport\" as const,\n    source: `chat:${capabilities.transport}`,\n  };\n  const facts: readonly (readonly [string, boolean])[] = [\n    [\"chat.realtime.messages\", capabilities.realtime.messages],\n    [\"chat.realtime.reactions\", capabilities.realtime.reactions],\n    [\"chat.realtime.websocket\", capabilities.realtime.websocket],\n    [\"chat.realtime.presence\", capabilities.realtime.presence],\n    [\"chat.realtime.typing\", capabilities.realtime.typing],\n  ];\n  return facts.map(([key, enabled]) =>\n    enabled\n      ? capabilityContribution({ key, domain: \"chat\", kind: \"feature\" }, source)\n      : unsupportedCapabilityContribution(\n          { key, domain: \"chat\", kind: \"feature\" },\n          source\n        )\n  );\n}\n","import type { AthenaCapabilityContribution } from \"../../capabilities/resolver.ts\";\nimport {\n  capabilityContribution,\n  unsupportedCapabilityContribution,\n} from \"../../capabilities/contribution.ts\";\nimport type { AthenaTransactionCapabilities } from \"./types.ts\";\n\nexport function transactionCapabilitiesToContributions(\n  capabilities: AthenaTransactionCapabilities\n): AthenaCapabilityContribution[] {\n  const source = {\n    kind: \"catalog\" as const,\n    source: `transaction:${capabilities.backend}`,\n  };\n  const facts: readonly (readonly [string, boolean])[] = [\n    [\"data.transaction.atomic\", capabilities.atomic],\n    [\"data.transaction.interactive\", capabilities.interactive],\n    [\"data.transaction.savepoints\", capabilities.savepoints],\n    [\"data.transaction.read-only\", capabilities.readOnly],\n    [\"data.transaction.deferrable\", capabilities.deferrable],\n  ];\n  return facts.map(([key, enabled]) =>\n    enabled\n      ? capabilityContribution(\n          { key, domain: \"data\", kind: \"semantic\" },\n          source\n        )\n      : unsupportedCapabilityContribution(\n          { key, domain: \"data\", kind: \"semantic\" },\n          source\n        )\n  );\n}\n","import { parseAthenaCapabilityKey } from \"../../capabilities/key.ts\";\nimport { capabilityContribution } from \"../../capabilities/contribution.ts\";\nimport type { AthenaCapabilityContribution } from \"../../capabilities/resolver.ts\";\nimport type { AthenaCapabilityKey } from \"../../capabilities/key.ts\";\nimport type { BillingCapabilities, BillingOperation } from \"./capabilities.ts\";\n\nconst BILLING_OPERATION_KEYS: Partial<\n  Record<BillingOperation, AthenaCapabilityKey>\n> = {\n  \"payments.list\": parseAthenaCapabilityKey(\"billing.operation.payments.list\"),\n  \"payments.create\": parseAthenaCapabilityKey(\"billing.operation.payments.create\"),\n  \"payments.get\": parseAthenaCapabilityKey(\"billing.operation.payments.get\"),\n  \"payments.cancel\": parseAthenaCapabilityKey(\"billing.operation.payments.cancel\"),\n  \"customers.list\": parseAthenaCapabilityKey(\"billing.operation.customers.list\"),\n  \"customers.create\": parseAthenaCapabilityKey(\"billing.operation.customers.create\"),\n  \"customers.get\": parseAthenaCapabilityKey(\"billing.operation.customers.get\"),\n  \"customers.update\": parseAthenaCapabilityKey(\"billing.operation.customers.update\"),\n  \"customers.delete\": parseAthenaCapabilityKey(\"billing.operation.customers.delete\"),\n  \"refunds.list\": parseAthenaCapabilityKey(\"billing.operation.refunds.list\"),\n  \"refunds.create\": parseAthenaCapabilityKey(\"billing.operation.refunds.create\"),\n  \"refunds.get\": parseAthenaCapabilityKey(\"billing.operation.refunds.get\"),\n  \"refunds.cancel\": parseAthenaCapabilityKey(\"billing.operation.refunds.cancel\"),\n  \"paymentLinks.list\": parseAthenaCapabilityKey(\"billing.operation.payment-links.list\"),\n  \"paymentLinks.create\": parseAthenaCapabilityKey(\"billing.operation.payment-links.create\"),\n  \"paymentLinks.get\": parseAthenaCapabilityKey(\"billing.operation.payment-links.get\"),\n  \"paymentLinks.update\": parseAthenaCapabilityKey(\"billing.operation.payment-links.update\"),\n  \"paymentLinks.delete\": parseAthenaCapabilityKey(\"billing.operation.payment-links.delete\"),\n  \"subscriptions.list\": parseAthenaCapabilityKey(\"billing.operation.subscriptions.list\"),\n  \"subscriptions.create\": parseAthenaCapabilityKey(\"billing.operation.subscriptions.create\"),\n  \"subscriptions.get\": parseAthenaCapabilityKey(\"billing.operation.subscriptions.get\"),\n  \"subscriptions.update\": parseAthenaCapabilityKey(\"billing.operation.subscriptions.update\"),\n  \"subscriptions.cancel\": parseAthenaCapabilityKey(\"billing.operation.subscriptions.cancel\"),\n  \"invoices.list\": parseAthenaCapabilityKey(\"billing.operation.invoices.list\"),\n  \"invoices.get\": parseAthenaCapabilityKey(\"billing.operation.invoices.get\"),\n  \"webhooks.list\": parseAthenaCapabilityKey(\"billing.operation.webhooks.list\"),\n  \"webhooks.create\": parseAthenaCapabilityKey(\"billing.operation.webhooks.create\"),\n  \"webhooks.get\": parseAthenaCapabilityKey(\"billing.operation.webhooks.get\"),\n  \"webhooks.update\": parseAthenaCapabilityKey(\"billing.operation.webhooks.update\"),\n  \"webhooks.delete\": parseAthenaCapabilityKey(\"billing.operation.webhooks.delete\"),\n  \"webhooks.test\": parseAthenaCapabilityKey(\"billing.operation.webhooks.test\"),\n  \"products.list\": parseAthenaCapabilityKey(\"billing.operation.products.list\"),\n  \"prices.list\": parseAthenaCapabilityKey(\"billing.operation.prices.list\"),\n  \"relations.list\": parseAthenaCapabilityKey(\"billing.operation.relations.list\"),\n  \"checkout.create\": parseAthenaCapabilityKey(\"billing.operation.checkout.create\"),\n  \"self.invoices.list\": parseAthenaCapabilityKey(\"billing.operation.self.invoices.list\"),\n  \"self.invoices.get\": parseAthenaCapabilityKey(\"billing.operation.self.invoices.get\"),\n  \"self.payments.list\": parseAthenaCapabilityKey(\"billing.operation.self.payments.list\"),\n  \"self.payments.get\": parseAthenaCapabilityKey(\"billing.operation.self.payments.get\"),\n  \"self.subscription.get\": parseAthenaCapabilityKey(\"billing.operation.self.subscription.get\"),\n  \"self.subscription.cancel\": parseAthenaCapabilityKey(\"billing.operation.self.subscription.cancel\"),\n  \"self.subscription.enroll\": parseAthenaCapabilityKey(\"billing.operation.self.subscription.enroll\"),\n  \"self.subscription.change\": parseAthenaCapabilityKey(\"billing.operation.self.subscription.change\"),\n  \"self.checkout.create\": parseAthenaCapabilityKey(\"billing.operation.self.checkout.create\"),\n  \"self.checkout.resume\": parseAthenaCapabilityKey(\"billing.operation.self.checkout.resume\"),\n  \"self.customer.get\": parseAthenaCapabilityKey(\"billing.operation.self.customer.get\"),\n  \"self.entitlements\": parseAthenaCapabilityKey(\"billing.operation.self.entitlements\"),\n  \"admin.connections.materialize\": parseAthenaCapabilityKey(\"billing.operation.admin.connections.materialize\"),\n  \"admin.bootstrap.retry\": parseAthenaCapabilityKey(\"billing.operation.admin.bootstrap.retry\"),\n  \"admin.reconciliation.run\": parseAthenaCapabilityKey(\"billing.operation.admin.reconciliation.run\"),\n  \"admin.reconciliation.retry\": parseAthenaCapabilityKey(\"billing.operation.admin.reconciliation.retry\"),\n  \"admin.webhooks.reconcile\": parseAthenaCapabilityKey(\"billing.operation.admin.webhooks.reconcile\"),\n  \"admin.webhooks.verify\": parseAthenaCapabilityKey(\"billing.operation.admin.webhooks.verify\"),\n  \"admin.webhooks.status\": parseAthenaCapabilityKey(\"billing.operation.admin.webhooks.status\"),\n  \"admin.ingestion.health\": parseAthenaCapabilityKey(\"billing.operation.admin.ingestion.health\"),\n  \"admin.conflicts.resolve\": parseAthenaCapabilityKey(\"billing.operation.admin.conflicts.resolve\"),\n  \"admin.conflicts.list\": parseAthenaCapabilityKey(\"billing.operation.admin.conflicts.list\"),\n};\n\nexport function billingOperationCapabilityKey(\n  operation: BillingOperation\n): AthenaCapabilityKey {\n  const key = BILLING_OPERATION_KEYS[operation];\n  if (!key) {\n    throw new Error(`No canonical capability key for Billing operation \"${operation}\"`);\n  }\n  return key;\n}\n\nexport function billingCapabilitiesToContributions(\n  capabilities: BillingCapabilities\n): AthenaCapabilityContribution[] {\n  const source = {\n    kind: \"provider\" as const,\n    source: `${capabilities.provider}:${capabilities.runtime}`,\n  };\n  return Object.entries(capabilities.operations).flatMap(\n    ([operation, capability]) => {\n      if (!capability) {\n        return [];\n      }\n      const available = capability.available === true;\n      return [\n        capabilityContribution(\n          {\n            key: billingOperationCapabilityKey(operation as BillingOperation),\n            domain: \"billing\",\n            kind: \"operation\",\n            implementation: available ? \"native\" : \"unsupported\",\n            status: available ? \"available\" : \"unavailable\",\n            maturity: \"stable\",\n            ...(available ? {} : { reason: { code: \"provider.operation-unsupported\" } }),\n          },\n          source\n        ),\n      ];\n    }\n  );\n}\n\nexport function billingRuntimeUnknownContributions(\n  provider: string\n): AthenaCapabilityContribution[] {\n  const source = { kind: \"provider\" as const, source: `billing:${provider}` };\n  return Object.values(BILLING_OPERATION_KEYS).map((key) =>\n    capabilityContribution(\n      {\n        key: key as AthenaCapabilityKey,\n        domain: \"billing\",\n        kind: \"operation\",\n        implementation: \"unknown\",\n        status: \"unknown\",\n        maturity: \"stable\",\n        reason: { code: \"capability.unknown\" },\n      },\n      source\n    )\n  );\n}\n","import type { AthenaCapabilityKey } from \"./key.ts\";\n\nexport const ATHENA_CAPABILITIES_IR_KIND = \"athena.capabilities\" as const;\nexport const ATHENA_CAPABILITIES_IR_VERSION = 1 as const;\n\nexport type AthenaCapabilityDomain =\n  | \"data\"\n  | \"auth\"\n  | \"storage\"\n  | \"billing\"\n  | \"chat\"\n  | \"notifications\";\n\nexport type AthenaCapabilityKind = \"operation\" | \"feature\" | \"semantic\";\n\nexport type AthenaCapabilityImplementation =\n  | \"native\"\n  | \"proxied\"\n  | \"emulated\"\n  | \"unsupported\"\n  | \"unknown\";\n\nexport type AthenaCapabilityStatus =\n  | \"available\"\n  | \"unavailable\"\n  | \"degraded\"\n  | \"unknown\";\n\nexport type AthenaCapabilityMaturity = \"stable\" | \"preview\" | \"disabled\";\n\nexport type AthenaCapabilitySourceKind =\n  | \"catalog\"\n  | \"runtime-plan\"\n  | \"transport\"\n  | \"provider\"\n  | \"configuration\"\n  | \"discovery\"\n  | \"runtime\";\n\nexport type AthenaCapabilityReasonCode =\n  | \"configuration.missing\"\n  | \"configuration.invalid\"\n  | \"runtime.initializing\"\n  | \"runtime.unavailable\"\n  | \"transport.unavailable\"\n  | \"transport.incompatible\"\n  | \"provider.unconfigured\"\n  | \"provider.unsupported\"\n  | \"provider.operation-unsupported\"\n  | \"dependency.unavailable\"\n  | \"feature.disabled\"\n  | \"capability.unknown\"\n  | `${AthenaCapabilityDomain}.${string}`;\n\nexport interface AthenaCapabilitySource {\n  kind: AthenaCapabilitySourceKind;\n  source: string;\n}\n\nexport interface AthenaCapabilityReason {\n  code: AthenaCapabilityReasonCode;\n}\n\nexport interface AthenaCapabilityEntry {\n  key: AthenaCapabilityKey;\n  domain: AthenaCapabilityDomain;\n  kind: AthenaCapabilityKind;\n  implementation: AthenaCapabilityImplementation;\n  status: AthenaCapabilityStatus;\n  maturity: AthenaCapabilityMaturity;\n  sources: readonly AthenaCapabilitySource[];\n  reason?: AthenaCapabilityReason;\n}\n\nexport interface AthenaCapabilitiesMetadata {\n  generatedAt?: string;\n  provenance?: readonly string[];\n}\n\nexport interface AthenaCapabilitiesIr {\n  kind: typeof ATHENA_CAPABILITIES_IR_KIND;\n  irVersion: typeof ATHENA_CAPABILITIES_IR_VERSION;\n  capabilities: readonly AthenaCapabilityEntry[];\n  metadata: AthenaCapabilitiesMetadata;\n}\n","import {\n  ATHENA_CAPABILITIES_IR_KIND,\n  ATHENA_CAPABILITIES_IR_VERSION,\n  type AthenaCapabilityDomain,\n  type AthenaCapabilityEntry,\n  type AthenaCapabilityImplementation,\n  type AthenaCapabilityKind,\n  type AthenaCapabilityMaturity,\n  type AthenaCapabilityReasonCode,\n  type AthenaCapabilitySourceKind,\n  type AthenaCapabilityStatus,\n  type AthenaCapabilitiesIr,\n} from \"../types.ts\";\nimport { parseAthenaCapabilityKey } from \"../key.ts\";\n\nexport class CapabilitiesIrError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"CapabilitiesIrError\";\n  }\n}\n\nconst DOMAINS = new Set<AthenaCapabilityDomain>([\n  \"data\",\n  \"auth\",\n  \"storage\",\n  \"billing\",\n  \"chat\",\n  \"notifications\",\n]);\nconst KINDS = new Set<AthenaCapabilityKind>([\n  \"operation\",\n  \"feature\",\n  \"semantic\",\n]);\nconst IMPLEMENTATIONS = new Set<AthenaCapabilityImplementation>([\n  \"native\",\n  \"proxied\",\n  \"emulated\",\n  \"unsupported\",\n  \"unknown\",\n]);\nconst STATUSES = new Set<AthenaCapabilityStatus>([\n  \"available\",\n  \"unavailable\",\n  \"degraded\",\n  \"unknown\",\n]);\nconst MATURITIES = new Set<AthenaCapabilityMaturity>([\n  \"stable\",\n  \"preview\",\n  \"disabled\",\n]);\nconst SOURCE_KINDS = new Set<AthenaCapabilitySourceKind>([\n  \"catalog\",\n  \"runtime-plan\",\n  \"transport\",\n  \"provider\",\n  \"configuration\",\n  \"discovery\",\n  \"runtime\",\n]);\nconst GENERIC_REASONS = new Set<AthenaCapabilityReasonCode>([\n  \"configuration.missing\",\n  \"configuration.invalid\",\n  \"runtime.initializing\",\n  \"runtime.unavailable\",\n  \"transport.unavailable\",\n  \"transport.incompatible\",\n  \"provider.unconfigured\",\n  \"provider.unsupported\",\n  \"provider.operation-unsupported\",\n  \"dependency.unavailable\",\n  \"feature.disabled\",\n  \"capability.unknown\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction rejectUnknownKeys(\n  value: Record<string, unknown>,\n  allowed: readonly string[],\n  label: string\n): void {\n  for (const key of Object.keys(value)) {\n    if (!allowed.includes(key)) {\n      throw new CapabilitiesIrError(`${label}.${key} is not supported`);\n    }\n  }\n}\n\nfunction requireEnum<T extends string>(\n  value: unknown,\n  values: Set<T>,\n  label: string\n): T {\n  if (typeof value !== \"string\" || !values.has(value as T)) {\n    throw new CapabilitiesIrError(`${label} is invalid`);\n  }\n  return value as T;\n}\n\nfunction validateReason(value: unknown, label: string): void {\n  if (!isRecord(value)) {\n    throw new CapabilitiesIrError(`${label} must be an object`);\n  }\n  rejectUnknownKeys(value, [\"code\"], label);\n  const segments =\n    typeof value.code === \"string\" ? value.code.split(\".\") : [];\n  const domainReason =\n    segments.length >= 2 &&\n    DOMAINS.has(segments[0] as AthenaCapabilityDomain) &&\n    segments.slice(1).every((segment) => /^[a-z][a-z0-9-]*$/.test(segment));\n  if (\n    typeof value.code !== \"string\" ||\n    (!GENERIC_REASONS.has(value.code as AthenaCapabilityReasonCode) &&\n      !domainReason)\n  ) {\n    throw new CapabilitiesIrError(`${label}.code is invalid`);\n  }\n}\n\nfunction validateEntry(value: unknown, index: number): AthenaCapabilityEntry {\n  const label = `capabilities[${index}]`;\n  if (!isRecord(value)) {\n    throw new CapabilitiesIrError(`${label} must be an object`);\n  }\n  rejectUnknownKeys(value, [\n    \"key\",\n    \"domain\",\n    \"kind\",\n    \"implementation\",\n    \"status\",\n    \"maturity\",\n    \"sources\",\n    \"reason\",\n  ], label);\n  if (typeof value.key !== \"string\") {\n    throw new CapabilitiesIrError(`${label}.key is required`);\n  }\n  const key = parseAthenaCapabilityKey(value.key);\n  const domain = requireEnum(value.domain, DOMAINS, `${label}.domain`);\n  if (!key.startsWith(`${domain}.`)) {\n    throw new CapabilitiesIrError(`${label}.key does not match its domain`);\n  }\n  const kind = requireEnum(value.kind, KINDS, `${label}.kind`);\n  const implementation = requireEnum(\n    value.implementation,\n    IMPLEMENTATIONS,\n    `${label}.implementation`\n  );\n  const status = requireEnum(value.status, STATUSES, `${label}.status`);\n  const maturity = requireEnum(value.maturity, MATURITIES, `${label}.maturity`);\n  if (implementation === \"unsupported\" && status === \"available\") {\n    throw new CapabilitiesIrError(\n      `${label} cannot be unsupported and available`\n    );\n  }\n  if (\n    implementation === \"unsupported\" &&\n    status !== \"unavailable\" &&\n    status !== \"unknown\"\n  ) {\n    throw new CapabilitiesIrError(\n      `${label} unsupported implementation requires unavailable or unknown status`\n    );\n  }\n  if (implementation === \"unknown\" && status !== \"unknown\") {\n    throw new CapabilitiesIrError(\n      `${label} unknown implementation requires unknown status`\n    );\n  }\n  if (!Array.isArray(value.sources) || value.sources.length === 0) {\n    throw new CapabilitiesIrError(`${label}.sources must be non-empty`);\n  }\n  const sources = value.sources.map((source, sourceIndex) => {\n    const sourceLabel = `${label}.sources[${sourceIndex}]`;\n    if (!isRecord(source)) {\n      throw new CapabilitiesIrError(`${sourceLabel} must be an object`);\n    }\n    rejectUnknownKeys(source, [\"kind\", \"source\"], sourceLabel);\n    const sourceKind = requireEnum(\n      source.kind,\n      SOURCE_KINDS,\n      `${sourceLabel}.kind`\n    );\n    if (typeof source.source !== \"string\" || source.source.length === 0) {\n      throw new CapabilitiesIrError(`${sourceLabel}.source is required`);\n    }\n    if (\n      !/^[a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)?(?:\\/[a-z][a-z0-9-]*)*$/.test(\n        source.source\n      )\n    ) {\n      throw new CapabilitiesIrError(`${sourceLabel}.source is not safe`);\n    }\n    return { kind: sourceKind, source: source.source };\n  });\n  if (value.reason !== undefined) {\n    validateReason(value.reason, `${label}.reason`);\n  }\n  return {\n    key,\n    domain,\n    kind,\n    implementation,\n    status,\n    maturity,\n    sources,\n    ...(value.reason ? { reason: value.reason as AthenaCapabilityEntry[\"reason\"] } : {}),\n  };\n}\n\nexport function validateAthenaCapabilitiesIr(\n  value: unknown\n): AthenaCapabilitiesIr {\n  if (!isRecord(value)) {\n    throw new CapabilitiesIrError(\"Capabilities IR must be an object\");\n  }\n  rejectUnknownKeys(value, [\"kind\", \"irVersion\", \"capabilities\", \"metadata\"], \"document\");\n  if (value.kind !== ATHENA_CAPABILITIES_IR_KIND) {\n    throw new CapabilitiesIrError(\"Capabilities IR kind is invalid\");\n  }\n  if (value.irVersion !== ATHENA_CAPABILITIES_IR_VERSION) {\n    throw new CapabilitiesIrError(\"Capabilities IR version is invalid\");\n  }\n  if (!Array.isArray(value.capabilities)) {\n    throw new CapabilitiesIrError(\"Capabilities IR capabilities must be an array\");\n  }\n  const keys = new Set<string>();\n  const capabilities = value.capabilities.map((entry, index) => {\n    const validated = validateEntry(entry, index);\n    if (keys.has(validated.key)) {\n      throw new CapabilitiesIrError(`Duplicate capability key \"${validated.key}\"`);\n    }\n    keys.add(validated.key);\n    return validated;\n  });\n  if (!isRecord(value.metadata)) {\n    throw new CapabilitiesIrError(\"Capabilities IR metadata must be an object\");\n  }\n  rejectUnknownKeys(value.metadata, [\"generatedAt\", \"provenance\"], \"metadata\");\n  if (\n    value.metadata.generatedAt !== undefined &&\n    typeof value.metadata.generatedAt !== \"string\"\n  ) {\n    throw new CapabilitiesIrError(\"metadata.generatedAt must be a string\");\n  }\n  if (\n    value.metadata.provenance !== undefined &&\n    (!Array.isArray(value.metadata.provenance) ||\n      value.metadata.provenance.some(\n        (item) =>\n          typeof item !== \"string\" ||\n          !/^[a-z][a-z0-9-]*(?::[a-z][a-z0-9-]*)?(?:\\/[a-z][a-z0-9-]*)*$/.test(\n            item\n          )\n      ))\n  ) {\n    throw new CapabilitiesIrError(\"metadata.provenance must be string[]\");\n  }\n  return {\n    kind: ATHENA_CAPABILITIES_IR_KIND,\n    irVersion: ATHENA_CAPABILITIES_IR_VERSION,\n    capabilities,\n    metadata: value.metadata,\n  };\n}\n","import type {\n  AthenaCapabilitiesIr,\n  AthenaCapabilityEntry,\n  AthenaCapabilitySource,\n} from \"../types.ts\";\nimport { athenaCapabilityKeyString } from \"../key.ts\";\nimport { validateAthenaCapabilitiesIr } from \"./validate.ts\";\n\nfunction compareStrings(a: string, b: string): number {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction canonicalSources(\n  sources: readonly AthenaCapabilitySource[]\n): AthenaCapabilitySource[] {\n  const unique = new Map(\n    sources.map((source) => [`${source.kind}\\0${source.source}`, source])\n  );\n  return [...unique.values()].sort(\n    (a, b) =>\n      compareStrings(a.kind, b.kind) || compareStrings(a.source, b.source)\n  );\n}\n\nfunction canonicalEntry(entry: AthenaCapabilityEntry): AthenaCapabilityEntry {\n  return {\n    ...entry,\n    sources: canonicalSources(entry.sources),\n  };\n}\n\nexport function canonicalizeAthenaCapabilitiesIr(\n  value: unknown\n): AthenaCapabilitiesIr {\n  const validated = validateAthenaCapabilitiesIr(value);\n  const metadata = validated.metadata;\n  return {\n    kind: validated.kind,\n    irVersion: validated.irVersion,\n    capabilities: [...validated.capabilities]\n      .map(canonicalEntry)\n      .sort((a, b) =>\n        compareStrings(\n          athenaCapabilityKeyString(a.key),\n          athenaCapabilityKeyString(b.key)\n        )\n      ),\n    metadata: {\n      ...(metadata.generatedAt === undefined\n        ? {}\n        : { generatedAt: metadata.generatedAt }),\n      ...(metadata.provenance === undefined\n        ? {}\n        : {\n            provenance: [...new Set(metadata.provenance)].sort(compareStrings),\n          }),\n    },\n  };\n}\n","import {\n  athenaCapabilityKeyString,\n  parseAthenaCapabilityKey,\n  type AthenaCapabilityKey,\n} from \"./key.ts\";\nimport {\n  ATHENA_CAPABILITIES_IR_KIND,\n  ATHENA_CAPABILITIES_IR_VERSION,\n  type AthenaCapabilitiesMetadata,\n  type AthenaCapabilityEntry,\n  type AthenaCapabilitySource,\n  type AthenaCapabilitiesIr,\n  type AthenaCapabilityReason,\n} from \"./types.ts\";\nimport { canonicalizeAthenaCapabilitiesIr } from \"./ir/canonicalize.ts\";\n\nexport interface AthenaCapabilityContribution\n  extends Omit<AthenaCapabilityEntry, \"key\" | \"sources\"> {\n  key: AthenaCapabilityKey;\n  source: AthenaCapabilitySource;\n}\n\nfunction semanticPart(entry: AthenaCapabilityContribution): string {\n  return JSON.stringify({\n    domain: entry.domain,\n    implementation: entry.implementation,\n    kind: entry.kind,\n    maturity: entry.maturity,\n    reason: entry.reason ?? null,\n    status: entry.status,\n  });\n}\n\nexport function resolveAthenaCapabilities(\n  contributions: readonly AthenaCapabilityContribution[],\n  metadata: AthenaCapabilitiesMetadata = {}\n): AthenaCapabilitiesIr {\n  const entries = new Map<\n    string,\n    { contribution: AthenaCapabilityContribution; sources: AthenaCapabilitySource[] }\n  >();\n  for (const contribution of contributions) {\n    const key = parseAthenaCapabilityKey(\n      athenaCapabilityKeyString(contribution.key)\n    );\n    const current = entries.get(key);\n    if (!current) {\n      entries.set(key, { contribution: { ...contribution, key }, sources: [contribution.source] });\n      continue;\n    }\n    if (semanticPart(current.contribution) !== semanticPart(contribution)) {\n      throw new Error(`Conflicting capability contributions for \"${key}\"`);\n    }\n    if (\n      !current.sources.some(\n        (source) =>\n          source.kind === contribution.source.kind &&\n          source.source === contribution.source.source\n      )\n    ) {\n      current.sources.push(contribution.source);\n    }\n  }\n  return canonicalizeAthenaCapabilitiesIr({\n    kind: ATHENA_CAPABILITIES_IR_KIND,\n    irVersion: ATHENA_CAPABILITIES_IR_VERSION,\n    capabilities: [...entries.values()].map(({ contribution, sources }) => ({\n      key: contribution.key,\n      domain: contribution.domain,\n      kind: contribution.kind,\n      implementation: contribution.implementation,\n      status: contribution.status,\n      maturity: contribution.maturity,\n      sources,\n      ...(contribution.reason\n        ? { reason: contribution.reason as AthenaCapabilityReason }\n        : {}),\n    })),\n    metadata,\n  });\n}\n","import type { AthenaCapabilityContribution } from \"../../capabilities/resolver.ts\";\nimport {\n  capabilityContribution,\n  unsupportedCapabilityContribution,\n} from \"../../capabilities/contribution.ts\";\nimport type { AthenaQueryCapabilityMatrix } from \"./capabilities.ts\";\n\nexport function queryCapabilitiesToContributions(\n  matrix: AthenaQueryCapabilityMatrix\n): AthenaCapabilityContribution[] {\n  const source = { kind: \"catalog\" as const, source: `query:${matrix.backend}` };\n  const facts: readonly (readonly [string, boolean])[] = [\n    [\"data.query.ilike\", matrix.ilike],\n    [\"data.query.jsonb-containment\", matrix.jsonbContainment],\n    [\"data.query.many-to-many-relations\", matrix.manyToManyRelations],\n    [\"data.query.nested-ordering\", matrix.nestedOrdering],\n    [\"data.query.nested-pagination\", matrix.nestedPagination],\n    [\"data.query.nested-relations\", matrix.nestedRelations],\n    [\"data.query.nulls-ordering\", matrix.nullsOrdering],\n    [\"data.query.relation-first-selection\", matrix.relationFirstSelection],\n    [\"data.query.relational-predicates\", matrix.relationalPredicates],\n  ];\n  return facts.map(([key, enabled]) =>\n    enabled\n      ? capabilityContribution({ key, domain: \"data\", kind: \"feature\" }, source)\n      : unsupportedCapabilityContribution(\n          { key, domain: \"data\", kind: \"feature\" },\n          source\n        )\n  );\n}\n","import {\n  capabilityContribution,\n  unconfiguredCapabilityContribution,\n  unsupportedCapabilityContribution,\n} from \"../../capabilities/contribution.ts\";\nimport type { AthenaCapabilityContribution } from \"../../capabilities/resolver.ts\";\n\nexport interface AthenaStorageCapabilityFacts {\n  backups: boolean;\n  catalogs: boolean;\n  objects: boolean;\n  source: string;\n}\n\nexport function storageCapabilitiesToContributions(\n  input: AthenaStorageCapabilityFacts\n): AthenaCapabilityContribution[] {\n  const source = { kind: \"runtime\" as const, source: `storage:${input.source}` };\n  const factEntries: readonly (readonly [string, boolean])[] = [\n    [\"storage.object.get\", input.objects],\n    [\"storage.object.put\", input.objects],\n    [\"storage.object.list\", input.objects],\n    [\"storage.object.delete\", input.objects],\n    [\"storage.catalog.read\", input.catalogs],\n    [\"storage.backup.create\", input.backups],\n  ];\n  return factEntries.map(([key, enabled]) => {\n    const contribution = {\n      key,\n      domain: \"storage\" as const,\n      kind: \"operation\" as const,\n    };\n    if (enabled) return capabilityContribution(contribution, source);\n    return input.source === \"none\"\n      ? unconfiguredCapabilityContribution(contribution, source)\n      : unsupportedCapabilityContribution(contribution, source);\n  });\n}\n","import type { AthenaAuthCapabilitiesResult } from \"../auth/capabilities.ts\";\nimport { authCapabilitiesToContributions } from \"../auth/capability-contributions.ts\";\nimport type { AthenaClientCapabilities } from \"../cloudflare/types.ts\";\nimport type { AthenaChatCapabilities } from \"../chat/types.ts\";\nimport { chatCapabilitiesToContributions } from \"../chat/capability-contributions.ts\";\nimport { transactionCapabilitiesToContributions } from \"../db/transaction/capability-contributions.ts\";\nimport type { BillingCapabilities } from \"../billing/runtime/capabilities.ts\";\nimport {\n  billingCapabilitiesToContributions,\n  billingRuntimeUnknownContributions,\n} from \"../billing/runtime/capability-contributions.ts\";\nimport {\n  capabilityContribution,\n  unconfiguredCapabilityContribution,\n  unsupportedCapabilityContribution,\n} from \"./contribution.ts\";\nimport type { AthenaCapabilitiesIr } from \"./types.ts\";\nimport type { AthenaCapabilityContribution } from \"./resolver.ts\";\nimport { resolveAthenaCapabilities } from \"./resolver.ts\";\nimport type { AthenaQueryCapabilityMatrix } from \"../query/engine/capabilities.ts\";\nimport { queryCapabilitiesToContributions } from \"../query/engine/capability-contributions.ts\";\nimport type { AthenaStorageCapabilityFacts } from \"../storage/runtime/capability-contributions.ts\";\nimport { storageCapabilitiesToContributions } from \"../storage/runtime/capability-contributions.ts\";\n\nfunction knownRuntimeFact(\n  key: string,\n  domain: \"data\" | \"storage\",\n  enabled: boolean,\n  source: { kind: \"runtime\"; source: string },\n  onFalse: \"unsupported\" | \"unconfigured\" = \"unsupported\"\n): AthenaCapabilityContribution {\n  const input = { key, domain, kind: \"operation\" as const };\n  if (enabled) return capabilityContribution(input, source);\n  return onFalse === \"unconfigured\"\n    ? unconfiguredCapabilityContribution(input, source)\n    : unsupportedCapabilityContribution(input, source);\n}\n\nexport interface ResolveAthenaClientCapabilitiesInput {\n  base: AthenaClientCapabilities;\n  query: AthenaQueryCapabilityMatrix;\n  auth?: AthenaAuthCapabilitiesResult;\n  billing?: BillingCapabilities;\n  billingProvider?: string;\n  chat?: AthenaChatCapabilities;\n  storage?: AthenaStorageCapabilityFacts;\n}\n\nexport function resolveAthenaClientCapabilitiesIr(\n  input: ResolveAthenaClientCapabilitiesInput\n): AthenaCapabilitiesIr {\n  const source = { kind: \"runtime\" as const, source: \"client-construction\" };\n  const contributions: AthenaCapabilityContribution[] = [\n    ...([\"fetch\", \"insert\", \"update\", \"delete\"] as const).map((operation) =>\n      knownRuntimeFact(\n        `data.operation.${operation}`,\n        \"data\",\n        input.base.db.layers.flatCrud,\n        source\n      )\n    ),\n    knownRuntimeFact(\n      \"data.operation.rpc\",\n      \"data\",\n      input.base.db.layers.rpc,\n      source\n    ),\n    ...transactionCapabilitiesToContributions(input.base.db.transactions),\n    ...queryCapabilitiesToContributions(input.query),\n    ...(input.storage\n      ? storageCapabilitiesToContributions(input.storage)\n      : [\n          ...([\"get\", \"put\", \"list\", \"delete\"] as const).map((operation) =>\n            knownRuntimeFact(\n              `storage.object.${operation}`,\n              \"storage\",\n              input.base.storage.objects,\n              source,\n              \"unconfigured\"\n            )\n          ),\n          knownRuntimeFact(\n            \"storage.catalog.read\",\n            \"storage\",\n            input.base.storage.catalogs,\n            source,\n            \"unconfigured\"\n          ),\n          knownRuntimeFact(\n            \"storage.backup.create\",\n            \"storage\",\n            input.base.storage.backups,\n            source,\n            \"unconfigured\"\n          ),\n        ]),\n    ...(input.auth ? authCapabilitiesToContributions(input.auth) : []),\n    ...(input.billing\n      ? billingCapabilitiesToContributions(input.billing)\n      : input.billingProvider\n        ? billingRuntimeUnknownContributions(input.billingProvider)\n        : []),\n    ...(input.chat ? chatCapabilitiesToContributions(input.chat) : []),\n  ];\n  return resolveAthenaCapabilities(contributions);\n}\n","export type AthenaQueryBackend = \"gateway\" | \"postgresql\" | \"d1\" | \"sqlite\";\n\nexport interface AthenaQueryCapabilityMatrix {\n  backend: AthenaQueryBackend;\n  ilike: boolean;\n  jsonbContainment: boolean;\n  manyToManyRelations: boolean;\n  nestedOrdering: boolean;\n  nestedPagination: boolean;\n  nestedRelations: boolean;\n  nullsOrdering: boolean;\n  relationFirstSelection: boolean;\n  relationalPredicates: boolean;\n}\n\nexport const GATEWAY_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n  backend: \"gateway\",\n  ilike: true,\n  jsonbContainment: true,\n  manyToManyRelations: false,\n  nestedOrdering: true,\n  nestedPagination: true,\n  nestedRelations: true,\n  nullsOrdering: true,\n  relationFirstSelection: false,\n  relationalPredicates: false,\n};\n\nexport const POSTGRES_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n  backend: \"postgresql\",\n  ilike: true,\n  jsonbContainment: true,\n  manyToManyRelations: true,\n  nestedOrdering: true,\n  nestedPagination: true,\n  nestedRelations: true,\n  nullsOrdering: true,\n  relationFirstSelection: true,\n  relationalPredicates: true,\n};\n\nexport const D1_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n  backend: \"d1\",\n  ilike: false,\n  jsonbContainment: false,\n  manyToManyRelations: true,\n  nestedOrdering: true,\n  nestedPagination: true,\n  nestedRelations: true,\n  nullsOrdering: false,\n  relationFirstSelection: true,\n  relationalPredicates: true,\n};\n\nexport const SQLITE_LOCAL_QUERY_CAPABILITIES: AthenaQueryCapabilityMatrix = {\n  backend: \"sqlite\",\n  ilike: false,\n  jsonbContainment: false,\n  manyToManyRelations: false,\n  nestedOrdering: false,\n  nestedPagination: false,\n  nestedRelations: false,\n  nullsOrdering: false,\n  relationFirstSelection: false,\n  relationalPredicates: false,\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 { projectAthenaClientCapabilities } from \"../capabilities/client-projection.ts\";\nimport { resolveAthenaClientCapabilitiesIr } from \"../capabilities/assembly.ts\";\nimport {\n  D1_QUERY_CAPABILITIES,\n  GATEWAY_QUERY_CAPABILITIES,\n  POSTGRES_QUERY_CAPABILITIES,\n} from \"../query/engine/capabilities.ts\";\nimport type { AthenaClientCapabilities } from \"./types.ts\";\n\nfunction projectCanonicalClientCapabilities(\n  base: AthenaClientCapabilities,\n  query = POSTGRES_QUERY_CAPABILITIES\n): AthenaClientCapabilities {\n  const ir = resolveAthenaClientCapabilitiesIr({ base, query });\n  return projectAthenaClientCapabilities(\n    ir,\n    base\n  );\n}\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  storageLocal?: boolean;\n  storageCatalogs?: boolean;\n  storageBackups?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? true;\n  return projectCanonicalClientCapabilities({\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: options?.storageLocal ?? false,\n      objects: storageConfigured,\n    },\n  }, GATEWAY_QUERY_CAPABILITIES);\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  storageLocal?: boolean;\n}): AthenaClientCapabilities {\n  const hasRemoteStorage = Boolean(options.hasRemoteStorage);\n  const hasObjects = options.hasR2 || hasRemoteStorage;\n  const query =\n    options.query === false\n      ? Object.fromEntries(\n          Object.keys(D1_QUERY_CAPABILITIES).map((key) => [key, false])\n        )\n      : {\n          ...D1_QUERY_CAPABILITIES,\n          findManyAst: options.findManyAst ?? true,\n          nestedRelations: options.relations ?? D1_QUERY_CAPABILITIES.nestedRelations,\n        };\n  return projectCanonicalClientCapabilities({\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.storageLocal ?? options.hasR2,\n      // Remote hybrid root can still expose storage.objects via the HTTP API.\n      objects: hasObjects,\n    },\n  }, query as typeof D1_QUERY_CAPABILITIES);\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  storageLocal?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? false;\n  return projectCanonicalClientCapabilities({\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: options?.storageLocal ?? false,\n      objects: storageConfigured,\n    },\n  }, POSTGRES_QUERY_CAPABILITIES);\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)\n    ? value\n    : 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}\n\nfunction readAlias(\n  raw: unknown,\n  keys: readonly string[] = PRIMARY_ALIAS_KEYS\n): number | undefined {\n  if (!isRecord(raw)) {\n    return;\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}\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;\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","export function stripNullPropertiesFromRows(\n  rows: unknown[],\n  keepNullKeys?: ReadonlySet<string>\n): 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 || keepNullKeys?.has(key)) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nexport function maybeStripNullRows(\n  rows: unknown[],\n  strip: boolean,\n  keepNullKeys?: ReadonlySet<string>\n): unknown[] {\n  return strip ? stripNullPropertiesFromRows(rows, keepNullKeys) : rows;\n}\n\n/** Relation output keys that stay on the row when `stripNulls` would drop SQL null (to-one / First `T | null`). */\nexport function keepNullKeysFromFindManySelect(\n  payload: unknown\n): ReadonlySet<string> | undefined {\n  if (payload == null || typeof payload !== \"object\" || Array.isArray(payload)) {\n    return;\n  }\n  const select = (payload as { select?: unknown }).select;\n  if (select == null || typeof select !== \"object\" || Array.isArray(select)) {\n    return;\n  }\n  const keys = new Set<string>();\n  for (const [rawKey, rawValue] of Object.entries(\n    select as Record<string, unknown>\n  )) {\n    if (\n      rawValue == null ||\n      typeof rawValue !== \"object\" ||\n      Array.isArray(rawValue) ||\n      !(\"select\" in rawValue)\n    ) {\n      continue;\n    }\n    const aliasValue = (rawValue as Record<string, unknown>).as;\n    const alias = typeof aliasValue === \"string\" ? aliasValue.trim() : \"\";\n    keys.add(alias || rawKey);\n  }\n  return keys.size > 0 ? keys : undefined;\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 =\n  | \"gateway\"\n  | \"cloudflare-edge\"\n  | \"sqlite-local\";\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\" | \"sqlite\" | \"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 * 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  | \"eq\"\n  | \"neq\"\n  | \"gt\"\n  | \"gte\"\n  | \"lt\"\n  | \"lte\"\n  | \"like\"\n  | \"ilike\";\n\nexport interface AthenaSourceAst {\n  alias?: string;\n  kind: \"table\";\n  modelId?: string;\n  schema?: string;\n  table: string;\n}\n\nexport interface AthenaFieldRefAst {\n  field: string;\n  source?: string;\n}\n\nexport type AthenaRelationPredicate =\n  | \"some\"\n  | \"none\"\n  | \"every\"\n  | \"exists\"\n  | \"is\"\n  | \"isNot\";\n\nexport interface AthenaRelationConditionAst {\n  filter?: AthenaConditionAst;\n  kind: \"relation\";\n  predicate: AthenaRelationPredicate;\n  relation: string;\n  via?: string;\n}\n\nexport interface AthenaResolvedRelationConditionAst {\n  direction?: \"forward\" | \"reverse\";\n  descriptor: {\n    cardinality: \"one-to-one\" | \"one-to-many\" | \"many-to-one\" | \"many-to-many\";\n    constraint?: string;\n    from: { columns: string[]; schema?: string; table: string };\n    id: string;\n    junction?: {\n      fromColumns: string[];\n      schema?: string;\n      table: string;\n      toColumns: string[];\n    };\n    name: string;\n    to: { columns: string[]; schema?: string; table: string };\n  };\n  filter?: AthenaConditionAst;\n  junctionAlias?: string;\n  kind: \"resolved-relation\";\n  predicate: AthenaRelationPredicate;\n  relation: string;\n  target: {\n    alias: string;\n    modelId?: string;\n    schema?: string;\n    table: string;\n  };\n}\n\nexport interface AthenaColumnSelectionAst {\n  alias?: string;\n  column: string;\n  kind: \"column\";\n}\n\nexport interface AthenaRelationSelectionAst {\n  alias?: string;\n  constraintHint?: string;\n  join?: \"inner\";\n  kind: \"relation\";\n  legacyVia?: string;\n  query: AthenaSelectQueryAst;\n  relation: string;\n  selection?: \"natural\" | \"first\";\n  via?: string;\n}\n\nexport type AthenaSelectedFieldAst =\n  | AthenaColumnSelectionAst\n  | AthenaRelationSelectionAst;\n\nexport interface AthenaSelectionAst {\n  fields: AthenaSelectedFieldAst[];\n}\n\nexport interface AthenaCompareConditionAst {\n  field: AthenaFieldRefAst;\n  kind: \"compare\";\n  operator: AthenaCompareOperator;\n  value: unknown;\n}\n\nexport interface AthenaInConditionAst {\n  field: AthenaFieldRefAst;\n  kind: \"in\";\n  values: unknown[];\n}\n\nexport interface AthenaIsNullConditionAst {\n  field: AthenaFieldRefAst;\n  kind: \"is-null\";\n  negated?: boolean;\n}\n\nexport interface AthenaBooleanConditionAst {\n  field: AthenaFieldRefAst;\n  kind: \"is-true\" | \"is-false\";\n}\n\nexport interface AthenaContainmentConditionAst {\n  field: AthenaFieldRefAst;\n  kind: \"contains\" | \"contained-by\";\n  value: unknown;\n}\n\nexport interface AthenaLogicalConditionAst {\n  conditions: AthenaConditionAst[];\n  kind: \"and\" | \"or\";\n}\n\nexport interface AthenaNotConditionAst {\n  condition: AthenaConditionAst;\n  kind: \"not\";\n}\n\nexport type AthenaConditionAst =\n  | AthenaCompareConditionAst\n  | AthenaInConditionAst\n  | AthenaIsNullConditionAst\n  | AthenaBooleanConditionAst\n  | AthenaContainmentConditionAst\n  | AthenaLogicalConditionAst\n  | AthenaNotConditionAst\n  | AthenaRelationConditionAst\n  | AthenaResolvedRelationConditionAst;\n\nexport interface AthenaOrderAst {\n  direction: \"asc\" | \"desc\";\n  field: AthenaFieldRefAst;\n  nulls?: \"first\" | \"last\";\n}\n\nexport interface AthenaPaginationAst {\n  limit?: number;\n  offset?: number;\n  page?: number;\n  pageSize?: number;\n}\n\nexport interface AthenaDistinctAst {\n  on?: AthenaFieldRefAst[];\n}\n\nexport interface AthenaSelectQueryAst {\n  cardinality: AthenaQueryCardinality;\n  distinct?: AthenaDistinctAst;\n  filter?: AthenaConditionAst;\n  kind: \"select\";\n  orderBy?: AthenaOrderAst[];\n  pagination?: AthenaPaginationAst;\n  selection: AthenaSelectionAst;\n  source: AthenaSourceAst;\n}\n\nexport type AthenaQueryAst = AthenaSelectQueryAst;\n\nexport function isAthenaSelectQueryAst(\n  value: unknown\n): value is AthenaSelectQueryAst {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const record = value as Record<string, unknown>;\n  return (\n    record.kind === \"select\" &&\n    Boolean(record.source) &&\n    typeof record.source === \"object\" &&\n    Boolean(record.selection) &&\n    typeof record.selection === \"object\"\n  );\n}\n\nfunction collectConditionTables(\n  condition?: AthenaConditionAst\n): AthenaSourceAst[] {\n  if (!condition) {\n    return [];\n  }\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    return condition.conditions.flatMap((child) =>\n      collectConditionTables(child)\n    );\n  }\n  if (condition.kind === \"not\") {\n    return collectConditionTables(condition.condition);\n  }\n  if (condition.kind === \"relation\") {\n    return collectConditionTables(condition.filter);\n  }\n  if (condition.kind === \"resolved-relation\") {\n    return [\n      {\n        alias: condition.target.alias,\n        kind: \"table\",\n        modelId: condition.target.modelId,\n        schema: condition.target.schema,\n        table: condition.target.table,\n      },\n      ...collectConditionTables(condition.filter),\n    ];\n  }\n  return [];\n}\n\nexport function collectAstTables(ast: AthenaSelectQueryAst): AthenaSourceAst[] {\n  const tables: AthenaSourceAst[] = [ast.source];\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"relation\") {\n      tables.push(...collectAstTables(field.query));\n    }\n  }\n  tables.push(...collectConditionTables(ast.filter));\n  return tables;\n}\n\nexport function selectionHasRelations(ast: AthenaSelectQueryAst): boolean {\n  return ast.selection.fields.some((field) => field.kind === \"relation\");\n}\n","export type AthenaQueryErrorCode =\n  | \"ATHENA_QUERY_INVALID_SOURCE\"\n  | \"ATHENA_QUERY_UNKNOWN_FIELD\"\n  | \"ATHENA_QUERY_UNKNOWN_RELATION\"\n  | \"ATHENA_QUERY_AMBIGUOUS_RELATION\"\n  | \"ATHENA_QUERY_INVALID_PAGINATION\"\n  | \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\"\n  | \"ATHENA_QUERY_INVALID_NESTING\"\n  | \"ATHENA_QUERY_INVALID_IDENTIFIER\"\n  | \"ATHENA_QUERY_INVALID_SELECTION\"\n  | \"ATHENA_QUERY_INVALID_CONDITION\"\n  | \"ATHENA_QUERY_INVALID_NORMALIZED_AST\"\n  | \"ATHENA_QUERY_COMPLEXITY_EXCEEDED\"\n  | \"ATHENA_QUERY_MAX_DEPTH_EXCEEDED\"\n  | \"ATHENA_QUERY_CYCLIC_INPUT\"\n  | \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\"\n  | \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\";\n\nexport class AthenaQueryError extends Error {\n  readonly code: AthenaQueryErrorCode;\n\n  constructor(code: AthenaQueryErrorCode, message: string) {\n    super(message);\n    this.name = \"AthenaQueryError\";\n    this.code = code;\n  }\n}\n","import type { AthenaRelationCardinality } from \"./relations.ts\";\n\nexport type AthenaRelationSelection = \"natural\" | \"first\";\nexport type AthenaRelationResultShape = \"many\" | \"at-most-one\";\n\nexport function relationResultShape(\n  cardinality: AthenaRelationCardinality,\n  selection: AthenaRelationSelection\n): AthenaRelationResultShape {\n  if (selection === \"first\") {\n    return \"at-most-one\";\n  }\n  return cardinality === \"one-to-many\" || cardinality === \"many-to-many\"\n    ? \"many\"\n    : \"at-most-one\";\n}\n\nexport function atMostOneSqlLimit(limit?: number): number {\n  return Math.min(Math.max(0, Math.trunc(limit ?? 1)), 1);\n}\n","import type {\n  AthenaGatewayCondition,\n  AthenaSortBy,\n} from \"../../gateway/types.ts\";\nimport type {\n  AthenaOrderBy,\n  AthenaRelationOrderBy,\n  AthenaRelationSelectNode,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereOperatorInput,\n} from \"../../query-ast.ts\";\nimport type {\n  AthenaCompareOperator,\n  AthenaConditionAst,\n  AthenaFieldRefAst,\n  AthenaOrderAst,\n  AthenaPaginationAst,\n  AthenaQueryCardinality,\n  AthenaRelationPredicate,\n  AthenaSelectedFieldAst,\n  AthenaSelectQueryAst,\n  AthenaSourceAst,\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  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n]);\nconst RELATION_PREDICATES = new Set<AthenaRelationPredicate>([\n  \"some\",\n  \"none\",\n  \"every\",\n  \"exists\",\n  \"is\",\n  \"isNot\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertIdentifier(value: string, label: string): string {\n  const trimmed = value.trim();\n  if (!IDENTIFIER.test(trimmed)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_IDENTIFIER\",\n      `Invalid ${label}: ${value}`\n    );\n  }\n  return trimmed;\n}\n\nexport function parseSourceName(raw: string): AthenaSourceAst {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SOURCE\",\n      \"Query source table is required\"\n    );\n  }\n  const segments = trimmed.split(\".\").map((segment) => segment.trim());\n  if (segments.some((segment) => !IDENTIFIER.test(segment))) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SOURCE\",\n      `Invalid table identifier: ${raw}`\n    );\n  }\n  if (segments.length === 1) {\n    return { kind: \"table\", table: segments[0] as string };\n  }\n  if (segments.length === 2) {\n    return {\n      kind: \"table\",\n      schema: segments[0],\n      table: segments[1] as string,\n    };\n  }\n  throw new AthenaQueryError(\n    \"ATHENA_QUERY_INVALID_SOURCE\",\n    `Table identifier is too deeply qualified: ${raw}`\n  );\n}\n\nfunction isRelationSelectNode(\n  value: unknown\n): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeSelectShape(\n  select: AthenaSelectShape,\n  parentSource: AthenaSourceAst,\n  cardinality: AthenaQueryCardinality\n): AthenaSelectedFieldAst[] {\n  if (!isRecord(select)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SELECTION\",\n      \"select must be an object\"\n    );\n  }\n\n  const columns: AthenaSelectedFieldAst[] = [];\n  const relations: AthenaSelectedFieldAst[] = [];\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n    if (rawValue === true) {\n      columns.push({\n        column: assertIdentifier(rawKey, \"select column\"),\n        kind: \"column\",\n      });\n      continue;\n    }\n    if (!isRelationSelectNode(rawValue)) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NESTING\",\n        `Unsupported select node for \"${rawKey}\"`\n      );\n    }\n    const relationName = assertIdentifier(rawKey, \"select relation\");\n    const via = rawValue.via?.trim();\n    const constraint = rawValue.constraint?.trim();\n    if (via && constraint) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_SELECTION\",\n        `Relation \"${relationName}\" cannot combine via and constraint`\n      );\n    }\n    const alias =\n      rawValue.as?.trim() ||\n      (relationName === rawKey\n        ? undefined\n        : assertIdentifier(rawKey, \"relation alias\"));\n    const nestedSource = rawValue.schema?.trim()\n      ? {\n          kind: \"table\" as const,\n          schema: assertIdentifier(rawValue.schema, \"relation schema\"),\n          table: relationName,\n        }\n      : parseSourceName(\n          relationName.includes(\".\") ? relationName : relationName\n        );\n\n    if (\n      rawValue.selection !== undefined &&\n      rawValue.selection !== \"first\"\n    ) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_SELECTION\",\n        `Relation \"${relationName}\" selection must be \"first\" when set`\n      );\n    }\n    if (\n      rawValue.selection === \"first\" &&\n      isInvalidFirstLimit(rawValue.limit)\n    ) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_SELECTION\",\n        `Relation \"${relationName}\" selection \"first\" rejects limit unless it is 1`\n      );\n    }\n    relations.push({\n      alias,\n      constraintHint: constraint,\n      join: rawValue.join === \"inner\" ? \"inner\" : undefined,\n      kind: \"relation\",\n      legacyVia: via,\n      query: {\n        cardinality: \"many\",\n        filter: normalizeWhere(rawValue.where),\n        kind: \"select\",\n        orderBy: normalizeRelationOrderBy(rawValue.orderBy),\n        pagination: normalizePagination({\n          limit: rawValue.limit,\n          offset: rawValue.offset,\n        }),\n        selection: {\n          fields: normalizeSelectShape(rawValue.select, nestedSource, \"many\"),\n        },\n        source:\n          nestedSource.table === relationName && !rawValue.schema\n            ? { kind: \"table\", table: relationName }\n            : nestedSource,\n      },\n      relation: relationName,\n      selection: rawValue.selection === \"first\" ? \"first\" : \"natural\",\n      via,\n    });\n    void parentSource;\n    void cardinality;\n  }\n\n  const fields = [...columns, ...relations];\n\n  if (fields.length === 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SELECTION\",\n      \"select requires at least one field\"\n    );\n  }\n  return fields;\n}\n\nfunction splitTopLevel(input: string, separator: string): string[] {\n  const parts: string[] = [];\n  let depth = 0;\n  let start = 0;\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index];\n    if (char === \"(\") {\n      depth += 1;\n    } else if (char === \")\") {\n      depth = Math.max(0, depth - 1);\n    } else if (char === separator && depth === 0) {\n      parts.push(input.slice(start, index));\n      start = index + 1;\n    }\n  }\n  parts.push(input.slice(start));\n  return parts.map((part) => part.trim()).filter(Boolean);\n}\n\nexport function parseSelectList(\n  raw: string,\n  parentSource: AthenaSourceAst\n): AthenaSelectedFieldAst[] {\n  const tokens = splitTopLevel(raw, \",\");\n  if (tokens.length === 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SELECTION\",\n      \"select requires at least one field\"\n    );\n  }\n\n  const fields: AthenaSelectedFieldAst[] = [];\n  for (const token of tokens) {\n    const open = token.indexOf(\"(\");\n    if (open < 0) {\n      if (token === \"*\") {\n        fields.push({ column: \"*\", kind: \"column\" });\n        continue;\n      }\n      const aliasMatch =\n        /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/.exec(\n          token\n        );\n      if (aliasMatch) {\n        fields.push({\n          alias: aliasMatch[1],\n          column: aliasMatch[2] as string,\n          kind: \"column\",\n        });\n        continue;\n      }\n      fields.push({\n        column: assertIdentifier(\n          token.split(\".\").pop() ?? token,\n          \"select column\"\n        ),\n        kind: \"column\",\n      });\n      continue;\n    }\n    if (!token.endsWith(\")\")) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_NESTING\",\n        `Malformed relation select token: ${token}`\n      );\n    }\n    const head = token.slice(0, open).trim();\n    const inner = token.slice(open + 1, -1);\n    const aliasIndex = head.indexOf(\":\");\n    const alias =\n      aliasIndex >= 0 ? head.slice(0, aliasIndex).trim() : undefined;\n    const relationToken =\n      aliasIndex >= 0 ? head.slice(aliasIndex + 1).trim() : head;\n    const bang = relationToken.indexOf(\"!\");\n    const relationPath =\n      bang >= 0 ? relationToken.slice(0, bang).trim() : relationToken;\n    const modifier = bang >= 0 ? relationToken.slice(bang + 1).trim() : \"\";\n    const innerJoin = modifier.toLowerCase() === \"inner\";\n    const nestedSource = parseSourceName(relationPath);\n    fields.push({\n      alias: alias || undefined,\n      kind: \"relation\",\n      query: {\n        cardinality: \"many\",\n        kind: \"select\",\n        selection: { fields: parseSelectList(inner, nestedSource) },\n        source: nestedSource,\n      },\n      relation: nestedSource.table,\n      selection: \"natural\",\n      constraintHint:\n        bang >= 0 && !innerJoin\n          ? assertIdentifier(\n              modifier,\n              \"relation constraint\"\n            )\n          : undefined,\n      join: innerJoin ? \"inner\" : undefined,\n    });\n  }\n  void parentSource;\n  return fields;\n}\n\nfunction fieldRef(field: string): AthenaFieldRefAst {\n  return { field: assertIdentifier(field, \"field\") };\n}\n\nfunction isRelationWhereValue(\n  value: unknown\n): value is Record<string, unknown> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  const keys = Object.keys(value).filter((key) => value[key] !== undefined);\n  if (\n    keys.some(\n      (key) =>\n        key !== \"is\" && RELATION_PREDICATES.has(key as AthenaRelationPredicate)\n    )\n  ) {\n    return true;\n  }\n  return keys.includes(\"is\") && isRecord(value.is);\n}\n\nfunction normalizeRelationPredicate(\n  relation: string,\n  value: Record<string, unknown>,\n  seen: WeakSet<object>,\n  path: string\n): AthenaConditionAst {\n  const keys = Object.keys(value).filter((key) => value[key] !== undefined);\n  const via =\n    typeof value.via === \"string\" && value.via.trim()\n      ? value.via.trim()\n      : undefined;\n  const predicateKeys = keys.filter((key) =>\n    RELATION_PREDICATES.has(key as AthenaRelationPredicate)\n  );\n  if (predicateKeys.length !== 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_CONDITION\",\n      `Relation \"${relation}\" at ${path} requires exactly one of some/none/every/exists/is/isNot`\n    );\n  }\n  const predicate = predicateKeys[0] as AthenaRelationPredicate;\n  const operand = value[predicate];\n  if (predicate === \"exists\") {\n    if (\n      operand === true ||\n      (isRecord(operand) && Object.keys(operand).length === 0)\n    ) {\n      return { kind: \"relation\", predicate, relation, via };\n    }\n    if (!isRecord(operand)) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_CONDITION\",\n        `exists at ${path}.${relation} must be true or a filter object`\n      );\n    }\n  }\n  if (operand === undefined) {\n    return { kind: \"relation\", predicate, relation, via };\n  }\n  if (isRecord(operand) && Object.keys(operand).length === 0) {\n    return { kind: \"relation\", predicate, relation, via };\n  }\n  return {\n    filter: normalizeWhere(\n      operand as AthenaWhere,\n      seen,\n      `${path}.${relation}.${predicate}`\n    ),\n    kind: \"relation\",\n    predicate,\n    relation,\n    via,\n  };\n}\n\nfunction normalizeColumnPredicate(\n  column: string,\n  value: unknown\n): AthenaConditionAst[] {\n  const field = fieldRef(column);\n  if (!isRecord(value)) {\n    if (value === null) {\n      return [{ field, kind: \"is-null\" }];\n    }\n    return [{ field, kind: \"compare\", operator: \"eq\", value }];\n  }\n\n  const conditions: AthenaConditionAst[] = [];\n  for (const [operator, operand] of Object.entries(value)) {\n    if (operand === undefined) {\n      continue;\n    }\n    if (operator === \"in\") {\n      conditions.push({\n        field,\n        kind: \"in\",\n        values: Array.isArray(operand) ? operand : [operand],\n      });\n      continue;\n    }\n    if (operator === \"contains\") {\n      conditions.push({ field, kind: \"contains\", value: operand });\n      continue;\n    }\n    if (operator === \"containedBy\") {\n      conditions.push({ field, kind: \"contained-by\", value: operand });\n      continue;\n    }\n    if (operator === \"is\") {\n      if (operand === null || operand === \"null\") {\n        conditions.push({ field, kind: \"is-null\" });\n        continue;\n      }\n      if (operand === true || operand === \"true\") {\n        conditions.push({ field, kind: \"is-true\" });\n        continue;\n      }\n      if (operand === false || operand === \"false\") {\n        conditions.push({ field, kind: \"is-false\" });\n        continue;\n      }\n    }\n    if (COMPARE_OPERATORS.has(operator as AthenaCompareOperator)) {\n      if (operator === \"eq\" && operand === null) {\n        conditions.push({ field, kind: \"is-null\" });\n        continue;\n      }\n      if (operator === \"neq\" && operand === null) {\n        conditions.push({ field, kind: \"is-null\", negated: true });\n        continue;\n      }\n      conditions.push({\n        field,\n        kind: \"compare\",\n        operator: operator as AthenaCompareOperator,\n        value: operand,\n      });\n      continue;\n    }\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n      `Unsupported where operator \"${operator}\" on \"${column}\"`\n    );\n  }\n  if (conditions.length === 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n      `where.${column} requires at least one operator`\n    );\n  }\n  return conditions;\n}\n\nexport function normalizeWhere(\n  where?: AthenaWhere | Record<string, unknown>,\n  seen: WeakSet<object> = new WeakSet<object>(),\n  path = \"where\"\n): AthenaConditionAst | undefined {\n  if (where === undefined) {\n    return;\n  }\n  if (!isRecord(where)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n      \"where must be an object\"\n    );\n  }\n  if (seen.has(where)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_CYCLIC_INPUT\",\n      `Cyclic where object at ${path}`\n    );\n  }\n  seen.add(where);\n\n  const parts: AthenaConditionAst[] = [];\n  for (const [key, value] of Object.entries(where)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\") {\n      if (!Array.isArray(value) || value.length === 0) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n          \"where.or must be a non-empty array\"\n        );\n      }\n      const orParts = value.flatMap((clause) => {\n        const normalized = normalizeWhere(\n          clause as AthenaWhere,\n          seen,\n          `${path}.or`\n        );\n        return normalized ? [normalized] : [];\n      });\n      if (orParts.length === 1) {\n        parts.push(orParts[0] as AthenaConditionAst);\n      } else if (orParts.length > 1) {\n        parts.push({ conditions: orParts, kind: \"or\" });\n      }\n      continue;\n    }\n    if (key === \"not\") {\n      const negated = normalizeWhere(value as AthenaWhere, seen, `${path}.not`);\n      if (negated) {\n        parts.push({ condition: negated, kind: \"not\" });\n      }\n      continue;\n    }\n    if (isRecord(value) && seen.has(value)) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_CYCLIC_INPUT\",\n        `Cyclic where object at ${path}.${key}`\n      );\n    }\n    if (isRelationWhereValue(value)) {\n      parts.push(normalizeRelationPredicate(key, value, seen, path));\n      continue;\n    }\n    parts.push(\n      ...normalizeColumnPredicate(\n        key,\n        value as AthenaWhereOperatorInput | unknown\n      )\n    );\n  }\n\n  if (parts.length === 0) {\n    return;\n  }\n  if (parts.length === 1) {\n    return parts[0];\n  }\n  return { conditions: parts, kind: \"and\" };\n}\n\nexport function normalizeGatewayConditions(\n  conditions?: AthenaGatewayCondition[]\n): AthenaConditionAst | undefined {\n  if (!conditions?.length) {\n    return;\n  }\n  const parts: AthenaConditionAst[] = [];\n  for (const condition of conditions) {\n    const operator = (condition.operator || \"eq\").toLowerCase();\n    const column = condition.column ?? condition.eq_column;\n    const value =\n      condition.value === undefined ? condition.eq_value : condition.value;\n    if (operator === \"or\" || operator === \"not\") {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n        `Raw \"${operator}\" expressions cannot be lifted into the Athena Query AST`\n      );\n    }\n    if (!column) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n        \"Condition requires a column\"\n      );\n    }\n    parts.push(\n      ...normalizeColumnPredicate(column, {\n        [operator === \"containedby\" ? \"containedBy\" : operator]: value,\n      })\n    );\n  }\n  if (parts.length === 1) {\n    return parts[0];\n  }\n  return { conditions: parts, kind: \"and\" };\n}\n\nexport function normalizeOrderBy(\n  orderBy?: AthenaOrderBy | AthenaSortBy | Record<string, unknown>\n): AthenaOrderAst[] | undefined {\n  if (!orderBy) {\n    return;\n  }\n  if (!isRecord(orderBy)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n      \"orderBy must be an object\"\n    );\n  }\n  if (\"field\" in orderBy && typeof orderBy.field === \"string\") {\n    return [\n      {\n        direction: orderBy.direction === \"descending\" ? \"desc\" : \"asc\",\n        field: fieldRef(orderBy.field),\n      },\n    ];\n  }\n  if (\"column\" in orderBy && orderBy.column !== undefined) {\n    return [\n      {\n        direction: orderBy.ascending === false ? \"desc\" : \"asc\",\n        field: fieldRef(String(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 AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n      \"orderBy only supports a single column in v1\"\n    );\n  }\n  const [column, input] = entries[0] as [string, unknown];\n  let direction: \"asc\" | \"desc\" = \"asc\";\n  if (input === false || input === \"desc\" || input === \"descending\") {\n    direction = \"desc\";\n  } else if (isRecord(input) && input.ascending === false) {\n    direction = \"desc\";\n  }\n  return [{ direction, field: fieldRef(column) }];\n}\n\nexport function normalizeRelationOrderBy(\n  orderBy?: AthenaRelationOrderBy | AthenaSortBy | Record<string, unknown>\n): AthenaOrderAst[] | undefined {\n  if (Array.isArray(orderBy)) {\n    const orders = orderBy.flatMap((item) => normalizeOrderBy(item) ?? []);\n    return orders.length > 0 ? orders : undefined;\n  }\n  return normalizeOrderBy(\n    orderBy as AthenaOrderBy | AthenaSortBy | Record<string, unknown> | undefined\n  );\n}\n\nfunction isInvalidFirstLimit(limit?: number): boolean {\n  return typeof limit === \"number\" && limit !== 1;\n}\n\nexport function normalizePagination(input: {\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  current_page?: number;\n  pageSize?: number;\n  page_size?: number;\n}): AthenaPaginationAst | undefined {\n  const page = input.currentPage ?? input.current_page;\n  const pageSize = input.pageSize ?? input.page_size;\n  if (\n    input.limit === undefined &&\n    input.offset === undefined &&\n    page === undefined &&\n    pageSize === undefined\n  ) {\n    return;\n  }\n  if (page !== undefined && page < 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_PAGINATION\",\n      \"current_page must be >= 1\"\n    );\n  }\n  if (pageSize !== undefined && pageSize < 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_PAGINATION\",\n      \"page_size must be >= 0\"\n    );\n  }\n  return {\n    limit: input.limit,\n    offset: input.offset,\n    page,\n    pageSize,\n  };\n}\n\nexport function canonicalizePagination(pagination?: AthenaPaginationAst): {\n  limit?: number;\n  offset?: number;\n} {\n  if (!pagination) {\n    return {};\n  }\n  let { limit, offset } = pagination;\n  if (limit === undefined && pagination.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(pagination.pageSize));\n  }\n  if (\n    offset === undefined &&\n    pagination.page !== undefined &&\n    pagination.pageSize !== undefined\n  ) {\n    offset =\n      (Math.trunc(pagination.page) - 1) *\n      Math.max(0, Math.trunc(pagination.pageSize));\n  }\n  return { limit, offset };\n}\n\nexport function normalizeFindManyInput(input: {\n  table: string;\n  select: AthenaSelectShape;\n  where?: AthenaWhere | Record<string, unknown>;\n  orderBy?: AthenaOrderBy | Record<string, unknown>;\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n  cardinality?: AthenaQueryCardinality;\n  modelId?: string;\n}): AthenaSelectQueryAst {\n  const source = parseSourceName(input.table);\n  if (input.modelId) {\n    source.modelId = input.modelId;\n  }\n  const pagination = normalizePagination({\n    currentPage: input.currentPage,\n    limit: input.limit,\n    offset: input.offset,\n    pageSize: input.pageSize,\n  });\n  return {\n    cardinality: input.cardinality ?? \"many\",\n    filter: normalizeWhere(input.where),\n    kind: \"select\",\n    orderBy: normalizeOrderBy(input.orderBy),\n    pagination,\n    selection: {\n      fields: normalizeSelectShape(\n        input.select,\n        source,\n        input.cardinality ?? \"many\"\n      ),\n    },\n    source,\n  };\n}\n\nexport function normalizeFindFirstInput(\n  input: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">\n): AthenaSelectQueryAst {\n  return normalizeFindManyInput({ ...input, cardinality: \"first\" });\n}\n\nexport function normalizeFindUniqueInput(\n  input: Omit<Parameters<typeof normalizeFindManyInput>[0], \"cardinality\">\n): AthenaSelectQueryAst {\n  return normalizeFindManyInput({ ...input, cardinality: \"unique\" });\n}\n\nexport function isFindManyAstPayload(value: unknown): value is {\n  limit?: number;\n  orderBy?: Record<string, unknown>;\n  select: AthenaSelectShape;\n  table_name: string;\n  where?: Record<string, unknown>;\n} {\n  if (!isRecord(value) || typeof value.table_name !== \"string\") {\n    return false;\n  }\n  if (!isRecord(value.select)) {\n    return false;\n  }\n  return Object.values(value.select).some(\n    (entry) => entry === true || isRelationSelectNode(entry)\n  );\n}\n\nexport function whereHasRelationPredicates(\n  value: unknown,\n  seen: WeakSet<object> = new WeakSet<object>()\n): boolean {\n  const where = isRecord(value) && \"where\" in value ? value.where : value;\n  if (!isRecord(where) || seen.has(where)) {\n    return false;\n  }\n  seen.add(where);\n  for (const [key, child] of Object.entries(where)) {\n    if (child === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(child)) {\n      if (child.some((clause) => whereHasRelationPredicates(clause, seen))) {\n        return true;\n      }\n      continue;\n    }\n    if (key === \"not\" && whereHasRelationPredicates(child, seen)) {\n      return true;\n    }\n    if (isRelationWhereValue(child)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function selectPayloadHasRelations(value: unknown): boolean {\n  if (!isRecord(value)) {\n    return false;\n  }\n  if (whereHasRelationPredicates(value)) {\n    return true;\n  }\n  if (isRecord(value.select)) {\n    return Object.values(value.select).some((entry) =>\n      isRelationSelectNode(entry)\n    );\n  }\n  if (typeof value.select === \"string\" && value.select.includes(\"(\")) {\n    return true;\n  }\n  if (typeof value.columns === \"string\" && value.columns.includes(\"(\")) {\n    return true;\n  }\n  if (\n    Array.isArray(value.columns) &&\n    value.columns.some((column) => String(column).includes(\"(\"))\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport function normalizeTransportPayload(\n  payload: unknown\n): AthenaSelectQueryAst {\n  if (!isRecord(payload)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SOURCE\",\n      \"Query payload must be an object\"\n    );\n  }\n\n  if (payload.kind === \"select\" && isRecord(payload.source)) {\n    return payload as unknown as AthenaSelectQueryAst;\n  }\n\n  const table = String(payload.table_name ?? \"\").trim();\n  if (!table) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SOURCE\",\n      \"table_name is required\"\n    );\n  }\n  const source = parseSourceName(table);\n\n  let fields: AthenaSelectedFieldAst[];\n  if (isRecord(payload.select) && !Array.isArray(payload.select)) {\n    const asShape = payload.select as AthenaSelectShape;\n    const hasRelation = Object.values(asShape).some((value) =>\n      isRelationSelectNode(value)\n    );\n    if (\n      hasRelation ||\n      Object.values(asShape).every((value) => value === true)\n    ) {\n      fields = normalizeSelectShape(asShape, source, \"many\");\n    } else {\n      fields = normalizeSelectShape(asShape, source, \"many\");\n    }\n  } else {\n    const rawColumns =\n      typeof payload.select === \"string\"\n        ? payload.select\n        : Array.isArray(payload.columns)\n          ? payload.columns.join(\",\")\n          : typeof payload.columns === \"string\"\n            ? payload.columns\n            : \"*\";\n    fields =\n      rawColumns.trim() === \"\" || rawColumns.trim() === \"*\"\n        ? [{ column: \"*\", kind: \"column\" }]\n        : parseSelectList(rawColumns, source);\n  }\n\n  return {\n    cardinality: \"many\",\n    filter:\n      normalizeWhere(payload.where as AthenaWhere | undefined) ??\n      normalizeGatewayConditions(\n        payload.conditions as AthenaGatewayCondition[] | undefined\n      ),\n    kind: \"select\",\n    orderBy: normalizeOrderBy(\n      (payload.orderBy as AthenaOrderBy | undefined) ??\n        (payload.sort_by as AthenaSortBy | undefined)\n    ),\n    pagination: normalizePagination({\n      current_page: payload.current_page as number | undefined,\n      limit: payload.limit as number | undefined,\n      offset: payload.offset as number | undefined,\n      page_size: payload.page_size as number | undefined,\n    }),\n    selection: { fields },\n    source,\n  };\n}\n","import type {\n  ModelRelationKind,\n  ModelRelationMetadata,\n} from \"../../schema/types.ts\";\nimport type { AthenaSourceAst } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\n\nexport type AthenaRelationCardinality =\n  | \"one-to-one\"\n  | \"one-to-many\"\n  | \"many-to-one\"\n  | \"many-to-many\";\n\nexport interface AthenaRelationEnd {\n  columns: string[];\n  schema?: string;\n  table: string;\n}\n\nexport interface AthenaRelationDescriptor {\n  cardinality: AthenaRelationCardinality;\n  /** Orientation used when this descriptor was resolved from a query source. */\n  direction?: \"forward\" | \"reverse\";\n  /** Canonical constraint identity, not a relation display name or catalog ID. */\n  constraint?: string;\n  /**\n   * Exact provider-native selectors accepted at the compatibility boundary.\n   * These are aliases only; canonical resolution still uses `constraint`.\n   */\n  constraintAliases?: string[];\n  from: AthenaRelationEnd;\n  id: string;\n  junction?: {\n    fromColumns: string[];\n    schema?: string;\n    table: string;\n    toColumns: string[];\n  };\n  name: string;\n  source?: \"model-metadata\" | \"provider-discovery\" | \"explicit-catalog\";\n  to: AthenaRelationEnd;\n}\n\nexport interface AthenaRelationCatalog {\n  entries: AthenaRelationDescriptor[];\n}\n\nfunction sameTable(\n  candidate: { schema?: string; table: string },\n  requested: { schema?: string; table: string }\n): boolean {\n  if (candidate.table !== requested.table) {\n    return false;\n  }\n  if (requested.schema) {\n    return candidate.schema === requested.schema;\n  }\n  return true;\n}\n\nfunction hasConstraint(\n  entry: AthenaRelationDescriptor,\n  constraintHint: string | undefined\n): boolean {\n  if (!constraintHint) {\n    return true;\n  }\n  return (\n    entry.constraint === constraintHint ||\n    entry.constraintAliases?.includes(constraintHint) === true\n  );\n}\n\nfunction hasRelationHint(\n  entry: AthenaRelationDescriptor,\n  constraintHint: string | undefined,\n  relationHint: string | undefined\n): boolean {\n  if (constraintHint) {\n    return hasConstraint(entry, constraintHint);\n  }\n  if (!relationHint) {\n    return true;\n  }\n  return (\n    entry.constraint === relationHint ||\n    entry.id === relationHint ||\n    entry.id.endsWith(`.${relationHint}`) ||\n    entry.name === relationHint\n  );\n}\n\nfunction validateRelationMetadata(entry: AthenaRelationDescriptor): void {\n  const invalid = (message: string): never => {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n      message\n    );\n  };\n  const validateEnd = (end: AthenaRelationEnd, label: string): void => {\n    if (!end.table) {\n      invalid(`Relation \"${entry.name}\" has an empty ${label} table`);\n    }\n    if (end.schema === \"\") {\n      invalid(`Relation \"${entry.name}\" has an empty ${label} schema`);\n    }\n    if (end.columns.length === 0 || end.columns.some((column) => !column)) {\n      invalid(`Relation \"${entry.name}\" has an invalid ${label} column set`);\n    }\n  };\n\n  if (!entry.id || !entry.name) {\n    invalid(`Relation metadata must include a non-empty id and name`);\n  }\n  validateCanonicalIdentity(entry.id, \"relation\", \"id\", entry.name);\n  if (entry.constraint === \"\") {\n    invalid(`Relation \"${entry.name}\" has an empty constraint identity`);\n  }\n  if (entry.constraint) {\n    validateCanonicalIdentity(\n      entry.constraint,\n      \"constraint\",\n      \"constraint\",\n      entry.name\n    );\n  }\n  validateEnd(entry.from, \"source\");\n  validateEnd(entry.to, \"target\");\n  if (entry.junction) {\n    if (!entry.junction.table || entry.junction.schema === \"\") {\n      invalid(`Relation \"${entry.name}\" has an invalid junction table`);\n    }\n    if (\n      entry.junction.fromColumns.length === 0 ||\n      entry.junction.toColumns.length === 0 ||\n      entry.junction.fromColumns.some((column) => !column) ||\n      entry.junction.toColumns.some((column) => !column)\n    ) {\n      invalid(`Relation \"${entry.name}\" has an invalid junction column set`);\n    }\n  }\n\n  const hasZeroWidthMapping = entry.junction\n    ? entry.from.columns.length === 0 ||\n      entry.junction.fromColumns.length === 0 ||\n      entry.junction.toColumns.length === 0 ||\n      entry.to.columns.length === 0\n    : entry.from.columns.length === 0 || entry.to.columns.length === 0;\n  const hasInvalidWidths = entry.junction\n    ? entry.from.columns.length !== entry.junction.fromColumns.length ||\n      entry.to.columns.length !== entry.junction.toColumns.length\n    : entry.from.columns.length !== entry.to.columns.length;\n  if (hasZeroWidthMapping || hasInvalidWidths) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n      hasZeroWidthMapping\n        ? `Relation \"${entry.name}\" has an empty mapped column set`\n        : `Relation \"${entry.name}\" has mismatched ${\n            entry.junction ? \"junction key\" : \"composite key\"\n          } widths`\n    );\n  }\n}\n\nfunction invertCardinality(\n  cardinality: AthenaRelationCardinality\n): AthenaRelationCardinality {\n  if (cardinality === \"one-to-many\") {\n    return \"many-to-one\";\n  }\n\n  if (cardinality === \"many-to-one\") {\n    return \"one-to-many\";\n  }\n  return cardinality;\n}\n\nfunction encodeIdentityComponent(value: string): string {\n  return encodeURIComponent(value).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n  );\n}\n\nfunction identityError(\n  label: string,\n  relationName?: string\n): AthenaQueryError {\n  return new AthenaQueryError(\n    \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n    relationName\n      ? `Relation \"${relationName}\" has an invalid canonical ${label}`\n      : `Canonical ${label} must be non-empty`\n  );\n}\n\nfunction validateIdentityComponent(\n  value: unknown,\n  label: string,\n  relationName?: string\n): asserts value is string {\n  if (typeof value !== \"string\" || value.length === 0) {\n    throw identityError(label, relationName);\n  }\n}\n\nexport function canonicalIdentity(\n  kind: \"relation\" | \"constraint\",\n  owner: string,\n  schema: string | undefined,\n  table: string,\n  key: string\n): string {\n  validateIdentityComponent(owner, \"owner\");\n  if (schema !== undefined) {\n    validateIdentityComponent(schema, \"schema\");\n  }\n  validateIdentityComponent(table, \"table\");\n  validateIdentityComponent(key, \"key\");\n  return `${kind}:v1/${[owner, schema ?? \"\", table, key]\n    .map(encodeIdentityComponent)\n    .join(\"/\")}`;\n}\n\nfunction validateCanonicalIdentity(\n  value: string,\n  kind: \"relation\" | \"constraint\",\n  label: string,\n  relationName: string\n): void {\n  const prefix = `${kind}:v1/`;\n  if (!value.startsWith(prefix)) {\n    return;\n  }\n\n  try {\n    const components = value\n      .slice(prefix.length)\n      .split(\"/\")\n      .map((component) => decodeURIComponent(component));\n    if (components.length !== 4) {\n      throw identityError(label, relationName);\n    }\n    const [owner, schema, table, key] = components;\n    validateIdentityComponent(owner, \"owner\", relationName);\n    validateIdentityComponent(table, \"table\", relationName);\n    validateIdentityComponent(key, \"key\", relationName);\n    if (\n      canonicalIdentity(\n        kind,\n        owner,\n        schema || undefined,\n        table,\n        key\n      ) !== value\n    ) {\n      throw identityError(label, relationName);\n    }\n  } catch (error) {\n    if (error instanceof AthenaQueryError) {\n      throw error;\n    }\n    throw identityError(label, relationName);\n  }\n}\n\nexport function isCanonicalIdentity(\n  value: unknown,\n  kind: \"relation\" | \"constraint\"\n): value is string {\n  if (typeof value !== \"string\") {\n    return false;\n  }\n  const prefix = `${kind}:v1/`;\n  if (!value.startsWith(prefix)) {\n    return false;\n  }\n  try {\n    const components = value\n      .slice(prefix.length)\n      .split(\"/\")\n      .map((component) => decodeURIComponent(component));\n    if (components.length !== 4) {\n      return false;\n    }\n    const [owner, schema, table, key] = components;\n    if (!owner || !table || !key) {\n      return false;\n    }\n    return (\n      canonicalIdentity(kind, owner, schema || undefined, table, key) === value\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction assertRelationDescriptor(\n  descriptor: AthenaRelationDescriptor\n): AthenaRelationDescriptor {\n  validateRelationMetadata(descriptor);\n  if (\n    descriptor.constraintAliases?.some(\n      (alias) =>\n        alias.length === 0 ||\n        alias === descriptor.constraint ||\n        alias.startsWith(\"constraint:v1/\") ||\n        alias.startsWith(\"relation:v1/\")\n    )\n  ) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n      `Relation \"${descriptor.name}\" has an invalid constraint alias`\n    );\n  }\n  return descriptor;\n}\n\nfunction canonicalizeConstraintSelector(\n  catalog: AthenaRelationCatalog,\n  selector: string,\n  source: AthenaSourceAst,\n  targetHint: AthenaSourceAst | undefined\n): string {\n  const scoped = catalog.entries.filter(\n    (entry) =>\n      (sameTable(entry.from, source) &&\n        (!targetHint || sameTable(entry.to, targetHint))) ||\n      (sameTable(entry.to, source) &&\n        (!targetHint || sameTable(entry.from, targetHint)))\n  );\n  const matches = scoped.filter(\n    (entry) =>\n      entry.constraint === selector ||\n      entry.constraintAliases?.includes(selector) === true\n  );\n  const identities = [\n    ...new Set(\n      matches\n        .map((entry) => entry.constraint)\n        .filter((constraint): constraint is string => Boolean(constraint))\n    ),\n  ];\n  return identities.length === 1 ? (identities[0] as string) : selector;\n}\n\nfunction sameRelationDescriptor(\n  left: AthenaRelationDescriptor,\n  right: AthenaRelationDescriptor\n): boolean {\n  const sameEnd = (leftEnd: AthenaRelationEnd, rightEnd: AthenaRelationEnd) =>\n    leftEnd.schema === rightEnd.schema &&\n    leftEnd.table === rightEnd.table &&\n    leftEnd.columns.length === rightEnd.columns.length &&\n    leftEnd.columns.every((column, index) => column === rightEnd.columns[index]);\n  const sameJunction =\n    left.junction === right.junction ||\n    (left.junction !== undefined &&\n      right.junction !== undefined &&\n      left.junction.schema === right.junction.schema &&\n      left.junction.table === right.junction.table &&\n      left.junction.fromColumns.length === right.junction.fromColumns.length &&\n      left.junction.toColumns.length === right.junction.toColumns.length &&\n      left.junction.fromColumns.every(\n        (column, index) => column === right.junction?.fromColumns[index]\n      ) &&\n      left.junction.toColumns.every(\n        (column, index) => column === right.junction?.toColumns[index]\n      ));\n  return (\n    left.cardinality === right.cardinality &&\n    left.constraint === right.constraint &&\n    left.constraintAliases?.length === right.constraintAliases?.length &&\n    left.constraintAliases?.every(\n      (alias, index) => alias === right.constraintAliases?.[index]\n    ) !== false &&\n    left.id === right.id &&\n    left.name === right.name &&\n    left.source === right.source &&\n    sameEnd(left.from, right.from) &&\n    sameEnd(left.to, right.to) &&\n    sameJunction\n  );\n}\n\nexport function catalogFromModelRelations(input: {\n  schema?: string;\n  table: string;\n  relations: Record<string, ModelRelationMetadata>;\n}): AthenaRelationCatalog {\n  const entries: AthenaRelationDescriptor[] = [];\n  for (const [name, relation] of Object.entries(input.relations)) {\n    entries.push(assertRelationDescriptor({\n        cardinality: relation.kind as ModelRelationKind,\n        constraint: canonicalIdentity(\n          \"constraint\",\n          \"model\",\n          input.schema,\n          input.table,\n          relation.constraintName ?? name\n        ),\n        constraintAliases: relation.constraintName\n          ? [relation.constraintName]\n          : undefined,\n        from: {\n          columns: relation.sourceColumns.map(String),\n          schema: input.schema,\n          table: input.table,\n        },\n        id: canonicalIdentity(\"relation\", \"model\", input.schema, input.table, name),\n        junction: relation.through\n          ? {\n              fromColumns: relation.through.sourceColumns.map(String),\n              schema: relation.through.schema,\n              table: relation.through.model,\n              toColumns: relation.through.targetColumns.map(String),\n            }\n          : undefined,\n        name,\n        source: \"model-metadata\",\n        to: {\n          columns: relation.targetColumns.map(String),\n          schema: relation.targetSchema,\n          table: relation.targetModel,\n        },\n    }));\n  }\n  return { entries };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectModels(\n  input: unknown,\n  found: Array<Record<string, unknown>>\n): void {\n  if (!isRecord(input)) {\n    return;\n  }\n  const meta = input.meta;\n  if (isRecord(meta) && Array.isArray(meta.primaryKey)) {\n    found.push(input);\n    return;\n  }\n  if (isRecord(input.models)) {\n    collectModels(input.models, found);\n    return;\n  }\n  if (isRecord(input.schemas)) {\n    collectModels(input.schemas, found);\n    return;\n  }\n  for (const value of Object.values(input)) {\n    collectModels(value, found);\n  }\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  const found: Array<Record<string, unknown>> = [];\n  collectModels(models, found);\n  const catalogs: AthenaRelationCatalog[] = [];\n  for (const model of found) {\n    const meta = isRecord(model.meta) ? model.meta : {};\n    const relations = isRecord(meta.relations)\n      ? (meta.relations as Record<string, ModelRelationMetadata>)\n      : undefined;\n    if (!relations || Object.keys(relations).length === 0) {\n      continue;\n    }\n    const tableName =\n      (typeof model.tableName === \"string\" && model.tableName) ||\n      (typeof meta.tableName === \"string\" && meta.tableName) ||\n      (typeof meta.model === \"string\" && meta.model) ||\n      \"\";\n    if (!tableName) {\n      continue;\n    }\n    const schema =\n      typeof meta.schema === \"string\" && meta.schema.trim()\n        ? meta.schema.trim()\n        : tableName.includes(\".\")\n          ? tableName.split(\".\")[0]\n          : undefined;\n    const table = tableName.includes(\".\")\n      ? (tableName.split(\".\").pop() as string)\n      : tableName;\n    catalogs.push(\n      catalogFromModelRelations({\n        relations,\n        schema,\n        table,\n      })\n    );\n  }\n  return mergeRelationCatalogs(...catalogs);\n}\n\nexport function mergeRelationCatalogs(\n  ...catalogs: Array<AthenaRelationCatalog | undefined>\n): AthenaRelationCatalog {\n  const entries: AthenaRelationDescriptor[] = [];\n  const seen = new Map<string, AthenaRelationDescriptor>();\n  for (const catalog of catalogs) {\n    if (!catalog) {\n      continue;\n    }\n    for (const entry of catalog.entries) {\n      assertRelationDescriptor(entry);\n      const existing = seen.get(entry.id);\n      if (existing) {\n        if (!sameRelationDescriptor(existing, entry)) {\n          throw new AthenaQueryError(\n            \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n            `Conflicting relation metadata for ${entry.id}`\n          );\n        }\n        continue;\n      }\n      if (entry.constraint) {\n        const conflictingConstraint = [...seen.values()].find(\n          (candidate) =>\n            candidate.constraint === entry.constraint && candidate.id !== entry.id\n        );\n        if (conflictingConstraint) {\n          throw new AthenaQueryError(\n            \"ATHENA_QUERY_RELATION_METADATA_CONFLICT\",\n            `Conflicting relation metadata for ${entry.constraint}`\n          );\n        }\n      }\n      seen.set(entry.id, entry);\n      entries.push(entry);\n    }\n  }\n  return { entries };\n}\n\nexport function resolveRelation(input: {\n  catalog: AthenaRelationCatalog;\n  constraintId?: string;\n  constraintHint?: string;\n  name: string;\n  relationId?: string;\n  relationHint?: string;\n  source: AthenaSourceAst;\n  targetHint?: AthenaSourceAst;\n}): AthenaRelationDescriptor {\n  for (const entry of input.catalog.entries) {\n    assertRelationDescriptor(entry);\n  }\n  const constraintHint = input.constraintHint\n    ? canonicalizeConstraintSelector(\n        input.catalog,\n        input.constraintHint,\n        input.source,\n        input.targetHint\n      )\n    : undefined;\n  const relationHint = input.relationHint\n    ? canonicalizeConstraintSelector(\n        input.catalog,\n        input.relationHint,\n        input.source,\n        input.targetHint\n      )\n    : undefined;\n  const identityEntries = input.catalog.entries.filter(\n    (entry) =>\n      (!input.relationId || entry.id === input.relationId) &&\n      (!input.constraintId || entry.constraint === input.constraintId)\n  );\n  const candidates =\n    input.relationId || input.constraintId\n      ? identityEntries\n      : input.catalog.entries;\n  const byName = candidates.filter(\n    (entry) =>\n      entry.name === input.name &&\n      hasRelationHint(entry, constraintHint, relationHint) &&\n      sameTable(entry.from, input.source) &&\n      (!input.targetHint || sameTable(entry.to, input.targetHint))\n  );\n  if (byName.length === 1) {\n    validateRelationMetadata(byName[0] as AthenaRelationDescriptor);\n    return {\n      ...(byName[0] as AthenaRelationDescriptor),\n      direction: \"forward\",\n    };\n  }\n  if (byName.length > 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n      `Relation \"${input.name}\" is ambiguous on ${input.source.table}`\n    );\n  }\n\n  const targetTable = input.targetHint?.table ?? input.name;\n  const targetSchema = input.targetHint?.schema;\n  const outgoing = candidates.filter(\n    (entry) =>\n      hasRelationHint(entry, constraintHint, relationHint) &&\n      sameTable(entry.from, input.source) &&\n      sameTable(entry.to, { schema: targetSchema, table: targetTable })\n  );\n  if (outgoing.length === 1) {\n    validateRelationMetadata(outgoing[0] as AthenaRelationDescriptor);\n    return {\n      ...(outgoing[0] as AthenaRelationDescriptor),\n      direction: \"forward\",\n    };\n  }\n  if (outgoing.length > 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n      `Multiple foreign keys from ${input.source.table} to ${targetTable}`\n    );\n  }\n\n  const incoming = candidates.filter(\n    (entry) =>\n      hasRelationHint(entry, constraintHint, relationHint) &&\n      sameTable(entry.to, input.source) &&\n      sameTable(entry.from, { schema: targetSchema, table: targetTable })\n  );\n  if (incoming.length === 1) {\n    const found = incoming[0] as AthenaRelationDescriptor;\n    validateRelationMetadata(found);\n    return {\n      ...found,\n      cardinality: invertCardinality(found.cardinality),\n      direction: \"reverse\",\n      from: found.to,\n      name: input.name,\n      junction: found.junction\n        ? {\n            ...found.junction,\n            fromColumns: [...found.junction.toColumns],\n            toColumns: [...found.junction.fromColumns],\n          }\n        : undefined,\n      to: found.from,\n    };\n  }\n  if (incoming.length > 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_AMBIGUOUS_RELATION\",\n      `Multiple foreign keys from ${targetTable} to ${input.source.table}`\n    );\n  }\n\n  throw new AthenaQueryError(\n    \"ATHENA_QUERY_UNKNOWN_RELATION\",\n    `Unknown relation \"${input.name}\" on ${input.source.schema ? `${input.source.schema}.` : \"\"}${input.source.table}`\n  );\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  condition: AthenaConditionAst | undefined,\n  visit: (node: AthenaConditionAst) => void\n): void {\n  if (!condition) {\n    return;\n  }\n  visit(condition);\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    for (const child of condition.conditions) {\n      walkConditions(child, visit);\n    }\n  }\n  if (condition.kind === \"not\") {\n    walkConditions(condition.condition, visit);\n  }\n  if (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n    walkConditions(condition.filter, visit);\n  }\n}\n\nexport const DEFAULT_QUERY_MAX_NESTED_DEPTH = 8;\nexport const DEFAULT_QUERY_MAX_RELATIONS = 32;\n\nfunction countConditionRelations(condition?: AthenaConditionAst): number {\n  if (!condition) {\n    return 0;\n  }\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    return condition.conditions.reduce(\n      (total, child) => total + countConditionRelations(child),\n      0\n    );\n  }\n  if (condition.kind === \"not\") {\n    return countConditionRelations(condition.condition);\n  }\n  if (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n    return 1 + countConditionRelations(condition.filter);\n  }\n  return 0;\n}\n\nfunction measureConditionDepth(condition?: AthenaConditionAst): number {\n  if (!condition) {\n    return 0;\n  }\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    return condition.conditions.reduce(\n      (depth, child) => Math.max(depth, measureConditionDepth(child)),\n      0\n    );\n  }\n  if (condition.kind === \"not\") {\n    return measureConditionDepth(condition.condition);\n  }\n  if (condition.kind === \"relation\" || condition.kind === \"resolved-relation\") {\n    return 1 + measureConditionDepth(condition.filter);\n  }\n  return 0;\n}\n\nexport function countAstRelations(ast: AthenaSelectQueryAst): number {\n  let count = countConditionRelations(ast.filter);\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"relation\") {\n      count += 1 + countAstRelations(field.query);\n    }\n  }\n  return count;\n}\n\nexport function measureAstDepth(ast: AthenaSelectQueryAst): number {\n  let depth = measureConditionDepth(ast.filter);\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"relation\") {\n      depth = Math.max(depth, 1 + measureAstDepth(field.query));\n    }\n  }\n  return depth;\n}\n\nexport function validateQueryComplexity(\n  ast: AthenaSelectQueryAst,\n  limits?: { maxNestedDepth?: number; maxRelations?: number }\n): void {\n  const maxDepth = limits?.maxNestedDepth ?? DEFAULT_QUERY_MAX_NESTED_DEPTH;\n  const maxRelations = limits?.maxRelations ?? DEFAULT_QUERY_MAX_RELATIONS;\n  if (measureAstDepth(ast) > maxDepth) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_NESTING\",\n      `Nested relation depth exceeds ${maxDepth}`\n    );\n  }\n  if (countAstRelations(ast) > maxRelations) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_NESTING\",\n      `Relation count exceeds ${maxRelations}`\n    );\n  }\n}\n\nexport function validateSelectQueryAst(ast: AthenaSelectQueryAst): void {\n  if (!IDENTIFIER.test(ast.source.table)) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SOURCE\",\n      `Invalid source table: ${ast.source.table}`\n    );\n  }\n  if (ast.selection.fields.length === 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SELECTION\",\n      \"select requires at least one field\"\n    );\n  }\n  if (ast.pagination?.page !== undefined && ast.pagination.page < 1) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_PAGINATION\",\n      \"page must be >= 1\"\n    );\n  }\n  validateQueryComplexity(ast);\n}\n\nexport function validatePlanAgainstCapabilities(\n  plan: AthenaQueryPlan,\n  capabilities: AthenaQueryCapabilityMatrix\n): void {\n  if (planHasUnsupportedNulls(plan) && !capabilities.nullsOrdering) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `NULL ordering is unsupported on ${capabilities.backend}`\n    );\n  }\n\n  walkConditions(plan.filter, (node) => {\n    if (\n      node.kind === \"compare\" &&\n      node.operator === \"ilike\" &&\n      !capabilities.ilike\n    ) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n        `ilike is unsupported on ${capabilities.backend}`\n      );\n    }\n    if (\n      (node.kind === \"contains\" || node.kind === \"contained-by\") &&\n      !capabilities.jsonbContainment\n    ) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNSUPPORTED_OPERATOR\",\n        `${node.kind} is unsupported on ${capabilities.backend}`\n      );\n    }\n  });\n\n  const hasRelations = plan.selection.some(\n    (field) => field.kind === \"relation\"\n  );\n  if (hasRelations && !capabilities.nestedRelations) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Nested relations are unsupported on ${capabilities.backend}`\n    );\n  }\n\n  let hasRelationalPredicate = false;\n  let hasManyToMany = false;\n  walkConditions(plan.filter, (node) => {\n    if (node.kind === \"relation\" || node.kind === \"resolved-relation\") {\n      hasRelationalPredicate = true;\n      if (\n        node.kind === \"resolved-relation\" &&\n        node.descriptor.cardinality === \"many-to-many\"\n      ) {\n        hasManyToMany = true;\n      }\n    }\n  });\n  for (const field of plan.selection) {\n    if (\n      field.kind === \"relation\" &&\n      field.descriptor.cardinality === \"many-to-many\"\n    ) {\n      hasManyToMany = true;\n    }\n  }\n  if (hasRelationalPredicate && !capabilities.relationalPredicates) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Relational predicates are unsupported on ${capabilities.backend}`\n    );\n  }\n  if (hasManyToMany && !capabilities.manyToManyRelations) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Many-to-many relations are unsupported on ${capabilities.backend}`\n    );\n  }\n\n  for (const field of plan.selection) {\n    if (field.kind === \"relation\") {\n      if (field.selection === \"first\" && !capabilities.relationFirstSelection) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n          `Relation first selection is unsupported on ${capabilities.backend}`\n        );\n      }\n      const childLimit = field.plan.pagination?.limit;\n      if (\n        field.selection === \"first\" &&\n        typeof childLimit === \"number\" &&\n        childLimit !== 1\n      ) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_INVALID_SELECTION\",\n          `Relation \"${field.alias}\" selection \"first\" rejects limit unless it is 1`\n        );\n      }\n      validatePlanAgainstCapabilities(field.plan, capabilities);\n    }\n  }\n}\n\nfunction planHasUnsupportedNulls(plan: AthenaQueryPlan): boolean {\n  return Boolean(plan.orderBy?.some((order) => order.nulls));\n}\n","import type {\n  AthenaConditionAst,\n  AthenaOrderAst,\n  AthenaPaginationAst,\n  AthenaQueryCardinality,\n  AthenaSelectQueryAst,\n  AthenaSourceAst,\n} from \"./ast.ts\";\nimport { selectionHasRelations } from \"./ast.ts\";\nimport { AthenaQueryError } from \"./errors.ts\";\nimport type {\n  AthenaRelationCatalog,\n  AthenaRelationDescriptor,\n} from \"./relations.ts\";\nimport { resolveRelation } from \"./relations.ts\";\nimport { validateSelectQueryAst } from \"./validate.ts\";\n\nexport interface AthenaResolvedSource {\n  alias: string;\n  modelId?: string;\n  schema?: string;\n  table: string;\n}\n\nexport interface AthenaResolvedColumn {\n  alias?: string;\n  column: string;\n  kind: \"column\";\n}\n\nexport interface AthenaResolvedRelation {\n  alias: string;\n  descriptor: AthenaRelationDescriptor;\n  direction?: \"forward\" | \"reverse\";\n  junctionAlias?: string;\n  join?: \"inner\";\n  kind: \"relation\";\n  plan: AthenaQueryPlan;\n  selection: \"natural\" | \"first\";\n}\n\nexport type AthenaResolvedSelectionField =\n  | AthenaResolvedColumn\n  | AthenaResolvedRelation;\n\nexport interface AthenaQueryPlan {\n  ast: AthenaSelectQueryAst;\n  cardinality: AthenaQueryCardinality;\n  filter?: AthenaConditionAst;\n  kind: \"resolved-select\";\n  orderBy?: AthenaOrderAst[];\n  pagination?: AthenaPaginationAst;\n  selection: AthenaResolvedSelectionField[];\n  source: AthenaResolvedSource;\n}\n\nclass AthenaQueryAliasAllocator {\n  private seq = 0;\n\n  next(prefix: string): string {\n    this.seq += 1;\n    return `${prefix}${this.seq}`;\n  }\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  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  return (value as { kind?: unknown }).kind === \"resolved-select\";\n}\n\ninterface ResolveQueryPlanOptions {\n  aliases?: AthenaQueryAliasAllocator;\n  aliasPrefix?: string;\n  catalog?: AthenaRelationCatalog;\n  path?: string[];\n}\n\nexport function resolveAthenaQueryPlan(\n  ast: AthenaSelectQueryAst,\n  options?: ResolveQueryPlanOptions\n): AthenaQueryPlan {\n  return resolveQueryPlan(ast, options);\n}\n\nexport function resolveQueryPlan(\n  ast: AthenaSelectQueryAst,\n  options?: ResolveQueryPlanOptions\n): AthenaQueryPlan {\n  validateSelectQueryAst(ast);\n  const aliases = options?.aliases ?? new AthenaQueryAliasAllocator();\n  const path = options?.path ?? [ast.source.table];\n  const source: AthenaResolvedSource = {\n    alias: ast.source.alias ?? aliases.next(options?.aliasPrefix ?? \"t\"),\n    modelId: ast.source.modelId,\n    schema: ast.source.schema,\n    table: ast.source.table,\n  };\n\n  const selection: AthenaResolvedSelectionField[] = [];\n  const outputAliases = new Set<string>();\n  for (const field of ast.selection.fields) {\n    if (field.kind === \"column\") {\n      const outputAlias = field.alias ?? field.column;\n      if (outputAliases.has(outputAlias)) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_INVALID_SELECTION\",\n          `Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`\n        );\n      }\n      outputAliases.add(outputAlias);\n      selection.push({\n        alias: field.alias,\n        column: field.column,\n        kind: \"column\",\n      });\n      continue;\n    }\n\n    if (!options?.catalog) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_UNKNOWN_RELATION\",\n        `Relation \"${field.relation}\" cannot be resolved without relation metadata at ${path.join(\".\")}.${field.relation}`\n      );\n    }\n\n    const descriptor = resolveRelation({\n      catalog: options.catalog,\n      constraintHint: field.constraintHint,\n      name: field.relation,\n      source: ast.source,\n      targetHint:\n        field.query.source.schema ||\n        field.query.source.table !== field.relation\n          ? field.query.source\n          : undefined,\n    });\n\n    const nestedSource: AthenaSourceAst = {\n      ...field.query.source,\n      schema: field.query.source.schema ?? descriptor.to.schema,\n      table: descriptor.to.table,\n    };\n\n    const outputAlias = field.alias ?? field.relation;\n    if (outputAliases.has(outputAlias)) {\n      throw new AthenaQueryError(\n        \"ATHENA_QUERY_INVALID_SELECTION\",\n        `Duplicate output alias \"${outputAlias}\" at ${path.join(\".\")}`\n      );\n    }\n    outputAliases.add(outputAlias);\n\n    const nestedPlan = resolveQueryPlan(\n      {\n        ...field.query,\n        source: nestedSource,\n      },\n      {\n        aliases,\n        aliasPrefix: \"r\",\n        catalog: options.catalog,\n        path: [...path, outputAlias],\n      }\n    );\n\n    selection.push({\n      alias: outputAlias,\n      descriptor,\n      direction: descriptor.direction,\n      junctionAlias:\n        descriptor.cardinality === \"many-to-many\"\n          ? aliases.next(\"j\")\n          : undefined,\n      join: field.join,\n      kind: \"relation\",\n      plan: nestedPlan,\n      selection: field.selection === \"first\" ? \"first\" : \"natural\",\n    });\n  }\n\n  if (selection.length === 0) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_INVALID_SELECTION\",\n      \"Resolved selection is empty\"\n    );\n  }\n\n  return {\n    ast,\n    cardinality: ast.cardinality,\n    filter: ast.filter\n      ? resolveCondition(ast.filter, {\n          aliases,\n          catalog: options?.catalog,\n          path,\n          source: ast.source,\n        })\n      : undefined,\n    kind: \"resolved-select\",\n    orderBy: ast.orderBy,\n    pagination: ast.pagination,\n    selection,\n    source,\n  };\n}\n\nfunction resolveCondition(\n  condition: AthenaConditionAst,\n  context: {\n    aliases: AthenaQueryAliasAllocator;\n    catalog?: AthenaRelationCatalog;\n    path: string[];\n    source: AthenaSourceAst;\n  }\n): AthenaConditionAst {\n  if (condition.kind === \"and\" || condition.kind === \"or\") {\n    return {\n      conditions: condition.conditions.map((child) =>\n        resolveCondition(child, context)\n      ),\n      kind: condition.kind,\n    };\n  }\n  if (condition.kind === \"not\") {\n    return {\n      condition: resolveCondition(condition.condition, context),\n      kind: \"not\",\n    };\n  }\n  if (condition.kind === \"resolved-relation\") {\n    return {\n      ...condition,\n      filter: condition.filter\n        ? resolveCondition(condition.filter, {\n            ...context,\n            source: {\n              kind: \"table\",\n              modelId: condition.target.modelId,\n              schema: condition.target.schema,\n              table: condition.target.table,\n            },\n          })\n        : undefined,\n    };\n  }\n  if (condition.kind !== \"relation\") {\n    return condition;\n  }\n\n  if (!context.catalog) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNKNOWN_RELATION\",\n      `Relation \"${condition.relation}\" cannot be resolved without relation metadata at ${context.path.join(\".\")}.${condition.relation}`\n    );\n  }\n\n  const descriptor = resolveRelation({\n    catalog: context.catalog,\n    name: condition.relation,\n    relationHint: condition.via,\n    source: context.source,\n  });\n  const target = {\n    alias: context.aliases.next(\"r\"),\n    schema: descriptor.to.schema,\n    table: descriptor.to.table,\n  };\n  const nestedSource: AthenaSourceAst = {\n    kind: \"table\",\n    schema: descriptor.to.schema,\n    table: descriptor.to.table,\n  };\n  return {\n    descriptor,\n    direction: descriptor.direction,\n    filter: condition.filter\n      ? resolveCondition(condition.filter, {\n          aliases: context.aliases,\n          catalog: context.catalog,\n          path: [...context.path, condition.relation],\n          source: nestedSource,\n        })\n      : undefined,\n    junctionAlias:\n      descriptor.cardinality === \"many-to-many\"\n        ? context.aliases.next(\"j\")\n        : undefined,\n    kind: \"resolved-relation\",\n    predicate: condition.predicate,\n    relation: condition.relation,\n    target,\n  };\n}\n\nexport function planHasRelations(plan: AthenaQueryPlan): boolean {\n  return (\n    plan.selection.some((field) => field.kind === \"relation\") ||\n    selectionHasRelations(plan.ast)\n  );\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  SQLITE_LOCAL_QUERY_CAPABILITIES,\n} from \"./capabilities.ts\";\nexport type { AthenaQueryErrorCode } from \"./errors.ts\";\nexport { AthenaQueryError } from \"./errors.ts\";\nexport {\n  atMostOneSqlLimit,\n  relationResultShape,\n  type AthenaRelationResultShape,\n} from \"./relation-result-shape.ts\";\nexport {\n  canonicalizePagination,\n  isFindManyAstPayload,\n  normalizeFindFirstInput,\n  normalizeFindManyInput,\n  normalizeFindUniqueInput,\n  normalizeGatewayConditions,\n  normalizeOrderBy,\n  normalizePagination,\n  normalizeRelationOrderBy,\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 type {\n  RelationalPredicateV1,\n  RelationalComparisonOperatorV1,\n  RelationalQueryRequestV1,\n  RelationalRelationQuantifierV1,\n  RelationalRelationPredicateV1,\n  RelationalRelationReferenceV1,\n  RelationalRelationSelectionV1,\n  RelationalQueryRequestV2,\n  RelationalRelationSelectionV2,\n} from \"./relational-serializer.ts\";\nexport {\n  serializeRelationalQueryV1,\n  serializeRelationalQueryV2,\n} from \"./relational-serializer.ts\";\nexport {\n  catalogFromModelRelations,\n  catalogFromModels,\n  canonicalIdentity,\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","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 splitQualifiedIdentifier(\n  identifier: string\n): Array<{ quoted: boolean; value: string }> {\n  const segments: Array<{ quoted: boolean; value: string }> = [];\n  let index = 0;\n\n  while (index <= identifier.length) {\n    if (identifier[index] === '\"') {\n      const start = index;\n      index += 1;\n      let closed = false;\n      while (index < identifier.length) {\n        if (identifier[index] !== '\"') {\n          index += 1;\n          continue;\n        }\n        if (identifier[index + 1] === '\"') {\n          index += 2;\n          continue;\n        }\n        index += 1;\n        closed = true;\n        break;\n      }\n      if (!closed || (index < identifier.length && identifier[index] !== \".\")) {\n        return [{ quoted: false, value: identifier }];\n      }\n      segments.push({ quoted: true, value: identifier.slice(start, index) });\n    } else {\n      const start = index;\n      while (index < identifier.length && identifier[index] !== \".\") {\n        index += 1;\n      }\n      segments.push({ quoted: false, value: identifier.slice(start, index) });\n    }\n\n    if (index === identifier.length) {\n      break;\n    }\n    index += 1;\n  }\n\n  return segments;\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 splitQualifiedIdentifier(identifier)\n    .map(({ quoted, value }) => (quoted ? value : quoteIdentifierSegment(value)))\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","/**\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  AthenaConditionArrayValue,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n} from \"../gateway/types.ts\";\nimport type {\n  AthenaComparePredicateNode,\n  AthenaPredicateNode,\n} from \"./descriptor.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\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): AthenaComparePredicateNode {\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 {\n      column,\n      kind: \"compare\",\n      operator,\n      value: values,\n    };\n  }\n  return {\n    column,\n    kind: \"compare\",\n    operator,\n    value: coerceScalar(rawValue),\n  };\n}\n\nfunction parseBooleanList(\n  expression: string,\n  join: \"and\" | \"or\"\n): AthenaPredicateNode {\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    const [first] = children;\n    if (first) {\n      return first;\n    }\n  }\n  return { kind: join, nodes: children };\n}\n\nfunction parseTerm(token: string): AthenaPredicateNode {\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 { kind: \"not\", node: parseBooleanList(notCall[1] ?? \"\", \"and\") };\n  }\n  if (/^not\\./i.test(trimmed)) {\n    return { kind: \"not\", node: parseTerm(trimmed.slice(4)) };\n  }\n\n  const grouped = unwrapBalancedParens(trimmed);\n  if (grouped !== null) {\n    return parseBooleanList(grouped, \"and\");\n  }\n\n  return parsePredicate(trimmed);\n}\n\nexport function parseLegacyBooleanExpression(\n  expression: string,\n  root: \"and\" | \"or\" = \"or\"\n): AthenaPredicateNode {\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\nfunction isConditionValue(\n  value: unknown\n): value is AthenaConditionValue | AthenaConditionArrayValue {\n  if (\n    value === null ||\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return true;\n  }\n  return (\n    Array.isArray(value) &&\n    value.every(\n      (item) =>\n        item === null ||\n        typeof item === \"string\" ||\n        typeof item === \"number\" ||\n        typeof item === \"boolean\"\n    )\n  );\n}\n\nexport function athenaPredicateToGatewayCondition(\n  predicate: AthenaComparePredicateNode\n): AthenaGatewayCondition {\n  if (\n    typeof predicate.column !== \"string\" ||\n    !SIMPLE_OPERATORS.has(predicate.operator as AthenaConditionOperator) ||\n    !isConditionValue(predicate.value)\n  ) {\n    throw new LegacyBooleanParseError(\n      \"Legacy boolean predicate could not be projected to a gateway condition\"\n    );\n  }\n  return {\n    column: predicate.column,\n    operator: predicate.operator as AthenaConditionOperator,\n    value: predicate.value,\n  };\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 === \"compare\") {\n    return [athenaPredicateToGatewayCondition(tree)];\n  }\n  if (\n    tree.kind === \"or\" &&\n    tree.nodes.every((child) => child.kind === \"compare\")\n  ) {\n    return tree.nodes.map((child) =>\n      athenaPredicateToGatewayCondition(child)\n    );\n  }\n  throw new LegacyBooleanParseError(\n    \"Nested .or() groups require parseLegacyBooleanExpression\"\n  );\n}\n\nexport function compileAthenaPredicateNode(\n  node: AthenaPredicateNode,\n  compilePredicate: (predicate: AthenaComparePredicateNode) => string\n): string {\n  switch (node.kind) {\n    case \"compare\":\n      return compilePredicate(node);\n    case \"and\":\n      return `(${node.nodes.map((child) => compileAthenaPredicateNode(child, compilePredicate)).join(\" AND \")})`;\n    case \"or\":\n      return `(${node.nodes.map((child) => compileAthenaPredicateNode(child, compilePredicate)).join(\" OR \")})`;\n    case \"not\":\n      return `(NOT (${compileAthenaPredicateNode(node.node, compilePredicate)}))`;\n    default:\n      throw new LegacyBooleanParseError(\"Unknown Athena predicate 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  athenaPredicateToGatewayCondition,\n  compileAthenaPredicateNode,\n  LegacyBooleanParseError,\n  parseLegacyBooleanExpression,\n} from \"../../query/legacy-boolean.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\nimport { normalizeSqliteBindValue } from \"../../sqlite-local/binds.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 = compileAthenaPredicateNode(tree, (predicate) => {\n        const clause = conditionToWhere(\n          athenaPredicateToGatewayCondition(predicate)\n        );\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  return normalizeSqliteBindValue(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  type AthenaConditionAst,\n  AthenaQueryError,\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 {\n  atMostOneSqlLimit,\n  relationResultShape,\n} from \"../../query/engine/relation-result-shape.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  effectivePlan?: AthenaQueryPlan\n): string {\n  if (condition.predicate === \"every\" && !condition.filter) {\n    return \"TRUE\";\n  }\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  const effectiveFilters = effectivePlan\n    ? compileEffectivePlanFilters(effectivePlan, binder)\n    : condition.filter\n      ? [compileCondition(condition.filter, child, binder)]\n      : [];\n  if (effectiveFilters.length > 0) {\n    const inner = effectiveFilters.join(\" AND \");\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 compileEffectivePlanFilters(\n  plan: AthenaQueryPlan,\n  binder: Binder\n): string[] {\n  return [\n    ...(plan.filter\n      ? [compileCondition(plan.filter, plan.source, binder)]\n      : []),\n    ...compileInnerRelationFilters(plan, binder),\n  ];\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 compileInnerRelationFilters(\n  plan: AthenaQueryPlan,\n  binder: Binder\n): string[] {\n  return plan.selection.flatMap((field) => {\n    if (field.kind !== \"relation\" || field.join !== \"inner\") {\n      return [];\n    }\n    const child = field.plan;\n    return [\n      compileRelationPredicate(\n        {\n          descriptor: field.descriptor,\n          filter: child.filter,\n          junctionAlias: field.junctionAlias,\n          kind: \"resolved-relation\",\n          predicate: \"exists\",\n          relation: field.descriptor.name,\n          target: {\n            alias: child.source.alias,\n            modelId: child.source.modelId,\n            schema: child.source.schema,\n            table: child.source.table,\n          },\n        },\n        plan.source,\n        binder,\n        child\n      ),\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(plan: AthenaQueryPlan, binder: Binder): string {\n  const pairs: string[] = [];\n  for (const field of plan.selection) {\n    if (field.kind === \"column\") {\n      const key = field.alias ?? field.column;\n      pairs.push(\n        `'${key.replace(/'/g, \"''\")}'`,\n        qualifyColumn(plan.source.alias, field.column)\n      );\n      continue;\n    }\n    const key = field.alias;\n    pairs.push(\n      `'${key.replace(/'/g, \"''\")}'`,\n      `json(${compileRelationValue(plan, field, binder)})`\n    );\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 compileRelationValue(\n  plan: AthenaQueryPlan,\n  field: Extract<AthenaResolvedSelectionField, { kind: \"relation\" }>,\n  binder: Binder\n): string {\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, binder);\n  const filters = [joinSql, ...compileEffectivePlanFilters(child, binder)];\n  const page = canonicalizePagination(child.pagination);\n  const childOrder = child.orderBy?.length\n    ? ` ORDER BY ${child.orderBy\n        .map(\n          (order) =>\n            `${qualifyColumn(child.source.alias, order.field.field)} ${order.direction === \"desc\" ? \"DESC\" : \"ASC\"}`\n        )\n        .join(\", \")}`\n    : \"\";\n  const resultShape = relationResultShape(\n    field.descriptor.cardinality,\n    field.selection\n  );\n  const limit =\n    resultShape === \"many\"\n      ? page.limit === undefined\n        ? \"\"\n        : ` LIMIT ${Math.max(0, Math.trunc(page.limit))}`\n      : ` LIMIT ${atMostOneSqlLimit(page.limit)}`;\n  const offset =\n    page.offset === undefined\n      ? \"\"\n      : ` OFFSET ${Math.max(0, Math.trunc(page.offset))}`;\n  const inner = `SELECT ${objectExpr} AS __athena_rel FROM ${fromSql} WHERE ${filters.join(\" AND \")}${childOrder}${limit}${offset}`;\n  if (resultShape === \"many\") {\n    return `COALESCE((SELECT json_group_array(json(__athena_rel)) FROM (${inner})), '[]')`;\n  }\n  return `(SELECT __athena_rel FROM (${inner}))`;\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    parts.push(\n      `${compileRelationValue(plan, field, binder)} AS ${quoteIdent(field.alias)}`\n    );\n  }\n  return parts.join(\", \");\n}\n\nexport function compileD1Ast(plan: AthenaQueryPlan): D1CompiledSql {\n  if (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  const where = [\n    ...compileInnerRelationFilters(plan, binder),\n    ...(plan.filter\n      ? [compileCondition(plan.filter, plan.source, binder)]\n      : []),\n  ];\n  if (where.length > 0) {\n    parts.push(`WHERE ${where.join(\" AND \")}`);\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","function isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\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\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\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\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]);\nconst WITH_TERMINAL_KEYWORDS = new Set([\n  \"SELECT\",\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n  \"VALUES\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n]);\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    if (WITH_TERMINAL_KEYWORDS.has(upper)) {\n      return keyword;\n    }\n    i = end - 1;\n  }\n  return null;\n}\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\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    if (MUTATION_LEAD_KEYWORDS.has(upper)) {\n      return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n    }\n  }\n  return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n}\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\";\nexport {\n  sqlContainsKeywordOutsideLiterals,\n  sqlFirstKeywordOutsideLiterals,\n  sqlLeadStatementKeyword,\n  sqlTerminalKeywordAfterWith,\n  statementExpectsResultRows,\n} from \"./statement-classifier.ts\";\nimport { statementExpectsResultRows } from \"./statement-classifier.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\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  AthenaRelationCatalog,\n  AthenaRelationDescriptor,\n} from \"../../query/engine/index.ts\";\nimport { canonicalIdentity } 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 = canonicalIdentity(\n        \"relation\",\n        \"d1\",\n        undefined,\n        table,\n        constraintId\n      );\n      const constraint = canonicalIdentity(\n        \"constraint\",\n        \"d1\",\n        undefined,\n        table,\n        constraintId\n      );\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        constraint,\n        constraintAliases: [constraintId],\n        from: { columns: [fromCol], table },\n        id,\n        name: toTable,\n        source: \"provider-discovery\",\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  resetQueryPlanAliases,\n  resolveQueryPlan,\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 { 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 { 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 {\n  keepNullKeysFromFindManySelect,\n  maybeStripNullRows,\n} from \"../../result/strip-null-properties.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 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\"\n      ? callOptions.stripNulls\n      : true;\n  const rows = maybeStripNullRows(\n    slice.flatMap((item) => (Array.isArray(item.results) ? item.results : [])),\n    strip,\n    keepNullKeysFromFindManySelect(operation.payload)\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(\n                operation.payload as AthenaFetchPayload\n              );\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 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 { resolveMutationAffectedRows } from \"../../result/mutation-meta.ts\";\nimport {\n  keepNullKeysFromFindManySelect,\n  maybeStripNullRows,\n} from \"../../result/strip-null-properties.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { CLOUDFLARE_EDGE_BASE_URL } from \"../types.ts\";\nimport {\n  compileD1StructuredFetch,\n  needsD1AstPipeline,\n} from \"./compile-fetch.ts\";\nimport {\n  type D1RunnerBatchResult,\n  type D1RunnerQueryResult,\n  executeD1Batch,\n  executeD1Query,\n} from \"./runner.ts\";\nimport {\n  compileD1Count,\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n  extractAthenaCount,\n} from \"./sql.ts\";\nimport { rewritePostgresSqlForSqlite } from \"./sql-rewrite.ts\";\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;\n      }\n      const segment = listSlice.slice(from, to);\n      const m = nameRe.exec(segment);\n      if (!m) {\n        return;\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;\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;\n  }\n  if (!hasPaginationBounds(payload)) {\n    // order_without_bounds is raised by the compiler\n    return;\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;\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}\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 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    keepNullKeys?: ReadonlySet<string>\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          keepNullKeys\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, keepNullKeys);\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    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        const keepNullKeys = keepNullKeysFromFindManySelect(payload);\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, keepNullKeys);\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          keepNullKeys\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    transactions,\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 =\n  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;\n  }\n  const key = value.trim().toLowerCase();\n  if (!key) {\n    return;\n  }\n  const mapped = ATHENA_EXECUTION_MODE_ALIASES[key as AthenaExecutionModeInput];\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}\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 * 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","import type { AthenaChatConfig, AthenaClientConfig } from \"../contracts.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport {\n  ATHENA_ENV_DB_URL_KEYS,\n  ATHENA_ENV_URL_KEYS,\n} from \"../../env/index.ts\";\nimport {\n  athenaAuthConfig,\n  isDisabledAthenaAuthConfig,\n  isLocalAthenaAuthConfig,\n} from \"../../auth/config.ts\";\nimport {\n  getLocalObjectStore,\n  isLocalStorageConfig,\n} from \"../../storage/runtime.ts\";\nimport type { R2BucketLike } from \"../../cloudflare/types.ts\";\nimport { CLOUDFLARE_EDGE_BASE_URL } from \"../../cloudflare/types.ts\";\n\nexport function athenaChatConfig(\n  chat: boolean | AthenaChatConfig | undefined,\n): AthenaChatConfig | undefined {\n  return chat === undefined || chat === false || chat === true\n    ? undefined\n    : chat;\n}\n\nexport function normalizeOptional(\n  value: string | null | undefined,\n): string | undefined {\n  const normalized = value?.trim();\n  return normalized || undefined;\n}\n\nexport function isD1Binding(value: unknown): value is { prepare: unknown } {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as { prepare?: unknown }).prepare === \"function\",\n  );\n}\n\nexport function isR2Binding(value: unknown): value is R2BucketLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as R2BucketLike).put === \"function\" &&\n      typeof (value as R2BucketLike).get === \"function\",\n  );\n}\n\nexport function isEdgeLocalSentinelUrl(url: string | undefined): boolean {\n  return Boolean(\n    url &&\n      (url === CLOUDFLARE_EDGE_BASE_URL ||\n        url.startsWith(\"https://athena.local/\") ||\n        url.startsWith(\"http://athena.local/\")),\n  );\n}\n\nfunction readFirstEnvHttpUrl(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = normalizeOptional(env?.[key]);\n    if (!value) {\n      continue;\n    }\n    try {\n      const url = new URL(value);\n      if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n        return value;\n      }\n    } catch {\n      continue;\n    }\n  }\n}\n\nexport function resolveUnifiedRemoteRoot(\n  config: Pick<AthenaClientConfig, \"env\" | \"url\">,\n): string | undefined {\n  return (\n    normalizeOptional(config.url) ??\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_URL_KEYS)\n  );\n}\n\nexport function hasRemoteDbGatewayUrl<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const dbUrl =\n    normalizeOptional(config.db?.url) ??\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_DB_URL_KEYS);\n  return Boolean(dbUrl && !isEdgeLocalSentinelUrl(dbUrl));\n}\n\nexport function hasExplicitRemoteHttpApiKeyNeed<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const authDisabled = isDisabledAthenaAuthConfig(config.auth);\n  const authLocal = isLocalAthenaAuthConfig(config.auth);\n  const authObject = athenaAuthConfig(config.auth);\n  return Boolean(\n    (!(authDisabled || authLocal) &&\n      (normalizeOptional(authObject?.url) ||\n        readFirstEnvHttpUrl(config.env, [\n          \"ATHENA_AUTH_URL\",\n          \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n        ]))) ||\n      normalizeOptional(config.storage?.url) ||\n      readFirstEnvHttpUrl(config.env, [\n        \"ATHENA_STORAGE_URL\",\n        \"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n      ]) ||\n      normalizeOptional(athenaChatConfig(config.chat)?.url) ||\n      readFirstEnvHttpUrl(config.env, [\n        \"ATHENA_CHAT_URL\",\n        \"NEXT_PUBLIC_ATHENA_CHAT_URL\",\n      ]) ||\n      normalizeOptional(config.billing?.url),\n  );\n}\n\nexport function hasRemoteHttpServices<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const authObject = athenaAuthConfig(config.auth);\n  return Boolean(\n    resolveUnifiedRemoteRoot(config) ||\n      hasRemoteDbGatewayUrl(config) ||\n      (!isDisabledAthenaAuthConfig(config.auth) &&\n        (normalizeOptional(authObject?.url) ||\n          readFirstEnvHttpUrl(\n            config.env,\n            [\"ATHENA_AUTH_URL\", \"NEXT_PUBLIC_ATHENA_AUTH_URL\"],\n          ))) ||\n      normalizeOptional(config.storage?.url) ||\n      readFirstEnvHttpUrl(\n        config.env,\n        [\"ATHENA_STORAGE_URL\", \"NEXT_PUBLIC_ATHENA_STORAGE_URL\"],\n      ) ||\n      normalizeOptional(athenaChatConfig(config.chat)?.url) ||\n      readFirstEnvHttpUrl(\n        config.env,\n        [\"ATHENA_CHAT_URL\", \"NEXT_PUBLIC_ATHENA_CHAT_URL\"],\n      ) ||\n      normalizeOptional(config.billing?.url),\n  );\n}\n\nexport function hasRemoteHttpStorage<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  return Boolean(\n    normalizeOptional(config.storage?.url) ||\n      readFirstEnvHttpUrl(\n        config.env,\n        [\"ATHENA_STORAGE_URL\", \"NEXT_PUBLIC_ATHENA_STORAGE_URL\"],\n      ) ||\n      resolveUnifiedRemoteRoot(config),\n  );\n}\n\nexport function hasRemoteAuthService<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  if (\n    isDisabledAthenaAuthConfig(config.auth) ||\n    isLocalAthenaAuthConfig(config.auth)\n  ) {\n    return false;\n  }\n  const authObject = athenaAuthConfig(config.auth);\n  return Boolean(\n    normalizeOptional(authObject?.url) ||\n      readFirstEnvHttpUrl(\n        config.env,\n        [\"ATHENA_AUTH_URL\", \"NEXT_PUBLIC_ATHENA_AUTH_URL\"],\n      ) ||\n      resolveUnifiedRemoteRoot(config),\n  );\n}\n\nexport function hasChatSessionCredentials(\n  chat?: boolean | AthenaChatConfig,\n): boolean {\n  const options = athenaChatConfig(chat);\n  return Boolean(\n    normalizeOptional(options?.bearerToken) ??\n      normalizeOptional(options?.cookie) ??\n      normalizeOptional(options?.sessionToken),\n  );\n}\n\nexport function isRemoteAuthOnlyClient<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const authObject = athenaAuthConfig(config.auth);\n  if (\n    isDisabledAthenaAuthConfig(config.auth) ||\n    isLocalAthenaAuthConfig(config.auth) ||\n    !normalizeOptional(authObject?.url) ||\n    config.gatewayTransport\n  ) {\n    return false;\n  }\n  return !(\n    normalizeOptional(config.url) ||\n    normalizeOptional(config.db?.url) ||\n    normalizeOptional(config.db?.pgUri) ||\n    normalizeOptional(config.databaseUrl) ||\n    normalizeOptional(config.storage?.url) ||\n    (isLocalStorageConfig(config.storage) &&\n      Boolean(\n        getLocalObjectStore(config.storage) ||\n          normalizeOptional(config.storage.root),\n      )) ||\n    normalizeOptional(athenaChatConfig(config.chat)?.url) ||\n    normalizeOptional(config.billing?.url) ||\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_URL_KEYS) ||\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_DB_URL_KEYS) ||\n    readFirstEnvHttpUrl(\n      config.env,\n      [\"ATHENA_STORAGE_URL\", \"NEXT_PUBLIC_ATHENA_STORAGE_URL\"],\n    ) ||\n    readFirstEnvHttpUrl(\n      config.env,\n      [\"ATHENA_CHAT_URL\", \"NEXT_PUBLIC_ATHENA_CHAT_URL\"],\n    )\n  );\n}\n","import type {\n  QueryOperationV1,\n  QueryRequestV1,\n  QueryValueV1,\n} from \"../query/contract-v1.ts\";\nimport type { AthenaSqliteBindValue } from \"./contracts.ts\";\n\nexport type AthenaCompiledQueryTarget = \"sqlite-local\";\n\nexport type AthenaCompiledOperation =\n  | \"select\"\n  | \"insert\"\n  | \"update\"\n  | \"delete\"\n  | \"raw\"\n  | \"rpc\";\n\nexport type AthenaCompiledMutability = \"read\" | \"write\";\n\nexport type AthenaCompiledResultShape =\n  | \"rows\"\n  | \"affected_only\"\n  | \"opaque\"\n  | \"http_body\";\n\nexport type AthenaCompiledCardinality =\n  | \"zero_or_more\"\n  | \"at_most_one\"\n  | \"exactly_one\"\n  | \"affected_count\"\n  | \"opaque\";\n\nexport type AthenaCompiledBackendProfile =\n  | \"postgres_native\"\n  | \"postgres_neon\"\n  | \"postgres_supabase\"\n  | \"sqlite_local\"\n  | \"cloudflare_d1\"\n  | \"scylla\"\n  | \"postgrest\";\n\nexport interface AthenaCompiledQuery {\n  readonly version: 1;\n  readonly sql: string;\n  readonly params: readonly QueryValueV1[];\n  readonly operation: AthenaCompiledOperation;\n  readonly mutability: AthenaCompiledMutability;\n  readonly result_shape: AthenaCompiledResultShape;\n  readonly expected_cardinality: AthenaCompiledCardinality;\n  readonly returning: \"none\" | \"star\" | { columns: string[] };\n  readonly backend_profile: AthenaCompiledBackendProfile;\n  readonly validation: {\n    readonly level: \"full\" | \"syntax_only\";\n    readonly warnings?: readonly string[];\n  };\n  readonly compiler: {\n    readonly crate_name: string;\n    readonly profile: AthenaCompiledBackendProfile;\n  };\n}\n\nexport interface AthenaCanonicalQueryCompiler {\n  compile(\n    request: QueryRequestV1<QueryOperationV1>,\n    target: AthenaCompiledQueryTarget,\n  ): Promise<AthenaCompiledQuery>;\n}\n\nexport function createHostCanonicalQueryCompiler(\n  compile: AthenaCanonicalQueryCompiler[\"compile\"],\n): AthenaCanonicalQueryCompiler {\n  return { compile };\n}\n\nconst RUNTIME_FIELDS = [\n  \"credentials\",\n  \"uri\",\n  \"url\",\n  \"pool\",\n  \"cookie\",\n  \"timeout_ms\",\n  \"signal\",\n  \"transaction\",\n  \"executor\",\n] as const;\n\nexport function assertCompiledQueryV1(value: unknown): AthenaCompiledQuery {\n  if (!value || typeof value !== \"object\") {\n    throw new Error(\"canonical compiler returned a non-object compiled query\");\n  }\n  const compiled = value as Record<string, unknown>;\n  for (const field of RUNTIME_FIELDS) {\n    if (field in compiled) {\n      throw new Error(`CompiledQueryV1 must not carry runtime field ${field}`);\n    }\n  }\n  if (compiled.version !== 1 || typeof compiled.sql !== \"string\") {\n    throw new Error(\"canonical compiler returned an invalid CompiledQueryV1\");\n  }\n  if (compiled.compiler && typeof compiled.compiler === \"object\") {\n    const crateName = (compiled.compiler as { crate_name?: unknown }).crate_name;\n    if (crateName !== \"athena-query\") {\n      throw new Error(\"canonical compiler identity must be athena-query\");\n    }\n  }\n  return compiled as unknown as AthenaCompiledQuery;\n}\n\nexport function compiledQueryParamToBind(value: QueryValueV1): AthenaSqliteBindValue {\n  if (\"null\" in value) return null;\n  if (\"bool\" in value) return value.bool;\n  if (\"integer\" in value) return value.integer;\n  if (\"number\" in value) return value.number;\n  if (\"float\" in value) return Number(value.float);\n  if (\"text\" in value) return value.text;\n  if (\"bytes\" in value) return Uint8Array.from(value.bytes);\n  return JSON.stringify(value.json);\n}\n","import type {\n  AthenaCompareOperator,\n  AthenaConditionAst,\n  AthenaFieldRefAst,\n  AthenaSelectQueryAst,\n} from \"./engine/ast.ts\";\nimport { AthenaQueryError } from \"./engine/errors.ts\";\n\nexport type QueryValueV1 =\n  | { null: null }\n  | { bool: boolean }\n  | { integer: number }\n  | { number: string }\n  | { float: string }\n  | { text: string }\n  | { bytes: number[] }\n  | { json: JsonValue };\n\nexport type CompareRightV1 =\n  | { none: null }\n  | { value: QueryValueV1 }\n  | { values: QueryValueV1[] };\n\nexport type PredicateV1 =\n  | { kind: \"true\" }\n  | { kind: \"false\" }\n  | {\n      kind: \"comparison\";\n      column: string;\n      operator:\n        | \"eq\"\n        | \"neq\"\n        | \"gt\"\n        | \"gte\"\n        | \"lt\"\n        | \"lte\"\n        | \"like\"\n        | \"ilike\"\n        | \"is_null\"\n        | \"is_not_null\"\n        | \"in\"\n        | \"not_in\"\n        | \"contains\"\n        | \"contained_by\";\n      right: CompareRightV1;\n    }\n  | { kind: \"and\"; conditions: PredicateV1[] }\n  | { kind: \"or\"; conditions: PredicateV1[] }\n  | { kind: \"not\"; condition: PredicateV1 };\n\nexport type RowValueV1 =\n  | { value: QueryValueV1 }\n  | { default: null };\n\nexport type ReturningV1 =\n  | \"none\"\n  | \"star\"\n  | { columns: string[] };\n\nexport type MutationSafetyV1 = \"allow_unfiltered\" | \"require_filter\";\n\nexport interface SelectQueryV1 {\n  kind: \"select\";\n  from: { schema: string | null; name: string };\n  selection: { columns: string[] } | \"all\";\n  predicate: PredicateV1;\n  order_by: Array<{\n    column: string;\n    direction: \"asc\" | \"desc\";\n    nulls: \"first\" | \"last\" | null;\n  }>;\n  pagination: { limit: number | null; offset: number | null };\n  for_update: boolean;\n}\n\nexport interface InsertQueryV1 {\n  kind: \"insert\";\n  into: { schema: string | null; name: string };\n  columns: string[];\n  rows: RowValueV1[][];\n  returning: ReturningV1;\n}\n\nexport interface UpdateQueryV1 {\n  kind: \"update\";\n  table: { schema: string | null; name: string };\n  assignments: Array<{ column: string; value: RowValueV1 }>;\n  predicate: PredicateV1;\n  returning: ReturningV1;\n  safety: MutationSafetyV1;\n}\n\nexport interface DeleteQueryV1 {\n  kind: \"delete\";\n  table: { schema: string | null; name: string };\n  predicate: PredicateV1;\n  returning: ReturningV1;\n  safety: MutationSafetyV1;\n}\n\nexport type QueryOperationV1 =\n  | SelectQueryV1\n  | InsertQueryV1\n  | UpdateQueryV1\n  | DeleteQueryV1;\n\nexport interface QueryRequestV1<\n  TOperation extends QueryOperationV1 = SelectQueryV1,\n> {\n  version: 1;\n  operation: TOperation;\n}\n\nexport type JsonValue =\n  | null\n  | boolean\n  | number\n  | string\n  | JsonValue[]\n  | { [key: string]: JsonValue };\n\nfunction unsupported(message: string): never {\n  throw new AthenaQueryError(\"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\", message);\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n  if (value === null) {\n    return null;\n  }\n  if (typeof value === \"string\" || typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) {\n      unsupported(\"Query V1 cannot encode non-finite numeric values\");\n    }\n    return value;\n  }\n  if (value instanceof Uint8Array) {\n    unsupported(\n      \"Query V1 bytes must be encoded as a scalar value, not nested JSON\"\n    );\n  }\n  if (Array.isArray(value)) {\n    return value.map(toJsonValue);\n  }\n  if (typeof value === \"object\") {\n    const result: { [key: string]: JsonValue } = {};\n    for (const [key, entry] of Object.entries(value)) {\n      result[key] = toJsonValue(entry);\n    }\n    return result;\n  }\n  unsupported(`Query V1 cannot encode value of type ${typeof value}`);\n}\n\nexport function toQueryValue(value: unknown): QueryValueV1 {\n  if (value === null) {\n    return { null: null };\n  }\n  if (value instanceof Uint8Array) {\n    return { bytes: Array.from(value) };\n  }\n  if (typeof value === \"boolean\") {\n    return { bool: value };\n  }\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) {\n      unsupported(\"Query V1 cannot encode non-finite numeric values\");\n    }\n    if (Number.isSafeInteger(value)) {\n      return { integer: value };\n    }\n    return Number.isInteger(value)\n      ? { number: String(value) }\n      : { float: String(value) };\n  }\n  if (typeof value === \"string\") {\n    return { text: value };\n  }\n  if (value === undefined || typeof value === \"bigint\" || typeof value === \"symbol\") {\n    unsupported(`Query V1 cannot encode value of type ${typeof value}`);\n  }\n  return { json: toJsonValue(value) };\n}\n\nfunction fieldName(field: AthenaFieldRefAst): string {\n  if (field.source) {\n    unsupported(`Query V1 does not support qualified field \"${field.field}\"`);\n  }\n  return field.field;\n}\n\nfunction compareOperator(\n  operator: AthenaCompareOperator\n): Extract<PredicateV1, { kind: \"comparison\" }>[\"operator\"] {\n  return operator;\n}\n\nfunction toPredicate(condition?: AthenaConditionAst): PredicateV1 {\n  if (!condition) {\n    return { kind: \"true\" };\n  }\n  switch (condition.kind) {\n    case \"and\":\n      return {\n        kind: \"and\",\n        conditions: condition.conditions.map(toPredicate),\n      };\n    case \"or\":\n      return {\n        kind: \"or\",\n        conditions: condition.conditions.map(toPredicate),\n      };\n    case \"not\":\n      return { kind: \"not\", condition: toPredicate(condition.condition) };\n    case \"compare\":\n      return {\n        kind: \"comparison\",\n        column: fieldName(condition.field),\n        operator: compareOperator(condition.operator),\n        right: { value: toQueryValue(condition.value) },\n      };\n    case \"in\":\n      return {\n        kind: \"comparison\",\n        column: fieldName(condition.field),\n        operator: \"in\",\n        right: { values: condition.values.map(toQueryValue) },\n      };\n    case \"is-null\":\n      return {\n        kind: \"comparison\",\n        column: fieldName(condition.field),\n        operator: condition.negated ? \"is_not_null\" : \"is_null\",\n        right: { none: null },\n      };\n    case \"is-true\":\n    case \"is-false\":\n      return {\n        kind: \"comparison\",\n        column: fieldName(condition.field),\n        operator: \"eq\",\n        right: { value: { bool: condition.kind === \"is-true\" } },\n      };\n    case \"contains\":\n    case \"contained-by\":\n      return {\n        kind: \"comparison\",\n        column: fieldName(condition.field),\n        operator: condition.kind === \"contains\" ? \"contains\" : \"contained_by\",\n        right: { value: toQueryValue(condition.value) },\n      };\n    case \"relation\":\n    case \"resolved-relation\":\n      return unsupported(\n        \"Query V1 does not support relation predicates; use the compatibility projection\"\n      );\n    default: {\n      const exhaustive: never = condition;\n      return exhaustive;\n    }\n  }\n}\n\nfunction pagination(ast: AthenaSelectQueryAst) {\n  const source = ast.pagination;\n  const limit =\n    source?.limit ??\n    source?.pageSize ??\n    (ast.cardinality === \"first\" || ast.cardinality === \"unique\" ? 1 : null);\n  const offset =\n    source?.offset ??\n    (source?.page && source?.pageSize\n      ? (source.page - 1) * source.pageSize\n      : null);\n  return {\n    limit: paginationNumber(limit, \"limit\"),\n    offset: paginationNumber(offset, \"offset\"),\n  };\n}\n\nfunction paginationNumber(value: number | null, name: string): number | null {\n  if (value === null) {\n    return null;\n  }\n  if (\n    !Number.isSafeInteger(value) ||\n    value < 0\n  ) {\n    unsupported(`Query V1 pagination ${name} must be a non-negative integer`);\n  }\n  return value;\n}\n\nexport function serializeQueryRequestV1(\n  ast: AthenaSelectQueryAst\n): QueryRequestV1 {\n  const fields = ast.selection.fields.map((field) => {\n    if (field.kind !== \"column\") {\n      unsupported(\n        \"Query V1 does not support relation selections; use the compatibility projection\"\n      );\n    }\n    if (field.alias !== undefined) {\n      unsupported(\n        \"Query V1 does not support aliased fields; use the compatibility projection\"\n      );\n    }\n    return field.column;\n  });\n\n  return {\n    version: 1,\n    operation: {\n      kind: \"select\",\n      from: { name: ast.source.table, schema: ast.source.schema ?? null },\n      selection:\n        fields.length === 0 || fields.includes(\"*\")\n          ? \"all\"\n          : { columns: fields },\n      predicate: toPredicate(ast.filter),\n      order_by: (ast.orderBy ?? []).map((order) => ({\n        column: fieldName(order.field),\n        direction: order.direction,\n        nulls: order.nulls ?? null,\n      })),\n      pagination: pagination(ast),\n      for_update: false,\n    },\n  };\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport {\n  type CompareRightV1,\n  type PredicateV1,\n  type QueryOperationV1,\n  type QueryRequestV1,\n  type QueryValueV1,\n  type ReturningV1,\n  toQueryValue,\n} from \"../query/contract-v1.ts\";\n\n/**\n * Narrow legacy CRUD -> Query V1 projection for contract inspection.\n *\n * Query V1 projector only. Rust `athena-query` remains the sole SQL compiler.\n */\n\nexport interface AthenaSqliteProjectionOptions {\n  readonly returning?: boolean;\n}\n\nexport type AthenaSqliteOperation =\n  | { kind: \"fetch\"; payload: AthenaFetchPayload }\n  | { kind: \"insert\"; payload: AthenaInsertPayload }\n  | { kind: \"update\"; payload: AthenaUpdatePayload }\n  | { kind: \"delete\"; payload: AthenaDeletePayload };\n\nconst IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_$]*$/;\n\nfunction identifier(value: string | undefined): string {\n  const trimmed = value?.trim() ?? \"\";\n  if (!IDENTIFIER.test(trimmed)) {\n    throw new Error(\"Unsupported SQLite identifier.\");\n  }\n  return trimmed;\n}\n\nfunction tableRef(name: string | undefined): { schema: null; name: string } {\n  return { schema: null, name: identifier(name) };\n}\n\nfunction returning(value: boolean | undefined): ReturningV1 {\n  return value ? \"star\" : \"none\";\n}\n\nfunction compareRight(value: unknown): CompareRightV1 {\n  if (value === null || value === undefined) {\n    return { none: null };\n  }\n  if (Array.isArray(value)) {\n    return { values: value.map(toQueryValue) };\n  }\n  return { value: toQueryValue(value) };\n}\n\nfunction conditionColumn(condition: AthenaGatewayCondition): string {\n  const column = condition.column ?? condition.eq_column;\n  return identifier(column);\n}\n\nfunction predicateForCondition(condition: AthenaGatewayCondition): PredicateV1 {\n  const operator = condition.operator;\n  if (operator === \"or\") {\n    const value = condition.value ?? condition.eq_value;\n    if (!Array.isArray(value)) {\n      throw new Error(\"SQLite OR conditions require an array.\");\n    }\n    return {\n      kind: \"or\",\n      conditions: value.map((entry) =>\n        predicateForCondition(entry as unknown as AthenaGatewayCondition),\n      ),\n    };\n  }\n  if (operator === \"not\") {\n    const value = condition.value ?? condition.eq_value;\n    if (!Array.isArray(value) || value.length !== 1) {\n      throw new Error(\"SQLite NOT conditions require one condition.\");\n    }\n    return {\n      kind: \"not\",\n      condition: predicateForCondition(\n        value[0] as unknown as AthenaGatewayCondition,\n      ),\n    };\n  }\n  const column = conditionColumn(condition);\n  const value =\n    condition.value === undefined ? condition.eq_value : condition.value;\n  switch (operator) {\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\":\n    case \"contains\":\n    case \"containedBy\":\n      return {\n        kind: \"comparison\",\n        column,\n        operator: operator === \"containedBy\" ? \"contained_by\" : operator,\n        right: compareRight(value),\n      };\n    case \"is\":\n      return {\n        kind: \"comparison\",\n        column,\n        operator: value === null || value === undefined ? \"is_null\" : \"eq\",\n        right:\n          value === null || value === undefined\n            ? { none: null }\n            : { value: toQueryValue(value) },\n      };\n    case \"in\":\n      return {\n        kind: \"comparison\",\n        column,\n        operator: \"in\",\n        right: {\n          values: Array.isArray(value)\n            ? value.map(toQueryValue)\n            : [toQueryValue(value)],\n        },\n      };\n    default:\n      throw new Error(`Unsupported SQLite condition operator: ${operator}`);\n  }\n}\n\nfunction predicate(\n  conditions: readonly AthenaGatewayCondition[] | undefined,\n): PredicateV1 {\n  if (!conditions?.length) return { kind: \"true\" };\n  const values = conditions.map(predicateForCondition);\n  return values.length === 1 ? values[0] : { kind: \"and\", conditions: values };\n}\n\nfunction mutationPredicate(\n  conditions: readonly AthenaGatewayCondition[] | undefined,\n  resourceId?: string | null,\n): PredicateV1 {\n  const values = [...(conditions ?? [])];\n  if (\n    resourceId !== undefined &&\n    resourceId !== null &&\n    !values.some((condition) => {\n      const column = condition.column ?? condition.eq_column;\n      return column === \"id\" || column === \"resource_id\";\n    })\n  ) {\n    values.unshift({ column: \"id\", operator: \"eq\", value: resourceId });\n  }\n  return predicate(values);\n}\n\nfunction selection(\n  columns: string[] | string | undefined,\n): \"all\" | { columns: string[] } {\n  if (!columns) return \"all\";\n  const values = (Array.isArray(columns) ? columns : columns.split(\",\"))\n    .map((column) => column.trim())\n    .filter(Boolean);\n  if (!values.length || values.includes(\"*\")) return \"all\";\n  return { columns: values.map(identifier) };\n}\n\nfunction rowValue(\n  value: unknown,\n  defaultToNull: boolean,\n): { value: QueryValueV1 } | { default: null } {\n  if (value === undefined && !defaultToNull) return { default: null };\n  return { value: toQueryValue(value === undefined ? null : value) };\n}\n\nfunction insertRequest(\n  payload: AthenaInsertPayload,\n  options?: AthenaSqliteProjectionOptions,\n): QueryRequestV1<QueryOperationV1> {\n  if (payload.on_conflict !== undefined || payload.update_body !== undefined) {\n    throw new Error(\n      \"SQLite Query V1 compatibility projection does not support upsert conflict semantics yet.\",\n    );\n  }\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  if (!rows.length || rows.some((row) => !row || typeof row !== \"object\")) {\n    throw new Error(\"SQLite insert values must be objects.\");\n  }\n  const records = rows as Record<string, unknown>[];\n  const columns =\n    payload.columns && payload.columns !== \"*\"\n      ? (Array.isArray(payload.columns)\n          ? payload.columns\n          : payload.columns.split(\",\")\n        ).map((column) => column.trim())\n      : Object.keys(records[0] ?? {});\n  if (!columns.length) throw new Error(\"SQLite insert requires columns.\");\n  return {\n    version: 1,\n    operation: {\n      kind: \"insert\",\n      into: tableRef(payload.table_name),\n      columns: columns.map(identifier),\n      rows: records.map((record) =>\n        columns.map((column) =>\n          rowValue(record[column], payload.default_to_null === true),\n        ),\n      ),\n      returning: returning(options?.returning),\n    },\n  };\n}\n\nexport function projectSqliteOperationToQueryV1(\n  operation: AthenaSqliteOperation,\n  options?: AthenaSqliteProjectionOptions,\n): QueryRequestV1<QueryOperationV1> {\n  switch (operation.kind) {\n    case \"fetch\": {\n      const payload = operation.payload;\n      return {\n        version: 1,\n        operation: {\n          kind: \"select\",\n          from: tableRef(payload.table_name),\n          selection: selection(payload.columns),\n          predicate: predicate(payload.conditions),\n          order_by: payload.sort_by\n            ? [\n                {\n                  column: identifier(payload.sort_by.field),\n                  direction:\n                    payload.sort_by.direction === \"descending\" ? \"desc\" : \"asc\",\n                  nulls: null,\n                },\n              ]\n            : [],\n          pagination: {\n            limit: payload.limit ?? payload.page_size ?? null,\n            offset: payload.offset ?? null,\n          },\n          for_update: false,\n        },\n      };\n    }\n    case \"insert\":\n      return insertRequest(operation.payload, options);\n    case \"update\": {\n      const values = operation.payload.update_body;\n      if (!values || typeof values !== \"object\" || Array.isArray(values)) {\n        throw new Error(\"SQLite update values must be an object.\");\n      }\n      const assignments = Object.entries(values).map(([column, value]) => ({\n        column: identifier(column),\n        value: rowValue(value, false),\n      }));\n      return {\n        version: 1,\n        operation: {\n          kind: \"update\",\n          table: tableRef(operation.payload.table_name),\n          assignments,\n          predicate: mutationPredicate(operation.payload.conditions),\n          returning: returning(options?.returning),\n          safety: \"require_filter\",\n        },\n      };\n    }\n    case \"delete\":\n      return {\n        version: 1,\n        operation: {\n          kind: \"delete\",\n          table: tableRef(operation.payload.table_name),\n          predicate: mutationPredicate(\n            operation.payload.conditions,\n            operation.payload.resource_id,\n          ),\n          returning: \"none\",\n          safety: \"require_filter\",\n        },\n      };\n  }\n}\n","import type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaUpdatePayload,\n} from \"../gateway/types.ts\";\nimport { isAthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport type {\n  AthenaInteractiveTransactionTransport,\n  AthenaResolvedTransactionOptions,\n  AthenaTransactionCapabilities,\n  AthenaTransactionOperation,\n  AthenaTransactionTransport,\n} from \"../db/transaction/types.ts\";\nimport { SQLITE_LOCAL_TRANSACTION_CAPABILITIES } from \"../db/transaction/types.ts\";\nimport type {\n  AthenaSqliteBindValue,\n  AthenaSqliteExecutor,\n  AthenaSqliteExecutionOptions,\n  AthenaSqliteExecutionResult,\n  AthenaSqliteStorageValue,\n  AthenaSqliteTransaction,\n} from \"./contracts.ts\";\nimport { athenaErrorResult } from \"../runtime/error/index.ts\";\nimport {\n  normalizeSqliteBindValue,\n  normalizeSqliteExecutionResult,\n} from \"./binds.ts\";\nimport {\n  assertCompiledQueryV1,\n  compiledQueryParamToBind,\n  type AthenaCanonicalQueryCompiler,\n  type AthenaCompiledQuery,\n} from \"./compiler.ts\";\nimport { projectSqliteOperationToQueryV1 } from \"./compatibility.ts\";\nimport { normalizeSqliteError, SqliteLocalError } from \"./errors.ts\";\n\nexport function sqliteLocalTransactionCapabilities(\n  executor: AthenaSqliteExecutor,\n  compiler?: AthenaCanonicalQueryCompiler,\n): AthenaTransactionCapabilities {\n  const structured = Boolean(compiler);\n  const mode = executor.capabilities.transactions;\n  if (structured && mode === \"interactive\") {\n    return SQLITE_LOCAL_TRANSACTION_CAPABILITIES;\n  }\n  return {\n    atomic: structured && mode !== \"none\",\n    backend: \"sqlite-local\",\n    deferrable: false,\n    interactive: false,\n    isolationLevels: [],\n    readOnly: false,\n    savepoints: false,\n  };\n}\n\nfunction rejectUnsupportedTransactionOptions(\n  options?: AthenaResolvedTransactionOptions,\n): void {\n  if (options?.isolationLevel) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"SQLite Local does not advertise PostgreSQL isolation levels.\",\n    );\n  }\n  if (options?.deferrable) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"SQLite Local does not support deferrable transactions.\",\n    );\n  }\n  if (options?.readOnly) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPTION_UNSUPPORTED\",\n      \"SQLite Local does not expose a read-only transaction API.\",\n    );\n  }\n}\n\nconst SQLITE_LOCAL_BASE_URL = \"sqlite://local\";\nconst COMPILER_REQUIRED_MESSAGE =\n  \"SQLite Local structured CRUD requires an injected AthenaCanonicalQueryCompiler backed by athena-query.\";\n\ntype Sql = { sql: string; parameters: AthenaSqliteBindValue[] };\n\nfunction rowsAsObjects(result: AthenaSqliteExecutionResult): Record<string, AthenaSqliteStorageValue>[] {\n  return result.rows.map((row) =>\n    Object.fromEntries(result.columns.map((column, index) => [column, row[index] ?? null])),\n  );\n}\n\nfunction responseData(\n  result: AthenaSqliteExecutionResult,\n): Record<string, AthenaSqliteStorageValue>[] | Record<string, AthenaSqliteStorageValue> {\n  return rowsAsObjects(result);\n}\n\nfunction success<T>(result: AthenaSqliteExecutionResult, data: T): AthenaGatewayResponse<T> {\n  const rows = rowsAsObjects(result);\n  return {\n    affectedRows: result.changes,\n    count: rows.length || result.changes || 0,\n    data,\n    errorDetails: null,\n    ok: true,\n    raw: { columns: result.columns, rows: result.rows, changes: result.changes },\n    status: 200,\n    statusText: \"OK\",\n  };\n}\n\nfunction failure<T>(\n  input?: unknown,\n  fallbackMessage?: string,\n): AthenaGatewayResponse<T> {\n  const normalized = normalizeSqliteError(\n    input ?? new Error(fallbackMessage ?? \"SQLite Local operation failed\"),\n  );\n  const canonical = normalized.canonical\n    ? athenaErrorResult(normalized)\n    : undefined;\n  const details = {\n    ...normalized.toDetails(),\n    ...(fallbackMessage ? { message: fallbackMessage } : {}),\n  };\n  return {\n    data: null,\n    error: canonical?.error.message ?? details.message,\n    errorDetails: details as unknown as AthenaGatewayResponse<T>[\"errorDetails\"],\n    ok: false,\n    raw: canonical\n      ? {\n          error: {\n            ...canonical.error,\n            kind: normalized.error.kind,\n            retry: normalized.error.retry,\n          },\n        }\n      : null,\n    status: canonical?.status ?? normalized.status,\n    statusText:\n      normalized.status === 503\n        ? \"Service Unavailable\"\n        : normalized.status === 499\n          ? \"Client Closed Request\"\n          : \"Internal Server Error\",\n  };\n}\n\nfunction executionOptions(options?: AthenaGatewayCallOptions): AthenaSqliteExecutionOptions | undefined {\n  if (!options?.signal && !(\"deadlineMs\" in (options ?? {}))) {\n    return undefined;\n  }\n  return {\n    ...(options?.signal ? { signal: options.signal } : {}),\n    ...(typeof (options as { deadlineMs?: unknown } | undefined)?.deadlineMs === \"number\"\n      ? { deadlineMs: (options as { deadlineMs: number }).deadlineMs }\n      : {}),\n  };\n}\n\nfunction assertCancellationSupported(\n  executor: AthenaSqliteExecutor,\n  options?: AthenaSqliteExecutionOptions,\n): void {\n  if ((options?.signal || options?.deadlineMs !== undefined) && !executor.capabilities.interrupt) {\n    throw new AthenaTransactionError(\n      \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n      \"SQLite Local cannot honor cancellation or deadlines with this executor.\",\n    );\n  }\n}\n\nasync function run(\n  executor: AthenaSqliteExecutor,\n  sql: Sql,\n  options?: AthenaGatewayCallOptions,\n  transaction?: AthenaSqliteTransaction,\n): Promise<AthenaSqliteExecutionResult> {\n  const resolved = executionOptions(options);\n  assertCancellationSupported(executor, resolved);\n  const execute = transaction?.execute ?? executor.execute.bind(executor);\n  return normalizeSqliteExecutionResult(\n    await execute(sql.sql, sql.parameters, resolved),\n  );\n}\n\nfunction compiledToSql(compiled: AthenaCompiledQuery): Sql {\n  return {\n    sql: compiled.sql,\n    parameters: compiled.params.map(compiledQueryParamToBind).map(normalizeSqliteBindValue),\n  };\n}\n\nasync function compileStructured(\n  compiler: AthenaCanonicalQueryCompiler | undefined,\n  returning: boolean,\n  operation:\n    | { kind: \"fetch\"; payload: AthenaFetchPayload }\n    | { kind: \"insert\"; payload: AthenaInsertPayload }\n    | { kind: \"update\"; payload: AthenaUpdatePayload }\n    | { kind: \"delete\"; payload: AthenaDeletePayload },\n): Promise<AthenaCompiledQuery | AthenaGatewayResponse<never>> {\n  if (!compiler) {\n    return failure(\n      new SqliteLocalError(\"unsupported\", undefined, false),\n      COMPILER_REQUIRED_MESSAGE,\n    );\n  }\n  try {\n    const request = projectSqliteOperationToQueryV1(operation, {\n      returning,\n    });\n    const compiled = assertCompiledQueryV1(\n      await compiler.compile(request, \"sqlite-local\"),\n    );\n    if (compiled.backend_profile !== \"sqlite_local\") {\n      return failure(\n        new SqliteLocalError(\"unsupported\", undefined, false),\n        \"compiled query backend_profile must be sqlite_local\",\n      );\n    }\n    return compiled;\n  } catch (error) {\n    return failure(error);\n  }\n}\n\nexport function createSqliteLocalTransport(\n  executor: AthenaSqliteExecutor,\n  compiler?: AthenaCanonicalQueryCompiler,\n): AthenaGatewayClient {\n  const capabilities = sqliteLocalTransactionCapabilities(executor, compiler);\n\n  const runCompiled = async <T>(\n    operation:\n      | { kind: \"fetch\"; payload: AthenaFetchPayload }\n      | { kind: \"insert\"; payload: AthenaInsertPayload }\n      | { kind: \"update\"; payload: AthenaUpdatePayload }\n      | { kind: \"delete\"; payload: AthenaDeletePayload },\n    options?: AthenaGatewayCallOptions,\n    transaction?: AthenaSqliteTransaction,\n  ): Promise<AthenaGatewayResponse<T>> => {\n    const compiled = await compileStructured(\n      compiler,\n      executor.capabilities.returning,\n      operation,\n    );\n    if (\"ok\" in compiled) {\n      return compiled as AthenaGatewayResponse<T>;\n    }\n    try {\n      const result = await run(executor, compiledToSql(compiled), options, transaction);\n      return success(result, responseData(result) as T);\n    } catch (error) {\n      if (error instanceof AthenaTransactionError) {\n        throw error;\n      }\n      return failure(error);\n    }\n  };\n\n  const callOptionsFromResolved = (\n    options?: AthenaResolvedTransactionOptions,\n  ): AthenaGatewayCallOptions | undefined =>\n    options?.callOptions ??\n    (options?.signal || options?.timeoutMs !== undefined\n      ? {\n          ...(options.signal ? { signal: options.signal } : {}),\n          ...(options.timeoutMs !== undefined\n            ? { deadlineMs: Date.now() + options.timeoutMs }\n            : {}),\n        }\n      : undefined);\n\n  const executeOnTransaction = async (\n    operation: AthenaTransactionOperation,\n    sqliteTransaction: AthenaSqliteTransaction,\n    options?: AthenaResolvedTransactionOptions,\n  ): Promise<AthenaGatewayResponse<unknown>> =>\n    runCompiled(\n      operation as\n        | { kind: \"fetch\"; payload: AthenaFetchPayload }\n        | { kind: \"insert\"; payload: AthenaInsertPayload }\n        | { kind: \"update\"; payload: AthenaUpdatePayload }\n        | { kind: \"delete\"; payload: AthenaDeletePayload },\n      callOptionsFromResolved(options),\n      sqliteTransaction,\n    );\n\n  const transactionTransport: AthenaTransactionTransport = {\n    capabilities,\n    async executeAtomic(operations, options) {\n      if (!capabilities.atomic) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_ATOMIC_UNSUPPORTED\",\n          \"SQLite Local structured transactions require an injected compiler and a transactional host executor.\",\n        );\n      }\n      rejectUnsupportedTransactionOptions(options);\n      return executor.transaction(async (sqliteTransaction) => {\n        const results: AthenaGatewayResponse<unknown>[] = [];\n        for (const operation of operations) {\n          const result = await executeOnTransaction(\n            operation,\n            sqliteTransaction,\n            options,\n          );\n          if (!result.ok) {\n            throw new AthenaTransactionError(\n              \"ATHENA_TRANSACTION_FAILED\",\n              result.error ?? \"SQLite Local atomic operation failed\",\n            );\n          }\n          results.push(result);\n        }\n        return { committed: true, results };\n      });\n    },\n    async beginInteractive(options) {\n      if (!capabilities.interactive) {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_INTERACTIVE_UNSUPPORTED\",\n          \"SQLite Local interactive transactions require an injected compiler and an interactive host executor.\",\n        );\n      }\n      rejectUnsupportedTransactionOptions(options);\n      let settle: (error?: unknown) => void = () => undefined;\n      const hold = new Promise<void>((resolve, reject) => {\n        settle = (error) => {\n          if (error === undefined) {\n            resolve();\n          } else {\n            reject(error);\n          }\n        };\n      });\n      let sqliteTransaction: AthenaSqliteTransaction | undefined;\n      let readyResolve: (tx: AthenaSqliteTransaction) => void = () => undefined;\n      const ready = new Promise<AthenaSqliteTransaction>((resolve) => {\n        readyResolve = resolve;\n      });\n      const session = executor.transaction(async (tx) => {\n        sqliteTransaction = tx;\n        readyResolve(tx);\n        await hold;\n      });\n      await ready;\n      const interactive: AthenaInteractiveTransactionTransport = {\n        async commit() {\n          settle();\n          await session;\n        },\n        async execute(operation) {\n          const current = sqliteTransaction;\n          if (!current) {\n            throw new AthenaTransactionError(\n              \"ATHENA_TRANSACTION_ABORTED\",\n              \"SQLite Local interactive transaction is no longer active.\",\n            );\n          }\n          return executeOnTransaction(operation, current, options);\n        },\n        async rollback() {\n          settle(new AthenaTransactionError(\n            \"ATHENA_TRANSACTION_ABORTED\",\n            \"SQLite Local interactive transaction rolled back.\",\n          ));\n          await session.catch(() => undefined);\n        },\n      };\n      return interactive;\n    },\n  };\n\n  return {\n    baseUrl: SQLITE_LOCAL_BASE_URL,\n    buildHeaders: () => ({}),\n    deleteGateway: async (payload, options) =>\n      runCompiled({ kind: \"delete\", payload }, options),\n    fetchGateway: async (payload, options) => {\n      if (isAthenaSelectQueryAst(payload)) {\n        return failure(\n          new SqliteLocalError(\"unsupported\", undefined, false),\n          \"SQLite Local AST fetch is unavailable.\",\n        );\n      }\n      return runCompiled(\n        { kind: \"fetch\", payload: payload as AthenaFetchPayload },\n        options,\n      );\n    },\n    insertGateway: async (payload, options) =>\n      runCompiled({ kind: \"insert\", payload }, options),\n    queryGateway: async <T>(\n      payload: AthenaQueryPayload,\n      options?: AthenaGatewayCallOptions,\n    ) => {\n      try {\n        const result = await run(executor, {\n          parameters: (payload.params ?? []).map(normalizeSqliteBindValue),\n          sql: payload.query,\n        }, options);\n        return success(result, responseData(result) as T);\n      } catch (error) {\n        if (error instanceof AthenaTransactionError) {\n          throw error;\n        }\n        return failure(error);\n      }\n    },\n    resolveCallOptions: async (options) => options,\n    rpcGateway: async () =>\n      failure(undefined, \"SQLite Local RPC is unavailable.\"),\n    transactions: transactionTransport,\n    updateGateway: async (payload, options) =>\n      runCompiled({ kind: \"update\", payload }, options),\n    verifyConnection: async (): Promise<AthenaGatewayConnectionResult> => {\n      try {\n        const result = await run(executor, { parameters: [], sql: \"SELECT 1\" });\n        return {\n          baseUrl: SQLITE_LOCAL_BASE_URL,\n          error: undefined,\n          errorDetails: null,\n          ok: true,\n          raw: {\n            columns: result.columns,\n            rows: result.rows,\n            changes: result.changes,\n          },\n          reachable: true,\n          status: 200,\n          statusText: \"OK\",\n          url: SQLITE_LOCAL_BASE_URL,\n        };\n      } catch (error) {\n        const normalized = normalizeSqliteError(error);\n        const details = normalized.toDetails();\n        const canonical = normalized.canonical\n          ? athenaErrorResult(normalized)\n          : undefined;\n        return {\n          baseUrl: SQLITE_LOCAL_BASE_URL,\n          error: canonical?.error.message ?? details.message,\n          errorDetails: details as unknown as AthenaGatewayConnectionResult[\"errorDetails\"],\n          ok: false,\n          raw: canonical\n            ? {\n                error: {\n                  ...canonical.error,\n                  kind: normalized.error.kind,\n                  retry: normalized.error.retry,\n                },\n              }\n            : null,\n          reachable: false,\n          status: canonical?.status ?? normalized.status,\n          statusText:\n            normalized.status === 503\n              ? \"Service Unavailable\"\n              : canonical?.status === 499\n                ? \"Client Closed Request\"\n                : \"Internal Server Error\",\n          url: SQLITE_LOCAL_BASE_URL,\n        };\n      }\n    },\n  };\n}\n","import type { AthenaClientCapabilities } from \"../cloudflare/types.ts\";\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaSqliteConfig } from \"./contracts.ts\";\nimport { createSqliteLocalTransport, sqliteLocalTransactionCapabilities } from \"./transport.ts\";\n\nexport interface AthenaSqliteLocalMaterialization {\n  readonly capabilities: AthenaClientCapabilities;\n  readonly gatewayTransport: AthenaGatewayClient;\n  readonly key: string;\n  readonly close?: () => Promise<void>;\n}\n\nfunction assertExecutor(config: AthenaSqliteConfig): void {\n  const executor = config.executor;\n  const capabilities = executor?.capabilities;\n  if (\n    !executor ||\n    typeof executor.execute !== \"function\" ||\n    typeof executor.transaction !== \"function\" ||\n    !capabilities ||\n    typeof capabilities.interrupt !== \"boolean\" ||\n    typeof capabilities.returning !== \"boolean\" ||\n    typeof capabilities.savepoints !== \"boolean\" ||\n    ![\"none\", \"batch\", \"interactive\"].includes(capabilities.transactions)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_RUNTIME_CONFIG_INVALID\",\n      \"db.sqlite.executor must provide execute(), transaction(), and explicit capability metadata.\",\n      \"db\",\n    );\n  }\n}\n\nexport function createSqliteLocalCapabilities(options?: {\n  readonly structuredCrud?: boolean;\n  readonly atomicTransactions?: boolean;\n  readonly interactiveTransactions?: boolean;\n  readonly savepoints?: boolean;\n  readonly interrupt?: boolean;\n}): AthenaClientCapabilities {\n  return {\n    auth: { remote: false },\n    db: {\n      engine: \"sqlite\",\n      layers: {\n        findManyAst: false,\n        flatCrud: options?.structuredCrud === true,\n        query: true,\n        relations: false,\n        rpc: false,\n      },\n      local: true,\n      transactions: {\n        atomic: options?.atomicTransactions === true,\n        backend: \"sqlite-local\",\n        deferrable: false,\n        interactive: options?.interactiveTransactions === true,\n        isolationLevels: [],\n        readOnly: false,\n        savepoints: options?.savepoints === true,\n      },\n    },\n    mode: \"sqlite-local\",\n    storage: {\n      backups: false,\n      catalogs: false,\n      local: false,\n      objects: false,\n    },\n  };\n}\n\nexport function materializeSqliteLocal(\n  config: AthenaSqliteConfig,\n): AthenaSqliteLocalMaterialization {\n  assertExecutor(config);\n  const executor = config.executor;\n  let closed = false;\n  const tx = sqliteLocalTransactionCapabilities(executor, config.compiler);\n  return {\n    capabilities: createSqliteLocalCapabilities({\n      atomicTransactions: tx.atomic,\n      interactiveTransactions: tx.interactive,\n      structuredCrud: Boolean(config.compiler),\n    }),\n    gatewayTransport: createSqliteLocalTransport(executor, config.compiler),\n    key: \"sqlite-local\",\n    ...(config.ownership === \"owned\" && executor.close\n      ? {\n          close: async () => {\n            if (closed) {\n              return;\n            }\n            closed = true;\n            await executor.close?.();\n          },\n        }\n      : {}),\n  };\n}\n","/**\n * Browser-safe universal createClient normalization.\n *\n * This module owns aliases, execution-mode selection, and host-safe binding\n * materialization. Node-only runtime materialization remains in v3-client.ts.\n */\n\nimport {\n  isLocalAthenaAuthConfig,\n} from \"../../auth/config.ts\";\nimport {\n  createCloudflareEdgeCapabilities,\n  createGatewayCapabilities,\n} from \"../../cloudflare/capabilities.ts\";\nimport { createCloudflareD1GatewayTransport } from \"../../cloudflare/d1/transport.ts\";\nimport {\n  type AthenaClientConfig,\n} from \"../contracts.ts\";\nimport {\n  CLOUDFLARE_EDGE_API_KEY,\n  CLOUDFLARE_EDGE_BASE_URL,\n} from \"../../cloudflare/types.ts\";\nimport { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n  ATHENA_ENV_DB_URL_KEYS,\n} from \"../../env/index.ts\";\nimport { catalogFromModels } from \"../../query/engine/index.ts\";\nimport {\n  type AthenaExecutionMode,\n  resolveAthenaExecutionMode,\n} from \"../../cloudflare/execution-mode.ts\";\nimport {\n  isLocalStorageConfig,\n  isS3StorageConfig,\n} from \"../../storage/runtime.ts\";\nimport type { AthenaClientModelsInput } from \"../../schema/types.ts\";\nimport {\n  hasRemoteAuthService,\n  hasRemoteDbGatewayUrl,\n  hasRemoteHttpServices,\n  hasRemoteHttpStorage,\n  isD1Binding,\n  isR2Binding,\n  normalizeOptional,\n  resolveUnifiedRemoteRoot,\n} from \"./predicates.ts\";\nimport { materializeSqliteLocal } from \"../../sqlite-local/materialize.ts\";\n\nfunction readFirstEnv(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = normalizeOptional(env?.[key]);\n    if (value) {\n      return value;\n    }\n  }\n}\n\nfunction foldBindingAliases<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1 ?? config.d1;\n  const r2 = config.storage?.r2 ?? config.r2;\n  const sessionMode = config.db?.sessionMode ?? config.sessionMode;\n  const prefix = config.storage?.prefix ?? config.storagePrefix;\n  const aliasPgUri = normalizeOptional(config.databaseUrl);\n  const nestedPgUri = normalizeOptional(config.db?.pgUri);\n  const envPgUri = config.env\n    ? normalizeOptional(config.env.DATABASE_URL)\n    : undefined;\n  if (aliasPgUri && nestedPgUri && aliasPgUri !== nestedPgUri) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_DATABASE_URL_CONFLICT\",\n      \"databaseUrl and db.pgUri must be the same connection string when both are set.\",\n      \"db\",\n    );\n  }\n  const pgUri = nestedPgUri ?? aliasPgUri ?? envPgUri;\n\n  let next: AthenaClientConfig<TModels> = { ...config };\n  if (d1 !== undefined || sessionMode !== undefined || pgUri !== undefined) {\n    next = {\n      ...next,\n      db: {\n        ...next.db,\n        ...(d1 === undefined ? {} : { d1 }),\n        ...(sessionMode === undefined ? {} : { sessionMode }),\n        ...(pgUri === undefined ? {} : { pgUri }),\n      },\n    };\n  }\n  if (r2 !== undefined || prefix !== undefined) {\n    next = {\n      ...next,\n      storage: {\n        ...next.storage,\n        ...(r2 === undefined ? {} : { r2 }),\n        ...(prefix === undefined ? {} : { prefix }),\n      },\n    };\n  }\n  const {\n    d1: _d1,\n    r2: _r2,\n    storagePrefix: _storagePrefix,\n    sessionMode: _sessionMode,\n    databaseUrl: _databaseUrl,\n    ...rest\n  } = next;\n  void _d1;\n  void _r2;\n  void _storagePrefix;\n  void _sessionMode;\n  void _databaseUrl;\n  return rest;\n}\n\nfunction applyExecutionMode<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1;\n  const hasD1 = isD1Binding(d1);\n  const hasUrl = Boolean(\n    normalizeOptional(config.url) ??\n      normalizeOptional(config.db?.url) ??\n      (config.env\n        ? (normalizeOptional(config.env.ATHENA_URL) ??\n          normalizeOptional(config.env.NEXT_PUBLIC_ATHENA_URL))\n        : undefined),\n  );\n  const hasModeHint =\n    config.mode != null ||\n    config.prefer != null ||\n    Boolean(config.env?.ATHENA_EXECUTION_MODE) ||\n    Boolean(config.env?.ATHENA_EXECUTION_PREFER);\n\n  if (!(hasD1 || hasModeHint)) {\n    return config;\n  }\n  if (hasD1 && !hasUrl && !hasModeHint) {\n    return config;\n  }\n\n  let resolved: AthenaExecutionMode | \"edge\" | \"gateway\";\n  try {\n    resolved = resolveAthenaExecutionMode({\n      d1: hasD1 ? d1 : null,\n      env: config.env,\n      mode: config.mode,\n      prefer: config.prefer,\n      url: config.url ?? config.db?.url,\n    });\n  } catch (error) {\n    if (!hasModeHint) {\n      return config;\n    }\n    const pgUri = normalizeOptional(config.db?.pgUri);\n    if (pgUri && !hasD1) {\n      const modeRaw =\n        normalizeOptional(\n          typeof config.mode === \"string\" ? config.mode : undefined,\n        ) ?? normalizeOptional(config.env?.ATHENA_EXECUTION_MODE);\n      const modeKey = modeRaw?.trim().toLowerCase();\n      if (!modeKey || modeKey === \"auto\") {\n        return config;\n      }\n    }\n    throw error;\n  }\n\n  if (resolved === \"gateway\" && hasD1) {\n    const hasOtherLocalDbAuthority =\n      (config.db?.sqlite !== undefined && config.db?.sqlite !== null) ||\n      normalizeOptional(config.db?.pgUri) !== undefined ||\n      (config.db?.pool !== undefined && config.db?.pool !== null);\n    if (hasOtherLocalDbAuthority) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        \"Athena cannot combine D1 with SQLite or PostgreSQL direct execution. Configure exactly one local database backend.\",\n        \"db\",\n      );\n    }\n    const { d1: _drop, sessionMode: _sm, ...dbRest } = config.db ?? {};\n    void _drop;\n    void _sm;\n    return {\n      ...config,\n      db: Object.keys(dbRest).length > 0 ? dbRest : undefined,\n      gatewayTransport: undefined,\n    };\n  }\n  return config;\n}\n\nfunction materializeEdgeBindings<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1;\n  const r2 = config.storage?.r2;\n  const hasD1 = isD1Binding(d1);\n  const hasR2 = isR2Binding(r2);\n  if (!(hasD1 || hasR2)) {\n    return config;\n  }\n\n  if (hasD1 && d1 && typeof d1.prepare !== \"function\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      \"db.d1 must be a D1 binding with prepare().\",\n      \"db\",\n    );\n  }\n\n  const remoteRoot = resolveUnifiedRemoteRoot(config);\n  const remoteServices = hasRemoteHttpServices(config);\n  const remoteStorage = hasRemoteHttpStorage(config);\n  const remoteAuth = hasRemoteAuthService(config);\n  const next: AthenaClientConfig<TModels> = { ...config };\n\n  if (hasD1 && d1) {\n    if (!config.gatewayTransport) {\n      next.gatewayTransport = createCloudflareD1GatewayTransport({\n        d1,\n        defaultSessionMode: config.db?.sessionMode,\n        relationCatalog: catalogFromModels(config.models),\n      });\n    }\n    const explicitDbUrl = normalizeOptional(config.db?.url);\n    const remoteDbGateway = hasRemoteDbGatewayUrl(config);\n    next.db = {\n      ...config.db,\n      d1,\n      url:\n        explicitDbUrl ??\n        (remoteDbGateway ? undefined : CLOUDFLARE_EDGE_BASE_URL),\n    };\n    const explicitKey = normalizeOptional(config.key);\n    if (explicitKey) {\n      next.key = explicitKey;\n    } else if (remoteServices) {\n      next.key = undefined;\n    } else {\n      next.key = CLOUDFLARE_EDGE_API_KEY;\n    }\n    if (remoteRoot) {\n      next.billing = {\n        ...(config.billing ?? {}),\n        url: normalizeOptional(config.billing?.url) ?? remoteRoot,\n      };\n    }\n    if (!config.capabilities) {\n      next.capabilities = createCloudflareEdgeCapabilities({\n        authRemote: remoteAuth,\n        findManyAst: true,\n        flatCrud: true,\n        hasR2,\n        hasRemoteStorage: remoteStorage,\n        query: true,\n        relations: true,\n        rpc: false,\n      });\n    }\n  } else if (hasR2 && r2) {\n    if (\n      !(\n        remoteRoot ||\n        normalizeOptional(config.db?.url) ||\n        normalizeOptional(config.storage?.url) ||\n        readFirstEnv(config.env, [\n          \"ATHENA_STORAGE_URL\",\n          \"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n        ])\n      )\n    ) {\n      next.storage = {\n        ...config.storage,\n        r2,\n        url: CLOUDFLARE_EDGE_BASE_URL,\n      };\n      if (!remoteServices) {\n        next.key = normalizeOptional(config.key) ?? CLOUDFLARE_EDGE_API_KEY;\n      } else if (normalizeOptional(config.key)) {\n        next.key = normalizeOptional(config.key);\n      } else {\n        next.key = undefined;\n      }\n    }\n    if (!config.capabilities) {\n      if (\n        remoteRoot ||\n        normalizeOptional(config.db?.url) ||\n        readFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS)\n      ) {\n        const base = createGatewayCapabilities({\n          authRemote: remoteAuth,\n          storageBackups: remoteStorage,\n          storageCatalogs: remoteStorage,\n          storageConfigured: remoteStorage || hasR2,\n        });\n        next.capabilities = {\n          ...base,\n          storage: {\n            ...base.storage,\n            local: true,\n            objects: true,\n          },\n        };\n      } else {\n        next.capabilities = {\n          auth: { remote: remoteAuth },\n          db: {\n            engine: \"unknown\",\n            layers: {\n              findManyAst: false,\n              flatCrud: false,\n              query: false,\n              relations: false,\n              rpc: false,\n            },\n            local: false,\n            transactions: {\n              atomic: false,\n              backend: \"unsupported\",\n              deferrable: false,\n              interactive: false,\n              isolationLevels: [],\n              readOnly: false,\n              savepoints: false,\n            },\n          },\n          mode: \"cloudflare-edge\",\n          storage: {\n            backups: remoteStorage,\n            catalogs: remoteStorage,\n            local: true,\n            objects: true,\n          },\n        };\n      }\n    }\n  }\n  return next;\n}\n\nfunction isExplicitGatewayMode<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const raw =\n    (typeof config.mode === \"string\" ? config.mode : undefined) ??\n    config.env?.ATHENA_EXECUTION_MODE;\n  const mode = raw?.trim().toLowerCase();\n  return (\n    mode === \"gateway\" ||\n    mode === \"http\" ||\n    mode === \"remote\" ||\n    mode === \"server\"\n  );\n}\n\n/**\n * Universal createClient normalization pipeline: aliases → mode → edge.\n */\nexport function normalizeUniversalCreateClientConfig<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const next = materializeEdgeBindings(\n    applyExecutionMode(foldBindingAliases(config)),\n  );\n  if (\n    next.db?.sqlite &&\n    !next.db.d1 &&\n    !next.gatewayTransport &&\n    !isExplicitGatewayMode(next)\n  ) {\n    const sqlite = materializeSqliteLocal(next.db.sqlite);\n    return {\n      ...next,\n      capabilities: next.capabilities ?? sqlite.capabilities,\n      gatewayTransport: sqlite.gatewayTransport,\n      key: normalizeOptional(next.key) ?? sqlite.key,\n      ...(sqlite.close ? { ownedResourceClose: sqlite.close } : {}),\n    } as AthenaClientConfig<TModels>;\n  }\n  return next;\n}\n\nexport const normalizeUniversalConfig = normalizeUniversalCreateClientConfig;\n\nexport function assertDirectPostgresRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (\n    normalizeOptional(config.db?.pgUri) ||\n    normalizeOptional(config.databaseUrl) ||\n    normalizeOptional(config.env?.DATABASE_URL) ||\n    config.db?.pool\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\",\n      \"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      \"db\",\n    );\n  }\n}\n\nexport function assertLocalAuthRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isLocalAthenaAuthConfig(config.auth)) {\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}\n\nexport function assertLocalStorageRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isLocalStorageConfig(config.storage)) {\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}\n\nexport function assertS3StorageRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isS3StorageConfig(config.storage)) {\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\nexport function assertLocalChatRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  const chat = config.chat;\n  const wantsLocal =\n    chat === true ||\n    (typeof chat === \"object\" && chat !== null && chat.mode === \"local\");\n  if (wantsLocal || config.chatRuntime) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_CHAT_LOCAL_NODE_REQUIRED\",\n      'Local Chat requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use chat.mode \"remote\".',\n      \"chat\",\n    );\n  }\n}\n","import type {\n  BillingCapabilities,\n  BillingOperation,\n  BillingOperationCapability,\n  BillingOperationSafety,\n  BillingOperationCapabilityReason,\n  BillingPortName,\n} from \"../capabilities.ts\";\n\nconst PORTS: readonly BillingPortName[] = [\n  \"payments\",\n  \"customers\",\n  \"refunds\",\n  \"paymentLinks\",\n  \"subscriptions\",\n  \"invoices\",\n  \"webhooks\",\n  \"products\",\n  \"prices\",\n  \"relations\",\n  \"checkout\",\n  \"self\",\n];\n\nconst SNAKE_TO_OPERATION: Record<string, BillingOperation> = {\n  cancel_payment: \"payments.cancel\",\n  cancel_refund: \"refunds.cancel\",\n  cancel_subscription: \"subscriptions.cancel\",\n  create_checkout: \"checkout.create\",\n  create_customer: \"customers.create\",\n  create_payment: \"payments.create\",\n  create_payment_link: \"paymentLinks.create\",\n  create_refund: \"refunds.create\",\n  create_subscription: \"subscriptions.create\",\n  create_webhook: \"webhooks.create\",\n  delete_customer: \"customers.delete\",\n  delete_payment_link: \"paymentLinks.delete\",\n  delete_webhook: \"webhooks.delete\",\n  get_customer: \"customers.get\",\n  get_invoice: \"invoices.get\",\n  get_payment: \"payments.get\",\n  get_payment_link: \"paymentLinks.get\",\n  get_refund: \"refunds.get\",\n  get_subscription: \"subscriptions.get\",\n  get_webhook: \"webhooks.get\",\n  list_customers: \"customers.list\",\n  list_invoices: \"invoices.list\",\n  list_payment_links: \"paymentLinks.list\",\n  list_payments: \"payments.list\",\n  list_prices: \"prices.list\",\n  list_products: \"products.list\",\n  list_relations: \"relations.list\",\n  list_refunds: \"refunds.list\",\n  list_subscriptions: \"subscriptions.list\",\n  list_webhooks: \"webhooks.list\",\n  test_webhook: \"webhooks.test\",\n  update_customer: \"customers.update\",\n  update_payment_link: \"paymentLinks.update\",\n  update_subscription: \"subscriptions.update\",\n  update_webhook: \"webhooks.update\",\n};\n\nconst KEY_TO_OPERATION: Record<string, BillingOperation> = {\n  \"billing.checkout.create\": \"checkout.create\",\n  \"billing.customers.create\": \"customers.create\",\n  \"billing.customers.delete\": \"customers.delete\",\n  \"billing.customers.get\": \"customers.get\",\n  \"billing.customers.list\": \"customers.list\",\n  \"billing.customers.update\": \"customers.update\",\n  \"billing.invoices.get\": \"invoices.get\",\n  \"billing.invoices.list\": \"invoices.list\",\n  \"billing.payment_links.create\": \"paymentLinks.create\",\n  \"billing.payment_links.delete\": \"paymentLinks.delete\",\n  \"billing.payment_links.get\": \"paymentLinks.get\",\n  \"billing.payment_links.list\": \"paymentLinks.list\",\n  \"billing.payment_links.update\": \"paymentLinks.update\",\n  \"billing.payments.cancel\": \"payments.cancel\",\n  \"billing.payments.create\": \"payments.create\",\n  \"billing.payments.get\": \"payments.get\",\n  \"billing.payments.list\": \"payments.list\",\n  \"billing.prices.list\": \"prices.list\",\n  \"billing.products.list\": \"products.list\",\n  \"billing.relations.list\": \"relations.list\",\n  \"billing.refunds.cancel\": \"refunds.cancel\",\n  \"billing.refunds.create\": \"refunds.create\",\n  \"billing.refunds.get\": \"refunds.get\",\n  \"billing.refunds.list\": \"refunds.list\",\n  \"billing.subscriptions.cancel\": \"subscriptions.cancel\",\n  \"billing.subscriptions.create\": \"subscriptions.create\",\n  \"billing.subscriptions.get\": \"subscriptions.get\",\n  \"billing.subscriptions.list\": \"subscriptions.list\",\n  \"billing.subscriptions.update\": \"subscriptions.update\",\n  \"billing.webhooks.create\": \"webhooks.create\",\n  \"billing.webhooks.delete\": \"webhooks.delete\",\n  \"billing.webhooks.get\": \"webhooks.get\",\n  \"billing.webhooks.list\": \"webhooks.list\",\n  \"billing.webhooks.test\": \"webhooks.test\",\n  \"billing.webhooks.update\": \"webhooks.update\",\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  if (value && typeof value === \"object\") {\n    return value as Record<string, unknown>;\n  }\n  return {};\n}\n\nfunction asString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction asStringList(value: unknown): string[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\nfunction operationSafety(value: unknown): BillingOperationSafety | undefined {\n  return value === \"disabled\" || value === \"preview\" || value === \"stable\"\n    ? value\n    : undefined;\n}\n\nfunction projectDiagnostics(\n  raw: unknown\n): BillingCapabilities[\"diagnostics\"] | undefined {\n  const value = asRecord(raw);\n  const diagnostics: NonNullable<BillingCapabilities[\"diagnostics\"]> = {};\n  if (typeof value.attentionRequiredOperations === \"number\") {\n    diagnostics.attentionRequiredOperations = value.attentionRequiredOperations;\n  }\n  if (typeof value.billingSchemaReady === \"boolean\") {\n    diagnostics.billingSchemaReady = value.billingSchemaReady;\n  }\n  if (typeof value.connectionSource === \"string\") {\n    diagnostics.connectionSource = value.connectionSource;\n  }\n  if (typeof value.connectionAffinitySource === \"string\") {\n    diagnostics.connectionAffinitySource = value.connectionAffinitySource;\n  }\n  if (typeof value.eligibleConnectionCount === \"number\") {\n    diagnostics.eligibleConnectionCount = value.eligibleConnectionCount;\n  }\n  if (\n    value.ingressAdmissionControl === \"disabled\" ||\n    value.ingressAdmissionControl === \"enabled\" ||\n    value.ingressAdmissionControl === \"unknown\"\n  ) {\n    diagnostics.ingressAdmissionControl = value.ingressAdmissionControl;\n  }\n  if (typeof value.initializationFailed === \"boolean\") {\n    diagnostics.initializationFailed = value.initializationFailed;\n  }\n  if (typeof value.initializationMessage === \"string\") {\n    diagnostics.initializationMessage = value.initializationMessage;\n  }\n  if (typeof value.recoverableOperationBacklog === \"number\") {\n    diagnostics.recoverableOperationBacklog =\n      value.recoverableOperationBacklog;\n  }\n  const lastRecoveryBatch = asRecord(value.lastRecoveryBatch);\n  if (\n    typeof lastRecoveryBatch.attentionRequired === \"number\" &&\n    typeof lastRecoveryBatch.completed === \"number\" &&\n    typeof lastRecoveryBatch.failed === \"number\" &&\n    typeof lastRecoveryBatch.retried === \"number\" &&\n    typeof lastRecoveryBatch.scanned === \"number\"\n  ) {\n    diagnostics.lastRecoveryBatch = {\n      attentionRequired: lastRecoveryBatch.attentionRequired,\n      completed: lastRecoveryBatch.completed,\n      failed: lastRecoveryBatch.failed,\n      retried: lastRecoveryBatch.retried,\n      scanned: lastRecoveryBatch.scanned,\n    };\n  }\n  if (typeof value.planChangeConfigured === \"boolean\") {\n    diagnostics.planChangeConfigured = value.planChangeConfigured;\n  }\n  const planChangeSafety = operationSafety(value.planChangeSafety);\n  if (planChangeSafety) {\n    diagnostics.planChangeSafety = planChangeSafety;\n  }\n  if (typeof value.providerRegistrationSource === \"string\") {\n    diagnostics.providerRegistrationSource = value.providerRegistrationSource;\n  }\n  if (typeof value.recoveryCoordinatorEnabled === \"boolean\") {\n    diagnostics.recoveryCoordinatorEnabled = value.recoveryCoordinatorEnabled;\n  }\n  if (typeof value.runtimeSource === \"string\") {\n    diagnostics.runtimeSource = value.runtimeSource;\n  }\n  if (typeof value.selectedConnectionId === \"string\") {\n    diagnostics.selectedConnectionId = value.selectedConnectionId;\n  } else if (value.selectedConnectionId === null) {\n    diagnostics.selectedConnectionId = null;\n  }\n  if (typeof value.unfinishedRecoverableOperations === \"number\") {\n    diagnostics.unfinishedRecoverableOperations =\n      value.unfinishedRecoverableOperations;\n  }\n  if (Array.isArray(value.webhookIngressUrlTemplates)) {\n    const webhookIngressUrlTemplates = value.webhookIngressUrlTemplates.filter(\n      (entry): entry is {\n        classic: string;\n        connectionId: string;\n        events: string;\n      } =>\n        asRecord(entry).connectionId != null &&\n        typeof asRecord(entry).connectionId === \"string\" &&\n        typeof asRecord(entry).classic === \"string\" &&\n        typeof asRecord(entry).events === \"string\"\n    );\n    if (webhookIngressUrlTemplates.length > 0) {\n      diagnostics.webhookIngressUrlTemplates = webhookIngressUrlTemplates;\n    }\n  }\n  if (\n    value.verifiedBillingContact === \"available\" ||\n    value.verifiedBillingContact === \"unavailable\" ||\n    value.verifiedBillingContact === \"unknown\"\n  ) {\n    diagnostics.verifiedBillingContact = value.verifiedBillingContact;\n  }\n  if (\n    value.webhookSecretLifecycle === \"degraded\" ||\n    value.webhookSecretLifecycle === \"healthy\" ||\n    value.webhookSecretLifecycle === \"unknown\"\n  ) {\n    diagnostics.webhookSecretLifecycle = value.webhookSecretLifecycle;\n  }\n  return Object.keys(diagnostics).length > 0 ? diagnostics : undefined;\n}\n\nfunction resolveOperation(\n  entry: Record<string, unknown>\n): BillingOperation | undefined {\n  const operation = asString(entry.operation);\n  if (operation && operation in SNAKE_TO_OPERATION) {\n    return SNAKE_TO_OPERATION[operation];\n  }\n  if (operation && operation in KEY_TO_OPERATION) {\n    return KEY_TO_OPERATION[operation];\n  }\n  if (\n    operation &&\n    (operation.startsWith(\"payments.\") ||\n      operation.startsWith(\"customers.\") ||\n      operation.startsWith(\"refunds.\") ||\n      operation.startsWith(\"paymentLinks.\") ||\n      operation.startsWith(\"subscriptions.\") ||\n      operation.startsWith(\"invoices.\") ||\n      operation.startsWith(\"webhooks.\") ||\n      operation.startsWith(\"products.\") ||\n      operation.startsWith(\"prices.\") ||\n      operation.startsWith(\"relations.\") ||\n      operation.startsWith(\"checkout.\") ||\n      operation.startsWith(\"self.\"))\n  ) {\n    return operation as BillingOperation;\n  }\n  const key = asString(entry.key);\n  if (key && key in KEY_TO_OPERATION) {\n    return KEY_TO_OPERATION[key];\n  }\n}\n\nfunction denialReason(\n  entry: Record<string, unknown>\n): BillingOperationCapabilityReason {\n  if (asStringList(entry.missingAthenaRights).length > 0) {\n    return \"missing_permission\";\n  }\n  if (asStringList(entry.missingProviderRequirements).length > 0) {\n    return \"missing_provider_scope\";\n  }\n  if (entry.portAvailable === false) {\n    return \"unsupported_operation\";\n  }\n  return \"unsupported_operation\";\n}\n\nfunction projectPorts(raw: unknown): BillingCapabilities[\"ports\"] {\n  const record = asRecord(raw);\n  const ports = {} as BillingCapabilities[\"ports\"];\n  for (const name of PORTS) {\n    ports[name] = record[name] === true;\n  }\n  return 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  data: unknown,\n  connectionId: string\n): BillingCapabilities {\n  const envelope = asRecord(data);\n  const nested = asRecord(envelope.capabilities);\n  const status = asString(nested.status);\n  const connected = nested.connected === true || status === \"active\";\n  const operations: Partial<\n    Record<BillingOperation, BillingOperationCapability>\n  > = {};\n  const actions = Array.isArray(envelope.actionCapabilities)\n    ? envelope.actionCapabilities\n    : [];\n  for (const raw of actions) {\n    const entry = asRecord(raw);\n    const operation = resolveOperation(entry);\n    if (!operation) {\n      continue;\n    }\n    if (entry.available === true) {\n      const safety = operationSafety(entry.safety);\n      operations[operation] = {\n        available: true,\n        ...(safety ? { safety } : {}),\n      };\n      continue;\n    }\n    operations[operation] = {\n      available: false,\n      reason: denialReason(entry),\n      ...(operationSafety(entry.safety)\n        ? { safety: operationSafety(entry.safety) }\n        : {}),\n    };\n  }\n  const provider =\n    asString(nested.provider) ?? asString(envelope.provider) ?? \"remote\";\n  const diagnostics = projectDiagnostics(\n    nested.diagnostics ?? envelope.diagnostics\n  );\n  return {\n    connected,\n    connectionId,\n    ...(diagnostics ? { diagnostics } : {}),\n    operations,\n    ports: projectPorts(envelope.ports),\n    provider,\n    runtime: \"remote\",\n    target: {\n      connectionId,\n      kind: \"connection\",\n      provider,\n    },\n  };\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingAdminPort } from \"./types.ts\";\n\nexport function createUnavailableBillingAdminPort(): BillingAdminPort {\n  const fail = (operation: string) => (): Promise<never> => {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"runtime_unavailable\",\n    });\n  };\n  return {\n    bootstrap: { retry: fail(\"admin.bootstrap.retry\") },\n    conflicts: {\n      list: fail(\"admin.conflicts.list\"),\n      resolve: fail(\"admin.conflicts.resolve\"),\n    },\n    connections: { materialize: fail(\"admin.connections.materialize\") },\n    ingestion: { health: fail(\"admin.ingestion.health\") },\n    reconciliation: {\n      retry: fail(\"admin.reconciliation.retry\"),\n      run: fail(\"admin.reconciliation.run\"),\n    },\n    webhooks: {\n      reconcile: fail(\"admin.webhooks.reconcile\"),\n      status: fail(\"admin.webhooks.status\"),\n      verify: fail(\"admin.webhooks.verify\"),\n    },\n  };\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  AthenaBillingRuntime,\n  BillingRuntimeDispatchOperation,\n} from \"./types.ts\";\n\nexport type { BillingRuntimeDispatchOperation };\n\nexport interface AthenaBillingRuntimeDispatch extends AthenaBillingRuntime {\n  readonly admin: BillingAdminPort;\n  execute(\n    operation: BillingRuntimeDispatchOperation,\n    payload: unknown,\n    principal: AthenaPrincipal\n  ): Promise<unknown>;\n}\n\ntype BillingRuntimeDispatchHandler = (\n  runtime: AthenaBillingRuntime,\n  payload: unknown\n) => Promise<unknown>;\n\nfunction body(payload: unknown): never {\n  return (\n    payload != null && typeof payload === \"object\" ? payload : {}\n  ) as never;\n}\n\nconst BILLING_RUNTIME_DISPATCH = {\n  \"admin.conflicts.list\": (runtime, payload) =>\n    runtime.admin.conflicts.list(body(payload)),\n  \"admin.conflicts.resolve\": (runtime, payload) =>\n    runtime.admin.conflicts.resolve(body(payload)),\n  \"admin.connections.materialize\": (runtime, payload) =>\n    runtime.admin.connections.materialize(body(payload)),\n  \"admin.bootstrap.retry\": (runtime) => runtime.admin.bootstrap.retry(),\n  \"admin.ingestion.health\": (runtime, payload) =>\n    runtime.admin.ingestion.health(body(payload)),\n  \"admin.reconciliation.retry\": (runtime, payload) =>\n    runtime.admin.reconciliation.retry(body(payload)),\n  \"admin.reconciliation.run\": (runtime, payload) =>\n    runtime.admin.reconciliation.run(body(payload)),\n  \"admin.webhooks.reconcile\": (runtime, payload) =>\n    runtime.admin.webhooks.reconcile(body(payload)),\n  \"admin.webhooks.status\": (runtime, payload) =>\n    runtime.admin.webhooks.status(body(payload)),\n  \"admin.webhooks.verify\": (runtime, payload) =>\n    runtime.admin.webhooks.verify(body(payload)),\n  \"checkout.create\": (runtime, payload) =>\n    runtime.checkout.create(body(payload)),\n  \"customers.create\": (runtime, payload) =>\n    runtime.customers.create(body(payload)),\n  \"customers.delete\": (runtime, payload) =>\n    runtime.customers.delete(body(payload)),\n  \"customers.get\": (runtime, payload) => runtime.customers.get(body(payload)),\n  \"customers.list\": (runtime, payload) => runtime.customers.list(body(payload)),\n  \"customers.update\": (runtime, payload) =>\n    runtime.customers.update(body(payload)),\n  getCapabilities: (runtime, payload) =>\n    runtime.getCapabilities(body(payload) as BillingExecutionTarget),\n  \"invoices.get\": (runtime, payload) => runtime.invoices.get(body(payload)),\n  \"invoices.list\": (runtime, payload) => runtime.invoices.list(body(payload)),\n  \"paymentLinks.create\": (runtime, payload) =>\n    runtime.paymentLinks.create(body(payload)),\n  \"paymentLinks.delete\": (runtime, payload) =>\n    runtime.paymentLinks.delete(body(payload)),\n  \"paymentLinks.get\": (runtime, payload) =>\n    runtime.paymentLinks.get(body(payload)),\n  \"paymentLinks.list\": (runtime, payload) =>\n    runtime.paymentLinks.list(body(payload)),\n  \"paymentLinks.update\": (runtime, payload) =>\n    runtime.paymentLinks.update(body(payload)),\n  \"payments.cancel\": (runtime, payload) =>\n    runtime.payments.cancel(body(payload)),\n  \"payments.create\": (runtime, payload) =>\n    runtime.payments.create(body(payload)),\n  \"payments.get\": (runtime, payload) => runtime.payments.get(body(payload)),\n  \"payments.list\": (runtime, payload) => runtime.payments.list(body(payload)),\n  \"prices.list\": (runtime, payload) => runtime.prices.list(body(payload)),\n  \"products.list\": (runtime, payload) => runtime.products.list(body(payload)),\n  \"relations.list\": (runtime, payload) =>\n    runtime.relations.list(body(payload)),\n  \"refunds.cancel\": (runtime, payload) => runtime.refunds.cancel(body(payload)),\n  \"refunds.create\": (runtime, payload) => runtime.refunds.create(body(payload)),\n  \"refunds.get\": (runtime, payload) => runtime.refunds.get(body(payload)),\n  \"refunds.list\": (runtime, payload) => runtime.refunds.list(body(payload)),\n  \"self.checkout.create\": (runtime, payload) =>\n    runtime.self.checkout.create(body(payload)),\n  \"self.checkout.resume\": (runtime, payload) =>\n    runtime.self.checkout.resume(body(payload)),\n  \"self.customer.get\": (runtime, payload) =>\n    runtime.self.customer.get(body(payload)),\n  \"self.entitlements\": (runtime, payload) =>\n    runtime.self.entitlements(body(payload)),\n  \"self.invoices.get\": (runtime, payload) =>\n    runtime.self.invoices.get(body(payload)),\n  \"self.invoices.list\": (runtime, payload) =>\n    runtime.self.invoices.list(body(payload)),\n  \"self.payments.get\": (runtime, payload) =>\n    runtime.self.payments.get(body(payload)),\n  \"self.payments.list\": (runtime, payload) =>\n    runtime.self.payments.list(body(payload)),\n  \"self.subscription.cancel\": (runtime, payload) =>\n    runtime.self.subscription.cancel(body(payload)),\n  \"self.subscription.change\": (runtime, payload) =>\n    runtime.self.subscription.change(body(payload)),\n  \"self.subscription.enroll\": (runtime, payload) =>\n    runtime.self.subscription.enroll(body(payload)),\n  \"self.subscription.get\": (runtime, payload) =>\n    runtime.self.subscription.get(body(payload)),\n  \"subscriptions.cancel\": (runtime, payload) =>\n    runtime.subscriptions.cancel(body(payload)),\n  \"subscriptions.create\": (runtime, payload) =>\n    runtime.subscriptions.create(body(payload)),\n  \"subscriptions.get\": (runtime, payload) =>\n    runtime.subscriptions.get(body(payload)),\n  \"subscriptions.list\": (runtime, payload) =>\n    runtime.subscriptions.list(body(payload)),\n  \"subscriptions.update\": (runtime, payload) =>\n    runtime.subscriptions.update(body(payload)),\n  \"webhooks.create\": (runtime, payload) =>\n    runtime.webhooks.create(body(payload)),\n  \"webhooks.delete\": (runtime, payload) =>\n    runtime.webhooks.delete(body(payload)),\n  \"webhooks.get\": (runtime, payload) => runtime.webhooks.get(body(payload)),\n  \"webhooks.list\": (runtime, payload) => runtime.webhooks.list(body(payload)),\n  \"webhooks.test\": (runtime, payload) => runtime.webhooks.test(body(payload)),\n  \"webhooks.update\": (runtime, payload) =>\n    runtime.webhooks.update(body(payload)),\n} as const satisfies Record<\n  BillingRuntimeDispatchOperation,\n  BillingRuntimeDispatchHandler\n>;\n\nexport async function invokeBillingRuntimePort(\n  runtime: AthenaBillingRuntime,\n  operation: BillingRuntimeDispatchOperation,\n  payload: unknown\n): Promise<unknown> {\n  const handler: BillingRuntimeDispatchHandler | undefined =\n    BILLING_RUNTIME_DISPATCH[operation];\n  if (handler == null) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"unsupported_operation\",\n    });\n  }\n  return handler(runtime, payload);\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingSelfPort } from \"../types.ts\";\n\nexport function createUnavailableBillingSelfPort(): BillingSelfPort {\n  const fail = (operation: string) => (): Promise<never> => {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"runtime_unavailable\",\n    });\n  };\n  return {\n    checkout: {\n      create: fail(\"self.checkout.create\"),\n      resume: fail(\"self.checkout.resume\"),\n    },\n    customer: {\n      get: fail(\"self.customer.get\"),\n    },\n    entitlements: fail(\"self.entitlements\"),\n    invoices: {\n      get: fail(\"self.invoices.get\"),\n      list: fail(\"self.invoices.list\"),\n    },\n    payments: {\n      get: fail(\"self.payments.get\"),\n      list: fail(\"self.payments.list\"),\n    },\n    subscription: {\n      cancel: fail(\"self.subscription.cancel\"),\n      change: fail(\"self.subscription.change\"),\n      enroll: fail(\"self.subscription.enroll\"),\n      get: fail(\"self.subscription.get\"),\n    },\n  };\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}\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;\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;\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined;\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return;\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  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\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  | null\n  | boolean\n  | number\n  | string\n  | AthenaBillingJson[]\n  | { [key: string]: AthenaBillingJson };\n\nexport interface AthenaBillingCallOptions {\n  apiKey?: string | null;\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaBillingClientConfig {\n  apiKey: string;\n  baseUrl: string;\n  client?: string | null;\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n  data: T;\n  message?: string;\n  status?: string;\n}\n\nexport function withPathParam(\n  path: string,\n  name: string,\n  value: string\n): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nexport function appendQuery(\n  path: string,\n  query?: Record<string, string | number | boolean | null | undefined>\n): string {\n  if (!query) {\n    return path;\n  }\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    params.set(key, String(value));\n  }\n  const serialized = params.toString();\n  return serialized ? `${path}?${serialized}` : path;\n}\n\nexport function parseEnvelopeData<T>(body: unknown): T {\n  if (body && typeof body === \"object\" && \"data\" in body) {\n    return (body as AthenaBillingEnvelope<T>).data;\n  }\n  return undefined as T;\n}\n\nexport interface BillingHttpTransport {\n  call<T>(\n    method: AthenaBillingHttpMethod,\n    path: string,\n    body?: unknown,\n    options?: AthenaBillingCallOptions,\n    responseType?: \"json\" | \"text\"\n  ): Promise<T>;\n}\n\nexport function createBillingHttpTransport(\n  config: AthenaBillingClientConfig\n): BillingHttpTransport {\n  const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n    label: \"Athena billing base URL\",\n  });\n  const fetchImpl =\n    config.fetchImpl ??\n    ((input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) =>\n      globalThis.fetch(input, init));\n\n  async function call<T>(\n    method: AthenaBillingHttpMethod,\n    path: string,\n    body?: unknown,\n    options?: AthenaBillingCallOptions,\n    responseType: \"json\" | \"text\" = \"json\"\n  ): Promise<T> {\n    const headers = buildAthenaRequestHeaders({\n      apiKey: options?.apiKey ?? config.apiKey,\n      callHeaders: options?.headers,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n      },\n      contentType: \"application/json\",\n      profile: \"gateway\",\n      sdkHeaderValue: SDK_HEADER_VALUE,\n    });\n\n    let requestBody: BodyInit | undefined;\n    if (body !== undefined && body !== null) {\n      if (\n        typeof body === \"string\" ||\n        body instanceof Blob ||\n        body instanceof ArrayBuffer ||\n        ArrayBuffer.isView(body) ||\n        body instanceof FormData ||\n        body instanceof URLSearchParams\n      ) {\n        requestBody = body as BodyInit;\n      } else {\n        requestBody = JSON.stringify(body);\n        if (!hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n          headers[\"Content-Type\"] = \"application/json\";\n        }\n      }\n    }\n\n    const targetUrl = `${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n    const response = await fetchImpl(targetUrl, {\n      body: requestBody,\n      headers,\n      method,\n      signal: options?.signal,\n    });\n\n    if (responseType === \"text\") {\n      const text = await response.text();\n      if (!response.ok) {\n        throw new AthenaBillingError({\n          body: text,\n          endpoint: path,\n          message: `Billing request failed (${response.status})`,\n          method,\n          status: response.status,\n        });\n      }\n      return text as T;\n    }\n\n    const rawText = await response.text();\n    let parsed: unknown = rawText;\n    if (rawText) {\n      try {\n        parsed = JSON.parse(rawText);\n      } catch {\n        parsed = rawText;\n      }\n    } else {\n      parsed = null;\n    }\n\n    if (!response.ok) {\n      const message =\n        parsed &&\n        typeof parsed === \"object\" &&\n        \"message\" in parsed &&\n        typeof (parsed as { message: unknown }).message === \"string\"\n          ? (parsed as { message: string }).message\n          : `Billing request failed (${response.status})`;\n      throw new AthenaBillingError({\n        body: parsed,\n        endpoint: path,\n        message,\n        method,\n        status: response.status,\n      });\n    }\n\n    return parseEnvelopeData<T>(parsed);\n  }\n\n  return { call };\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\"; // src/billing/safety\nimport type {\n  BillingCancelPaymentInput,\n  BillingCancelRefundInput,\n  BillingCancelSubscriptionInput,\n  BillingCatalogRelation,\n  BillingCheckout,\n  BillingCreateCheckoutInput,\n  BillingCreateCustomerInput,\n  BillingCreatePaymentInput,\n  BillingCreatePaymentLinkInput,\n  BillingCreateRefundInput,\n  BillingCreateSubscriptionInput,\n  BillingCreateWebhookInput,\n  BillingCustomer,\n  BillingDeleteCustomerInput,\n  BillingDeletePaymentLinkInput,\n  BillingDeleteWebhookInput,\n  BillingExecutionTarget,\n  BillingGetCustomerInput,\n  BillingGetInvoiceInput,\n  BillingGetPaymentInput,\n  BillingGetPaymentLinkInput,\n  BillingGetRefundInput,\n  BillingGetSubscriptionInput,\n  BillingGetWebhookInput,\n  BillingInvoice,\n  BillingListCustomersInput,\n  BillingListInvoicesInput,\n  BillingListPaymentLinksInput,\n  BillingListPaymentsInput,\n  BillingListPricesInput,\n  BillingListProductsInput,\n  BillingListRefundsInput,\n  BillingListRelationsInput,\n  BillingListSubscriptionsInput,\n  BillingListWebhooksInput,\n  BillingPayment,\n  BillingPaymentLink,\n  BillingPrice,\n  BillingProduct,\n  BillingRefund,\n  BillingSubscription,\n  BillingTestWebhookInput,\n  BillingUpdateCustomerInput,\n  BillingUpdatePaymentLinkInput,\n  BillingUpdateSubscriptionInput,\n  BillingUpdateWebhookInput,\n  BillingWebhook,\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  type AthenaBillingClientConfig,\n  appendQuery,\n  createBillingHttpTransport,\n  withPathParam,\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  limit?: number;\n  offset?: number;\n}): void {\n  if (input.offset == null && input.limit == null) {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation: \"payments.list\",\n    reason: \"unsupported_operation\",\n  });\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  input: { profileId?: string | null },\n  operation: string,\n): void {\n  if (input.profileId == null || input.profileId === \"\") {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: \"unsupported_operation\",\n  });\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  input: { connectionId?: string | null },\n  operation: string,\n): void {\n  if (input.connectionId != null && input.connectionId !== \"\") {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: \"missing_connection\",\n  });\n}\n\nfunction connectionQuery(\n  input: BillingExecutionTarget & {\n    cursor?: string;\n    customerId?: string;\n    limit?: number;\n    offset?: number;\n    paymentId?: string;\n    productId?: string;\n    source?: string;\n  },\n): Record<string, string> {\n  const query: Record<string, string> = {};\n  if (input.connectionId) {\n    query.connectionId = input.connectionId;\n  }\n  if (input.clientName) {\n    query.clientName = input.clientName;\n  }\n  if (input.cursor) {\n    query.cursor = input.cursor;\n  }\n  if (input.customerId) {\n    query.customerId = input.customerId;\n  }\n  if (input.paymentId) {\n    query.paymentId = input.paymentId;\n  }\n  if (input.productId) {\n    query.productId = input.productId;\n  }\n  if (input.source) {\n    query.source = input.source;\n  }\n  if (input.limit !== undefined) {\n    query.limit = String(input.limit);\n  }\n  if (input.offset !== undefined) {\n    query.offset = String(input.offset);\n  }\n  return query;\n}\n\nfunction asPage<T>(data: unknown): BillingPage<T> {\n  if (Array.isArray(data)) {\n    return { items: data as T[] };\n  }\n  if (data && typeof data === \"object\") {\n    const record = data as Record<string, unknown>;\n    if (Array.isArray(record.items)) {\n      return {\n        items: record.items as T[],\n        nextCursor: (record.nextCursor as string | null | undefined) ?? null,\n        previousCursor:\n          (record.previousCursor as string | null | undefined) ?? null,\n      };\n    }\n  }\n  return { 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  config: AthenaBillingClientConfig,\n): AthenaBillingRuntimeDispatch {\n  const { call } = createBillingHttpTransport(config);\n\n  return {\n    admin: createUnavailableBillingAdminPort(),\n    checkout: {\n      create(input: BillingCreateCheckoutInput): Promise<BillingCheckout> {\n        const prepared = prepareBillingCommand({\n          operation: \"checkout.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/checkouts\", prepared.payload);\n      },\n    },\n    customers: {\n      create(input: BillingCreateCustomerInput): Promise<BillingCustomer> {\n        const prepared = prepareBillingCommand({\n          operation: \"customers.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/customers\", prepared.payload);\n      },\n      delete(input: BillingDeleteCustomerInput): Promise<void> {\n        return call(\n          \"DELETE\",\n          appendQuery(\n            withPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      get(input: BillingGetCustomerInput): Promise<BillingCustomer> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListCustomersInput,\n      ): Promise<BillingPage<BillingCustomer>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n          ),\n        );\n      },\n      update(input: BillingUpdateCustomerInput): Promise<BillingCustomer> {\n        return call(\n          \"PATCH\",\n          withPathParam(\"/billing/v1/customers/{id}\", \"id\", input.id),\n          input,\n        );\n      },\n    },\n    execute(operation, payload, _principal) {\n      return invokeBillingRuntimePort(this, operation, payload);\n    },\n    async getCapabilities(\n      input: BillingExecutionTarget,\n    ): Promise<BillingCapabilities> {\n      rejectMissingRemoteConnectionId(input, \"getCapabilities\");\n      rejectUnenforcedRemoteProfileTarget(input, \"getCapabilities\");\n      const query = connectionQuery(input);\n      const data = await call(\n        \"GET\",\n        appendQuery(\"/billing/v1/capabilities\", query),\n      );\n      return projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n    },\n    async health() {\n      return {\n        canonicalLag: 0,\n        credentials: \"unavailable\",\n        failedEvents: 0,\n        lastReconciliation: null,\n        lastWebhook: null,\n        pendingConflicts: 0,\n        providerConnection: \"unavailable\",\n        reconciliation: \"unavailable\",\n        webhookRegistration: \"unavailable\",\n      };\n    },\n    invoices: {\n      get(input: BillingGetInvoiceInput): Promise<BillingInvoice> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/invoices/{id}\", \"id\", input.invoiceId),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListInvoicesInput,\n      ): Promise<BillingPage<BillingInvoice>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    mode: \"remote\",\n    paymentLinks: {\n      create(\n        input: BillingCreatePaymentLinkInput,\n      ): Promise<BillingPaymentLink> {\n        const prepared = prepareBillingCommand({\n          operation: \"paymentLinks.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/payment-links\", prepared.payload);\n      },\n      delete(input: BillingDeletePaymentLinkInput): Promise<void> {\n        return call(\n          \"DELETE\",\n          appendQuery(\n            withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      get(input: BillingGetPaymentLinkInput): Promise<BillingPaymentLink> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListPaymentLinksInput,\n      ): Promise<BillingPage<BillingPaymentLink>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n          ),\n        );\n      },\n      update(\n        input: BillingUpdatePaymentLinkInput,\n      ): Promise<BillingPaymentLink> {\n        return call(\n          \"PATCH\",\n          withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", input.id),\n          input,\n        );\n      },\n    },\n    payments: {\n      cancel(input: BillingCancelPaymentInput): Promise<BillingPayment> {\n        rejectUnenforcedRemoteProfileTarget(input, \"payments.cancel\");\n        return call(\n          \"POST\",\n          appendQuery(\n            withPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n          {},\n        );\n      },\n      create(input: BillingCreatePaymentInput): Promise<BillingPayment> {\n        rejectUnenforcedRemoteProfileTarget(input, \"payments.create\");\n        const prepared = prepareBillingCommand({\n          operation: \"payments.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/payments\", prepared.payload);\n      },\n      get(input: BillingGetPaymentInput): Promise<BillingPayment> {\n        rejectUnenforcedRemoteProfileTarget(input, \"payments.get\");\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/payments/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListPaymentsInput,\n      ): Promise<BillingPage<BillingPayment>> {\n        rejectUnsupportedRemotePaymentListPaging(input);\n        rejectUnenforcedRemoteProfileTarget(input, \"payments.list\");\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    prices: {\n      async list(\n        input: BillingListPricesInput,\n      ): Promise<BillingPage<BillingPrice>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/prices\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    products: {\n      async list(\n        input: BillingListProductsInput,\n      ): Promise<BillingPage<BillingProduct>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/products\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    relations: {\n      async list(\n        input: BillingListRelationsInput,\n      ): Promise<BillingPage<BillingCatalogRelation>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/relations\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    refunds: {\n      cancel(input: BillingCancelRefundInput): Promise<BillingRefund> {\n        return call(\n          \"POST\",\n          appendQuery(\n            withPathParam(\n              \"/billing/v1/refunds/{id}/cancel\",\n              \"id\",\n              input.refundId,\n            ),\n            connectionQuery(input),\n          ),\n          {},\n        );\n      },\n      create(input: BillingCreateRefundInput): Promise<BillingRefund> {\n        const prepared = prepareBillingCommand({\n          operation: \"refunds.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/refunds\", prepared.payload);\n      },\n      get(input: BillingGetRefundInput): Promise<BillingRefund> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/refunds/{id}\", \"id\", input.refundId),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListRefundsInput,\n      ): Promise<BillingPage<BillingRefund>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n          ),\n        );\n      },\n    },\n    self: createUnavailableBillingSelfPort(),\n    subscriptions: {\n      cancel(\n        input: BillingCancelSubscriptionInput,\n      ): Promise<BillingSubscription> {\n        return call(\n          \"POST\",\n          appendQuery(\n            withPathParam(\n              \"/billing/v1/subscriptions/{id}/cancel\",\n              \"id\",\n              input.subscriptionId,\n            ),\n            connectionQuery(input),\n          ),\n          {},\n        );\n      },\n      create(\n        input: BillingCreateSubscriptionInput,\n      ): Promise<BillingSubscription> {\n        const prepared = prepareBillingCommand({\n          operation: \"subscriptions.create\",\n          payload: input,\n        });\n        return call(\"POST\", \"/billing/v1/subscriptions\", prepared.payload);\n      },\n      get(input: BillingGetSubscriptionInput): Promise<BillingSubscription> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\n              \"/billing/v1/subscriptions/{id}\",\n              \"id\",\n              input.subscriptionId,\n            ),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListSubscriptionsInput,\n      ): Promise<BillingPage<BillingSubscription>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n          ),\n        );\n      },\n      update(\n        input: BillingUpdateSubscriptionInput,\n      ): Promise<BillingSubscription> {\n        return call(\n          \"PATCH\",\n          appendQuery(\n            withPathParam(\n              \"/billing/v1/subscriptions/{id}\",\n              \"id\",\n              input.subscriptionId,\n            ),\n            connectionQuery(input),\n          ),\n          input,\n        );\n      },\n    },\n    webhooks: {\n      create(input: BillingCreateWebhookInput): Promise<BillingWebhook> {\n        return call(\n          \"POST\",\n          appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n          input,\n        );\n      },\n      delete(input: BillingDeleteWebhookInput): Promise<void> {\n        return call(\n          \"DELETE\",\n          appendQuery(\n            withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      get(input: BillingGetWebhookInput): Promise<BillingWebhook> {\n        return call(\n          \"GET\",\n          appendQuery(\n            withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n        );\n      },\n      async list(\n        input: BillingListWebhooksInput,\n      ): Promise<BillingPage<BillingWebhook>> {\n        return asPage(\n          await call(\n            \"GET\",\n            appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n          ),\n        );\n      },\n      test(input: BillingTestWebhookInput): Promise<BillingWebhook> {\n        return call(\n          \"POST\",\n          appendQuery(\n            withPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n          {},\n        );\n      },\n      update(input: BillingUpdateWebhookInput): Promise<BillingWebhook> {\n        return call(\n          \"PATCH\",\n          appendQuery(\n            withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", input.id),\n            connectionQuery(input),\n          ),\n          input,\n        );\n      },\n    },\n  };\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 { AthenaBillingCapabilityError } from \"./errors.ts\";\nimport { projectRemoteBillingCapabilities } from \"./runtime/remote/project-capabilities.ts\";\nimport {\n  createRemoteBillingRuntime,\n  rejectMissingRemoteConnectionId,\n  rejectUnenforcedRemoteProfileTarget,\n  rejectUnsupportedRemotePaymentListPaging,\n} from \"./runtime/remote/runtime.ts\";\nimport {\n  type AthenaBillingCallOptions,\n  type AthenaBillingClientConfig,\n  type AthenaBillingJson,\n  appendQuery,\n  createBillingHttpTransport,\n  withPathParam,\n} from \"./runtime/remote/transport.ts\";\nimport type {\n  BillingAdminPort,\n  BillingCatalogPort,\n  BillingCheckoutPort,\n  BillingCustomerPort,\n  BillingInvoicePort,\n  BillingPaymentLinkPort,\n  BillingPaymentPort,\n  BillingRefundPort,\n  BillingSelfPort,\n  BillingSubscriptionPort,\n  BillingWebhookPort,\n} from \"./runtime/types.ts\";\nimport type { BillingExecutionTarget } from \"./types.ts\";\n\nexport { AthenaBillingError } from \"./errors.ts\";\nexport type {\n  AthenaBillingCallOptions,\n  AthenaBillingClientConfig,\n  AthenaBillingEnvelope,\n  AthenaBillingHttpMethod,\n  AthenaBillingJson,\n} from \"./runtime/remote/transport.ts\";\n\nexport interface BillingConnectionRefInput {\n  clientName?: string;\n  customerId?: string;\n  connectionId: string;\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n  /**\n   * Merchant/admin list query. Customer HTTP must use `billing.self` instead\n   * of passing `connectionId`.\n   */\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n  source?: \"provider\" | \"persistence\" | string;\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n  email?: string | null;\n  idempotencyKey: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  name?: string | null;\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n  email?: string | null;\n  name?: string | null;\n}\n\nexport interface BillingCreateConnectionInput {\n  config?: Record<string, AthenaBillingJson>;\n  credentialKind?: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  mode?: string;\n  ownerId: string;\n  ownerKind: string;\n  provider: string;\n  providerAccountId: string;\n  providerProfileId?: string | null;\n  scopes?: string[];\n  status?: string;\n}\n\nexport interface BillingUpdateConnectionInput {\n  config?: Record<string, AthenaBillingJson>;\n  credentialKind?: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  mode?: string;\n  providerAccountId?: string;\n  providerProfileId?: string | null;\n  scopes?: string[];\n  status?: string;\n}\n\nexport interface BillingReconcileInput {\n  customerId?: string | null;\n  resourceId: string;\n  resourceKind: string;\n}\n\nexport interface BillingProvisionSinksInput {\n  instance?: string;\n  targetSchema?: string;\n}\n\nexport const billingSdkManifest = {\n  envelopeKind: \"athena\",\n  methods: [\n    {\n      method: \"GET\",\n      name: \"getCapabilities\",\n      path: \"/billing/v1/capabilities\",\n    },\n    { method: \"POST\", name: \"createCheckout\", path: \"/billing/v1/checkouts\" },\n    { method: \"GET\", name: \"listProducts\", path: \"/billing/v1/products\" },\n    { method: \"GET\", name: \"listPrices\", path: \"/billing/v1/prices\" },\n    { method: \"GET\", name: \"listCustomers\", path: \"/billing/v1/customers\" },\n    { method: \"POST\", name: \"createCustomer\", path: \"/billing/v1/customers\" },\n    { method: \"GET\", name: \"getCustomer\", path: \"/billing/v1/customers/{id}\" },\n    {\n      method: \"PATCH\",\n      name: \"updateCustomer\",\n      path: \"/billing/v1/customers/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCustomer\",\n      path: \"/billing/v1/customers/{id}\",\n    },\n    { method: \"GET\", name: \"listPayments\", path: \"/billing/v1/payments\" },\n    { method: \"POST\", name: \"createPayment\", path: \"/billing/v1/payments\" },\n    { method: \"GET\", name: \"getPayment\", path: \"/billing/v1/payments/{id}\" },\n    {\n      method: \"POST\",\n      name: \"cancelPayment\",\n      path: \"/billing/v1/payments/{id}/cancel\",\n    },\n    {\n      method: \"GET\",\n      name: \"listPaymentLinks\",\n      path: \"/billing/v1/payment-links\",\n    },\n    {\n      method: \"POST\",\n      name: \"createPaymentLink\",\n      path: \"/billing/v1/payment-links\",\n    },\n    {\n      method: \"GET\",\n      name: \"getPaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updatePaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deletePaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    { method: \"GET\", name: \"listRefunds\", path: \"/billing/v1/refunds\" },\n    { method: \"POST\", name: \"createRefund\", path: \"/billing/v1/refunds\" },\n    { method: \"GET\", name: \"getRefund\", path: \"/billing/v1/refunds/{id}\" },\n    {\n      method: \"POST\",\n      name: \"cancelRefund\",\n      path: \"/billing/v1/refunds/{id}/cancel\",\n    },\n    {\n      method: \"GET\",\n      name: \"listSubscriptions\",\n      path: \"/billing/v1/subscriptions\",\n    },\n    {\n      method: \"POST\",\n      name: \"createSubscription\",\n      path: \"/billing/v1/subscriptions\",\n    },\n    {\n      method: \"GET\",\n      name: \"getSubscription\",\n      path: \"/billing/v1/subscriptions/{id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateSubscription\",\n      path: \"/billing/v1/subscriptions/{id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"cancelSubscription\",\n      path: \"/billing/v1/subscriptions/{id}/cancel\",\n    },\n    { method: \"GET\", name: \"listInvoices\", path: \"/billing/v1/invoices\" },\n    { method: \"GET\", name: \"getInvoice\", path: \"/billing/v1/invoices/{id}\" },\n    { method: \"GET\", name: \"listWebhooks\", path: \"/billing/v1/webhooks\" },\n    { method: \"POST\", name: \"createWebhook\", path: \"/billing/v1/webhooks\" },\n    { method: \"GET\", name: \"getWebhook\", path: \"/billing/v1/webhooks/{id}\" },\n    {\n      method: \"PATCH\",\n      name: \"updateWebhook\",\n      path: \"/billing/v1/webhooks/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteWebhook\",\n      path: \"/billing/v1/webhooks/{id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"testWebhook\",\n      path: \"/billing/v1/webhooks/{id}/test\",\n    },\n    {\n      method: \"GET\",\n      name: \"listConnections\",\n      path: \"/admin/billing/clients/{client_name}/connections\",\n    },\n    {\n      method: \"POST\",\n      name: \"createConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections\",\n    },\n    {\n      method: \"GET\",\n      name: \"getConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"reconcileDocument\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n    },\n    {\n      method: \"GET\",\n      name: \"listWebhookEvents\",\n      path: \"/admin/billing/clients/{client_name}/webhook-events\",\n    },\n    {\n      method: \"POST\",\n      name: \"provisionWebhookSinks\",\n      path: \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n    },\n    { method: \"GET\", name: \"listGrants\", path: \"/admin/billing/grants\" },\n    { method: \"GET\", name: \"listProviders\", path: \"/admin/billing/providers\" },\n    {\n      method: \"GET\",\n      name: \"listSinkHelpers\",\n      path: \"/admin/webhook-sinks/helpers/billing\",\n    },\n    {\n      method: \"POST\",\n      name: \"ingestProviderWebhook\",\n      path: \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n    },\n    { method: \"GET\", name: \"getDebugBilling\", path: \"/debug/billing\" },\n  ],\n  namespace: \"billing\",\n} as const;\n\nfunction connectionQuery(\n  input: BillingListQuery | BillingConnectionRefInput\n): Record<string, string> {\n  const query: Record<string, string> = {\n    connectionId: input.connectionId,\n  };\n  if (input.clientName) {\n    query.clientName = input.clientName;\n  }\n  if (input.customerId) {\n    query.customerId = input.customerId;\n  }\n  if (\"cursor\" in input && input.cursor) {\n    query.cursor = input.cursor;\n  }\n  if (\"source\" in input && input.source) {\n    query.source = input.source;\n  }\n  if (\"limit\" in input && input.limit !== undefined) {\n    query.limit = String(input.limit);\n  }\n  if (\"offset\" in input && input.offset !== undefined) {\n    query.offset = String(input.offset);\n  }\n  return query;\n}\n\nfunction requireSubscriptionCustomerId(\n  input: BillingConnectionRefInput,\n  operation: string\n): string {\n  if (input.customerId?.trim()) {\n    return input.customerId;\n  }\n  throw new AthenaBillingCapabilityError({\n    message: `Billing compatibility operation ${operation} requires customerId to preserve subscription identity.`,\n    operation,\n    reason: \"unsupported_operation\",\n  });\n}\n\nfunction requireSubscriptionBodyCustomerId(\n  body: Record<string, unknown>,\n  operation: string\n): string {\n  const customerId = body.customerId;\n  if (typeof customerId === \"string\" && customerId.trim()) {\n    return customerId;\n  }\n  throw new AthenaBillingCapabilityError({\n    message: `Billing compatibility operation ${operation} requires customerId to preserve subscription identity.`,\n    operation,\n    reason: \"unsupported_operation\",\n  });\n}\n\nexport interface AthenaBillingModule {\n  admin: BillingAdminPort;\n  cancelPayment: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  cancelRefund: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  cancelSubscription: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  catalog: BillingCatalogPort;\n  checkout: BillingCheckoutPort;\n  createCheckout: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createConnection: (\n    clientName: string,\n    input: BillingCreateConnectionInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createCustomer: (\n    input: BillingEnsureCustomerInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createPayment: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createPaymentLink: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createRefund: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createSubscription: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createWebhook: (\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  customers: BillingCustomerPort;\n  deleteConnection: (\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deleteCustomer: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deletePaymentLink: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deleteWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getCapabilities: (\n    input: BillingExecutionTarget,\n    options?: AthenaBillingCallOptions\n  ) => Promise<BillingCapabilities>;\n  getConnection: (\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getCustomer: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getDebugBilling: (\n    jwtSecret: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<string>;\n  getInvoice: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getPayment: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getPaymentLink: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getRefund: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getSubscription: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  health: () => Promise<import(\"./runtime/health.ts\").AthenaBillingHealth>;\n  ingestProviderWebhook: (\n    input: {\n      provider: string;\n      clientName: string;\n      connectionId: string;\n      body: BodyInit | Record<string, unknown> | string;\n      signatureHeaders?: Record<string, string>;\n    },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  invoices: BillingInvoicePort;\n  listConnections: (\n    clientName: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listCustomers: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listGrants: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n  listInvoices: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPaymentLinks: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPayments: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPrices: (\n    input: BillingConnectionRefInput & { productId?: string },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listProducts: (\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listProviders: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n  listRefunds: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listSinkHelpers: (\n    query?: { targetSchema?: string; instance?: string },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listSubscriptions: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listWebhookEvents: (\n    clientName: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listWebhooks: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  paymentLinks: BillingPaymentLinkPort;\n  payments: BillingPaymentPort;\n  provisionWebhookSinks: (\n    clientName: string,\n    input?: BillingProvisionSinksInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  reconcileDocument: (\n    clientName: string,\n    connectionId: string,\n    input: BillingReconcileInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  refunds: BillingRefundPort;\n  self: BillingSelfPort;\n  subscriptions: BillingSubscriptionPort;\n  testWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateConnection: (\n    clientName: string,\n    connectionId: string,\n    input: BillingUpdateConnectionInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateCustomer: (\n    id: string,\n    input: BillingUpdateCustomerInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updatePaymentLink: (\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateSubscription: (\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  webhooks: BillingWebhookPort;\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 * @docsCapability billing.payments\n * @docsCapability billing.refunds\n * @docsCapability billing.subscriptions\n */\nexport function createBillingModule(\n  config: AthenaBillingClientConfig,\n  remoteRuntime = createRemoteBillingRuntime(config)\n): AthenaBillingModule {\n  const { call } = createBillingHttpTransport(config);\n\n  return {\n    admin: remoteRuntime.admin,\n    cancelPayment(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    cancelRefund(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/refunds/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    async cancelSubscription(id, input, options) {\n      requireSubscriptionCustomerId(input, \"subscriptions.cancel\");\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/subscriptions/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    catalog: {\n      prices: remoteRuntime.prices,\n      products: remoteRuntime.products,\n      relations: remoteRuntime.relations,\n    },\n    checkout: remoteRuntime.checkout,\n    createCheckout(body, options) {\n      return call(\"POST\", \"/billing/v1/checkouts\", body, options);\n    },\n    createConnection(clientName, input, options) {\n      return call(\n        \"POST\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/connections\",\n          \"client_name\",\n          clientName\n        ),\n        {\n          config: input.config,\n          credentialKind: input.credentialKind,\n          metadata: input.metadata,\n          mode: input.mode,\n          ownerId: input.ownerId,\n          ownerKind: input.ownerKind,\n          provider: input.provider,\n          providerAccountId: input.providerAccountId,\n          providerProfileId: input.providerProfileId,\n          scopes: input.scopes,\n          status: input.status,\n        },\n        options\n      );\n    },\n    createCustomer(input, options) {\n      return call(\n        \"POST\",\n        \"/billing/v1/customers\",\n        {\n          clientName: input.clientName,\n          connectionId: input.connectionId,\n          email: input.email,\n          idempotencyKey: input.idempotencyKey,\n          metadata: input.metadata ?? {},\n          name: input.name,\n        },\n        options\n      );\n    },\n    createPayment(body, options) {\n      return call(\"POST\", \"/billing/v1/payments\", body, options);\n    },\n    createPaymentLink(body, options) {\n      return call(\"POST\", \"/billing/v1/payment-links\", body, options);\n    },\n    createRefund(body, options) {\n      return call(\"POST\", \"/billing/v1/refunds\", body, options);\n    },\n    createSubscription(body, options) {\n      return call(\"POST\", \"/billing/v1/subscriptions\", body, options);\n    },\n    createWebhook(input, body, options) {\n      return call(\n        \"POST\",\n        appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n        body,\n        options\n      );\n    },\n    customers: remoteRuntime.customers,\n    deleteConnection(clientName, connectionId, options) {\n      return call(\n        \"DELETE\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        undefined,\n        options\n      );\n    },\n    deleteCustomer(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    deletePaymentLink(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    deleteWebhook(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    async getCapabilities(input, options) {\n      rejectUnenforcedRemoteProfileTarget(input, \"getCapabilities\");\n      rejectMissingRemoteConnectionId(input, \"getCapabilities\");\n      const query: Record<string, string> = {};\n      if (input.connectionId != null) {\n        query.connectionId = input.connectionId;\n      }\n      if (input.clientName != null) {\n        query.clientName = input.clientName;\n      }\n      if (input.provider != null) {\n        query.provider = String(input.provider);\n      }\n      const data = await call(\n        \"GET\",\n        appendQuery(\"/billing/v1/capabilities\", query),\n        undefined,\n        options\n      );\n      return projectRemoteBillingCapabilities(data, input.connectionId ?? \"\");\n    },\n    getConnection(clientName, connectionId, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        undefined,\n        options\n      );\n    },\n    getCustomer(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getDebugBilling(jwtSecret, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/debug/billing\", { jwt_secret: jwtSecret }),\n        undefined,\n        options,\n        \"text\"\n      );\n    },\n    getInvoice(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/invoices/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getPayment(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payments/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getPaymentLink(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getRefund(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/refunds/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    async getSubscription(id, input, options) {\n      requireSubscriptionCustomerId(input, \"subscriptions.get\");\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getWebhook(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    health: () => remoteRuntime.health(),\n    ingestProviderWebhook(input, options) {\n      const path = withPathParam(\n        withPathParam(\n          withPathParam(\n            \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n            \"provider\",\n            input.provider\n          ),\n          \"client_name\",\n          input.clientName\n        ),\n        \"connection_id\",\n        input.connectionId\n      );\n      return call(\"POST\", path, input.body, {\n        ...options,\n        headers: {\n          ...(options?.headers ?? {}),\n          ...(input.signatureHeaders ?? {}),\n        },\n      });\n    },\n    invoices: remoteRuntime.invoices,\n    listConnections(clientName, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/connections\",\n          \"client_name\",\n          clientName\n        ),\n        undefined,\n        options\n      );\n    },\n    listCustomers(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listGrants(options) {\n      return call(\"GET\", \"/admin/billing/grants\", undefined, options);\n    },\n    listInvoices(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listPaymentLinks(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    async listPayments(input, options) {\n      rejectUnsupportedRemotePaymentListPaging(input);\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listPrices(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/prices\", {\n          ...connectionQuery(input),\n          ...(input.productId ? { productId: input.productId } : {}),\n        }),\n        undefined,\n        options\n      );\n    },\n    listProducts(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/products\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listProviders(options) {\n      return call(\"GET\", \"/admin/billing/providers\", undefined, options);\n    },\n    listRefunds(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listSinkHelpers(query, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/admin/webhook-sinks/helpers/billing\", {\n          instance: query?.instance,\n          targetSchema: query?.targetSchema,\n        }),\n        undefined,\n        options\n      );\n    },\n    listSubscriptions(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listWebhookEvents(clientName, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/webhook-events\",\n          \"client_name\",\n          clientName\n        ),\n        undefined,\n        options\n      );\n    },\n    listWebhooks(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    paymentLinks: remoteRuntime.paymentLinks,\n    payments: remoteRuntime.payments,\n    provisionWebhookSinks(clientName, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n            \"client_name\",\n            clientName\n          ),\n          {\n            instance: input?.instance,\n            targetSchema: input?.targetSchema,\n          }\n        ),\n        {},\n        options\n      );\n    },\n    reconcileDocument(clientName, connectionId, input, options) {\n      return call(\n        \"POST\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        {\n          customerId: input.customerId,\n          resourceId: input.resourceId,\n          resourceKind: input.resourceKind,\n        },\n        options\n      );\n    },\n    refunds: remoteRuntime.refunds,\n    self: remoteRuntime.self,\n    subscriptions: remoteRuntime.subscriptions,\n    testWebhook(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    updateConnection(clientName, connectionId, input, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        input,\n        options\n      );\n    },\n    updateCustomer(id, input, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n        {\n          clientName: input.clientName,\n          connectionId: input.connectionId,\n          email: input.email,\n          name: input.name,\n        },\n        options\n      );\n    },\n    updatePaymentLink(id, body, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n        body,\n        options\n      );\n    },\n    async updateSubscription(id, body, options) {\n      requireSubscriptionBodyCustomerId(body, \"subscriptions.update\");\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n        { ...body, subscriptionId: id },\n        options\n      );\n    },\n    updateWebhook(id, input, body, options) {\n      return call(\n        \"PATCH\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        body,\n        options\n      );\n    },\n    webhooks: remoteRuntime.webhooks,\n  };\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\";\nimport { projectCapabilitiesToDiscovery } from \"./capabilities-projection.ts\";\n\nexport function serializeAthenaRuntimeDiscoveryDocument(\n  runtime: Pick<AthenaServerRuntime, \"capabilities\" | \"capabilitiesIr\">\n): AthenaRuntimeDiscoveryDocument {\n  const runtimeCaps = runtime.capabilities;\n  const baseCaps = {\n    auth: runtimeCaps.auth,\n    delete: true,\n    fetch: true,\n    insert: true,\n    models: runtimeCaps.modelEnforcement,\n    nestedRelations: runtimeCaps.nestedRelations,\n    policy: runtimeCaps.policies,\n    rawSql: runtimeCaps.rawSql,\n    rpc: runtimeCaps.rpc,\n    update: true,\n  } as const;\n  const caps = runtime.capabilitiesIr\n    ? projectCapabilitiesToDiscovery(runtime.capabilitiesIr, baseCaps)\n    : baseCaps;\n  return {\n    athena: true,\n    capabilities: {\n      auth: caps.auth,\n      delete: caps.delete,\n      fetch: caps.fetch,\n      insert: caps.insert,\n      models: caps.models,\n      nestedRelations: caps.nestedRelations,\n      policy: caps.policy,\n      rawSql: caps.rawSql,\n      rpc: caps.rpc,\n      update: caps.update,\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\";\nexport const DEFAULT_ATHENA_NEXT_NOTIFICATIONS_ENDPOINT =\n  \"/api/athena/notifications\";\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  basePath: string;\n  root?: string;\n}): string {\n  const value = input.basePath.trim();\n  if (/^https?:\\/\\//i.test(value)) {\n    return value;\n  }\n  const prefixed = value.startsWith(\"/\") ? value : `/${value}`;\n  const root = input.root?.replace(/\\/+$/, \"\") ?? \"\";\n  if (root) {\n    if (/^https?:\\/\\//i.test(root)) {\n      return `${root}${prefixed}`;\n    }\n    return `${root}${prefixed}`;\n  }\n  const origin =\n    (globalThis as { location?: { origin?: string } }).location?.origin ??\n    (globalThis as { window?: { location?: { origin?: string } } }).window\n      ?.location?.origin;\n  if (origin) {\n    return `${origin.replace(/\\/+$/, \"\")}${prefixed}`;\n  }\n  return `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  headers?: Record<string, string>;\n  invocation: AthenaTransportInvocationIR;\n  root?: string;\n  transport: AthenaHttpTransportIR;\n}): AthenaHttpRequestIR {\n  const url = resolveAthenaHttpUrl({\n    basePath: input.transport.basePath,\n    root: input.root,\n  });\n  const credentials: RequestCredentials =\n    input.transport.credentials === \"same-origin\" ? \"same-origin\" : \"omit\";\n  return {\n    body: JSON.stringify({\n      operation: input.invocation.operation,\n      payload: input.invocation.payload,\n    }),\n    credentials,\n    headers: {\n      \"content-type\": \"application/json\",\n      ...input.headers,\n    },\n    method: \"POST\",\n    url,\n  };\n}\n\nexport function compileAthenaHttpRequest(\n  input: Parameters<typeof compileAthenaRpcHttpRequest>[0]\n): AthenaHttpRequestIR {\n  return compileAthenaRpcHttpRequest(input);\n}\n","import type {\n  AthenaTransportErrorEnvelope,\n  AthenaTransportResult,\n} from \"../error-envelope.ts\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (value && typeof value === \"object\") {\n    return value as Record<string, unknown>;\n  }\n}\n\nfunction unwrapSuccessData<T>(\n  record: Record<string, unknown> | undefined,\n  json: unknown\n): T {\n  if (record && typeof record.ok === \"boolean\") {\n    return record.data as T;\n  }\n  return json as T;\n}\n\nfunction readHeader(\n  headers: Headers | undefined,\n  name: string\n): string | undefined {\n  const value = headers?.get(name)?.trim();\n  return value ? value : undefined;\n}\n\nexport function parseAthenaHttpTransportResponse<T>(input: {\n  headers?: Headers;\n  json: unknown;\n  status: number;\n  statusText: string;\n}): AthenaTransportResult<T> {\n  const record = asRecord(input.json);\n  const errorRecord = asRecord(record?.error);\n  const ok = record?.ok !== false && input.status >= 200 && input.status < 300;\n  if (ok) {\n    const enveloped = typeof record?.ok === \"boolean\";\n    return {\n      data: unwrapSuccessData<T>(record, input.json),\n      enveloped,\n      ok: true,\n    };\n  }\n  const status =\n    typeof record?.status === \"number\"\n      ? record.status\n      : typeof errorRecord?.status === \"number\"\n        ? errorRecord.status\n        : input.status;\n  const code =\n    typeof errorRecord?.code === \"string\" && errorRecord.code.trim()\n      ? errorRecord.code\n      : `ATHENA_TRANSPORT_HTTP_${status}`;\n  const message =\n    typeof errorRecord?.message === \"string\" && errorRecord.message.trim()\n      ? errorRecord.message\n      : input.statusText || `transport request failed (${status})`;\n  const errorNumber =\n    typeof errorRecord?.errorNumber === \"number\"\n      ? errorRecord.errorNumber\n      : undefined;\n  const requestId =\n    (typeof errorRecord?.requestId === \"string\" && errorRecord.requestId.trim()\n      ? errorRecord.requestId.trim()\n      : undefined) ?? readHeader(input.headers, \"x-athena-request-id\");\n  const retryable =\n    typeof errorRecord?.retryable === \"boolean\"\n      ? errorRecord.retryable\n      : undefined;\n  const envelope: AthenaTransportErrorEnvelope = {\n    code,\n    details: errorRecord ?? record ?? input.json,\n    ...(errorNumber === undefined ? {} : { errorNumber }),\n    message,\n    ...(requestId === undefined ? {} : { requestId }),\n    ...(retryable === undefined ? {} : { retryable }),\n    status,\n  };\n  return { 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  fetch?: typeof fetch;\n  headers?: Record<string, string>;\n  invocation: AthenaTransportInvocationIR;\n  root?: string;\n  transport: AthenaHttpTransportIR;\n}): Promise<AthenaTransportResult<T>> {\n  const fetchImpl = input.fetch ?? fetch;\n  const request = compileAthenaRpcHttpRequest({\n    headers: input.headers,\n    invocation: input.invocation,\n    root: input.root,\n    transport: input.transport,\n  });\n  const response = await fetchImpl(request.url, {\n    body: request.body,\n    credentials: request.credentials,\n    headers: request.headers,\n    method: request.method,\n  });\n  const json = await response.json().catch(() => undefined);\n  return parseAthenaHttpTransportResponse<T>({\n    headers: response.headers,\n    json,\n    status: response.status,\n    statusText: response.statusText,\n  });\n}\n\nexport function createAthenaHttpTransportExecutor(options?: {\n  fetch?: typeof fetch;\n  headers?: Record<string, string>;\n  root?: string;\n}): {\n  execute<T>(input: {\n    invocation: AthenaTransportInvocationIR;\n    transport: AthenaHttpTransportIR;\n  }): Promise<AthenaTransportResult<T>>;\n} {\n  return {\n    execute<T>(input: {\n      invocation: AthenaTransportInvocationIR;\n      transport: AthenaHttpTransportIR;\n    }) {\n      return executeAthenaHttpTransport<T>({\n        fetch: options?.fetch,\n        headers: options?.headers,\n        invocation: input.invocation,\n        root: options?.root,\n        transport: input.transport,\n      });\n    },\n  };\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  basePath: string;\n  credentials: AthenaHttpTransportCredentials;\n  domain: AthenaHttpTransportDomain;\n  encoding: \"json\";\n  kind: \"http\";\n  origin: AthenaHttpTransportOrigin;\n  version: 1;\n}\n\nconst HTTP_TRANSPORT_DOMAINS: readonly AthenaHttpTransportDomain[] = [\n  \"storage\",\n  \"billing\",\n  \"data\",\n  \"auth\",\n];\n\nconst TOPOLOGY_SLOTS: readonly AthenaHttpTransportDomain[] = [\n  \"data\",\n  \"auth\",\n  \"storage\",\n  \"billing\",\n];\n\nexport function isAthenaHttpTransportDomain(\n  value: string\n): value is AthenaHttpTransportDomain {\n  return (HTTP_TRANSPORT_DOMAINS as readonly string[]).includes(value);\n}\n\nexport function createAthenaHttpTransportIR(input: {\n  basePath: string;\n  credentials?: AthenaHttpTransportCredentials;\n  domain: string;\n  origin?: string;\n}): AthenaHttpTransportIR {\n  if (typeof input.basePath !== \"string\" || !input.basePath.trim()) {\n    throw new Error(\"AthenaHttpTransportIR.basePath is required\");\n  }\n  if (!isAthenaHttpTransportDomain(input.domain)) {\n    throw new Error(\"AthenaHttpTransportIR.domain is invalid\");\n  }\n  const scheme = schemeOf(input.basePath);\n  if (scheme && scheme !== \"http\" && scheme !== \"https\") {\n    throw new Error(\"AthenaHttpTransportIR.basePath scheme is unsupported\");\n  }\n  if (isMalformedHttpUrl(input.basePath)) {\n    throw new Error(\"AthenaHttpTransportIR.basePath is not a valid HTTP URL\");\n  }\n  const origin = originClass(input.origin, input.basePath);\n  if (\n    origin === \"same-origin\" &&\n    isAbsoluteHttpUrl(input.basePath) &&\n    isMalformedHttpUrl(input.basePath)\n  ) {\n    throw new Error(\n      \"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\"\n    );\n  }\n  const credentials = credentialsFor(input.credentials, origin);\n  return {\n    basePath: input.basePath,\n    credentials,\n    domain: input.domain,\n    encoding: \"json\",\n    kind: \"http\",\n    origin,\n    version: 1,\n  };\n}\n\nexport function validateAthenaTransportIR(ir: unknown): AthenaHttpTransportIR {\n  if (!ir || typeof ir !== \"object\") {\n    throw new Error(\"AthenaHttpTransportIR is required\");\n  }\n  const record = ir as Record<string, unknown>;\n  if (record.kind !== \"http\") {\n    throw new Error(\"AthenaHttpTransportIR.kind must be http\");\n  }\n  if (record.version !== 1) {\n    throw new Error(\"AthenaHttpTransportIR.version must be 1\");\n  }\n  if (\n    typeof record.domain !== \"string\" ||\n    !isAthenaHttpTransportDomain(record.domain)\n  ) {\n    throw new Error(\"AthenaHttpTransportIR.domain is invalid\");\n  }\n  if (typeof record.basePath !== \"string\" || !record.basePath) {\n    throw new Error(\"AthenaHttpTransportIR.basePath is required\");\n  }\n  if (\n    record.origin !== \"same-origin\" &&\n    record.origin !== \"remote\" &&\n    record.origin !== \"absolute\"\n  ) {\n    throw new Error(\"AthenaHttpTransportIR.origin is invalid\");\n  }\n  if (record.credentials !== \"same-origin\" && record.credentials !== \"none\") {\n    throw new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n  }\n  if (record.encoding !== \"json\") {\n    throw new Error(\"AthenaHttpTransportIR.encoding is invalid\");\n  }\n  if (record.origin !== \"same-origin\" && record.credentials === \"same-origin\") {\n    throw new Error(\n      \"AthenaHttpTransportIR.credentials same-origin requires same-origin\"\n    );\n  }\n  const slot = slotFromBasePath(record.basePath);\n  if (slot && slot !== record.domain) {\n    throw new Error(\n      \"AthenaHttpTransportIR.domain does not match topology slot\"\n    );\n  }\n  return record as unknown as AthenaHttpTransportIR;\n}\n\nexport function validateAthenaRuntimeTopologyIR(value: unknown): void {\n  if (value == null) {\n    return;\n  }\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"AthenaRuntimeTopologyIR is invalid\");\n  }\n  const transports = (value as { transports?: unknown }).transports;\n  if (transports == null) {\n    return;\n  }\n  if (typeof transports !== \"object\" || Array.isArray(transports)) {\n    throw new Error(\"AthenaRuntimeTopologyIR.transports is invalid\");\n  }\n  const slots = transports as Record<string, unknown>;\n  for (const slot of TOPOLOGY_SLOTS) {\n    const entry = slots[slot];\n    if (entry == null) {\n      continue;\n    }\n    if (typeof entry !== \"object\" || Array.isArray(entry)) {\n      throw new Error(`${slot} transport descriptor is invalid`);\n    }\n    const domain = (entry as { domain?: unknown }).domain;\n    if (typeof domain === \"string\" && domain !== slot) {\n      throw new Error(`${slot} transport domain does not match topology slot`);\n    }\n  }\n}\n\nexport {\n  type AthenaHttpExecutorOptions,\n  createAthenaHttpExecutor,\n} from \"../execution/http-executor.ts\";\nexport { joinAthenaHttpPath } from \"./join-path.ts\";\n\nfunction originClass(\n  origin: string | undefined,\n  basePath: string\n): AthenaHttpTransportOrigin {\n  if (origin === \"same-origin\") {\n    if (isMalformedHttpUrl(basePath)) {\n      throw new Error(\n        \"AthenaHttpTransportIR.origin same-origin cannot use a malformed absolute URL\"\n      );\n    }\n    return \"same-origin\";\n  }\n  if (origin === \"remote\" || origin === \"absolute\") {\n    return origin;\n  }\n  if (isAbsoluteHttpUrl(basePath)) {\n    return \"remote\";\n  }\n  if (origin && /^https?:\\/\\//i.test(origin)) {\n    return \"absolute\";\n  }\n  return \"same-origin\";\n}\n\nfunction credentialsFor(\n  credentials: AthenaHttpTransportCredentials | undefined,\n  origin: AthenaHttpTransportOrigin\n): AthenaHttpTransportCredentials {\n  if (credentials === \"same-origin\" || credentials === \"none\") {\n    if (origin !== \"same-origin\" && credentials === \"same-origin\") {\n      throw new Error(\n        \"AthenaHttpTransportIR.credentials same-origin requires same-origin\"\n      );\n    }\n    return credentials;\n  }\n  if (credentials != null) {\n    throw new Error(\"AthenaHttpTransportIR.credentials is invalid\");\n  }\n  return origin === \"same-origin\" ? \"same-origin\" : \"none\";\n}\n\nfunction schemeOf(basePath: string): string | undefined {\n  const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(basePath);\n  return match?.[1]?.toLowerCase();\n}\n\nfunction isAbsoluteHttpUrl(basePath: string): boolean {\n  return /^https?:\\/\\//i.test(basePath);\n}\n\nfunction isMalformedHttpUrl(basePath: string): boolean {\n  if (!isAbsoluteHttpUrl(basePath)) {\n    return false;\n  }\n  try {\n    const url = new URL(basePath);\n    return !url.hostname;\n  } catch {\n    return true;\n  }\n}\n\nfunction slotFromBasePath(\n  basePath: string\n): AthenaHttpTransportDomain | undefined {\n  let path = basePath;\n  if (isAbsoluteHttpUrl(basePath)) {\n    try {\n      path = new URL(basePath).pathname;\n    } catch {\n      path = basePath;\n    }\n  }\n  if (path.includes(\"/storage\")) {\n    return \"storage\";\n  }\n  if (path.includes(\"/billing\")) {\n    return \"billing\";\n  }\n  if (path.includes(\"/auth\")) {\n    return \"auth\";\n  }\n}\n","import {\n  ATHENA_BILLING_AUTHORIZATION_DENIED,\n  ATHENA_BILLING_OPERATION_UNAVAILABLE,\n  ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n  AthenaBillingAuthorizationError,\n  AthenaBillingCapabilityError,\n  AthenaBillingError,\n  AthenaBillingProviderError,\n  AthenaBillingProviderRequestError,\n  type BillingProviderErrorKind,\n  type BillingRetryDisposition,\n} from \"../errors.ts\";\nimport { AthenaBillingSubjectError } from \"../subject/errors.ts\";\n\nexport interface AthenaTransportErrorEnvelope {\n  code?: string;\n  errorNumber?: number;\n  kind?: string;\n  message?: string;\n  missing?: readonly unknown[];\n  operation?: string;\n  provider?: string;\n  reason?: string;\n  retry?: string;\n  status?: number;\n}\n\nconst PROVIDER_KINDS = new Set<BillingProviderErrorKind>([\n  \"authentication\",\n  \"authorization\",\n  \"invalid_request\",\n  \"not_found\",\n  \"conflict\",\n  \"idempotency_conflict\",\n  \"rate_limited\",\n  \"provider_unavailable\",\n  \"network\",\n  \"timeout\",\n  \"signature_invalid\",\n  \"unsupported_operation\",\n  \"unsupported_currency\",\n  \"unsupported_payment_method\",\n  \"customer_action_required\",\n  \"payment_declined\",\n  \"resource_state_conflict\",\n  \"serialization\",\n  \"unknown\",\n]);\n\nexport function billingErrorFromTransport(\n  envelope: AthenaTransportErrorEnvelope | Record<string, unknown>\n): Error {\n  const record = envelope as AthenaTransportErrorEnvelope;\n  const code = typeof record.code === \"string\" ? record.code : undefined;\n  const message =\n    typeof record.message === \"string\" && record.message\n      ? record.message\n      : \"billing request failed\";\n  const operation =\n    typeof record.operation === \"string\" && record.operation\n      ? record.operation\n      : \"billing\";\n  const status = typeof record.status === \"number\" ? record.status : undefined;\n  const kind = asProviderKind(record.kind);\n\n  if (\n    code === \"ATHENA_BILLING_NOT_FOUND\" ||\n    code === \"ATHENA_BILLING_SUBJECT_CONFLICT\"\n  ) {\n    return new AthenaBillingSubjectError({\n      code,\n      conflict:\n        typeof (record as { conflict?: unknown }).conflict === \"string\"\n          ? String((record as { conflict: string }).conflict)\n          : undefined,\n      message,\n      status: status ?? (code === \"ATHENA_BILLING_NOT_FOUND\" ? 404 : 409),\n    });\n  }\n\n  if (code === ATHENA_BILLING_AUTHORIZATION_DENIED) {\n    const missing = Array.isArray(record.missing)\n      ? record.missing.map((entry) => String(entry))\n      : [];\n    return new AthenaBillingAuthorizationError({\n      missing,\n      operation,\n    });\n  }\n\n  if (code === ATHENA_BILLING_OPERATION_UNAVAILABLE) {\n    return new AthenaBillingCapabilityError({\n      message,\n      operation,\n      reason:\n        typeof record.reason === \"string\" && record.reason\n          ? record.reason\n          : \"unsupported_operation\",\n    });\n  }\n\n  if (code === ATHENA_BILLING_PROVIDER_NOT_CONFIGURED) {\n    return new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message,\n    });\n  }\n\n  if (\n    code === \"ATHENA_BILLING_WEBHOOK_SIGNATURE_INVALID\" ||\n    kind === \"signature_invalid\"\n  ) {\n    return new AthenaBillingProviderRequestError({\n      kind: \"signature_invalid\",\n      message,\n      provider:\n        typeof record.provider === \"string\" ? record.provider : \"mollie\",\n      retry: asRetry(record.retry) ?? \"never\",\n      status: status ?? 400,\n    });\n  }\n\n  if (code === \"ATHENA_BILLING_PROVIDER_REQUEST\" || kind) {\n    return new AthenaBillingProviderRequestError({\n      kind: kind ?? \"unknown\",\n      message,\n      provider:\n        typeof record.provider === \"string\" ? record.provider : \"mollie\",\n      retry: asRetry(record.retry) ?? \"never\",\n      status: status ?? defaultProviderRequestStatus(kind ?? \"unknown\"),\n    });\n  }\n\n  if (\n    code === \"ATHENA_BILLING_INVALID_REQUEST\" ||\n    (code && /ATHENA_BILLING_MONEY_|ATHENA_BILLING_IDEMPOTENCY/.test(code))\n  ) {\n    const error = new AthenaBillingError({\n      body: record,\n      endpoint: \"\",\n      message,\n      method: \"POST\",\n      status: status ?? 400,\n    });\n    Object.assign(error, { code, errorNumber: record.errorNumber });\n    return error;\n  }\n\n  if (!code && status === undefined) {\n    return new Error(message);\n  }\n\n  const error = new AthenaBillingError({\n    body: record,\n    endpoint: \"\",\n    message,\n    method: \"POST\",\n    status: status ?? 500,\n  });\n  Object.assign(error, { code, errorNumber: record.errorNumber });\n  return error;\n}\n\nfunction defaultProviderRequestStatus(kind: BillingProviderErrorKind): number {\n  switch (kind) {\n    case \"not_found\":\n      return 404;\n    case \"rate_limited\":\n      return 429;\n    case \"provider_unavailable\":\n    case \"network\":\n    case \"timeout\":\n      return 503;\n    case \"unknown\":\n      return 500;\n    default:\n      return 400;\n  }\n}\n\nfunction asProviderKind(value: unknown): BillingProviderErrorKind | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  return PROVIDER_KINDS.has(value as BillingProviderErrorKind)\n    ? (value as BillingProviderErrorKind)\n    : undefined;\n}\n\nfunction asRetry(value: unknown): BillingRetryDisposition | undefined {\n  if (\n    value === \"never\" ||\n    value === \"safe\" ||\n    value === \"reconcile_first\" ||\n    value === \"customer_action_required\"\n  ) {\n    return value;\n  }\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  BillingCatalogPort,\n  BillingPricePort,\n  BillingProductPort,\n  BillingRelationPort,\n  BillingSelfPort,\n} from \"./types.ts\";\n\nexport function resolveBrowserBillingEndpoint(endpoints?: {\n  billing?: string;\n}): string {\n  const advertised = endpoints?.billing?.trim();\n  if (!advertised) {\n    return DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n  }\n  if (/^https?:\\/\\//i.test(advertised)) {\n    return DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n  }\n  return advertised.startsWith(\"/\")\n    ? advertised\n    : DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT;\n}\n\nfunction billingHttpSuccessData(\n  body: unknown,\n  enveloped: boolean | undefined\n): unknown {\n  if (enveloped === false) {\n    return;\n  }\n  if (body === null || Array.isArray(body)) {\n    return body;\n  }\n  if (body && typeof body === \"object\") {\n    const leftover = body as { data?: unknown; ok?: unknown };\n    if (typeof leftover.ok === \"boolean\") {\n      return \"data\" in leftover ? leftover.data : undefined;\n    }\n  }\n  return body;\n}\n\nfunction asExecutorTransport(\n  ir: ReturnType<typeof createAthenaHttpTransportIR>\n): AthenaHttpTransportIR {\n  return {\n    basePath: ir.basePath,\n    credentials: ir.credentials,\n    domain: ir.domain,\n    encoding: \"json\",\n    kind: \"http\",\n    origin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n  };\n}\n\nfunction sameOriginBillingTransport(\n  advertised: AthenaHttpTransportIR\n): AthenaHttpTransportIR | undefined {\n  if (advertised.origin !== \"same-origin\") {\n    return;\n  }\n  if (/^https?:\\/\\//i.test(advertised.basePath)) {\n    return;\n  }\n  return advertised;\n}\n\ninterface BrowserBillingTransportOptions {\n  endpoints?: { billing?: string };\n  resolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n  topology?: AthenaRuntimeTopologyIR;\n}\n\nasync function resolveBillingTransport(\n  options?: BrowserBillingTransportOptions\n): Promise<AthenaHttpTransportIR | undefined> {\n  const explicit = options?.endpoints?.billing?.trim();\n  if (explicit) {\n    return asExecutorTransport(\n      createAthenaHttpTransportIR({\n        basePath: resolveBrowserBillingEndpoint({ billing: explicit }),\n        domain: \"billing\",\n        origin: \"same-origin\",\n      })\n    );\n  }\n  const topology =\n    options?.topology ??\n    (options?.resolveTopology ? await options.resolveTopology() : undefined);\n  if (topology) {\n    const advertised = topology.transports.billing;\n    if (advertised?.kind === \"http\") {\n      return (\n        sameOriginBillingTransport(advertised) ??\n        asExecutorTransport(\n          createAthenaHttpTransportIR({\n            basePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n            domain: \"billing\",\n            origin: \"same-origin\",\n          })\n        )\n      );\n    }\n    return;\n  }\n  return asExecutorTransport(\n    createAthenaHttpTransportIR({\n      basePath: DEFAULT_ATHENA_NEXT_BILLING_ENDPOINT,\n      domain: \"billing\",\n      origin: \"same-origin\",\n    })\n  );\n}\n\n/** Browser billing client: catalog, subject-self, and capability probe only. */\nexport interface AthenaBrowserBillingTransport {\n  catalog: BillingCatalogPort;\n  getCapabilities: (\n    input: BillingExecutionTarget\n  ) => Promise<BillingCapabilities>;\n  self: BillingSelfPort;\n}\n\nfunction billingRequestHeaders(options?: {\n  appUrl?: string;\n  headers?: Record<string, string>;\n}): Record<string, string> | undefined {\n  const origin =\n    typeof globalThis.window !== \"undefined\" &&\n    typeof globalThis.window.location?.origin === \"string\" &&\n    globalThis.window.location.origin.length > 0\n      ? globalThis.window.location.origin\n      : options?.appUrl?.trim()\n        ? new URL(options.appUrl).origin\n        : undefined;\n  const headers = {\n    ...(options?.headers ?? {}),\n    ...(origin ? { origin } : {}),\n  };\n  return Object.keys(headers).length > 0 ? headers : undefined;\n}\n\nexport function createBrowserBillingTransport(options?: {\n  appUrl?: string;\n  baseUrl?: string;\n  endpoints?: { billing?: string };\n  fetch?: typeof fetch;\n  headers?: Record<string, string>;\n  resolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n  topology?: AthenaRuntimeTopologyIR;\n}): AthenaBrowserBillingTransport {\n  let pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n  const loadTransport = () => {\n    pending ??= resolveBillingTransport(options);\n    return pending;\n  };\n\n  async function call(operation: string, payload: unknown): Promise<unknown> {\n    const transport = await loadTransport();\n    if (!transport) {\n      throw new AthenaBillingError({\n        body: undefined,\n        code: \"ATHENA_BILLING_PROVIDER_NOT_CONFIGURED\",\n        endpoint: \"\",\n        message: \"billing runtime is not configured\",\n        method: \"POST\",\n        status: 503,\n      });\n    }\n    const result = await executeAthenaHttpTransport({\n      fetch: options?.fetch ?? fetch,\n      headers: billingRequestHeaders(options),\n      invocation: {\n        domain: \"billing\",\n        operation,\n        payload,\n      },\n      root: options?.baseUrl,\n      transport,\n    });\n    if (!result.ok) {\n      const details = result.error.details;\n      const envelope =\n        details && typeof details === \"object\"\n          ? (details as Record<string, unknown>)\n          : {};\n      const envelopeStatus =\n        typeof envelope.status === \"number\" ? envelope.status : undefined;\n      const nested =\n        envelope.error && typeof envelope.error === \"object\"\n          ? (envelope.error as Record<string, unknown>)\n          : undefined;\n      const rawWire =\n        typeof envelope.code === \"string\"\n          ? envelope.code\n          : typeof nested?.code === \"string\"\n            ? nested.code\n            : undefined;\n      const wireCode =\n        rawWire && !rawWire.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n          ? rawWire\n          : undefined;\n      const transportCode = result.error.code;\n      const code =\n        wireCode ??\n        (typeof transportCode === \"string\" &&\n        !transportCode.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n          ? transportCode\n          : undefined);\n      throw billingErrorFromTransport({\n        ...envelope,\n        ...(nested ?? {}),\n        ...(code === undefined ? {} : { code }),\n        errorNumber:\n          typeof nested?.errorNumber === \"number\"\n            ? nested.errorNumber\n            : result.error.errorNumber,\n        message: result.error.message,\n        missing: nested?.missing ?? envelope.missing,\n        operation:\n          typeof nested?.operation === \"string\"\n            ? nested.operation\n            : envelope.operation,\n        ...(envelopeStatus === undefined ? {} : { status: envelopeStatus }),\n      });\n    }\n    return billingHttpSuccessData(result.data, result.enveloped);\n  }\n\n  const self: BillingSelfPort = {\n    checkout: {\n      create: (input) => call(\"self.checkout.create\", input) as never,\n      resume: (input) => call(\"self.checkout.resume\", input) as never,\n    },\n    customer: {\n      get: () => call(\"self.customer.get\", {}) as never,\n    },\n    entitlements: () => call(\"self.entitlements\", {}) as never,\n    invoices: {\n      get: (input) => call(\"self.invoices.get\", input) as never,\n      list: (input) => call(\"self.invoices.list\", input) as never,\n    },\n    payments: {\n      get: (input) => call(\"self.payments.get\", input) as never,\n      list: (input) => call(\"self.payments.list\", input) as never,\n    },\n    subscription: {\n      cancel: (input) => call(\"self.subscription.cancel\", input) as never,\n      change: (input) => call(\"self.subscription.change\", input) as never,\n      enroll: (input) => call(\"self.subscription.enroll\", input) as never,\n      get: (input) => call(\"self.subscription.get\", input) as never,\n      getChangeOperation: (input) =>\n        call(\"self.subscription.get\", input) as never,\n    },\n  };\n  const products: BillingProductPort = {\n    list: (input) => call(\"products.list\", input) as never,\n  };\n  const prices: BillingPricePort = {\n    list: (input) => call(\"prices.list\", input) as never,\n  };\n  const relations: BillingRelationPort = {\n    list: (input) => call(\"relations.list\", input) as never,\n  };\n\n  return {\n    catalog: { prices, products, relations },\n    getCapabilities: (input) =>\n      call(\"getCapabilities\", input) as Promise<BillingCapabilities>,\n    self,\n  };\n}\n","import {\n  type AthenaRuntimeEnvironment,\n  detectAthenaRuntimeEnvironment,\n} from \"../../runtime/resolve.ts\";\nimport {\n  ATHENA_BILLING_CONFIG_CONFLICT,\n  ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n  AthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport type { BillingRuntimeMode } from \"../types.ts\";\n\nexport type BillingRuntimeModePreference = \"auto\" | \"local\" | \"remote\";\n\nfunction configuredProviderCount(\n  configured?: BillingProviderConfigMap\n): number {\n  if (configured == null) {\n    return 0;\n  }\n  return Object.keys(configured).filter((name) => configured[name] != null)\n    .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  mode?: BillingRuntimeModePreference;\n  configuredProviders?: BillingProviderConfigMap;\n}): BillingRuntimeMode {\n  const hasProviders = configuredProviderCount(input.configuredProviders) > 0;\n  if (input.mode === \"remote\" && hasProviders) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_CONFIG_CONFLICT,\n      message:\n        'billing.mode=\"remote\" cannot be combined with billing.providers. Provider bindings belong to the runtime executing Billing locally.',\n    });\n  }\n  if (input.mode === \"local\") {\n    return \"local\";\n  }\n  if (input.mode === \"remote\") {\n    return \"remote\";\n  }\n  return hasProviders ? \"local\" : \"remote\";\n}\n\nexport function assertLocalBillingRuntimeEnvironment(input?: {\n  mode?: BillingRuntimeModePreference;\n  configuredProviders?: BillingProviderConfigMap;\n  environment?: AthenaRuntimeEnvironment;\n  localMaterialized?: boolean;\n}): void {\n  const environment = input?.environment ?? detectAthenaRuntimeEnvironment();\n  const resolved = resolveBillingRuntimeMode({\n    configuredProviders: input?.configuredProviders,\n    mode: input?.mode,\n  });\n  if (resolved !== \"local\") {\n    return;\n  }\n  if (environment === \"browser\" || environment === \"react-native\") {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n      message:\n        \"Local Billing requires a trusted server runtime and cannot run in the browser or React Native.\",\n    });\n  }\n  if (!input?.localMaterialized) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_LOCAL_RUNTIME_SERVER_REQUIRED,\n      message:\n        \"Local Billing requires a trusted server runtime that materializes provider execution. This createClient path cannot retain remote ports.\",\n    });\n  }\n}\n","/**\n * Canonical Athena gateway route descriptors for SDK route selection.\n *\n * Classifications mirror `docs/release/athena-5-route-manifest.json`.\n * Do not invent a second handwritten sunset policy — keep this table aligned\n * with the monorepo manifest when either changes.\n */\n\nexport type AthenaRouteClassification =\n  | \"Retain\"\n  | \"Migrate\"\n  | \"Deprecate\"\n  | \"Remove\"\n  | \"Internalize\"\n  | \"Replace\";\n\nexport type AthenaRouteStatus = \"retained\" | \"deprecated\" | \"removed\";\n\nexport interface AthenaRouteDescriptor {\n  classification: AthenaRouteClassification;\n  methods: readonly string[];\n  path: string;\n  protocol: number;\n  reason: string;\n  replacement: string | null;\n  status: AthenaRouteStatus;\n}\n\nfunction classificationToStatus(\n  classification: AthenaRouteClassification\n): AthenaRouteStatus {\n  if (classification === \"Deprecate\" || classification === \"Migrate\") {\n    return \"deprecated\";\n  }\n  if (classification === \"Remove\") {\n    return \"removed\";\n  }\n  return \"retained\";\n}\n\n/** Structured CRUD + raw query paths used by the JS SDK. */\nexport const ATHENA_GATEWAY_ROUTES = {\n  delete: \"/gateway/delete\",\n  health: \"/health\",\n  insert: \"/gateway/insert\",\n  rawQuery: \"/gateway/query\",\n  root: \"/\",\n  rpc: \"/gateway/rpc\",\n  select: \"/gateway/fetch\",\n  update: \"/gateway/update\",\n} as const;\n\nexport type AthenaGatewayRouteKey = keyof typeof ATHENA_GATEWAY_ROUTES;\n\n/**\n * Inventory sourced from docs/release/athena-5-route-manifest.json (gateway + health).\n * Keep in sync when the monorepo manifest changes.\n */\nexport const ATHENA_ROUTE_MANIFEST: readonly AthenaRouteDescriptor[] = [\n  {\n    classification: \"Retain\",\n    methods: [\"POST\", \"GET\"],\n    path: \"/gateway/fetch\",\n    protocol: 1,\n    reason: \"Canonical structured read API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/insert\",\n    protocol: 1,\n    reason: \"Canonical write API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/update\",\n    protocol: 1,\n    reason: \"Canonical update API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/delete\",\n    protocol: 1,\n    reason: \"Canonical delete API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Deprecate\",\n    methods: [\"POST\"],\n    path: \"/gateway/query\",\n    protocol: 1,\n    reason:\n      \"Raw SQL is harder to secure and bypasses structured metadata ownership\",\n    replacement:\n      \"Structured /gateway/fetch|insert|update|delete with compiled statements\",\n    status: classificationToStatus(\"Deprecate\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"GET\"],\n    path: \"/health\",\n    protocol: 1,\n    reason: \"Diagnostics surface; Athena 5 adds release identity\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n] as const;\n\nexport function getAthenaRouteDescriptor(\n  path: string\n): AthenaRouteDescriptor | undefined {\n  return ATHENA_ROUTE_MANIFEST.find((route) => route.path === path);\n}\n\nexport function isDeprecatedAthenaRoute(path: string): boolean {\n  return getAthenaRouteDescriptor(path)?.status === \"deprecated\";\n}\n","/**\n * Explicit administrative raw SQL surface for Athena-JS 3.7 (Dragunov-compatible).\n *\n * Prefer this over root `athena.query()` which remains a deprecated compatibility alias.\n */\n\nimport type { AthenaResult, AthenaResultFormatter } from \"../result/types.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaQueryPayload,\n} from \"../gateway/types.ts\";\nimport { resolveMutationAffectedRows } from \"../result/mutation-meta.ts\";\n\nexport type AthenaRawQueryOperation =\n  | \"select\"\n  | \"insert\"\n  | \"update\"\n  | \"delete\"\n  | \"ddl\"\n  | \"transaction\"\n  | \"unknown\";\n\nexport type AthenaExpectedQueryShape =\n  | \"rows\"\n  | \"single\"\n  | \"maybe-single\"\n  | \"affected-only\"\n  | \"none\";\n\nexport interface AthenaAdminQueryInput<\n  TParams extends readonly unknown[] = readonly unknown[],\n> {\n  expectedShape: AthenaExpectedQueryShape;\n  headers?: Record<string, string>;\n  operation: AthenaRawQueryOperation;\n  params?: TParams;\n  signal?: AbortSignal;\n  sql: string;\n}\n\nexport interface AthenaAdminQueryExecutionMetadata {\n  /** null means unknown — never fabricate 0 when meta is absent. */\n  affectedRows: number | null;\n  backend: \"postgres\" | \"d1\" | \"scylla\" | \"supabase\" | \"unknown\";\n  deprecated: boolean;\n  expectedShape: AthenaExpectedQueryShape;\n  lastInsertId: string | number | null;\n  operation: AthenaRawQueryOperation;\n  route: string;\n  transport: \"gateway\" | \"d1-binding\" | \"d1-http-proxy\" | \"direct\" | \"unknown\";\n}\n\nexport interface AthenaAdminQueryResult<T = unknown> extends AthenaResult<T> {\n  metadata: AthenaAdminQueryExecutionMetadata;\n}\n\nexport const ATHENA_RAW_SQL_COMPAT_DEPRECATED =\n  \"ATHENA_RAW_SQL_COMPAT_DEPRECATED\" as const;\n\nexport const ATHENA_ADMIN_QUERY_EMPTY_SQL =\n  \"ATHENA_ADMIN_QUERY_EMPTY_SQL\" as const;\n\nexport const ATHENA_ADMIN_QUERY_MULTI_STATEMENT =\n  \"ATHENA_ADMIN_QUERY_MULTI_STATEMENT\" as const;\n\nexport const ATHENA_ADMIN_QUERY_INVALID_SHAPE =\n  \"ATHENA_ADMIN_QUERY_INVALID_SHAPE\" as const;\n\nconst ROW_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n  \"rows\",\n  \"single\",\n  \"maybe-single\",\n]);\n\nconst AFFECTED_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n  \"affected-only\",\n  \"none\",\n]);\n\n/** Reject empty SQL. */\nexport function assertNonEmptySql(sql: string): string {\n  const normalized = sql.trim();\n  if (!normalized) {\n    const error = new Error(\"admin.query requires a non-empty sql string\");\n    (error as Error & { code?: string }).code = ATHENA_ADMIN_QUERY_EMPTY_SQL;\n    throw error;\n  }\n  return normalized;\n}\n\n/**\n * Conservative multi-statement detection (semicolon outside simple quotes).\n * Does not attempt a full SQL parser.\n */\nexport function sqlLooksLikeMultipleStatements(sql: string): boolean {\n  let inSingle = false;\n  let inDouble = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i];\n    const next = sql[i + 1];\n    if (inLineComment) {\n      if (ch === \"\\n\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i += 1;\n      }\n      continue;\n    }\n    if (!(inSingle || inDouble)) {\n      if (ch === \"-\" && next === \"-\") {\n        inLineComment = true;\n        i += 1;\n        continue;\n      }\n      if (ch === \"/\" && next === \"*\") {\n        inBlockComment = true;\n        i += 1;\n        continue;\n      }\n    }\n    if (ch === \"'\" && !inDouble) {\n      if (inSingle && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      inSingle = !inSingle;\n      continue;\n    }\n    if (ch === '\"' && !inSingle) {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!(inSingle || inDouble) && ch === \";\") {\n      const rest = sql.slice(i + 1).trim();\n      if (rest.length > 0) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/** Validate operation / expectedShape combinations fail-closed. */\nexport function assertValidAdminQueryShape(\n  operation: AthenaRawQueryOperation,\n  expectedShape: AthenaExpectedQueryShape\n): void {\n  if (operation === \"select\" && AFFECTED_SHAPES.has(expectedShape)) {\n    const error = new Error(\n      `admin.query: operation \"select\" is incompatible with expectedShape \"${expectedShape}\"`\n    );\n    (error as Error & { code?: string }).code =\n      ATHENA_ADMIN_QUERY_INVALID_SHAPE;\n    throw error;\n  }\n  if (\n    (operation === \"insert\" ||\n      operation === \"update\" ||\n      operation === \"delete\") &&\n    expectedShape === \"none\"\n  ) {\n    // allowed (caller ignores rows)\n    return;\n  }\n  if (\n    (operation === \"insert\" ||\n      operation === \"update\" ||\n      operation === \"delete\") &&\n    ROW_SHAPES.has(expectedShape) === false &&\n    expectedShape !== \"affected-only\"\n  ) {\n    // ddl/transaction/unknown may use any shape\n  }\n}\n\n/**\n * Conservative SQL classification for legacy root query().\n * Prefer explicit operation on admin.query().\n */\nexport function classifyRawSqlOperation(sql: string): AthenaRawQueryOperation {\n  const head = sql.trim().replace(/^\\(+/, \"\").slice(0, 32).toLowerCase();\n  if (head.startsWith(\"select\") || head.startsWith(\"with\")) {\n    return \"select\";\n  }\n  if (head.startsWith(\"insert\")) {\n    return \"insert\";\n  }\n  if (head.startsWith(\"update\")) {\n    return \"update\";\n  }\n  if (head.startsWith(\"delete\")) {\n    return \"delete\";\n  }\n  if (\n    head.startsWith(\"create\") ||\n    head.startsWith(\"alter\") ||\n    head.startsWith(\"drop\") ||\n    head.startsWith(\"truncate\")\n  ) {\n    return \"ddl\";\n  }\n  if (\n    head.startsWith(\"begin\") ||\n    head.startsWith(\"commit\") ||\n    head.startsWith(\"rollback\")\n  ) {\n    return \"transaction\";\n  }\n  return \"unknown\";\n}\n\nexport function defaultExpectedShapeForOperation(\n  operation: AthenaRawQueryOperation\n): AthenaExpectedQueryShape {\n  if (operation === \"select\") {\n    return \"rows\";\n  }\n  if (\n    operation === \"insert\" ||\n    operation === \"update\" ||\n    operation === \"delete\"\n  ) {\n    return \"affected-only\";\n  }\n  return \"rows\";\n}\n\nfunction extractAffectedRows(\n  raw: unknown,\n  count: number | null | undefined,\n  operation: AthenaRawQueryOperation,\n  expectedShape: AthenaExpectedQueryShape\n): number | null {\n  // Honest mutation metadata: never treat SELECT (read) row-counts as affected rows.\n  const isMutation =\n    operation === \"insert\" || operation === \"update\" || operation === \"delete\";\n  if (!isMutation && expectedShape !== \"affected-only\") {\n    return null;\n  }\n  const resolved = resolveMutationAffectedRows({\n    count,\n    operation:\n      isMutation || expectedShape === \"affected-only\" ? \"update\" : \"select\",\n    raw,\n  });\n  return resolved === undefined ? null : resolved;\n}\n\nfunction extractLastInsertId(raw: unknown): string | number | null {\n  if (!raw || typeof raw !== \"object\") {\n    return null;\n  }\n  const record = raw as Record<string, unknown>;\n  const candidates = [\n    record.last_insert_id,\n    record.lastInsertId,\n    record.last_row_id,\n    record.lastRowId,\n  ];\n  for (const candidate of candidates) {\n    if (\n      (typeof candidate === \"string\" && candidate.length > 0) ||\n      (typeof candidate === \"number\" && Number.isFinite(candidate))\n    ) {\n      return candidate as string | number;\n    }\n  }\n  return null;\n}\n\nfunction shapeResultData<T>(\n  data: T | null,\n  expectedShape: AthenaExpectedQueryShape\n): T | null {\n  if (data === null) {\n    return data;\n  }\n  if (\n    expectedShape === \"rows\" ||\n    expectedShape === \"affected-only\" ||\n    expectedShape === \"none\"\n  ) {\n    return data;\n  }\n  if (!Array.isArray(data)) {\n    return data;\n  }\n  if (expectedShape === \"single\") {\n    return (data[0] ?? null) as T;\n  }\n  if (expectedShape === \"maybe-single\") {\n    return (data[0] ?? null) as T;\n  }\n  return data;\n}\n\nexport interface CreateAdminQueryOptions {\n  /**\n   * When true, multi-statement SQL is forwarded to the gateway instead of\n   * throwing `ATHENA_ADMIN_QUERY_MULTI_STATEMENT`.\n   *\n   * Used only by the legacy root `query()` compatibility alias so migration /\n   * seed scripts keep working. Explicit `admin.query()` keeps the default\n   * reject (allowMultiStatement omitted / false).\n   */\n  allowMultiStatement?: boolean;\n  backend?: AthenaAdminQueryExecutionMetadata[\"backend\"];\n  client: Pick<AthenaGatewayClient, \"queryGateway\">;\n  formatGatewayResult: AthenaResultFormatter;\n  /** Transport hint for metadata honesty. */\n  transport?: AthenaAdminQueryExecutionMetadata[\"transport\"];\n}\n\nexport function createAdminQuery(\n  options: CreateAdminQueryOptions\n): <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n  input: AthenaAdminQueryInput<TParams>,\n  callOptions?: AthenaGatewayCallOptions\n) => Promise<AthenaAdminQueryResult<T>> {\n  const {\n    client,\n    formatGatewayResult,\n    transport = \"gateway\",\n    backend = \"unknown\",\n    allowMultiStatement = false,\n  } = options;\n\n  return async function adminQuery<\n    T = unknown,\n    TParams extends readonly unknown[] = readonly unknown[],\n  >(\n    input: AthenaAdminQueryInput<TParams>,\n    callOptions?: AthenaGatewayCallOptions\n  ): Promise<AthenaAdminQueryResult<T>> {\n    const sql = assertNonEmptySql(input.sql);\n    assertValidAdminQueryShape(input.operation, input.expectedShape);\n\n    if (!allowMultiStatement && sqlLooksLikeMultipleStatements(sql)) {\n      const error = new Error(\n        \"admin.query rejects multi-statement SQL by default\"\n      );\n      (error as Error & { code?: string }).code =\n        ATHENA_ADMIN_QUERY_MULTI_STATEMENT;\n      throw error;\n    }\n\n    const params = input.params ?? callOptions?.params;\n    const payload: AthenaQueryPayload = {\n      query: sql,\n      ...(Array.isArray(params) ? { params: [...params] } : {}),\n      expectedShape: input.expectedShape,\n      operation: input.operation,\n    };\n\n    const mergedOptions: AthenaGatewayCallOptions | undefined = {\n      ...callOptions,\n      ...(input.headers\n        ? {\n            headers: {\n              ...(callOptions?.headers ?? {}),\n              ...input.headers,\n            },\n          }\n        : {}),\n      ...(input.signal ? { signal: input.signal } : {}),\n    };\n\n    const response = await client.queryGateway<T>(payload, mergedOptions);\n    const formatted = formatGatewayResult(response, {\n      operation: input.operation,\n    });\n    const shapedData = shapeResultData(formatted.data, input.expectedShape);\n    const affectedRows = extractAffectedRows(\n      formatted.raw,\n      formatted.count,\n      input.operation,\n      input.expectedShape\n    );\n    const lastInsertId = extractLastInsertId(formatted.raw);\n\n    return {\n      ...formatted,\n      data: shapedData,\n      metadata: {\n        affectedRows,\n        backend,\n        deprecated: true,\n        expectedShape: input.expectedShape,\n        lastInsertId,\n        operation: input.operation,\n        route: ATHENA_GATEWAY_ROUTES.rawQuery,\n        transport,\n      },\n    };\n  };\n}\n\n/** Per-client deprecation warning dedupe for root query(). */\nconst deprecationWarnedClients = new WeakSet<object>();\n\nexport type AthenaRawQueryDiagnosticsMode = boolean | \"auto\";\n\nexport function maybeWarnRawQueryDeprecated(\n  owner: object,\n  diagnostics: AthenaRawQueryDiagnosticsMode | undefined\n): void {\n  if (diagnostics !== true) {\n    return;\n  }\n  if (deprecationWarnedClients.has(owner)) {\n    return;\n  }\n  deprecationWarnedClients.add(owner);\n  console.warn(\n    `[athena] ${ATHENA_RAW_SQL_COMPAT_DEPRECATED}: athena.query() is deprecated and will be removed in Athena 6.0.0. Use athena.admin.query({ sql, operation, expectedShape }) or athena.db.query(sql, options) instead.`\n  );\n}\n","import type {\n  AthenaAuthAuthorizationBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthRequestInput,\n  AthenaAuthResult,\n} from \"../types.ts\";\n\ntype AuthorizationRequest = <T = unknown>(\n  input: AthenaAuthRequestInput,\n  options?: AthenaAuthCallOptions\n) => Promise<AthenaAuthResult<T>>;\n\nfunction rolePath(id: string): `/authorization/roles/${string}` {\n  return `/authorization/roles/${encodeURIComponent(id)}`;\n}\n\nfunction asQuery(\n  query: Record<string, unknown> | undefined\n): Record<string, AthenaAuthQueryValue> | undefined {\n  if (!query) {\n    return;\n  }\n  return query as Record<string, AthenaAuthQueryValue>;\n}\n\nexport function createAuthorizationModule(\n  request: AuthorizationRequest\n): AthenaAuthAuthorizationBindings {\n  return {\n    cloneRole: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: \"/authorization/roles/clone\",\n          method: \"POST\",\n        },\n        options\n      ),\n    createRole: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: \"/authorization/roles\",\n          method: \"POST\",\n        },\n        options\n      ),\n    deleteRole: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: rolePath(input.id),\n          method: \"DELETE\",\n          query: {\n            expectedVersion: input.expectedVersion,\n            reassignmentRoleId: input.reassignmentRoleId ?? undefined,\n          },\n        },\n        options\n      ),\n    getRole: (input, options) =>\n      request(\n        {\n          endpoint: rolePath(input.id),\n          method: \"GET\",\n          query: {\n            organizationId: input.organizationId,\n            scope: input.scope,\n          },\n        },\n        options\n      ),\n    getSnapshot: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/snapshot\",\n          fetchOptions: (input as AthenaAuthFetchCompatibleInput | undefined)\n            ?.fetchOptions,\n          method: \"GET\",\n        },\n        options\n      ),\n    listAudit: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/audit\",\n          method: \"GET\",\n          query: asQuery(\n            (input as { query?: Record<string, unknown> } | undefined)?.query\n          ),\n        },\n        options\n      ),\n    listMemberAssignments: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/assignments/members\",\n          method: \"GET\",\n          query: asQuery(\n            (input as { query?: Record<string, unknown> } | undefined)?.query\n          ),\n        },\n        options\n      ),\n    listRights: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/rights\",\n          fetchOptions: (input as AthenaAuthFetchCompatibleInput | undefined)\n            ?.fetchOptions,\n          method: \"GET\",\n        },\n        options\n      ),\n    listRoles: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/roles\",\n          fetchOptions: (input as AthenaAuthFetchCompatibleInput | undefined)\n            ?.fetchOptions,\n          method: \"GET\",\n          query: asQuery(\n            (input as { query?: Record<string, unknown> } | undefined)?.query\n          ),\n        },\n        options\n      ),\n    listUserAssignments: (input, options) =>\n      request(\n        {\n          endpoint: \"/authorization/assignments/users\",\n          fetchOptions: (input as AthenaAuthFetchCompatibleInput | undefined)\n            ?.fetchOptions,\n          method: \"GET\",\n        },\n        options\n      ),\n    replaceMemberRoleAssignments: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: `/authorization/assignments/members/${encodeURIComponent(input.memberId)}`,\n          method: \"PUT\",\n        },\n        options\n      ),\n    replaceRoleRights: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: `${rolePath(input.id)}/rights`,\n          method: \"PUT\",\n        },\n        options\n      ),\n    replaceUserRoleAssignments: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: `/authorization/assignments/users/${encodeURIComponent(input.userId)}`,\n          method: \"PUT\",\n        },\n        options\n      ),\n    updateRole: (input, options) =>\n      request(\n        {\n          body: input,\n          endpoint: rolePath(input.id),\n          method: \"PATCH\",\n        },\n        options\n      ),\n  };\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 { ATHENA_AUTH_OPERATIONS } from \"./contract/operations.generated.ts\";\nimport { deriveEmbeddedCapabilityAdvertisement } from \"./contract/operations.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  emailAndPassword?: boolean | null;\n  organizations?: boolean | null;\n  passkey?: AthenaAuthPasskeyCapabilityDetail | 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  password?: boolean | null;\n  sessions?: boolean | null;\n  social?: {\n    providers?: string[] | null;\n  } | null;\n}\n\nexport interface AthenaAuthCapabilitiesResult\n  extends AthenaAuthCapabilitiesFeatures {\n  fetchedAt?: number;\n  source: AthenaAuthCapabilitiesSource;\n  status: AthenaAuthCapabilitiesStatus;\n}\n\nexport interface AthenaAuthCapabilitiesStore {\n  get(): AthenaAuthCapabilitiesResult;\n  /** Alias of `get()` — one snapshot owner (INV-P / R11). */\n  getSnapshot(): 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  /** Mark transport failure without disabling features (INV-P). */\n  markUnknown(\n    source?: AthenaAuthCapabilitiesSource\n  ): AthenaAuthCapabilitiesResult;\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  set(next: AthenaAuthCapabilitiesResult): void;\n  subscribe(\n    listener: (value: AthenaAuthCapabilitiesResult) => void\n  ): () => void;\n}\n\nconst EMPTY_UNKNOWN: AthenaAuthCapabilitiesResult = {\n  source: \"fallback\",\n  status: \"unknown\",\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) {\n    return current;\n  }\n  if (current === \"unknown\" || next === \"unknown\") {\n    if (current === \"known\" && next === \"unknown\") {\n      return \"partial\";\n    }\n    if (current === \"unknown\" && next === \"known\") {\n      return \"partial\";\n    }\n    return next === \"unknown\"\n      ? \"unknown\"\n      : current === \"unknown\"\n        ? next\n        : \"partial\";\n  }\n  if (current === \"partial\" || next === \"partial\") {\n    return \"partial\";\n  }\n  return \"known\";\n}\n\nexport function createAthenaAuthCapabilitiesStore(\n  initial?: Partial<AthenaAuthCapabilitiesResult>\n): AthenaAuthCapabilitiesStore {\n  let value: AthenaAuthCapabilitiesResult = {\n    ...EMPTY_UNKNOWN,\n    ...initial,\n    source: initial?.source ?? \"fallback\",\n    status: initial?.status ?? \"unknown\",\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    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    markUnknown(source = \"http\") {\n      // Keep last known feature hints; only status becomes unknown/partial.\n      value = {\n        ...value,\n        fetchedAt: Date.now(),\n        source,\n        status: value.status === \"known\" ? \"partial\" : \"unknown\",\n      };\n      emit();\n      return value;\n    },\n\n    merge(patch, meta) {\n      value = {\n        ...value,\n        ...patch,\n        fetchedAt: Date.now(),\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        source: meta?.source ?? value.source,\n        status: pickStatus(value.status, meta?.status),\n      };\n      emit();\n      return value;\n    },\n\n    set(next) {\n      value = { ...next, fetchedAt: next.fetchedAt ?? Date.now() };\n      emit();\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\") {\n    return false;\n  }\n  const v = caps[key];\n  if (v === null) {\n    return false;\n  }\n  if (typeof v === \"boolean\") {\n    return v === true && caps.status === \"known\";\n  }\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 { hide: false, providers: null };\n  }\n  const list = caps.social?.providers;\n  if (list == null) {\n    return { hide: caps.status === \"known\", providers: null };\n  }\n  return { hide: false, providers: list };\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","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(decodeJwtSegment(parts[1] ?? \"\")) as {\n      exp?: unknown;\n    };\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 =\n    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({ audience: providerOptions.audience }, options)\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}\n","import { createAthenaAuthTokenProvider } from \"../token-provider.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthLinkedAccount,\n  AthenaAuthStatusResponse,\n  AthenaUnlinkAccountRequest,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthCapabilityGates } from \"./capability-gates.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createAccountClientModule(input: {\n  gates: AuthCapabilityGates;\n  transport: AuthTransport;\n}) {\n  const { gates, transport } = input;\n\n  const list = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.getGeneric<AthenaAuthLinkedAccount[]>(\n      \"/list-accounts\",\n      input,\n      options\n    );\n\n  const unlink = (\n    input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    gates.gateCapability(gates.denySocial(\"/unlink-account\"), () =>\n      transport.postGeneric<AthenaAuthStatusResponse>(\n        \"/unlink-account\",\n        input,\n        options\n      )\n    );\n\n  const getAccessToken: InternalAthenaAuthModule[\"auth\"][\"getAccessToken\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/get-access-token\", input, options);\n\n  const refreshToken: InternalAthenaAuthModule[\"auth\"][\"refreshToken\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/refresh-token\", input, options);\n\n  const getToken: InternalAthenaAuthModule[\"auth\"][\"getToken\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/token\", input, options);\n\n  const tokenProvider: InternalAthenaAuthModule[\"auth\"][\"tokenProvider\"] = (\n    options\n  ) =>\n    createAthenaAuthTokenProvider(\n      (input, callOptions) =>\n        transport.postGeneric(\"/token\", input, callOptions),\n      options\n    );\n\n  return {\n    getAccessToken,\n    getToken,\n    list,\n    refreshToken,\n    tokenProvider,\n    unlink,\n  };\n}\n","export interface AthenaAuthAdminLimits {\n  maxAdminJsonBytes: number;\n  maxAdminJsonDepth: number;\n  maxTemplateVariableLength: number;\n  maxTemplateVariables: number;\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024;\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128;\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n  maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n  maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n} as const satisfies AthenaAuthAdminLimits;\n\nfunction describeTemplateVariableTarget(target?: string) {\n  const normalized = target?.trim();\n  return normalized && normalized.length > 0\n    ? normalized\n    : \"Athena auth admin email template variables\";\n}\n\nexport function assertAthenaAuthTemplateVariables(\n  variables: unknown,\n  target?: string\n): asserts variables is string[] {\n  const label = describeTemplateVariableTarget(target);\n  if (!Array.isArray(variables)) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n\n  if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n    throw new Error(\n      `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`\n    );\n  }\n\n  variables.forEach((variable, index) => {\n    if (typeof variable !== \"string\") {\n      throw new Error(\n        `${label} must contain only strings. Received ${typeof variable} at index ${index}.`\n      );\n    }\n\n    if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n      throw new Error(\n        `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`\n      );\n    }\n  });\n}\n","import type {\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthLooseRecord,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n} from \"./types.ts\";\n\ninterface ReactEmailRenderModule {\n  pretty?: (html: string) => string | Promise<string>;\n  render: (element: unknown) => string | Promise<string>;\n  toPlainText?: (html: string) => string | Promise<string>;\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n  html: string;\n  text?: string;\n}\n\nexport interface AthenaAuthReactEmailPayload {\n  react?: AthenaAuthReactEmailRenderInput;\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n  defaults?: AthenaAuthReactEmailRenderOptions;\n  observe?: (event: AthenaAuthReactEmailRenderEvent) => void;\n  route?: string;\n}\n\ninterface ResolvePayloadFieldsInput {\n  htmlField: string;\n  textField: string;\n  variablesField?: string;\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined;\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === \"function\";\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  return value;\n}\n\nfunction nowIsoString() {\n  return new Date().toISOString();\n}\n\nfunction emitReactEmailEvent(\n  observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n  phase: AthenaAuthReactEmailEventPhase,\n  input: Omit<AthenaAuthReactEmailRenderEvent, \"phase\" | \"timestamp\"> = {}\n) {\n  if (!observe) {\n    return;\n  }\n  try {\n    observe({\n      phase,\n      timestamp: nowIsoString(),\n      ...input,\n    });\n  } catch {\n    // Observability hooks are non-blocking.\n  }\n}\n\nfunction mergeRenderDefaults(\n  input: AthenaAuthReactEmailRenderInput,\n  defaults?: AthenaAuthReactEmailRenderOptions\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...input,\n    includePlainText: input.includePlainText ?? defaults?.includePlainText,\n    pretty: input.pretty ?? defaults?.pretty,\n  };\n}\n\nfunction mergeRuntimeOptions(\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n  if (!options) {\n    return;\n  }\n  return {\n    defaults: options.defaults,\n    observe: options.observe,\n    route: \"route\" in options ? options.route : undefined,\n  };\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n  if (!reactEmailRenderModulePromise) {\n    reactEmailRenderModulePromise = (async () => {\n      try {\n        const 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 { assertAthenaAuthTemplateVariables } from \"../limits.ts\";\nimport { resolveReactEmailPayloadFields } from \"../react-email.ts\";\nimport type {\n  AthenaAdminEmailTemplateGetQuery,\n  AthenaAdminEmailTemplateGetResponse,\n  AthenaAdminEmailTemplateListQuery,\n  AthenaAdminEmailTemplateListResponse,\n  AthenaAdminEmailTemplateRecord,\n  AthenaAdminEmailTemplateSendResponse,\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminHasPermissionResponse,\n  AthenaAdminRevokeUserSessionRequest,\n  AthenaAdminRevokeUserSessionsRequest,\n  AthenaAdminSuccessResponse,\n  AthenaAuthBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGenericInput,\n  AthenaAuthGuardResult,\n  AthenaAuthReactEmailRenderInput,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nfunction copyDefinedField(\n  target: Record<string, unknown>,\n  source: Record<string, unknown>,\n  targetKey: string,\n  sourceKey: string\n): void {\n  if (!(sourceKey in source)) {\n    return;\n  }\n  const value = source[sourceKey];\n  if (value !== undefined) {\n    target[targetKey] = value;\n  }\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n  if (typeof value === \"string\" || value === null) {\n    return value;\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((item) => normalizeEmailTemplateAttachmentsValue(item));\n  }\n\n  if (typeof value !== \"object\") {\n    return value;\n  }\n\n  const attachment = { ...(value as Record<string, unknown>) };\n  copyDefinedField(attachment, attachment, \"file_url\", \"fileUrl\");\n  attachment.fileUrl = undefined;\n  return attachment;\n}\n\nfunction normalizeAdminEmailTemplatePayload(\n  payload: Record<string, unknown>\n): Record<string, unknown> {\n  const normalized = { ...payload };\n\n  copyDefinedField(normalized, payload, \"template_key\", \"templateKey\");\n  copyDefinedField(normalized, payload, \"event_type\", \"eventType\");\n  copyDefinedField(normalized, payload, \"subject_template\", \"subjectTemplate\");\n  copyDefinedField(normalized, payload, \"text_template\", \"textTemplate\");\n  copyDefinedField(normalized, payload, \"html_template\", \"htmlTemplate\");\n  copyDefinedField(\n    normalized,\n    payload,\n    \"variable_bindings\",\n    \"variableBindings\"\n  );\n  copyDefinedField(\n    normalized,\n    payload,\n    \"attachment_failure_mode\",\n    \"attachmentFailureMode\"\n  );\n  copyDefinedField(normalized, payload, \"is_active\", \"isActive\");\n\n  if (Object.hasOwn(payload, \"attachments\")) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(\n      payload.attachments\n    );\n  }\n\n  normalized.templateKey = undefined;\n  normalized.eventType = undefined;\n  normalized.subjectTemplate = undefined;\n  normalized.textTemplate = undefined;\n  normalized.htmlTemplate = undefined;\n  normalized.variableBindings = undefined;\n  normalized.attachmentFailureMode = undefined;\n  normalized.isActive = undefined;\n\n  return normalized;\n}\n\nfunction toReactEmailTemplateCompatibilityInput<\n  TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput;\n  },\n>(input: TInput): TInput {\n  const payload = input as Record<string, unknown>;\n  const compatibility = { ...payload };\n\n  copyDefinedField(compatibility, payload, \"templateKey\", \"template_key\");\n  copyDefinedField(compatibility, payload, \"eventType\", \"event_type\");\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"subjectTemplate\",\n    \"subject_template\"\n  );\n  copyDefinedField(compatibility, payload, \"textTemplate\", \"text_template\");\n  copyDefinedField(compatibility, payload, \"htmlTemplate\", \"html_template\");\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"variableBindings\",\n    \"variable_bindings\"\n  );\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"attachmentFailureMode\",\n    \"attachment_failure_mode\"\n  );\n  copyDefinedField(compatibility, payload, \"isActive\", \"is_active\");\n\n  return compatibility as unknown as TInput;\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(\n  payload: Record<string, unknown>\n): Record<string, unknown> {\n  const normalized = { ...payload };\n\n  copyDefinedField(normalized, payload, \"template_id\", \"templateId\");\n  copyDefinedField(normalized, payload, \"recipient_email\", \"recipientEmail\");\n  copyDefinedField(normalized, payload, \"render_variables\", \"renderVariables\");\n  copyDefinedField(normalized, payload, \"user_id\", \"userId\");\n  copyDefinedField(normalized, payload, \"organization_id\", \"organizationId\");\n  copyDefinedField(normalized, payload, \"session_token\", \"sessionToken\");\n  copyDefinedField(\n    normalized,\n    payload,\n    \"attachment_failure_mode\",\n    \"attachmentFailureMode\"\n  );\n\n  if (Object.hasOwn(payload, \"attachments\")) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(\n      payload.attachments\n    );\n  }\n\n  normalized.templateId = undefined;\n  normalized.recipientEmail = undefined;\n  normalized.renderVariables = undefined;\n  normalized.userId = undefined;\n  normalized.organizationId = undefined;\n  normalized.sessionToken = undefined;\n  normalized.attachmentFailureMode = undefined;\n\n  return normalized;\n}\n\nexport function createAdminClientModule(input: {\n  requirePermission: (\n    endpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthGuardResult>;\n  transport: AuthTransport;\n}) {\n  const { requirePermission, transport } = input;\n  const resolvedConfig = transport.resolvedConfig;\n\n  const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n    ...resolvedConfig.reactEmail,\n    route,\n  });\n\n  const resolveAdminEmailPayload = <\n    TInput extends AthenaAuthFetchCompatibleInput & {\n      react?: AthenaAuthReactEmailRenderInput;\n    },\n  >(\n    route: \"/admin/email/create\" | \"/admin/email/update\",\n    input: TInput\n  ) =>\n    resolveReactEmailPayloadFields(\n      input,\n      {\n        htmlField: \"htmlBody\",\n        textField: \"textBody\",\n      },\n      withReactEmailRoute(route)\n    );\n\n  const resolveAdminEmailTemplatePayload = <\n    TInput extends AthenaAuthFetchCompatibleInput & {\n      react?: AthenaAuthReactEmailRenderInput;\n    },\n  >(\n    route: \"/admin/email-template/create\" | \"/admin/email-template/update\",\n    input: TInput\n  ) =>\n    resolveReactEmailPayloadFields(\n      toReactEmailTemplateCompatibilityInput(input),\n      {\n        htmlField: \"htmlTemplate\",\n        textField: \"textTemplate\",\n        variablesField: \"variables\",\n      },\n      withReactEmailRoute(route)\n    ).then((payload) => {\n      const normalizedPayload = normalizeAdminEmailTemplatePayload(\n        payload as Record<string, unknown>\n      );\n      if (\n        \"variables\" in payload &&\n        payload.variables !== undefined &&\n        payload.variables !== null\n      ) {\n        assertAthenaAuthTemplateVariables(\n          payload.variables,\n          `${route} variables`\n        );\n      }\n      return normalizedPayload;\n    });\n\n  const adminUserSessionRevokeBinding: AthenaAuthBindings[\"admin\"][\"user\"][\"session\"][\"revoke\"] =\n    (input, options) => {\n      const requireUserId = (userId: string | undefined): string => {\n        const trimmed = String(userId ?? \"\").trim();\n        if (!trimmed) {\n          throw new Error(\n            \"admin.user.session.revoke requires a non-empty userId\"\n          );\n        }\n        return trimmed;\n      };\n\n      const requireSinglePluralUserId = (\n        sessions: AthenaAdminRevokeUserSessionRequest[]\n      ): AthenaAdminRevokeUserSessionsRequest => {\n        const uniqueUserIds = [\n          ...new Set(sessions.map((session) => requireUserId(session.userId))),\n        ];\n        if (uniqueUserIds.length !== 1) {\n          throw new Error(\n            \"admin.user.session.revoke requires the same userId across plural payloads\"\n          );\n        }\n        return { userId: uniqueUserIds[0] };\n      };\n\n      if (Array.isArray(input)) {\n        if (input.length === 0) {\n          throw new Error(\n            \"admin.user.session.revoke requires at least one payload item\"\n          );\n        }\n        if (input.length === 1) {\n          return transport.postGeneric<AthenaAdminSuccessResponse>(\n            \"/admin/revoke-user-session\",\n            {\n              ...input[0],\n              userId: requireUserId(input[0].userId),\n            } as AthenaAuthGenericInput,\n            options\n          );\n        }\n        return transport.postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          requireSinglePluralUserId(input),\n          options\n        );\n      }\n\n      const parsed = input as AthenaAuthGenericInput & {\n        sessions?: AthenaAdminRevokeUserSessionRequest[];\n        sessionToken?: string;\n        userId?: string;\n      };\n      const sessions = parsed.sessions;\n\n      if (sessions && sessions.length === 0) {\n        throw new Error(\n          \"admin.user.session.revoke requires at least one payload item\"\n        );\n      }\n\n      if (sessions && sessions.length === 1) {\n        return transport.postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-session\",\n          {\n            ...sessions[0],\n            fetchOptions: parsed.fetchOptions,\n            userId: requireUserId(sessions[0].userId),\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n\n      if (sessions && sessions.length > 1) {\n        return transport.postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          {\n            ...requireSinglePluralUserId(sessions),\n            fetchOptions: parsed.fetchOptions,\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n\n      const normalizedUserId = requireUserId(parsed.userId);\n\n      if (!parsed.sessionToken) {\n        return transport.postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          {\n            fetchOptions: parsed.fetchOptions,\n            userId: normalizedUserId,\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n      return transport.postGeneric<AthenaAdminSuccessResponse>(\n        \"/admin/revoke-user-session\",\n        {\n          ...parsed,\n          userId: normalizedUserId,\n        } as AthenaAuthGenericInput,\n        options\n      );\n    };\n\n  const emailTemplate: AthenaAuthBindings[\"admin\"][\"emailTemplate\"] = {\n    create: async (input, options) =>\n      transport.postGeneric<AthenaAdminEmailTemplateRecord>(\n        \"/admin/email-template/create\",\n        await resolveAdminEmailTemplatePayload(\n          \"/admin/email-template/create\",\n          input\n        ),\n        options\n      ),\n    delete: (input, options) =>\n      transport.postGeneric<AthenaAdminSuccessResponse>(\n        \"/admin/email-template/delete\",\n        input,\n        options\n      ),\n    get: (input, options) =>\n      transport.getWithQuery<\n        AthenaAdminEmailTemplateGetResponse,\n        AthenaAdminEmailTemplateGetQuery\n      >(\"/admin/email-template/get\", input, options),\n    list: (input, options) =>\n      transport.getWithQuery<\n        AthenaAdminEmailTemplateListResponse,\n        AthenaAdminEmailTemplateListQuery\n      >(\"/admin/email-template/list\", input, options),\n    send: (input, options) =>\n      transport.postGeneric<AthenaAdminEmailTemplateSendResponse>(\n        \"/admin/email-template/send\",\n        normalizeAdminEmailTemplateSendPayload(\n          transport.extractFetchOptions(input).payload as Record<\n            string,\n            unknown\n          >\n        ),\n        options\n      ),\n    update: async (input, options) =>\n      transport.postGeneric<AthenaAdminEmailTemplateRecord>(\n        \"/admin/email-template/update\",\n        await resolveAdminEmailTemplatePayload(\n          \"/admin/email-template/update\",\n          input\n        ),\n        options\n      ),\n  };\n\n  const admin: AthenaAuthBindings[\"admin\"] = {\n    apiKey: {\n      create: (input, options) =>\n        transport.postGeneric(\"/admin/api-key/create\", input, options),\n    },\n    athenaClient: {\n      create: (input, options) =>\n        transport.postGeneric(\"/admin/athena-client/create\", input, options),\n      list: (input, options) =>\n        transport.getWithQuery(\"/admin/athena-client/list\", input, options),\n    },\n    auditLog: {\n      list: (input, options) =>\n        transport.getWithQuery(\"/admin/audit-log/list\", input, options),\n    },\n    banUser: (input, options) =>\n      transport.postGeneric(\"/admin/ban-user\", input, options),\n    createUser: (input, options) =>\n      transport.postGeneric(\"/admin/create-user\", input, options),\n    email: {\n      create: async (input, options) =>\n        transport.postGeneric(\n          \"/admin/email/create\",\n          await resolveAdminEmailPayload(\"/admin/email/create\", input),\n          options\n        ),\n      delete: (input, options) =>\n        transport.postGeneric(\"/admin/email/delete\", input, options),\n      eventType: {\n        list: (input, options) =>\n          transport.getWithQuery(\n            \"/admin/email-event-type/list\",\n            input,\n            options\n          ),\n      },\n      failure: {\n        create: (input, options) =>\n          transport.postGeneric(\"/admin/email-failure/create\", input, options),\n        delete: (input, options) =>\n          transport.postGeneric(\"/admin/email-failure/delete\", input, options),\n        get: (input, options) =>\n          transport.getWithQuery(\"/admin/email-failure/get\", input, options),\n        list: (input, options) =>\n          transport.getWithQuery(\"/admin/email-failure/list\", input, options),\n        update: (input, options) =>\n          transport.postGeneric(\"/admin/email-failure/update\", input, options),\n      },\n      get: (input, options) =>\n        transport.getWithQuery(\"/admin/email/get\", input, options),\n      list: (input, options) =>\n        transport.getWithQuery(\"/admin/email/list\", input, options),\n      template: emailTemplate,\n      update: async (input, options) =>\n        transport.postGeneric(\n          \"/admin/email/update\",\n          await resolveAdminEmailPayload(\"/admin/email/update\", input),\n          options\n        ),\n    },\n    emailEventType: {\n      list: (input, options) =>\n        transport.getWithQuery(\"/admin/email-event-type/list\", input, options),\n    },\n    emailTemplate,\n    getUser: (input, options) =>\n      transport.getWithQuery(\"/admin/get-user\", input, options),\n    hasPermission: (input, options) =>\n      transport.postGeneric<AthenaAdminHasPermissionResponse>(\n        \"/admin/has-permission\",\n        input,\n        options\n      ),\n    impersonateUser: (input, options) =>\n      transport.postGeneric(\"/admin/impersonate-user\", input, options),\n    listUsers: (input, options) =>\n      transport.getWithQuery(\"/admin/list-users\", input, options),\n    removeUser: (input, options) =>\n      transport.postGeneric(\"/admin/remove-user\", input, options),\n    requirePermission: (input, options) =>\n      requirePermission(\"/admin/has-permission\", input, options),\n    revokeUserSessions: adminUserSessionRevokeBinding,\n    role: {\n      set: (input, options) =>\n        transport.postGeneric(\"/admin/set-role\", input, options),\n    },\n    setRole: (input, options) =>\n      transport.postGeneric(\"/admin/set-role\", input, options),\n    stopImpersonating: (input, options) =>\n      transport.postGeneric(\"/admin/stop-impersonating\", input, options),\n    unbanUser: (input, options) =>\n      transport.postGeneric(\"/admin/unban-user\", input, options),\n    updateUser: (input, options) =>\n      transport.postGeneric(\"/admin/update-user\", input, options),\n    user: {\n      ban: (input, options) =>\n        transport.postGeneric(\"/admin/ban-user\", input, options),\n      create: (input, options) =>\n        transport.postGeneric(\"/admin/create-user\", input, options),\n      get: (input, options) =>\n        transport.getWithQuery(\"/admin/get-user\", input, options),\n      impersonate: (input, options) =>\n        transport.postGeneric(\"/admin/impersonate-user\", input, options),\n      list: (input, options) =>\n        transport.getWithQuery(\"/admin/list-users\", input, options),\n      remove: (input, options) =>\n        transport.postGeneric(\"/admin/remove-user\", input, options),\n      session: {\n        list: (input, options) =>\n          transport.postGeneric(\"/admin/list-user-sessions\", input, options),\n        revoke: adminUserSessionRevokeBinding,\n      },\n      setPassword: (input, options) =>\n        transport.postGeneric(\"/admin/set-user-password\", input, options),\n      stopImpersonating: (input, options) =>\n        transport.postGeneric(\"/admin/stop-impersonating\", input, options),\n      unban: (input, options) =>\n        transport.postGeneric(\"/admin/unban-user\", input, options),\n      update: (input, options) =>\n        transport.postGeneric(\"/admin/update-user\", input, options),\n    },\n  };\n\n  return { admin };\n}\n","import type {\n  AthenaApiKeyDeleteAllExpiredResponse,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createApiKeyClientModule(input: { transport: AuthTransport }) {\n  const { transport } = input;\n  const { resolvedConfig } = transport;\n\n  const apiKey: InternalAthenaAuthModule[\"auth\"][\"apiKey\"] = {\n    create: (input, options) =>\n      transport.postGeneric(\"/api-key/create\", input, options),\n    delete: (input, options) =>\n      transport.postGeneric(\"/api-key/delete\", input, options),\n    deleteAllExpired: (input, options) =>\n      transport.executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n        resolvedConfig,\n        { endpoint: \"/api-key/delete-all-expired-api-keys\", method: \"POST\" },\n        input,\n        options\n      ),\n    get: (input, options) =>\n      transport.getWithQuery(\"/api-key/get\", input, options),\n    list: (input, options) =>\n      transport.getWithQuery(\"/api-key/list\", input, options),\n    update: (input, options) =>\n      transport.postGeneric(\"/api-key/update\", input, options),\n    verify: (input, options) =>\n      transport.postGeneric(\"/api-key/verify\", input, options),\n  };\n\n  return { apiKey };\n}\n","import type {\n  AthenaAuthCapabilitiesResult,\n  AthenaAuthCapabilitiesStore,\n} from \"../capabilities.ts\";\nimport {\n  isCapabilityEnabled,\n  isSocialCapabilityEnabled,\n} from \"../capabilities.ts\";\nimport type {\n  AthenaAuthEndpointPath,\n  AthenaAuthMethod,\n  AthenaAuthResult,\n} from \"../types.ts\";\n\nexport function capabilityDisabled(\n  feature: string,\n  endpoint: AthenaAuthEndpointPath,\n  method: AthenaAuthMethod = \"POST\"\n): AthenaAuthResult<never> {\n  return {\n    data: null,\n    error: `${feature} is not enabled on this Athena Auth runtime`,\n    errorDetails: {\n      code: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n      endpoint,\n      hint: feature,\n      message: `${feature} is not enabled on this Athena Auth runtime`,\n      method,\n      status: 501,\n    },\n    ok: false,\n    raw: {\n      error: {\n        code: \"ATHENA_AUTH_CAPABILITY_DISABLED\",\n        feature,\n        status: 501,\n      },\n    },\n    status: 501,\n  };\n}\n\nexport function gateCapability<T>(\n  denied: AthenaAuthResult<never> | null,\n  run: () => Promise<AthenaAuthResult<T>>\n): Promise<AthenaAuthResult<T>> {\n  return denied ? Promise.resolve(denied as AthenaAuthResult<T>) : run();\n}\n\nexport function denySocial(\n  snapshot: AthenaAuthCapabilitiesResult,\n  endpoint: AthenaAuthEndpointPath\n): AthenaAuthResult<never> | null {\n  if (isSocialCapabilityEnabled(snapshot)) {\n    return null;\n  }\n  if (snapshot.status !== \"known\") {\n    return null;\n  }\n  return capabilityDisabled(\"social\", endpoint);\n}\n\nexport function denyPasskeys(\n  snapshot: AthenaAuthCapabilitiesResult,\n  endpoint: AthenaAuthEndpointPath,\n  method: AthenaAuthMethod = \"POST\"\n): AthenaAuthResult<never> | null {\n  if (\n    snapshot.status !== \"known\" ||\n    isCapabilityEnabled(snapshot, \"passkeys\")\n  ) {\n    return null;\n  }\n  return capabilityDisabled(\"passkeys\", endpoint, method);\n}\n\nexport function createCapabilityGates(store: AthenaAuthCapabilitiesStore) {\n  return {\n    denyPasskeys(\n      endpoint: AthenaAuthEndpointPath,\n      method: AthenaAuthMethod = \"POST\"\n    ) {\n      return denyPasskeys(store.getSnapshot(), endpoint, method);\n    },\n    denySocial(endpoint: AthenaAuthEndpointPath) {\n      return denySocial(store.getSnapshot(), endpoint);\n    },\n    gateCapability,\n  };\n}\n\nexport type AuthCapabilityGates = ReturnType<typeof createCapabilityGates>;\n","import type { AthenaAuthBindings, InternalAthenaAuthModule } from \"../types.ts\";\n\nconst warnedAuthCompatibilityAliases = new WeakMap<object, Set<string>>();\n\nfunction maybeWarnAuthCompatibilityAliasDeprecated(\n  owner: object,\n  alias: string,\n  replacement: string,\n  warn: boolean\n): void {\n  if (!warn) {\n    return;\n  }\n  const warned = warnedAuthCompatibilityAliases.get(owner) ?? new Set<string>();\n  if (warned.has(alias)) {\n    return;\n  }\n  warned.add(alias);\n  warnedAuthCompatibilityAliases.set(owner, warned);\n  console.warn(\n    `[athena] ATHENA_AUTH_COMPAT_ALIAS_DEPRECATED: athena.auth.${alias}() is deprecated and will be removed in Athena 6.0.0. Use athena.auth.${replacement}() instead.`\n  );\n}\n\nexport function createAuthCompatibilityAlias<\n  TMethod extends (...args: never[]) => unknown,\n>(\n  owner: object,\n  alias: string,\n  replacement: string,\n  method: TMethod,\n  options: { warn?: boolean } = {}\n): TMethod {\n  const aliasMethod = ((...args: Parameters<TMethod>) => {\n    maybeWarnAuthCompatibilityAliasDeprecated(\n      owner,\n      alias,\n      replacement,\n      options.warn !== false\n    );\n    return Reflect.apply(method, undefined, args);\n  }) as TMethod;\n  Object.defineProperties(aliasMethod, {\n    length: { configurable: true, value: method.length },\n    name: { configurable: true, value: method.name },\n  });\n  return aliasMethod;\n}\n\n/**\n * Flat InternalAthenaAuthModule aliases. Canonical methods live on `auth`.\n * This module must not implement HTTP or session effects.\n */\nexport function attachAuthCompatibilityAliases(input: {\n  auth: AthenaAuthBindings;\n  baseUrl: string;\n  request: InternalAthenaAuthModule[\"request\"];\n  resolveResetPasswordToken: InternalAthenaAuthModule[\"resolveResetPasswordToken\"];\n  revokeSession: InternalAthenaAuthModule[\"revokeSession\"];\n  revokeSessions: InternalAthenaAuthModule[\"revokeSessions\"];\n  warnOnCompatibilityAlias?: boolean;\n}): InternalAthenaAuthModule {\n  const {\n    auth,\n    baseUrl,\n    request,\n    resolveResetPasswordToken,\n    revokeSession,\n    revokeSessions,\n    warnOnCompatibilityAlias,\n  } = input;\n  const aliasOwner = Object.create(null) as object;\n  const createAlias = <TMethod extends (...args: never[]) => unknown>(\n    alias: string,\n    replacement: string,\n    method: TMethod\n  ): TMethod =>\n    createAuthCompatibilityAlias(aliasOwner, alias, replacement, method, {\n      warn: warnOnCompatibilityAlias,\n    });\n  const listAccounts = createAlias(\n    \"listAccounts\",\n    \"account.list\",\n    auth.account.list\n  );\n  const unlinkAccount = createAlias(\n    \"unlinkAccount\",\n    \"account.unlink\",\n    auth.account.unlink\n  );\n  const changeEmail = createAlias(\"changeEmail\", \"email.change\", auth.email.change);\n  const changeEmailVerify = createAlias(\n    \"changeEmailVerify\",\n    \"email.change.verify\",\n    auth.email.change.verify\n  );\n  const deleteUserCallback = createAlias(\n    \"deleteUser.callback\",\n    \"user.delete.callback\",\n    auth.user.delete.callback\n  );\n  const deleteUserVerify = createAlias(\n    \"deleteUserVerify\",\n    \"user.delete.verify\",\n    auth.user.delete.verify\n  );\n  const sendVerificationEmail = createAlias(\n    \"sendVerificationEmail\",\n    \"verificationEmail.send\",\n    auth.verificationEmail.send\n  );\n  const verifyEmail = createAlias(\n    \"verifyEmail\",\n    \"verificationEmail.verify\",\n    auth.verificationEmail.verify\n  );\n  const listSessions = createAlias(\n    \"listSessions\",\n    \"session.list\",\n    auth.session.list\n  );\n  const revokeOtherSessions = createAlias(\n    \"revokeOtherSessions\",\n    \"session.revokeOther\",\n    auth.session.revokeOther\n  );\n  const revokeSessionAlias = createAlias(\n    \"revokeSession\",\n    \"session.revoke\",\n    auth.session.revoke\n  );\n  auth.changeEmail = changeEmail;\n  auth.changeEmailVerify = changeEmailVerify;\n  auth.deleteUser.callback = deleteUserCallback;\n  auth.deleteUserVerify = deleteUserVerify;\n  auth.listSessions = listSessions;\n  auth.revokeOtherSessions = revokeOtherSessions;\n  auth.revokeSession = revokeSessionAlias;\n  auth.sendVerificationEmail = sendVerificationEmail;\n  auth.listAccounts = listAccounts;\n  auth.unlinkAccount = unlinkAccount;\n  auth.verifyEmail = verifyEmail;\n\n  return {\n    auth,\n    authorization: auth.authorization,\n    baseUrl,\n    changeEmail,\n    changePassword: auth.changePassword,\n    clearOtherSessions: auth.session.revokeOther,\n    clearSession: revokeSession,\n    clearSessions: revokeSessions,\n    deleteUser: auth.user.delete,\n    deleteUserCallback,\n    forgetPassword: auth.forgetPassword,\n    getAccessToken: auth.getAccessToken,\n    getSession: auth.getSession,\n    getToken: auth.getToken,\n    getUser: auth.getUser,\n    linkSocial: auth.social.link,\n    listAccounts,\n    listSessions,\n    logout: auth.signOut,\n    organization: auth.organization,\n    refreshToken: auth.refreshToken,\n    request,\n    requireSession: auth.requireSession,\n    resetPassword: auth.resetPassword,\n    resolveResetPasswordToken,\n    revokeOtherSessions,\n    revokeSession: revokeSessionAlias,\n    revokeSessions,\n    sendVerificationEmail,\n    signIn: auth.signIn,\n    signOut: auth.signOut,\n    signUp: auth.signUp,\n    tokenProvider: auth.tokenProvider,\n    unlinkAccount,\n    updateUser: auth.updateUser,\n    verifyEmail,\n  };\n}\n","import type {\n  AthenaAuthEmailListQuery,\n  AthenaAuthEmailListResponse,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthUser,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createEmailClientModule(input: { transport: AuthTransport }) {\n  const { transport } = input;\n\n  const changeEmail: InternalAthenaAuthModule[\"auth\"][\"changeEmail\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/change-email\", input, options);\n\n  const changeEmailVerify: InternalAthenaAuthModule[\"auth\"][\"changeEmailVerify\"] =\n    (input, options) =>\n      transport.getWithQuery(\"/change-email/verify\", input, options);\n\n  const sendVerificationEmail: InternalAthenaAuthModule[\"auth\"][\"sendVerificationEmail\"] =\n    (input, options) =>\n      transport.postGeneric(\"/send-verification-email\", input, options);\n\n  const verifyEmail: InternalAthenaAuthModule[\"auth\"][\"verifyEmail\"] = (\n    input,\n    options\n  ) => {\n    const queryInput: AthenaAuthGenericQueryInput = {\n      fetchOptions: input.fetchOptions,\n      query: {\n        callbackURL: input.callbackURL,\n        token: input.token,\n      },\n    };\n    return transport.getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n      \"/verify-email\",\n      queryInput,\n      options\n    );\n  };\n\n  const listUserEmails: InternalAthenaAuthModule[\"auth\"][\"user\"][\"email\"][\"list\"] =\n    async (input, options) => {\n      const primary = await transport.getWithQuery<\n        AthenaAuthEmailListResponse,\n        AthenaAuthEmailListQuery\n      >(\"/email/list\", input, options);\n      if (\n        primary.ok ||\n        primary.status !== 404 ||\n        primary.errorDetails?.code !== \"HTTP_ERROR\"\n      ) {\n        return primary;\n      }\n      return transport.getWithQuery<\n        AthenaAuthEmailListResponse,\n        AthenaAuthEmailListQuery\n      >(\"/email-list\", input, options);\n    };\n\n  return {\n    changeEmail,\n    changeEmailVerify,\n    listUserEmails,\n    sendVerificationEmail,\n    verifyEmail,\n  };\n}\n","import type {\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminHasPermissionResponse,\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGuardResult,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganizationCheckSlugRequest,\n  AthenaAuthOrganizationCreateRequest,\n  AthenaAuthOrganizationDeleteRequest,\n  AthenaAuthOrganizationGetFullQuery,\n  AthenaAuthOrganizationGetInvitationQuery,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationInvitationActionRequest,\n  AthenaAuthOrganizationInviteMemberRequest,\n  AthenaAuthOrganizationLeaveRequest,\n  AthenaAuthOrganizationListInvitationsQuery,\n  AthenaAuthOrganizationListMembersQuery,\n  AthenaAuthOrganizationListUserInvitationsQuery,\n  AthenaAuthOrganizationMember,\n  AthenaAuthOrganizationRemoveMemberRequest,\n  AthenaAuthOrganizationSetActiveRequest,\n  AthenaAuthOrganizationUpdateMemberRoleRequest,\n  AthenaAuthOrganizationUpdateRequest,\n  AthenaAuthStatusResponse,\n} from \"../types.ts\";\nimport type { AuthSessionMutationController } from \"./session-mutations.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createOrganizationClientModule(input: {\n  mutations: AuthSessionMutationController;\n  requirePermission: (\n    endpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthGuardResult>;\n  transport: AuthTransport;\n}): AthenaAuthOrganizationBindings {\n  const { mutations, requirePermission, transport } = input;\n  const { resolvedConfig } = transport;\n\n  return {\n    checkSlug: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n        { available: boolean }\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/check-slug\", method: \"POST\" },\n        input,\n        options\n      ),\n    create: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/create\", method: \"POST\" },\n        input,\n        options\n      ),\n    delete: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/delete\", method: \"POST\" },\n        input,\n        options\n      ),\n    getFull: (input, options) =>\n      transport.executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationGetFullQuery,\n        {\n          organization: AthenaAuthOrganization;\n          members?: AthenaAuthOrganizationMember[];\n          invitations?: AthenaAuthOrganizationInvitation[];\n        }\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/get-full-organization\", method: \"GET\" },\n        input,\n        options\n      ),\n    hasPermission: (input, options) =>\n      transport.postGeneric<AthenaAdminHasPermissionResponse>(\n        \"/organization/has-permission\",\n        input,\n        options\n      ),\n    invitation: {\n      accept: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/accept-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n      cancel: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/cancel-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n      get: (input, options) =>\n        transport.executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationGetInvitationQuery,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/get-invitation\", method: \"GET\" },\n          input,\n          options\n        ),\n      list: (input, options) =>\n        transport.executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListInvitationsQuery,\n          AthenaAuthOrganizationInvitation[]\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/list-invitations\", method: \"GET\" },\n          input,\n          options\n        ),\n      reject: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/reject-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    leave: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/leave\", method: \"POST\" },\n        input,\n        options\n      ),\n    list: (input, options) =>\n      transport.getGeneric<AthenaAuthOrganization[]>(\n        \"/organization/list\",\n        input,\n        options\n      ),\n    listUserInvitations: (input, options) =>\n      transport.executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationListUserInvitationsQuery,\n        AthenaAuthOrganizationInvitation[]\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/list-user-invitations\", method: \"GET\" },\n        input,\n        options\n      ),\n    member: {\n      getActive: (input, options) =>\n        transport.executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n          resolvedConfig,\n          { endpoint: \"/organization/get-active-member\", method: \"GET\" },\n          input,\n          options\n        ),\n      invite: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationInviteMemberRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/invite-member\", method: \"POST\" },\n          input,\n          options\n        ),\n      list: (input, options) =>\n        transport.executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListMembersQuery,\n          AthenaAuthOrganizationMember[]\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/list-members\", method: \"GET\" },\n          input,\n          options\n        ),\n      remove: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationRemoveMemberRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/remove-member\", method: \"POST\" },\n          input,\n          options\n        ),\n      updateRole: (input, options) =>\n        transport.executePostWithCompatibleInput<\n          AthenaAuthOrganizationUpdateMemberRoleRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/update-member-role\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    requirePermission: (input, options) =>\n      requirePermission(\"/organization/has-permission\", input, options),\n    setActive: async (input, options) => {\n      const { fetchOptions } = transport.extractFetchOptions(input);\n      const effectiveOptions = transport.mergeCallOptions(\n        fetchOptions,\n        options\n      );\n      const result = await transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/set-active\", method: \"POST\" },\n        input,\n        options\n      );\n      if (!result.ok) {\n        return result;\n      }\n      const organizationId =\n        input && typeof input === \"object\" && \"organizationId\" in input\n          ? (input as AthenaAuthOrganizationSetActiveRequest).organizationId\n          : undefined;\n      if (mutations.isSessionResponse(result.data)) {\n        mutations.sessionStore.accept(result.data);\n      }\n      mutations.patchActiveOrganization(organizationId ?? null);\n      await mutations.refreshSessionStore(undefined, effectiveOptions);\n      return result;\n    },\n    update: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/update\", method: \"POST\" },\n        input,\n        options\n      ),\n  };\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthStatusResponse,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createPasswordClientModule(input: {\n  transport: AuthTransport;\n}) {\n  const { transport } = input;\n  const { resolvedConfig } = transport;\n\n  const changePassword: InternalAthenaAuthModule[\"auth\"][\"changePassword\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/change-password\", input, options);\n\n  const forgetPassword: InternalAthenaAuthModule[\"auth\"][\"forgetPassword\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/forget-password\", input, options);\n\n  const setPassword: InternalAthenaAuthModule[\"auth\"][\"setPassword\"] = (\n    input,\n    options\n  ) => transport.postGeneric(\"/set-password\", input, options);\n\n  const resolveResetPasswordToken = (\n    input: {\n      token: string;\n      callbackURL?: string;\n    } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = transport.extractFetchOptions(input);\n    const mergedOptions = transport.mergeCallOptions(fetchOptions, options);\n    const query = payload as\n      | { token?: string; callbackURL?: string }\n      | undefined;\n    const token = query?.token?.trim();\n    if (!token) {\n      throw new Error(\"resolveResetPasswordToken requires a non-empty token\");\n    }\n    const endpoint =\n      `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath;\n    return transport.callAuthEndpoint<{ token?: string }>(\n      resolvedConfig,\n      { endpoint, method: \"GET\" },\n      undefined,\n      query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n      mergedOptions\n    );\n  };\n\n  const resetPasswordPost = (\n    input: Parameters<InternalAthenaAuthModule[\"resetPassword\"]>[0],\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.executePostWithCompatibleInput<\n      typeof input,\n      AthenaAuthStatusResponse\n    >(\n      resolvedConfig,\n      { endpoint: \"/reset-password\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const resetPassword = Object.assign(resetPasswordPost, {\n    token: resolveResetPasswordToken,\n  });\n\n  return {\n    changePassword,\n    forgetPassword,\n    resetPassword,\n    resolveResetPasswordToken,\n    setPassword,\n  };\n}\n","export type AthenaAuthSessionPersistenceOperation = \"clear\" | \"persist\";\n\nexport interface InternalAuthSessionPersistence {\n  clearSession(): Promise<void>;\n  persistSessionToken(token: string): Promise<void>;\n}\n\nexport interface InternalAuthSessionPersistenceAuthority {\n  advanceGeneration(): void;\n  beginAuthMutation(): void;\n  beginSignOutInvalidation(): void;\n  clearSession(): Promise<void>;\n  clearSessionAtGeneration(generation: number): Promise<void>;\n  getGeneration(): number;\n  hasActiveAuthMutations(): boolean;\n  hasActiveSignOutInvalidations(): boolean;\n  persistSessionToken(token: string): Promise<void>;\n  persistSessionTokenAtGeneration(\n    token: string,\n    generation: number\n  ): Promise<void>;\n  endAuthMutation(): void;\n  releaseSignOutInvalidation(): void;\n}\n\nexport class AthenaAuthSessionPersistenceError extends Error {\n  readonly code = \"ATHENA_AUTH_SESSION_PERSISTENCE_FAILED\";\n  readonly operation: AthenaAuthSessionPersistenceOperation;\n\n  constructor(operation: AthenaAuthSessionPersistenceOperation) {\n    super(`Failed to ${operation} the durable Auth session.`);\n    this.name = \"AthenaAuthSessionPersistenceError\";\n    this.operation = operation;\n  }\n}\n\nexport function createAuthSessionPersistenceAuthority(\n  persistence: InternalAuthSessionPersistence | undefined\n): InternalAuthSessionPersistenceAuthority | undefined {\n  if (!persistence) {\n    return;\n  }\n\n  let generation = 0;\n  let tail = Promise.resolve();\n  let activeSignOutInvalidations = 0;\n  let activeAuthMutations = 0;\n\n  const enqueue = (\n    operation: AthenaAuthSessionPersistenceOperation,\n    action: () => Promise<void>,\n    expectedGeneration = generation\n  ) => {\n    const operationGeneration = expectedGeneration;\n    const next = tail.then(async () => {\n      if (operationGeneration !== generation) {\n        return;\n      }\n      try {\n        await action();\n      } catch {\n        throw new AthenaAuthSessionPersistenceError(operation);\n      }\n    });\n    tail = next.catch(() => undefined);\n    return next;\n  };\n\n  return {\n    advanceGeneration() {\n      generation += 1;\n    },\n    beginAuthMutation() {\n      activeAuthMutations += 1;\n    },\n    beginSignOutInvalidation() {\n      activeSignOutInvalidations += 1;\n    },\n    clearSession() {\n      return enqueue(\"clear\", () => persistence.clearSession());\n    },\n    clearSessionAtGeneration(expectedGeneration) {\n      return enqueue(\"clear\", () => persistence.clearSession(), expectedGeneration);\n    },\n    getGeneration() {\n      return generation;\n    },\n    hasActiveAuthMutations() {\n      return activeAuthMutations > 0;\n    },\n    hasActiveSignOutInvalidations() {\n      return activeSignOutInvalidations > 0;\n    },\n    persistSessionToken(token) {\n      return enqueue(\"persist\", () => persistence.persistSessionToken(token));\n    },\n    persistSessionTokenAtGeneration(token, expectedGeneration) {\n      return enqueue(\n        \"persist\",\n        () => persistence.persistSessionToken(token),\n        expectedGeneration\n      );\n    },\n    endAuthMutation() {\n      activeAuthMutations = Math.max(0, activeAuthMutations - 1);\n    },\n    releaseSignOutInvalidation() {\n      activeSignOutInvalidations = Math.max(\n        0,\n        activeSignOutInvalidations - 1\n      );\n    },\n  };\n}\n\nexport async function persistAuthSessionToken(\n  persistence: InternalAuthSessionPersistence | undefined,\n  token: string\n): Promise<void> {\n  if (!persistence) {\n    return;\n  }\n  try {\n    await persistence.persistSessionToken(token);\n  } catch {\n    throw new AthenaAuthSessionPersistenceError(\"persist\");\n  }\n}\n\nexport async function clearPersistedAuthSession(\n  persistence: InternalAuthSessionPersistence | undefined\n): Promise<void> {\n  if (!persistence) {\n    return;\n  }\n  try {\n    await persistence.clearSession();\n  } catch {\n    throw new AthenaAuthSessionPersistenceError(\"clear\");\n  }\n}\n\nexport function readAuthSessionToken(value: unknown): string | undefined {\n  if (!value || typeof value !== \"object\") {\n    return;\n  }\n  const record = value as {\n    session?: { token?: unknown };\n    token?: unknown;\n  };\n  if (typeof record.token === \"string\" && record.token.length > 0) {\n    return record.token;\n  }\n  if (\n    record.session &&\n    typeof record.session.token === \"string\" &&\n    record.session.token.length > 0\n  ) {\n    return record.session.token;\n  }\n}\n","import type { AthenaAuthSessionController } from \"../session-controller.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthResult,\n  AthenaAuthSessionResponse,\n  AthenaAuthUser,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\nimport {\n  readAuthSessionToken,\n} from \"./session-persistence.ts\";\n\nexport interface AuthSessionMutationController {\n  applyAuthMutationToSessionStore: <T>(\n    result: AthenaAuthResult<T>,\n    options?: {\n      refreshIfMissing?: boolean;\n      persistenceGeneration?: number;\n    }\n  ) => Promise<AthenaAuthResult<T>>;\n  fetchSessionResult: (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<AthenaAuthSessionResponse>>;\n  isSessionResponse: (value: unknown) => value is AthenaAuthSessionResponse;\n  patchActiveOrganization: (\n    organizationId: string | null | undefined\n  ) => boolean;\n  refreshSessionStore: (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<\n    ReturnType<\n      AthenaAuthSessionController<AthenaAuthSessionResponse>[\"getSnapshot\"]\n    >\n  >;\n  sessionStore: AthenaAuthSessionController<AthenaAuthSessionResponse>;\n}\n\nexport function isSessionResponse(\n  value: unknown\n): value is AthenaAuthSessionResponse {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const record = value as Record<string, unknown>;\n  const session = record.session;\n  const user = record.user;\n  return (\n    !!session &&\n    typeof session === \"object\" &&\n    typeof (session as { id?: unknown }).id === \"string\" &&\n    !!user &&\n    typeof user === \"object\" &&\n    typeof (user as { id?: unknown }).id === \"string\"\n  );\n}\n\nexport function sessionFromSignIn(\n  value: unknown\n): AthenaAuthSessionResponse | null {\n  if (!value || typeof value !== \"object\") {\n    return null;\n  }\n  const record = value as Record<string, unknown>;\n  if (record.redirect === true) {\n    return null;\n  }\n  const user = record.user;\n  const token = record.token;\n  if (\n    !user ||\n    typeof user !== \"object\" ||\n    typeof (user as { id?: unknown }).id !== \"string\"\n  ) {\n    return null;\n  }\n  const userId = (user as { id: string }).id;\n  const sessionToken = typeof token === \"string\" ? token : undefined;\n  return {\n    grants: [],\n    rights: [],\n    session: {\n      id: sessionToken ?? `local:${userId}`,\n      token: sessionToken,\n      userId,\n    },\n    user: user as AthenaAuthUser,\n  };\n}\n\nexport function createAuthSessionMutations(input: {\n  sessionStore: AthenaAuthSessionController<AthenaAuthSessionResponse>;\n  transport: AuthTransport;\n}): AuthSessionMutationController {\n  const { sessionStore, transport } = input;\n\n  const fetchSessionResult = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.getGeneric<AthenaAuthSessionResponse>(\n      \"/get-session\",\n      input,\n      options\n    );\n\n  const refreshSessionStore = async (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { epoch, skipped } = sessionStore.beginRefresh();\n    if (skipped) {\n      return sessionStore.getSnapshot();\n    }\n    let result: AthenaAuthResult<AthenaAuthSessionResponse>;\n    try {\n      result = await fetchSessionResult(input, options);\n    } catch (error) {\n      sessionStore.completeRefresh(epoch, {\n        clearSession: false,\n        error,\n        ok: false,\n      });\n      return sessionStore.getSnapshot();\n    }\n    if (result.ok) {\n      try {\n        const token = readAuthSessionToken(result.data);\n        if (token) {\n          await sessionStore.persistSessionTokenForRefresh(epoch, token);\n        } else if (result.data == null) {\n          await sessionStore.clearPersistedSessionForRefresh(epoch);\n        }\n      } catch (error) {\n        sessionStore.completeRefresh(epoch, {\n          clearSession: true,\n          error,\n          ok: false,\n        });\n        throw error;\n      }\n      sessionStore.completeRefresh(epoch, {\n        ok: true,\n        session: result.data ?? null,\n      });\n    } else {\n      const status = typeof result.status === \"number\" ? result.status : 0;\n      if (status === 401) {\n        try {\n          await sessionStore.clearPersistedSessionForRefresh(epoch);\n        } catch (error) {\n          sessionStore.completeRefresh(epoch, {\n            clearSession: true,\n            error,\n            ok: false,\n          });\n          throw error;\n        }\n      }\n      sessionStore.completeRefresh(epoch, {\n        clearSession: status === 401,\n        error: result.error ?? result,\n        ok: false,\n      });\n    }\n    return sessionStore.getSnapshot();\n  };\n\n  const applyAuthMutationToSessionStore = async <T>(\n    result: AthenaAuthResult<T>,\n    options?: {\n      refreshIfMissing?: boolean;\n      persistenceGeneration?: number;\n    }\n  ): Promise<AthenaAuthResult<T>> => {\n    if (!result.ok) {\n      return result;\n    }\n    if (isSessionResponse(result.data)) {\n      const token = readAuthSessionToken(result.data);\n      const persistenceGeneration =\n        options?.persistenceGeneration ??\n        sessionStore.getPersistenceGeneration();\n      if (token) {\n        await sessionStore.persistSessionTokenAtGeneration(\n          token,\n          persistenceGeneration\n        );\n        if (\n          !sessionStore.isPersistenceGenerationCurrent(persistenceGeneration)\n        ) {\n          return result;\n        }\n      }\n      sessionStore.accept(result.data);\n      return result;\n    }\n    const fromSignIn = sessionFromSignIn(result.data);\n    if (fromSignIn) {\n      const token = readAuthSessionToken(fromSignIn);\n      const persistenceGeneration =\n        options?.persistenceGeneration ??\n        sessionStore.getPersistenceGeneration();\n      if (token) {\n        await sessionStore.persistSessionTokenAtGeneration(\n          token,\n          persistenceGeneration\n        );\n        if (\n          !sessionStore.isPersistenceGenerationCurrent(persistenceGeneration)\n        ) {\n          return result;\n        }\n      }\n      sessionStore.accept(fromSignIn);\n      return result;\n    }\n    if (options?.refreshIfMissing !== false) {\n      await refreshSessionStore();\n    }\n    return result;\n  };\n\n  const patchActiveOrganization = (\n    organizationId: string | null | undefined\n  ) => {\n    const current = sessionStore.getSnapshot().session;\n    if (!current?.session) {\n      return false;\n    }\n    sessionStore.accept({\n      ...current,\n      organization: {\n        activeId: organizationId === undefined ? null : organizationId,\n      },\n      session: {\n        ...current.session,\n        activeOrganizationId:\n          organizationId === undefined ? null : organizationId,\n      },\n    } as typeof current);\n    return true;\n  };\n\n  return {\n    applyAuthMutationToSessionStore,\n    fetchSessionResult,\n    isSessionResponse,\n    patchActiveOrganization,\n    refreshSessionStore,\n    sessionStore,\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(\n  body: string,\n  contentType?: string | null\n): 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","import { sanitizeAuthErrorMessage } from \"../../http/upstream-html-error.ts\";\nimport type {\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthMethod,\n} from \"../types.ts\";\n\nexport interface AuthRequestContext {\n  endpoint: AthenaAuthEndpointPath;\n  method: AthenaAuthMethod;\n}\n\nexport type InternalErrorInput = AuthRequestContext & {\n  code: AthenaAuthErrorCode;\n  status: number;\n  message: string;\n  requestId?: string;\n  hint?: string;\n  cause?: string;\n};\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function looksLikeUnsafeAuthTransportBody(value: string): boolean {\n  const trimmed = value.trimStart();\n  return (\n    /^<!doctype\\s+html/i.test(trimmed) ||\n    /^<\\?xml/i.test(trimmed) ||\n    /^<html(?:\\s|>)/i.test(trimmed) ||\n    /<(?:head|body|script|style)(?:\\s|>)/i.test(value) ||\n    value.length > 2000\n  );\n}\n\nexport function resolveErrorMessage(\n  payload: unknown,\n  fallback: string\n): string {\n  if (isRecord(payload)) {\n    const messageCandidates = [payload.error, payload.message, payload.details];\n    for (const candidate of messageCandidates) {\n      if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n        const text = candidate.trim();\n        if (!looksLikeUnsafeAuthTransportBody(text)) {\n          return text;\n        }\n      }\n    }\n  }\n\n  if (typeof payload === \"string\" && payload.trim().length > 0) {\n    const text = payload.trim();\n    if (looksLikeUnsafeAuthTransportBody(text)) {\n      return fallback;\n    }\n    return sanitizeAuthErrorMessage(text, fallback);\n  }\n\n  return fallback;\n}\n\nexport function resolveErrorCode(payload: unknown): AthenaAuthErrorCode {\n  if (!isRecord(payload)) {\n    return \"HTTP_ERROR\";\n  }\n  if (typeof payload.code === \"string\" && payload.code.trim()) {\n    return payload.code.trim();\n  }\n  const nested = isRecord(payload.error) ? payload.error : undefined;\n  if (nested && typeof nested.code === \"string\" && nested.code.trim()) {\n    return nested.code.trim();\n  }\n  return \"HTTP_ERROR\";\n}\n\nexport function toErrorDetails(\n  input: InternalErrorInput\n): AthenaAuthErrorDetails {\n  return {\n    cause: input.cause,\n    code: input.code,\n    endpoint: input.endpoint,\n    hint: input.hint,\n    message: input.message,\n    method: input.method,\n    requestId: input.requestId,\n    status: input.status,\n  };\n}\n\nexport function resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n","import type { AthenaAuthSessionController } from \"../session-controller.ts\";\nimport type {\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminHasPermissionResponse,\n  AthenaAuthBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthErrorResponse,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGenericInput,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGuardResult,\n  AthenaAuthHealthResponse,\n  AthenaAuthOkResponse,\n  AthenaAuthResult,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthStatusResponse,\n} from \"../types.ts\";\nimport { isRecord } from \"./errors.ts\";\nimport type { AuthSessionMutationController } from \"./session-mutations.ts\";\nimport { readAuthSessionToken } from \"./session-persistence.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nfunction toSessionGuardFailure(\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>\n): AthenaAuthGuardResult {\n  if (sessionResult.status === 401 || sessionResult.data === null) {\n    return {\n      error: sessionResult.error ?? \"Unauthorized\",\n      ok: false,\n      reason: \"unauthorized\",\n      sessionResult,\n      status: 401,\n    };\n  }\n\n  return {\n    error: sessionResult.error ?? \"Failed to resolve current session\",\n    ok: false,\n    reason: \"upstream_error\",\n    sessionResult,\n    status: sessionResult.status,\n  };\n}\n\nfunction toPermissionGuardFailure(\n  permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>\n): AthenaAuthGuardResult {\n  if (permissionResult.status === 401) {\n    return {\n      error: permissionResult.error ?? \"Unauthorized\",\n      ok: false,\n      permissionResult,\n      reason: \"unauthorized\",\n      sessionResult,\n      status: 401,\n    };\n  }\n\n  if (permissionResult.status === 403) {\n    return {\n      error: permissionResult.error ?? \"Forbidden\",\n      ok: false,\n      permissionResult,\n      reason: \"forbidden\",\n      sessionResult,\n      status: 403,\n    };\n  }\n\n  return {\n    error: permissionResult.error ?? \"Failed to resolve permission check\",\n    ok: false,\n    permissionResult,\n    reason: \"upstream_error\",\n    sessionResult,\n    status: permissionResult.status,\n  };\n}\n\nexport function createAuthSessionClientModule(input: {\n  mutations: AuthSessionMutationController;\n  sessionStore: AthenaAuthSessionController<AthenaAuthSessionResponse>;\n  transport: AuthTransport;\n}) {\n  const { mutations, sessionStore, transport } = input;\n  const { resolvedConfig } = transport;\n\n  const requireSession: AthenaAuthBindings[\"requireSession\"] = async (\n    input,\n    options\n  ) => {\n    const sessionInput = input?.fetchOptions\n      ? { fetchOptions: input.fetchOptions }\n      : undefined;\n    const sessionResult = await mutations.fetchSessionResult(\n      sessionInput,\n      options\n    );\n\n    if (!sessionResult.ok || sessionResult.data === null) {\n      return toSessionGuardFailure(sessionResult);\n    }\n\n    return {\n      ok: true,\n      session: sessionResult.data,\n    };\n  };\n\n  const getUser: AthenaAuthBindings[\"getUser\"] = async (input, options) => {\n    const sessionResult = await mutations.fetchSessionResult(input, options);\n\n    if (!sessionResult.ok) {\n      return {\n        ...sessionResult,\n        data: null,\n      };\n    }\n\n    return {\n      ...sessionResult,\n      data: {\n        user: sessionResult.data?.user ?? null,\n      } satisfies AthenaAuthGetUserResponse,\n    };\n  };\n\n  const requirePermission = async (\n    endpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthGuardResult> => {\n    const sessionGuard = await requireSession(\n      input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n      options\n    );\n\n    if (!sessionGuard.ok) {\n      return sessionGuard;\n    }\n\n    const permissionResult =\n      await transport.postGeneric<AthenaAdminHasPermissionResponse>(\n        endpoint,\n        input,\n        options\n      );\n\n    if (!permissionResult.ok) {\n      return toPermissionGuardFailure(permissionResult, {\n        data: sessionGuard.session,\n        error: null,\n        errorDetails: null,\n        ok: true,\n        raw: sessionGuard.session,\n        status: 200,\n      });\n    }\n\n    if (!permissionResult.data?.success) {\n      return {\n        error: permissionResult.data?.error ?? \"Forbidden\",\n        ok: false,\n        permissionResult,\n        reason: \"forbidden\",\n        sessionResult: {\n          data: sessionGuard.session,\n          error: null,\n          errorDetails: null,\n          ok: true,\n          raw: sessionGuard.session,\n          status: 200,\n        },\n        status: 403,\n      };\n    }\n\n    return sessionGuard;\n  };\n\n  const health: AthenaAuthBindings[\"health\"] = async (input, options) => {\n    const primary = await transport.getGeneric<AthenaAuthHealthResponse>(\n      \"/health\",\n      input,\n      options\n    );\n    if (\n      primary.ok ||\n      primary.status !== 404 ||\n      primary.errorDetails?.code !== \"HTTP_ERROR\"\n    ) {\n      return primary;\n    }\n\n    const fallback = await transport.getGeneric<AthenaAuthOkResponse>(\n      \"/ok\",\n      input,\n      options\n    );\n    if (!fallback.ok) {\n      return {\n        ...fallback,\n        data: null,\n      };\n    }\n\n    const fallbackStatus =\n      isRecord(fallback.data) && typeof fallback.data.ok === \"boolean\"\n        ? fallback.data.ok\n          ? \"ok\"\n          : \"error\"\n        : \"ok\";\n\n    return {\n      ...fallback,\n      data: {\n        status: fallbackStatus,\n      },\n    };\n  };\n\n  const signOut = async (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const invalidationGeneration = sessionStore.invalidate(\"signOut\");\n    try {\n      const result =\n        await transport.executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n          resolvedConfig,\n          { endpoint: \"/sign-out\", method: \"POST\" },\n          input,\n          options\n        );\n      await sessionStore.clearPersistedSessionAtGeneration(\n        invalidationGeneration\n      );\n      return result;\n    } finally {\n      sessionStore.releaseInvalidation(\"signOut\");\n    }\n  };\n\n  const snapshotToGetSessionResult = (\n    snap: ReturnType<typeof sessionStore.getSnapshot>\n  ): AthenaAuthResult<AthenaAuthSessionResponse> => {\n    if (snap.status === \"error\") {\n      return {\n        data: snap.session,\n        error: String(\n          snap.error instanceof Error ? snap.error.message : snap.error\n        ),\n        ok: false,\n        raw: snap.session,\n        status: 502,\n      };\n    }\n    return {\n      data: snap.session,\n      error: null,\n      ok: true,\n      raw: snap.session,\n      status: 200,\n    };\n  };\n\n  const waitForInFlightSession = () =>\n    new Promise<AthenaAuthResult<AthenaAuthSessionResponse>>((resolve) => {\n      const current = sessionStore.getSnapshot();\n      if (current.status !== \"loading\" && current.status !== \"unknown\") {\n        resolve(snapshotToGetSessionResult(current));\n        return;\n      }\n      const unsub = sessionStore.subscribe((next) => {\n        if (next.status !== \"loading\" && next.status !== \"unknown\") {\n          unsub();\n          resolve(snapshotToGetSessionResult(next));\n        }\n      });\n    });\n\n  const getSession = async (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<AthenaAuthSessionResponse>> => {\n    const { epoch, skipped } = sessionStore.beginRefresh();\n    if (skipped) {\n      const snap = sessionStore.getSnapshot();\n      if (\n        !sessionStore.isSignOutInvalidationActive() &&\n        (snap.status === \"loading\" || snap.status === \"unknown\")\n      ) {\n        return waitForInFlightSession();\n      }\n      return snapshotToGetSessionResult(snap);\n    }\n    let definitiveSessionLoss = false;\n    try {\n      const result = await mutations.fetchSessionResult(input, options);\n      if (result.ok) {\n        const token = readAuthSessionToken(result.data);\n        if (token) {\n          await sessionStore.persistSessionTokenForRefresh(epoch, token);\n        } else if (result.data == null) {\n          definitiveSessionLoss = true;\n          await sessionStore.clearPersistedSessionForRefresh(epoch);\n        }\n        sessionStore.completeRefresh(epoch, {\n          ok: true,\n          session: result.data ?? null,\n        });\n      } else {\n        const status = typeof result.status === \"number\" ? result.status : 0;\n        if (status === 401) {\n          definitiveSessionLoss = true;\n          await sessionStore.clearPersistedSessionForRefresh(epoch);\n        }\n        sessionStore.completeRefresh(epoch, {\n          clearSession: status === 401,\n          error: result.error ?? result,\n          ok: false,\n        });\n      }\n      return result;\n    } catch (error) {\n      sessionStore.completeRefresh(epoch, {\n        clearSession: definitiveSessionLoss,\n        error,\n        ok: false,\n      });\n      throw error;\n    }\n  };\n\n  const revokeSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: \"/revoke-sessions\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const revokeOtherSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: \"/revoke-other-sessions\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const revokeSession = (\n    input: { token: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.executePostWithCompatibleInput<\n      typeof input,\n      AthenaAuthStatusResponse\n    >(\n      resolvedConfig,\n      { endpoint: \"/revoke-session\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const collectRevokeTokens = (\n    input: Parameters<AthenaAuthBindings[\"session\"][\"revoke\"]>[0]\n  ): string[] => {\n    if (Array.isArray(input)) {\n      return input\n        .map((item) =>\n          typeof item === \"string\"\n            ? item\n            : typeof (item as { token?: string })?.token === \"string\"\n              ? (item as { token: string }).token\n              : \"\"\n        )\n        .filter((token) => token.trim().length > 0);\n    }\n    if (!input || typeof input !== \"object\") {\n      return [];\n    }\n    const parsed = input as { token?: string; tokens?: string[] };\n    if (Array.isArray(parsed.tokens)) {\n      return parsed.tokens.filter((token) => token.trim().length > 0);\n    }\n    if (typeof parsed.token === \"string\" && parsed.token.trim().length > 0) {\n      return [parsed.token];\n    }\n    return [];\n  };\n\n  const executeSessionRevoke: AthenaAuthBindings[\"session\"][\"revoke\"] = (\n    input,\n    options\n  ) => {\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error(\"session.revoke requires at least one session token\");\n      }\n      if (input.length === 1) {\n        return revokeSession(input[0], options);\n      }\n      return revokeSessions(undefined, options);\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      token?: string;\n      tokens?: string[];\n    };\n    const tokens = Array.isArray(parsed.tokens)\n      ? parsed.tokens.filter((token) => token.trim().length > 0)\n      : undefined;\n\n    if (tokens && tokens.length > 1) {\n      return revokeSessions(\n        parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n        options\n      );\n    }\n\n    if (tokens && tokens.length === 1) {\n      return revokeSession(\n        { fetchOptions: parsed.fetchOptions, token: tokens[0] },\n        options\n      );\n    }\n\n    const token = parsed.token?.trim();\n    if (!token) {\n      throw new Error(\n        \"session.revoke requires a non-empty token or a non-empty token list\"\n      );\n    }\n\n    return revokeSession(\n      {\n        fetchOptions: parsed.fetchOptions,\n        token,\n      },\n      options\n    );\n  };\n\n  const sessionRevokeBinding: AthenaAuthBindings[\"session\"][\"revoke\"] = async (\n    input,\n    options\n  ) => {\n    const tokens = collectRevokeTokens(input);\n    const result = await executeSessionRevoke(input, options);\n    const revokedAll =\n      (Array.isArray(input) && input.length > 1) || tokens.length > 1;\n    if (\n      result.ok &&\n      (revokedAll || sessionStore.shouldInvalidateForRevokedTokens(tokens))\n    ) {\n      sessionStore.invalidate(\"revoke\");\n      await sessionStore.clearPersistedSession();\n    }\n    return result;\n  };\n\n  const listSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    transport.getGeneric<AthenaAuthSession[]>(\"/list-sessions\", input, options);\n\n  const session: AthenaAuthBindings[\"session\"] = {\n    get: () => sessionStore.getSnapshot().session,\n    getSnapshot: () => sessionStore.getSnapshot(),\n    hydrate: (state: Parameters<typeof sessionStore.hydrate>[0]) =>\n      sessionStore.hydrate(state),\n    invalidate: (reason?: \"signOut\" | \"revoke\" | \"manual\") => {\n      const generation = sessionStore.invalidate(reason);\n      if (reason === \"signOut\") {\n        sessionStore.releaseInvalidation(\"signOut\");\n      }\n      return generation;\n    },\n    list: listSessions,\n    refresh: mutations.refreshSessionStore,\n    revoke: sessionRevokeBinding,\n    revokeOther: revokeOtherSessions,\n    setSession: (\n      session: Parameters<typeof sessionStore.setSession>[0],\n      status?: Parameters<typeof sessionStore.setSession>[1]\n    ) => sessionStore.setSession(session, status),\n    subscribe: (\n      listener: (snapshot: ReturnType<typeof sessionStore.getSnapshot>) => void\n    ) => sessionStore.subscribe(listener),\n  };\n\n  const error: AthenaAuthBindings[\"error\"] = (input, options) =>\n    transport.getGeneric<AthenaAuthErrorResponse | string>(\n      \"/error\",\n      input,\n      options\n    );\n  const ok: AthenaAuthBindings[\"ok\"] = (input, options) =>\n    transport.getGeneric<AthenaAuthOkResponse>(\"/ok\", input, options);\n\n  return {\n    error,\n    getSession,\n    getUser,\n    health,\n    listSessions,\n    ok,\n    requirePermission,\n    requireSession,\n    revokeOtherSessions,\n    revokeSession,\n    revokeSessions,\n    session,\n    sessionRevokeBinding,\n    signOut,\n  };\n}\n","import type {\n  AthenaAuthBindings,\n  AthenaAuthCallbackProviderRequest,\n  AthenaAuthCallbackProviderResponse,\n  AthenaAuthCallOptions,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthSignInResponse,\n  AthenaAuthSocialRedirectResponse,\n  AthenaLinkSocialRequest,\n  AthenaSocialSignInRequest,\n} from \"../types.ts\";\nimport type { AuthCapabilityGates } from \"./capability-gates.ts\";\nimport {\n  sessionFromSignIn,\n  type AuthSessionMutationController,\n} from \"./session-mutations.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createSocialClientModule(input: {\n  gates: AuthCapabilityGates;\n  mutations: AuthSessionMutationController;\n  transport: AuthTransport;\n}) {\n  const { gates, mutations, transport } = input;\n\n  const link = (\n    input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    gates.gateCapability(gates.denySocial(\"/link-social\"), () =>\n      transport.postGeneric<AthenaAuthSocialRedirectResponse>(\n        \"/link-social\",\n        input,\n        options\n      )\n    );\n\n  const signIn = (\n    input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    gates.gateCapability(gates.denySocial(\"/sign-in/social\"), async () => {\n      const persistenceGeneration =\n        mutations.sessionStore.beginPersistenceMutation();\n      try {\n        return await mutations.applyAuthMutationToSessionStore(\n          await transport.postGeneric<\n            AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n          >(\"/sign-in/social\", input, options),\n          { persistenceGeneration, refreshIfMissing: false }\n        );\n      } finally {\n        mutations.sessionStore.endPersistenceMutation();\n      }\n    });\n\n  const callbackProvider: AthenaAuthBindings[\"callback\"][\"provider\"] = async (\n    input,\n    options\n  ) => {\n    const { payload, fetchOptions } = transport.extractFetchOptions(input);\n    const parsed = payload as\n      | Partial<AthenaAuthCallbackProviderRequest>\n      | undefined;\n    const provider = String(parsed?.provider ?? \"\").trim();\n    if (!provider) {\n      throw new Error(\"callback.provider requires a non-empty provider value\");\n    }\n    const code = String(parsed?.code ?? \"\").trim();\n    const state = String(parsed?.state ?? \"\").trim();\n    if (!(code && state)) {\n      throw new Error(\n        \"callback.provider requires non-empty code and state values\"\n      );\n    }\n    const endpoint =\n      `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath;\n    const persistenceGeneration =\n      mutations.sessionStore.beginPersistenceMutation();\n    try {\n      const result = await transport.request<AthenaAuthCallbackProviderResponse>(\n        {\n          endpoint,\n          fetchOptions,\n          method: \"GET\",\n          query: {\n            code,\n            state,\n          },\n        },\n        options\n      );\n      if (\n        result.ok &&\n        typeof result.data?.token === \"string\" &&\n        sessionFromSignIn(result.data)\n      ) {\n        return mutations.applyAuthMutationToSessionStore(result, {\n          persistenceGeneration,\n          refreshIfMissing: false,\n        });\n      }\n      return result;\n    } finally {\n      mutations.sessionStore.endPersistenceMutation();\n    }\n  };\n\n  return {\n    callbackProvider,\n    link,\n    signIn,\n  };\n}\n","import type { AthenaAuthEndpointPath, AthenaAuthQueryValue } from \"../types.ts\";\n\nexport function appendQueryParam(\n  searchParams: URLSearchParams,\n  key: string,\n  value: AthenaAuthQueryValue\n): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (Array.isArray(value)) {\n    value.forEach((item) => {\n      searchParams.append(key, String(item));\n    });\n    return;\n  }\n  searchParams.append(key, String(value));\n}\n\nexport function buildRequestUrl(\n  baseUrl: string,\n  endpoint: AthenaAuthEndpointPath,\n  query?: Record<string, AthenaAuthQueryValue>\n): string {\n  const url = `${baseUrl}${endpoint}`;\n  if (!query || Object.keys(query).length === 0) {\n    return url;\n  }\n  const searchParams = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    appendQueryParam(searchParams, key, value);\n  }\n  const queryText = searchParams.toString();\n  return queryText ? `${url}?${queryText}` : url;\n}\n\nexport function extractQueryFromPayload(\n  payload: unknown\n): Record<string, AthenaAuthQueryValue> | undefined {\n  const query = (\n    payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n  )?.query;\n  if (!query || typeof query !== \"object\") {\n    return;\n  }\n  return query;\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","import { parseHttpResponseBody as parseResponseBody } from \"../../http/parse-response-body.ts\";\nimport {\n  isHtmlErrorPage,\n  UPSTREAM_UNAVAILABLE_CODE,\n  UPSTREAM_UNAVAILABLE_HINT,\n  UPSTREAM_UNAVAILABLE_MESSAGE,\n} from \"../../http/upstream-html-error.ts\";\nimport type { AthenaAuthResult } from \"../types.ts\";\nimport {\n  type AuthRequestContext,\n  resolveErrorCode,\n  resolveErrorMessage,\n  resolveRequestId,\n  toErrorDetails,\n} from \"./errors.ts\";\n\nexport function parseAuthTransportResponse<T>(input: {\n  context: AuthRequestContext;\n  rawText: string;\n  response: Response;\n}): AthenaAuthResult<T> {\n  const { context, rawText, response } = input;\n  const requestId = resolveRequestId(response.headers);\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n\n  if (isHtmlErrorPage(rawText ?? \"\", response.headers.get(\"content-type\"))) {\n    const details = toErrorDetails({\n      cause: (rawText ?? \"\").slice(0, 200),\n      code: UPSTREAM_UNAVAILABLE_CODE,\n      endpoint: context.endpoint,\n      hint: UPSTREAM_UNAVAILABLE_HINT,\n      message: UPSTREAM_UNAVAILABLE_MESSAGE,\n      method: context.method,\n      requestId,\n      status: response.status || 503,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: null,\n      status: details.status,\n    };\n  }\n\n  if (parsedBody.parseFailed) {\n    const details = toErrorDetails({\n      cause: rawText.slice(0, 300),\n      code: \"INVALID_JSON\",\n      endpoint: context.endpoint,\n      hint: \"Verify the auth endpoint response body is valid JSON.\",\n      message: \"Auth server returned malformed JSON\",\n      method: context.method,\n      requestId,\n      status: response.status,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: parsedBody.parsed,\n      status: response.status,\n    };\n  }\n\n  const parsed = parsedBody.parsed;\n\n  if (!response.ok) {\n    const details = toErrorDetails({\n      code: resolveErrorCode(parsed),\n      endpoint: context.endpoint,\n      message: resolveErrorMessage(\n        parsed,\n        `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`\n      ),\n      method: context.method,\n      requestId,\n      status: response.status,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: parsed,\n      status: response.status,\n    };\n  }\n\n  return {\n    data: (parsed as T) ?? null,\n    error: null,\n    errorDetails: null,\n    ok: true,\n    raw: parsed,\n    status: response.status,\n  };\n}\n","import { buildSdkHeaderValue } from \"../../sdk-version.ts\";\nimport {\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n} from \"../../utils/athena-auth-url.ts\";\nimport { buildServiceRequestHeaders } from \"../../utils/athena-request-headers.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthMethod,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n} from \"../types.ts\";\nimport { type AuthRequestContext, toErrorDetails } from \"./errors.ts\";\nimport { buildRequestUrl, extractQueryFromPayload } from \"./query.ts\";\nimport { parseAuthTransportResponse } from \"./response.ts\";\n\nconst SDK_NAME = \"@xylex-group/athena-auth\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nexport const DEFAULT_AUTH_BASE_URL = \"http://localhost:3001/api/auth\";\n\nexport function normalizeBaseUrl(baseUrl?: string): string {\n  return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, \"\");\n}\n\nexport function mergeCallOptions(\n  base?: AthenaAuthCallOptions,\n  override?: AthenaAuthCallOptions\n): AthenaAuthCallOptions | undefined {\n  if (!(base || override)) {\n    return;\n  }\n  return {\n    ...base,\n    ...override,\n    headers: {\n      ...(base?.headers ?? {}),\n      ...(override?.headers ?? {}),\n    },\n  };\n}\n\nexport function authCallOptionsFromRequestContext(\n  request: {\n    bearerToken?: string | null;\n    cookie?: string | null;\n    forceNoCache?: boolean;\n    headers?: Record<string, string>;\n  }\n): AthenaAuthCallOptions | undefined {\n  const headers = Object.fromEntries(\n    Object.entries(request.headers ?? {}).filter(\n      ([name]) =>\n        name.toLowerCase() !== \"authorization\" &&\n        name.toLowerCase() !== \"cookie\"\n    )\n  );\n  const hasHeaders = Object.keys(headers).length > 0;\n  const hasContext =\n    Boolean(request.bearerToken || request.cookie) ||\n    request.forceNoCache === true ||\n    hasHeaders;\n\n  if (!hasContext) {\n    return;\n  }\n\n  return {\n    bearerToken: request.bearerToken ?? undefined,\n    cookie: request.cookie ?? undefined,\n    forceNoCache: request.forceNoCache,\n    headers: hasHeaders ? headers : undefined,\n  };\n}\n\nexport function extractFetchOptions<\n  T extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n  if (!input) {\n    return {\n      fetchOptions: undefined,\n      payload: undefined,\n    };\n  }\n\n  const { fetchOptions, ...rest } = input;\n  const hasPayloadKeys = Object.keys(rest).length > 0;\n  return {\n    fetchOptions,\n    payload: hasPayloadKeys ? rest : undefined,\n  };\n}\n\nexport function extractQueryFromInput(\n  input?: AthenaAuthFetchCompatibleInput\n): Record<string, AthenaAuthQueryValue> | undefined {\n  const { payload } = extractFetchOptions(input);\n  return extractQueryFromPayload(payload);\n}\n\nexport function withFreshSessionLookupQuery(\n  input?: AthenaAuthFetchCompatibleInput\n): Record<string, AthenaAuthQueryValue> {\n  const query = extractQueryFromInput(input) ?? {};\n  const explicit = query[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n  if (explicit === false || explicit === \"false\") {\n    const next = { ...query };\n    delete next[ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM];\n    return next;\n  }\n  return {\n    ...query,\n    [ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM]:\n      ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n  };\n}\n\nexport function buildHeaders(\n  config: AthenaAuthClientConfig,\n  options?: AthenaAuthCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"auth\", SDK_HEADER_VALUE, config, options);\n}\n\nexport function inferDefaultMethod(\n  endpoint: AthenaAuthEndpointPath\n): AthenaAuthMethod {\n  if (endpoint.startsWith(\"/reset-password/\")) {\n    return \"GET\";\n  }\n  if (\n    endpoint.startsWith(\"/authorization/roles/\") &&\n    !endpoint.endsWith(\"/clone\") &&\n    !endpoint.endsWith(\"/rights\")\n  ) {\n    return \"GET\";\n  }\n\n  switch (endpoint) {\n    case \"/get-session\":\n    case \"/admin/get-user\":\n    case \"/list-sessions\":\n    case \"/verify-email\":\n    case \"/change-email/verify\":\n    case \"/delete-user/verify\":\n    case \"/email-list\":\n    case \"/email/list\":\n    case \"/delete-user/callback\":\n    case \"/list-accounts\":\n    case \"/passkey/generate-register-options\":\n    case \"/passkey/list-user-passkeys\":\n    case \"/.well-known/webauthn\":\n    case \"/.well-known/jwks.json\":\n    case \"/.well-known/openid-configuration\":\n    case \"/admin/list-users\":\n    case \"/admin/athena-client/list\":\n    case \"/admin/audit-log/list\":\n    case \"/admin/email/get\":\n    case \"/admin/email-failure/list\":\n    case \"/admin/email-failure/get\":\n    case \"/admin/email-template/get\":\n    case \"/admin/email-template/list\":\n    case \"/admin/email/list\":\n    case \"/api-key/get\":\n    case \"/api-key/list\":\n    case \"/organization/get-full-organization\":\n    case \"/organization/list\":\n    case \"/organization/get-invitation\":\n    case \"/organization/list-invitations\":\n    case \"/organization/list-user-invitations\":\n    case \"/organization/list-members\":\n    case \"/organization/get-active-member\":\n    case \"/authorization/snapshot\":\n    case \"/authorization/rights\":\n    case \"/authorization/roles\":\n    case \"/authorization/audit\":\n    case \"/authorization/assignments/users\":\n    case \"/authorization/assignments/members\":\n    case \"/health\":\n    case \"/ok\":\n    case \"/error\":\n      return \"GET\";\n    default:\n      return \"POST\";\n  }\n}\n\nexport async function callAuthEndpoint<T>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  body?: unknown,\n  query?: Record<string, AthenaAuthQueryValue>,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<T>> {\n  const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl);\n  const url = buildRequestUrl(baseUrl, context.endpoint, query);\n  const headers = buildHeaders(config, options);\n  const credentials = options?.credentials ?? config.credentials ?? \"include\";\n  const requestInit: RequestInit = {\n    cache: \"no-store\",\n    credentials,\n    headers,\n    method: context.method,\n    signal: options?.signal,\n  };\n\n  if (context.method !== \"GET\") {\n    requestInit.body = JSON.stringify(body ?? {});\n  }\n\n  const fetcher = config.fetch ?? globalThis.fetch;\n  if (!fetcher) {\n    const details = toErrorDetails({\n      code: \"UNKNOWN_ERROR\",\n      endpoint: context.endpoint,\n      hint: \"Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })\",\n      message: \"No fetch implementation available for auth client\",\n      method: context.method,\n      status: 0,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: null,\n      status: 0,\n    };\n  }\n\n  try {\n    const response = await fetcher(url, requestInit);\n    const rawText = await response.text();\n    return parseAuthTransportResponse<T>({\n      context,\n      rawText,\n      response,\n    });\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const details = toErrorDetails({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      endpoint: context.endpoint,\n      hint: \"Check auth server URL, DNS, and network reachability.\",\n      message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n      method: context.method,\n      status: 0,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: null,\n      status: 0,\n    };\n  }\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n} from \"../types.ts\";\nimport type { AuthRequestContext } from \"./errors.ts\";\nimport {\n  callAuthEndpoint,\n  extractFetchOptions,\n  mergeCallOptions,\n} from \"./request.ts\";\n\nexport function executePostWithCompatibleInput<\n  TPayload extends AthenaAuthFetchCompatibleInput,\n  TResult,\n>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input: TPayload,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<TResult>> {\n  const { payload, fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    payload ?? {},\n    undefined,\n    mergedOptions\n  );\n}\n\nexport function executePostWithOptionalInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<TResult>> {\n  const { fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    {},\n    undefined,\n    mergedOptions\n  );\n}\n\nexport function executeGetWithCompatibleInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<TResult>> {\n  const { fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    undefined,\n    mergedOptions\n  );\n}\n\nexport function executeGetWithQueryCompatibleInput<\n  TQuery extends object,\n  TResult,\n>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<TResult>> {\n  const { payload, fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  const query = (\n    payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n  )?.query;\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    query,\n    mergedOptions\n  );\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthRequestInput,\n  AthenaAuthResult,\n} from \"../types.ts\";\nimport {\n  executeGetWithCompatibleInput,\n  executeGetWithQueryCompatibleInput,\n  executePostWithCompatibleInput,\n  executePostWithOptionalInput,\n} from \"./mutation.ts\";\nimport {\n  callAuthEndpoint,\n  extractFetchOptions,\n  extractQueryFromInput,\n  inferDefaultMethod,\n  mergeCallOptions,\n  normalizeBaseUrl,\n  withFreshSessionLookupQuery,\n} from \"./request.ts\";\nimport type {\n  InternalAuthSessionPersistence,\n  InternalAuthSessionPersistenceAuthority,\n} from \"./session-persistence.ts\";\n\nexport interface InternalAuthModuleRuntimeOptions {\n  /** Whether deprecated flat aliases should emit compatibility warnings. */\n  compatibilityWarnings?: boolean;\n  sessionPersistence?: InternalAuthSessionPersistence;\n  sessionPersistenceAuthority?: InternalAuthSessionPersistenceAuthority;\n  resolveCallOptions?: () =>\n    | AthenaAuthCallOptions\n    | undefined\n    | Promise<AthenaAuthCallOptions | undefined>;\n}\n\nexport const ATHENA_AUTH_BIND_BASE_URL = Symbol.for(\n  \"@xylex-group/athena.auth.bindBaseUrl\"\n);\n\nexport interface AuthClientWithBindableBaseUrl {\n  [ATHENA_AUTH_BIND_BASE_URL]?: (baseUrl: string) => void;\n}\n\nexport function bindAthenaAuthClientBaseUrl(\n  auth: object,\n  baseUrl: string\n): void {\n  const bind = (auth as AuthClientWithBindableBaseUrl)[\n    ATHENA_AUTH_BIND_BASE_URL\n  ];\n  bind?.(baseUrl);\n}\n\nexport type AuthTransportRequest = <T = unknown>(\n  input: AthenaAuthRequestInput,\n  options?: AthenaAuthCallOptions\n) => Promise<AthenaAuthResult<T>>;\n\nexport interface AuthTransport {\n  bindBaseUrl(baseUrl: string): void;\n  callAuthEndpoint: typeof callAuthEndpoint;\n  executeGetWithCompatibleInput: typeof executeGetWithCompatibleInput;\n  executeGetWithQueryCompatibleInput: typeof executeGetWithQueryCompatibleInput;\n  executePostWithCompatibleInput: typeof executePostWithCompatibleInput;\n  executePostWithOptionalInput: typeof executePostWithOptionalInput;\n  extractFetchOptions: typeof extractFetchOptions;\n  getGeneric: <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<T>>;\n  getWithQuery: <\n    T = unknown,\n    TQuery extends object = Record<string, AthenaAuthQueryValue>,\n  >(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      query?: TQuery;\n    },\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<T>>;\n  mergeCallOptions: typeof mergeCallOptions;\n  postGeneric: <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & object,\n    options?: AthenaAuthCallOptions\n  ) => Promise<AthenaAuthResult<T>>;\n  request: AuthTransportRequest;\n  readonly resolvedConfig: AthenaAuthClientConfig;\n}\n\nexport function createAuthTransport(\n  config: AthenaAuthClientConfig = {},\n  runtimeOptions: InternalAuthModuleRuntimeOptions = {}\n): AuthTransport {\n  const resolvedConfig: AthenaAuthClientConfig = {\n    ...config,\n    baseUrl: normalizeBaseUrl(config.baseUrl),\n  };\n\n  const request: AuthTransportRequest = async <T = unknown>(\n    input: AthenaAuthRequestInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<T>> => {\n    const method =\n      input.method ??\n      (input.body === undefined ? inferDefaultMethod(input.endpoint) : \"POST\");\n    const contextOptions = await runtimeOptions.resolveCallOptions?.();\n    const mergedOptions = mergeCallOptions(\n      mergeCallOptions(contextOptions, input.fetchOptions),\n      options\n    );\n    return await callAuthEndpoint<T>(\n      resolvedConfig,\n      { endpoint: input.endpoint, method },\n      input.body,\n      input.query,\n      mergedOptions\n    );\n  };\n\n  const postGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & object,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    return request<T>(\n      {\n        body: payload ?? {},\n        endpoint,\n        fetchOptions,\n        method: \"POST\",\n      },\n      options\n    );\n  };\n\n  const getGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { fetchOptions } = extractFetchOptions(input);\n    return request<T>(\n      {\n        endpoint,\n        fetchOptions,\n        method: \"GET\",\n        query:\n          endpoint === \"/get-session\"\n            ? withFreshSessionLookupQuery(input)\n            : extractQueryFromInput(input),\n      },\n      options\n    );\n  };\n\n  const getWithQuery = <\n    T = unknown,\n    TQuery extends object = Record<string, AthenaAuthQueryValue>,\n  >(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      query?: TQuery;\n    },\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    const query = (payload as { query?: TQuery } | undefined)?.query as\n      | Record<string, AthenaAuthQueryValue>\n      | undefined;\n    return request<T>(\n      {\n        endpoint,\n        fetchOptions,\n        method: \"GET\",\n        query,\n      },\n      options\n    );\n  };\n\n  return {\n    bindBaseUrl(baseUrl: string) {\n      resolvedConfig.baseUrl = normalizeBaseUrl(baseUrl);\n    },\n    callAuthEndpoint,\n    executeGetWithCompatibleInput,\n    executeGetWithQueryCompatibleInput,\n    executePostWithCompatibleInput,\n    executePostWithOptionalInput,\n    extractFetchOptions,\n    getGeneric,\n    getWithQuery,\n    mergeCallOptions,\n    postGeneric,\n    request,\n    resolvedConfig,\n  };\n}\n","import type {\n  AthenaAuthFetchCompatibleInput,\n  AthenaTwoFactorGenerateBackupCodesRequest,\n  AthenaTwoFactorGenerateBackupCodesResponse,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\nexport function createTwoFactorClientModule(input: {\n  transport: AuthTransport;\n}) {\n  const { transport } = input;\n  const { resolvedConfig } = transport;\n\n  const twoFactor: InternalAthenaAuthModule[\"auth\"][\"twoFactor\"] = {\n    disable: (input, options) =>\n      transport.postGeneric(\"/two-factor/disable\", input, options),\n    enable: (input, options) =>\n      transport.postGeneric(\"/two-factor/enable\", input, options),\n    generateBackupCodes: (input, options) =>\n      transport.executePostWithCompatibleInput<\n        AthenaTwoFactorGenerateBackupCodesRequest &\n          AthenaAuthFetchCompatibleInput,\n        AthenaTwoFactorGenerateBackupCodesResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/two-factor/generate-backup-codes\", method: \"POST\" },\n        input,\n        options\n      ),\n    getTotpUri: (input, options) =>\n      transport.postGeneric(\"/two-factor/get-totp-uri\", input, options),\n    sendOtp: (input, options) =>\n      transport.postGeneric(\"/two-factor/send-otp\", input, options),\n    verifyBackupCode: (input, options) =>\n      transport.postGeneric(\"/two-factor/verify-backup-code\", input, options),\n    verifyOtp: (input, options) =>\n      transport.postGeneric(\"/two-factor/verify-otp\", input, options),\n    verifyTotp: (input, options) =>\n      transport.postGeneric(\"/two-factor/verify-totp\", input, options),\n  };\n\n  return { twoFactor };\n}\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthSignInResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthTokenVerificationResponse,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaUpdateUserRequest,\n  AthenaUsernameSignInRequest,\n  InternalAthenaAuthModule,\n} from \"../types.ts\";\nimport type { AuthSessionMutationController } from \"./session-mutations.ts\";\nimport type { AuthTransport } from \"./transport.ts\";\n\ntype AthenaDeleteUserVerificationResponse =\n  AthenaAuthTokenVerificationResponse & {\n    success?: boolean;\n  };\n\nexport function createUserClientModule(input: {\n  mutations: AuthSessionMutationController;\n  transport: AuthTransport;\n}) {\n  const { mutations, transport } = input;\n  const { resolvedConfig } = transport;\n\n  const clearAfterConfirmedDeletion = async () => {\n    const invalidationGeneration =\n      mutations.sessionStore.invalidate(\"revoke\");\n    await mutations.sessionStore.clearPersistedSessionAtGeneration(\n      invalidationGeneration\n    );\n  };\n\n  const signInEmail = async (\n    input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const persistenceGeneration =\n      mutations.sessionStore.beginPersistenceMutation();\n    try {\n      return await mutations.applyAuthMutationToSessionStore(\n        await transport.postGeneric<AthenaAuthSignInResponse>(\n          \"/sign-in/email\",\n          input,\n          options\n        ),\n        { persistenceGeneration }\n      );\n    } finally {\n      mutations.sessionStore.endPersistenceMutation();\n    }\n  };\n\n  const signInUsername = async (\n    input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const persistenceGeneration =\n      mutations.sessionStore.beginPersistenceMutation();\n    try {\n      return await mutations.applyAuthMutationToSessionStore(\n        await transport.postGeneric<AthenaAuthSignInResponse>(\n          \"/sign-in/username\",\n          input,\n          options\n        ),\n        { persistenceGeneration }\n      );\n    } finally {\n      mutations.sessionStore.endPersistenceMutation();\n    }\n  };\n\n  const signUpEmail = async (\n    input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const persistenceGeneration =\n      mutations.sessionStore.beginPersistenceMutation();\n    try {\n      return await mutations.applyAuthMutationToSessionStore(\n        await transport.postGeneric<AthenaAuthSignInResponse>(\n          \"/sign-up/email\",\n          input,\n          options\n        ),\n        { persistenceGeneration }\n      );\n    } finally {\n      mutations.sessionStore.endPersistenceMutation();\n    }\n  };\n\n  const updateUser = async (\n    input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    mutations.applyAuthMutationToSessionStore(\n      await transport.postGeneric<AthenaAuthStatusResponse>(\n        \"/update-user\",\n        input,\n        options\n      ),\n      { refreshIfMissing: true }\n    );\n\n  const deleteUser = async (\n    input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = transport.extractFetchOptions(input);\n    const mergedOptions = transport.mergeCallOptions(fetchOptions, options);\n    const result = await transport.callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: \"/delete-user\", method: \"POST\" },\n      payload ?? {},\n      undefined,\n      mergedOptions\n    );\n    if (result.ok && result.data?.success === true) {\n      await clearAfterConfirmedDeletion();\n    }\n    return result;\n  };\n\n  const deleteUserCallback = async (\n    input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = transport.extractFetchOptions(input);\n    const mergedOptions = transport.mergeCallOptions(fetchOptions, options);\n    const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest;\n    const result = await transport.callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: \"/delete-user/callback\", method: \"GET\" },\n      undefined,\n      {\n        callbackURL: query.callbackURL,\n        token: query.token,\n      },\n      mergedOptions\n    );\n    if (result.ok && result.data?.success === true) {\n      await mutations.refreshSessionStore();\n    }\n    return result;\n  };\n\n  const deleteUserVerify: InternalAthenaAuthModule[\"auth\"][\"deleteUserVerify\"] =\n    async (input, options) => {\n      const result =\n        await transport.getWithQuery<AthenaDeleteUserVerificationResponse>(\n          \"/delete-user/verify\",\n          { ...input, query: { token: input.query.token } },\n          options\n        );\n      if (result.ok && result.data?.success === true) {\n          await mutations.refreshSessionStore();\n      }\n      return result;\n    };\n\n  return {\n    deleteUser,\n    deleteUserCallback,\n    deleteUserVerify,\n    signInEmail,\n    signInUsername,\n    signUpEmail,\n    updateUser,\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;\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) ?? trimmedString(user?.name) ?? \"User\",\n      id: userId,\n      name: trimmedString(user?.name) ?? \"user\",\n    },\n  };\n  const hints = Array.isArray(options.hints)\n    ? options.hints.filter(\n        (entry): entry is string => typeof entry === \"string\"\n      )\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  authenticatorAttachment?: AuthenticatorAttachment;\n  id: string;\n  rawId: string;\n  response: {\n    authenticatorData: string;\n    clientDataJSON: string;\n    signature: string;\n    userHandle: string | null;\n  };\n  type: \"public-key\";\n}\n\nexport interface AthenaPasskeyRegistrationWire {\n  authenticatorAttachment?: AuthenticatorAttachment;\n  clientExtensionResults: {\n    credProps?: { rk: boolean };\n  };\n  id: string;\n  rawId: string;\n  response: {\n    attestationObject: string;\n    clientDataJSON: string;\n    transports?: string[];\n  };\n  type: \"public-key\";\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}\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 (!(AttestationCtor && credential.response instanceof AttestationCtor)) {\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    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    clientExtensionResults: registrationExtensionResults(credential),\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\n    response: {\n      attestationObject: toBase64Url(response.attestationObject),\n      clientDataJSON: toBase64Url(response.clientDataJSON),\n      ...(Array.isArray(transports) ? { transports } : {}),\n    },\n    type: \"public-key\",\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    authenticatorAttachment: authenticatorAttachmentOf(credential),\n    id: credential.id,\n    rawId: toBase64Url(credential.rawId),\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    type: \"public-key\",\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;\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 = \"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  [\n    {\n      aaguid: \"adce0002-35bc-c60a-648b-0b25b34bb543\",\n      displayName: \"Chrome on Mac\",\n      vendor: \"Google\",\n    },\n    {\n      aaguid: \"ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4\",\n      displayName: \"Google Password Manager\",\n      vendor: \"Google\",\n    },\n    {\n      aaguid: \"08987058-cadc-4b81-b6e1-30de50dcbe96\",\n      displayName: \"Windows Hello\",\n      vendor: \"Microsoft\",\n    },\n    {\n      aaguid: \"9ddd1817-af5a-4672-a2b9-3e3dd95000a9\",\n      displayName: \"Windows Hello\",\n      vendor: \"Microsoft\",\n    },\n    {\n      aaguid: \"dd4ec289-e01d-41c9-bb89-70fa845d4bf2\",\n      displayName: \"iCloud Keychain\",\n      vendor: \"Apple\",\n    },\n    {\n      aaguid: \"fbfc3007-154e-4ecc-8c0b-6e020557d7bd\",\n      displayName: \"iCloud Keychain\",\n      vendor: \"Apple\",\n    },\n    {\n      aaguid: \"cc4fb84c-2424-4c94-87ba-6767112e9012\",\n      displayName: \"MacBook Touch ID\",\n      model: \"Touch ID\",\n      vendor: \"Apple\",\n    },\n    {\n      aaguid: \"002ebc4f-5700-4f6b-b3d1-967ae1d7eab6\",\n      displayName: \"YubiKey\",\n      vendor: \"Yubico\",\n    },\n    {\n      aaguid: \"2fc0579f-8113-47ea-b116-bb5a8db9202a\",\n      displayName: \"YubiKey\",\n      vendor: \"Yubico\",\n    },\n    {\n      aaguid: \"bada5566-a7aa-401f-ad96-45686a11f038\",\n      displayName: \"1Password\",\n      vendor: \"1Password\",\n    },\n    {\n      aaguid: \"d548826e-79b4-db40-a3d8-11116f7e8349\",\n      displayName: \"Bitwarden\",\n      vendor: \"Bitwarden\",\n    },\n  ];\n\nconst BY_AAGUID = new Map(\n  ATHENA_AUTHENTICATOR_METADATA_CATALOG.map((entry) => [entry.aaguid, entry])\n);\n\nexport function lookupAuthenticatorMetadata(\n  aaguid: string | null | undefined\n): AthenaAuthenticatorMetadata | undefined {\n  if (!aaguid) {\n    return;\n  }\n  return BY_AAGUID.get(aaguid);\n}\n","import { lookupAuthenticatorMetadata } from \"./catalog.ts\";\nimport type {\n  AthenaPasskeyDisplayName,\n  AthenaPasskeyDisplayNameInput,\n} from \"./types.ts\";\n\nfunction hasText(value: string | null | undefined): value is string {\n  return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isUuidLike(value: string): boolean {\n  return /^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/i.test(\n    value.trim()\n  );\n}\n\nfunction looksLikeCredentialId(value: string): boolean {\n  const trimmed = value.trim();\n  if (isUuidLike(trimmed) && trimmed.length === 36) {\n    return true;\n  }\n  return trimmed.length >= 24 && /^[A-Za-z0-9_-]+$/.test(trimmed);\n}\n\nfunction discoverabilityFromResidentKey(\n  residentKey: boolean | null | undefined\n): AthenaPasskeyDisplayName[\"discoverability\"] {\n  if (residentKey === true) {\n    return \"discoverable\";\n  }\n  if (residentKey === false) {\n    return \"non-discoverable\";\n  }\n  return \"unknown\";\n}\n\nfunction platformOrSecurityKey(input: AthenaPasskeyDisplayNameInput): string {\n  const transports = input.transports ?? [];\n  const hasInternal = transports.includes(\"internal\");\n  const hasHybrid = transports.includes(\"hybrid\");\n  const hasUsb =\n    transports.includes(\"usb\") ||\n    transports.includes(\"nfc\") ||\n    transports.includes(\"ble\");\n  if (hasInternal && !hasUsb) {\n    return \"Platform passkey\";\n  }\n  if (hasUsb && !hasInternal) {\n    return \"Security key\";\n  }\n  if (hasHybrid) {\n    return \"Synced passkey\";\n  }\n  if (input.deviceType === \"multiDevice\" || input.backedUp) {\n    return \"Synced passkey\";\n  }\n  return \"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  input: AthenaPasskeyDisplayNameInput\n): AthenaPasskeyDisplayName {\n  const known = lookupAuthenticatorMetadata(input.aaguid ?? null);\n  const discoverability = discoverabilityFromResidentKey(input.residentKey);\n  if (hasText(input.name) && !looksLikeCredentialId(input.name)) {\n    return {\n      discoverability,\n      displayName: input.name.trim(),\n      model: known?.model,\n      vendor: known?.vendor,\n    };\n  }\n  if (known?.displayName) {\n    return {\n      discoverability,\n      displayName: known.displayName,\n      model: known.model,\n      vendor: known.vendor,\n    };\n  }\n  const className = platformOrSecurityKey(input);\n  return {\n    discoverability,\n    displayName: className,\n    model: known?.model,\n    vendor: known?.vendor,\n  };\n}\n","export {\n  ATHENA_AUTHENTICATOR_METADATA_CATALOG,\n  lookupAuthenticatorMetadata,\n} from \"./catalog.ts\";\nexport { resolvePasskeyAuthenticatorDisplay } from \"./resolve.ts\";\nexport type {\n  AthenaAuthenticatorMetadata,\n  AthenaPasskeyDiscoverability,\n  AthenaPasskeyDisplayName,\n  AthenaPasskeyDisplayNameInput,\n} from \"./types.ts\";\n","import type {\n  AthenaAuthCallOptions,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n  AthenaPasskeyAuthenticationOptions,\n  AthenaPasskeyDeviceType,\n  AthenaPasskeyRecord,\n  AthenaPasskeyRegistrationOptions,\n} from \"../types.ts\";\nimport { resolvePasskeyAuthenticatorDisplay } from \"./metadata/index.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 = (\n    payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n  )?.query;\n  if (!query || typeof query !== \"object\") {\n    return;\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;\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(nested?.transports ?? record.transports);\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  delete: {\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  listUser: {\n    gated: true,\n    method: \"GET\",\n    path: \"/passkey/list-user-passkeys\",\n  },\n  update: {\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 type { AthenaAuthCapabilitiesResult } from \"../capabilities.ts\";\nimport { denyPasskeys, gateCapability } from \"../client/capability-gates.ts\";\nimport { createAuthCompatibilityAlias } from \"../client/compatibility.ts\";\nimport type {\n  AthenaAuthCallOptions,\n  AthenaAuthEndpointPath,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthMethod,\n  AthenaAuthQueryPrimitive,\n  AthenaAuthQueryValue,\n  AthenaAuthResult,\n  AthenaAuthSessionResponse,\n  AthenaPasskeyDeleteResponse,\n  AthenaPasskeyOptionsResponse,\n  AthenaPasskeyRecord,\n  AthenaPasskeyRegisterRequest,\n  AthenaPasskeySignInRequest,\n  AthenaPasskeyUpdateResponse,\n  AthenaPasskeyVerifyAuthenticationResponse,\n} from \"../types.ts\";\nimport {\n  createPasskeyCredential,\n  creationOptionsFromWire,\n  getPasskeyCredential,\n  noAssertionDiagnostic,\n  requestOptionsFromWire,\n  serializeAssertedPasskey,\n  serializeCreatedPasskey,\n} from \"./browser/ceremony.ts\";\nimport type {\n  AthenaPasskeyBindings,\n  CreatePasskeyModuleDeps,\n  PasskeyModuleCapabilities,\n} from \"./contract.ts\";\nimport {\n  extractPasskeyFetchOptions,\n  extractPasskeyQuery,\n  mergePasskeyCallOptions,\n  normalizePasskeyRecord,\n  normalizePasskeyResult,\n} from \"./normalize.ts\";\nimport { PASSKEY_REQUESTS } from \"./requests.ts\";\n\nfunction resolveCapabilitiesSnapshot(\n  capabilities: PasskeyModuleCapabilities\n): AthenaAuthCapabilitiesResult {\n  if (\"getSnapshot\" in capabilities) {\n    return capabilities.getSnapshot();\n  }\n  return capabilities;\n}\n\nfunction asSessionResponse(value: unknown): AthenaAuthSessionResponse | null {\n  if (!value || typeof value !== \"object\") {\n    return null;\n  }\n  const record = value as Record<string, unknown>;\n  const session = record.session;\n  const user = record.user;\n  if (\n    !(\n      session &&\n      typeof session === \"object\" &&\n      typeof (session as { id?: unknown }).id === \"string\" &&\n      user &&\n      typeof user === \"object\" &&\n      typeof (user as { id?: unknown }).id === \"string\"\n    )\n  ) {\n    return null;\n  }\n  return {\n    grants: [],\n    rights: [],\n    session: session as AthenaAuthSessionResponse[\"session\"],\n    user: user as AthenaAuthSessionResponse[\"user\"],\n  };\n}\n\nfunction ceremonyFailed(\n  message: string,\n  endpoint: AthenaAuthEndpointPath,\n  method: AthenaAuthMethod = \"POST\"\n): AthenaAuthResult<never> {\n  return {\n    data: null,\n    error: message,\n    errorDetails: {\n      code: \"UNKNOWN_ERROR\",\n      endpoint,\n      message,\n      method,\n      status: 400,\n    },\n    ok: false,\n    raw: { error: { message, status: 400 } },\n    status: 400,\n  };\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction trimmedField(\n  record: Record<string, unknown> | undefined,\n  key: string\n): string | undefined {\n  const value = record?.[key];\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction isQueryPrimitive(value: unknown): value is AthenaAuthQueryPrimitive {\n  return (\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  );\n}\n\nfunction asQueryRecord(value: unknown): Record<string, AthenaAuthQueryValue> {\n  const record = asRecord(value);\n  if (!record) {\n    return {};\n  }\n  const query: Record<string, AthenaAuthQueryValue> = {};\n  for (const [key, entry] of Object.entries(record)) {\n    if (entry === null || entry === undefined) {\n      query[key] = entry;\n      continue;\n    }\n    if (isQueryPrimitive(entry)) {\n      query[key] = entry;\n      continue;\n    }\n    if (Array.isArray(entry) && entry.every(isQueryPrimitive)) {\n      query[key] = entry;\n    }\n  }\n  return 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  deps: CreatePasskeyModuleDeps\n): AthenaPasskeyBindings {\n  const {\n    capabilities,\n    request,\n    sessionController,\n    sessionMutations,\n  } = deps;\n\n  const acceptAuthenticationSession = async (\n    result: AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>,\n    persistenceGeneration?: number\n  ): Promise<void> => {\n    const session = asSessionResponse(result.data);\n    if (!session) {\n      return;\n    }\n    if (sessionMutations) {\n      await sessionMutations.applyAuthMutationToSessionStore({\n        ...result,\n        data: session,\n      }, {\n        persistenceGeneration,\n        refreshIfMissing: false,\n      });\n      return;\n    }\n    sessionController.accept(session);\n  };\n\n  const getPasskey = <T>(\n    path: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { fetchOptions } = extractPasskeyFetchOptions(input);\n    return request<T>(\n      {\n        endpoint: path,\n        fetchOptions,\n        method: \"GET\",\n        query: extractPasskeyQuery(input),\n      },\n      options\n    ).then(normalizePasskeyResult);\n  };\n\n  const postPasskey = <T>(\n    path: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      autoFill?: unknown;\n      email?: unknown;\n      name?: unknown;\n      query?: unknown;\n      response?: unknown;\n      userId?: unknown;\n    },\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n    return request<T>(\n      {\n        body: payload ?? {},\n        endpoint: path,\n        fetchOptions,\n        method: \"POST\",\n      },\n      mergePasskeyCallOptions(undefined, options)\n    ).then(normalizePasskeyResult);\n  };\n\n  const registerPasskey = async (\n    input?: AthenaPasskeyRegisterRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<AthenaPasskeyRecord>> => {\n    const denied = denyPasskeys(\n      resolveCapabilitiesSnapshot(capabilities),\n      PASSKEY_REQUESTS.generateRegisterOptions.path,\n      PASSKEY_REQUESTS.generateRegisterOptions.method\n    );\n    if (denied) {\n      return denied as AthenaAuthResult<AthenaPasskeyRecord>;\n    }\n    const { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n    const record = asRecord(payload);\n    const email = trimmedField(record, \"email\");\n    const name = trimmedField(record, \"name\");\n    const query: Record<string, AthenaAuthQueryValue> = asQueryRecord(\n      record?.query\n    );\n    if (email) {\n      query.email = email;\n    }\n    if (name) {\n      query.name = name;\n    }\n    const optionsResult = await getPasskey<AthenaPasskeyOptionsResponse>(\n      PASSKEY_REQUESTS.generateRegisterOptions.path,\n      {\n        ...(fetchOptions ? { fetchOptions } : {}),\n        ...(Object.keys(query).length > 0 ? { query } : {}),\n      },\n      options\n    );\n    if (!(optionsResult.ok && optionsResult.data)) {\n      return optionsResult as AthenaAuthResult<AthenaPasskeyRecord>;\n    }\n    let credential: Credential | null;\n    try {\n      const publicKey = creationOptionsFromWire(optionsResult.data, record);\n      credential = await createPasskeyCredential(\n        publicKey,\n        fetchOptions?.signal\n      );\n    } catch (error) {\n      const message =\n        error instanceof Error\n          ? error.message\n          : \"browser returned no assertion\";\n      return ceremonyFailed(\n        message,\n        PASSKEY_REQUESTS.verifyRegistration.path\n      ) as AthenaAuthResult<AthenaPasskeyRecord>;\n    }\n    if (!credential) {\n      return ceremonyFailed(\n        \"browser returned no assertion\",\n        PASSKEY_REQUESTS.verifyRegistration.path\n      ) as AthenaAuthResult<AthenaPasskeyRecord>;\n    }\n    return postPasskey<AthenaPasskeyRecord>(\n      PASSKEY_REQUESTS.verifyRegistration.path,\n      {\n        ...(email ? { email } : {}),\n        ...(fetchOptions ? { fetchOptions } : {}),\n        ...(name ? { name } : {}),\n        response: serializeCreatedPasskey(credential),\n      },\n      options\n    );\n  };\n\n  const signInPasskey = async (\n    input?: AthenaPasskeySignInRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>> => {\n    const denied = denyPasskeys(\n      resolveCapabilitiesSnapshot(capabilities),\n      PASSKEY_REQUESTS.generateAuthenticateOptions.path,\n      PASSKEY_REQUESTS.generateAuthenticateOptions.method\n    );\n    if (denied) {\n      return denied as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n    }\n    const persistenceGeneration =\n      sessionMutations?.sessionStore.beginPersistenceMutation();\n    try {\n      const { payload, fetchOptions } = extractPasskeyFetchOptions(input);\n        const record = asRecord(payload);\n        const email = trimmedField(record, \"email\");\n        const userId = trimmedField(record, \"userId\");\n        const autoFill = record?.autoFill === true;\n        const optionsResult = await postPasskey<AthenaPasskeyOptionsResponse>(\n          PASSKEY_REQUESTS.generateAuthenticateOptions.path,\n          {\n            ...(email ? { email } : {}),\n            ...(fetchOptions ? { fetchOptions } : {}),\n            ...(userId ? { userId } : {}),\n          },\n          options\n        );\n        if (!(optionsResult.ok && optionsResult.data)) {\n          return optionsResult as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n        }\n        const allowCredentials = optionsResult.data.allowCredentials ?? [];\n        let credential: Credential | null;\n        try {\n          credential = await getPasskeyCredential(\n            requestOptionsFromWire(optionsResult.data),\n            autoFill ? \"conditional\" : \"optional\",\n            fetchOptions?.signal\n          );\n        } catch (error) {\n          const message =\n            error instanceof Error\n              ? error.message\n              : noAssertionDiagnostic({\n                  allowCredentialsCount: allowCredentials.length,\n                  residentKey: null,\n                });\n          return ceremonyFailed(\n            message,\n            PASSKEY_REQUESTS.verifyAuthentication.path\n          ) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n        }\n        if (!credential) {\n          return ceremonyFailed(\n            noAssertionDiagnostic({\n              allowCredentialsCount: allowCredentials.length,\n              residentKey: null,\n            }),\n            PASSKEY_REQUESTS.verifyAuthentication.path\n          ) as AthenaAuthResult<AthenaPasskeyVerifyAuthenticationResponse>;\n        }\n        const result = await postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n          PASSKEY_REQUESTS.verifyAuthentication.path,\n          {\n            ...(fetchOptions ? { fetchOptions } : {}),\n            response: serializeAssertedPasskey(credential),\n          },\n          options\n        );\n        if (result.ok) {\n          await acceptAuthenticationSession(result, persistenceGeneration);\n        }\n      return result;\n    } finally {\n      sessionMutations?.sessionStore.endPersistenceMutation();\n    }\n  };\n\n  const deletePasskey = (\n    input: Parameters<AthenaPasskeyBindings[\"delete\"]>[0],\n    options: Parameters<AthenaPasskeyBindings[\"delete\"]>[1]\n  ) =>\n    gateCapability(\n      denyPasskeys(\n        resolveCapabilitiesSnapshot(capabilities),\n        PASSKEY_REQUESTS.delete.path,\n        PASSKEY_REQUESTS.delete.method\n      ),\n      () =>\n        postPasskey<AthenaPasskeyDeleteResponse>(\n          PASSKEY_REQUESTS.delete.path,\n          input,\n          options\n        )\n    );\n  const listUser = (\n    input: Parameters<AthenaPasskeyBindings[\"listUser\"]>[0],\n    options: Parameters<AthenaPasskeyBindings[\"listUser\"]>[1]\n  ) =>\n    gateCapability(\n      denyPasskeys(\n        resolveCapabilitiesSnapshot(capabilities),\n        PASSKEY_REQUESTS.listUser.path,\n        PASSKEY_REQUESTS.listUser.method\n      ),\n      () =>\n        getPasskey<AthenaPasskeyRecord[]>(\n          PASSKEY_REQUESTS.listUser.path,\n          input,\n          options\n        ).then((result) => {\n          if (result.ok && Array.isArray(result.data)) {\n            return {\n              ...result,\n              data: result.data.map((row) =>\n                normalizePasskeyRecord(row as AthenaPasskeyRecord)\n              ),\n            };\n          }\n          return result;\n        })\n    );\n  const update = (\n    input: Parameters<AthenaPasskeyBindings[\"update\"]>[0],\n    options: Parameters<AthenaPasskeyBindings[\"update\"]>[1]\n  ) =>\n    gateCapability(\n      denyPasskeys(\n        resolveCapabilitiesSnapshot(capabilities),\n        PASSKEY_REQUESTS.update.path,\n        PASSKEY_REQUESTS.update.method\n      ),\n      () =>\n        postPasskey<AthenaPasskeyUpdateResponse>(\n          PASSKEY_REQUESTS.update.path,\n          input,\n          options\n        )\n    );\n  const aliasOwner = Object.create(null) as object;\n  const listUserPasskeys = createAuthCompatibilityAlias(\n    aliasOwner,\n    \"passkey.listUserPasskeys\",\n    \"passkey.listUser\",\n    listUser,\n    { warn: deps.warnOnCompatibilityAlias }\n  );\n  const updatePasskey = createAuthCompatibilityAlias(\n    aliasOwner,\n    \"passkey.updatePasskey\",\n    \"passkey.update\",\n    update,\n    { warn: deps.warnOnCompatibilityAlias }\n  );\n  const deletePasskeyAlias = createAuthCompatibilityAlias(\n    aliasOwner,\n    \"passkey.deletePasskey\",\n    \"passkey.delete\",\n    deletePasskey,\n    { warn: deps.warnOnCompatibilityAlias }\n  );\n\n  type DeprecatedPasskeyAlias =\n    | \"deletePasskey\"\n    | \"listUserPasskeys\"\n    | \"updatePasskey\";\n\n  const bindings: Omit<AthenaPasskeyBindings, DeprecatedPasskeyAlias> = {\n    delete: deletePasskey,\n    generateAuthenticateOptions: (input, options) =>\n      gateCapability(\n        denyPasskeys(\n          resolveCapabilitiesSnapshot(capabilities),\n          PASSKEY_REQUESTS.generateAuthenticateOptions.path,\n          PASSKEY_REQUESTS.generateAuthenticateOptions.method\n        ),\n        () =>\n          postPasskey(\n            PASSKEY_REQUESTS.generateAuthenticateOptions.path,\n            input,\n            options\n          )\n      ),\n    generateRegisterOptions: (input, options) =>\n      gateCapability(\n        denyPasskeys(\n          resolveCapabilitiesSnapshot(capabilities),\n          PASSKEY_REQUESTS.generateRegisterOptions.path,\n          PASSKEY_REQUESTS.generateRegisterOptions.method\n        ),\n        () =>\n          getPasskey(\n            PASSKEY_REQUESTS.generateRegisterOptions.path,\n            input,\n            options\n          )\n      ),\n    getRelatedOrigins: (input, options) =>\n      getPasskey(PASSKEY_REQUESTS.getRelatedOrigins.path, input, options),\n    listUser,\n    register: (input, options) => registerPasskey(input, options),\n    signIn: (input, options) => signInPasskey(input, options),\n    update,\n    verifyAuthentication: (input, options) =>\n      gateCapability(\n        denyPasskeys(\n          resolveCapabilitiesSnapshot(capabilities),\n          PASSKEY_REQUESTS.verifyAuthentication.path,\n          PASSKEY_REQUESTS.verifyAuthentication.method\n        ),\n        async () => {\n          const persistenceGeneration =\n            sessionMutations?.sessionStore.beginPersistenceMutation();\n          try {\n            const result =\n              await postPasskey<AthenaPasskeyVerifyAuthenticationResponse>(\n                PASSKEY_REQUESTS.verifyAuthentication.path,\n                input,\n                options\n              );\n            if (result.ok) {\n              await acceptAuthenticationSession(result, persistenceGeneration);\n            }\n            return result;\n          } finally {\n            sessionMutations?.sessionStore.endPersistenceMutation();\n          }\n        }\n      ),\n    verifyRegistration: (input, options) =>\n      gateCapability(\n        denyPasskeys(\n          resolveCapabilitiesSnapshot(capabilities),\n          PASSKEY_REQUESTS.verifyRegistration.path,\n          PASSKEY_REQUESTS.verifyRegistration.method\n        ),\n        () =>\n          postPasskey(PASSKEY_REQUESTS.verifyRegistration.path, input, options)\n      ),\n  };\n\n  Object.defineProperties(bindings, {\n    deletePasskey: {\n      configurable: true,\n      enumerable: false,\n      value: deletePasskeyAlias,\n      writable: true,\n    },\n    listUserPasskeys: {\n      configurable: true,\n      enumerable: false,\n      value: listUserPasskeys,\n      writable: true,\n    },\n    updatePasskey: {\n      configurable: true,\n      enumerable: false,\n      value: updatePasskey,\n      writable: true,\n    },\n  });\n  return bindings as AthenaPasskeyBindings;\n}\n","import type { AthenaAuthErrorDetails } from \"./types.ts\";\n\nexport type AthenaSessionErrorCode =\n  | \"ATHENA_SESSION_UNAUTHENTICATED\"\n  | \"ATHENA_SESSION_UPSTREAM\"\n  | \"ATHENA_SESSION_CONFIGURATION\"\n  | \"ATHENA_SESSION_PROTOCOL\"\n  | \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\";\n\nexport interface AthenaSessionErrorContext {\n  cause?: unknown;\n  code?: AthenaSessionErrorCode;\n  details?: AthenaAuthErrorDetails | null;\n  message?: string;\n  requestId?: string;\n  retryable?: boolean;\n  status?: number;\n}\n\n/**\n * Base error for Next/server session helpers (`require*`, `OrNull` throws).\n */\nexport abstract class AthenaSessionError extends Error {\n  readonly code: AthenaSessionErrorCode | string;\n  readonly details?: AthenaAuthErrorDetails | null;\n  readonly requestId?: string;\n  readonly retryable: boolean;\n  readonly status?: number;\n\n  constructor(message: string, context: AthenaSessionErrorContext = {}) {\n    super(\n      message,\n      context.cause === undefined ? undefined : { cause: context.cause }\n    );\n    this.name = new.target.name;\n    this.code = context.code ?? \"ATHENA_SESSION_UPSTREAM\";\n    this.status = context.status ?? context.details?.status;\n    this.requestId = context.requestId ?? context.details?.requestId;\n    this.details = context.details ?? null;\n    this.retryable = context.retryable ?? false;\n  }\n}\n\nexport class AthenaUnauthenticatedError extends AthenaSessionError {\n  constructor(\n    message = \"Not authenticated\",\n    context: AthenaSessionErrorContext = {}\n  ) {\n    super(message, {\n      ...context,\n      code: \"ATHENA_SESSION_UNAUTHENTICATED\",\n      retryable: false,\n      status: context.status ?? 401,\n    });\n    this.name = \"AthenaUnauthenticatedError\";\n  }\n}\n\nexport class AthenaAuthUpstreamError extends AthenaSessionError {\n  constructor(\n    message = \"Auth upstream failure\",\n    context: AthenaSessionErrorContext = {}\n  ) {\n    const status = context.status ?? context.details?.status;\n    const retryable =\n      context.retryable ??\n      (status === undefined || status === 0 || status >= 500 || status === 429);\n    super(message, {\n      ...context,\n      code: context.code ?? \"ATHENA_SESSION_UPSTREAM\",\n      retryable,\n      status,\n    });\n    this.name = \"AthenaAuthUpstreamError\";\n  }\n}\n\nexport class AthenaAuthConfigurationError extends AthenaSessionError {\n  constructor(\n    message = \"Session configuration error\",\n    context: AthenaSessionErrorContext = {}\n  ) {\n    super(message, {\n      ...context,\n      code: \"ATHENA_SESSION_CONFIGURATION\",\n      retryable: false,\n    });\n    this.name = \"AthenaAuthConfigurationError\";\n  }\n}\n\nexport class AthenaAuthProtocolError extends AthenaSessionError {\n  constructor(\n    message = \"Malformed session payload\",\n    context: AthenaSessionErrorContext = {}\n  ) {\n    super(message, {\n      ...context,\n      code: \"ATHENA_SESSION_PROTOCOL\",\n      retryable: false,\n      status: context.status ?? context.details?.status ?? 502,\n    });\n    this.name = \"AthenaAuthProtocolError\";\n  }\n}\n\nexport class AthenaSessionOrganizationError extends AthenaSessionError {\n  constructor(\n    message = \"No accessible organization\",\n    context: AthenaSessionErrorContext = {}\n  ) {\n    super(message, {\n      ...context,\n      code: \"ATHENA_SESSION_NO_ACCESSIBLE_ORGANIZATION\",\n      retryable: false,\n    });\n    this.name = \"AthenaSessionOrganizationError\";\n  }\n}\n\nexport type ToAthenaSessionErrorKind =\n  | \"unauthenticated\"\n  | \"upstream\"\n  | \"configuration\"\n  | \"protocol\"\n  | \"no_organization\";\n\n/**\n * Single conversion path from auth error details / context into thrown session errors.\n */\nexport function toAthenaSessionError(\n  kind: ToAthenaSessionErrorKind,\n  context: AthenaSessionErrorContext = {}\n): AthenaSessionError {\n  const message =\n    context.message ??\n    context.details?.message ??\n    (kind === \"unauthenticated\"\n      ? \"Not authenticated\"\n      : kind === \"configuration\"\n        ? \"Session configuration error\"\n        : kind === \"protocol\"\n          ? \"Malformed session payload\"\n          : kind === \"no_organization\"\n            ? \"No accessible organization\"\n            : \"Auth upstream failure\");\n\n  switch (kind) {\n    case \"unauthenticated\":\n      return new AthenaUnauthenticatedError(message, context);\n    case \"configuration\":\n      return new AthenaAuthConfigurationError(message, context);\n    case \"protocol\":\n      return new AthenaAuthProtocolError(message, context);\n    case \"no_organization\":\n      return new AthenaSessionOrganizationError(message, context);\n    default:\n      return new AthenaAuthUpstreamError(message, context);\n  }\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  if (error == null) {\n    return false;\n  }\n  if (typeof error === \"string\") {\n    return ABORT_MESSAGE.test(error);\n  }\n  if (typeof error !== \"object\") {\n    return false;\n  }\n  const name = (error as { name?: string }).name;\n  if (name === \"AbortError\" || name === \"TimeoutError\") {\n    return true;\n  }\n  const message = (error as { message?: string }).message ?? \"\";\n  return 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  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  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  setError(error: unknown): void;\n  setSession(\n    session: TSession | null,\n    status?: Exclude<AthenaAuthSessionStatus, \"loading\" | \"unknown\">\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    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    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:\n          reason === \"signOut\" || reason === \"revoke\"\n            ? \"unauthenticated\"\n            : \"unauthenticated\",\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    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    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  createAuthSessionPersistenceAuthority,\n  type InternalAuthSessionPersistence,\n  type InternalAuthSessionPersistenceAuthority,\n} from \"./client/session-persistence.ts\";\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  beginPersistenceMutation(): number;\n  endPersistenceMutation(): void;\n  beginRefresh(): { epoch: number; skipped: boolean };\n  clearPersistedSession(): Promise<void>;\n  clearPersistedSessionAtGeneration(generation: number): Promise<void>;\n  clearPersistedSessionForRefresh(epoch: number): Promise<void>;\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  getPersistenceGeneration(): number;\n  getSnapshot(): AthenaAuthSessionSnapshot<TSession>;\n  hydrate(state: AthenaInitialAuthState<TSession>): boolean;\n  invalidate(reason?: AthenaAuthSessionInvalidateReason): number;\n  isSignOutInvalidationActive(): boolean;\n  isPersistenceGenerationCurrent(generation: number): boolean;\n  persistSessionToken(token: string): Promise<void>;\n  persistSessionTokenAtGeneration(\n    token: string,\n    generation: number\n  ): Promise<void>;\n  persistSessionTokenForRefresh(epoch: number, token: string): Promise<void>;\n  releaseInvalidation(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  /** Underlying store — tests / advanced adapters only. */\n  readonly store: AthenaAuthSessionStore<TSession>;\n  subscribe(\n    listener: (snapshot: AthenaAuthSessionSnapshot<TSession>) => void\n  ): () => void;\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<TSession = unknown>(\n  input: {\n    sessionPersistence?: InternalAuthSessionPersistence;\n    sessionPersistenceAuthority?: InternalAuthSessionPersistenceAuthority;\n  } = {}\n): AthenaAuthSessionController<TSession> {\n  const store = createAthenaAuthSessionStore<TSession>();\n  const persistence: InternalAuthSessionPersistenceAuthority | undefined =\n    input.sessionPersistenceAuthority ??\n    createAuthSessionPersistenceAuthority(input.sessionPersistence);\n  const refreshGenerations = new Map<number, number>();\n  let activeSignOutInvalidations = 0;\n\n  return {\n    accept(session, status) {\n      persistence?.advanceGeneration();\n      store.setSession(session, status);\n    },\n    beginPersistenceMutation() {\n      persistence?.beginAuthMutation();\n      persistence?.advanceGeneration();\n      return persistence?.getGeneration() ?? 0;\n    },\n    endPersistenceMutation() {\n      persistence?.endAuthMutation();\n    },\n    beginRefresh() {\n      if (\n        activeSignOutInvalidations > 0 ||\n        persistence?.hasActiveSignOutInvalidations() === true\n      ) {\n        return { epoch: store.getSnapshot().epoch, skipped: true };\n      }\n      const result = store.beginRefresh();\n      if (!result.skipped) {\n        refreshGenerations.set(result.epoch, persistence?.getGeneration() ?? 0);\n      }\n      return result;\n    },\n    clearPersistedSession() {\n      return persistence?.clearSession() ?? Promise.resolve();\n    },\n    clearPersistedSessionAtGeneration(generation) {\n      return (\n        persistence?.clearSessionAtGeneration(generation) ?? Promise.resolve()\n      );\n    },\n    clearPersistedSessionForRefresh(epoch) {\n      const generation = refreshGenerations.get(epoch);\n      return generation === undefined\n        ? Promise.resolve()\n        : (persistence?.clearSessionAtGeneration(generation) ??\n            Promise.resolve());\n    },\n    completeRefresh(epoch, result) {\n      const previousEpoch = store.getSnapshot().epoch;\n      const refreshGeneration = refreshGenerations.get(epoch);\n      store.completeRefresh(epoch, result);\n      refreshGenerations.delete(epoch);\n      if (\n        store.getSnapshot().epoch !== previousEpoch &&\n        refreshGeneration !== undefined &&\n        persistence?.hasActiveAuthMutations() !== true &&\n        (persistence?.getGeneration() ?? 0) === refreshGeneration\n      ) {\n        persistence?.advanceGeneration();\n      }\n    },\n    get: () => store.getSnapshot().session,\n    getPersistenceGeneration() {\n      return persistence?.getGeneration() ?? 0;\n    },\n    getSnapshot: () => store.getSnapshot(),\n    hydrate(state) {\n      return store.hydrate(state);\n    },\n    invalidate(reason) {\n      if (reason === \"signOut\") {\n        if (persistence) {\n          persistence.beginSignOutInvalidation();\n        } else {\n          activeSignOutInvalidations += 1;\n        }\n      }\n      persistence?.advanceGeneration();\n      store.invalidate(reason);\n      return persistence?.getGeneration() ?? 0;\n    },\n    isSignOutInvalidationActive() {\n      return (\n        activeSignOutInvalidations > 0 ||\n        persistence?.hasActiveSignOutInvalidations() === true\n      );\n    },\n    isPersistenceGenerationCurrent(generation) {\n      return (persistence?.getGeneration() ?? 0) === generation;\n    },\n    persistSessionToken(token) {\n      return persistence?.persistSessionToken(token) ?? Promise.resolve();\n    },\n    persistSessionTokenAtGeneration(token, generation) {\n      return (\n        persistence?.persistSessionTokenAtGeneration(token, generation) ??\n        Promise.resolve()\n      );\n    },\n    persistSessionTokenForRefresh(epoch, token) {\n      const generation = refreshGenerations.get(epoch);\n      return generation === undefined\n        ? Promise.resolve()\n        : (persistence?.persistSessionTokenAtGeneration(token, generation) ??\n            Promise.resolve());\n    },\n    releaseInvalidation(reason) {\n      if (reason === undefined || reason === \"signOut\") {\n        if (persistence) {\n          persistence.releaseSignOutInvalidation();\n        } else {\n          activeSignOutInvalidations = Math.max(\n            0,\n            activeSignOutInvalidations - 1\n          );\n        }\n      }\n    },\n    setError(error) {\n      store.setError(error);\n    },\n    setSession(session, status) {\n      persistence?.advanceGeneration();\n      store.setSession(session, status);\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    store,\n    subscribe: (listener) => store.subscribe(listener),\n  };\n}\n","import { createAuthorizationModule } from \"./authorization/client-module.ts\";\nimport { createAthenaAuthCapabilitiesStore } from \"./capabilities.ts\";\nimport { createAccountClientModule } from \"./client/accounts.ts\";\nimport { createAdminClientModule } from \"./client/admin.ts\";\nimport { createApiKeyClientModule } from \"./client/api-keys.ts\";\nimport { createCapabilityGates } from \"./client/capability-gates.ts\";\nimport { attachAuthCompatibilityAliases } from \"./client/compatibility.ts\";\nimport { createEmailClientModule } from \"./client/email.ts\";\nimport { createOrganizationClientModule } from \"./client/organization.ts\";\nimport { createPasswordClientModule } from \"./client/password.ts\";\nimport { createAuthSessionMutations } from \"./client/session-mutations.ts\";\nimport { createAuthSessionClientModule } from \"./client/sessions.ts\";\nimport { createSocialClientModule } from \"./client/social.ts\";\nimport {\n  ATHENA_AUTH_BIND_BASE_URL,\n  bindAthenaAuthClientBaseUrl,\n  createAuthTransport,\n  type InternalAuthModuleRuntimeOptions,\n} from \"./client/transport.ts\";\nimport { createTwoFactorClientModule } from \"./client/two-factor.ts\";\nimport { createUserClientModule } from \"./client/user.ts\";\nimport { createPasskeyModule } from \"./passkey/client-module.ts\";\nimport { createAthenaAuthSessionController } from \"./session-controller.ts\";\nimport type {\n  AthenaAuthBindings,\n  AthenaAuthClientConfig,\n  AthenaAuthSessionResponse,\n  InternalAthenaAuthModule,\n} from \"./types.ts\";\n\nexport type { InternalAuthModuleRuntimeOptions } from \"./client/transport.ts\";\nexport { bindAthenaAuthClientBaseUrl };\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n  config: AthenaAuthClientConfig = {},\n  runtimeOptions: InternalAuthModuleRuntimeOptions = {}\n): InternalAthenaAuthModule {\n  const transport = createAuthTransport(config, runtimeOptions);\n  const sessionStore =\n    createAthenaAuthSessionController<AthenaAuthSessionResponse>({\n      sessionPersistence: runtimeOptions.sessionPersistence,\n      sessionPersistenceAuthority: runtimeOptions.sessionPersistenceAuthority,\n    });\n  const capabilitiesStore = createAthenaAuthCapabilitiesStore(\n    config.capabilities\n  );\n  const gates = createCapabilityGates(capabilitiesStore);\n  const mutations = createAuthSessionMutations({\n    sessionStore,\n    transport,\n  });\n  const sessions = createAuthSessionClientModule({\n    mutations,\n    sessionStore,\n    transport,\n  });\n  const user = createUserClientModule({ mutations, transport });\n  const password = createPasswordClientModule({ transport });\n  const email = createEmailClientModule({ transport });\n  const social = createSocialClientModule({ gates, mutations, transport });\n  const account = createAccountClientModule({ gates, transport });\n  const organization = createOrganizationClientModule({\n    mutations,\n    requirePermission: sessions.requirePermission,\n    transport,\n  });\n  const { apiKey } = createApiKeyClientModule({ transport });\n  const { twoFactor } = createTwoFactorClientModule({ transport });\n  const { admin } = createAdminClientModule({\n    requirePermission: sessions.requirePermission,\n    transport,\n  });\n  const authorization = createAuthorizationModule(transport.request);\n  const passkey = createPasskeyModule({\n    capabilities: capabilitiesStore,\n    request: transport.request,\n    sessionController: sessionStore,\n    sessionMutations: mutations,\n    warnOnCompatibilityAlias: runtimeOptions.compatibilityWarnings,\n  });\n  const emailChange = Object.assign(email.changeEmail, {\n    verify: email.changeEmailVerify,\n  });\n  const userDelete = Object.assign(user.deleteUser, {\n    callback: user.deleteUserCallback,\n    verify: user.deleteUserVerify,\n  });\n\n  const auth: AthenaAuthBindings = {\n    account: {\n      list: account.list,\n      unlink: account.unlink,\n    },\n    admin,\n    apiKey,\n    authorization,\n    callback: {\n      provider: social.callbackProvider,\n    },\n    capabilities: {\n      get: capabilitiesStore.get,\n      getSnapshot: capabilitiesStore.getSnapshot,\n      markUnknown: (source) => capabilitiesStore.markUnknown(source),\n      merge: (patch, meta) => capabilitiesStore.merge(patch, meta),\n      set: (next) => capabilitiesStore.set(next),\n      subscribe: (listener) => capabilitiesStore.subscribe(listener),\n    },\n    changeEmail: email.changeEmail,\n    changeEmailVerify: email.changeEmailVerify,\n    changePassword: password.changePassword,\n    deleteUser: {\n      callback: user.deleteUserCallback,\n    },\n    deleteUserVerify: user.deleteUserVerify,\n    error: sessions.error,\n    email: {\n      change: emailChange,\n    },\n    forgetPassword: password.forgetPassword,\n    getAccessToken: account.getAccessToken,\n    getSession: sessions.getSession,\n    getToken: account.getToken,\n    getUser: sessions.getUser,\n    health: sessions.health,\n    linkSocial: social.link,\n    listAccounts: account.list,\n    listSessions: sessions.listSessions,\n    ok: sessions.ok,\n    organization,\n    passkey,\n    refreshToken: account.refreshToken,\n    requireSession: sessions.requireSession,\n    resetPassword: password.resetPassword,\n    revokeOtherSessions: sessions.revokeOtherSessions,\n    revokeSession: sessions.sessionRevokeBinding,\n    sendVerificationEmail: email.sendVerificationEmail,\n    session: sessions.session,\n    setPassword: password.setPassword,\n    signIn: {\n      email: user.signInEmail,\n      social: social.signIn,\n      username: user.signInUsername,\n    },\n    signOut: sessions.signOut,\n    signUp: {\n      email: user.signUpEmail,\n    },\n    social: {\n      link: social.link,\n      signIn: social.signIn,\n    },\n    tokenProvider: account.tokenProvider,\n    twoFactor,\n    unlinkAccount: account.unlink,\n    updateUser: user.updateUser,\n    user: {\n      delete: userDelete,\n      email: {\n        list: email.listUserEmails,\n      },\n      update: user.updateUser,\n    },\n    verificationEmail: {\n      send: email.sendVerificationEmail,\n      verify: email.verifyEmail,\n    },\n    verifyEmail: email.verifyEmail,\n  };\n\n  Object.defineProperty(auth, ATHENA_AUTH_BIND_BASE_URL, {\n    configurable: true,\n    enumerable: false,\n    value: (baseUrl: string) => {\n      transport.bindBaseUrl(baseUrl);\n    },\n  });\n\n  return attachAuthCompatibilityAliases({\n    auth,\n    baseUrl: transport.resolvedConfig.baseUrl ?? \"\",\n    warnOnCompatibilityAlias: runtimeOptions.compatibilityWarnings,\n    request: transport.request,\n    resolveResetPasswordToken: password.resolveResetPasswordToken,\n    revokeSession: sessions.revokeSession,\n    revokeSessions: sessions.revokeSessions,\n  });\n}\n","export class AthenaChatError extends Error {\n  code?: string;\n  errorNumber?: number;\n  status: number;\n  endpoint: string;\n  method: string;\n  requestId?: string;\n  body: unknown;\n\n  constructor(input: {\n    message: string;\n    status: number;\n    endpoint: string;\n    method: string;\n    requestId?: string;\n    body: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AthenaChatError\";\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.body = input.body;\n    if (isRecord(input.body)) {\n      if (typeof input.body.code === \"string\") {\n        this.code = input.body.code;\n      }\n      const errorNumber = input.body.error_number ?? input.body.errorNumber;\n      if (typeof errorNumber === \"number\" && Number.isFinite(errorNumber)) {\n        this.errorNumber = errorNumber;\n      }\n    }\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type { AthenaChatCapabilities } from \"./types.ts\";\n\n/** Local Chat: in-process committed domain events, not cross-process WSS. */\nexport const LOCAL_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n  realtime: Object.freeze({\n    crossProcess: false,\n    messageDeletes: true,\n    messages: true,\n    messageUpdates: true,\n    presence: false,\n    reactions: true,\n    replayPersisted: false,\n    resumable: true,\n    typing: false,\n    websocket: false,\n  }),\n  transport: \"local\",\n});\n\nexport const REMOTE_CHAT_CAPABILITIES: AthenaChatCapabilities = Object.freeze({\n  realtime: Object.freeze({\n    crossProcess: true,\n    messageDeletes: true,\n    messages: true,\n    messageUpdates: true,\n    presence: true,\n    reactions: true,\n    replayPersisted: true,\n    resumable: true,\n    typing: true,\n    websocket: true,\n  }),\n  transport: \"remote\",\n});\n","import type {\n  AthenaChatRealtimeConnection,\n  AthenaChatRealtimeSession,\n  AthenaChatRealtimeSessionOptions,\n  AthenaChatRealtimeSessionState,\n} from \"../types.ts\";\n\ninterface SessionTransport {\n  open: (\n    onEvent: (event: Parameters<\n      NonNullable<AthenaChatRealtimeSessionOptions[\"onEvent\"]>\n    >[0]) => void,\n    onClose: () => void,\n    onOpen: () => void\n  ) => AthenaChatRealtimeConnection;\n  authorize?: (roomId: string) => Promise<void>;\n  readonly local: boolean;\n}\n\nfunction roomIdOf(event: unknown): string | undefined {\n  if (!event || typeof event !== \"object\") {\n    return;\n  }\n  const record = event as Record<string, unknown>;\n  return typeof record.room_id === \"string\" ? record.room_id : undefined;\n}\n\nfunction roomSeqOf(event: unknown): number | undefined {\n  if (!event || typeof event !== \"object\") {\n    return;\n  }\n  const record = event as Record<string, unknown>;\n  if (typeof record.room_seq === \"number\") {\n    return record.room_seq;\n  }\n  if (typeof record.seq === \"number\") {\n    return record.seq;\n  }\n  const message = record.message;\n  if (\n    message &&\n    typeof message === \"object\" &&\n    typeof (message as { room_seq?: unknown }).room_seq === \"number\"\n  ) {\n    return (message as { room_seq: number }).room_seq;\n  }\n  return undefined;\n}\n\nfunction delayForAttempt(\n  attempt: number,\n  options: AthenaChatRealtimeSessionOptions\n): number {\n  const base = options.reconnect?.baseDelayMs ?? 250;\n  const maximum = options.reconnect?.maxDelayMs ?? 10_000;\n  const jitter = options.reconnect?.jitter ?? 0.2;\n  const spread =\n    typeof jitter === \"function\"\n      ? jitter(attempt)\n      : (Math.random() * 2 - 1) * Math.max(0, jitter);\n  const multiplier = Math.max(0, 1 + Math.min(1, spread));\n  return Math.min(maximum, Math.round(base * 2 ** attempt * multiplier));\n}\n\nexport function createChatRealtimeSession(\n  transport: SessionTransport,\n  options: AthenaChatRealtimeSessionOptions = {}\n): AthenaChatRealtimeSession {\n  let connection: AthenaChatRealtimeConnection | null = null;\n  let state: AthenaChatRealtimeSessionState = \"idle\";\n  let stopped = false;\n  let reconnectAttempt = 0;\n  let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n  const subscriptions = new Map<string, number>();\n  const lastObserved = new Map<string, number>();\n  const observedEventIds = new Set<string>();\n\n  const emitState = (next: AthenaChatRealtimeSessionState): void => {\n    state = next;\n    options.onStateChange?.(next);\n  };\n\n  const clearReconnectTimer = (): void => {\n    if (reconnectTimer !== undefined) {\n      clearTimeout(reconnectTimer);\n      reconnectTimer = undefined;\n    }\n  };\n\n  const scheduleReconnect = (): void => {\n    if (stopped || transport.local || reconnectTimer !== undefined) {\n      return;\n    }\n    emitState(\"reconnecting\");\n    const delay = delayForAttempt(reconnectAttempt, options);\n    reconnectAttempt += 1;\n    reconnectTimer = setTimeout(() => {\n      reconnectTimer = undefined;\n      if (!stopped) {\n        start();\n      }\n    }, delay);\n  };\n\n  const onEvent = (event: Parameters<\n    NonNullable<AthenaChatRealtimeSessionOptions[\"onEvent\"]>\n  >[0]): void => {\n    const eventId =\n      event && typeof event === \"object\" && \"event_id\" in event\n        ? String((event as { event_id?: unknown }).event_id ?? \"\")\n        : \"\";\n    if (eventId) {\n      if (observedEventIds.has(eventId)) {\n        return;\n      }\n      observedEventIds.add(eventId);\n    }\n    const roomId = roomIdOf(event);\n    const roomSeq = roomSeqOf(event);\n    if (roomId && roomSeq !== undefined) {\n      const previous = lastObserved.get(roomId);\n      if (previous !== undefined && roomSeq < previous) {\n        return;\n      }\n      if (\n        previous !== undefined &&\n        roomSeq > previous + 1 &&\n        options.onSyncRequired\n      ) {\n        options.onSyncRequired({\n          expectedFromSeq: previous + 1,\n          reason: \"sequence_gap\",\n          roomId,\n        });\n      }\n      lastObserved.set(roomId, Math.max(previous ?? 0, roomSeq));\n      subscriptions.set(\n        roomId,\n        Math.max(subscriptions.get(roomId) ?? 0, roomSeq)\n      );\n    }\n    if (\n      event &&\n      typeof event === \"object\" &&\n      \"type\" in event &&\n      (event as { type?: unknown }).type === \"chat.sync.required\"\n    ) {\n      const record = event as {\n        expected_from_seq?: number | null;\n        reason?: string | null;\n        room_id?: string | null;\n      };\n      options.onSyncRequired?.({\n        ...(record.expected_from_seq != null\n          ? { expectedFromSeq: record.expected_from_seq }\n          : {}),\n        reason: record.reason ?? \"server_requested_sync\",\n        roomId: record.room_id ?? undefined,\n      });\n    }\n    options.onEvent?.(event);\n  };\n\n  const connect = (): void => {\n    if (stopped) {\n      return;\n    }\n    emitState(\"connecting\");\n    connection = transport.open(\n      onEvent,\n      () => {\n        connection = null;\n        if (!stopped) {\n          scheduleReconnect();\n        }\n      },\n      () => {\n        reconnectAttempt = 0;\n        emitState(\"connected\");\n        if (subscriptions.size > 0) {\n          connection?.resume(\n            [...subscriptions].map(([room_id, last_seq]) => ({\n              last_seq,\n              room_id,\n            }))\n          );\n        }\n      }\n    );\n    if (transport.local) {\n      emitState(\"connected\");\n      if (subscriptions.size > 0) {\n        connection.resume(\n          [...subscriptions].map(([room_id, last_seq]) => ({\n            last_seq,\n            room_id,\n          }))\n        );\n      }\n    }\n  };\n\n  function start(): void {\n    if (stopped || state === \"connected\" || state === \"connecting\") {\n      return;\n    }\n    clearReconnectTimer();\n    connect();\n  }\n\n  return {\n    get state() {\n      return state;\n    },\n    start,\n    stop() {\n      stopped = true;\n      clearReconnectTimer();\n      connection?.close();\n      connection = null;\n      emitState(\"closed\");\n    },\n    async subscribe(roomId, subscribeOptions): Promise<void> {\n      await transport.authorize?.(roomId);\n      const afterSeq = subscribeOptions?.afterSeq ?? 0;\n      subscriptions.set(roomId, afterSeq);\n      lastObserved.set(roomId, afterSeq);\n      connection?.subscribe(roomId, afterSeq);\n    },\n    unsubscribe(roomId) {\n      subscriptions.delete(roomId);\n      lastObserved.delete(roomId);\n      connection?.unsubscribe(roomId);\n    },\n  };\n}\n","import { parseHttpResponseBody as parseResponseBody } from \"../../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../../utils/athena-request-headers.ts\";\nimport { REMOTE_CHAT_CAPABILITIES } from \"../capabilities.ts\";\nimport { AthenaChatError } from \"../error.ts\";\nimport { createChatRealtimeSession } from \"../realtime/session.ts\";\nimport type {\n  AthenaChatAddMembersRequest,\n  AthenaChatAddReactionRequest,\n  AthenaChatCallOptions,\n  AthenaChatConnectOptions,\n  AthenaChatCreateRoomRequest,\n  AthenaChatDeleteResult,\n  AthenaChatEditMessageRequest,\n  AthenaChatListMessagesQuery,\n  AthenaChatListRoomsQuery,\n  AthenaChatMarkReadUpToRequest,\n  AthenaChatMember,\n  AthenaChatMessage,\n  AthenaChatMessageCreatedResponse,\n  AthenaChatMessagePage,\n  AthenaChatModule,\n  AthenaChatReactionSummary,\n  AthenaChatReadCursor,\n  AthenaChatRealtimeConnection,\n  AthenaChatRealtimeInfoResponse,\n  AthenaChatRealtimeModule,\n  AthenaChatRealtimeSessionOptions,\n  AthenaChatRemoveResult,\n  AthenaChatResolveDirectRoomRequest,\n  AthenaChatResumeRoomCursor,\n  AthenaChatRoom,\n  AthenaChatRoomCreatedResponse,\n  AthenaChatRoomPage,\n  AthenaChatSearchMessagesRequest,\n  AthenaChatSearchPage,\n  AthenaChatSendMessageRequest,\n  AthenaChatUpdateMemberRoleRequest,\n  AthenaChatUpdateRoomRequest,\n  AthenaChatWebSocketFactory,\n  AthenaChatWebSocketLike,\n  AthenaChatWsClientCommand,\n  AthenaChatWsServerEvent,\n} from \"../types.ts\";\n\nexport { AthenaChatError } from \"../error.ts\";\n\nconst SDK_NAME = \"xylex-group/athena-chat\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nexport interface AthenaChatClientConfig {\n  apiKey: string;\n  baseUrl?: string;\n  bearerToken?: string;\n  client?: string;\n  cookie?: string;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  realtimeInfoUrl?: string;\n  sessionToken?: string;\n  webSocketFactory?: AthenaChatWebSocketFactory;\n  wsUrl?: string;\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaChatCallOptions\n    | undefined\n    | Promise<AthenaChatCallOptions | undefined>;\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n  if (!wsUrl) {\n    return;\n  }\n\n  const parsed = new URL(normalizeWsUrl(wsUrl, \"Athena chat WebSocket URL\"));\n  parsed.protocol = parsed.protocol === \"wss:\" ? \"https:\" : \"http:\";\n  parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, \"/wss/info\");\n  return parsed.toString();\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} is required.`);\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(normalized);\n  } catch (error) {\n    throw new Error(`${label} must be a valid absolute ws(s) URL.`, {\n      cause: error,\n    });\n  }\n\n  if (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n    throw new Error(`${label} must use ws or wss.`);\n  }\n\n  parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n  return parsed.toString().replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    for (const candidate of [payload.error, payload.message, payload.details]) {\n      if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n        return candidate.trim();\n      }\n    }\n  }\n\n  if (typeof payload === \"string\" && payload.trim().length > 0) {\n    return payload.trim();\n  }\n\n  return fallback;\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} is required.`);\n  }\n  return encodeURIComponent(normalized);\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n  if (!query) {\n    return \"\";\n  }\n\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (item !== undefined && item !== null) {\n          params.append(key, String(item));\n        }\n      }\n      continue;\n    }\n    params.set(key, String(value));\n  }\n\n  const encoded = params.toString();\n  return encoded ? `?${encoded}` : \"\";\n}\n\nfunction createSocket(\n  factory: AthenaChatWebSocketFactory,\n  url: string,\n  protocols?: string | string[]\n): AthenaChatWebSocketLike {\n  try {\n    return new (\n      factory as new (\n        socketUrl: string,\n        socketProtocols?: string | string[]\n      ) => AthenaChatWebSocketLike\n    )(url, protocols);\n  } catch (error) {\n    if (error instanceof TypeError) {\n      return (\n        factory as (\n          socketUrl: string,\n          socketProtocols?: string | string[]\n        ) => AthenaChatWebSocketLike\n      )(url, protocols);\n    }\n    throw error;\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"chat\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n  return {\n    ...init,\n    body: body === undefined ? undefined : JSON.stringify(body),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      ...(init.headers as Record<string, string>),\n    },\n  };\n}\n\n/** Coalesce concurrent identical GET chat reads by their effective headers. */\nconst inflightGetRequests = new Map<string, Promise<unknown>>();\n\nfunction headerIgnoreCase(\n  headers: Record<string, string>,\n  name: string\n): string {\n  const target = name.toLowerCase();\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === target && value) {\n      return value;\n    }\n  }\n  return \"\";\n}\n\n/** Per-call tracing must not isolate or merge tenant-scoped GET coalescing. */\nconst CHAT_GET_INFLIGHT_TRACING_HEADERS = new Set([\n  \"x-athena-correlation-id\",\n  \"x-athena-request-id\",\n  \"x-athena-trace-id\",\n  \"x-correlation-id\",\n  \"x-request-id\",\n]);\n\nfunction chatGetInflightKey(\n  method: string,\n  url: string,\n  headers: Record<string, string>\n): string {\n  // Canonicalize every remaining header. Organization/user/session/custom\n  // tenant hints all select the response; do not whitelist credentials only.\n  const canonicalHeaders = Object.entries(headers)\n    .map(([name, value]) => [name.toLowerCase(), value] as const)\n    .filter(([name]) => !CHAT_GET_INFLIGHT_TRACING_HEADERS.has(name))\n    .sort(([left], [right]) => left.localeCompare(right));\n  return `${method}\\n${url}\\n${JSON.stringify(canonicalHeaders)}`;\n}\n\nasync function request<T>(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions,\n  method: string,\n  endpoint: string,\n  options?: AthenaChatCallOptions,\n  body?: unknown\n): Promise<T> {\n  if (!config.baseUrl) {\n    throw new Error(\n      \"Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.\"\n    );\n  }\n  // Deterministic single URL — never progressive path probing.\n  const url = `${config.baseUrl}${endpoint}`;\n  const contextOptions = await runtimeOptions.resolveCallOptions?.();\n  const resolvedOptions = {\n    ...contextOptions,\n    ...options,\n    headers:\n      contextOptions?.headers || options?.headers\n        ? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n        : undefined,\n  };\n  const headers = buildHeaders(config, resolvedOptions);\n  if (\n    resolvedOptions.requestId &&\n    !headerIgnoreCase(headers, \"x-athena-request-id\")\n  ) {\n    headers[\"x-athena-request-id\"] = resolvedOptions.requestId;\n  }\n  if (\n    resolvedOptions.traceId &&\n    !headerIgnoreCase(headers, \"x-athena-trace-id\")\n  ) {\n    headers[\"x-athena-trace-id\"] = resolvedOptions.traceId;\n  }\n  if (\n    resolvedOptions.correlationId &&\n    !headerIgnoreCase(headers, \"x-athena-correlation-id\")\n  ) {\n    headers[\"x-athena-correlation-id\"] = resolvedOptions.correlationId;\n  }\n  const init: RequestInit = {\n    headers,\n    method,\n    signal: resolvedOptions.signal,\n  };\n  const finalInit =\n    body === undefined || method === \"GET\" ? init : withJsonBody(init, body);\n\n  const execute = async (): Promise<T> => {\n    const response = await fetch(url, finalInit);\n    const rawText = await response.text();\n    const { parsed } = parseResponseBody(\n      rawText,\n      response.headers.get(\"content-type\")\n    );\n\n    if (!response.ok) {\n      throw new AthenaChatError({\n        body: parsed,\n        endpoint,\n        message: resolveErrorMessage(\n          parsed,\n          `Athena chat ${method} ${endpoint} failed with ${response.status}`\n        ),\n        method,\n        requestId: resolveRequestId(response.headers),\n        status: response.status,\n      });\n    }\n\n    return parsed as T;\n  };\n\n  if (method === \"GET\" && body === undefined) {\n    // Per-call AbortSignal must keep independent cancellation semantics —\n    // do not coalesce signaled requests onto another caller's promise.\n    if (resolvedOptions.signal) {\n      return execute();\n    }\n    const key = chatGetInflightKey(method, url, headers);\n    const existing = inflightGetRequests.get(key);\n    if (existing) {\n      return existing as Promise<T>;\n    }\n    const pending = execute().finally(() => {\n      if (inflightGetRequests.get(key) === pending) {\n        inflightGetRequests.delete(key);\n      }\n    });\n    inflightGetRequests.set(key, pending);\n    return pending;\n  }\n\n  return execute();\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(\n  payload: T\n): T[\"data\"] {\n  return payload.data;\n}\n\nfunction createRealtimeConnection(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatConnectOptions\n): AthenaChatRealtimeConnection {\n  if (!config.wsUrl) {\n    throw new Error(\n      \"Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\"\n    );\n  }\n\n  const wsFactory =\n    config.webSocketFactory ??\n    (globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory })\n      .WebSocket;\n\n  if (!wsFactory) {\n    throw new Error(\n      \"No WebSocket implementation is available. Provide chat.webSocketFactory in createClient() or run in a runtime with global WebSocket support.\"\n    );\n  }\n\n  const socket = createSocket(wsFactory, config.wsUrl, options?.protocols);\n\n  const send = (command: AthenaChatWsClientCommand) => {\n    socket.send(JSON.stringify(command));\n  };\n\n  if (options?.onMessage) {\n    const listener = (event: unknown) => {\n      const messageEvent = event as { data?: unknown };\n      const raw = messageEvent?.data;\n      if (typeof raw !== \"string\") {\n        return;\n      }\n      try {\n        options.onMessage?.(\n          JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>\n        );\n      } catch {\n        options.onMessage?.({\n          error: \"Invalid JSON message from Athena chat realtime gateway.\",\n          type: \"error\",\n        });\n      }\n    };\n\n    if (typeof socket.addEventListener === \"function\") {\n      socket.addEventListener(\"message\", listener);\n    } else {\n      socket.onmessage = listener as AthenaChatWebSocketLike[\"onmessage\"];\n    }\n  }\n\n  const hello = (command?: {\n    token?: string | null;\n    room_subscriptions?: string[] | null;\n  }) => {\n    send({\n      room_subscriptions: command?.room_subscriptions,\n      token: command?.token,\n      type: \"auth.hello\",\n    });\n  };\n\n  if (options?.hello) {\n    const onOpen = () =>\n      hello({\n        room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n        token: options.hello?.token ?? undefined,\n      });\n    if (typeof socket.addEventListener === \"function\") {\n      socket.addEventListener(\"open\", onOpen);\n    } else {\n      socket.onopen = onOpen;\n    }\n  }\n\n  return {\n    close(code, reason) {\n      socket.close(code, reason);\n    },\n    hello,\n    ping(at = new Date().toISOString()) {\n      send({\n        at,\n        type: \"ping\",\n      });\n    },\n    presenceHeartbeat(activeRoomId) {\n      send({\n        active_room_id: activeRoomId ?? undefined,\n        type: \"chat.presence.heartbeat\",\n      });\n    },\n    readUpTo(roomId, input) {\n      send({\n        message_id: input?.message_id ?? undefined,\n        room_id: roomId,\n        seq: input?.seq ?? undefined,\n        type: \"chat.read.up_to\",\n      });\n    },\n    resume(rooms: AthenaChatResumeRoomCursor[]) {\n      send({\n        rooms,\n        type: \"chat.resume\",\n      });\n    },\n    send,\n    socket,\n    subscribe(roomId, fromSeq) {\n      send({\n        from_seq: fromSeq ?? undefined,\n        room_id: roomId,\n        type: \"chat.subscribe\",\n      });\n    },\n    typingStart(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.typing.start\",\n      });\n    },\n    typingStop(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.typing.stop\",\n      });\n    },\n    unsubscribe(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.unsubscribe\",\n      });\n    },\n  };\n}\n\nexport function createRemoteChatRuntime(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions = {}\n): AthenaChatModule {\n  const call = <T>(\n    method: string,\n    endpoint: string,\n    options?: AthenaChatCallOptions,\n    body?: unknown\n  ): Promise<T> =>\n    request<T>(config, runtimeOptions, method, endpoint, options, body);\n\n  const realtime: AthenaChatRealtimeModule = {\n    connect(options) {\n      return createRealtimeConnection(config, options);\n    },\n    createSession(options?: AthenaChatRealtimeSessionOptions) {\n      return createChatRealtimeSession(\n        {\n          local: false,\n          open(onEvent, onClose, onOpen) {\n            const connection = createRealtimeConnection(config, {\n              onMessage: onEvent,\n            });\n            const socket = connection.socket;\n            const handleOpen = () => {\n              connection.hello();\n              onOpen();\n            };\n            const handleClose = () => {\n              onClose();\n            };\n            if (typeof socket.addEventListener === \"function\") {\n              socket.addEventListener(\"open\", handleOpen);\n              socket.addEventListener(\"close\", handleClose);\n            } else {\n              socket.onopen = handleOpen;\n              socket.onclose = handleClose;\n            }\n            return connection;\n          },\n        },\n        options\n      );\n    },\n    info(options) {\n      const realtimeInfoUrl =\n        config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl);\n      if (!realtimeInfoUrl) {\n        throw new Error(\n          \"Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\"\n        );\n      }\n\n      return request<AthenaChatRealtimeInfoResponse>(\n        {\n          ...config,\n          baseUrl: realtimeInfoUrl,\n        },\n        runtimeOptions,\n        \"GET\",\n        \"\",\n        options\n      );\n    },\n  };\n\n  return {\n    capabilities: REMOTE_CHAT_CAPABILITIES,\n    message: {\n      reaction: {\n        add(\n          messageId: string,\n          input: AthenaChatAddReactionRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReactionSummary>(\n            \"POST\",\n            `/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions`,\n            options,\n            input\n          );\n        },\n        remove(\n          messageId: string,\n          emoji: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReactionSummary>(\n            \"DELETE\",\n            `/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions/${encodePathSegment(emoji, \"reaction emoji\")}`,\n            options\n          );\n        },\n      },\n      search(\n        input: AthenaChatSearchMessagesRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatSearchPage>(\n          \"POST\",\n          \"/messages/search\",\n          options,\n          input\n        );\n      },\n    },\n    realtime,\n    room: {\n      archive(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          \"POST\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/archive`,\n          options\n        );\n      },\n      create(\n        input: AthenaChatCreateRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoomCreatedResponse>(\n          \"POST\",\n          \"/rooms\",\n          options,\n          input\n        );\n      },\n      get(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          \"GET\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n          options\n        );\n      },\n      list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomPage>(\n          \"GET\",\n          `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n          options\n        );\n      },\n      member: {\n        add(\n          roomId: string,\n          input: AthenaChatAddMembersRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMember[]>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n            options,\n            input\n          );\n        },\n        list(roomId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            \"GET\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n            options\n          );\n        },\n        remove(\n          roomId: string,\n          userId: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatRemoveResult>(\n            \"DELETE\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members/${encodePathSegment(userId, \"chat user ID\")}`,\n            options\n          );\n        },\n        updateRole(\n          roomId: string,\n          userId: string,\n          role: AthenaChatMember[\"role\"],\n          options?: AthenaChatCallOptions\n        ) {\n          const input: AthenaChatUpdateMemberRoleRequest = { role };\n          return call<AthenaChatMember[]>(\n            \"PATCH\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members/${encodePathSegment(userId, \"chat user ID\")}`,\n            options,\n            input\n          );\n        },\n      },\n      message: {\n        delete(\n          roomId: string,\n          messageId: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatDeleteResult>(\n            \"DELETE\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n            options\n          );\n        },\n        list(\n          roomId: string,\n          query?: AthenaChatListMessagesQuery,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessagePage>(\n            \"GET\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n            options\n          );\n        },\n        send(\n          roomId: string,\n          input: AthenaChatSendMessageRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessageCreatedResponse>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages`,\n            options,\n            input\n          );\n        },\n        update(\n          roomId: string,\n          messageId: string,\n          input: AthenaChatEditMessageRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessage>(\n            \"PATCH\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n            options,\n            input\n          );\n        },\n      },\n      readCursor: {\n        upTo(\n          roomId: string,\n          input?: AthenaChatMarkReadUpToRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReadCursor>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/read-cursor`,\n            options,\n            input ?? {}\n          );\n        },\n      },\n      resolveDirect(\n        input: AthenaChatResolveDirectRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoom>(\n          \"POST\",\n          \"/rooms/direct/resolve\",\n          options,\n          input\n        );\n      },\n      update(\n        roomId: string,\n        input: AthenaChatUpdateRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoom>(\n          \"PATCH\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n          options,\n          input\n        );\n      },\n    },\n  };\n}\n\nexport const createChatModule = createRemoteChatRuntime;\n\nexport const chatSdkManifest = {\n  basePath: \"/chat\",\n  methods: [\n    { method: \"GET\", name: \"listRooms\", path: \"/chat/rooms\" },\n    { method: \"POST\", name: \"createRoom\", path: \"/chat/rooms\" },\n    {\n      method: \"POST\",\n      name: \"resolveDirectRoom\",\n      path: \"/chat/rooms/direct/resolve\",\n    },\n    { method: \"GET\", name: \"getRoom\", path: \"/chat/rooms/{room_id}\" },\n    { method: \"PATCH\", name: \"updateRoom\", path: \"/chat/rooms/{room_id}\" },\n    {\n      method: \"POST\",\n      name: \"archiveRoom\",\n      path: \"/chat/rooms/{room_id}/archive\",\n    },\n    {\n      method: \"GET\",\n      name: \"listRoomMessages\",\n      path: \"/chat/rooms/{room_id}/messages\",\n    },\n    {\n      method: \"POST\",\n      name: \"sendRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages/{message_id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages/{message_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"advanceReadCursor\",\n      path: \"/chat/rooms/{room_id}/read-cursor\",\n    },\n    {\n      method: \"GET\",\n      name: \"listRoomMembers\",\n      path: \"/chat/rooms/{room_id}/members\",\n    },\n    {\n      method: \"POST\",\n      name: \"addRoomMembers\",\n      path: \"/chat/rooms/{room_id}/members\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"removeRoomMember\",\n      path: \"/chat/rooms/{room_id}/members/{user_id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateRoomMemberRole\",\n      path: \"/chat/rooms/{room_id}/members/{user_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"addReaction\",\n      path: \"/chat/messages/{message_id}/reactions\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"removeReaction\",\n      path: \"/chat/messages/{message_id}/reactions/{emoji}\",\n    },\n    { method: \"POST\", name: \"searchMessages\", path: \"/chat/messages/search\" },\n    { method: \"GET\", name: \"getRealtimeInfo\", path: \"/wss/info\" },\n    { method: \"GET\", name: \"connectRealtime\", path: \"/wss/gateway\" },\n  ],\n  namespace: \"chat\",\n} as const;\n\nexport function unwrapChatRoom(\n  payload: AthenaChatRoomCreatedResponse\n): AthenaChatRoom {\n  return unwrapEnvelopeData(payload) as AthenaChatRoom;\n}\n\nexport function unwrapChatMessage(\n  payload: AthenaChatMessageCreatedResponse\n): AthenaChatMessage {\n  return unwrapEnvelopeData(payload) as AthenaChatMessage;\n}\n","export { AthenaChatError } from \"./error.ts\";\nexport {\n  type AthenaChatClientConfig,\n  chatSdkManifest,\n  createChatModule,\n  createRemoteChatRuntime,\n  unwrapChatMessage,\n  unwrapChatRoom,\n} from \"./remote/runtime.ts\";\n","import type { AthenaResult } from \"./types.ts\";\n\nexport type AthenaCardinalityMode = \"single\" | \"maybeSingle\";\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 function applyCardinality<Result>(\n  response: AthenaResult<Result>,\n  _mode: AthenaCardinalityMode\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  void _mode;\n  return toSingleResult(response);\n}\n","import { normalizeAthenaErrorForRetry } from \"../error/normalize.ts\";\nimport { type RetryConfig, withRetry } from \"../auxiliaries/retry.ts\";\nimport type { AthenaResult, AthenaResultError } from \"./types.ts\";\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  backoff: \"exponential\",\n  baseDelayMs: 100,\n  jitter: true,\n  maxDelayMs: 1000,\n  retries: 2,\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 ||\n          normalizeAthenaErrorForRetry(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","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\";\nimport { AthenaQueryError } from \"./query/engine/errors.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  via?: string;\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 type AthenaRelationSelection = \"natural\" | \"first\";\n\nexport interface AthenaRelationSelectNode<\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  as?: string;\n  constraint?: string;\n  join?: \"inner\";\n  limit?: number;\n  offset?: number;\n  orderBy?: AthenaRelationOrderBy;\n  schema?: string;\n  select: TSelect;\n  selection?: \"first\";\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  | \"constraint\"\n  | \"join\"\n  | \"via\"\n  | \"schema\"\n  | \"where\"\n  | \"orderBy\"\n  | \"limit\"\n  | \"offset\"\n  | \"selection\";\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 } | { schema: string; constraint: 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 type AthenaRelationOrderBy<Row = AthenaRowShape> =\n  | AthenaOrderBy<Row>\n  | readonly AthenaOrderBy<Row>[];\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 RelationKeyMatchesVia<TKey extends string, TVia extends string> =\n  TKey extends TVia | `${TVia}_${string}` ? true : false;\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TKey extends string\n        ? RelationKeyMatchesVia<TKey, TVia> extends true\n          ? TRelation\n          : TVia extends TRelation[\"sourceColumns\"][number]\n            ? TRelation\n            : never\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 { constraint: infer TConstraint extends string }\n      ? RelationByVia<TContext, TConstraint>\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        ? TValue extends { selection: \"first\" }\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          : 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    constraintHint?: string;\n    legacyVia?: string;\n    relation?: string;\n  }\n): string {\n  const nested = compileSelectShape(node.select);\n  const propertyKey = normalizeIdentifier(key, \"select relation key\");\n  if (node.schema && (node.via || node.constraint)) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; constraint is also not allowed on the same relation; use schema with the relation key, or a selector without schema`\n    );\n  }\n\n  if (node.selection === \"first\") {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Gateway cannot represent relation \"${propertyKey}\" first selection`\n    );\n  }\n  const constraintHint = (node.constraintHint ?? node.constraint)?.trim();\n  const semanticRelation = node.relation?.trim();\n  if (\n    node.join === \"inner\" &&\n    (constraintHint || node.via || node.legacyVia)\n  ) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Gateway cannot represent relation \"${propertyKey}\" with both a relation selector and !inner`\n    );\n  }\n  const relationTokenBase =\n    node.legacyVia\n      ? normalizeIdentifier(node.legacyVia, \"select relation token\")\n      : constraintHint\n      ? `${normalizeIdentifier(\n          semanticRelation ?? propertyKey,\n          \"select relation\"\n        )}!${normalizeIdentifier(constraintHint, \"relation constraint\")}`\n      : node.join === \"inner\"\n        ? `${normalizeIdentifier(\n            semanticRelation ?? propertyKey,\n            \"select relation\"\n          )}!inner`\n        : normalizeIdentifier(node.via ?? propertyKey, \"select relation token\");\n  if (node.schema && !constraintHint && 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() ||\n    (constraintHint || node.join === \"inner\"\n      ? semanticRelation === propertyKey\n        ? \"\"\n        : propertyKey\n      : relationToken === propertyKey\n        ? \"\"\n        : 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 selectShapeHasFirstSelection(select: AthenaSelectShape): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (rawValue.selection === \"first\") {\n      return true;\n    }\n    if (selectShapeHasFirstSelection(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 {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type { AthenaRelationDescriptor } from \"./query/descriptor.ts\";\nimport { compileIncludeSelectString } from \"./query/include-select.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(\n              (condition) => condition.column && condition.operator === \"eq\"\n            )\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","import type {\n  AthenaConditionCastType,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonValue,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport { resolvePagination } from \"./query-transport.ts\";\nimport {\n  quoteQualifiedIdentifier,\n  quoteSelectColumnsExpression,\n  quoteSelectColumnToken,\n} from \"./sql-identifiers.ts\";\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i;\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n  const normalized = cast.trim().toLowerCase();\n  if (!SAFE_CAST_PATTERN.test(normalized)) {\n    throw new Error(`Invalid cast type \"${cast}\"`);\n  }\n  return normalized;\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n  if (value === null) {\n    return \"NULL\";\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? String(value) : \"NULL\";\n  }\n  if (typeof value === \"boolean\") {\n    return value ? \"TRUE\" : \"FALSE\";\n  }\n  return `'${escapeSqlStringLiteral(value)}'`;\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n  if (!cast) {\n    return expression;\n  }\n  return `${expression}::${normalizeCast(cast)}`;\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n  if (Array.isArray(columns)) {\n    return columns.map((column) => quoteSelectColumnToken(column)).join(\", \");\n  }\n  return quoteSelectColumnsExpression(columns);\n}\n\ninterface ParsedIdentifierSegment {\n  normalizedValue: string;\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n  const trimmed = input.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  if (!trimmed.startsWith('\"')) {\n    return {\n      normalizedValue: trimmed.toLowerCase(),\n    };\n  }\n\n  let value = \"\";\n  let index = 1;\n  let closed = false;\n  while (index < trimmed.length) {\n    const char = trimmed[index];\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n    if (char === '\"' && next === '\"') {\n      value += '\"';\n      index += 2;\n      continue;\n    }\n    if (char === '\"') {\n      closed = true;\n      index += 1;\n      break;\n    }\n    value += char;\n    index += 1;\n  }\n\n  if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n    return null;\n  }\n\n  return {\n    normalizedValue: value,\n  };\n}\n\nfunction splitQualifiedTableName(\n  tableName: string\n): { schemaSegment: string } | null {\n  const trimmed = tableName.trim();\n  let inQuotes = false;\n  for (let index = 0; index < trimmed.length; index += 1) {\n    const char = trimmed[index];\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n    if (char === '\"') {\n      if (inQuotes && next === '\"') {\n        index += 1;\n        continue;\n      }\n      inQuotes = !inQuotes;\n      continue;\n    }\n    if (char === \".\" && !inQuotes) {\n      const schemaSegment = trimmed.slice(0, index).trim();\n      const tableSegment = trimmed.slice(index + 1).trim();\n      if (!(schemaSegment && tableSegment)) {\n        return null;\n      }\n      return { schemaSegment };\n    }\n  }\n  return null;\n}\n\nexport function resolveTableNameForCall(\n  tableName: string,\n  schema: string | undefined\n): string {\n  if (!schema) {\n    return tableName;\n  }\n  const normalizedSchema = schema.trim();\n  if (!normalizedSchema) {\n    throw new Error(\"schema option must be a non-empty string\");\n  }\n  const normalizedTableName = tableName.trim();\n  const parsedSchema = parseIdentifierSegment(normalizedSchema);\n  if (!parsedSchema) {\n    throw new Error(\"schema option must be a non-empty string\");\n  }\n  const qualified = splitQualifiedTableName(normalizedTableName);\n  if (qualified) {\n    const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment);\n    const sameSchema = parsedTableSchema\n      ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n      : normalizedTableName.startsWith(`${normalizedSchema}.`);\n    if (sameSchema) {\n      return normalizedTableName;\n    }\n    throw new Error(\n      `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`\n    );\n  }\n  return `${normalizedSchema}.${normalizedTableName}`;\n}\n\nfunction conditionToSqlClause(\n  condition: AthenaGatewayCondition\n): string | null {\n  if (!condition.column) {\n    return null;\n  }\n  const column = withCast(\n    quoteQualifiedIdentifier(condition.column),\n    condition.column_cast\n  );\n  const value = condition.value;\n  const sqlOperator = {\n    eq: \"=\",\n    gt: \">\",\n    gte: \">=\",\n    ilike: \"ILIKE\",\n    like: \"LIKE\",\n    lt: \"<\",\n    lte: \"<=\",\n    neq: \"!=\",\n  } as const;\n\n  switch (condition.operator) {\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\": {\n      if (Array.isArray(value) || value === undefined) {\n        return null;\n      }\n      const rhs = withCast(toSqlLiteral(value), condition.value_cast);\n      return `${column} ${sqlOperator[condition.operator]} ${rhs}`;\n    }\n    case \"is\": {\n      if (value === null) {\n        return `${column} IS NULL`;\n      }\n      if (value === true) {\n        return `${column} IS TRUE`;\n      }\n      if (value === false) {\n        return `${column} IS FALSE`;\n      }\n      return null;\n    }\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        return null;\n      }\n      if (value.length === 0) {\n        return \"FALSE\";\n      }\n      const values = value.map((item) =>\n        withCast(toSqlLiteral(item), condition.value_cast)\n      );\n      return `${column} IN (${values.join(\", \")})`;\n    }\n    default:\n      return null;\n  }\n}\n\nexport function buildTypedSelectQuery(input: {\n  tableName: string;\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n  order?: AthenaSortBy;\n}): string | null {\n  const whereClauses: string[] = [];\n  for (const condition of input.conditions) {\n    const clause = conditionToSqlClause(condition);\n    if (!clause) {\n      return null;\n    }\n    whereClauses.push(clause);\n  }\n\n  let limit = input.limit;\n  let offset = input.offset;\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = input.pageSize;\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset = (input.currentPage - 1) * input.pageSize;\n  }\n\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ];\n\n  if (whereClauses.length > 0) {\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n\n  if (input.order?.field) {\n    const direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`\n    );\n  }\n\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  }\n\n  return `${sqlParts.join(\" \")};`;\n}\n\nexport function buildIncludeJoinSelectQuery(input: {\n  tableName: string;\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  relations: readonly {\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  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n}): string | null {\n  if (input.relations.length === 0) {\n    return null;\n  }\n  const rootAlias = \"root\";\n  const rootTable = quoteQualifiedIdentifier(input.tableName);\n  const rawColumns = (\n    Array.isArray(input.columns) ? input.columns : [input.columns]\n  )\n    .map((column) => column.trim())\n    .filter(Boolean);\n  const isStar = rawColumns.length === 0 || rawColumns.includes(\"*\");\n  const selectParts = isStar\n    ? [`${rootAlias}.*`]\n    : rawColumns.map(\n        (column) =>\n          `${rootAlias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(column)}`\n      );\n\n  const joinParts: string[] = [];\n  for (const relation of input.relations) {\n    const targetTable = [\n      relation.targetSchema,\n      relation.via ?? relation.targetModel,\n    ]\n      .filter(Boolean)\n      .join(\".\");\n    if (!targetTable) {\n      return null;\n    }\n    const source = relation.sourceColumns ?? [];\n    const target = relation.targetColumns ?? [];\n    if (source.length === 0 || source.length !== target.length) {\n      return null;\n    }\n    const alias = quoteQualifiedIdentifier(relation.name);\n    const ons = source.map(\n      (column, index) =>\n        `${rootAlias}.${quoteQualifiedIdentifier(column)} = ${alias}.${quoteQualifiedIdentifier(target[index] as string)}`\n    );\n    joinParts.push(\n      `LEFT JOIN ${quoteQualifiedIdentifier(targetTable)} AS ${alias} ON ${ons.join(\" AND \")}`\n    );\n    if (relation.star || !relation.columns?.length) {\n      selectParts.push(`${alias}.*`);\n    } else {\n      for (const column of relation.columns) {\n        selectParts.push(\n          `${alias}.${quoteQualifiedIdentifier(column)} AS ${quoteQualifiedIdentifier(`${relation.name}.${column}`)}`\n        );\n      }\n    }\n  }\n\n  const whereClauses: string[] = [];\n  for (const condition of input.conditions) {\n    const clause = conditionToSqlClause(condition);\n    if (!clause) {\n      return null;\n    }\n    whereClauses.push(clause.replace(/^\"([^\"]+)\"/, `${rootAlias}.\"$1\"`));\n  }\n\n  const sqlParts = [\n    `SELECT ${selectParts.join(\", \")} FROM ${rootTable} AS ${rootAlias}`,\n    ...joinParts,\n  ];\n  if (whereClauses.length > 0) {\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  if (input.order?.field) {\n    const direction = input.order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${rootAlias}.${quoteQualifiedIdentifier(input.order.field)} ${direction}`\n    );\n  }\n  if (input.limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(input.limit))}`);\n  }\n  if (input.offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(input.offset))}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n  return comment.replace(/\\*\\//g, \"* /\");\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n  if (value === undefined) {\n    return \"DEFAULT\";\n  }\n  if (\n    value === null ||\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return toSqlLiteral(value);\n  }\n  return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`;\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n  const exact = conditionToSqlClause(condition);\n  if (exact) {\n    return exact;\n  }\n\n  const rawCondition = sanitizeSqlComment(JSON.stringify(condition));\n  if (!condition.column) {\n    return `TRUE /* unsupported condition: ${rawCondition} */`;\n  }\n\n  const column = withCast(\n    quoteQualifiedIdentifier(condition.column),\n    condition.column_cast\n  );\n  const value = condition.value;\n  const rhs = withCast(\n    toSqlJsonLiteral(value as AthenaJsonValue | undefined),\n    condition.value_cast\n  );\n\n  switch (condition.operator) {\n    case \"contains\":\n      return `${column} @> ${rhs}`;\n    case \"containedBy\":\n      return `${column} <@ ${rhs}`;\n    case \"not\":\n      return `TRUE /* NOT expression passthrough: ${rawCondition} */`;\n    case \"or\":\n      return `TRUE /* OR expression passthrough: ${rawCondition} */`;\n    default:\n      return `TRUE /* unsupported condition: ${rawCondition} */`;\n  }\n}\n\nfunction appendOrderLimitOffset(\n  sqlParts: string[],\n  order?: AthenaSortBy,\n  limit?: number,\n  offset?: number\n) {\n  if (order?.field) {\n    const direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`\n    );\n  }\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  }\n}\n\nexport function buildDebugSelectQuery(input: {\n  tableName: string;\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n  order?: AthenaSortBy;\n}): string {\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ];\n  if (input.conditions?.length) {\n    const whereClauses = input.conditions.map(conditionToDebugSqlClause);\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination(input);\n  appendOrderLimitOffset(\n    sqlParts,\n    input.order,\n    pagination.limit,\n    pagination.offset\n  );\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n  if (!tableName?.trim()) {\n    return '\"__unknown_table__\"';\n  }\n  return quoteQualifiedIdentifier(tableName);\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  const columns: string[] = [];\n  const seen = new Set<string>();\n  for (const row of rows) {\n    for (const column of Object.keys(row)) {\n      if (seen.has(column)) {\n        continue;\n      }\n      seen.add(column);\n      columns.push(column);\n    }\n  }\n\n  const sqlParts = [\n    `INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`,\n  ];\n\n  if (rows.length && columns.length) {\n    const valuesClause = rows\n      .map((row) => {\n        const values = columns.map((column) => {\n          const hasColumn = Object.hasOwn(row, column);\n          if (!hasColumn) {\n            return payload.default_to_null ? \"NULL\" : \"DEFAULT\";\n          }\n          const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[\n            column\n          ];\n          return toSqlJsonLiteral(rowValue);\n        });\n        return `(${values.join(\", \")})`;\n      })\n      .join(\", \");\n    const columnClause = columns\n      .map((column) => quoteQualifiedIdentifier(column))\n      .join(\", \");\n    sqlParts.push(`(${columnClause})`);\n    sqlParts.push(`VALUES ${valuesClause}`);\n  } else {\n    sqlParts.push(\"DEFAULT VALUES\");\n    if (rows.length > 1) {\n      sqlParts.push(\n        `/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`\n      );\n    }\n  }\n\n  if (payload.on_conflict) {\n    const conflictColumns = Array.isArray(payload.on_conflict)\n      ? payload.on_conflict\n          .map((column) => quoteQualifiedIdentifier(column))\n          .join(\", \")\n      : payload.on_conflict;\n    if (payload.update_body && Object.keys(payload.update_body).length > 0) {\n      const assignments = Object.entries(payload.update_body).map(\n        ([column, value]) =>\n          `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n      );\n      sqlParts.push(\n        `ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(\", \")}`\n      );\n    } else {\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`);\n    }\n  }\n\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n\n  return `${sqlParts.join(\" \")};`;\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n  const assignments = Object.entries(payload.update_body).map(\n    ([column, value]) =>\n      `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n  );\n  const sqlParts = [\n    `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(\", \") : \"/* empty set */\"}`,\n  ];\n  if (payload.conditions?.length) {\n    const whereClauses = payload.conditions.map(conditionToDebugSqlClause);\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    limit: payload.limit,\n    offset: payload.offset,\n    pageSize: payload.page_size,\n  });\n  appendOrderLimitOffset(\n    sqlParts,\n    payload.sort_by,\n    pagination.limit,\n    pagination.offset\n  );\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n  const sqlParts = [\n    `DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`,\n  ];\n  const whereClauses: string[] = [];\n  if (payload.resource_id) {\n    whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`);\n  }\n  if (payload.conditions?.length) {\n    whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause));\n  }\n  if (whereClauses.length) {\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    limit: payload.limit,\n    offset: payload.offset,\n    pageSize: payload.page_size,\n  });\n  appendOrderLimitOffset(\n    sqlParts,\n    payload.sort_by,\n    pagination.limit,\n    pagination.offset\n  );\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n  const column = quoteQualifiedIdentifier(filter.column);\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\": {\n      if (value === undefined || Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n      }\n      const operatorMap = {\n        eq: \"=\",\n        gt: \">\",\n        gte: \">=\",\n        ilike: \"ILIKE\",\n        like: \"LIKE\",\n        lt: \"<\",\n        lte: \"<=\",\n        neq: \"!=\",\n      } as const;\n      return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`;\n    }\n    case \"is\":\n      if (value === null) {\n        return `${column} IS NULL`;\n      }\n      if (value === true) {\n        return `${column} IS TRUE`;\n      }\n      if (value === false) {\n        return `${column} IS FALSE`;\n      }\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n    case \"in\":\n      if (!Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n      }\n      if (value.length === 0) {\n        return \"FALSE\";\n      }\n      return `${column} IN (${value.map((item) => toSqlLiteral(item)).join(\", \")})`;\n    default:\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n  }\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n  const argsEntries = payload.args ? Object.entries(payload.args) : [];\n  const argsClause = argsEntries\n    .map(\n      ([key, value]) =>\n        `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n    )\n    .join(\", \");\n  const functionRef = payload.schema\n    ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n    : quoteQualifiedIdentifier(payload.function);\n  const sqlParts = [\n    `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : \"*\"} FROM ${functionRef}(${argsClause})`,\n  ];\n  if (payload.filters?.length) {\n    sqlParts.push(\n      `WHERE ${payload.filters.map(rpcFilterToSqlClause).join(\" AND \")}`\n    );\n  }\n  if (payload.order?.column) {\n    const direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`\n    );\n  }\n  if (payload.limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n  }\n  if (payload.offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n","import type { 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 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 (\n    options?.isolationLevel &&\n    !capabilities.isolationLevels.includes(options.isolationLevel)\n  ) {\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  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 {\n  AthenaResult,\n  AthenaResultFormatter,\n} from \"../../client-result.ts\";\nimport type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaGatewayResponse } from \"../../gateway/types.ts\";\nimport type { AthenaExecutable } from \"../../query/descriptor.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(gateway: AthenaGatewayClient): {\n  capabilities: AthenaTransactionCapabilities;\n  transport: NonNullable<AthenaGatewayClient[\"transactions\"]> | undefined;\n} {\n  const transport = gateway.transactions;\n  return {\n    capabilities:\n      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:\n          \"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 = 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  buildPostgresBeginStatement,\n  nextInternalSavepointName,\n} from \"./begin-sql.ts\";\nexport {\n  getTransactionCacheObserver,\n  registerTransactionCacheObserver,\n} from \"./cache.ts\";\nexport {\n  attachTransactionCompiler,\n  compileTransactionOperation,\n  compileTransactionOperations,\n  nextTransactionOperationId,\n} from \"./compile.ts\";\nexport {\n  beginInteractiveSession,\n  executeAtomicTransaction,\n  finishInteractiveSession,\n  getTransactionTransport,\n  type InteractiveTransactionSession,\n  pinTransactionCallOptions,\n} from \"./coordinator.ts\";\nexport {\n  AthenaTransactionError,\n  type AthenaTransactionErrorCode,\n  isAthenaTransactionError,\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  SQLITE_LOCAL_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  canonicalResource: string;\n  database?: string;\n  model?: string;\n  schema?: string;\n  table: 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(value: AthenaResolvedResource): AthenaResolvedResource {\n  return resolvedAthenaResource(value);\n}\n\nfunction rawResourceToken(payload: unknown): string | undefined {\n  if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n    return;\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;\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;\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    canonicalResource: resolved.canonicalResource,\n    kind: \"relation\",\n    ref: normalizeAthenaResourceRef(ref),\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    canonicalResource: bucket ? `${bucket}/${key}` : key,\n    key,\n  };\n}\n\nexport function authResourceIdentity(resource: string): AthenaResourceIdentity {\n  const token = resource.trim();\n  return {\n    canonicalResource: token,\n    kind: \"auth\",\n    resource: token,\n  };\n}\n\nexport function serviceResourceIdentity(\n  service: string\n): AthenaResourceIdentity {\n  const token = service.trim();\n  return {\n    canonicalResource: token,\n    kind: \"service\",\n    service: 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  column?: string;\n  kind: \"compare\";\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 || normalizeOptional(meta?.tableName)?.split(\".\").at(-1) || \"\";\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 \"./query/contracts.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\\\\client\\\\fluent\\\\table-builder.ts\",\n  \"src/client/fluent/table-builder.ts\",\n  \"src\\\\client\\\\fluent\\\\mutation-query.ts\",\n  \"src/client/fluent/mutation-query.ts\",\n  \"src\\\\client\\\\fluent\\\\rpc-builder.ts\",\n  \"src/client/fluent/rpc-builder.ts\",\n  \"src\\\\query\\\\execution\\\\mutation.ts\",\n  \"src/query/execution/mutation.ts\",\n  \"src\\\\compatibility\\\\query-builder.ts\",\n  \"src/compatibility/query-builder.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  \"src\\\\v3-client-assembly.ts\",\n  \"src/v3-client-assembly.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 { AthenaSelectQueryAst } from \"../engine/ast.ts\";\nimport { normalizeTransportPayload } from \"../engine/index.ts\";\nimport type { AthenaGatewayCondition, AthenaSortBy } from \"../../gateway/types.ts\";\nimport type { TableBuilderState } from \"../contracts.ts\";\n\nexport interface CanonicalSelectInput {\n  columns: string | string[];\n  state: TableBuilderState;\n  tableName: string;\n}\n\nexport interface CanonicalSelect {\n  ast: AthenaSelectQueryAst;\n}\n\nfunction hasUnsupportedCondition(state: TableBuilderState): boolean {\n  return (\n    state.conditions.some(\n      (condition) =>\n        [\"or\", \"not\"].includes(condition.operator.toLowerCase()) ||\n        condition.column_cast !== undefined ||\n        condition.eq_column_cast !== undefined ||\n        condition.value_cast !== undefined ||\n        condition.eq_value_cast !== undefined\n    ) || state.totalPages !== undefined\n  );\n}\n\nfunction toLegacyPayload(input: CanonicalSelectInput): {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  current_page?: number;\n  limit?: number;\n  offset?: number;\n  page_size?: number;\n  sort_by?: AthenaSortBy;\n  table_name: string;\n  total_pages?: number;\n} {\n  return {\n    columns: input.columns,\n    conditions: input.state.conditions.length\n      ? input.state.conditions\n      : undefined,\n    current_page: input.state.currentPage,\n    limit: input.state.limit,\n    offset: input.state.offset,\n    page_size: input.state.pageSize,\n    sort_by: input.state.order,\n    table_name: input.tableName,\n    total_pages: input.state.totalPages,\n  };\n}\n\n/**\n * Lift lossless fluent state into the canonical AST before transport selection.\n * Unsupported legacy expressions deliberately return no result so the\n * compatibility compiler remains the explicit fallback.\n */\nexport function createCanonicalSelect(\n  input: CanonicalSelectInput\n): CanonicalSelect | undefined {\n  if (\n    input.state.relations?.length ||\n    hasUnsupportedCondition(input.state)\n  ) {\n    return;\n  }\n  const ast = normalizeTransportPayload(toLegacyPayload(input));\n  return {\n    ast,\n  };\n}\n","import type { AthenaResult } from \"../../result/types.ts\";\nimport { executeRead } from \"../../result/read.ts\";\nimport {\n  buildDebugSelectQuery,\n  buildIncludeJoinSelectQuery,\n  buildTypedSelectQuery,\n  resolveTableNameForCall,\n} from \"../../client-sql.ts\";\nimport type { AthenaGatewayCallOptions } from \"../../gateway/types.ts\";\nimport type { AthenaQueryTraceCallsite, TableBuilderState } from \"../contracts.ts\";\nimport type { AthenaQueryDebugAst } from \"../../query-debug-ast.ts\";\nimport type { AthenaQueryExecutionRuntime } from \"./operation.ts\";\nimport { buildSelectDebugAst } from \"../../query-debug-ast.ts\";\nimport { executeWithQueryTrace } from \"../../query-tracing.ts\";\nimport { createSelectTransportPlan } from \"../../query-transport.ts\";\nimport { createCanonicalSelect } from \"./canonical-select.ts\";\n\nexport interface AthenaSelectExecutionInput {\n  tableName: string;\n  columns: string | string[];\n  state: TableBuilderState;\n  options?: AthenaGatewayCallOptions;\n  runtime: AthenaQueryExecutionRuntime;\n  callsite?: AthenaQueryTraceCallsite | null;\n  debugAstFactory?: (input: {\n    tableName: string;\n    columns: string | string[];\n    executionState: TableBuilderState;\n    plan: ReturnType<typeof createSelectTransportPlan>;\n  }) => AthenaQueryDebugAst;\n}\n\nexport async function executeAthenaSelect<T = unknown>(\n  input: AthenaSelectExecutionInput\n): Promise<AthenaResult<T>> {\n  const {\n    behavior,\n    formatGatewayResult,\n    gateway,\n    tracer,\n  } = input.runtime;\n  const resolvedTableName = resolveTableNameForCall(\n    input.tableName,\n    input.options?.schema\n  );\n  if (\n    behavior?.canonicalQueries &&\n    !input.options?.count &&\n    !input.options?.head\n  ) {\n    const canonical = createCanonicalSelect({\n      columns: input.columns,\n      state: input.state,\n      tableName: resolvedTableName,\n    });\n    if (canonical) {\n      const debugAst = behavior.debugAst\n        ? input.debugAstFactory?.({\n            columns: input.columns,\n            executionState: input.state,\n            plan: createSelectTransportPlan({\n              buildTypedSelectQuery,\n              columns: input.columns,\n              options: input.options,\n              state: input.state,\n              tableName: resolvedTableName,\n            }),\n            tableName: resolvedTableName,\n          })\n        : undefined;\n      return executeRead(behavior, () =>\n        executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/fetch\",\n            operation: \"select\",\n            options: input.options,\n            payload: canonical.ast,\n            sql: buildDebugSelectQuery({\n              columns: input.columns,\n              conditions: input.state.conditions,\n              limit: input.state.limit,\n              offset: input.state.offset,\n              order: input.state.order,\n              tableName: resolvedTableName,\n            }),\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await gateway.fetchGateway<T>(\n              canonical.ast,\n              input.options\n            );\n            return formatGatewayResult(response, {\n              operation: \"select\",\n              table: resolvedTableName,\n            });\n          },\n          input.callsite\n        )\n      );\n    }\n  }\n  const plan = createSelectTransportPlan({\n    buildTypedSelectQuery,\n    columns: input.columns,\n    options: input.options,\n    state: input.state,\n    tableName: resolvedTableName,\n  });\n  const debugAst = behavior?.debugAst\n    ? (input.debugAstFactory?.({\n        columns: input.columns,\n        executionState: input.state,\n        plan,\n        tableName: resolvedTableName,\n      }) ??\n      buildSelectDebugAst({\n        columns: input.columns,\n        plan,\n        state: input.state,\n        tableName: resolvedTableName,\n      }))\n    : undefined;\n  const includeSql =\n    input.state.relations && input.state.relations.length > 0\n      ? buildIncludeJoinSelectQuery({\n          columns: input.columns,\n          conditions: input.state.conditions,\n          limit: input.state.limit,\n          offset: input.state.offset,\n          order: input.state.order,\n          relations: input.state.relations,\n          tableName: resolvedTableName,\n        })\n      : null;\n\n  if (plan.kind === \"query\") {\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          ast: debugAst,\n          endpoint: \"/gateway/query\",\n          operation: \"select\",\n          options: input.options,\n          payload: plan.payload,\n          sql: includeSql ?? plan.query,\n          table: resolvedTableName,\n        },\n        async () => {\n          const response = await gateway.queryGateway<T>(\n            plan.payload,\n            input.options\n          );\n          return formatGatewayResult(response, {\n            operation: \"select\",\n            table: resolvedTableName,\n          });\n        },\n        input.callsite\n      )\n    );\n  }\n\n  const sql =\n    includeSql ??\n    buildDebugSelectQuery({\n      tableName: resolvedTableName,\n      ...plan.debug,\n    });\n  return executeRead(behavior, () =>\n    executeWithQueryTrace(\n      tracer,\n      {\n        ast: debugAst,\n        endpoint: \"/gateway/fetch\",\n        operation: \"select\",\n        options: input.options,\n        payload: plan.payload,\n        sql,\n        table: resolvedTableName,\n      },\n      async () => {\n        const response = await gateway.fetchGateway<T>(\n          plan.payload,\n          input.options\n        );\n        return formatGatewayResult(response, {\n          operation: \"select\",\n          table: resolvedTableName,\n        });\n      },\n      input.callsite\n    )\n  );\n}\n","import type { AthenaResult } from \"../../result/types.ts\";\nimport { applyCardinality } from \"../../result/cardinality.ts\";\nimport { requireAffected } from \"../../auxiliaries.ts\";\nimport {\n  attachTransactionCompiler,\n  nextTransactionOperationId,\n} from \"../../db/transaction/index.ts\";\nimport type {\n  AthenaExecuteOptions,\n  AthenaQueryDescriptor,\n} from \"../../query/descriptor.ts\";\nimport type { AthenaModelTarget } from \"../../schema/types.ts\";\nimport { createCapturedAthenaExecutable } from \"../../query/descriptor.ts\";\nimport type { AthenaGatewayCallOptions } from \"../../gateway/types.ts\";\nimport type {\n  AthenaProjectedMutationResult,\n  AthenaSelectInput,\n  AthenaSelectResult,\n  AthenaValidatedSelectInput,\n} from \"../../select-column-types.ts\";\nimport type {\n  AthenaQueryTraceCallsite,\n  MutationQuery,\n} from \"../contracts.ts\";\nimport { createTraceCallsiteStore, captureTraceCallsite } from \"../../query-tracing.ts\";\n\ntype MutationResultRow<Result> =\n  Result extends Array<infer Item> ? Item : Result;\ntype MutationSingleResult<Result> =\n  Result extends Array<infer Item> ? Item | null : Result | null;\ntype MutationSelectedResult<\n  Result,\n  Row,\n  TOverride,\n  TColumns extends AthenaSelectInput,\n> = AthenaProjectedMutationResult<\n  Result,\n  AthenaSelectResult<Row, TOverride, TColumns>\n>;\ntype MutationSingleSelectedResult<\n  Result,\n  Row,\n  TOverride,\n  TColumns extends AthenaSelectInput,\n> = AthenaProjectedMutationResult<\n  MutationSingleResult<Result>,\n  AthenaSelectResult<Row, TOverride, TColumns>\n>;\n\nexport function createMutationQuery<Result, Row = MutationResultRow<Result>>(\n  executor: (\n    columns?: string | string[],\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => Promise<AthenaResult<Result>>,\n  defaultColumns: AthenaSelectInput | null = \"*\",\n  tracer?: import(\"../../query-tracing.ts\").AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n  executable?: {\n    getDescriptor: (\n      projection: AthenaSelectInput | undefined\n    ) => AthenaQueryDescriptor;\n    model?: AthenaModelTarget;\n  },\n  compileTransaction?: (\n    columns: string | string[] | undefined,\n    options?: AthenaGatewayCallOptions\n  ) => {\n    kind: \"fetch\" | \"insert\" | \"update\" | \"delete\";\n    payload:\n      | import(\"../../gateway/types.ts\").AthenaFetchPayload\n      | import(\"../../gateway/types.ts\").AthenaInsertPayload\n      | import(\"../../gateway/types.ts\").AthenaUpdatePayload\n      | import(\"../../gateway/types.ts\").AthenaDeletePayload;\n  }\n): MutationQuery<Result, Row> {\n  let selectedColumns: AthenaSelectInput | undefined =\n    defaultColumns === null ? undefined : defaultColumns;\n  let selectedOptions: AthenaGatewayCallOptions | undefined;\n  let promise: Promise<AthenaResult<Result>> | null = null;\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n  const projectResult = <Projected>(\n    result: AthenaResult<unknown>\n  ): AthenaResult<Projected> => ({\n    ...result,\n    data: result.data as Projected,\n  });\n  const projectCardinality = <Projected, Single>(\n    result: AthenaResult<Projected>,\n    mode: \"single\" | \"maybeSingle\"\n  ): AthenaResult<Single> => {\n    const cardinality = applyCardinality(result, mode);\n    return {\n      ...cardinality,\n      data: cardinality.data as Single,\n    };\n  };\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => {\n    const payloadColumns = columns ?? selectedColumns;\n    const payloadOptions = options ?? selectedOptions;\n    if (!promise) {\n      promise = executor(\n        normalizeSelectColumnsInput(payloadColumns),\n        payloadOptions,\n        callsiteStore.resolve(callsite)\n      );\n    }\n    return promise;\n  };\n\n  const mutationQuery: MutationQuery<Result, Row> = {\n    capture() {\n      const capturedColumns = selectedColumns;\n      const capturedOptions = selectedOptions;\n      return createCapturedAthenaExecutable({\n        descriptor: mutationQuery.getDescriptor(),\n        execute: (executeOptions) =>\n          run(capturedColumns, {\n            ...capturedOptions,\n            signal: executeOptions?.signal ?? capturedOptions?.signal,\n          }),\n        model: executable?.model,\n      });\n    },\n    catch(onrejected) {\n      return run(selectedColumns, selectedOptions).catch(onrejected);\n    },\n    execute(executeOptions?: AthenaExecuteOptions) {\n      return run(selectedColumns, {\n        ...selectedOptions,\n        signal: executeOptions?.signal ?? selectedOptions?.signal,\n      });\n    },\n    finally(onfinally) {\n      return run(selectedColumns, selectedOptions).finally(onfinally);\n    },\n    getDescriptor() {\n      if (!executable) {\n        throw new Error(\n          \"Mutation query is missing a descriptor compiler. Pass getDescriptor when constructing the mutation.\"\n        );\n      }\n      return executable.getDescriptor(selectedColumns);\n    },\n    maybeSingle<\n      TOverride = never,\n      const TColumns extends AthenaSelectInput = string,\n    >(\n      columns?: AthenaValidatedSelectInput<Row, TColumns>,\n      options?: AthenaGatewayCallOptions\n    ): Promise<\n      AthenaResult<\n        MutationSingleSelectedResult<Result, Row, TOverride, TColumns>\n      >\n    > {\n      if (columns !== undefined) {\n        selectedColumns = columns;\n      }\n      selectedOptions = options ?? selectedOptions;\n      return run(\n        columns ?? selectedColumns,\n        options ?? selectedOptions,\n        captureTraceCallsite(tracer)\n      ).then((result) =>\n        projectCardinality<\n          MutationSelectedResult<Result, Row, TOverride, TColumns>,\n          MutationSingleSelectedResult<Result, Row, TOverride, TColumns>\n        >(\n          projectResult<\n            MutationSelectedResult<Result, Row, TOverride, TColumns>\n          >(result),\n          \"maybeSingle\"\n        )\n      );\n    },\n    async requireAffected(options?: { min?: number }) {\n      const result = await run(selectedColumns, selectedOptions);\n      requireAffected(result, options, {\n        operation: executable ? \"mutation\" : undefined,\n      });\n      return result;\n    },\n    returning<\n      TOverride = never,\n      const TColumns extends AthenaSelectInput = string,\n    >(\n      columns?: AthenaValidatedSelectInput<Row, TColumns>,\n      options?: AthenaGatewayCallOptions\n    ): Promise<\n      AthenaResult<MutationSelectedResult<Result, Row, TOverride, TColumns>>\n    > {\n      return mutationQuery.select<TOverride, TColumns>(columns, options);\n    },\n    select<\n      TOverride = never,\n      const TColumns extends AthenaSelectInput = string,\n    >(\n      columns?: AthenaValidatedSelectInput<Row, TColumns>,\n      options?: AthenaGatewayCallOptions\n    ): Promise<\n      AthenaResult<MutationSelectedResult<Result, Row, TOverride, TColumns>>\n    > {\n      selectedColumns = columns;\n      selectedOptions = options ?? selectedOptions;\n      return run(columns, options, captureTraceCallsite(tracer)).then((result) =>\n        projectResult<\n          MutationSelectedResult<Result, Row, TOverride, TColumns>\n        >(result)\n      );\n    },\n    single<\n      TOverride = never,\n      const TColumns extends AthenaSelectInput = string,\n    >(\n      columns?: AthenaValidatedSelectInput<Row, TColumns>,\n      options?: AthenaGatewayCallOptions\n    ): Promise<\n      AthenaResult<\n        MutationSingleSelectedResult<Result, Row, TOverride, TColumns>\n      >\n    > {\n      if (columns !== undefined) {\n        selectedColumns = columns;\n      }\n      selectedOptions = options ?? selectedOptions;\n      return run(\n        columns ?? selectedColumns,\n        options ?? selectedOptions,\n        captureTraceCallsite(tracer)\n      ).then((result) =>\n        projectCardinality<\n          MutationSelectedResult<Result, Row, TOverride, TColumns>,\n          MutationSingleSelectedResult<Result, Row, TOverride, TColumns>\n        >(\n          projectResult<\n            MutationSelectedResult<Result, Row, TOverride, TColumns>\n          >(result),\n          \"single\"\n        )\n      );\n    },\n    then(onfulfilled, onrejected) {\n      return run(selectedColumns, selectedOptions).then(\n        onfulfilled,\n        onrejected\n      );\n    },\n  };\n\n  if (executable?.model) {\n    Object.defineProperty(mutationQuery, \"model\", {\n      enumerable: true,\n      value: executable.model,\n    });\n  }\n\n  if (compileTransaction) {\n    attachTransactionCompiler(mutationQuery, () => {\n      const compiled = compileTransaction(\n        normalizeSelectColumnsInput(selectedColumns),\n        selectedOptions\n      );\n      if (!compiled) {\n        throw new Error(\"Mutation transaction compiler is unavailable\");\n      }\n      return {\n        descriptor: mutationQuery.getDescriptor(),\n        id: nextTransactionOperationId(),\n        index: 0,\n        kind: compiled.kind,\n        payload: compiled.payload,\n      } as import(\"../../db/transaction/types.ts\").AthenaTransactionOperation;\n    });\n  }\n\n  return mutationQuery;\n}\n\nfunction normalizeSelectColumnsInput(\n  columns?: AthenaSelectInput\n): string | string[] | undefined {\n  if (columns === undefined) {\n    return;\n  }\n  return typeof columns === \"string\" ? columns : [...columns];\n}\n","export { createMutationQuery } from \"../../query/execution/mutation.ts\";\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionCastType,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n} from \"../../gateway/types.ts\";\nimport { shouldUseUuidTextComparison } from \"../../query-ast.ts\";\nimport type {\n  ConditionCastHints,\n  FilterChain,\n  OrderOptions,\n  TableBuilderState,\n} from \"./types.ts\";\n\nexport function createFilterMethods<Self, Row>(\n  state: TableBuilderState,\n  addCondition: (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints\n  ) => void,\n  self: Self\n): FilterChain<Self, Row> {\n  return {\n    containedBy(column, values) {\n      addCondition(\"containedBy\", String(column), values);\n      return self;\n    },\n    contains(column, values) {\n      addCondition(\"contains\", String(column), values);\n      return self;\n    },\n    currentPage(value) {\n      state.currentPage = value;\n      return self;\n    },\n    eq(column, value) {\n      const columnName = String(column);\n      addCondition(\n        \"eq\",\n        columnName,\n        value,\n        shouldUseUuidTextComparison(columnName, value)\n          ? { columnCast: \"text\" }\n          : undefined\n      );\n      return self;\n    },\n    eqCast(column, value, cast: AthenaConditionCastType) {\n      addCondition(\"eq\", String(column), value, { valueCast: cast });\n      return self;\n    },\n    eqUuid(column, value) {\n      addCondition(\"eq\", String(column), value, { valueCast: \"uuid\" });\n      return self;\n    },\n    gt(column, value) {\n      addCondition(\"gt\", String(column), value);\n      return self;\n    },\n    gte(column, value) {\n      addCondition(\"gte\", String(column), value);\n      return self;\n    },\n    ilike(column, value) {\n      addCondition(\"ilike\", String(column), value);\n      return self;\n    },\n    in(column, values) {\n      addCondition(\"in\", String(column), values);\n      return self;\n    },\n    is(column, value) {\n      addCondition(\"is\", String(column), value);\n      return self;\n    },\n    like(column, value) {\n      addCondition(\"like\", String(column), value);\n      return self;\n    },\n    limit(count) {\n      state.limit = count;\n      return self;\n    },\n    lt(column, value) {\n      addCondition(\"lt\", String(column), value);\n      return self;\n    },\n    lte(column, value) {\n      addCondition(\"lte\", String(column), value);\n      return self;\n    },\n    match(filters) {\n      for (const [column, value] of Object.entries(\n        filters as Record<string, AthenaConditionValue | undefined>\n      )) {\n        if (value === undefined) {\n          continue;\n        }\n        addCondition(\n          \"eq\",\n          column,\n          value,\n          shouldUseUuidTextComparison(column, value)\n            ? { columnCast: \"text\" }\n            : undefined\n        );\n      }\n      return self;\n    },\n    neq(column, value) {\n      addCondition(\"neq\", String(column), value);\n      return self;\n    },\n    not(columnOrExpression, operator, value) {\n      const expression = String(columnOrExpression);\n      addCondition(\n        \"not\",\n        undefined,\n        operator !== null && value !== undefined\n          ? `${expression}.${operator}.${stringifyFilterValue(value)}`\n          : expression\n      );\n      return self;\n    },\n    offset(count) {\n      state.offset = count;\n      return self;\n    },\n    or(expression) {\n      addCondition(\"or\", undefined, expression);\n      return self;\n    },\n    order(column, options?: OrderOptions) {\n      state.order = {\n        direction: options?.ascending === false ? \"descending\" : \"ascending\",\n        field: String(column),\n      };\n      return self;\n    },\n    pageSize(value) {\n      state.pageSize = value;\n      return self;\n    },\n    range(from, to) {\n      state.offset = from;\n      state.limit = to - from + 1;\n      return self;\n    },\n    totalPages(value) {\n      state.totalPages = value;\n      return self;\n    },\n  };\n}\n\nfunction stringifyFilterValue(\n  value: AthenaConditionValue | AthenaConditionArrayValue | string\n): string {\n  return Array.isArray(value) ? value.join(\",\") : String(value);\n}\n","import type {\n  AthenaSelectInput,\n} from \"../../select-column-types.ts\";\n\nimport type { TableBuilderState } from \"../../query/contracts.ts\";\n\nexport type {\n  ConditionCastHints,\n  TableBuilderState,\n} from \"../../query/contracts.ts\";\n\nexport function cloneTableBuilderState(\n  state: TableBuilderState\n): TableBuilderState {\n  return {\n    cacheContext: state.cacheContext,\n    conditions: state.conditions.map((condition) => ({ ...condition })),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    model: state.model,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    relations: state.relations?.map((relation) => ({\n      ...relation,\n      columns: relation.columns ? [...relation.columns] : undefined,\n      sourceColumns: relation.sourceColumns\n        ? [...relation.sourceColumns]\n        : undefined,\n      targetColumns: relation.targetColumns\n        ? [...relation.targetColumns]\n        : undefined,\n    })),\n    totalPages: state.totalPages,\n  };\n}\n\nexport function collectChangedFields(values: unknown): string[] {\n  if (Array.isArray(values)) {\n    const keys = new Set<string>();\n    for (const value of values) {\n      if (value && typeof value === \"object\") {\n        for (const key of Object.keys(value)) {\n          keys.add(key);\n        }\n      }\n    }\n    return [...keys];\n  }\n  return values && typeof values === \"object\"\n    ? Object.keys(values)\n    : [];\n}\n\nexport function normalizeSelectColumnsInput(\n  columns?: AthenaSelectInput\n): string | string[] | undefined {\n  if (columns === undefined) {\n    return;\n  }\n  return typeof columns === \"string\" ? columns : [...columns];\n}\n","import type { AthenaResult } from \"../../result/types.ts\";\nimport { applyCardinality } from \"../../result/cardinality.ts\";\nimport { executeRead } from \"../../result/read.ts\";\nimport {\n  buildDebugSelectQuery,\n  buildDeleteDebugSql,\n  buildInsertDebugSql,\n  buildTypedSelectQuery,\n  buildUpdateDebugSql,\n  resolveTableNameForCall,\n} from \"../../client-sql.ts\";\nimport type {\n  AthenaConditionArrayValue,\n  AthenaConditionCastType,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaRpcCallOptions,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\n\nexport type {\n  AthenaRequestMethod,\n  AthenaRequestOptions,\n  AthenaRequestQueryValueMap,\n  AthenaRequestResponse,\n  AthenaRequestService,\n} from \"../../client-request.ts\";\nexport type { AthenaResult, AthenaResultError } from \"../../result/types.ts\";\n\nimport { AthenaTransactionError } from \"../../db/transaction/errors.ts\";\nimport {\n  attachTransactionCompiler,\n  nextTransactionOperationId,\n} from \"../../db/transaction/index.ts\";\nimport type {\n  AthenaCacheContextDescriptor,\n  AthenaExecutable,\n  AthenaExecuteOptions,\n  AthenaQueryDescriptor,\n  AthenaQueryOperation,\n} from \"../../query/descriptor.ts\";\nimport {\n  compileAthenaQueryDescriptor,\n  createCapturedAthenaExecutable,\n} from \"../../query/descriptor.ts\";\nimport type {\n  AthenaFindManyOptions,\n  AthenaFindManyResult,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n} from \"../../query-ast.ts\";\nimport {\n  compileOrderBy,\n  compileSelectShape,\n  compileWhere,\n  selectShapeHasFirstSelection,\n  selectShapeHasNestedQueryModifiers,\n  selectShapeUsesRelationSchema,\n} from \"../../query-ast.ts\";\nimport type { AthenaQueryDebugAst } from \"../../query-debug-ast.ts\";\nimport {\n  buildDeleteDebugAst,\n  buildFindManyCompiledDebugAst,\n  buildFindManyDirectDebugAst,\n  buildInsertDebugAst,\n  buildUpdateDebugAst,\n  buildUpsertDebugAst,\n} from \"../../query-debug-ast.ts\";\nimport {\n  captureTraceCallsite,\n  createTraceCallsiteStore,\n  executeWithQueryTrace,\n} from \"../../query-tracing.ts\";\nimport type { AthenaFindManyAstPayload } from \"../../query-transport.ts\";\nimport {\n  canUseFindManyAstTransport,\n  createSelectTransportPlan,\n  findManyAstWhereRequiresLegacyTransport,\n  normalizeFindManyAstWhere,\n  toFindManyAstOrder,\n} from \"../../query-transport.ts\";\nimport type {\n  AthenaSelectInput,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n  AthenaSelectResult,\n} from \"../../select-column-types.ts\";\n\nexport type {\n  AthenaColumnKey,\n  AthenaColumnKeyWithAutocomplete,\n  AthenaResolvedColumnKey,\n  AthenaSelectArrayElement,\n  AthenaSelectColumnsFor,\n  AthenaSelectInput,\n  AthenaSelectInputHints,\n  AthenaOpaqueSelectRow,\n  AthenaProjectedMutationResult,\n  AthenaSelectResult,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n  HasKnownSelectColumns,\n} from \"../../select-column-types.ts\";\n\nimport type {\n  AthenaClientModelForTableName,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from \"../../schema/types.ts\";\nimport type { AthenaQueryExecutionRuntime } from \"../../query/execution/operation.ts\";\nimport { executeAthenaSelect } from \"../../query/execution/select.ts\";\nimport { createMutationQuery } from \"./mutation-query.ts\";\nimport { createFilterMethods } from \"./filters.ts\";\nimport {\n  collectChangedFields,\n  normalizeSelectColumnsInput,\n} from \"./state.ts\";\nimport type {\n  ConditionCastHints,\n  TableBuilderState,\n} from \"./state.ts\";\nimport type {\n  AthenaQueryTraceCallsite,\n  MutationQuery,\n} from \"../../query/contracts.ts\";\nexport type { MutationQuery } from \"../../query/contracts.ts\";\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. */\nexport type ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : string extends FilterColumnKey<Row>\n    ? string\n    : FilterColumnKey<Row>;\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n *   Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\nexport type UntypedTableName<TModels> = [TModels] extends [never]\n  ? string\n  : [AthenaClientTableName<TModels>] extends [never]\n    ? string\n    : AthenaClientTableName<TModels>;\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n  AthenaClientModelForTableName<TModels, TTableName>,\n  AthenaModelTarget\n>;\nexport type ClientTableQueryBuilder<\n  TModels,\n  TTableName extends string,\n> = TableQueryBuilder<\n  RowOf<ResolvedClientTableModel<TModels, TTableName>>,\n  InsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n  UpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>;\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n  Row,\n  TValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>;\nconst DEFAULT_COLUMNS = \"*\";\n\ntype SelectDebugAstFactory = (input: {\n  tableName: string;\n  columns: string | string[];\n  executionState: TableBuilderState;\n  plan: ReturnType<typeof createSelectTransportPlan>;\n}) => AthenaQueryDebugAst;\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n  ...options: Array<T | undefined>\n): T | undefined {\n  return options.reduce<T | undefined>((acc, next) => {\n    if (!next) {\n      return acc;\n    }\n    const merged = { ...(acc ?? {}), ...next } as T;\n    if (acc?.headers || next.headers) {\n      merged.headers = {\n        ...(acc?.headers ?? {}),\n        ...(next.headers ?? {}),\n      };\n    }\n    return merged;\n  }, undefined);\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n  return value as unknown as AthenaJsonObject;\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n  return values as unknown as AthenaJsonObject[];\n}\n\nexport interface OrderOptions {\n  ascending?: boolean;\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\nexport interface FilterChain<Self, Row> {\n  containedBy: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  contains: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  currentPage: (value: number) => Self;\n  eq: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  eqCast: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue,\n    cast: AthenaConditionCastType\n  ) => Self;\n  eqUuid: (column: ResolvedFilterColumnKey<Row>, value: string) => Self;\n  gt: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gte: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  ilike: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  in: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  is: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  like: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  limit: (count: number) => Self;\n  lt: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lte: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  match: (\n    filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>\n  ) => Self;\n  neq: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  not: (\n    columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n    operator?: AthenaConditionOperator,\n    value?: AthenaConditionValue\n  ) => Self;\n  offset: (count: number) => Self;\n  or: (expression: string) => Self;\n  order: (column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) => Self;\n  pageSize: (value: number) => Self;\n  range: (from: number, to: number) => Self;\n  totalPages: (value: number) => Self;\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n  extends FilterChain<SelectChain<Row, SelectedRow>, Row>,\n    PromiseLike<AthenaResult<SelectedRow[]>>,\n    AthenaExecutable<AthenaResult<SelectedRow[]>> {\n  maybeSingle: <\n    TOverride = never,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<\n    AthenaResult<\n      AthenaSelectResult<SelectedRow, TOverride, TColumns> | null\n    >\n  >;\n  single: <\n    TOverride = never,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<\n    AthenaResult<\n      AthenaSelectResult<SelectedRow, TOverride, TColumns> | null\n    >\n  >;\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n  extends FilterChain<UpdateChain<Row>, Row>,\n    MutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n  eq: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gt: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gte: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  ilike: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  in: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  is: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  like: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lt: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lte: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  neq: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n}\n\nexport interface RpcOrderOptions {\n  ascending?: boolean;\n}\n\nexport interface RpcQueryBuilder<Row>\n  extends RpcFilterChain<RpcQueryBuilder<Row>, Row>,\n    PromiseLike<AthenaResult<Row[]>> {\n  limit: (count: number) => RpcQueryBuilder<Row>;\n  maybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n  offset: (count: number) => RpcQueryBuilder<Row>;\n  order: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    options?: RpcOrderOptions\n  ) => RpcQueryBuilder<Row>;\n  range: (from: number, to: number) => RpcQueryBuilder<Row>;\n  select: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  single: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n}\n\nexport interface AthenaFromOptions {\n  schema?: string;\n}\n\nexport interface TableQueryIncludeSpec {\n  schema?: string;\n  select?: readonly string[];\n  targetModel?: string;\n}\n\nexport type TableQueryIncludeRelations = Record<\n  string,\n  TableQueryIncludeSpec | true\n>;\n\nexport interface TableQueryBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n  delete: (\n    options?: AthenaGatewayCallOptions & { resourceId?: string }\n  ) => MutationQuery<Row | null, Row>;\n  findMany: <const TSelect extends AthenaSelectShape>(\n    options: AthenaFindManyOptions<Row, TSelect> & {\n      select: AthenaValidatedSelectShape<Row, TSelect>;\n    }\n  ) => Promise<AthenaResult<AthenaFindManyResult<Row, TSelect, TContext>[]>>;\n  include: (\n    relations: TableQueryIncludeRelations\n  ) => TableQueryBuilder<Row, Insert, Update, TContext>;\n  insert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions\n  ): MutationQuery<Row, Row>;\n  insert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions\n  ): MutationQuery<Row[], Row>;\n  maybeSingle: <\n    TOverride = never,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<\n    AthenaResult<\n      AthenaSelectResult<Row, TOverride, TColumns> | null\n    >\n  >;\n  readonly model?: AthenaModelTarget;\n  reset: () => TableQueryBuilder<Row, Insert, Update, TContext>;\n  select: <TOverride = never, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => SelectChain<Row, AthenaSelectResult<Row, TOverride, TColumns>>;\n  single: <\n    TOverride = never,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<\n    AthenaResult<AthenaSelectResult<Row, TOverride, TColumns> | null>\n  >;\n  update: (\n    values: Update,\n    options?: AthenaGatewayCallOptions\n  ) => UpdateChain<Row>;\n  upsert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update;\n      onConflict?:\n        | ResolvedFilterColumnKey<Row>\n        | ResolvedFilterColumnKey<Row>[]\n        | (string & {})\n        | Array<string & {}>;\n    }\n  ): MutationQuery<Row, Row>;\n  upsert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update;\n      onConflict?:\n        | ResolvedFilterColumnKey<Row>\n        | ResolvedFilterColumnKey<Row>[]\n        | (string & {})\n        | Array<string & {}>;\n    }\n  ): MutationQuery<Row[], Row>;\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n  const candidate = state.conditions.find(\n    (condition) =>\n      condition.operator === \"eq\" &&\n      (condition.column === \"resource_id\" || condition.column === \"id\")\n  );\n  return candidate?.value?.toString();\n}\n\nexport function createTableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n>(\n  tableName: string,\n  runtime: AthenaQueryExecutionRuntime,\n  builderOptions?: {\n    cacheContext?: AthenaCacheContextDescriptor;\n    model?: AthenaModelTarget;\n  }\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n  const {\n    behavior,\n    formatGatewayResult,\n    gateway: client,\n    tracer,\n  } = runtime;\n  const state: TableBuilderState = {\n    cacheContext: builderOptions?.cacheContext,\n    conditions: [],\n    model: builderOptions?.model,\n  };\n  const debugAstEnabled = Boolean(behavior?.debugAst);\n\n  const addCondition = (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints\n  ) => {\n    const condition: AthenaGatewayCondition = { operator };\n    if (column) {\n      condition.column = column;\n      if (operator === \"eq\") {\n        // include legacy gateway shape for compatibility\n        condition.eq_column = column;\n      }\n    }\n    if (value !== undefined) {\n      condition.value = value;\n      if (operator === \"eq\") {\n        condition.eq_value = value;\n      }\n    }\n    if (hints?.valueCast) {\n      condition.value_cast = hints.valueCast;\n      if (operator === \"eq\") {\n        condition.eq_value_cast = hints.valueCast;\n      }\n    }\n    if (hints?.columnCast) {\n      condition.column_cast = hints.columnCast;\n      if (operator === \"eq\") {\n        condition.eq_column_cast = hints.columnCast;\n      }\n    }\n    state.conditions.push(condition);\n  };\n\n  const snapshotState = (): TableBuilderState => ({\n    cacheContext: state.cacheContext,\n    conditions: state.conditions.map((condition) => ({ ...condition })),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    model: state.model,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    relations: state.relations ? [...state.relations] : undefined,\n    totalPages: state.totalPages,\n  });\n\n  const compileDescriptor = (\n    operation: AthenaQueryOperation,\n    projection?: AthenaSelectInput | null,\n    changedFields?: readonly string[]\n  ): AthenaQueryDescriptor =>\n    compileAthenaQueryDescriptor({\n      changedFields,\n      conditions: state.conditions,\n      context: state.cacheContext,\n      currentPage: state.currentPage,\n      limit: state.limit,\n      model: state.model,\n      offset: state.offset,\n      operation,\n      order: state.order,\n      pageSize: state.pageSize,\n      projection:\n        projection === null\n          ? null\n          : (normalizeSelectColumnsInput(projection) ?? \"*\"),\n      relations: state.relations,\n      tableName,\n    });\n\n  const mutationExecutable = (\n    operation: AthenaQueryOperation,\n    changedFields?: readonly string[]\n  ) => ({\n    getDescriptor: (projection: AthenaSelectInput | undefined) =>\n      compileDescriptor(operation, projection ?? null, changedFields),\n    model: state.model,\n  });\n\n  const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>;\n\n  const filterMethods = createFilterMethods<\n    TableQueryBuilder<Row, Insert, Update, TContext>,\n    Row\n  >(state, addCondition, builder);\n\n  const runSelect = async <T = Row>(\n    columns: AthenaSelectInput = DEFAULT_COLUMNS,\n    options?: AthenaGatewayCallOptions,\n    executionState: TableBuilderState = snapshotState(),\n    callsite?: AthenaQueryTraceCallsite | null,\n    debugAstFactory?: SelectDebugAstFactory\n  ) => {\n    const runtimeColumns =\n      normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n    return executeAthenaSelect<T>({\n      columns: runtimeColumns,\n      debugAstFactory,\n      options,\n      runtime,\n      state: executionState,\n      tableName,\n      callsite,\n    });\n  };\n\n  const createSelectChain = <SelectedRow>(\n    columns: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    initialCallsite?: AthenaQueryTraceCallsite | null\n  ): SelectChain<Row, SelectedRow> => {\n    const chain = {} as SelectChain<Row, SelectedRow>;\n    const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n    const filterMethods = createFilterMethods<\n      SelectChain<Row, SelectedRow>,\n      Row\n    >(state, addCondition, chain);\n    Object.assign(chain, filterMethods, {\n      capture() {\n        const frozenState = snapshotState();\n        return createCapturedAthenaExecutable({\n          descriptor: compileDescriptor(\"select\", columns),\n          execute: (executeOptions) =>\n            runSelect<SelectedRow[]>(\n              columns,\n              {\n                ...options,\n                signal: executeOptions?.signal ?? options?.signal,\n              },\n              frozenState,\n              callsiteStore.resolve()\n            ),\n          model: state.model,\n        });\n      },\n      catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).catch(onrejected);\n      },\n      execute(executeOptions?: AthenaExecuteOptions) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          {\n            ...options,\n            signal: executeOptions?.signal ?? options?.signal,\n          },\n          snapshotState(),\n          callsiteStore.resolve()\n        );\n      },\n      finally(onfinally?: () => void) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).finally(onfinally);\n      },\n      getDescriptor() {\n        return compileDescriptor(\"select\", columns);\n      },\n      maybeSingle<T = SelectedRow>(\n        cols?: AthenaSelectInput,\n        opts?: AthenaGatewayCallOptions\n      ) {\n        return runSelect<T[]>(\n          cols ?? columns,\n          opts ?? options,\n          snapshotState(),\n          callsiteStore.resolve(captureTraceCallsite(tracer))\n        ).then((r) => applyCardinality(r, \"maybeSingle\"));\n      },\n      model: state.model,\n      async single<T = SelectedRow>(\n        cols?: AthenaSelectInput,\n        opts?: AthenaGatewayCallOptions\n      ) {\n        const r = await runSelect<T[]>(\n          cols ?? columns,\n          opts ?? options,\n          snapshotState(),\n          callsiteStore.resolve(captureTraceCallsite(tracer))\n        );\n        return applyCardinality(r, \"single\");\n      },\n      // Thenable so `await query` resolves the deferred run without an extra API.\n      // biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n      then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n        onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n        onrejected?: (reason: unknown) => T2 | PromiseLike<T2>\n      ) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).then(onfulfilled, onrejected);\n      },\n    });\n    attachTransactionCompiler(chain, () => {\n      const executionState = snapshotState();\n      const runtimeColumns =\n        normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n      const resolvedTableName = resolveTableNameForCall(\n        tableName,\n        options?.schema\n      );\n      const plan = createSelectTransportPlan({\n        buildTypedSelectQuery,\n        columns: runtimeColumns,\n        options,\n        state: executionState,\n        tableName: resolvedTableName,\n      });\n      if (plan.kind !== \"fetch\") {\n        throw new AthenaTransactionError(\n          \"ATHENA_TRANSACTION_OPERATION_UNSUPPORTED\",\n          \"This select cannot be compiled into a portable transaction fetch (raw SQL fallback is not transaction IR)\",\n          { table: resolvedTableName }\n        );\n      }\n      return {\n        descriptor: compileDescriptor(\"select\", columns),\n        id: nextTransactionOperationId(),\n        index: 0,\n        kind: \"fetch\",\n        payload: plan.payload,\n      };\n    });\n    return chain;\n  };\n\n  Object.assign(builder, filterMethods, {\n    delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n      const filters = state.conditions.length\n        ? [...state.conditions]\n        : undefined;\n      const resourceId = options?.resourceId ?? getResourceId(state);\n      if (!(resourceId || filters?.length)) {\n        throw new Error(\n          'delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId'\n        );\n      }\n      const mutationCallsite = captureTraceCallsite(tracer);\n      const executeDelete = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const executionState = snapshotState();\n        const debugState: TableBuilderState = {\n          ...executionState,\n          conditions: filters\n            ? filters.map((condition) => ({ ...condition }))\n            : [],\n        };\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaDeletePayload = {\n          conditions: filters,\n          resource_id: resourceId,\n          table_name: resolvedTableName,\n        };\n        if (executionState.order) {\n          payload.sort_by = executionState.order;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        if (executionState.offset !== undefined) {\n          payload.offset = executionState.offset;\n        }\n        if (executionState.currentPage !== undefined) {\n          payload.current_page = executionState.currentPage;\n        }\n        if (executionState.pageSize !== undefined) {\n          payload.page_size = executionState.pageSize;\n        }\n        if (executionState.totalPages !== undefined) {\n          payload.total_pages = executionState.totalPages;\n        }\n        if (columns) {\n          payload.columns = columns;\n        }\n        const sql = buildDeleteDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildDeleteDebugAst({\n              payload,\n              state: debugState,\n            })\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/delete\",\n            operation: \"delete\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.deleteGateway<Row | null>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"delete\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row | null>(\n        executeDelete,\n        null,\n        tracer,\n        mutationCallsite,\n        mutationExecutable(\"delete\"),\n        (columns, selectOptions) => {\n          const executionState = snapshotState();\n          const filters = executionState.conditions.length\n            ? [...executionState.conditions]\n            : undefined;\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaDeletePayload = {\n            conditions: filters,\n            resource_id: resourceId,\n            table_name: resolvedTableName,\n          };\n          if (executionState.order) {\n            payload.sort_by = executionState.order;\n          }\n          if (executionState.limit !== undefined) {\n            payload.limit = executionState.limit;\n          }\n          if (executionState.offset !== undefined) {\n            payload.offset = executionState.offset;\n          }\n          if (executionState.currentPage !== undefined) {\n            payload.current_page = executionState.currentPage;\n          }\n          if (executionState.pageSize !== undefined) {\n            payload.page_size = executionState.pageSize;\n          }\n          if (executionState.totalPages !== undefined) {\n            payload.total_pages = executionState.totalPages;\n          }\n          if (columns) {\n            payload.columns = columns;\n          }\n          return { kind: \"delete\", payload };\n        }\n      );\n    },\n    async findMany<const TSelect extends AthenaSelectShape>(\n      options: AthenaFindManyOptions<Row, TSelect> & {\n        select: AthenaValidatedSelectShape<Row, TSelect>;\n      }\n    ) {\n      const baseState = snapshotState();\n      const executionState = snapshotState();\n      const callsite = captureTraceCallsite(tracer);\n      if (options.orderBy !== undefined) {\n        executionState.order = compileOrderBy<Row>(options.orderBy);\n      }\n      if (options.limit !== undefined) {\n        executionState.limit = options.limit;\n      }\n      const nestedQueryModifiers = selectShapeHasNestedQueryModifiers(\n        options.select\n      );\n      const schemaQualifiedRelation = selectShapeUsesRelationSchema(\n        options.select\n      );\n      const useFindManyAst =\n        Boolean(behavior?.findManyAst) &&\n        canUseFindManyAstTransport(baseState) &&\n        !findManyAstWhereRequiresLegacyTransport(options.where) &&\n        (!schemaQualifiedRelation ||\n          Boolean(behavior?.findManyAstRelationSchema));\n      const columns =\n        useFindManyAst && selectShapeHasFirstSelection(options.select)\n          ? \"*\"\n          : compileSelectShape(options.select);\n      if (!useFindManyAst) {\n        const compiledWhere = compileWhere(options.where);\n        if (compiledWhere?.length) {\n          executionState.conditions.push(...compiledWhere);\n        }\n      }\n      if (!useFindManyAst && nestedQueryModifiers) {\n        throw new Error(\n          \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY: nested relation where/order/limit require the findMany AST path\"\n        );\n      }\n      if (useFindManyAst) {\n        const resolvedTableName = resolveTableNameForCall(tableName, undefined);\n        const payload: AthenaFindManyAstPayload<Row, TSelect> = {\n          select: options.select,\n          table_name: resolvedTableName,\n        };\n        if (options.where !== undefined) {\n          payload.where = normalizeFindManyAstWhere(options.where);\n        }\n        const astOrder = toFindManyAstOrder<Row>(executionState.order);\n        if (astOrder !== undefined) {\n          payload.orderBy = astOrder;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        const sql = buildDebugSelectQuery({\n          columns,\n          conditions: executionState.conditions,\n          limit: executionState.limit,\n          order: executionState.order,\n          tableName: resolvedTableName,\n        });\n        const debugAst = debugAstEnabled\n          ? buildFindManyDirectDebugAst({\n              baseState,\n              compiledColumns: columns,\n              executionState,\n              options,\n              payload,\n              tableName: resolvedTableName,\n            })\n          : undefined;\n        return executeRead(behavior, () =>\n          executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/fetch\",\n              operation: \"select\",\n              payload,\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response =\n                await client.fetchGateway<\n                  AthenaFindManyResult<Row, TSelect, TContext>[]\n                >(payload);\n              return formatGatewayResult(response, {\n                operation: \"select\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          )\n        );\n      }\n      return runSelect<AthenaFindManyResult<Row, TSelect, TContext>[]>(\n        columns,\n        undefined,\n        executionState,\n        callsite,\n        debugAstEnabled\n          ? ({\n              tableName: resolvedTableName,\n              executionState: tracedState,\n              plan,\n            }) =>\n              buildFindManyCompiledDebugAst({\n                baseState,\n                compiledColumns: columns,\n                executionState: tracedState,\n                options,\n                plan,\n                tableName: resolvedTableName,\n              })\n          : undefined\n      );\n    },\n    include(relations: TableQueryIncludeRelations) {\n      const meta = state.model?.meta.relations;\n      state.relations = Object.keys(relations)\n        .sort((left, right) => left.localeCompare(right))\n        .map((name) => {\n          const spec = relations[name];\n          const relMeta = meta?.[name];\n          const selected = spec === true ? undefined : spec?.select;\n          return {\n            columns: selected,\n            name,\n            sourceColumns: relMeta?.sourceColumns,\n            star: spec === true || !selected?.length,\n            targetColumns: relMeta?.targetColumns,\n            targetModel:\n              spec === true\n                ? relMeta?.targetModel\n                : (spec?.targetModel ?? relMeta?.targetModel),\n            targetSchema:\n              spec === true\n                ? relMeta?.targetSchema\n                : (spec?.schema ?? relMeta?.targetSchema),\n            via: relMeta?.targetModel,\n          };\n        });\n      return builder;\n    },\n    insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n      const insertChangedFields = collectChangedFields(values);\n      const mutationCallsite = captureTraceCallsite(tracer);\n      if (Array.isArray(values)) {\n        const executeInsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObjectArray(values),\n            table_name: resolvedTableName,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (mergedOptions?.count) {\n            payload.count = mergedOptions.count;\n          }\n          if (mergedOptions?.head) {\n            payload.head = mergedOptions.head;\n          }\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull;\n          }\n          const sql = buildInsertDebugSql(payload);\n          const debugAst = debugAstEnabled\n            ? buildInsertDebugAst(payload)\n            : undefined;\n          return executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/insert\",\n              operation: \"insert\",\n              options: mergedOptions,\n              payload,\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(\n                payload,\n                mergedOptions\n              );\n              return formatGatewayResult(response, {\n                operation: \"insert\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          );\n        };\n        return createMutationQuery<Row[]>(\n          executeInsertMany,\n          DEFAULT_COLUMNS,\n          tracer,\n          mutationCallsite,\n          mutationExecutable(\"insert\", insertChangedFields),\n          (columns, selectOptions) => {\n            const mergedOptions = mergeOptions(options, selectOptions);\n            const resolvedTableName = resolveTableNameForCall(\n              tableName,\n              mergedOptions?.schema\n            );\n            const payload: AthenaInsertPayload = {\n              insert_body: asAthenaJsonObjectArray(values),\n              table_name: resolvedTableName,\n            };\n            const payloadColumns = normalizeSelectColumnsInput(columns);\n            if (payloadColumns) {\n              payload.columns = payloadColumns;\n            }\n            if (mergedOptions?.count) {\n              payload.count = mergedOptions.count;\n            }\n            if (mergedOptions?.head) {\n              payload.head = mergedOptions.head;\n            }\n            if (mergedOptions?.defaultToNull !== undefined) {\n              payload.default_to_null = mergedOptions.defaultToNull;\n            }\n            return { kind: \"insert\", payload };\n          }\n        );\n      }\n      const executeInsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaInsertPayload = {\n          insert_body: asAthenaJsonObject(values),\n          table_name: resolvedTableName,\n        };\n        if (columns) {\n          payload.columns = columns;\n        }\n        if (mergedOptions?.count) {\n          payload.count = mergedOptions.count;\n        }\n        if (mergedOptions?.head) {\n          payload.head = mergedOptions.head;\n        }\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull;\n        }\n        const sql = buildInsertDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildInsertDebugAst(payload)\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/insert\",\n            operation: \"insert\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"insert\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row>(\n        executeInsertOne,\n        DEFAULT_COLUMNS,\n        tracer,\n        mutationCallsite,\n        mutationExecutable(\"insert\", insertChangedFields),\n        (columns, selectOptions) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObject(values),\n            table_name: resolvedTableName,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (mergedOptions?.count) {\n            payload.count = mergedOptions.count;\n          }\n          if (mergedOptions?.head) {\n            payload.head = mergedOptions.head;\n          }\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull;\n          }\n          return { kind: \"insert\", payload };\n        }\n      );\n    },\n    async maybeSingle<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaGatewayCallOptions\n    ) {\n      const response = await runSelect<T[]>(\n        columns ?? DEFAULT_COLUMNS,\n        options,\n        snapshotState(),\n        captureTraceCallsite(tracer)\n      );\n      return applyCardinality(response, \"maybeSingle\");\n    },\n    model: state.model,\n    reset() {\n      state.conditions = [];\n      state.limit = undefined;\n      state.offset = undefined;\n      state.order = undefined;\n      state.currentPage = undefined;\n      state.pageSize = undefined;\n      state.totalPages = undefined;\n      return builder;\n    },\n    select<T = Row>(\n      columns: AthenaSelectInput = DEFAULT_COLUMNS,\n      options?: AthenaGatewayCallOptions\n    ) {\n      return createSelectChain<T>(\n        columns,\n        options,\n        captureTraceCallsite(tracer)\n      );\n    },\n    async single<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaGatewayCallOptions\n    ) {\n      const response = await runSelect<T[]>(\n        columns ?? DEFAULT_COLUMNS,\n        options,\n        snapshotState(),\n        captureTraceCallsite(tracer)\n      );\n      return applyCardinality(response, \"single\");\n    },\n    update(values: Update, options?: AthenaGatewayCallOptions) {\n      const updateChangedFields = collectChangedFields(values);\n      const mutationCallsite = captureTraceCallsite(tracer);\n      const executeUpdate = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const executionState = snapshotState();\n        const filters = executionState.conditions.length\n          ? [...executionState.conditions]\n          : undefined;\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaUpdatePayload = {\n          conditions: filters,\n          strip_nulls: mergedOptions?.stripNulls ?? true,\n          table_name: resolvedTableName,\n          update_body: asAthenaJsonObject(values),\n        };\n        if (executionState.order) {\n          payload.sort_by = executionState.order;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        if (executionState.offset !== undefined) {\n          payload.offset = executionState.offset;\n        }\n        if (executionState.currentPage !== undefined) {\n          payload.current_page = executionState.currentPage;\n        }\n        if (executionState.pageSize !== undefined) {\n          payload.page_size = executionState.pageSize;\n        }\n        if (executionState.totalPages !== undefined) {\n          payload.total_pages = executionState.totalPages;\n        }\n        if (columns) {\n          payload.columns = columns;\n        }\n        const sql = buildUpdateDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildUpdateDebugAst({\n              payload,\n              state: executionState,\n            })\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/update\",\n            operation: \"update\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.updateGateway<Row[]>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"update\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      const mutation = createMutationQuery<Row[]>(\n        executeUpdate,\n        null,\n        tracer,\n        mutationCallsite,\n        mutationExecutable(\"update\", updateChangedFields),\n        (columns, selectOptions) => {\n          const executionState = snapshotState();\n          const filters = executionState.conditions.length\n            ? [...executionState.conditions]\n            : undefined;\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaUpdatePayload = {\n            conditions: filters,\n            strip_nulls: mergedOptions?.stripNulls ?? true,\n            table_name: resolvedTableName,\n            update_body: asAthenaJsonObject(values),\n          };\n          if (executionState.order) {\n            payload.sort_by = executionState.order;\n          }\n          if (executionState.limit !== undefined) {\n            payload.limit = executionState.limit;\n          }\n          if (executionState.offset !== undefined) {\n            payload.offset = executionState.offset;\n          }\n          if (executionState.currentPage !== undefined) {\n            payload.current_page = executionState.currentPage;\n          }\n          if (executionState.pageSize !== undefined) {\n            payload.page_size = executionState.pageSize;\n          }\n          if (executionState.totalPages !== undefined) {\n            payload.total_pages = executionState.totalPages;\n          }\n          if (columns) {\n            payload.columns = columns;\n          }\n          return { kind: \"update\", payload };\n        }\n      );\n      const updateChain = {} as UpdateChain<Row>;\n      const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(\n        state,\n        addCondition,\n        updateChain\n      );\n      Object.assign(updateChain, filterMethods, mutation);\n      return updateChain;\n    },\n    upsert(\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update;\n        onConflict?: string | string[];\n      }\n    ) {\n      const upsertChangedFields = collectChangedFields(values);\n      const mutationCallsite = captureTraceCallsite(tracer);\n      if (Array.isArray(values)) {\n        const executeUpsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObjectArray(values),\n            table_name: resolvedTableName,\n            update_body: options?.updateBody\n              ? asAthenaJsonObject(options.updateBody)\n              : undefined,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (options?.onConflict) {\n            payload.on_conflict = options.onConflict;\n          }\n          if (mergedOptions?.count) {\n            payload.count = mergedOptions.count;\n          }\n          if (mergedOptions?.head) {\n            payload.head = mergedOptions.head;\n          }\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull;\n          }\n          const sql = buildInsertDebugSql(payload);\n          const debugAst = debugAstEnabled\n            ? buildUpsertDebugAst(payload)\n            : undefined;\n          return executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/insert\",\n              operation: \"upsert\",\n              options: mergedOptions,\n              payload,\n              semanticOperation: \"upsert\",\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(\n                payload,\n                mergedOptions\n              );\n              return formatGatewayResult(response, {\n                operation: \"insert\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          );\n        };\n        return createMutationQuery<Row[]>(\n          executeUpsertMany,\n          DEFAULT_COLUMNS,\n          tracer,\n          mutationCallsite,\n          mutationExecutable(\"upsert\", upsertChangedFields),\n          (columns, selectOptions) => {\n            const mergedOptions = mergeOptions(options, selectOptions);\n            const resolvedTableName = resolveTableNameForCall(\n              tableName,\n              mergedOptions?.schema\n            );\n            const payload: AthenaInsertPayload = {\n              insert_body: asAthenaJsonObjectArray(values as Insert[]),\n              table_name: resolvedTableName,\n              update_body: options?.updateBody\n                ? asAthenaJsonObject(options.updateBody)\n                : undefined,\n            };\n            const payloadColumns = normalizeSelectColumnsInput(columns);\n            if (payloadColumns) {\n              payload.columns = payloadColumns;\n            }\n            if (options?.onConflict) {\n              payload.on_conflict = options.onConflict;\n            }\n            return { kind: \"insert\", payload };\n          }\n        );\n      }\n      const executeUpsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaInsertPayload = {\n          insert_body: asAthenaJsonObject(values),\n          table_name: resolvedTableName,\n          update_body: options?.updateBody\n            ? asAthenaJsonObject(options.updateBody)\n            : undefined,\n        };\n        if (columns) {\n          payload.columns = columns;\n        }\n        if (options?.onConflict) {\n          payload.on_conflict = options.onConflict;\n        }\n        if (mergedOptions?.count) {\n          payload.count = mergedOptions.count;\n        }\n        if (mergedOptions?.head) {\n          payload.head = mergedOptions.head;\n        }\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull;\n        }\n        const sql = buildInsertDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildUpsertDebugAst(payload)\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/insert\",\n            operation: \"upsert\",\n            options: mergedOptions,\n            payload,\n            semanticOperation: \"upsert\",\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"insert\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row>(\n        executeUpsertOne,\n        DEFAULT_COLUMNS,\n        tracer,\n        mutationCallsite,\n        mutationExecutable(\"upsert\", upsertChangedFields),\n        (columns, selectOptions) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObject(values),\n            table_name: resolvedTableName,\n            update_body: options?.updateBody\n              ? asAthenaJsonObject(options.updateBody)\n              : undefined,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (options?.onConflict) {\n            payload.on_conflict = options.onConflict;\n          }\n          return { kind: \"insert\", payload };\n        }\n      );\n    },\n  });\n\n  return builder;\n}\n","import {\n  classifyRawSqlOperation,\n  createAdminQuery,\n  defaultExpectedShapeForOperation,\n  maybeWarnRawQueryDeprecated,\n} from \"../admin/query.ts\";\nimport type { AthenaGatewayCallOptions } from \"../gateway/types.ts\";\nimport type { AthenaQueryExecutionRuntime } from \"../query/execution/operation.ts\";\nimport { buildRawQueryDebugAst } from \"../query-debug-ast.ts\";\nimport {\n  captureTraceCallsite,\n  executeWithQueryTrace,\n} from \"../query-tracing.ts\";\nimport { executeRead } from \"../result/read.ts\";\nimport type { AthenaResult } from \"../result/types.ts\";\n\nexport function createCompatibilityQueryBuilder(\n  runtime: AthenaQueryExecutionRuntime,\n  deprecationOwner?: object,\n) {\n  const { behavior, formatGatewayResult, gateway, tracer } = runtime;\n  const debugAstEnabled = Boolean(behavior?.debugAst);\n  const adminQuery = createAdminQuery({\n    allowMultiStatement: true,\n    client: gateway,\n    formatGatewayResult,\n  });\n\n  return async function query<Row = unknown>(\n    sql: string,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Row[]>> {\n    if (deprecationOwner) {\n      maybeWarnRawQueryDeprecated(\n        deprecationOwner,\n        behavior?.rawQueryDiagnostics,\n      );\n    }\n    const normalizedQuery = sql.trim();\n    if (!normalizedQuery) {\n      throw new Error(\"query requires a non-empty string\");\n    }\n    const operation = classifyRawSqlOperation(normalizedQuery);\n    const expectedShape = defaultExpectedShapeForOperation(operation);\n    const params = options?.params;\n    const payload = {\n      query: normalizedQuery,\n      ...(Array.isArray(params) ? { params } : {}),\n      expectedShape,\n      operation,\n    };\n    const callsite = captureTraceCallsite(tracer);\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          ast: debugAstEnabled\n            ? buildRawQueryDebugAst(normalizedQuery)\n            : undefined,\n          endpoint: \"/gateway/query\",\n          operation: \"query\",\n          options,\n          payload,\n          sql: normalizedQuery,\n        },\n        async () => {\n          const result = await adminQuery<Row[]>(\n            {\n              sql: normalizedQuery,\n              ...(Array.isArray(params) ? { params } : {}),\n              expectedShape: \"rows\",\n              operation,\n            },\n            options,\n          );\n          const { metadata: _metadata, ...legacy } = result;\n          void _metadata;\n          return legacy;\n        },\n        callsite,\n      ),\n    );\n  };\n}\n","export {\n  createCompatibilityQueryBuilder as createQueryBuilder,\n} from \"../../compatibility/query-builder.ts\";\n","import {\n  normalizeAthenaError,\n  type NormalizedAthenaError,\n} from \"../auxiliaries.ts\";\nimport type { AthenaGatewayResponse } from \"../gateway/types.ts\";\nimport type {\n  AthenaResult,\n  AthenaResultError,\n  AthenaResultFormatter,\n} from \"./types.ts\";\n\nconst ATHENA_NORMALIZED_ERROR_KEY = \"__athenaNormalizedError\" as const;\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}\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?: Parameters<AthenaResultFormatter>[1]\n  ): AthenaResult<T> => {\n    const result = formatResult(response);\n    if (response.error == null && response.errorDetails == null) {\n      return result;\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context\n    );\n    result.error = createResultError(response, result, normalizedError);\n    attachNormalizedError(result, normalizedError);\n    return result;\n  };\n}\n","/**\n * Stable result compatibility barrel.\n *\n * Result ownership lives under result/; this path remains for existing imports.\n */\nexport type {\n  AthenaResult,\n  AthenaResultError,\n  AthenaResultFormatter,\n} from \"./result/types.ts\";\nexport {\n  applyCardinality,\n  toSingleResult,\n} from \"./result/cardinality.ts\";\nexport type { AthenaCardinalityMode } from \"./result/cardinality.ts\";\nexport { executeRead } from \"./result/read.ts\";\nexport { createResultFormatter } from \"./result/formatter.ts\";\n","import type { AthenaResult } from \"../../client-result.ts\";\nimport { toSingleResult } from \"../../client-result.ts\";\nimport {\n  buildRpcDebugSql,\n} from \"../../client-sql.ts\";\nimport type {\n  AthenaConditionArrayValue,\n  AthenaConditionValue,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcFilterOperator,\n  AthenaRpcPayload,\n} from \"../../gateway/types.ts\";\nimport type { AthenaQueryExecutionRuntime } from \"../../query/execution/operation.ts\";\nimport {\n  captureTraceCallsite,\n  createTraceCallsiteStore,\n  executeWithQueryTrace,\n} from \"../../query-tracing.ts\";\nimport { buildRpcDebugAst } from \"../../query-debug-ast.ts\";\nimport type { AthenaSelectInput } from \"../../select-column-types.ts\";\nimport {\n  normalizeSelectColumnsInput,\n} from \"./state.ts\";\nimport type { RpcOrderOptions, RpcQueryBuilder } from \"./types.ts\";\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n  if (!columns) {\n    return;\n  }\n  return typeof columns === \"string\" ? columns : columns.join(\",\");\n}\n\nfunction createRpcFilterMethods<Self>(\n  filters: AthenaRpcFilter[],\n  self: Self\n) {\n  const addFilter = (\n    operator: AthenaRpcFilterOperator,\n    column: string,\n    value: AthenaConditionValue | AthenaConditionArrayValue | string\n  ) => {\n    filters.push({ column, operator, value });\n  };\n\n  return {\n    eq(column: string, value: AthenaConditionValue) {\n      addFilter(\"eq\", column, value);\n      return self;\n    },\n    gt(column: string, value: AthenaConditionValue) {\n      addFilter(\"gt\", column, value);\n      return self;\n    },\n    gte(column: string, value: AthenaConditionValue) {\n      addFilter(\"gte\", column, value);\n      return self;\n    },\n    ilike(column: string, value: AthenaConditionValue) {\n      addFilter(\"ilike\", column, value);\n      return self;\n    },\n    in(column: string, values: AthenaConditionArrayValue) {\n      addFilter(\"in\", column, values);\n      return self;\n    },\n    is(column: string, value: AthenaConditionValue) {\n      addFilter(\"is\", column, value);\n      return self;\n    },\n    like(column: string, value: AthenaConditionValue) {\n      addFilter(\"like\", column, value);\n      return self;\n    },\n    lt(column: string, value: AthenaConditionValue) {\n      addFilter(\"lt\", column, value);\n      return self;\n    },\n    lte(column: string, value: AthenaConditionValue) {\n      addFilter(\"lte\", column, value);\n      return self;\n    },\n    neq(column: string, value: AthenaConditionValue) {\n      addFilter(\"neq\", column, value);\n      return self;\n    },\n  };\n}\n\nexport function createRpcBuilder<Row>(\n  functionName: string,\n  args: AthenaJsonObject | undefined,\n  baseOptions: AthenaRpcCallOptions | undefined,\n  runtime: AthenaQueryExecutionRuntime,\n  initialCallsite?: import(\"./types.ts\").AthenaQueryTraceCallsite | null\n): RpcQueryBuilder<Row> {\n  const {\n    formatGatewayResult,\n    gateway: client,\n    tracer,\n    behavior,\n  } = runtime;\n  const state: {\n    filters: AthenaRpcFilter[];\n    limit?: number;\n    offset?: number;\n    order?: { column: string; ascending?: boolean };\n  } = { filters: [] };\n  let selectedColumns: AthenaSelectInput | undefined;\n  let selectedOptions: AthenaRpcCallOptions | undefined;\n  let promise: Promise<AthenaResult<Row[]>> | null = null;\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n  const executeRpc = async <SelectedRow = Row>(\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: import(\"./types.ts\").AthenaQueryTraceCallsite | null\n  ): Promise<AthenaResult<SelectedRow[]>> => {\n    const mergedOptions = mergeOptions(baseOptions, options);\n    const normalizedSelectedColumns = normalizeSelectColumnsInput(columns);\n    const payload: AthenaRpcPayload = {\n      args,\n      count: mergedOptions?.count,\n      filters: state.filters.length ? [...state.filters] : undefined,\n      function: functionName,\n      head: mergedOptions?.head,\n      limit: state.limit,\n      offset: state.offset,\n      order: state.order,\n      schema: mergedOptions?.schema,\n      select: toRpcSelect(columns),\n    };\n    const endpoint: import(\"./types.ts\").AthenaQueryTraceEvent[\"endpoint\"] =\n      mergedOptions?.get ? `/rpc/${functionName}` : \"/gateway/rpc\";\n    const sql = buildRpcDebugSql(payload);\n    const debugAst = behavior?.debugAst\n      ? buildRpcDebugAst({\n          args,\n          endpoint,\n          functionName,\n          payload,\n          selectedColumns: normalizedSelectedColumns,\n          state,\n        })\n      : undefined;\n    return executeWithQueryTrace(\n      tracer,\n      {\n        ast: debugAst,\n        endpoint,\n        functionName,\n        operation: \"rpc\",\n        options: mergedOptions,\n        payload,\n        sql,\n      },\n      async () => {\n        const response = await client.rpcGateway<SelectedRow[]>(\n          payload,\n          mergedOptions\n        );\n        return formatGatewayResult(response, { operation: \"rpc\" });\n      },\n      callsite\n    );\n  };\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: import(\"./types.ts\").AthenaQueryTraceCallsite | null\n  ) => {\n    const payloadColumns = columns ?? selectedColumns;\n    const payloadOptions = options ?? selectedOptions;\n    if (!promise) {\n      promise = executeRpc<Row>(\n        payloadColumns,\n        payloadOptions,\n        callsiteStore.resolve(callsite)\n      );\n    }\n    return promise;\n  };\n\n  const builder = {} as RpcQueryBuilder<Row>;\n  const filterMethods = createRpcFilterMethods(state.filters, builder);\n  Object.assign(builder, filterMethods, {\n    catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n      return run(selectedColumns, selectedOptions).catch(onrejected);\n    },\n    finally(onfinally?: () => void) {\n      return run(selectedColumns, selectedOptions).finally(onfinally);\n    },\n    limit(count: number) {\n      state.limit = count;\n      return builder;\n    },\n    maybeSingle<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaRpcCallOptions\n    ) {\n      return builder.single<T, AthenaSelectInput>(columns, options);\n    },\n    offset(count: number) {\n      state.offset = count;\n      return builder;\n    },\n    order(column: string, options?: RpcOrderOptions) {\n      state.order = { ascending: options?.ascending ?? true, column };\n      return builder;\n    },\n    range(from: number, to: number) {\n      state.offset = from;\n      state.limit = to - from + 1;\n      return builder;\n    },\n    select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      selectedColumns = columns;\n      selectedOptions = options ?? selectedOptions;\n      return run(columns, options, captureTraceCallsite(tracer));\n    },\n    async single<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaRpcCallOptions\n    ) {\n      const result = await run(\n        columns,\n        options,\n        captureTraceCallsite(tracer)\n      );\n      return toSingleResult(result) as AthenaResult<T | null>;\n    },\n    then<T1 = AthenaResult<Row[]>, T2 = never>(\n      onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n      onrejected?: (reason: unknown) => T2 | PromiseLike<T2>\n    ) {\n      return run(selectedColumns, selectedOptions).then(\n        onfulfilled,\n        onrejected\n      );\n    },\n  });\n  return builder;\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n  ...options: Array<T | undefined>\n): T | undefined {\n  return options.reduce<T | undefined>((acc, next) => {\n    if (!next) {\n      return acc;\n    }\n    const merged = { ...(acc ?? {}), ...next } as T;\n    if (acc?.headers || next.headers) {\n      merged.headers = {\n        ...(acc?.headers ?? {}),\n        ...(next.headers ?? {}),\n      };\n    }\n    return merged;\n  }, undefined);\n}\n","export { createTableBuilder } from \"./table-builder.ts\";\nexport { createQueryBuilder } from \"./query-builder.ts\";\nexport { createRpcBuilder } from \"./rpc-builder.ts\";\nexport type * from \"./types.ts\";\n","import type { BackendConfig } from \"./gateway/types.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"./sdk-version.ts\";\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from \"./utils/athena-request-headers.ts\";\n\nconst SDK_NAME = \"xylex-group/athena\";\n\nexport type AthenaRequestService = \"db\" | \"auth\" | \"chat\" | \"storage\";\nexport type AthenaRequestMethod =\n  | \"GET\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"HEAD\"\n  | \"OPTIONS\";\n\nexport interface AthenaRequestQueryValueMap {\n  [key: string]:\n    | string\n    | number\n    | boolean\n    | null\n    | undefined\n    | Array<string | number | boolean | null | undefined>;\n}\n\nexport interface AthenaRequestOptions {\n  /** Per-request override for the canonical `X-Athena-Key` header. */\n  apiKey?: string | null;\n  body?: RequestInit[\"body\"] | Record<string, unknown> | unknown[] | null;\n  credentials?: RequestInit[\"credentials\"];\n  headers?: Record<string, string>;\n  method?: AthenaRequestMethod;\n  path?: string;\n  query?: AthenaRequestQueryValueMap;\n  responseType?: \"json\" | \"text\" | \"response\";\n  service?: AthenaRequestService;\n  signal?: AbortSignal;\n  url?: string;\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n  data: T | string | null;\n  headers: Headers;\n  ok: boolean;\n  raw: Response;\n  status: number;\n  statusText: string;\n}\n\nexport interface AthenaRawRequestConfig {\n  apiKey?: string;\n  authUrl?: string;\n  backend?: BackendConfig;\n  baseUrl?: string;\n  chatUrl?: string;\n  client?: string | null;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null;\n  pgUri?: string | null;\n  storageUrl?: string;\n}\n\nexport interface AthenaRawRequestContext {\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nfunction parseArbitraryResponseBody(\n  rawText: string,\n  contentType: string | null\n): unknown {\n  if (!rawText) {\n    return null;\n  }\n  if (contentType?.toLowerCase().includes(\"application/json\")) {\n    try {\n      return JSON.parse(rawText);\n    } catch {\n      return rawText;\n    }\n  }\n  const trimmed = rawText.trim();\n  if (\n    (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n    (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n  ) {\n    try {\n      return JSON.parse(trimmed);\n    } catch {\n      return rawText;\n    }\n  }\n  return rawText;\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n  if (!query) {\n    return \"\";\n  }\n  const params = new URLSearchParams();\n  for (const [key, rawValue] of Object.entries(query)) {\n    const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n    for (const value of values) {\n      if (value === undefined) {\n        continue;\n      }\n      params.append(key, value === null ? \"\" : String(value));\n    }\n  }\n  const serialized = params.toString();\n  return serialized ? `?${serialized}` : \"\";\n}\n\nfunction isJsonBody(body: AthenaRequestOptions[\"body\"]): boolean {\n  return (\n    body !== undefined &&\n    body !== null &&\n    !(body instanceof FormData) &&\n    !(body instanceof Blob) &&\n    !(body instanceof URLSearchParams) &&\n    !(body instanceof ArrayBuffer) &&\n    !ArrayBuffer.isView(body) &&\n    typeof body !== \"string\"\n  );\n}\n\nexport function createAthenaRequest(\n  config: AthenaRawRequestConfig,\n  resolveContext: () =>\n    | AthenaRawRequestContext\n    | undefined\n    | Promise<AthenaRawRequestContext | undefined>\n): <T = unknown>(\n  options: AthenaRequestOptions\n) => Promise<AthenaRequestResponse<T>> {\n  return async <T = unknown>(\n    options: AthenaRequestOptions\n  ): Promise<AthenaRequestResponse<T>> => {\n    const context = await resolveContext();\n    const method = options.method ?? \"GET\";\n    const responseType = options.responseType ?? \"json\";\n    const service = options.service ?? \"db\";\n    const absoluteUrl = options.url?.trim();\n    const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n      auth: config.authUrl,\n      chat: config.chatUrl,\n      db: config.baseUrl,\n      storage: config.storageUrl,\n    };\n\n    const queryString = toRequestQueryString(options.query);\n    let targetUrl: string;\n    if (absoluteUrl) {\n      // Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n      // and auth-only / storage-only clients can still call arbitrary endpoints.\n      try {\n        const parsed = new URL(absoluteUrl);\n        if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n          throw new Error(\"not http(s)\");\n        }\n      } catch (error) {\n        throw new Error(\n          `client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n          { cause: error }\n        );\n      }\n      targetUrl = `${absoluteUrl}${queryString}`;\n    } else {\n      const resolvedBaseUrl = baseUrlByService[service];\n      if (!resolvedBaseUrl) {\n        throw new Error(\n          `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`\n        );\n      }\n\n      const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n        label: `Athena ${service} base URL`,\n      });\n      const path = options.path?.trim();\n      if (!path) {\n        throw new Error(\n          \"client.request(...) requires either an absolute url or a non-empty path.\"\n        );\n      }\n      const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n      targetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`;\n    }\n\n    const requestProfile =\n      service === \"auth\"\n        ? \"auth\"\n        : service === \"chat\"\n          ? \"chat\"\n          : service === \"storage\"\n            ? \"storage\"\n            : \"gateway\";\n    const headers = buildAthenaRequestHeaders({\n      accept: service === \"chat\" ? \"application/json\" : undefined,\n      apiKey: options.apiKey ?? config.apiKey,\n      backend: config.backend,\n      bearerToken: context?.bearerToken,\n      callHeaders: options.headers,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n        ...(context?.headers ?? {}),\n      },\n      contentType:\n        service === \"auth\" || service === \"db\" || service === \"storage\"\n          ? \"application/json\"\n          : undefined,\n      cookie: context?.cookie,\n      forceNoCache: context?.forceNoCache,\n      jdbcUrl: config.jdbcUrl,\n      organizationId: context?.organizationId,\n      pgUri: config.pgUri,\n      profile: requestProfile,\n      sdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n      sessionToken: context?.sessionToken,\n      stripNulls: service === \"db\" ? true : undefined,\n      userId: context?.userId,\n    });\n\n    const shouldSendJsonBody = isJsonBody(options.body);\n    if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n      headers[\"Content-Type\"] = \"application/json\";\n    }\n\n    const response = await fetch(targetUrl, {\n      body:\n        options.body === undefined || options.body === null\n          ? undefined\n          : shouldSendJsonBody\n            ? JSON.stringify(options.body)\n            : (options.body as RequestInit[\"body\"]),\n      credentials: options.credentials,\n      headers,\n      method,\n      signal: options.signal,\n    });\n\n    if (responseType === \"response\") {\n      return {\n        data: null,\n        headers: response.headers,\n        ok: response.ok,\n        raw: response,\n        status: response.status,\n        statusText: response.statusText,\n      };\n    }\n\n    const rawText = await response.text();\n    const parsed =\n      responseType === \"text\"\n        ? rawText\n        : parseArbitraryResponseBody(\n            rawText,\n            response.headers.get(\"content-type\")\n          );\n\n    return {\n      data: parsed as T | string | null,\n      headers: response.headers,\n      ok: response.ok,\n      raw: response,\n      status: response.status,\n      statusText: response.statusText,\n    };\n  };\n}\n","/**\n * 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 type { AthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport { compileAthenaQueryDescriptor } from \"../../query/descriptor.ts\";\nimport { nextTransactionOperationId } from \"./compile.ts\";\nimport type { InteractiveTransactionSession } from \"./coordinator.ts\";\nimport { AthenaTransactionError } from \"./errors.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(\n      payload: AthenaDeletePayload,\n      _options?: AthenaGatewayCallOptions\n    ) {\n      return execute(\"delete\", payload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\n    },\n    fetchGateway(payload, _options?: AthenaGatewayCallOptions) {\n      return execute(\"fetch\", payload as AthenaFetchPayload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\n    },\n    insertGateway(\n      payload: AthenaInsertPayload,\n      _options?: AthenaGatewayCallOptions\n    ) {\n      return execute(\"insert\", payload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\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    transactions: base.transactions,\n    updateGateway(\n      payload: AthenaUpdatePayload,\n      _options?: AthenaGatewayCallOptions\n    ) {\n      return execute(\"update\", payload) as Promise<\n        AthenaGatewayResponse<never>\n      >;\n    },\n    verifyConnection(options) {\n      return base.verifyConnection(options);\n    },\n  };\n}\n","import type { AthenaResultFormatter } from \"../../result/types.ts\";\nimport type { InternalClientBehaviorOptions } from \"../contracts.ts\";\nimport type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport type { AthenaQueryTracer } from \"../../query-tracing.ts\";\n\nexport interface AthenaQueryExecutionRuntime {\n  gateway: AthenaGatewayClient;\n  formatGatewayResult: AthenaResultFormatter;\n  tracer?: AthenaQueryTracer;\n  behavior?: InternalClientBehaviorOptions;\n}\n\nexport function createQueryExecutionRuntime(\n  runtime: AthenaQueryExecutionRuntime\n): AthenaQueryExecutionRuntime {\n  return Object.freeze({ ...runtime });\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\n      ? `${schemaName}.${explicitTableName}`\n      : 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","import type {\n  AthenaFromOptions,\n  AthenaRowShape,\n  InternalClientBehaviorOptions,\n  TableQueryBuilder,\n} from \"./fluent/types.ts\";\nimport { createTableBuilder } from \"./fluent/index.ts\";\nimport type { AthenaGatewayCallOptions } from \"../gateway/types.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaDbModule, AthenaTransactionClient } from \"../db/module.ts\";\nimport { AthenaTransactionError } from \"../db/transaction/errors.ts\";\nimport { nextInternalSavepointName } from \"../db/transaction/index.ts\";\nimport type { InteractiveTransactionSession } from \"../db/transaction/coordinator.ts\";\nimport type { AthenaTransactionOptions } from \"../db/transaction/types.ts\";\nimport { resolveTableNameForCall } from \"../client-sql.ts\";\nimport { createQueryExecutionRuntime } from \"../query/execution/operation.ts\";\nimport type { AthenaQueryTracer } from \"../query-tracing.ts\";\nimport type { AthenaResultFormatter } from \"../result/types.ts\";\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from \"../schema/model-target.ts\";\nimport type { AthenaModelTarget } from \"../schema/types.ts\";\nimport type { AthenaSelectInput } from \"../select-column-types.ts\";\n\nexport function createTransactionScopedDb<TModels>(\n  input: {\n    formatGatewayResult: AthenaResultFormatter;\n    gateway: AthenaGatewayClient;\n    behavior?: InternalClientBehaviorOptions;\n    options?: AthenaTransactionOptions;\n    session: InteractiveTransactionSession;\n    tracer?: AthenaQueryTracer;\n  }\n): AthenaTransactionClient<TModels> {\n  const { formatGatewayResult, gateway, session, tracer } = input;\n  const transactionQueryRuntime = createQueryExecutionRuntime({\n    behavior: input.behavior,\n    formatGatewayResult,\n    gateway,\n    tracer,\n  });\n  const txFrom = ((\n    tableOrModel: string | AthenaModelTarget,\n    options?: AthenaFromOptions\n  ) => {\n    if (isAthenaModelTarget(tableOrModel)) {\n      return createTableBuilder(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        transactionQueryRuntime,\n        { model: tableOrModel }\n      );\n    }\n    return createTableBuilder(\n      resolveTableNameForCall(tableOrModel, options?.schema),\n      transactionQueryRuntime\n    );\n  }) as AthenaDbModule<TModels>[\"from\"];\n  const untypedFrom = txFrom as unknown as <\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: string,\n    options?: AthenaFromOptions\n  ) => TableQueryBuilder<Row, Insert, Update>;\n  const scoped = {\n    abort() {\n      session.abort();\n    },\n    delete(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string }\n    ) {\n      return untypedFrom(table).delete(options);\n    },\n    from: txFrom,\n    insert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n      return untypedFrom(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 untypedFrom(table).select(\n          undefined,\n          first as AthenaGatewayCallOptions\n        );\n      }\n      return untypedFrom(table).select(\n        first as AthenaSelectInput | undefined,\n        second\n      );\n    },\n    update(\n      table: string,\n      values: unknown,\n      options?: AthenaGatewayCallOptions\n    ) {\n      return untypedFrom(table).update(values as never, options);\n    },\n    upsert(table: string, values: unknown, options?: AthenaGatewayCallOptions) {\n      return untypedFrom(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","import type {\n  AthenaConditionAst,\n  AthenaSelectQueryAst,\n} from \"../query/engine/ast.ts\";\nimport { GATEWAY_QUERY_CAPABILITIES } from \"../query/engine/capabilities.ts\";\nimport { AthenaQueryError } from \"../query/engine/errors.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 {\n  AthenaRelationSelectNode,\n  AthenaSelectShape,\n} from \"../query-ast.ts\";\nimport { compileSelectShape } from \"../query-ast.ts\";\nimport type { AthenaFetchPayload } from \"./types.ts\";\n\nconst GATEWAY_OPERATOR_KEYS = new Set([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n  \"in\",\n  \"contains\",\n  \"containedBy\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction setOwnValue(\n  target: Record<string, unknown>,\n  key: string,\n  value: unknown\n): void {\n  Object.defineProperty(target, key, {\n    configurable: true,\n    enumerable: true,\n    value,\n    writable: true,\n  });\n}\n\nfunction mergeWhereValues(\n  path: string,\n  left: unknown,\n  right: unknown\n): unknown {\n  if (!(isRecord(left) && isRecord(right))) {\n    throw new AthenaQueryError(\n      \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n      `Gateway cannot represent repeated predicate key \"${path}\" without losing conditions`\n    );\n  }\n  const merged: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(left)) {\n    setOwnValue(merged, key, value);\n  }\n  for (const [key, value] of Object.entries(right)) {\n    const childPath = `${path}.${key}`;\n    if (Object.hasOwn(merged, key)) {\n      if (GATEWAY_OPERATOR_KEYS.has(key)) {\n        throw new AthenaQueryError(\n          \"ATHENA_QUERY_UNSUPPORTED_CAPABILITY\",\n          `Gateway cannot represent repeated predicate operator \"${childPath}\"`\n        );\n      }\n      setOwnValue(merged, key, mergeWhereValues(childPath, merged[key], value));\n      continue;\n    }\n    setOwnValue(merged, key, value);\n  }\n  return merged;\n}\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      if (field.column === \"*\") {\n        shape[\"*\"] = true;\n      } else {\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      }\n      continue;\n    }\n    shape[field.alias ?? field.relation] = {\n      as: field.alias,\n      constraint: field.constraintHint,\n      join: field.join,\n      relation: field.relation,\n      schema: field.query.source.schema,\n      select: selectionToShape(field.query),\n      via: field.legacyVia ?? field.via,\n    } as unknown as AthenaRelationSelectNode;\n  }\n  return shape;\n}\n\nfunction conditionToWhere(\n  condition: AthenaConditionAst\n): Record<string, unknown> {\n  switch (condition.kind) {\n    case \"and\": {\n      const where = Object.create(null) as Record<string, unknown>;\n      for (const child of condition.conditions) {\n        const childWhere = conditionToWhere(child);\n        for (const [key, value] of Object.entries(childWhere)) {\n          if (Object.hasOwn(where, key)) {\n            setOwnValue(\n              where,\n              key,\n              mergeWhereValues(key, where[key], value)\n            );\n            continue;\n          }\n          setOwnValue(where, key, value);\n        }\n      }\n      return { ...where };\n    }\n    case \"or\":\n      return {\n        or: condition.conditions.map((child) => conditionToWhere(child)),\n      };\n    case \"not\":\n      return { not: conditionToWhere(condition.condition) };\n    case \"compare\":\n      return {\n        [condition.field.field]: { [condition.operator]: condition.value },\n      };\n    case \"in\":\n      return { [condition.field.field]: { in: condition.values } };\n    case \"is-null\":\n      return {\n        [condition.field.field]: condition.negated\n          ? { neq: null }\n          : { 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(\n  ast: AthenaSelectQueryAst\n): 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(\n  plan: AthenaQueryPlan\n): 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  AthenaFetchPayload,\n  AthenaInsertPayload,\n  AthenaUpdatePayload,\n  AthenaDeletePayload,\n} from \"./types.ts\";\nimport type { AthenaTransactionOperation } from \"../db/transaction/types.ts\";\n\nexport type AthenaGatewayUpdateRequestBody<\n  TUpdateBody = AthenaUpdatePayload[\"update_body\"],\n> = Omit<AthenaUpdatePayload<TUpdateBody>, \"update_body\"> & {\n  data: TUpdateBody;\n};\n\n/**\n * Projects the semantic update payload onto the Rust Gateway wire contract.\n * `update_body` remains the internal representation used by query builders and\n * direct SQL compilers.\n */\nexport function serializeGatewayUpdateRequest<TUpdateBody>(\n  payload: AthenaUpdatePayload<TUpdateBody>\n): AthenaGatewayUpdateRequestBody<TUpdateBody> {\n  const { update_body, ...rest } = payload;\n  return {\n    ...rest,\n    data: update_body,\n  };\n}\n\nexport function serializeGatewayOperation(\n  operation: AthenaTransactionOperation\n): {\n  id: string;\n  kind: AthenaTransactionOperation[\"kind\"];\n  payload:\n    | AthenaFetchPayload\n    | AthenaInsertPayload\n    | AthenaUpdatePayload[\"update_body\"]\n    | AthenaDeletePayload\n    | AthenaGatewayUpdateRequestBody;\n} {\n  if (operation.kind === \"update\") {\n    return {\n      id: operation.id,\n      kind: operation.kind,\n      payload: serializeGatewayUpdateRequest(operation.payload),\n    };\n  }\n\n  return {\n    id: operation.id,\n    kind: operation.kind,\n    payload: operation.payload,\n  };\n}\n","import { 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\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayResponse,\n} from \"./types.ts\";\nimport { serializeGatewayOperation } from \"./serialize-update.ts\";\n\nexport type GatewayTransactionHttpCaller = (\n  payload: unknown,\n  options?: AthenaGatewayCallOptions\n) => Promise<AthenaGatewayResponse<unknown>>;\n\nfunction asResults(raw: unknown): AthenaGatewayResponse<unknown>[] | undefined {\n  if (!raw || typeof raw !== \"object\") {\n    return;\n  }\n  const record = raw as Record<string, unknown>;\n  const results = record.results;\n  if (!Array.isArray(results)) {\n    return;\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(serializeGatewayOperation),\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 { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { isAthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport type { AthenaSelectQueryAst } from \"../query/engine/ast.ts\";\nimport { AthenaQueryError } from \"../query/engine/errors.ts\";\nimport { serializeQueryRequestV1 } from \"../query/contract-v1.ts\";\nimport type { AthenaFindManyAstPayload } from \"../query-transport.ts\";\nimport type { AthenaSelectShape } from \"../query-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 { serializeGatewayUpdateRequest } from \"./serialize-update.ts\";\nimport { createGatewayHttpTransactionTransport } from \"./transaction.ts\";\nimport type { AthenaGatewayAdapter } from \"./adapter.ts\";\nimport type {\n  AthenaGatewayBaseOptions,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorDetails,\n  AthenaFetchPayload,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n} from \"./types.js\";\nimport type { AthenaGatewayClient } from \"./adapter.ts\";\nimport {\n  ATHENA_DEFAULT_BASE_URL,\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\n\nconst SDK_NAME = \"@xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction containsUnsupportedExecutionValue(value: unknown): boolean {\n  if (Array.isArray(value)) {\n    return value.some(containsUnsupportedExecutionValue);\n  }\n  if (!isRecord(value)) {\n    return false;\n  }\n  if (value.__athena_unsupported === true) {\n    return true;\n  }\n  return Object.values(value).some(containsUnsupportedExecutionValue);\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 isPostgresBackend(\n  backend: AthenaGatewayBaseOptions[\"backend\"]\n): boolean {\n  return (\n    (typeof backend === \"string\" ? backend : backend?.type) === \"postgresql\"\n  );\n}\n\nfunction resolveStructuredErrorPayload(\n  payload: unknown\n): Record<string, unknown> | null {\n  if (!isRecord(payload)) {\n    return null;\n  }\n  return isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  if (structuredPayload) {\n    const messageCandidates = [\n      structuredPayload.message,\n      structuredPayload.error,\n      structuredPayload.details,\n    ];\n    for (const candidate of messageCandidates) {\n      const resolved = nonEmptyString(candidate);\n      if (resolved) {\n        return resolved;\n      }\n    }\n  }\n\n  const rawMessage = nonEmptyString(payload);\n  if (rawMessage) {\n    return rawMessage;\n  }\n\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(\n  response: Response,\n  payload: unknown\n): string | null {\n  const rawStatusText = nonEmptyString(response.statusText);\n  if (rawStatusText) {\n    return rawStatusText;\n  }\n  const payloadRecord = isRecord(payload) ? payload : null;\n  return payloadRecord\n    ? (nonEmptyString(payloadRecord.statusText) ?? null)\n    : null;\n}\n\nfunction detailsFromError(\n  error: AthenaGatewayError\n): AthenaGatewayErrorDetails {\n  return error.toDetails();\n}\n\nfunction toQueryScalar(value: unknown): string {\n  if (value === null || value === undefined) {\n    return \"null\";\n  }\n  if (typeof value === \"boolean\") {\n    return value ? \"true\" : \"false\";\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? String(value) : \"null\";\n  }\n  return String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n  return `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n  if (Array.isArray(value)) {\n    return toQueryArray(value);\n  }\n  if (value && typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n          status: 0,\n        });\n      }\n      return `in.${toQueryArray(value)}`;\n    }\n    case \"is\":\n      return `is.${toQueryScalar(value)}`;\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\":\n      return `${filter.operator}.${toQueryScalar(value)}`;\n    default: {\n      const exhaustive: never = filter.operator;\n      throw new AthenaGatewayError({\n        code: \"UNKNOWN_ERROR\",\n        message: `Unsupported RPC filter operator: ${String(exhaustive)}`,\n        status: 0,\n      });\n    }\n  }\n}\n\nfunction buildRpcGetEndpoint(\n  payload: AthenaRpcPayload\n): AthenaGatewayEndpointPath {\n  const functionName = (payload.function_name ?? payload.function).trim();\n  if (!functionName) {\n    throw new AthenaGatewayError({\n      code: \"UNKNOWN_ERROR\",\n      endpoint: \"/gateway/rpc\",\n      message: \"rpc requires a function name\",\n      method: \"GET\",\n      status: 0,\n    });\n  }\n\n  const query = new URLSearchParams();\n  if (payload.schema) {\n    query.set(\"schema\", payload.schema);\n  }\n  if (payload.select) {\n    query.set(\"select\", payload.select);\n  }\n  if (payload.count) {\n    query.set(\"count\", payload.count);\n  }\n  if (payload.head) {\n    query.set(\"head\", \"true\");\n  }\n  if (typeof payload.limit === \"number\") {\n    query.set(\"limit\", String(payload.limit));\n  }\n  if (typeof payload.offset === \"number\") {\n    query.set(\"offset\", String(payload.offset));\n  }\n  if (payload.order?.column) {\n    query.set(\n      \"order\",\n      payload.order.ascending === false\n        ? `${payload.order.column}.desc`\n        : payload.order.column\n    );\n  }\n\n  if (payload.args) {\n    for (const [key, value] of Object.entries(payload.args)) {\n      query.set(key, toRpcArgumentQueryValue(value));\n    }\n  }\n\n  if (payload.filters?.length) {\n    for (const filter of payload.filters) {\n      if (payload.args && Object.hasOwn(payload.args, filter.column)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n          status: 0,\n        });\n      }\n      query.append(filter.column, toRpcFilterQueryValue(filter));\n    }\n  }\n\n  const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n  const queryText = query.toString();\n  const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n  return withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n  config: AthenaGatewayBaseOptions,\n  options?: AthenaGatewayCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\n    \"gateway\",\n    SDK_HEADER_VALUE,\n    config,\n    options,\n    {\n      client: options?.client ?? config.client ?? \"DEFAULT_CLIENT\",\n      stripNulls: options?.stripNulls ?? true,\n    }\n  );\n}\n\nfunction toInvalidUrlResponse<T>(\n  error: unknown,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod\n): AthenaGatewayResponse<T> {\n  const message = error instanceof Error ? error.message : String(error);\n  const gatewayError =\n    error instanceof AthenaGatewayError\n      ? error\n      : new AthenaGatewayError({\n          cause: message,\n          code: \"INVALID_URL\",\n          endpoint,\n          hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n          message,\n          method,\n          status: 0,\n        });\n\n  return {\n    data: null,\n    error: gatewayError.message,\n    errorDetails: detailsFromError(\n      new AthenaGatewayError({\n        cause: gatewayError.causeDetail,\n        code: gatewayError.code,\n        endpoint,\n        hint: gatewayError.hint,\n        message: gatewayError.message,\n        method,\n        requestId: gatewayError.requestId,\n        status: gatewayError.status,\n      })\n    ),\n    ok: false,\n    raw: null,\n    status: 0,\n    statusText: null,\n  };\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n  return normalizeAthenaGatewayBaseUrl(input, {\n    defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n  });\n}\n\nfunction resolveProbePath(path?: string) {\n  if (!path) {\n    return \"/\";\n  }\n  if (!path.startsWith(\"/\")) {\n    throw new AthenaGatewayError({\n      code: \"INVALID_URL\",\n      hint: 'Use a leading slash such as \"/\" or \"/health\".',\n      message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      status: 0,\n    });\n  }\n  return path;\n}\n\nfunction mergeConnectionHeaders(\n  baseHeaders: Record<string, string>,\n  headers?: Record<string, string>\n): Record<string, string> {\n  const merged = {\n    ...baseHeaders,\n    ...(headers ?? {}),\n  };\n\n  if (!(merged[\"X-Athena-Sdk\"] || merged[\"x-athena-sdk\"])) {\n    merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n  }\n\n  return merged;\n}\n\nasync function performConnectionCheck(\n  baseUrl: string,\n  requestHeaders: Record<string, string>,\n  options?: AthenaGatewayConnectionOptions\n): Promise<AthenaGatewayConnectionResult> {\n  const path = resolveProbePath(options?.path);\n  const url = buildAthenaGatewayUrl(baseUrl, path);\n\n  try {\n    const response = await fetch(url, {\n      headers: mergeConnectionHeaders(requestHeaders, options?.headers),\n      method: \"GET\",\n      signal: options?.signal,\n    });\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        cause: rawText.slice(0, 300),\n        code: \"INVALID_JSON\",\n        hint: \"Verify the gateway response body is valid JSON.\",\n        message: \"Gateway probe returned malformed JSON\",\n        method: \"GET\",\n        requestId,\n        status: response.status,\n      });\n      return {\n        baseUrl,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        ok: false,\n        raw: parsedBody.parsed,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        url,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        hint: resolveErrorHint(parsed),\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway GET ${path} failed with status ${response.status}`\n        ),\n        method: \"GET\",\n        requestId,\n        status: response.status,\n      });\n\n      return {\n        baseUrl,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        ok: false,\n        raw: parsed,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        url,\n      };\n    }\n\n    return {\n      baseUrl,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: parsed,\n      reachable: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      url,\n    };\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n      message: `Network error while probing Athena gateway ${url}: ${message}`,\n      method: \"GET\",\n    });\n    return {\n      baseUrl,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      ok: false,\n      raw: null,\n      reachable: false,\n      status: 0,\n      statusText: null,\n      url,\n    };\n  }\n}\n\nexport async function verifyAthenaGatewayUrl(\n  baseUrl: string,\n  options?: AthenaGatewayConnectionOptions\n): Promise<AthenaGatewayConnectionResult> {\n  const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n  return performConnectionCheck(\n    normalizedBaseUrl,\n    { \"X-Athena-Sdk\": SDK_HEADER_VALUE },\n    options\n  );\n}\n\nasync function callAthena<T>(\n  config: AthenaGatewayBaseOptions,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  payload: unknown,\n  options?: AthenaGatewayCallOptions\n): Promise<AthenaGatewayResponse<T>> {\n  let baseUrl: string;\n  try {\n    baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n  } catch (error) {\n    return toInvalidUrlResponse<T>(error, endpoint, method);\n  }\n\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint);\n  const headers = buildHeaders(config, options);\n\n  try {\n    const requestInit: RequestInit = {\n      headers,\n      method,\n      signal: options?.signal,\n    };\n    if (method !== \"GET\") {\n      requestInit.body = JSON.stringify(payload);\n    }\n\n    const response = await fetch(url, requestInit);\n\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        cause: rawText.slice(0, 300),\n        code: \"INVALID_JSON\",\n        endpoint,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        message: \"Gateway returned malformed JSON\",\n        method,\n        requestId,\n        status: response.status,\n      });\n      return {\n        data: null,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        ok: false,\n        raw: parsedBody.parsed,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    const parsedPayload = isRecord(parsed) ? parsed : null;\n\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsed),\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway ${method} ${endpoint} failed with status ${response.status}`\n        ),\n        method,\n        requestId,\n        status: response.status,\n      });\n\n      return {\n        data: null,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        ok: false,\n        raw: parsed,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n      };\n    }\n\n    // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n    // vs raw array when uncached. Use inner data when present to avoid double nesting.\n    const payloadData =\n      parsedPayload && \"data\" in parsedPayload\n        ? (parsedPayload.data as T)\n        : (parsed as T);\n    const payloadCount =\n      parsedPayload && \"count\" in parsedPayload\n        ? typeof parsedPayload.count === \"number\" ||\n          parsedPayload.count === null\n          ? (parsedPayload.count as number | null)\n          : undefined\n        : undefined;\n\n    const affectedRows = resolveMutationAffectedRows({\n      count: payloadCount,\n      endpoint,\n      raw: parsed,\n    });\n    const mutationCount =\n      affectedRows === undefined\n        ? payloadCount\n        : (payloadCount ?? affectedRows);\n\n    return {\n      ...(affectedRows === undefined ? {} : { affectedRows }),\n      count: mutationCount,\n      data: payloadData ?? null,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: parsed,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n    };\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      endpoint,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n      message: `Network error while calling ${method} ${endpoint}: ${message}`,\n      method,\n    });\n    return {\n      data: null,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      ok: false,\n      raw: null,\n      status: 0,\n      statusText: null,\n    };\n  }\n}\n\nexport type { AthenaGatewayAdapter };\nexport type { AthenaGatewayClient } from \"./adapter.ts\";\n\nexport function createAthenaGatewayClient(\n  config: AthenaGatewayBaseOptions = {}\n): AthenaGatewayAdapter {\n  const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n  const normalizedConfig: AthenaGatewayBaseOptions = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  };\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    buildHeaders(options) {\n      return buildHeaders(normalizedConfig, options);\n    },\n    deleteGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/delete\",\n        \"DELETE\",\n        payload,\n        options\n      );\n    },\n    fetchGateway<T>(\n      payload:\n        | AthenaFetchPayload\n        | AthenaFindManyAstPayload<Record<string, unknown>, AthenaSelectShape>\n        | AthenaSelectQueryAst,\n      options?: AthenaGatewayCallOptions\n    ) {\n      if (!isAthenaSelectQueryAst(payload)) {\n        return callAthena<T>(\n          normalizedConfig,\n          \"/gateway/fetch\",\n          \"POST\",\n          payload,\n          options\n        );\n      }\n\n      const queryProtocol =\n        options?.queryProtocol ?? normalizedConfig.queryProtocol ?? \"auto\";\n      const backend = options?.backend ?? normalizedConfig.backend;\n      if (\n        queryProtocol === \"legacy\" ||\n        (queryProtocol === \"auto\" && !isPostgresBackend(backend))\n      ) {\n        return callAthena<T>(\n          normalizedConfig,\n          \"/gateway/fetch\",\n          \"POST\",\n          serializeGatewayAst(payload),\n          options\n        );\n      }\n\n      let queryPayload: ReturnType<typeof serializeQueryRequestV1>;\n      try {\n        queryPayload = serializeQueryRequestV1(payload);\n      } catch (error) {\n        if (!(error instanceof AthenaQueryError)) {\n          throw error;\n        }\n        if (queryProtocol === \"v1\") {\n          throw error;\n        }\n        return callAthena<T>(\n          normalizedConfig,\n          \"/gateway/fetch\",\n          \"POST\",\n          serializeGatewayAst(payload),\n          options\n        );\n      }\n\n      const v1Response = callAthena<T>(\n        normalizedConfig,\n        \"/gateway/query/v1\",\n        \"POST\",\n        queryPayload,\n        options\n      );\n      if (queryProtocol === \"v1\") {\n        return v1Response;\n      }\n      return v1Response.then((response) =>\n        response.status === 404 ||\n        response.status === 405 ||\n        (response.ok && containsUnsupportedExecutionValue(response.data))\n          ? callAthena<T>(\n              normalizedConfig,\n              \"/gateway/fetch\",\n              \"POST\",\n              serializeGatewayAst(payload),\n              options\n            )\n          : response\n      );\n    },\n    insertGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/insert\",\n        \"PUT\",\n        payload,\n        options\n      );\n    },\n    queryGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/query\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    async resolveCallOptions(options) {\n      return options;\n    },\n    rpcGateway(payload, options) {\n      if (options?.get) {\n        const endpoint = buildRpcGetEndpoint(payload);\n        return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n      }\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/rpc\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    transactions: createGatewayHttpTransactionTransport({\n      postTransaction(payload, options) {\n        return callAthena(\n          normalizedConfig,\n          \"/gateway/transaction\",\n          \"POST\",\n          payload,\n          options\n        );\n      },\n    }),\n    updateGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/update\",\n        \"POST\",\n        serializeGatewayUpdateRequest(payload),\n        options\n      );\n    },\n    verifyConnection(options) {\n      return performConnectionCheck(\n        normalizedBaseUrl,\n        buildHeaders(normalizedConfig),\n        options\n      );\n    },\n  };\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n  | AthenaGatewayCallOptions\n  | undefined\n  | Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n  base?: AthenaGatewayCallOptions,\n  override?: AthenaGatewayCallOptions\n): AthenaGatewayCallOptions | undefined {\n  if (!(base || override)) {\n    return;\n  }\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n        : undefined,\n  };\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n  transport: AthenaGatewayClient,\n  resolveContext: AthenaGatewayCallOptionsResolver\n): AthenaGatewayClient {\n  const resolveCallOptions = async (\n    options?: AthenaGatewayCallOptions\n  ): Promise<AthenaGatewayCallOptions | undefined> =>\n    mergeGatewayCallOptions(await resolveContext(), options);\n\n  return {\n    baseUrl: transport.baseUrl,\n    buildHeaders(options) {\n      return transport.buildHeaders(options);\n    },\n    async deleteGateway(payload, options) {\n      return transport.deleteGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async fetchGateway(payload, options) {\n      return transport.fetchGateway(payload, await resolveCallOptions(options));\n    },\n    async insertGateway(payload, options) {\n      return transport.insertGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async queryGateway(payload, options) {\n      return transport.queryGateway(payload, await resolveCallOptions(options));\n    },\n    resolveCallOptions,\n    async rpcGateway(payload, options) {\n      return transport.rpcGateway(payload, await resolveCallOptions(options));\n    },\n    transactions: transport.transactions,\n    async updateGateway(payload, options) {\n      return transport.updateGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async verifyConnection(options) {\n      const context = await resolveCallOptions();\n      const contextHeaders = transport.buildHeaders(context);\n      return transport.verifyConnection({\n        ...options,\n        headers: {\n          ...contextHeaders,\n          ...(options?.headers ?? {}),\n        },\n      });\n    },\n  };\n}\n","/**\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  access_key_id: string;\n  endpoint: string;\n  region: string;\n  s3_id?: string;\n  s3Id?: 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: (\n    options?: AthenaStorageCallOptions\n  ) => 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: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => 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: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  get: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => 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: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => 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  object: AthenaStorageObjectNamespace;\n  permission: AthenaStoragePermissionNamespace;\n  /** Canonical service-backed managed-file authorization API. */\n  permissions: AthenaCanonicalStoragePermissionsNamespace;\n  /** Canonical provider capability discovery API. */\n  providers: AthenaCanonicalStorageProvidersNamespace;\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}\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;\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;\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\n/**\n * @docsCapability storage.objects\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\") {\n      return \"aws_s3\";\n    }\n    if (provider === \"r2\") {\n      return \"cloudflare_r2\";\n    }\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) {\n      binary += String.fromCharCode(byte);\n    }\n    return btoa(binary);\n  };\n\n  const providers: AthenaCanonicalStorageProvidersNamespace = {\n    async list(options) {\n      const result = await callManifestRoute<{\n        providers: Array<\n          Omit<\n            StorageProviderDescriptor,\n            \"id\" | \"protocol\" | \"connectionSchema\"\n          > & {\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<{\n        connections: StorageConnection[];\n      }>(\"listCanonicalStorageConnections\", { options });\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 }>(\n        \"purgeCanonicalStorageFile\",\n        {\n          options,\n          pathParams: { file_id: fileId },\n        }\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 type {\n  InternalAuthSessionPersistence,\n  InternalAuthSessionPersistenceAuthority,\n} from \"../auth/client/session-persistence.ts\";\nimport { createChatModule } from \"../chat/module.ts\";\nimport type {\n  AthenaChatModule,\n  AthenaChatWebSocketFactory,\n} from \"../chat/types.ts\";\nimport type {\n  AthenaFromOptions,\n  AthenaRowShape,\n  ClientTableQueryBuilder,\n  InternalClientBehaviorOptions,\n  RpcQueryBuilder,\n  TableQueryBuilder,\n  UntypedTableName,\n} from \"./fluent/types.ts\";\nimport {\n  createQueryBuilder,\n  createRpcBuilder,\n  createTableBuilder,\n} from \"./fluent/index.ts\";\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from \"../client-request.ts\";\nimport { createAthenaRequest } from \"../client-request.ts\";\nimport type { AthenaResult, AthenaResultFormatter } from \"../result/types.ts\";\nimport { createResultFormatter } from \"../result/formatter.ts\";\nimport { resolveTableNameForCall } from \"../client-sql.ts\";\nimport {\n  type AthenaCompatibilityCache,\n  type AthenaCompatibilityReport,\n  createCompatibilityCache,\n  discoverCompatibility,\n} from \"../compatibility/report.ts\";\nimport type { AthenaDbModule } from \"../db/module.ts\";\nimport {\n  beginInteractiveSession,\n  executeAtomicTransaction,\n  finishInteractiveSession,\n} from \"../db/transaction/index.ts\";\nimport { createInteractiveGatewayClient } from \"../db/transaction/interactive-gateway.ts\";\nimport type { AthenaTransactionOptions } from \"../db/transaction/types.ts\";\nimport { createTransactionScopedDb } from \"./transactions.ts\";\nimport {\n  type AthenaGatewayClient,\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n} from \"../gateway/client.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n} from \"../gateway/types.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"../gateway/url.ts\";\nimport type { AthenaCacheContextDescriptor } from \"../query/descriptor.ts\";\nimport { createQueryExecutionRuntime } from \"../query/execution/operation.ts\";\nimport { peekSyncCacheContext } from \"../query/descriptor.ts\";\nimport type { AthenaQueryTracer } from \"../query-tracing.ts\";\nimport { captureTraceCallsite, createQueryTracer } 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 { AthenaBillingModule } from \"../billing/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   * 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   * Redacted runtime plan (database / auth / storage / environment).\n   * Diagnostics only — not a configuration surface.\n   */\n  runtime: () => import(\"../runtime/resolve.ts\").AthenaRuntimeDiagnostics;\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 Will be removed in Athena 6.0.0. Use `admin.query()` for explicit operation and expected-shape metadata, or `db.query()` for the compatibility result shape.\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  env?: Record<string, string | 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  /** Internal marker for an injected SQLite Local database. */\n  localDatabase?: boolean;\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  readonly runtimeBindings?: AthenaClientRuntimeBindings;\n}\n\nexport interface AthenaClientRuntimeBindings {\n  billing?: AthenaBillingModule;\n  ownedResourceClose?: () => Promise<void>;\n  sessionPersistence?: InternalAuthSessionPersistence;\n  sessionPersistenceAuthority?: InternalAuthSessionPersistenceAuthority;\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>(\n  config: InternalClientConfig<TModels>,\n  runtimeBindings?: AthenaClientRuntimeBindings\n): 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    ...(runtimeBindings ? { runtimeBindings } : {}),\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 queryRuntime = createQueryExecutionRuntime({\n    behavior: config.behavior,\n    formatGatewayResult,\n    gateway,\n    tracer: queryTracer,\n  });\n  const auth = createAuthModule(\n    {\n      ...(normalizedAuthConfig ?? {}),\n    },\n    {\n      compatibilityWarnings: config.behavior?.rawQueryDiagnostics === true,\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      sessionPersistence: core.runtimeBindings?.sessionPersistence,\n      sessionPersistenceAuthority:\n        core.runtimeBindings?.sessionPersistenceAuthority,\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        queryRuntime,\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      queryRuntime,\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      queryRuntime,\n      captureTraceCallsite(queryTracer),\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    queryRuntime,\n    deprecationOwner\n  ) as InternalAthenaClient<TModels>[\"query\"];\n  const dbQuery = createQueryBuilder(queryRuntime);\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    /**\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    runtime() {\n      return {\n        auth: \"remote\",\n        chat: \"none\",\n        database: config.localDatabase ? \"sqlite-local\" : \"gateway\",\n        runtime: \"node\",\n        storage: \"none\",\n      };\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 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: dbQuery,\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    transaction(operations, options?: AthenaTransactionOptions) {\n      return executeAtomicTransaction({\n        formatGatewayResult,\n        gateway,\n        operations,\n        options,\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    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<TModels>({\n        behavior: config.behavior,\n        formatGatewayResult,\n        gateway: txGateway,\n        session,\n        tracer: queryTracer,\n      });\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              organizationId: context.organizationId,\n              sessionToken: context.sessionToken,\n              userId: context.userId,\n            }\n          : undefined;\n      },\n    }\n  );\n  const request = createAthenaRequest(config, resolveContext);\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  });\n\n  return {\n    admin,\n    auth: auth.auth,\n    chat,\n    db,\n    from,\n    health,\n    query,\n    request,\n    rpc,\n    storage,\n    system,\n    verifyConnection: gateway.verifyConnection,\n  } as InternalAthenaClient<TModels>;\n}\n","import type { AthenaRightContribution } from \"../../rights/contribution.ts\";\nimport { resolveAthenaRightsIr } from \"../../rights/resolver.ts\";\nimport type {\n\tAthenaRightDefinition,\n\tAthenaRightsIr,\n\tAthenaRightsMetadata,\n} from \"../../rights/types.ts\";\n\nexport type AthenaApplicationRightInput =\n\t| AthenaRightDefinition\n\t| AthenaRightContribution;\n\nfunction isRightContribution(\n\tvalue: AthenaApplicationRightInput,\n): value is AthenaRightContribution {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"definition\" in value &&\n\t\t\"source\" in value\n\t);\n}\n\nfunction requiredSource(source: string | undefined): string {\n\tif (!(source && source.trim())) {\n\t\tthrow new Error(\n\t\t\t\"Athena application right contributions require a non-empty source\",\n\t\t);\n\t}\n\treturn source;\n}\n\nexport function toAthenaApplicationRightContributions(\n\tinput: readonly AthenaApplicationRightInput[],\n\tsource?: string,\n): readonly AthenaRightContribution[] {\n\treturn Object.freeze(\n\t\tinput.map((entry) => {\n\t\t\tif (isRightContribution(entry)) {\n\t\t\t\treturn {\n\t\t\t\t\tdefinition: entry.definition,\n\t\t\t\t\tsource: entry.source,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdefinition: entry,\n\t\t\t\tsource: requiredSource(source),\n\t\t\t};\n\t\t}),\n\t);\n}\n\nexport function resolveAthenaApplicationRightsIr(\n\tinput: readonly AthenaApplicationRightInput[],\n\tsource?: string,\n\tmetadata: AthenaRightsMetadata = {},\n): AthenaRightsIr {\n\treturn resolveAthenaRightsIr(\n\t\ttoAthenaApplicationRightContributions(input, source),\n\t\tmetadata,\n\t);\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport {\n  type AthenaResolvedResource,\n  athenaResourceKeys,\n  parseAthenaResourceRef,\n  resolvedAthenaResource,\n} from \"../../schema/resource.ts\";\nimport type { ModelRelationMetadata } from \"../../schema/types.ts\";\nimport type { AthenaRuntimeModelEnforcement } from \"./types.ts\";\n\nexport interface AthenaRuntimeModelDescriptor extends AthenaResolvedResource {\n  readonly columnIdentities: ReadonlyMap<\n    string,\n    AthenaRuntimeModelColumnIdentity\n  >;\n  readonly columns: ReadonlySet<string>;\n  readonly primaryKey?: readonly string[];\n  readonly relations: ReadonlyMap<string, ModelRelationMetadata>;\n  readonly uniqueKeys: readonly (readonly string[])[];\n}\n\nexport interface AthenaRuntimeModelColumnIdentity {\n  readonly logical: string;\n  readonly physical: string;\n}\n\nexport interface AthenaRuntimeModelIndex {\n  readonly descriptors: readonly AthenaRuntimeModelDescriptor[];\n  readonly enforcement: AthenaRuntimeModelEnforcement;\n  get(resource: string): AthenaRuntimeModelDescriptor | undefined;\n}\n\ninterface ModelMetaLike {\n  columns?: Partial<Record<string, unknown>>;\n  database?: string;\n  model?: string;\n  primaryKey?: unknown;\n  relations?: Record<string, ModelRelationMetadata>;\n  schema?: string;\n  tableName?: string;\n}\n\ninterface ModelLike {\n  meta?: ModelMetaLike;\n  qualifiedName?: 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 isModelLike(value: unknown): value is ModelLike {\n  if (!(isRecord(value) && isRecord(value.meta))) {\n    return false;\n  }\n  return Array.isArray(value.meta.primaryKey);\n}\n\nfunction collectModels(input: unknown, found: ModelLike[]): void {\n  if (!input || typeof input !== \"object\") {\n    return;\n  }\n  if (isModelLike(input)) {\n    found.push(input);\n    return;\n  }\n  if (!isRecord(input)) {\n    return;\n  }\n  if (isRecord(input.models)) {\n    collectModels(input.models, found);\n    return;\n  }\n  if (isRecord(input.schemas)) {\n    collectModels(input.schemas, found);\n    return;\n  }\n  for (const value of Object.values(input)) {\n    collectModels(value, found);\n  }\n}\n\nfunction physicalTable(\n  meta: ModelMetaLike,\n  model: ModelLike\n): {\n  schema?: string;\n  table: string;\n} {\n  const tableName =\n    (typeof model.tableName === \"string\" && model.tableName.trim()) ||\n    (typeof meta.tableName === \"string\" && meta.tableName.trim()) ||\n    (typeof meta.model === \"string\" && meta.model.trim()) ||\n    \"\";\n  const qualified =\n    (typeof model.qualifiedName === \"string\" && model.qualifiedName.trim()) ||\n    tableName;\n  const schemaFromMeta =\n    typeof meta.schema === \"string\" && meta.schema.trim()\n      ? meta.schema.trim()\n      : undefined;\n  const parsed = parseAthenaResourceRef(qualified);\n  return {\n    schema: schemaFromMeta ?? parsed.schema,\n    table: parsed.table,\n  };\n}\n\nfunction columnIdentities(\n  meta: ModelMetaLike\n): Map<string, AthenaRuntimeModelColumnIdentity> {\n  const identities = new Map<string, AthenaRuntimeModelColumnIdentity>();\n  const add = (\n    alias: string,\n    identity: AthenaRuntimeModelColumnIdentity\n  ) => {\n    const existing = identities.get(alias);\n    if (\n      existing &&\n      (existing.logical !== identity.logical ||\n        existing.physical !== identity.physical)\n    ) {\n      throw invalidRegistry(\n        `ambiguous column alias \"${alias}\" maps to both \"${existing.physical}\" and \"${identity.physical}\"`\n      );\n    }\n    identities.set(alias, identity);\n  };\n  if (meta.columns) {\n    for (const [key, value] of Object.entries(meta.columns)) {\n      const physical =\n        value && typeof value === \"object\"\n          ? (value as { columnName?: unknown }).columnName\n          : undefined;\n      const identity = Object.freeze({\n        logical: key,\n        physical:\n          typeof physical === \"string\" && physical.trim()\n            ? physical.trim()\n            : key,\n      });\n      add(identity.logical, identity);\n      add(identity.physical, identity);\n    }\n  }\n  if (Array.isArray(meta.primaryKey)) {\n    for (const key of meta.primaryKey) {\n      if (typeof key !== \"string\" || !key.trim()) {\n        continue;\n      }\n      const token = key.trim();\n      if (!identities.has(token)) {\n        add(token, Object.freeze({ logical: token, physical: token }));\n      }\n    }\n  }\n  return identities;\n}\n\nfunction columnNames(\n  identities: ReadonlyMap<string, AthenaRuntimeModelColumnIdentity>\n): Set<string> {\n  const columns = new Set<string>();\n  for (const identity of identities.values()) {\n    columns.add(identity.logical);\n    columns.add(identity.physical);\n  }\n  return columns;\n}\n\nfunction toDescriptor(model: ModelLike): AthenaRuntimeModelDescriptor {\n  const meta = model.meta ?? {};\n  const { schema, table } = physicalTable(meta, model);\n  const identities = columnIdentities(meta);\n  const parsedQualified = parseAthenaResourceRef(\n    (typeof model.qualifiedName === \"string\" && model.qualifiedName.trim()) ||\n      (typeof meta.tableName === \"string\" && meta.tableName.trim()) ||\n      \"\"\n  );\n  const database =\n    (typeof meta.database === \"string\" && meta.database.trim()\n      ? meta.database.trim()\n      : undefined) ?? parsedQualified.database;\n  const modelName =\n    typeof meta.model === \"string\" && meta.model.trim()\n      ? meta.model.trim()\n      : undefined;\n  const resolved = resolvedAthenaResource({\n    ...(database ? { database } : {}),\n    ...(schema ? { schema } : {}),\n    ...(modelName ? { model: modelName } : {}),\n    table,\n  });\n  const primaryKey = Array.isArray(meta.primaryKey)\n    ? meta.primaryKey.filter(\n        (key): key is string => typeof key === \"string\" && key.trim().length > 0\n      )\n    : [];\n  const relations = new Map<string, ModelRelationMetadata>();\n  if (meta.relations) {\n    for (const [name, relation] of Object.entries(meta.relations)) {\n      if (relation) {\n        relations.set(name, relation);\n      }\n    }\n  }\n  return {\n    ...resolved,\n    columnIdentities: identities,\n    columns: columnNames(identities),\n    primaryKey: primaryKey.length > 0 ? primaryKey : undefined,\n    relations,\n    uniqueKeys: primaryKey.length > 0 ? [primaryKey] : [],\n  };\n}\n\nfunction invalidRegistry(message: string): AthenaConfigurationError {\n  return new AthenaConfigurationError(\n    \"ATHENA_RUNTIME_CONFIG_INVALID\",\n    `ATHENA_MODEL_INVALID_REGISTRY: ${message}`,\n    \"db\"\n  );\n}\n\nexport function buildAthenaRuntimeModelIndex(\n  models: unknown,\n  enforcement: AthenaRuntimeModelEnforcement\n): AthenaRuntimeModelIndex {\n  const collected: ModelLike[] = [];\n  collectModels(models, collected);\n  const ambiguous = Symbol(\"ambiguous\");\n  const byAlias = new Map<\n    string,\n    AthenaRuntimeModelDescriptor | typeof ambiguous\n  >();\n  const descriptors: AthenaRuntimeModelDescriptor[] = [];\n  const claimedCanonical = new Set<string>();\n\n  for (const model of collected) {\n    const descriptor = toDescriptor(model);\n    if (!descriptor.table) {\n      throw invalidRegistry(\"model is missing a table name\");\n    }\n    if (claimedCanonical.has(descriptor.canonicalResource)) {\n      throw invalidRegistry(\n        `duplicate resource mapping for ${descriptor.canonicalResource}`\n      );\n    }\n    claimedCanonical.add(descriptor.canonicalResource);\n    descriptors.push(descriptor);\n    const aliases = new Set<string>([\n      descriptor.canonicalResource,\n      ...athenaResourceKeys(descriptor),\n    ]);\n    for (const alias of aliases) {\n      const existing = byAlias.get(alias);\n      if (existing === ambiguous) {\n        continue;\n      }\n      if (\n        existing &&\n        existing.canonicalResource !== descriptor.canonicalResource\n      ) {\n        byAlias.set(alias, ambiguous);\n        continue;\n      }\n      byAlias.set(alias, descriptor);\n    }\n  }\n\n  return {\n    descriptors,\n    enforcement,\n    get(resource: string) {\n      const trimmed = resource.trim();\n      if (!trimmed) {\n        return;\n      }\n      const found = byAlias.get(trimmed);\n      return found === ambiguous ? undefined : found;\n    },\n  };\n}\n\nexport function resolveModelEnforcement(options: {\n  explicit?: AthenaRuntimeModelEnforcement;\n  hasModels: boolean;\n  http?: boolean;\n  securityMode: \"trusted\" | \"authenticated\" | \"policy\";\n}): AthenaRuntimeModelEnforcement {\n  if (options.explicit) {\n    return options.explicit;\n  }\n  if (options.securityMode === \"policy\" && options.hasModels) {\n    return \"strict\";\n  }\n  if (\n    options.http === true &&\n    options.hasModels &&\n    options.securityMode !== \"trusted\"\n  ) {\n    return \"known-only\";\n  }\n  return \"off\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return isRecord(value) ? value : undefined;\n}\n\nexport function resourceNameFromPayload(payload: unknown): string | undefined {\n  const record = asRecord(payload);\n  if (!record) {\n    return;\n  }\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\nfunction pushSelectTokens(target: string[], columns: unknown): void {\n  if (typeof columns === \"string\") {\n    for (const part of columns.split(\",\")) {\n      const token = part.trim();\n      if (token && token !== \"*\") {\n        target.push(token.split(/\\s+as\\s+/i)[0]?.trim() ?? token);\n      }\n    }\n    return;\n  }\n  if (Array.isArray(columns)) {\n    for (const part of columns) {\n      if (typeof part === \"string\" && part.trim() && part.trim() !== \"*\") {\n        target.push(part.trim());\n      }\n    }\n  }\n}\n\nexport function referencedFields(payload: unknown): readonly string[] {\n  const record = asRecord(payload);\n  if (!record) {\n    return [];\n  }\n  const fields: string[] = [];\n  pushSelectTokens(fields, record.columns);\n  if (typeof record.select === \"string\") {\n    pushSelectTokens(fields, record.select);\n  } else if (isRecord(record.select)) {\n    for (const [key, value] of Object.entries(record.select)) {\n      if (value === true || value === 1) {\n        fields.push(key);\n      }\n    }\n  }\n  if (Array.isArray(record.conditions)) {\n    for (const condition of record.conditions) {\n      if (!isRecord(condition)) {\n        continue;\n      }\n      if (typeof condition.column === \"string\") {\n        fields.push(condition.column);\n      }\n      if (typeof condition.eq_column === \"string\") {\n        fields.push(condition.eq_column);\n      }\n    }\n  }\n  if (isRecord(record.sort_by) && typeof record.sort_by.field === \"string\") {\n    fields.push(record.sort_by.field);\n  }\n  if (typeof record.aggregation_column === \"string\") {\n    fields.push(record.aggregation_column);\n  }\n  if (typeof record.group_by === \"string\") {\n    fields.push(record.group_by);\n  }\n  const bodies = [record.insert_body, record.update_body];\n  for (const body of bodies) {\n    const rows = Array.isArray(body) ? body : [body];\n    for (const row of rows) {\n      if (!isRecord(row)) {\n        continue;\n      }\n      fields.push(...Object.keys(row));\n    }\n  }\n  return fields;\n}\n\nexport function referencedRelations(payload: unknown): readonly string[] {\n  const record = asRecord(payload);\n  if (!(record && isRecord(record.select))) {\n    return [];\n  }\n  return Object.keys(record.select);\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\n\nexport type AthenaAuthorizationBindingErrorCode =\n\t| \"ATHENA_AUTHORIZATION_BINDING_INVALID_RESOURCE\"\n\t| \"ATHENA_AUTHORIZATION_BINDING_INVALID_SCOPE\"\n\t| \"ATHENA_AUTHORIZATION_BINDING_UNKNOWN_MODEL\"\n\t| \"ATHENA_AUTHORIZATION_BINDING_UNKNOWN_COLUMN\"\n\t| \"ATHENA_AUTHORIZATION_BINDING_DUPLICATE_RESOURCE\"\n\t| \"ATHENA_AUTHORIZATION_BINDING_CONFLICTING_RESOURCE\";\n\nexport class AthenaAuthorizationBindingError extends AthenaConfigurationError {\n\treadonly bindingCode: AthenaAuthorizationBindingErrorCode;\n\treadonly details?: Readonly<Record<string, string>>;\n\n\tconstructor(\n\t\tbindingCode: AthenaAuthorizationBindingErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Readonly<Record<string, string>>,\n\t\toptions?: { cause?: unknown },\n\t) {\n\t\tsuper(\n\t\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\t\t`${bindingCode}: ${message}`,\n\t\t\t\"db\",\n\t\t\toptions,\n\t\t);\n\t\tthis.name = \"AthenaAuthorizationBindingError\";\n\t\tthis.bindingCode = bindingCode;\n\t\tthis.details = details;\n\t}\n}\n\nexport function authorizationBindingError(\n\tbindingCode: AthenaAuthorizationBindingErrorCode,\n\tmessage: string,\n\tdetails?: Readonly<Record<string, string>>,\n\toptions?: { cause?: unknown },\n): never {\n\tthrow new AthenaAuthorizationBindingError(\n\t\tbindingCode,\n\t\tmessage,\n\t\tdetails,\n\t\toptions,\n\t);\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport { parseAthenaRightKey, type AthenaRightKey } from \"../../rights/key.ts\";\nimport {\n\tcanonicalAthenaResource,\n\tparseAthenaResourceRef,\n\tresolvedAthenaResource,\n} from \"../../schema/resource.ts\";\nimport {\n\tauthorizationBindingError,\n\ttype AthenaAuthorizationBindingErrorCode,\n} from \"./binding-errors.ts\";\n\nexport const ATHENA_MODEL_AUTHORIZATION_BINDING_KIND =\n\t\"athena.authorization.model-binding\" as const;\nexport const ATHENA_MODEL_AUTHORIZATION_BINDING_IR_VERSION = 1 as const;\n\nexport type AthenaModelAuthorizationOperation =\n\t| \"select\"\n\t| \"insert\"\n\t| \"update\"\n\t| \"delete\";\n\nexport interface AthenaModelAuthorizationColumn {\n\tlogical: string;\n\tphysical: string;\n}\n\nexport interface AthenaModelAuthorizationScope {\n\tcolumn: AthenaModelAuthorizationColumn;\n\tkind: \"organization\" | \"tenant\" | \"user\";\n}\n\nexport interface AthenaModelAuthorizationScopeInput {\n\tcolumn: string | AthenaModelAuthorizationColumn;\n\tkind: \"organization\" | \"tenant\" | \"user\";\n}\n\nexport type AthenaModelAuthorizationScopePrincipalPath =\n\t| \"principal.organizationId\"\n\t| \"principal.tenantId\"\n\t| \"principal.userId\";\n\nexport interface AthenaModelAuthorizationIdentity {\n\tcolumn: string;\n}\n\nexport interface AthenaModelAuthorizationResourceIdentity {\n\tcanonicalResource: string;\n\tmodel: string;\n\ttable: string;\n}\n\nexport interface AthenaModelAuthorizationBinding {\n\tidentity?: AthenaModelAuthorizationIdentity;\n\tirVersion: typeof ATHENA_MODEL_AUTHORIZATION_BINDING_IR_VERSION;\n\tkind: typeof ATHENA_MODEL_AUTHORIZATION_BINDING_KIND;\n\tresource: AthenaModelAuthorizationResourceIdentity;\n\trights: Record<AthenaModelAuthorizationOperation, AthenaRightKey>;\n\tscope?: AthenaModelAuthorizationScope;\n}\n\nexport interface AthenaModelAuthorizationBindingInput {\n\tidentity?: { column: string };\n\tresource: { model: string; table: string };\n\trights: Record<AthenaModelAuthorizationOperation, AthenaRightKey | string>;\n\tscope?: AthenaModelAuthorizationScopeInput;\n}\n\nfunction requiredToken(\n\tvalue: string,\n\tbindingCode: AthenaAuthorizationBindingErrorCode,\n\tfield: string,\n): string {\n\tconst token = value.trim();\n\tif (!token) {\n\t\tauthorizationBindingError(bindingCode, `${field} must be a non-empty string`);\n\t}\n\treturn token;\n}\n\nfunction freezeScope(\n\tscope: AthenaModelAuthorizationScopeInput,\n): AthenaModelAuthorizationScope {\n\tif (\n\t\tscope.kind !== \"organization\" &&\n\t\tscope.kind !== \"tenant\" &&\n\t\tscope.kind !== \"user\"\n\t) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_SCOPE\",\n\t\t\t`scope.kind \"${String(scope.kind)}\" is not supported`,\n\t\t);\n\t}\n\tconst column =\n\t\ttypeof scope.column === \"string\"\n\t\t\t? { logical: scope.column, physical: scope.column }\n\t\t\t: {\n\t\t\t\t\tlogical: requiredToken(\n\t\t\t\t\t\tscope.column.logical,\n\t\t\t\t\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_SCOPE\",\n\t\t\t\t\t\t\"scope.column.logical\",\n\t\t\t\t\t),\n\t\t\t\t\tphysical: requiredToken(\n\t\t\t\t\t\tscope.column.physical,\n\t\t\t\t\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_SCOPE\",\n\t\t\t\t\t\t\"scope.column.physical\",\n\t\t\t\t\t),\n\t\t\t\t};\n\treturn Object.freeze({\n\t\tcolumn: Object.freeze(column),\n\t\tkind: scope.kind,\n\t});\n}\n\nfunction resolveResourceIdentity(\n\tinput: AthenaModelAuthorizationBindingInput[\"resource\"],\n): AthenaModelAuthorizationResourceIdentity {\n\tconst model = requiredToken(\n\t\tinput.model,\n\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_RESOURCE\",\n\t\t\"resource.model\",\n\t);\n\tconst tableToken = requiredToken(\n\t\tinput.table,\n\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_RESOURCE\",\n\t\t\"resource.table\",\n\t);\n\tconst parsed = parseAthenaResourceRef(tableToken);\n\tif (!parsed.table.trim()) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_RESOURCE\",\n\t\t\t\"resource.table must resolve to a relation table name\",\n\t\t);\n\t}\n\tconst canonicalResource = canonicalAthenaResource(parsed);\n\tconst resolved = resolvedAthenaResource({\n\t\t...parsed,\n\t\tmodel,\n\t});\n\treturn Object.freeze({\n\t\tcanonicalResource,\n\t\tmodel,\n\t\ttable: resolved.canonicalResource,\n\t});\n}\n\nfunction resolveIdentity(\n\tidentity: AthenaModelAuthorizationBindingInput[\"identity\"],\n): AthenaModelAuthorizationIdentity | undefined {\n\tif (!identity) {\n\t\treturn;\n\t}\n\treturn Object.freeze({\n\t\tcolumn: requiredToken(\n\t\t\tidentity.column,\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_INVALID_RESOURCE\",\n\t\t\t\"identity.column\",\n\t\t),\n\t});\n}\n\nfunction resolveRights(\n\trights: AthenaModelAuthorizationBindingInput[\"rights\"],\n): Record<AthenaModelAuthorizationOperation, AthenaRightKey> {\n\treturn Object.freeze({\n\t\tdelete: parseAthenaRightKey(rights.delete),\n\t\tinsert: parseAthenaRightKey(rights.insert),\n\t\tselect: parseAthenaRightKey(rights.select),\n\t\tupdate: parseAthenaRightKey(rights.update),\n\t});\n}\n\nfunction bindingSemanticPayload(binding: AthenaModelAuthorizationBinding): {\n\tidentity: string | null;\n\tkind: string;\n\tresource: {\n\t\tcanonicalResource: string;\n\t\tmodel: string;\n\t\ttable: string;\n\t};\n\trights: Record<AthenaModelAuthorizationOperation, string>;\n\tscope: {\n\t\tcolumn: AthenaModelAuthorizationColumn;\n\t\tkind: AthenaModelAuthorizationScope[\"kind\"];\n\t} | null;\n\tversion: number;\n} {\n\treturn {\n\t\tidentity: binding.identity?.column ?? null,\n\t\tkind: binding.kind,\n\t\tresource: {\n\t\t\tcanonicalResource: binding.resource.canonicalResource,\n\t\t\tmodel: binding.resource.model,\n\t\t\ttable: binding.resource.table,\n\t\t},\n\t\trights: {\n\t\t\tdelete: binding.rights.delete,\n\t\t\tinsert: binding.rights.insert,\n\t\t\tselect: binding.rights.select,\n\t\t\tupdate: binding.rights.update,\n\t\t},\n\t\tscope: binding.scope\n\t\t\t? {\n\t\t\t\t\tcolumn: binding.scope.column,\n\t\t\t\t\tkind: binding.scope.kind,\n\t\t\t\t}\n\t\t\t: null,\n\t\tversion: binding.irVersion,\n\t};\n}\n\nexport function serializeAthenaModelAuthorizationBinding(\n\tbinding: AthenaModelAuthorizationBinding,\n): string {\n\treturn JSON.stringify(bindingSemanticPayload(binding));\n}\n\nexport function fingerprintAthenaModelAuthorizationBinding(\n\tbinding: AthenaModelAuthorizationBinding,\n): string {\n\treturn bytesToHex(\n\t\tsha256(utf8ToBytes(serializeAthenaModelAuthorizationBinding(binding))),\n\t);\n}\n\nexport function authorizeModel(\n\tinput: AthenaModelAuthorizationBindingInput,\n): AthenaModelAuthorizationBinding {\n\tconst identity = resolveIdentity(input.identity);\n\tconst scope = input.scope ? freezeScope(input.scope) : undefined;\n\tconst binding: AthenaModelAuthorizationBinding = {\n\t\t...(identity ? { identity } : {}),\n\t\tirVersion: ATHENA_MODEL_AUTHORIZATION_BINDING_IR_VERSION,\n\t\tkind: ATHENA_MODEL_AUTHORIZATION_BINDING_KIND,\n\t\tresource: resolveResourceIdentity(input.resource),\n\t\trights: resolveRights(input.rights),\n\t\t...(scope ? { scope } : {}),\n\t};\n\treturn Object.freeze(binding);\n}\n\nfunction scope(kind: AthenaModelAuthorizationScope[\"kind\"], column: string): AthenaModelAuthorizationScope {\n\treturn freezeScope({ column, kind });\n}\n\nexport function organizationScope(column: string): AthenaModelAuthorizationScope {\n\treturn scope(\"organization\", column);\n}\n\nexport function tenantScope(column: string): AthenaModelAuthorizationScope {\n\treturn scope(\"tenant\", column);\n}\n\nexport function userScope(column: string): AthenaModelAuthorizationScope {\n\treturn scope(\"user\", column);\n}\n\nexport function authorizationScopePrincipalPath(\n\tscope: AthenaModelAuthorizationScope,\n): AthenaModelAuthorizationScopePrincipalPath {\n\tswitch (scope.kind) {\n\t\tcase \"organization\":\n\t\t\treturn \"principal.organizationId\";\n\t\tcase \"tenant\":\n\t\t\treturn \"principal.tenantId\";\n\t\tcase \"user\":\n\t\t\treturn \"principal.userId\";\n\t}\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\nimport { buildAthenaRuntimeModelIndex } from \"../data/model-registry.ts\";\nimport { canonicalAthenaResource, parseAthenaResourceRef } from \"../../schema/resource.ts\";\nimport {\n\tauthorizationBindingError,\n} from \"./binding-errors.ts\";\nimport {\n\ttype AthenaModelAuthorizationBinding,\n\ttype AthenaModelAuthorizationBindingInput,\n\tauthorizeModel,\n\tfingerprintAthenaModelAuthorizationBinding,\n\tserializeAthenaModelAuthorizationBinding,\n} from \"./model-binding.ts\";\n\nexport const ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_KIND =\n\t\"athena.authorization.model-binding-registry\" as const;\nexport const ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_IR_VERSION = 1 as const;\n\ninterface ModelDescriptorLike {\n\tcanonicalResource: string;\n\tcolumnIdentities?: ReadonlyMap<string, { logical: string; physical: string }>;\n\tcolumns: ReadonlySet<string>;\n\tmodel?: string;\n}\n\nexport interface AthenaModelAuthorizationBindingRegistry {\n\tbindings: readonly AthenaModelAuthorizationBinding[];\n\tfingerprint: string;\n\tget(resource: string): AthenaModelAuthorizationBinding | undefined;\n\tirVersion: typeof ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_IR_VERSION;\n\tkind: typeof ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_KIND;\n}\n\nexport interface AthenaModelAuthorizationBindingRegistryOptions {\n\tmodels?: unknown;\n}\n\nfunction compareStrings(left: string, right: string): number {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction semanticKey(binding: AthenaModelAuthorizationBinding): string {\n\treturn serializeAthenaModelAuthorizationBinding(binding);\n}\n\nfunction resolveCanonicalResource(resource: string): string {\n\treturn canonicalAthenaResource(parseAthenaResourceRef(resource));\n}\n\nfunction findDescriptor(\n\tbinding: AthenaModelAuthorizationBinding,\n\tdescriptors: readonly ModelDescriptorLike[],\n): ModelDescriptorLike | undefined {\n\tconst byModel = descriptors.filter(\n\t\t(entry) => entry.model === binding.resource.model,\n\t);\n\tif (byModel.length === 0) {\n\t\treturn;\n\t}\n\treturn (\n\t\tbyModel.find(\n\t\t(entry) =>\n\t\t\tentry.canonicalResource === binding.resource.canonicalResource,\n\t\t) ?? byModel[0]\n\t);\n}\n\nfunction validateBindingAgainstModels(\n\tbinding: AthenaModelAuthorizationBinding,\n\tdescriptors: readonly ModelDescriptorLike[],\n): void {\n\tconst descriptor = findDescriptor(binding, descriptors);\n\tif (!descriptor) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_UNKNOWN_MODEL\",\n\t\t\t`Unknown model \"${binding.resource.model}\"`,\n\t\t\t{\n\t\t\t\tmodel: binding.resource.model,\n\t\t\t\tresource: binding.resource.canonicalResource,\n\t\t\t},\n\t\t);\n\t}\n\tif (descriptor.canonicalResource !== binding.resource.canonicalResource) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_CONFLICTING_RESOURCE\",\n\t\t\t`Model \"${binding.resource.model}\" is declared on \"${binding.resource.canonicalResource}\" but metadata points to \"${descriptor.canonicalResource}\"`,\n\t\t\t{\n\t\t\t\tmodel: binding.resource.model,\n\t\t\t\tresource: binding.resource.canonicalResource,\n\t\t\t\tresolvedResource: descriptor.canonicalResource,\n\t\t\t},\n\t\t);\n\t}\n\tconst columns = descriptor.columns;\n\tif (binding.identity && !columns.has(binding.identity.column)) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_UNKNOWN_COLUMN\",\n\t\t\t`identity.column \"${binding.identity.column}\" is not defined on model \"${binding.resource.model}\"`,\n\t\t\t{\n\t\t\t\tcolumn: binding.identity.column,\n\t\t\t\tmodel: binding.resource.model,\n\t\t\t},\n\t\t);\n\t}\n\tif (\n\t\tbinding.scope &&\n\t\t!columns.has(binding.scope.column.logical) &&\n\t\t!columns.has(binding.scope.column.physical)\n\t) {\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_UNKNOWN_COLUMN\",\n\t\t\t`scope.column \"${binding.scope.column.logical}\" is not defined on model \"${binding.resource.model}\"`,\n\t\t\t{\n\t\t\t\tcolumn: binding.scope.column.logical,\n\t\t\t\tmodel: binding.resource.model,\n\t\t\t},\n\t\t);\n\t}\n}\n\nfunction resolveBindingColumns(\n\tbinding: AthenaModelAuthorizationBinding,\n\tdescriptors: readonly ModelDescriptorLike[],\n): AthenaModelAuthorizationBinding {\n\tif (!binding.scope) {\n\t\treturn binding;\n\t}\n\tconst descriptor = findDescriptor(binding, descriptors);\n\tconst identities = descriptor?.columnIdentities;\n\tconst resolved =\n\t\tidentities?.get(binding.scope.column.logical) ??\n\t\tidentities?.get(binding.scope.column.physical);\n\tif (!resolved) {\n\t\treturn binding;\n\t}\n\treturn Object.freeze({\n\t\t...binding,\n\t\tscope: Object.freeze({\n\t\t\t...binding.scope,\n\t\t\tcolumn: Object.freeze({\n\t\t\t\tlogical: resolved.logical,\n\t\t\t\tphysical: resolved.physical,\n\t\t\t}),\n\t\t}),\n\t});\n}\n\nfunction registryFingerprint(\n\tbindings: readonly AthenaModelAuthorizationBinding[],\n): string {\n\treturn bytesToHex(\n\t\tsha256(\n\t\t\tutf8ToBytes(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tbindings: bindings.map((binding) => ({\n\t\t\t\t\t\tfingerprint: fingerprintAthenaModelAuthorizationBinding(binding),\n\t\t\t\t\t\tresource: binding.resource.canonicalResource,\n\t\t\t\t\t})),\n\t\t\t\t\tirVersion: ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_IR_VERSION,\n\t\t\t\t\tkind: ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_KIND,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction freezeBindings(\n\tbindings: readonly AthenaModelAuthorizationBinding[],\n): readonly AthenaModelAuthorizationBinding[] {\n\treturn Object.freeze(bindings.map((binding) => Object.freeze(binding)));\n}\n\nexport function createAthenaModelAuthorizationBindingRegistry(\n\tbindings: readonly (\n\t\t| AthenaModelAuthorizationBinding\n\t\t| AthenaModelAuthorizationBindingInput\n\t)[],\n\toptions: AthenaModelAuthorizationBindingRegistryOptions = {},\n): AthenaModelAuthorizationBindingRegistry {\n\tconst descriptors =\n\t\toptions.models === undefined\n\t\t\t? []\n\t\t\t: buildAthenaRuntimeModelIndex(options.models, \"strict\").descriptors.map(\n\t\t\t\t\t(descriptor) => ({\n\t\t\t\t\t\tcanonicalResource: descriptor.canonicalResource,\n\t\t\t\t\t\tcolumnIdentities: descriptor.columnIdentities,\n\t\t\t\t\t\tcolumns: descriptor.columns,\n\t\t\t\t\t\tmodel: descriptor.model,\n\t\t\t\t\t}),\n\t\t\t\t);\n\tconst canonicalBindings = bindings.map((binding) => {\n\t\tconst canonical = authorizeModel(binding);\n\t\treturn resolveBindingColumns(canonical, descriptors);\n\t});\n\tconst sortedBindings = [...canonicalBindings].sort((left, right) => {\n\t\tconst byResource = compareStrings(\n\t\t\tleft.resource.canonicalResource,\n\t\t\tright.resource.canonicalResource,\n\t\t);\n\t\tif (byResource !== 0) {\n\t\t\treturn byResource;\n\t\t}\n\t\treturn compareStrings(semanticKey(left), semanticKey(right));\n\t});\n\n\tconst byResource = new Map<string, AthenaModelAuthorizationBinding>();\n\tfor (const binding of sortedBindings) {\n\t\tconst existing = byResource.get(binding.resource.canonicalResource);\n\t\tif (!existing) {\n\t\t\tbyResource.set(binding.resource.canonicalResource, binding);\n\t\t\tcontinue;\n\t\t}\n\t\tif (semanticKey(existing) === semanticKey(binding)) {\n\t\t\tauthorizationBindingError(\n\t\t\t\t\"ATHENA_AUTHORIZATION_BINDING_DUPLICATE_RESOURCE\",\n\t\t\t\t`Duplicate authorization binding for resource \"${binding.resource.canonicalResource}\"`,\n\t\t\t\t{ resource: binding.resource.canonicalResource },\n\t\t\t);\n\t\t}\n\t\tauthorizationBindingError(\n\t\t\t\"ATHENA_AUTHORIZATION_BINDING_CONFLICTING_RESOURCE\",\n\t\t\t`Conflicting authorization bindings for resource \"${binding.resource.canonicalResource}\"`,\n\t\t\t{ resource: binding.resource.canonicalResource },\n\t\t);\n\t}\n\n\tif (descriptors.length > 0) {\n\t\tfor (const binding of sortedBindings) {\n\t\t\tvalidateBindingAgainstModels(binding, descriptors);\n\t\t}\n\t}\n\n\tconst frozenBindings = freezeBindings(sortedBindings);\n\tconst lookup = new Map<string, AthenaModelAuthorizationBinding>();\n\tfor (const binding of frozenBindings) {\n\t\tconst canonical = binding.resource.canonicalResource;\n\t\tlookup.set(canonical, binding);\n\t\tlookup.set(binding.resource.table, binding);\n\t\tlookup.set(binding.resource.model, binding);\n\t\tlookup.set(resolveCanonicalResource(canonical), binding);\n\t}\n\tconst registry = {\n\t\tbindings: frozenBindings,\n\t\tfingerprint: registryFingerprint(frozenBindings),\n\t\tget(resource: string) {\n\t\t\tconst token = resource.trim();\n\t\t\tif (!token) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn lookup.get(token) ?? lookup.get(resolveCanonicalResource(token));\n\t\t},\n\t\tirVersion: ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_IR_VERSION,\n\t\tkind: ATHENA_MODEL_AUTHORIZATION_BINDING_REGISTRY_KIND,\n\t};\n\treturn Object.freeze(registry);\n}\n","import type {\n\tAthenaModelAuthorizationBinding,\n\tAthenaModelAuthorizationBindingInput,\n} from \"./model-binding.ts\";\nimport type { AthenaApplicationRightInput } from \"./application-rights.ts\";\nimport type { AthenaModelAuthorizationBindingRegistry } from \"./binding-registry.ts\";\nimport type { AthenaAuthorizationIrState } from \"./state.ts\";\n\nexport const ATHENA_AUTHORIZATION_CLIENT_CONFIG_KIND =\n\t\"athena.authorization.client-config\" as const;\nexport const ATHENA_AUTHORIZATION_CLIENT_CONFIG_IR_VERSION = 1 as const;\n\nexport const ATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT =\n\t\"ATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT\" as const;\nexport const ATHENA_AUTHORIZATION_SERVER_AUTHORITY_REQUIRED =\n\t\"ATHENA_AUTHORIZATION_SERVER_AUTHORITY_REQUIRED\" as const;\nexport type AthenaAuthorizationUnmatchedResourceMode = \"allow\" | \"deny\";\n\nexport type AthenaAuthorizationTrustedSubject =\n\t| \"organizationId\"\n\t| \"tenantId\"\n\t| \"userId\";\n\nexport interface AthenaClientAuthorizationConfigInput {\n\tdata?: readonly (\n\t\t| AthenaModelAuthorizationBinding\n\t\t| AthenaModelAuthorizationBindingInput\n\t)[];\n\trights?: readonly AthenaApplicationRightInput[];\n\tunmatchedResources?: AthenaAuthorizationUnmatchedResourceMode;\n}\n\nexport interface AthenaAuthorizationRuntimeConfigInput {\n\tauth?: unknown;\n\tauthorization?: AthenaClientAuthorizationConfigInput | null;\n\td1?: unknown;\n\tdatabaseUrl?: string | null;\n\tdb?: {\n\t\td1?: unknown;\n\t\tpgUri?: string | null;\n\t\tpool?: unknown;\n\t\turl?: string | null;\n\t};\n\tgatewayTransport?: unknown;\n\tmodels?: unknown;\n\turl?: string | null;\n}\n\nexport interface NormalizedAthenaAuthorizationConfig {\n\treadonly bindingRegistry?: AthenaModelAuthorizationBindingRegistry;\n\treadonly hasDataBindings: boolean;\n\treadonly irVersion: typeof ATHENA_AUTHORIZATION_CLIENT_CONFIG_IR_VERSION;\n\treadonly kind: typeof ATHENA_AUTHORIZATION_CLIENT_CONFIG_KIND;\n\treadonly registryFingerprint?: string;\n\treadonly rightsState: AthenaAuthorizationIrState;\n\treadonly unmatchedResources: AthenaAuthorizationUnmatchedResourceMode;\n}\n","import {\n  type AthenaRightsAuthority,\n  createAthenaRightsAuthority,\n} from \"../../rights/authority.ts\";\nimport { getAthenaAuthorizationRightsIr } from \"./catalog.ts\";\nimport { canonicalizeAthenaRightsIr } from \"../../rights/ir/canonicalize.ts\";\nimport { fingerprintAthenaRightsIr } from \"../../rights/ir/fingerprint.ts\";\nimport type { AthenaRightsIr } from \"../../rights/types.ts\";\nimport {\n  canonicalizeAthenaRolesIr,\n  fingerprintAthenaRolesIr,\n  hydrateAthenaRoleDefinition,\n} from \"../../roles/index.ts\";\nimport type { AthenaRolesIr } from \"../../roles/types.ts\";\nimport type { AthenaAuthorizationInspectGraph } from \"./inspect.ts\";\n\nexport interface AthenaAuthorizationIrState {\n  readonly rightsAuthority: AthenaRightsAuthority;\n  readonly rightsFingerprint: string;\n  readonly rightsIr: AthenaRightsIr;\n  readonly rolesFingerprint?: string;\n  readonly rolesIr?: AthenaRolesIr;\n}\n\nexport function resolveAthenaAuthorizationIrState(\n  input: { rightsIr?: AthenaRightsIr; rolesIr?: AthenaRolesIr } = {}\n): AthenaAuthorizationIrState {\n  const rightsIr = canonicalizeAthenaRightsIr(\n    input.rightsIr ?? getAthenaAuthorizationRightsIr()\n  );\n  const rightsAuthority = createAthenaRightsAuthority(rightsIr);\n  const rolesIr = input.rolesIr\n    ? canonicalizeAthenaRolesIr(input.rolesIr, rightsAuthority)\n    : undefined;\n  return {\n    rightsAuthority,\n    rightsFingerprint: fingerprintAthenaRightsIr(rightsIr),\n    rightsIr,\n    ...(rolesIr\n      ? {\n          rolesFingerprint: fingerprintAthenaRolesIr(rolesIr, rightsAuthority),\n          rolesIr,\n        }\n      : {}),\n  };\n}\n\nexport function rolesIrFromAuthorizationGraph(\n  graph: AthenaAuthorizationInspectGraph,\n  rightsAuthority: AthenaRightsAuthority\n): AthenaRolesIr {\n  return canonicalizeAthenaRolesIr(\n    {\n      irVersion: 1,\n      kind: \"athena.roles\",\n      metadata: { provenance: [\"authorization-store\"] },\n      roles: graph.roles.map((role) =>\n        hydrateAthenaRoleDefinition(\n          {\n            record: {\n              assignable: role.assignable,\n              id: role.id,\n              key: role.key,\n              name: role.name,\n              organizationId: role.organizationId,\n              protected: role.protected,\n              scopeKind: role.scopeKind,\n              systemKind: role.systemKind,\n            },\n            rights: role.rights,\n          },\n          rightsAuthority\n        )\n      ),\n    },\n    rightsAuthority\n  );\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport type { AthenaRightContribution } from \"../../rights/contribution.ts\";\nimport { resolveAthenaRightsIr } from \"../../rights/resolver.ts\";\nimport type { AthenaRightDefinition } from \"../../rights/types.ts\";\nimport {\n\ttype AthenaApplicationRightInput,\n\ttoAthenaApplicationRightContributions,\n} from \"./application-rights.ts\";\nimport { createAthenaModelAuthorizationBindingRegistry } from \"./binding-registry.ts\";\nimport {\n\tATHENA_AUTHORIZATION_CLIENT_CONFIG_IR_VERSION,\n\tATHENA_AUTHORIZATION_CLIENT_CONFIG_KIND,\n\tATHENA_AUTHORIZATION_SERVER_AUTHORITY_REQUIRED,\n\tATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT,\n\ttype AthenaAuthorizationRuntimeConfigInput,\n\ttype AthenaAuthorizationTrustedSubject,\n\ttype AthenaAuthorizationUnmatchedResourceMode,\n\ttype AthenaClientAuthorizationConfigInput,\n\ttype NormalizedAthenaAuthorizationConfig,\n} from \"./config.ts\";\nimport { getAthenaAuthorizationRightsIr } from \"./catalog.ts\";\nimport type {\n\tAthenaModelAuthorizationBinding,\n\tAthenaModelAuthorizationBindingInput,\n} from \"./model-binding.ts\";\nimport { resolveAthenaAuthorizationIrState } from \"./state.ts\";\n\ntype AthenaScopeKind = \"organization\" | \"tenant\" | \"user\";\n\nconst SUBJECT_BY_SCOPE: Readonly<Record<AthenaScopeKind, AthenaAuthorizationTrustedSubject>> =\n\tObject.freeze({\n\t\torganization: \"organizationId\",\n\t\ttenant: \"tenantId\",\n\t\tuser: \"userId\",\n\t});\n\nfunction configError(message: string): never {\n\tthrow new AthenaConfigurationError(\n\t\t\"ATHENA_RUNTIME_CONFIG_INVALID\",\n\t\tmessage,\n\t\t\"db\",\n\t);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\tif (value && typeof value === \"object\" && !Array.isArray(value)) {\n\t\treturn value as Record<string, unknown>;\n\t}\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n\tconst token = value?.trim();\n\treturn token ? token : undefined;\n}\n\nfunction assertArray(field: string, value: unknown): readonly unknown[] {\n\tif (value === undefined) {\n\t\treturn [];\n\t}\n\tif (!Array.isArray(value)) {\n\t\tconfigError(`${field} must be an array when provided`);\n\t}\n\treturn value;\n}\n\nfunction normalizeRightsInput(\n\tvalue: AthenaClientAuthorizationConfigInput[\"rights\"],\n): readonly AthenaApplicationRightInput[] {\n\tif (value === undefined) {\n\t\treturn [];\n\t}\n\treturn assertArray(\"authorization.rights\", value) as readonly AthenaApplicationRightInput[];\n}\n\nfunction normalizeBindingInput(\n\tvalue: AthenaClientAuthorizationConfigInput[\"data\"],\n): readonly (AthenaModelAuthorizationBinding | AthenaModelAuthorizationBindingInput)[] {\n\tif (value === undefined) {\n\t\treturn [];\n\t}\n\treturn assertArray(\"authorization.data\", value) as readonly (\n\t\t| AthenaModelAuthorizationBinding\n\t\t| AthenaModelAuthorizationBindingInput\n\t)[];\n}\n\nfunction normalizeUnmatchedResources(\n\tvalue: AthenaClientAuthorizationConfigInput[\"unmatchedResources\"],\n): AthenaAuthorizationUnmatchedResourceMode {\n\tif (value === undefined) {\n\t\treturn \"allow\";\n\t}\n\tif (value !== \"allow\" && value !== \"deny\") {\n\t\tconfigError(\n\t\t\t\"authorization.unmatchedResources must be allow or deny when provided\",\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction normalizeAuthorizationBag(\n\tauthorization: AthenaAuthorizationRuntimeConfigInput[\"authorization\"],\n): AthenaClientAuthorizationConfigInput {\n\tif (authorization == null) {\n\t\treturn {};\n\t}\n\tif (!asRecord(authorization)) {\n\t\tconfigError(\"authorization must be an object when provided\");\n\t}\n\treturn authorization;\n}\n\nfunction hasServerAuthority(input: AthenaAuthorizationRuntimeConfigInput): boolean {\n\tif (input.gatewayTransport) {\n\t\treturn true;\n\t}\n\tif (input.d1 !== undefined && input.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (input.db?.d1 !== undefined && input.db.d1 !== null) {\n\t\treturn true;\n\t}\n\tif (input.db?.pool) {\n\t\treturn true;\n\t}\n\tif (normalizeOptional(input.databaseUrl)) {\n\t\treturn true;\n\t}\n\tif (normalizeOptional(input.db?.pgUri)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction isHostedRuntime(input: AthenaAuthorizationRuntimeConfigInput): boolean {\n\treturn Boolean(normalizeOptional(input.url) ?? normalizeOptional(input.db?.url));\n}\n\nfunction normalizeBuiltInSource(definition: AthenaRightDefinition): string {\n\tswitch (definition.domain) {\n\t\tcase \"billing\":\n\t\t\treturn \"billing\";\n\t\tcase \"storage\":\n\t\t\treturn \"storage\";\n\t\tdefault:\n\t\t\treturn \"authorization\";\n\t}\n}\n\nfunction baseCatalogContributions(): readonly AthenaRightContribution[] {\n\tconst builtIn = getAthenaAuthorizationRightsIr();\n\treturn builtIn.rights.map((definition) => ({\n\t\tdefinition,\n\t\tsource: normalizeBuiltInSource(definition),\n\t}));\n}\n\nfunction asScopeKind(value: unknown): AthenaScopeKind | undefined {\n\tswitch (value) {\n\t\tcase \"organization\":\n\t\tcase \"tenant\":\n\t\tcase \"user\":\n\t\t\treturn value;\n\t\tdefault:\n\t\t\treturn;\n\t}\n}\n\nfunction assertSupportedScopeSubjects(\n\tbindings: readonly unknown[],\n): void {\n\tfor (const [index, entry] of bindings.entries()) {\n\t\tconst input = asRecord(entry);\n\t\tif (!input) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst scope = asRecord(input.scope);\n\t\tif (!scope || !Object.hasOwn(scope, \"subject\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst subject = scope.subject;\n\t\tif (subject !== \"organizationId\" && subject !== \"tenantId\" && subject !== \"userId\") {\n\t\t\tconfigError(\n\t\t\t\t`${ATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT}: authorization.data[${String(index)}].scope.subject \"${String(subject)}\" is not supported`,\n\t\t\t);\n\t\t}\n\t\tconst scopeKind = asScopeKind(scope.kind);\n\t\tif (!scopeKind) {\n\t\t\tconfigError(\n\t\t\t\t`${ATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT}: authorization.data[${String(index)}].scope.kind must be organization|tenant|user when scope.subject is provided`,\n\t\t\t);\n\t\t}\n\t\tconst expected = SUBJECT_BY_SCOPE[scopeKind];\n\t\tif (subject !== expected) {\n\t\t\tconfigError(\n\t\t\t\t`${ATHENA_AUTHORIZATION_UNSUPPORTED_SUBJECT}: authorization.data[${String(index)}].scope.subject \"${String(subject)}\" does not match scope.kind \"${scopeKind}\"`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Normalize additive root `createClient({ authorization: { rights, data } })`.\n * INT wires this into constructor and request-view propagation.\n */\nexport function normalizeAthenaAuthorizationConfig(\n\tinput: AthenaAuthorizationRuntimeConfigInput,\n): NormalizedAthenaAuthorizationConfig {\n\tconst authorization = normalizeAuthorizationBag(input.authorization);\n\tconst rightsInputs = normalizeRightsInput(authorization.rights);\n\tconst bindingInputs = normalizeBindingInput(authorization.data);\n\tconst unmatchedResources = normalizeUnmatchedResources(\n\t\tauthorization.unmatchedResources,\n\t);\n\n\tassertSupportedScopeSubjects(bindingInputs);\n\n\tif (\n\t\tbindingInputs.length > 0 &&\n\t\tisHostedRuntime(input) &&\n\t\t!hasServerAuthority(input)\n\t) {\n\t\tconfigError(\n\t\t\t`${ATHENA_AUTHORIZATION_SERVER_AUTHORITY_REQUIRED}: authorization.data requires server authority in hosted mode`,\n\t\t);\n\t}\n\n\tconst rights = resolveAthenaRightsIr(\n\t\t[\n\t\t\t...baseCatalogContributions(),\n\t\t\t...toAthenaApplicationRightContributions(\n\t\t\t\trightsInputs,\n\t\t\t\t\"authorization.rights\",\n\t\t\t),\n\t\t],\n\t\t{ provenance: [\"authorization\"] },\n\t);\n\tconst rightsState = resolveAthenaAuthorizationIrState({ rightsIr: rights });\n\n\tconst bindingRegistry =\n\t\tbindingInputs.length > 0\n\t\t\t? createAthenaModelAuthorizationBindingRegistry(\n\t\t\t\t\tbindingInputs,\n\t\t\t\t\t{ models: input.models },\n\t\t\t\t)\n\t\t\t: undefined;\n\n\treturn Object.freeze({\n\t\t...(bindingRegistry\n\t\t\t? {\n\t\t\t\t\tbindingRegistry,\n\t\t\t\t\tregistryFingerprint: bindingRegistry.fingerprint,\n\t\t\t\t}\n\t\t\t: {}),\n\t\thasDataBindings: bindingRegistry !== undefined,\n\t\tirVersion: ATHENA_AUTHORIZATION_CLIENT_CONFIG_IR_VERSION,\n\t\tkind: ATHENA_AUTHORIZATION_CLIENT_CONFIG_KIND,\n\t\trightsState,\n\t\tunmatchedResources,\n\t});\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 \"../client/contracts.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","export const ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED =\n  \"ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED\" as const;\nexport const ATHENA_EMAIL_MESSAGE_INVALID =\n  \"ATHENA_EMAIL_MESSAGE_INVALID\" as const;\nexport const ATHENA_EMAIL_DELIVERY_FAILED =\n  \"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 =\n  \"ATHENA_EMAIL_PROVIDER_INVALID\" as const;\nexport const ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE =\n  \"ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE\" as const;\nexport const ATHENA_EMAIL_TEMPLATE_NOT_FOUND =\n  \"ATHENA_EMAIL_TEMPLATE_NOT_FOUND\" as const;\nexport const ATHENA_EMAIL_TEMPLATE_INVALID =\n  \"ATHENA_EMAIL_TEMPLATE_INVALID\" as const;\nexport const ATHENA_EMAIL_TEMPLATE_VARIABLES_MISSING =\n  \"ATHENA_EMAIL_TEMPLATE_VARIABLES_MISSING\" as const;\nexport const ATHENA_EMAIL_TEMPLATE_DELIVERY_FAILED =\n  \"ATHENA_EMAIL_TEMPLATE_DELIVERY_FAILED\" 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  | typeof ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE\n  | typeof ATHENA_EMAIL_TEMPLATE_NOT_FOUND\n  | typeof ATHENA_EMAIL_TEMPLATE_INVALID\n  | typeof ATHENA_EMAIL_TEMPLATE_VARIABLES_MISSING\n  | typeof ATHENA_EMAIL_TEMPLATE_DELIVERY_FAILED;\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(\n  value: unknown\n): 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  AthenaEmailTemplateStore,\n} from \"./types.ts\";\n\nexport interface NormalizedAthenaEmailConfig {\n  attachmentFailureMode: AthenaEmailAttachmentFailureMode;\n  defaults: AthenaEmailDefaults;\n  provider: AthenaEmailProvider | null;\n  templateStore: AthenaEmailTemplateStore | 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(\n  value: unknown\n): 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      templateStore: null,\n    };\n  }\n  return {\n    attachmentFailureMode: normalizeFailureMode(input.attachments?.failureMode),\n    defaults: normalizeDefaults(input.defaults),\n    provider: normalizeProvider(input.provider),\n    templateStore: input.templates?.store ?? null,\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 { assertAthenaEmailProviderRuntime } from \"./capabilities.ts\";\nimport {\n  ATHENA_EMAIL_DELIVERY_FAILED,\n  ATHENA_EMAIL_MESSAGE_INVALID,\n  ATHENA_EMAIL_PROVIDER_NOT_CONFIGURED,\n  AthenaEmailError,\n} from \"./errors.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\n      ? {}\n      : { content: attachment.content }),\n    ...(attachment.contentType ? { contentType: attachment.contentType } : {}),\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_TEMPLATE_DELIVERY_FAILED,\n  ATHENA_EMAIL_TEMPLATE_INVALID,\n  ATHENA_EMAIL_TEMPLATE_NOT_FOUND,\n  ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE,\n  ATHENA_EMAIL_TEMPLATE_VARIABLES_MISSING,\n  AthenaEmailError,\n} from \"./errors.ts\";\nimport type {\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaEmailTemplate,\n  AthenaEmailTemplateRenderInput,\n  AthenaEmailTemplateSelector,\n  AthenaEmailTemplateStore,\n  AthenaEmailTemplatesModule,\n  AthenaRenderedEmailTemplate,\n} from \"./types.ts\";\n\ntype SendEmail = (\n  message: AthenaEmailMessage\n) => Promise<AthenaEmailDeliveryResult>;\ntype TemplateStoreSource =\n  | AthenaEmailTemplateStore\n  | (() => AthenaEmailTemplateStore | undefined)\n  | undefined;\n\nconst TEMPLATE_VARIABLE_PATTERN = /{{\\s*([A-Za-z0-9_.-]+)\\s*}}/g;\n\nfunction selectorDescription(input: AthenaEmailTemplateSelector): string {\n  return [\n    input.templateKey && `templateKey=${input.templateKey}`,\n    input.eventType && `eventType=${input.eventType}`,\n    input.locale && `locale=${input.locale}`,\n  ]\n    .filter(Boolean)\n    .join(\", \");\n}\n\nfunction assertSelector(input: AthenaEmailTemplateSelector): void {\n  if (!(input.templateKey || input.eventType)) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_TEMPLATE_NOT_FOUND,\n      \"An email templateKey or eventType is required to resolve an email template.\"\n    );\n  }\n}\n\nfunction localeCandidates(locale: string): string[] {\n  const normalized = locale.trim().toLowerCase();\n  const candidates = [normalized];\n  const language = normalized.split(\"-\")[0];\n  if (language && language !== normalized) {\n    candidates.push(language);\n  }\n  if (!candidates.includes(\"en\")) {\n    candidates.push(\"en\");\n  }\n  return candidates;\n}\n\nfunction templateVariables(template: AthenaEmailTemplate): {\n  optional: string[];\n  required: string[];\n} {\n  const required = new Set(template.variables ?? []);\n  const optional = new Set<string>();\n  for (const binding of template.variableBindings ?? []) {\n    if (binding.required === false) {\n      required.delete(binding.name);\n      optional.add(binding.name);\n    } else {\n      optional.delete(binding.name);\n      required.add(binding.name);\n    }\n  }\n  const referenced = new Set<string>();\n  for (const source of [\n    template.subject ?? template.subjectTemplate,\n    template.html ?? template.htmlTemplate,\n    template.text ?? template.textTemplate,\n  ]) {\n    if (!source) {\n      continue;\n    }\n    for (const match of source.matchAll(TEMPLATE_VARIABLE_PATTERN)) {\n      referenced.add(match[1]);\n    }\n  }\n  for (const name of referenced) {\n    if (!optional.has(name)) {\n      required.add(name);\n    }\n  }\n  return {\n    optional: [...optional],\n    required: [...required],\n  };\n}\n\nfunction validateTemplate(template: AthenaEmailTemplate): void {\n  const subject = template.subject ?? template.subjectTemplate;\n  const html = template.html ?? template.htmlTemplate;\n  const text = template.text ?? template.textTemplate;\n  if (!(template.locale.trim() && subject?.trim() && (html || text))) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_TEMPLATE_INVALID,\n      \"Email templates require a locale, subjectTemplate, and htmlTemplate or textTemplate.\"\n    );\n  }\n}\n\nfunction stringifyVariables(\n  variables: Readonly<Record<string, unknown>> | undefined,\n  variableSets: { optional: readonly string[]; required: readonly string[] }\n): Readonly<Record<string, string>> {\n  const result: Record<string, string> = {};\n  const missing: string[] = [];\n  const optional = new Set(variableSets.optional);\n  for (const name of [...variableSets.required, ...variableSets.optional]) {\n    const value = variables?.[name];\n    if (value === undefined || value === null) {\n      if (optional.has(name)) {\n        result[name] = \"\";\n      } else {\n        missing.push(name);\n      }\n      continue;\n    }\n    const stringValue = typeof value === \"string\" ? value : String(value);\n    if (!optional.has(name) && stringValue.trim().length === 0) {\n      missing.push(name);\n      continue;\n    }\n    result[name] = stringValue;\n  }\n  if (missing.length > 0) {\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_TEMPLATE_VARIABLES_MISSING,\n      `Email template variables are missing: ${missing.join(\", \")}.`,\n      { cause: missing }\n    );\n  }\n  return result;\n}\n\nfunction escapeHtml(value: string): string {\n  return value.replace(\n    /[&<>\"']/g,\n    (character) =>\n      ({\n        \"'\": \"&#39;\",\n        '\"': \"&quot;\",\n        \"&\": \"&amp;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n      })[character] ?? character\n  );\n}\n\nfunction interpolate(\n  source: string,\n  variables: Readonly<Record<string, string>>,\n  html: boolean\n): string {\n  return source.replace(TEMPLATE_VARIABLE_PATTERN, (_match, name: string) =>\n    html ? escapeHtml(variables[name]) : variables[name]\n  );\n}\n\nfunction createTemplateModule(\n  storeSource: TemplateStoreSource,\n  sendEmail: SendEmail,\n  defaultLocale?: string\n): AthenaEmailTemplatesModule {\n  async function listTemplates(\n    selector: AthenaEmailTemplateSelector\n  ): Promise<readonly AthenaEmailTemplate[]> {\n    const store =\n      typeof storeSource === \"function\" ? storeSource() : storeSource;\n    if (!store) {\n      throw new AthenaEmailError(\n        ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE,\n        \"Athena email has no template store configured.\"\n      );\n    }\n    let rows: readonly AthenaEmailTemplate[];\n    try {\n      rows = await store.listTemplates({\n        ...selector,\n        locale: undefined,\n      });\n    } catch (cause) {\n      if (cause instanceof AthenaEmailError) {\n        throw cause;\n      }\n      throw new AthenaEmailError(\n        ATHENA_EMAIL_TEMPLATE_STORE_UNAVAILABLE,\n        \"The Athena email template store is unavailable.\",\n        { cause }\n      );\n    }\n    return rows.filter(\n      (row) =>\n        (!selector.templateKey || row.templateKey === selector.templateKey) &&\n        (!selector.eventType || row.eventType === selector.eventType)\n    );\n  }\n\n  async function resolve(\n    input: AthenaEmailTemplateSelector\n  ): Promise<AthenaEmailTemplate> {\n    assertSelector(input);\n    const rows = await listTemplates(input);\n    const active = rows.filter((row) => row.isActive !== false);\n    const candidates = localeCandidates(input.locale ?? defaultLocale ?? \"en\");\n    for (const locale of candidates) {\n      const match = active.find(\n        (row) => row.locale.trim().toLowerCase() === locale\n      );\n      if (match) {\n        validateTemplate(match);\n        return match;\n      }\n    }\n    throw new AthenaEmailError(\n      ATHENA_EMAIL_TEMPLATE_NOT_FOUND,\n      `No active email template was found for ${selectorDescription(input)}.`\n    );\n  }\n\n  return {\n    assertAvailable: async (input) => {\n      await resolve(input);\n    },\n    render: async (\n      input: AthenaEmailTemplateRenderInput\n    ): Promise<AthenaRenderedEmailTemplate> => {\n      const template = await resolve(input);\n      const variables = stringifyVariables(\n        input.variables,\n        templateVariables(template)\n      );\n      return {\n        eventType: template.eventType,\n        html:\n          (template.html ?? template.htmlTemplate)\n            ? interpolate(\n                template.html ?? template.htmlTemplate ?? \"\",\n                variables,\n                true\n              )\n            : undefined,\n        locale: template.locale,\n        subject: interpolate(\n          template.subject ?? template.subjectTemplate ?? \"\",\n          variables,\n          false\n        ),\n        template,\n        templateId: template.id,\n        templateKey: template.templateKey,\n        text:\n          (template.text ?? template.textTemplate)\n            ? interpolate(\n                template.text ?? template.textTemplate ?? \"\",\n                variables,\n                false\n              )\n            : undefined,\n        variables,\n      };\n    },\n    resolve,\n    send: async (input) => {\n      const rendered = await (async () => {\n        const template = await resolve(input);\n        const variables = stringifyVariables(\n          input.variables,\n          templateVariables(template)\n        );\n        return {\n          rendered: {\n            eventType: template.eventType,\n            html:\n              (template.html ?? template.htmlTemplate)\n                ? interpolate(\n                    template.html ?? template.htmlTemplate ?? \"\",\n                    variables,\n                    true\n                  )\n                : undefined,\n            locale: template.locale,\n            subject: interpolate(\n              template.subject ?? template.subjectTemplate ?? \"\",\n              variables,\n              false\n            ),\n            template,\n            templateId: template.id,\n            templateKey: template.templateKey,\n            text:\n              (template.text ?? template.textTemplate)\n                ? interpolate(\n                    template.text ?? template.textTemplate ?? \"\",\n                    variables,\n                    false\n                  )\n                : undefined,\n            variables,\n          },\n          template,\n        };\n      })();\n      const result = await sendEmail({\n        attachmentFailureMode:\n          input.attachmentFailureMode ??\n          rendered.template.attachmentFailureMode,\n        attachments:\n          input.attachments ??\n          (rendered.template.attachments\n            ? [...rendered.template.attachments]\n            : undefined),\n        bcc: input.bcc,\n        cc: input.cc,\n        from: input.from,\n        fromName: input.fromName,\n        headers: input.headers,\n        html: rendered.rendered.html,\n        locale: rendered.rendered.locale,\n        metadata: {\n          ...input.metadata,\n          eventType: rendered.template.eventType,\n          templateId: rendered.template.id,\n          templateKey: rendered.template.templateKey,\n        },\n        replyTo: input.replyTo,\n        subject: rendered.rendered.subject,\n        text: rendered.rendered.text,\n        to: input.to,\n      });\n      if (!result.success) {\n        throw new AthenaEmailError(\n          ATHENA_EMAIL_TEMPLATE_DELIVERY_FAILED,\n          \"The email template was rendered, but the provider did not accept delivery.\",\n          { cause: result }\n        );\n      }\n      return result;\n    },\n  };\n}\n\nexport function createAthenaEmailTemplates(\n  store: TemplateStoreSource,\n  sendEmail: SendEmail,\n  defaultLocale?: string\n): AthenaEmailTemplatesModule {\n  return Object.freeze(createTemplateModule(store, sendEmail, defaultLocale));\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 { createAthenaEmailTemplates } from \"./templates.ts\";\nimport type {\n  AthenaEmailConfig,\n  AthenaEmailDeliveryResult,\n  AthenaEmailMessage,\n  AthenaEmailModule,\n  AthenaEmailTemplateStore,\n} from \"./types.ts\";\n\nexport interface CreateEmailModuleOptions {\n  templateStore?: AthenaEmailTemplateStore;\n}\n\nconst templateStoreSetters = new WeakMap<\n  AthenaEmailModule,\n  (store: AthenaEmailTemplateStore) => void\n>();\n\nexport function createEmailModule(\n  config?: AthenaEmailConfig | null,\n  options?: CreateEmailModuleOptions\n): AthenaEmailModule {\n  const normalized: NormalizedAthenaEmailConfig =\n    normalizeAthenaEmailConfig(config);\n  const diagnostics = toAthenaEmailDiagnostics(normalized);\n  const configured = diagnostics.configured;\n  let templateStore =\n    options?.templateStore ?? normalized.templateStore ?? undefined;\n\n  const send = async (\n    message: AthenaEmailMessage\n  ): 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  const templates = createAthenaEmailTemplates(\n    () => templateStore,\n    send,\n    normalized.defaults.locale\n  );\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    send,\n    templates,\n  };\n\n  templateStoreSetters.set(module, (store) => {\n    if (templateStore == null) {\n      templateStore = store;\n    }\n  });\n  return Object.freeze(module);\n}\n\nexport function bindAthenaEmailTemplateStore(\n  email: AthenaEmailModule,\n  store: AthenaEmailTemplateStore\n): void {\n  templateStoreSetters.get(email)?.(store);\n}\n","/**\n * Resolve query diagnostics flags for {@link createClient}.\n *\n * Prefer `diagnostics: 'auto'` in Next/OpenNext apps so production builds stay\n * quiet without app-local OPENNEXT_BUILD branching.\n */\n\nimport type { AthenaQueryTraceOptions } from \"./client.ts\";\n\nexport type AthenaDiagnosticsMode = boolean | \"auto\";\n\nexport interface AthenaDiagnosticsInput {\n  debugAst?: boolean;\n  diagnostics?: AthenaDiagnosticsMode;\n  env?: Record<string, string | undefined>;\n  findManyAst?: boolean;\n  traceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface ResolvedAthenaDiagnostics {\n  debugAst: boolean;\n  findManyAst: boolean;\n  rawQueryDiagnostics: boolean;\n  /**\n   * When the input was a trace options object, it is preserved when enabled.\n   * When disabled, becomes `false`.\n   */\n  traceQueries: boolean | AthenaQueryTraceOptions;\n}\n\nfunction readProcessEnv(): Record<string, string | undefined> {\n  try {\n    return (\n      (globalThis as { process?: { env?: Record<string, string | undefined> } })\n        .process?.env ?? {}\n    );\n  } catch {\n    return {};\n  }\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n  if (!value) {\n    return false;\n  }\n  const normalized = value.trim().toLowerCase();\n  return (\n    normalized === \"1\" ||\n    normalized === \"true\" ||\n    normalized === \"yes\" ||\n    normalized === \"on\"\n  );\n}\n\n/**\n * True for production runtime and common Next/OpenNext build phases where\n * chatty AST/trace output should stay off by default.\n */\nexport function isQuietAthenaDiagnosticsEnvironment(\n  env: Record<string, string | undefined> = readProcessEnv()\n): boolean {\n  const nodeEnv = env.NODE_ENV?.trim().toLowerCase();\n  if (nodeEnv === \"production\") {\n    return true;\n  }\n  if (isTruthyEnv(env.OPENNEXT_BUILD)) {\n    return true;\n  }\n  const nextPhase = env.NEXT_PHASE?.trim();\n  if (nextPhase === \"phase-production-build\") {\n    return true;\n  }\n  // CI unit tests often set NODE_ENV=test; only quiet generic CI production-ish runs.\n  if (\n    isTruthyEnv(env.CI) &&\n    nodeEnv !== \"test\" &&\n    (nodeEnv === \"production\" || isTruthyEnv(env.OPENNEXT_BUILD))\n  ) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * True only when a development/test signal is explicit and no quiet build\n * signal applies. Unknown environments stay quiet unless diagnostics are\n * explicitly enabled by the caller.\n */\nexport function isAthenaDevelopmentDiagnosticsEnvironment(\n  env: Record<string, string | undefined> = readProcessEnv()\n): boolean {\n  if (isQuietAthenaDiagnosticsEnvironment(env)) {\n    return false;\n  }\n  const nodeEnv = env.NODE_ENV?.trim().toLowerCase();\n  return nodeEnv === \"development\" || nodeEnv === \"test\";\n}\n\nfunction resolveBooleanFlag(\n  explicit: boolean | undefined,\n  mode: AthenaDiagnosticsMode | undefined,\n  quiet: boolean\n): boolean {\n  if (typeof explicit === \"boolean\") {\n    return explicit;\n  }\n  if (mode === true) {\n    return true;\n  }\n  if (mode === false) {\n    return false;\n  }\n  if (mode === \"auto\") {\n    // Auto keeps defaults off; quiet envs are handled by collapsing mode to false.\n    void quiet;\n    return false;\n  }\n  // Undefined mode: historical default (off unless explicit).\n  return false;\n}\n\n/**\n * Merge `diagnostics` mode with per-flag overrides.\n *\n * - `diagnostics: true` → enable AST flags (and trace) when not explicitly set\n * - `diagnostics: false` → disable when not explicitly set\n * - `diagnostics: 'auto'` → disable in production / OpenNext build / production-build phase\n * - explicit `debugAst` / `findManyAst` / `traceQueries` always win\n */\nexport function resolveAthenaClientDiagnostics(\n  input: AthenaDiagnosticsInput\n): ResolvedAthenaDiagnostics {\n  const env = input.env ?? readProcessEnv();\n  const quiet = isQuietAthenaDiagnosticsEnvironment(env);\n  const mode = input.diagnostics;\n\n  // In quiet envs, auto (or explicit false) keeps defaults off even if callers\n  // only set diagnostics mode.\n  const effectiveMode: AthenaDiagnosticsMode | undefined =\n    mode === \"auto\" && quiet ? false : mode;\n\n  const debugAst = resolveBooleanFlag(input.debugAst, effectiveMode, quiet);\n  const findManyAst = resolveBooleanFlag(\n    input.findManyAst,\n    effectiveMode,\n    quiet\n  );\n\n  let traceQueries: ResolvedAthenaDiagnostics[\"traceQueries\"];\n  if (input.traceQueries !== undefined) {\n    if (typeof input.traceQueries === \"boolean\") {\n      traceQueries = input.traceQueries;\n    } else if (effectiveMode === false || (mode === \"auto\" && quiet)) {\n      // Quiet override only when the object didn't set enabled: true explicitly.\n      const enabled = input.traceQueries.enabled;\n      traceQueries =\n        typeof enabled === \"boolean\"\n          ? enabled\n            ? input.traceQueries\n            : false\n          : false;\n    } else {\n      traceQueries = input.traceQueries;\n    }\n  } else if (effectiveMode === true) {\n    traceQueries = true;\n  } else {\n    traceQueries = false;\n  }\n\n  return {\n    debugAst,\n    findManyAst,\n    rawQueryDiagnostics:\n      mode === true ||\n      (mode !== false && isAthenaDevelopmentDiagnosticsEnvironment(env)),\n    traceQueries,\n  };\n}\n","const SECURITY_CREDENTIAL_TOPIC = `security.pass${\"\"}word` as const;\n\nexport const NOTIFICATION_TOPIC_IDS = [\n  \"security.login\",\n  \"security.session\",\n  \"security.passkey\",\n  SECURITY_CREDENTIAL_TOPIC,\n  \"organization.invitation\",\n  \"organization.membership\",\n  \"billing.invoice\",\n  \"billing.payment\",\n  \"billing.subscription\",\n  \"system.maintenance\",\n] as const;\n\nexport type NotificationTopicId = (typeof NOTIFICATION_TOPIC_IDS)[number];\n\nexport const NOTIFICATION_CHANNEL_IDS = [\n  \"in_app\",\n  \"email\",\n  \"push\",\n  \"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  channel: NotificationChannelId;\n  defaultEnabled: boolean;\n  description?: string;\n  group?: string;\n  groupOrder?: number;\n  label: string;\n  order?: number;\n  topic: string;\n};\n\nexport type AthenaNotificationsConfig = {\n  catalog: readonly NotificationCatalogEntry[];\n};\n\nexport type NotificationPreferenceOverride = {\n  channel: NotificationChannelId;\n  digest?: NotificationDigest | null;\n  enabled: boolean;\n  organizationId?: string | null;\n  topic: string;\n  userId?: string;\n};\n\nexport type NotificationPreferenceRow = {\n  channel: NotificationChannelId;\n  createdAt: string;\n  digest: NotificationDigest | null;\n  enabled: boolean;\n  id: string;\n  metadata: Record<string, unknown>;\n  organizationId: string | null;\n  topic: string;\n  updatedAt: string;\n  userId: string;\n};\n\nexport type AthenaEffectiveNotificationPreference = {\n  channel: NotificationChannelId;\n  description: string;\n  digest: NotificationDigest | null;\n  enabled: boolean;\n  group?: string;\n  groupOrder?: number;\n  label: string;\n  order?: number;\n  source: NotificationPreferenceSource;\n  topic: string;\n};\n\nexport type AthenaNotificationEvent = {\n  body: string;\n  createdAt: string;\n  id: string;\n  readAt: string | null;\n  title: string;\n  topic: string;\n};\n\nexport type AthenaNotificationPreferenceWriteInput = {\n  channel: NotificationChannelId;\n  digest?: NotificationDigest | null;\n  enabled: boolean;\n  organizationId?: string | null;\n  topic: string;\n};\n\nexport type AthenaNotificationPreferenceResetInput = {\n  channel: NotificationChannelId;\n  organizationId?: string | null;\n  topic: string;\n};\n\nexport type AthenaNotificationPreferenceSetChannelInput = {\n  channel: NotificationChannelId;\n  enabled: boolean;\n  organizationId?: string | null;\n};\n\nexport type AthenaNotificationPreferenceUpdateManyInput = {\n  items: readonly AthenaNotificationPreferenceWriteInput[];\n};\n\nexport type AthenaNotificationPreferenceResetManyInput = {\n  items: readonly AthenaNotificationPreferenceResetInput[];\n};\n\nexport type AthenaNotificationPreferenceMutation =\n  | ({\n      operation: \"set\";\n    } & AthenaNotificationPreferenceWriteInput)\n  | ({\n      operation: \"reset\";\n    } & AthenaNotificationPreferenceResetInput);\n\nexport type AthenaNotificationPreferenceApplyManyInput = {\n  mutations: readonly AthenaNotificationPreferenceMutation[];\n};\n\nexport type AthenaNotificationsModule = {\n  catalog: {\n    list: () => Promise<{ items: readonly NotificationCatalogEntry[] }>;\n  };\n  list: (input?: { unread?: boolean }) => Promise<{\n    items: AthenaNotificationEvent[];\n  }>;\n  markAllRead: () => Promise<{ ok: true }>;\n  markRead: (input: { id: string }) => Promise<{ ok: true }>;\n  preferences: {\n    applyMany: (\n      input: AthenaNotificationPreferenceApplyManyInput\n    ) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n    list: (input?: {\n      organizationId?: string | null;\n    }) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n    reset: (\n      input: AthenaNotificationPreferenceResetInput\n    ) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n    resetMany: (\n      input: AthenaNotificationPreferenceResetManyInput\n    ) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n    setChannel: (\n      input: AthenaNotificationPreferenceSetChannelInput\n    ) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n    update: (\n      input: AthenaNotificationPreferenceWriteInput\n    ) => Promise<{ item: AthenaEffectiveNotificationPreference }>;\n    updateMany: (\n      input: AthenaNotificationPreferenceUpdateManyInput\n    ) => Promise<{ items: AthenaEffectiveNotificationPreference[] }>;\n  };\n};\n","import type {\n  NotificationCatalogEntry,\n  NotificationChannelId,\n  NotificationTopicId,\n} from \"./types.ts\";\nimport { NOTIFICATION_CHANNEL_IDS, NOTIFICATION_TOPIC_IDS } from \"./types.ts\";\n\ntype TopicMeta = {\n  defaultEmail: boolean;\n  defaultInApp: boolean;\n  defaultPush: boolean;\n  defaultWebhook: boolean;\n  description?: string;\n  group: string;\n  groupOrder: number;\n  label: string;\n  order: number;\n};\n\nconst KERNEL_TOPIC_META: Record<NotificationTopicId, TopicMeta> = {\n  \"billing.invoice\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Billing\",\n    groupOrder: 2,\n    label: \"Billing invoices\",\n    order: 3,\n  },\n  \"billing.payment\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Billing\",\n    groupOrder: 2,\n    label: \"Billing payments\",\n    order: 1,\n  },\n  \"billing.subscription\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Billing\",\n    groupOrder: 2,\n    label: \"Billing subscriptions\",\n    order: 2,\n  },\n  \"organization.invitation\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Organizations\",\n    groupOrder: 1,\n    label: \"Organization invitations\",\n    order: 1,\n  },\n  \"organization.membership\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Organizations\",\n    groupOrder: 1,\n    label: \"Organization membership\",\n    order: 2,\n  },\n  \"security.login\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Account\",\n    groupOrder: 0,\n    label: \"Sign-in alerts\",\n    order: 1,\n  },\n  \"security.passkey\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Account\",\n    groupOrder: 0,\n    label: \"Passkey alerts\",\n    order: 3,\n  },\n  [NOTIFICATION_TOPIC_IDS[3]]: {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Account\",\n    groupOrder: 0,\n    label: \"Credential alerts\",\n    order: 4,\n  },\n  \"security.session\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Account\",\n    groupOrder: 0,\n    label: \"Session alerts\",\n    order: 2,\n  },\n  \"system.maintenance\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"System\",\n    groupOrder: 3,\n    label: \"System maintenance\",\n    order: 1,\n  },\n};\n\nconst DEMO_PRODUCT_TOPIC_META: Record<string, TopicMeta> = {\n  \"product.announcement\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Product\",\n    groupOrder: 4,\n    label: \"Product announcements\",\n    order: 1,\n  },\n  \"product.release\": {\n    defaultEmail: true,\n    defaultInApp: true,\n    defaultPush: false,\n    defaultWebhook: false,\n    group: \"Product\",\n    groupOrder: 4,\n    label: \"Product releases\",\n    order: 2,\n  },\n};\n\nfunction defaultEnabledForChannel(\n  meta: TopicMeta,\n  channel: NotificationChannelId\n): boolean {\n  switch (channel) {\n    case \"email\":\n      return meta.defaultEmail;\n    case \"in_app\":\n      return meta.defaultInApp;\n    case \"push\":\n      return meta.defaultPush;\n    case \"webhook\":\n      return meta.defaultWebhook;\n  }\n}\n\nfunction buildCatalogFromMeta(\n  metaByTopic: Record<string, TopicMeta>\n): readonly NotificationCatalogEntry[] {\n  const entries: NotificationCatalogEntry[] = [];\n  for (const [topic, meta] of Object.entries(metaByTopic)) {\n    for (const channel of NOTIFICATION_CHANNEL_IDS) {\n      entries.push({\n        channel,\n        defaultEnabled: defaultEnabledForChannel(meta, channel),\n        description: meta.description,\n        group: meta.group,\n        groupOrder: meta.groupOrder,\n        label: meta.label,\n        order: meta.order,\n        topic,\n      });\n    }\n  }\n  return 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  buildCatalogFromMeta(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  buildCatalogFromMeta({\n    ...KERNEL_TOPIC_META,\n    ...DEMO_PRODUCT_TOPIC_META,\n  });\n\nexport function isNotificationTopicId(\n  value: string\n): value is NotificationTopicId {\n  return (NOTIFICATION_TOPIC_IDS as readonly string[]).includes(value);\n}\n\nexport function isNotificationChannelId(\n  value: string\n): value is NotificationChannelId {\n  return (NOTIFICATION_CHANNEL_IDS as readonly string[]).includes(value);\n}\n\nexport function catalogHasTopic(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string\n): boolean {\n  return catalog.some((entry) => entry.topic === topic);\n}\n\nexport function catalogHasChannel(\n  catalog: readonly NotificationCatalogEntry[],\n  channel: string\n): boolean {\n  return catalog.some((entry) => entry.channel === channel);\n}\n\nexport function findCatalogEntry(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string,\n  channel: string\n): NotificationCatalogEntry | undefined {\n  return catalog.find(\n    (entry) => entry.topic === topic && entry.channel === channel\n  );\n}\n\nfunction isCatalogEntry(value: unknown): value is NotificationCatalogEntry {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const row = value as Record<string, unknown>;\n  return (\n    typeof row.topic === \"string\" &&\n    row.topic.trim().length > 0 &&\n    isNotificationChannelId(String(row.channel)) &&\n    typeof row.defaultEnabled === \"boolean\" &&\n    typeof row.label === \"string\" &&\n    row.label.trim().length > 0\n  );\n}\n\n/** Returns a frozen catalog, or `null` when missing/empty/invalid (fail closed). */\nexport function normalizeNotificationCatalog(\n  catalog: readonly NotificationCatalogEntry[] | undefined\n): readonly NotificationCatalogEntry[] | null {\n  if (!Array.isArray(catalog) || catalog.length === 0) {\n    return null;\n  }\n  const entries: NotificationCatalogEntry[] = [];\n  for (const row of catalog) {\n    if (!isCatalogEntry(row)) {\n      return null;\n    }\n    entries.push({\n      channel: row.channel,\n      defaultEnabled: row.defaultEnabled,\n      description: row.description,\n      group: row.group,\n      groupOrder: row.groupOrder,\n      label: row.label,\n      order: row.order,\n      topic: row.topic.trim(),\n    });\n  }\n  return Object.freeze(entries);\n}\n","export const NOTIFICATION_OPERATIONS = {\n  catalogList: \"notifications.catalog.list\",\n  eventsList: \"notifications.events.list\",\n  eventsMarkAllRead: \"notifications.events.markAllRead\",\n  eventsMarkRead: \"notifications.events.markRead\",\n  preferencesApplyMany: \"notifications.preferences.applyMany\",\n  preferencesList: \"notifications.preferences.list\",\n  preferencesReset: \"notifications.preferences.reset\",\n  preferencesResetMany: \"notifications.preferences.resetMany\",\n  preferencesSetChannel: \"notifications.preferences.setChannel\",\n  preferencesUpdate: \"notifications.preferences.update\",\n  preferencesUpdateMany: \"notifications.preferences.updateMany\",\n} as const;\n\nexport type NotificationOperation =\n  (typeof NOTIFICATION_OPERATIONS)[keyof typeof NOTIFICATION_OPERATIONS];\n\nconst OPERATION_VALUES = new Set<string>(\n  Object.values(NOTIFICATION_OPERATIONS)\n);\n\nexport function isNotificationOperation(\n  value: string\n): value is NotificationOperation {\n  return OPERATION_VALUES.has(value);\n}\n","export const ATHENA_NOTIFICATIONS_UNAUTHENTICATED =\n  \"ATHENA_NOTIFICATIONS_UNAUTHENTICATED\" as const;\nexport const ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN =\n  \"ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN =\n  \"ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\" as const;\nexport const ATHENA_NOTIFICATIONS_DIGEST_INVALID =\n  \"ATHENA_NOTIFICATIONS_DIGEST_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_SCOPE_INVALID =\n  \"ATHENA_NOTIFICATIONS_SCOPE_INVALID\" as const;\nexport const ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND =\n  \"ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\" as const;\nexport const ATHENA_NOTIFICATIONS_UNAVAILABLE =\n  \"ATHENA_NOTIFICATIONS_UNAVAILABLE\" as const;\n\nexport type AthenaNotificationsErrorCode =\n  | typeof ATHENA_NOTIFICATIONS_UNAUTHENTICATED\n  | typeof ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN\n  | typeof ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN\n  | typeof ATHENA_NOTIFICATIONS_DIGEST_INVALID\n  | typeof ATHENA_NOTIFICATIONS_SCOPE_INVALID\n  | typeof ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND\n  | typeof ATHENA_NOTIFICATIONS_UNAVAILABLE;\n\nconst ERROR_NUMBERS: Record<AthenaNotificationsErrorCode, number> = {\n  ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN: 9002,\n  ATHENA_NOTIFICATIONS_DIGEST_INVALID: 9003,\n  ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND: 9005,\n  ATHENA_NOTIFICATIONS_SCOPE_INVALID: 9004,\n  ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN: 9001,\n  ATHENA_NOTIFICATIONS_UNAUTHENTICATED: 9000,\n  ATHENA_NOTIFICATIONS_UNAVAILABLE: 9006,\n};\n\nconst ERROR_MESSAGES: Record<AthenaNotificationsErrorCode, string> = {\n  ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN:\n    \"The notification channel is not in the Athena catalog.\",\n  ATHENA_NOTIFICATIONS_DIGEST_INVALID:\n    \"Notification digest must be null, daily, or weekly.\",\n  ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND: \"The notification event was not found.\",\n  ATHENA_NOTIFICATIONS_SCOPE_INVALID:\n    \"Notification organization scope is empty or invalid.\",\n  ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN:\n    \"The notification topic is not in the Athena catalog.\",\n  ATHENA_NOTIFICATIONS_UNAUTHENTICATED:\n    \"A signed-in user is required for this notifications operation.\",\n  ATHENA_NOTIFICATIONS_UNAVAILABLE:\n    \"The notifications capability is not available on this client.\",\n};\n\nexport class AthenaNotificationsError extends Error {\n  readonly code: AthenaNotificationsErrorCode;\n  readonly error: AthenaNotificationsErrorCode;\n  readonly errorNumber: number;\n\n  constructor(code: AthenaNotificationsErrorCode, message?: string) {\n    super(message ?? ERROR_MESSAGES[code]);\n    this.name = \"AthenaNotificationsError\";\n    this.code = code;\n    this.error = code;\n    this.errorNumber = ERROR_NUMBERS[code];\n  }\n}\n\nexport function throwNotificationsError(\n  code: AthenaNotificationsErrorCode\n): never {\n  throw new AthenaNotificationsError(code);\n}\n","import type { AthenaNotificationEvent, NotificationTopicId } from \"./types.ts\";\n\nexport type AthenaNotificationEventStore = {\n  list: (input: {\n    unread?: boolean;\n    userId: string;\n  }) => Promise<AthenaNotificationEvent[]>;\n  markAllRead: (input: { userId: string }) => Promise<void>;\n  markRead: (input: { id: string; userId: string }) => Promise<boolean>;\n};\n\ntype StoredEvent = AthenaNotificationEvent & { userId: string };\n\nexport function createMemoryNotificationEventStore(): AthenaNotificationEventStore {\n  const events = new Map<string, StoredEvent>();\n\n  return {\n    async list(input: {\n      unread?: boolean;\n      userId: string;\n    }): Promise<AthenaNotificationEvent[]> {\n      const items: AthenaNotificationEvent[] = [];\n      for (const event of events.values()) {\n        if (event.userId !== input.userId) {\n          continue;\n        }\n        if (input.unread === true && event.readAt !== null) {\n          continue;\n        }\n        items.push({\n          body: event.body,\n          createdAt: event.createdAt,\n          id: event.id,\n          readAt: event.readAt,\n          title: event.title,\n          topic: event.topic,\n        });\n      }\n      items.sort((left, right) => (left.createdAt < right.createdAt ? 1 : -1));\n      return items;\n    },\n    async markAllRead(input: { userId: string }): Promise<void> {\n      const stamp = new Date().toISOString();\n      for (const event of events.values()) {\n        if (event.userId === input.userId && event.readAt === null) {\n          event.readAt = stamp;\n        }\n      }\n    },\n    async markRead(input: { id: string; userId: string }): Promise<boolean> {\n      const event = events.get(input.id);\n      if (!event || event.userId !== input.userId) {\n        return false;\n      }\n      event.readAt = event.readAt ?? new Date().toISOString();\n      return true;\n    },\n  };\n}\n\nexport function seedMemoryNotificationEvent(\n  store: AthenaNotificationEventStore,\n  event: StoredEvent\n): void {\n  const memory = store as unknown as {\n    events?: Map<string, StoredEvent>;\n  };\n  void memory;\n  if (store instanceof Object) {\n    const bag = store as unknown as { __seed?: (row: StoredEvent) => void };\n    if (typeof bag.__seed === \"function\") {\n      bag.__seed(event);\n    }\n  }\n}\n\n/** Test helper: Memory inbox seed. */\nexport function createMemoryNotificationEventStoreWithSeed(\n  seed: readonly StoredEvent[] = []\n): AthenaNotificationEventStore {\n  const events = new Map<string, StoredEvent>();\n  for (const row of seed) {\n    events.set(row.id, { ...row });\n  }\n  return {\n    async list(input: {\n      unread?: boolean;\n      userId: string;\n    }): Promise<AthenaNotificationEvent[]> {\n      const items: AthenaNotificationEvent[] = [];\n      for (const event of events.values()) {\n        if (event.userId !== input.userId) {\n          continue;\n        }\n        if (input.unread === true && event.readAt !== null) {\n          continue;\n        }\n        items.push({\n          body: event.body,\n          createdAt: event.createdAt,\n          id: event.id,\n          readAt: event.readAt,\n          title: event.title,\n          topic: event.topic as NotificationTopicId,\n        });\n      }\n      return items;\n    },\n    async markAllRead(input: { userId: string }): Promise<void> {\n      const stamp = new Date().toISOString();\n      for (const event of events.values()) {\n        if (event.userId === input.userId && event.readAt === null) {\n          event.readAt = stamp;\n        }\n      }\n    },\n    async markRead(input: { id: string; userId: string }): Promise<boolean> {\n      const event = events.get(input.id);\n      if (!event || event.userId !== input.userId) {\n        return false;\n      }\n      event.readAt = event.readAt ?? new Date().toISOString();\n      return true;\n    },\n  };\n}\n","import type {\n  NotificationChannelId,\n  NotificationDigest,\n  NotificationPreferenceOverride,\n  NotificationPreferenceRow,\n} from \"./types.ts\";\n\nexport type NotificationPreferenceListInput = {\n  organizationId?: string | null;\n  userId: string;\n};\n\nexport type NotificationPreferenceUpsertInput = {\n  channel: NotificationChannelId;\n  digest?: NotificationDigest | null;\n  enabled: boolean;\n  organizationId?: string | null;\n  topic: string;\n  userId: string;\n};\n\nexport type NotificationPreferenceDeleteInput = {\n  channel: NotificationChannelId;\n  organizationId?: string | null;\n  topic: string;\n  userId: string;\n};\n\nexport type NotificationPreferenceStoreMutation =\n  | ({\n      operation: \"set\";\n    } & NotificationPreferenceUpsertInput)\n  | ({\n      operation: \"reset\";\n    } & NotificationPreferenceDeleteInput);\n\nexport type NotificationPreferenceApplyManyResult = {\n  deleted: number;\n  upserted: NotificationPreferenceRow[];\n};\n\nexport type NotificationPreferenceSqlQuery = (\n  text: string,\n  values?: unknown[]\n) => Promise<{ rows: Record<string, unknown>[] }>;\n\nexport type NotificationPreferenceSqlExecutor = {\n  query: NotificationPreferenceSqlQuery;\n  transaction?: <T>(\n    fn: (executor: NotificationPreferenceSqlExecutor) => Promise<T>\n  ) => Promise<T>;\n};\n\nexport type NotificationPreferenceStore = {\n  applyMany: (\n    operations: readonly NotificationPreferenceStoreMutation[]\n  ) => Promise<NotificationPreferenceApplyManyResult>;\n  delete: (input: NotificationPreferenceDeleteInput) => Promise<boolean>;\n  deleteMany: (\n    inputs: readonly NotificationPreferenceDeleteInput[]\n  ) => Promise<number>;\n  list: (\n    input: NotificationPreferenceListInput\n  ) => Promise<NotificationPreferenceOverride[]>;\n  upsert: (\n    input: NotificationPreferenceUpsertInput\n  ) => Promise<NotificationPreferenceRow>;\n  upsertMany: (\n    inputs: readonly NotificationPreferenceUpsertInput[]\n  ) => Promise<NotificationPreferenceRow[]>;\n};\n\nexport function preferenceScopeKey(\n  userId: string,\n  organizationId: string | null,\n  channel: string,\n  topic: string\n): string {\n  const org = organizationId === null ? \"\" : organizationId;\n  return `${userId}\\u0000${org}\\u0000${channel}\\u0000${topic}`;\n}\n\nexport function assertSinglePreferenceScope(\n  inputs: readonly { organizationId?: string | null; userId: string }[]\n): { organizationId: string | null; userId: string } | null {\n  if (inputs.length === 0) {\n    return null;\n  }\n  const userId = inputs[0]?.userId;\n  const organizationId = inputs[0]?.organizationId ?? null;\n  if (!userId) {\n    throw new Error(\"preference batch is missing userId\");\n  }\n  for (const input of inputs) {\n    if (input.userId !== userId) {\n      throw new Error(\"preference batch mixes user identities\");\n    }\n    if ((input.organizationId ?? null) !== organizationId) {\n      throw new Error(\"preference batch mixes organization scopes\");\n    }\n  }\n  return { organizationId, userId };\n}\n","import type {\n  NotificationPreferenceApplyManyResult,\n  NotificationPreferenceDeleteInput,\n  NotificationPreferenceListInput,\n  NotificationPreferenceStore,\n  NotificationPreferenceStoreMutation,\n  NotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport { assertSinglePreferenceScope, preferenceScopeKey } from \"./store.ts\";\nimport type {\n  NotificationPreferenceOverride,\n  NotificationPreferenceRow,\n} from \"./types.ts\";\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\nfunction newRowId(): string {\n  return crypto.randomUUID();\n}\n\nfunction toOverride(\n  row: NotificationPreferenceRow\n): NotificationPreferenceOverride {\n  return {\n    channel: row.channel,\n    digest: row.digest,\n    enabled: row.enabled,\n    organizationId: row.organizationId,\n    topic: row.topic,\n    userId: row.userId,\n  };\n}\n\nexport function createMemoryNotificationPreferenceStore(): NotificationPreferenceStore {\n  const rows = new Map<string, NotificationPreferenceRow>();\n\n  async function upsert(\n    input: NotificationPreferenceUpsertInput\n  ): Promise<NotificationPreferenceRow> {\n    const organizationId = input.organizationId ?? null;\n    const key = preferenceScopeKey(\n      input.userId,\n      organizationId,\n      input.channel,\n      input.topic\n    );\n    const existing = rows.get(key);\n    const stamp = nowIso();\n    const next: NotificationPreferenceRow = {\n      channel: input.channel,\n      createdAt: existing?.createdAt ?? stamp,\n      digest: input.digest ?? null,\n      enabled: input.enabled,\n      id: existing?.id ?? newRowId(),\n      metadata: existing?.metadata ?? {},\n      organizationId,\n      topic: input.topic,\n      updatedAt: stamp,\n      userId: input.userId,\n    };\n    rows.set(key, next);\n    return next;\n  }\n\n  async function remove(\n    input: NotificationPreferenceDeleteInput\n  ): Promise<boolean> {\n    const key = preferenceScopeKey(\n      input.userId,\n      input.organizationId ?? null,\n      input.channel,\n      input.topic\n    );\n    return rows.delete(key);\n  }\n\n  async function deleteMany(\n    inputs: readonly NotificationPreferenceDeleteInput[]\n  ): Promise<number> {\n    assertSinglePreferenceScope(inputs);\n    let deleted = 0;\n    for (const input of inputs) {\n      if (await remove(input)) {\n        deleted += 1;\n      }\n    }\n    return deleted;\n  }\n\n  async function upsertMany(\n    inputs: readonly NotificationPreferenceUpsertInput[]\n  ): Promise<NotificationPreferenceRow[]> {\n    assertSinglePreferenceScope(inputs);\n    const rowsOut: NotificationPreferenceRow[] = [];\n    for (const input of inputs) {\n      rowsOut.push(await upsert(input));\n    }\n    return rowsOut;\n  }\n\n  const store: NotificationPreferenceStore = {\n    async applyMany(\n      operations: readonly NotificationPreferenceStoreMutation[]\n    ): Promise<NotificationPreferenceApplyManyResult> {\n      assertSinglePreferenceScope(operations);\n      const snapshot = new Map(rows);\n      try {\n        const resets = operations.filter(\n          (operation) => operation.operation === \"reset\"\n        );\n        const sets = operations.filter(\n          (operation) => operation.operation === \"set\"\n        );\n        const deleted = await this.deleteMany(resets);\n        const upserted = await this.upsertMany(sets);\n        return { deleted, upserted };\n      } catch (error) {\n        rows.clear();\n        for (const [key, row] of snapshot) {\n          rows.set(key, row);\n        }\n        throw error;\n      }\n    },\n    delete: remove,\n    deleteMany,\n    async list(\n      input: NotificationPreferenceListInput\n    ): Promise<NotificationPreferenceOverride[]> {\n      const out: NotificationPreferenceOverride[] = [];\n      for (const row of rows.values()) {\n        if (row.userId !== input.userId) {\n          continue;\n        }\n        out.push(toOverride(row));\n      }\n      return out;\n    },\n    upsert,\n    upsertMany,\n  };\n  return store;\n}\n","import {\n  ATHENA_NOTIFICATIONS_SCOPE_INVALID,\n  throwNotificationsError,\n} from \"./errors.ts\";\nimport { preferenceScopeKey } from \"./store.ts\";\nimport type { AthenaNotificationPreferenceMutation } from \"./types.ts\";\n\nexport function collapseNotificationPreferenceMutations(\n  mutations: readonly AthenaNotificationPreferenceMutation[]\n): AthenaNotificationPreferenceMutation[] {\n  const byKey = new Map<string, AthenaNotificationPreferenceMutation>();\n  for (const mutation of mutations) {\n    const organizationId = mutation.organizationId ?? null;\n    const key = preferenceScopeKey(\n      \"\",\n      organizationId,\n      mutation.channel,\n      mutation.topic\n    );\n    byKey.set(key, mutation);\n  }\n  return [...byKey.values()];\n}\n\nexport function requireUniformPreferenceMutationScope(\n  mutations: readonly AthenaNotificationPreferenceMutation[]\n): string | null {\n  if (mutations.length === 0) {\n    return null;\n  }\n  const organizationId = mutations[0]?.organizationId ?? null;\n  for (const mutation of mutations) {\n    if ((mutation.organizationId ?? null) !== organizationId) {\n      throwNotificationsError(ATHENA_NOTIFICATIONS_SCOPE_INVALID);\n    }\n  }\n  return organizationId;\n}\n","import { findCatalogEntry } from \"./catalog.ts\";\nimport {\n  ATHENA_NOTIFICATIONS_UNAVAILABLE,\n  throwNotificationsError,\n} from \"./errors.ts\";\nimport type {\n  AthenaEffectiveNotificationPreference,\n  NotificationCatalogEntry,\n  NotificationChannelId,\n  NotificationDigest,\n  NotificationPreferenceOverride,\n  NotificationPreferenceSource,\n} from \"./types.ts\";\n\nfunction isCatalogArray(\n  value: unknown\n): value is readonly NotificationCatalogEntry[] {\n  return Array.isArray(value) && value.length > 0;\n}\n\nfunction isUserScope(organizationId: string | null | undefined): boolean {\n  return organizationId === null || organizationId === undefined;\n}\n\nfunction overrideMatchesScope(\n  override: NotificationPreferenceOverride,\n  organizationId: string | null | undefined\n): NotificationPreferenceSource | null {\n  const overrideOrg = override.organizationId ?? null;\n  if (overrideOrg === null) {\n    return \"user\";\n  }\n  if (!isUserScope(organizationId) && overrideOrg === organizationId) {\n    return \"organization\";\n  }\n  return null;\n}\n\nfunction pickOverride(\n  overrides: readonly NotificationPreferenceOverride[],\n  topic: string,\n  channel: NotificationChannelId,\n  organizationId: string | null | undefined\n): {\n  digest: NotificationDigest | null;\n  enabled: boolean;\n  source: NotificationPreferenceSource;\n} | null {\n  let userMatch: NotificationPreferenceOverride | undefined;\n  let orgMatch: NotificationPreferenceOverride | undefined;\n  for (const override of overrides) {\n    if (override.topic !== topic || override.channel !== channel) {\n      continue;\n    }\n    const source = overrideMatchesScope(override, organizationId);\n    if (source === \"organization\") {\n      orgMatch = override;\n    } else if (source === \"user\") {\n      userMatch = override;\n    }\n  }\n  if (!isUserScope(organizationId) && orgMatch) {\n    return {\n      digest: orgMatch.digest ?? null,\n      enabled: orgMatch.enabled,\n      source: \"organization\",\n    };\n  }\n  if (userMatch) {\n    return {\n      digest: userMatch.digest ?? null,\n      enabled: userMatch.enabled,\n      source: \"user\",\n    };\n  }\n  return null;\n}\n\nexport function resolveEffectiveNotificationPreferences(input: {\n  catalog?: unknown;\n  organizationId?: string | null;\n  overrides: readonly NotificationPreferenceOverride[];\n}): AthenaEffectiveNotificationPreference[] {\n  if (!isCatalogArray(input.catalog)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n  }\n  const catalog = input.catalog;\n  const items: AthenaEffectiveNotificationPreference[] = [];\n  for (const entry of catalog) {\n    const matched = pickOverride(\n      input.overrides,\n      entry.topic,\n      entry.channel,\n      input.organizationId\n    );\n    items.push({\n      channel: entry.channel,\n      description: entry.description ?? entry.label,\n      digest: matched?.digest ?? null,\n      enabled: matched?.enabled ?? entry.defaultEnabled,\n      group: entry.group,\n      groupOrder: entry.groupOrder,\n      label: entry.label,\n      order: entry.order,\n      source: matched?.source ?? \"catalog\",\n      topic: entry.topic,\n    });\n  }\n  return items;\n}\n\nexport function resolveOneEffectivePreference(input: {\n  catalog: readonly NotificationCatalogEntry[];\n  channel: NotificationChannelId;\n  organizationId?: string | null;\n  overrides: readonly NotificationPreferenceOverride[];\n  topic: string;\n}): AthenaEffectiveNotificationPreference {\n  const entry = findCatalogEntry(input.catalog, input.topic, input.channel);\n  if (!entry) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n  }\n  const matched = pickOverride(\n    input.overrides,\n    input.topic,\n    input.channel,\n    input.organizationId\n  );\n  return {\n    channel: entry.channel,\n    description: entry.description ?? entry.label,\n    digest: matched?.digest ?? null,\n    enabled: matched?.enabled ?? entry.defaultEnabled,\n    group: entry.group,\n    groupOrder: entry.groupOrder,\n    label: entry.label,\n    order: entry.order,\n    source: matched?.source ?? \"catalog\",\n    topic: entry.topic,\n  };\n}\n","import {\n  catalogHasChannel,\n  findCatalogEntry,\n  isNotificationChannelId,\n} from \"./catalog.ts\";\nimport {\n  ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN,\n  ATHENA_NOTIFICATIONS_DIGEST_INVALID,\n  ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN,\n  throwNotificationsError,\n} from \"./errors.ts\";\nimport {\n  collapseNotificationPreferenceMutations,\n  requireUniformPreferenceMutationScope,\n} from \"./preference-batch.ts\";\nimport { resolveEffectiveNotificationPreferences } from \"./resolve.ts\";\nimport type {\n  NotificationPreferenceStore,\n  NotificationPreferenceStoreMutation,\n} from \"./store.ts\";\nimport type {\n  AthenaEffectiveNotificationPreference,\n  AthenaNotificationPreferenceApplyManyInput,\n  AthenaNotificationPreferenceMutation,\n  NotificationCatalogEntry,\n  NotificationChannelId,\n  NotificationDigest,\n} from \"./types.ts\";\nimport { NOTIFICATION_DIGEST_VALUES } from \"./types.ts\";\n\nfunction requireTopic(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string\n): string {\n  if (!catalog.some((entry) => entry.topic === topic)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n  }\n  return topic;\n}\n\nfunction requireChannel(\n  catalog: readonly NotificationCatalogEntry[],\n  channel: string\n): NotificationChannelId {\n  if (\n    !(isNotificationChannelId(channel) && catalogHasChannel(catalog, channel))\n  ) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN);\n  }\n  return channel;\n}\n\nfunction requirePair(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string,\n  channel: NotificationChannelId\n): void {\n  if (!findCatalogEntry(catalog, topic, channel)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n  }\n}\n\nfunction normalizeDigest(\n  digest: NotificationDigest | null | undefined\n): NotificationDigest | null {\n  if (digest === undefined || digest === null) {\n    return null;\n  }\n  if (!(NOTIFICATION_DIGEST_VALUES as readonly string[]).includes(digest)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_DIGEST_INVALID);\n  }\n  return digest;\n}\n\nfunction pairKey(topic: string, channel: string): string {\n  return `${topic}\\u0000${channel}`;\n}\n\nexport async function applyNotificationPreferenceMutations(input: {\n  catalog: readonly NotificationCatalogEntry[];\n  mutations: readonly AthenaNotificationPreferenceMutation[];\n  preferenceStore: NotificationPreferenceStore;\n  userId: string;\n}): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n  const collapsed = collapseNotificationPreferenceMutations(input.mutations);\n  if (collapsed.length === 0) {\n    return { items: [] };\n  }\n  const organizationId = requireUniformPreferenceMutationScope(collapsed);\n  const storeMutations: NotificationPreferenceStoreMutation[] = [];\n  const affected = new Set<string>();\n  for (const mutation of collapsed) {\n    const topic = requireTopic(input.catalog, mutation.topic);\n    const channel = requireChannel(input.catalog, mutation.channel);\n    requirePair(input.catalog, topic, channel);\n    affected.add(pairKey(topic, channel));\n    if (mutation.operation === \"reset\") {\n      storeMutations.push({\n        channel,\n        operation: \"reset\",\n        organizationId,\n        topic,\n        userId: input.userId,\n      });\n      continue;\n    }\n    storeMutations.push({\n      channel,\n      digest: normalizeDigest(mutation.digest),\n      enabled: mutation.enabled,\n      operation: \"set\",\n      organizationId,\n      topic,\n      userId: input.userId,\n    });\n  }\n  await input.preferenceStore.applyMany(storeMutations);\n  const overrides = await input.preferenceStore.list({\n    organizationId,\n    userId: input.userId,\n  });\n  const items = resolveEffectiveNotificationPreferences({\n    catalog: input.catalog,\n    organizationId,\n    overrides,\n  }).filter((item) => affected.has(pairKey(item.topic, item.channel)));\n  return { items };\n}\n\nexport function asApplyManyInput(\n  query: AthenaNotificationPreferenceApplyManyInput\n): AthenaNotificationPreferenceMutation[] {\n  return Array.isArray(query.mutations) ? [...query.mutations] : [];\n}\n","import {\n  catalogHasChannel,\n  findCatalogEntry,\n  isNotificationChannelId,\n  normalizeNotificationCatalog,\n} from \"./catalog.ts\";\nimport {\n  NOTIFICATION_OPERATIONS,\n  type NotificationOperation,\n} from \"./contract/operations.ts\";\nimport {\n  ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN,\n  ATHENA_NOTIFICATIONS_DIGEST_INVALID,\n  ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND,\n  ATHENA_NOTIFICATIONS_SCOPE_INVALID,\n  ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN,\n  ATHENA_NOTIFICATIONS_UNAUTHENTICATED,\n  ATHENA_NOTIFICATIONS_UNAVAILABLE,\n  throwNotificationsError,\n} from \"./errors.ts\";\nimport type { AthenaNotificationEventStore } from \"./events-store.ts\";\nimport { createMemoryNotificationEventStore } from \"./events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"./memory-store.ts\";\nimport { applyNotificationPreferenceMutations } from \"./preference-apply.ts\";\nimport {\n  resolveEffectiveNotificationPreferences,\n  resolveOneEffectivePreference,\n} from \"./resolve.ts\";\nimport type {\n  NotificationPreferenceStore,\n  NotificationPreferenceUpsertInput,\n} from \"./store.ts\";\nimport type {\n  AthenaEffectiveNotificationPreference,\n  AthenaNotificationEvent,\n  AthenaNotificationPreferenceApplyManyInput,\n  AthenaNotificationPreferenceMutation,\n  AthenaNotificationPreferenceWriteInput,\n  AthenaNotificationsModule,\n  NotificationCatalogEntry,\n  NotificationChannelId,\n  NotificationDigest,\n} from \"./types.ts\";\nimport { NOTIFICATION_DIGEST_VALUES } from \"./types.ts\";\n\nexport type NotificationsTransportKind = \"embedded\" | \"remote\";\n\nexport type NotificationsRemoteDialect = \"gateway-v1\" | \"embedded-http\";\n\n/** Public contract: preferences.list, preferences.applyMany, preferences.update, preferences.updateMany, preferences.reset, preferences.resetMany, preferences.setChannel, catalog.list, list, markRead, markAllRead. */\n\nexport type NotificationsGatewayQuery = {\n  [key: string]: string | number | boolean | null | undefined;\n};\n\nexport type NotificationsGatewayRequest = (input: {\n  body?: Record<string, unknown>;\n  method: \"GET\" | \"POST\" | \"DELETE\";\n  path: string;\n  query?: NotificationsGatewayQuery;\n}) => Promise<unknown>;\n\nexport type CreateNotificationsModuleInput = {\n  catalog?: readonly NotificationCatalogEntry[];\n  eventStore?: AthenaNotificationEventStore;\n  getUserId?: () => string | null | undefined;\n  preferenceStore?: NotificationPreferenceStore;\n  /** Remote gateway HTTP adapter for contract parity with embedded. */\n  remoteRequest?: NotificationsGatewayRequest;\n  remoteDialect?: NotificationsRemoteDialect;\n  transport?: NotificationsTransportKind;\n};\n\nfunction normalizeScope(\n  organizationId: string | null | undefined\n): string | null {\n  if (organizationId === undefined || organizationId === null) {\n    return null;\n  }\n  if (organizationId.length === 0) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_SCOPE_INVALID);\n  }\n  return organizationId;\n}\n\nfunction requireCatalog(\n  catalog: readonly NotificationCatalogEntry[] | null\n): readonly NotificationCatalogEntry[] {\n  if (!catalog) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n  }\n  return catalog;\n}\n\nfunction requireTopic(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string\n): string {\n  if (!catalog.some((entry) => entry.topic === topic)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n  }\n  return topic;\n}\n\nfunction requireChannel(\n  catalog: readonly NotificationCatalogEntry[],\n  channel: string\n): NotificationChannelId {\n  if (\n    !(isNotificationChannelId(channel) && catalogHasChannel(catalog, channel))\n  ) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_CHANNEL_UNKNOWN);\n  }\n  return channel;\n}\n\nfunction requirePair(\n  catalog: readonly NotificationCatalogEntry[],\n  topic: string,\n  channel: NotificationChannelId\n): void {\n  if (!findCatalogEntry(catalog, topic, channel)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_TOPIC_UNKNOWN);\n  }\n}\n\nfunction normalizeDigest(\n  digest: NotificationDigest | null | undefined\n): NotificationDigest | null {\n  if (digest === undefined || digest === null) {\n    return null;\n  }\n  if (!(NOTIFICATION_DIGEST_VALUES as readonly string[]).includes(digest)) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_DIGEST_INVALID);\n  }\n  return digest;\n}\n\nfunction requireUserId(getUserId?: () => string | null | undefined): string {\n  const userId = getUserId?.()?.trim();\n  if (!userId) {\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n  }\n  return userId;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unwrapNotificationsGatewayResult(result: {\n  data: unknown;\n  ok: boolean;\n  status: number;\n}): unknown {\n  if (!result.ok) {\n    if (result.status === 401) {\n      throwNotificationsError(ATHENA_NOTIFICATIONS_UNAUTHENTICATED);\n    }\n    if (result.status === 404) {\n      throwNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n    }\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n  }\n  return result.data;\n}\n\nasync function remoteJson(\n  request: NotificationsGatewayRequest,\n  method: \"GET\" | \"POST\" | \"DELETE\",\n  path: string,\n  options?: {\n    body?: Record<string, unknown>;\n    query?: NotificationsGatewayQuery;\n  }\n): Promise<unknown> {\n  if (method === \"GET\" || method === \"DELETE\") {\n    return request({\n      method,\n      path,\n      query: options?.query,\n    });\n  }\n  return request({\n    body: options?.body,\n    method,\n    path,\n    query: options?.query,\n  });\n}\n\nfunction asItems<T>(value: unknown): T[] {\n  if (!isRecord(value)) {\n    return [];\n  }\n  return Array.isArray(value.items) ? (value.items as T[]) : [];\n}\n\nexport function createRemoteNotificationsModule(input: {\n  catalog?: readonly NotificationCatalogEntry[];\n  getUserId?: () => string | null | undefined;\n  remoteDialect?: NotificationsRemoteDialect;\n  request: NotificationsGatewayRequest;\n}): AthenaNotificationsModule {\n  const catalog = normalizeNotificationCatalog(input.catalog);\n  const request = input.request;\n  const dialect = input.remoteDialect ?? \"gateway-v1\";\n\n  async function invokeOperation(\n    operation: NotificationOperation,\n    payload?: Record<string, unknown>\n  ): Promise<unknown> {\n    return remoteJson(request, \"POST\", \"/api/athena/notifications\", {\n      body: {\n        operation,\n        payload: payload ?? {},\n      },\n    });\n  }\n\n  return {\n    catalog: {\n      async list(): Promise<{\n        items: readonly NotificationCatalogEntry[];\n      }> {\n        const resolved = requireCatalog(catalog);\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.catalogList\n          );\n          const items = asItems<NotificationCatalogEntry>(payload);\n          return { items: items.length > 0 ? items : resolved };\n        }\n        const payload = await remoteJson(\n          request,\n          \"GET\",\n          \"/notifications/v1/catalog\"\n        );\n        const items = asItems<NotificationCatalogEntry>(payload);\n        return { items: items.length > 0 ? items : resolved };\n      },\n    },\n    async list(query?: { unread?: boolean }): Promise<{\n      items: AthenaNotificationEvent[];\n    }> {\n      if (dialect !== \"embedded-http\") {\n        requireUserId(input.getUserId);\n      }\n      if (dialect === \"embedded-http\") {\n        const payload = await invokeOperation(\n          NOTIFICATION_OPERATIONS.eventsList,\n          query?.unread === undefined ? {} : { unread: query.unread }\n        );\n        return { items: asItems<AthenaNotificationEvent>(payload) };\n      }\n      const payload = await remoteJson(\n        request,\n        \"GET\",\n        \"/notifications/v1/events\",\n        query?.unread === undefined\n          ? undefined\n          : { query: { unread: query.unread } }\n      );\n      return { items: asItems<AthenaNotificationEvent>(payload) };\n    },\n    async markAllRead(): Promise<{ ok: true }> {\n      if (dialect !== \"embedded-http\") {\n        requireUserId(input.getUserId);\n      }\n      if (dialect === \"embedded-http\") {\n        await invokeOperation(NOTIFICATION_OPERATIONS.eventsMarkAllRead);\n        return { ok: true };\n      }\n      await remoteJson(request, \"POST\", \"/notifications/v1/events/read-all\");\n      return { ok: true };\n    },\n    async markRead(query: { id: string }): Promise<{ ok: true }> {\n      if (dialect !== \"embedded-http\") {\n        requireUserId(input.getUserId);\n      }\n      if (dialect === \"embedded-http\") {\n        await invokeOperation(NOTIFICATION_OPERATIONS.eventsMarkRead, {\n          id: query.id,\n        });\n        return { ok: true };\n      }\n      await remoteJson(request, \"POST\", \"/notifications/v1/events/read\", {\n        body: {\n          id: query.id,\n        },\n      });\n      return { ok: true };\n    },\n    preferences: {\n      async applyMany(\n        query: AthenaNotificationPreferenceApplyManyInput\n      ): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        requireCatalog(catalog);\n        if (dialect !== \"embedded-http\") {\n          requireUserId(input.getUserId);\n        }\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesApplyMany,\n            { mutations: [...query.mutations] }\n          );\n          return {\n            items: asItems<AthenaEffectiveNotificationPreference>(payload),\n          };\n        }\n        throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n      },\n      async list(query?: { organizationId?: string | null }): Promise<{\n        items: AthenaEffectiveNotificationPreference[];\n      }> {\n        requireCatalog(catalog);\n        const organizationId = normalizeScope(query?.organizationId);\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesList,\n            organizationId === null ? {} : { organizationId }\n          );\n          return {\n            items: asItems<AthenaEffectiveNotificationPreference>(payload),\n          };\n        }\n        const payload = await remoteJson(\n          request,\n          \"GET\",\n          \"/notifications/v1/preferences\",\n          organizationId === null ? undefined : { query: { organizationId } }\n        );\n        return {\n          items: asItems<AthenaEffectiveNotificationPreference>(payload),\n        };\n      },\n      async reset(query: {\n        channel: NotificationChannelId;\n        organizationId?: string | null;\n        topic: string;\n      }): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n        const resolved = requireCatalog(catalog);\n        const topic = requireTopic(resolved, query.topic);\n        const channel = requireChannel(resolved, query.channel);\n        requirePair(resolved, topic, channel);\n        normalizeScope(query.organizationId);\n        if (dialect !== \"embedded-http\") {\n          requireUserId(input.getUserId);\n        }\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesReset,\n            {\n              channel,\n              organizationId: query.organizationId ?? null,\n              topic,\n            }\n          );\n          if (isRecord(payload) && isRecord(payload.item)) {\n            return {\n              item: payload.item as unknown as AthenaEffectiveNotificationPreference,\n            };\n          }\n          throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n        }\n        const payload = await remoteJson(\n          request,\n          \"DELETE\",\n          \"/notifications/v1/preferences\",\n          {\n            query: {\n              channel,\n              organizationId: query.organizationId ?? null,\n              topic,\n            },\n          }\n        );\n        if (isRecord(payload) && isRecord(payload.item)) {\n          return {\n            item: payload.item as unknown as AthenaEffectiveNotificationPreference,\n          };\n        }\n        throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n      },\n      async resetMany(query: {\n        items: readonly {\n          channel: NotificationChannelId;\n          organizationId?: string | null;\n          topic: string;\n        }[];\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        requireCatalog(catalog);\n        if (dialect !== \"embedded-http\") {\n          requireUserId(input.getUserId);\n        }\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesResetMany,\n            { items: [...query.items] }\n          );\n          return {\n            items: asItems<AthenaEffectiveNotificationPreference>(payload),\n          };\n        }\n        throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n      },\n      async setChannel(query: {\n        channel: NotificationChannelId;\n        enabled: boolean;\n        organizationId?: string | null;\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        const resolved = requireCatalog(catalog);\n        const channel = requireChannel(resolved, query.channel);\n        normalizeScope(query.organizationId);\n        if (dialect !== \"embedded-http\") {\n          requireUserId(input.getUserId);\n        }\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesSetChannel,\n            {\n              channel,\n              enabled: query.enabled,\n              organizationId: query.organizationId ?? null,\n            }\n          );\n          return {\n            items: asItems<AthenaEffectiveNotificationPreference>(payload),\n          };\n        }\n        throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n      },\n      async update(query: {\n        channel: NotificationChannelId;\n        digest?: NotificationDigest | null;\n        enabled: boolean;\n        organizationId?: string | null;\n        topic: string;\n      }): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n        const resolved = requireCatalog(catalog);\n        const topic = requireTopic(resolved, query.topic);\n        const channel = requireChannel(resolved, query.channel);\n        requirePair(resolved, topic, channel);\n        normalizeDigest(query.digest);\n        normalizeScope(query.organizationId);\n        if (dialect !== \"embedded-http\") {\n          requireUserId(input.getUserId);\n        }\n        if (dialect === \"embedded-http\") {\n          const payload = await invokeOperation(\n            NOTIFICATION_OPERATIONS.preferencesUpdate,\n            {\n              channel,\n              digest: query.digest ?? null,\n              enabled: query.enabled,\n              organizationId: query.organizationId ?? null,\n              topic,\n            }\n          );\n          if (isRecord(payload) && isRecord(payload.item)) {\n            return {\n              item: payload.item as unknown as AthenaEffectiveNotificationPreference,\n            };\n          }\n          throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n        }\n        const payload = await remoteJson(\n          request,\n          \"POST\",\n          \"/notifications/v1/preferences\",\n          {\n            body: {\n              channel,\n              digest: query.digest ?? null,\n              enabled: query.enabled,\n              organizationId: query.organizationId ?? null,\n              topic,\n            },\n          }\n        );\n        if (isRecord(payload) && isRecord(payload.item)) {\n          return {\n            item: payload.item as unknown as AthenaEffectiveNotificationPreference,\n          };\n        }\n        throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n      },\n      async updateMany(query: {\n        items: readonly AthenaNotificationPreferenceWriteInput[];\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        return this.applyMany({\n          mutations: query.items.map((item) => ({\n            ...item,\n            operation: \"set\" as const,\n          })),\n        });\n      },\n    },\n  };\n}\n\nexport function createEmbeddedNotificationsModule(input: {\n  catalog?: readonly NotificationCatalogEntry[];\n  eventStore?: AthenaNotificationEventStore;\n  getUserId?: () => string | null | undefined;\n  preferenceStore?: NotificationPreferenceStore;\n}): AthenaNotificationsModule {\n  const catalog = normalizeNotificationCatalog(input.catalog);\n  const preferenceStore =\n    input.preferenceStore ?? createMemoryNotificationPreferenceStore();\n  const eventStore = input.eventStore ?? createMemoryNotificationEventStore();\n\n  return {\n    catalog: {\n      async list(): Promise<{\n        items: readonly NotificationCatalogEntry[];\n      }> {\n        return { items: requireCatalog(catalog) };\n      },\n    },\n    async list(query?: { unread?: boolean }): Promise<{\n      items: AthenaNotificationEvent[];\n    }> {\n      const userId = input.getUserId?.()?.trim();\n      if (!userId) {\n        return { items: [] };\n      }\n      const items = await eventStore.list({\n        unread: query?.unread,\n        userId,\n      });\n      return { items };\n    },\n    async markAllRead(): Promise<{ ok: true }> {\n      const userId = requireUserId(input.getUserId);\n      await eventStore.markAllRead({ userId });\n      return { ok: true };\n    },\n    async markRead(query: { id: string }): Promise<{ ok: true }> {\n      const userId = requireUserId(input.getUserId);\n      const ok = await eventStore.markRead({ id: query.id, userId });\n      if (!ok) {\n        throwNotificationsError(ATHENA_NOTIFICATIONS_EVENT_NOT_FOUND);\n      }\n      return { ok: true };\n    },\n    preferences: {\n      async applyMany(\n        query: AthenaNotificationPreferenceApplyManyInput\n      ): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        const resolved = requireCatalog(catalog);\n        const userId = requireUserId(input.getUserId);\n        return applyNotificationPreferenceMutations({\n          catalog: resolved,\n          mutations: query.mutations,\n          preferenceStore,\n          userId,\n        });\n      },\n      async list(query?: { organizationId?: string | null }): Promise<{\n        items: AthenaEffectiveNotificationPreference[];\n      }> {\n        const resolved = requireCatalog(catalog);\n        const organizationId = normalizeScope(query?.organizationId);\n        const userId = input.getUserId?.()?.trim();\n        const overrides = userId\n          ? await preferenceStore.list({ organizationId, userId })\n          : [];\n        return {\n          items: resolveEffectiveNotificationPreferences({\n            catalog: resolved,\n            organizationId,\n            overrides,\n          }),\n        };\n      },\n      async reset(query: {\n        channel: NotificationChannelId;\n        organizationId?: string | null;\n        topic: string;\n      }): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n        const resolved = requireCatalog(catalog);\n        const topic = requireTopic(resolved, query.topic);\n        const channel = requireChannel(resolved, query.channel);\n        requirePair(resolved, topic, channel);\n        const organizationId = normalizeScope(query.organizationId);\n        const userId = requireUserId(input.getUserId);\n        await preferenceStore.delete({\n          channel,\n          organizationId,\n          topic,\n          userId,\n        });\n        const overrides = await preferenceStore.list({\n          organizationId,\n          userId,\n        });\n        return {\n          item: resolveOneEffectivePreference({\n            catalog: resolved,\n            channel,\n            organizationId,\n            overrides,\n            topic,\n          }),\n        };\n      },\n      async resetMany(query: {\n        items: readonly {\n          channel: NotificationChannelId;\n          organizationId?: string | null;\n          topic: string;\n        }[];\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        const mutations: AthenaNotificationPreferenceMutation[] =\n          query.items.map((item) => ({\n            channel: item.channel,\n            operation: \"reset\",\n            organizationId: item.organizationId,\n            topic: item.topic,\n          }));\n        return this.applyMany({ mutations });\n      },\n      async setChannel(query: {\n        channel: NotificationChannelId;\n        enabled: boolean;\n        organizationId?: string | null;\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        const resolved = requireCatalog(catalog);\n        const channel = requireChannel(resolved, query.channel);\n        const organizationId = normalizeScope(query.organizationId);\n        const userId = requireUserId(input.getUserId);\n        const overrides = await preferenceStore.list({\n          organizationId,\n          userId,\n        });\n        const writes: NotificationPreferenceUpsertInput[] = resolved\n          .filter((entry) => entry.channel === channel)\n          .map((entry) => {\n            const existing = overrides.find(\n              (row) => row.topic === entry.topic && row.channel === channel\n            );\n            return {\n              channel,\n              digest: existing?.digest ?? null,\n              enabled: query.enabled,\n              organizationId,\n              topic: entry.topic,\n              userId,\n            };\n          });\n        await preferenceStore.upsertMany(writes);\n        const nextOverrides = await preferenceStore.list({\n          organizationId,\n          userId,\n        });\n        const items = resolveEffectiveNotificationPreferences({\n          catalog: resolved,\n          organizationId,\n          overrides: nextOverrides,\n        }).filter((item) => item.channel === channel);\n        return { items };\n      },\n      async update(query: {\n        channel: NotificationChannelId;\n        digest?: NotificationDigest | null;\n        enabled: boolean;\n        organizationId?: string | null;\n        topic: string;\n      }): Promise<{ item: AthenaEffectiveNotificationPreference }> {\n        const resolved = requireCatalog(catalog);\n        const topic = requireTopic(resolved, query.topic);\n        const channel = requireChannel(resolved, query.channel);\n        requirePair(resolved, topic, channel);\n        const digest = normalizeDigest(query.digest);\n        const organizationId = normalizeScope(query.organizationId);\n        const userId = requireUserId(input.getUserId);\n        await preferenceStore.upsert({\n          channel,\n          digest,\n          enabled: query.enabled,\n          organizationId,\n          topic,\n          userId,\n        });\n        const overrides = await preferenceStore.list({\n          organizationId,\n          userId,\n        });\n        return {\n          item: resolveOneEffectivePreference({\n            catalog: resolved,\n            channel,\n            organizationId,\n            overrides,\n            topic,\n          }),\n        };\n      },\n      async updateMany(query: {\n        items: readonly AthenaNotificationPreferenceWriteInput[];\n      }): Promise<{ items: AthenaEffectiveNotificationPreference[] }> {\n        return this.applyMany({\n          mutations: query.items.map((item) => ({\n            ...item,\n            operation: \"set\" as const,\n          })),\n        });\n      },\n    },\n  };\n}\n\nexport function createNotificationsModule(\n  input: CreateNotificationsModuleInput = {}\n): AthenaNotificationsModule {\n  if (input.transport === \"remote\") {\n    const remoteRequest = input.remoteRequest;\n    if (!remoteRequest) {\n      throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n    }\n    if (!normalizeNotificationCatalog(input.catalog)) {\n      return createUnavailableNotificationsModule();\n    }\n    return createRemoteNotificationsModule({\n      catalog: input.catalog,\n      getUserId: input.getUserId,\n      remoteDialect: input.remoteDialect,\n      request: remoteRequest,\n    });\n  }\n  if (!normalizeNotificationCatalog(input.catalog)) {\n    return createUnavailableNotificationsModule();\n  }\n  return createEmbeddedNotificationsModule({\n    catalog: input.catalog,\n    eventStore: input.eventStore,\n    getUserId: input.getUserId,\n    preferenceStore: input.preferenceStore,\n  });\n}\n\nexport function createUnavailableNotificationsModule(): AthenaNotificationsModule {\n  const fail = async (): Promise<never> =>\n    throwNotificationsError(ATHENA_NOTIFICATIONS_UNAVAILABLE);\n  return {\n    catalog: {\n      list: fail,\n    },\n    list: fail,\n    markAllRead: fail,\n    markRead: fail,\n    preferences: {\n      applyMany: fail,\n      list: fail,\n      reset: fail,\n      resetMany: fail,\n      setChannel: fail,\n      update: fail,\n      updateMany: fail,\n    },\n  };\n}\n","import type { NotificationsGatewayRequest } from \"./module.ts\";\nimport { unwrapNotificationsGatewayResult } from \"./module.ts\";\n\nexport const DEFAULT_NOTIFICATIONS_HTTP_PATH = \"/api/athena/notifications\";\n\nexport function createNotificationsEmbeddedHttpRequest(options?: {\n  fetch?: typeof fetch;\n  path?: string;\n}): NotificationsGatewayRequest {\n  const path = options?.path ?? DEFAULT_NOTIFICATIONS_HTTP_PATH;\n  const fetchImpl = options?.fetch ?? fetch;\n  return async (input) => {\n    const response = await fetchImpl(path, {\n      body: JSON.stringify(input.body ?? {}),\n      credentials: \"same-origin\",\n      headers: {\n        \"content-type\": \"application/json\",\n      },\n      method: \"POST\",\n    });\n    const json: unknown = await response.json().catch(() => undefined);\n    const record =\n      json !== null && typeof json === \"object\" && !Array.isArray(json)\n        ? (json as { data?: unknown; ok?: boolean; status?: number })\n        : {};\n    return unwrapNotificationsGatewayResult({\n      data: record.data,\n      ok: record.ok === true && response.ok,\n      status:\n        typeof record.status === \"number\" ? record.status : response.status,\n    });\n  };\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  AthenaQueryDescriptor,\n  AthenaQueryFieldDependencyKind,\n} from \"./descriptor.ts\";\n\nexport interface AthenaEntityNode {\n  data: Record<string, unknown>;\n  keyToken: string;\n  updatedAt: number;\n}\n\nexport function isPlainRow(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function extractResultRows(data: unknown): Record<string, unknown>[] {\n  if (Array.isArray(data)) {\n    return data.filter(isPlainRow);\n  }\n  if (!isPlainRow(data)) {\n    return [];\n  }\n  if (\"data\" in data) {\n    if (Array.isArray(data.data)) {\n      return data.data.filter(isPlainRow);\n    }\n    if (isPlainRow(data.data)) {\n      return [data.data];\n    }\n    return [];\n  }\n  return [data];\n}\n\nexport function mapResultRows(\n  data: unknown,\n  mapper: (row: Record<string, unknown>) => Record<string, unknown>\n): unknown {\n  if (Array.isArray(data)) {\n    return data.map((item) => (isPlainRow(item) ? mapper(item) : item));\n  }\n  if (!isPlainRow(data)) {\n    return data;\n  }\n  if (Array.isArray(data.data)) {\n    return {\n      ...data,\n      data: data.data.map((item) => (isPlainRow(item) ? mapper(item) : item)),\n    };\n  }\n  if (isPlainRow(data.data)) {\n    return { ...data, data: mapper(data.data) };\n  }\n  return mapper(data);\n}\n\nexport function removeResultRows(\n  data: unknown,\n  predicate: (row: Record<string, unknown>) => boolean\n): unknown {\n  if (Array.isArray(data)) {\n    return data.filter((item) => !(isPlainRow(item) && predicate(item)));\n  }\n  if (!isPlainRow(data)) {\n    return data;\n  }\n  if (Array.isArray(data.data)) {\n    return {\n      ...data,\n      data: data.data.filter((item) => !(isPlainRow(item) && predicate(item))),\n    };\n  }\n  if (isPlainRow(data.data) && predicate(data.data)) {\n    return { ...data, data: null };\n  }\n  return data;\n}\n\nexport function mergeEntityRow(\n  current: Record<string, unknown> | undefined,\n  incoming: Record<string, unknown>\n): Record<string, unknown> {\n  return { ...(current ?? {}), ...incoming };\n}\n\nexport function descriptorFieldColumns(\n  descriptor: AthenaQueryDescriptor,\n  role: AthenaQueryFieldDependencyKind\n): string[] {\n  return descriptor.dependency.fields\n    .filter((field) => field.roles.includes(role))\n    .map((field) => field.column);\n}\n\nexport function mutationTouchesQueryMembership(\n  query: AthenaQueryDescriptor,\n  changedFields: readonly string[]\n): boolean {\n  if (changedFields.length === 0) {\n    return false;\n  }\n  const watched = new Set([\n    ...descriptorFieldColumns(query, \"filter\"),\n    ...descriptorFieldColumns(query, \"order\"),\n  ]);\n  return changedFields.some((field) => watched.has(field));\n}\n\nexport function sameModelTarget(\n  left: AthenaQueryDescriptor,\n  right: AthenaQueryDescriptor\n): boolean {\n  return (\n    left.target.table === right.target.table &&\n    (left.target.schema ?? \"\") === (right.target.schema ?? \"\") &&\n    (left.target.database ?? \"\") === (right.target.database ?? \"\")\n  );\n}\n\nexport function sameCacheContext(\n  left: AthenaQueryDescriptor[\"context\"],\n  right: AthenaQueryDescriptor[\"context\"]\n): boolean {\n  return (\n    (left?.organizationId ?? \"\") === (right?.organizationId ?? \"\") &&\n    (left?.userId ?? \"\") === (right?.userId ?? \"\") &&\n    (left?.accessScope ?? \"\") === (right?.accessScope ?? \"\") &&\n    (left?.policyRevision ?? \"\") === (right?.policyRevision ?? \"\")\n  );\n}\n\nexport function queryDependsOnRelationTarget(\n  query: AthenaQueryDescriptor,\n  mutation: AthenaQueryDescriptor\n): boolean {\n  const mutationModel = mutation.target.model ?? mutation.target.table;\n  return query.dependency.relations.some(\n    (relation) =>\n      relation.targetModel === mutationModel ||\n      relation.targetModel === mutation.target.table\n  );\n}\n\nexport type AthenaQueryEnvelopeKind =\n  | \"array\"\n  | \"data-array\"\n  | \"data-single\"\n  | \"row\";\n\nexport interface AthenaNormalizedQueryPage {\n  entities: readonly string[];\n  envelope: AthenaQueryEnvelopeKind;\n  extras?: Record<string, unknown>;\n}\n\nexport function describeQueryEnvelope(data: unknown): {\n  envelope: AthenaQueryEnvelopeKind;\n  extras?: Record<string, unknown>;\n} {\n  if (Array.isArray(data)) {\n    return { envelope: \"array\" };\n  }\n  if (isPlainRow(data) && \"data\" in data) {\n    const { data: _rows, ...extras } = data;\n    return {\n      envelope: Array.isArray(data.data) ? \"data-array\" : \"data-single\",\n      extras: Object.keys(extras).length > 0 ? extras : undefined,\n    };\n  }\n  return { envelope: \"row\" };\n}\n\nexport function materializeNormalizedQueryPage(\n  page: AthenaNormalizedQueryPage,\n  resolve: (token: string) => Record<string, unknown> | undefined\n): unknown {\n  const rows = page.entities\n    .map((token) => resolve(token))\n    .filter((row): row is Record<string, unknown> => Boolean(row));\n  if (page.envelope === \"array\") {\n    return rows;\n  }\n  if (page.envelope === \"data-array\") {\n    return { ...(page.extras ?? {}), data: rows };\n  }\n  if (page.envelope === \"data-single\") {\n    return { ...(page.extras ?? {}), data: rows[0] ?? null };\n  }\n  return rows[0];\n}\n\nexport function isCollectionOperation(\n  operation: AthenaQueryDescriptor[\"operation\"]\n): boolean {\n  return 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}\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>>(key: AthenaEntityKey): 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(this.byModel, `::${relation.targetModel}`, queryId);\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(\n        this.byModel,\n        athenaModelIndexKey(descriptor.target),\n        queryId\n      );\n      this.remove(\n        this.byScope,\n        athenaScopeIndexKey(descriptor.context),\n        queryId\n      );\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(map: Map<string, Set<string>>, key: string, queryId: string) {\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  queryKey: QueryKey;\n  queryKeyToken: string;\n  retry?: number | false;\n  retryDelay?: number | ((attempt: number) => number);\n  select?: (data: TQueryFnData) => TData;\n  signal?: AbortSignal;\n}\n\nexport interface QueryEntry {\n  activeRequestId: number;\n  cacheMode?: AthenaCacheMode;\n  descriptor?: AthenaQueryDescriptor;\n  entityRefs?: string[];\n  gcTimer?: ReturnType<typeof setTimeout>;\n  key: string;\n  listeners: Set<() => void>;\n  model?: AthenaModelTarget;\n  normalizedPage?: AthenaNormalizedQueryPage;\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(entry.model, row, entry.descriptor?.context)\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 { BillingSchedulerHandle } from \"../billing/reconciliation/scheduler.ts\";\nimport type {\n  AthenaBillingDiagnostics,\n  AthenaBillingInspectedConnection,\n} from \"../billing/runtime/diagnostics.ts\";\nimport type { AthenaBillingRuntimeDispatch } from \"../billing/runtime/dispatch.ts\";\nimport type { BillingProviderRegistry } from \"../billing/runtime/local/providers/registry.ts\";\nimport type { AthenaCapabilitiesIr } from \"../capabilities/types.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaPostgresRuntime } from \"../postgres/owned-runtime.ts\";\nimport type { PostgresPoolManager } from \"../postgres/pool/manager.ts\";\nimport type { AthenaRightsAuthority } from \"../rights/authority.ts\";\nimport type { AthenaRightsIr } from \"../rights/types.ts\";\nimport type { AthenaRolesIr } from \"../roles/types.ts\";\nimport type { NormalizedAthenaAuthorizationConfig } from \"./authorization/config.ts\";\nimport type { AthenaAuthorizationModelIndex } from \"./authorization/model-index.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport type { StorageRuntime } from \"../storage/runtime/types.ts\";\nimport type { AthenaClientConfig } from \"../client/contracts.ts\";\nimport { resolveAthenaAuthorizationIrState } from \"./authorization/state.ts\";\nimport type { AthenaRuntimeAuthSessionStore } from \"./data/principal.ts\";\nimport {\n  ATHENA_CLIENT_INTERNAL_PROTOCOL,\n  type AthenaClientLifecycle,\n  type AthenaClientOwnership,\n  type AthenaRuntimeDiagnostics,\n  AthenaRuntimeOwnershipError,\n  type AthenaRuntimeResourceOwnership,\n  createAthenaClientLifecycle,\n  describeAthenaRuntime,\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  \"createAthenaNextHandlers({ client }) requires the process-wide Athena root.\",\n  \"\",\n  \"Received a request-scoped Athena client created by withContext() or\",\n  \"createAthenaServerClient({ client }).\",\n  \"\",\n  \"Next.js local runtime pattern:\",\n  \"\",\n  '  const root = createClient({ databaseUrl, auth: { mode: \"local\" } });',\n  \"\",\n  \"Pass `root` directly to createAthenaNextHandlers().\",\n  \"\",\n  \"Use request-scoped clients only for application queries.\",\n].join(\"\\n\");\n\nexport const ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE = [\n  \"This object is not an Athena root from this package instance.\",\n  \"\",\n  \"Typical causes:\",\n  \"  - a request view (withContext / createAthenaServerClient)\",\n  \"  - a client created by another copy of @xylex-group/athena\",\n  \"  - a mocked object without root internals\",\n  \"\",\n  \"Install one Athena version and pass the process-wide createClient() root.\",\n].join(\"\\n\");\n\nexport interface AthenaClientAuthRuntime {\n  close(): Promise<void>;\n  getStores(): Promise<unknown>;\n  getOAuthRuntimeJwtVerifier?: (\n    resource: string\n  ) => Promise<import(\"./data/principal.ts\").AthenaRuntimeJwtVerifier>;\n}\n\nexport interface AthenaClientOwnedRuntime {\n  close(): Promise<void>;\n  getPool(): Promise<unknown>;\n  getPoolManager(): Promise<PostgresPoolManager>;\n  readonly ownership: \"owned\" | \"borrowed\";\n  query: AthenaPostgresRuntime[\"query\"];\n  transaction: AthenaPostgresRuntime[\"transaction\"];\n}\n\nexport interface AthenaClientInternals {\n  authRuntime?: AthenaClientAuthRuntime;\n  authorizationConfig?: NormalizedAthenaAuthorizationConfig;\n  authorizationModelIndex?: AthenaAuthorizationModelIndex;\n  billingBootstrapEvents?: string[];\n  billingDiagnostics?: AthenaBillingDiagnostics;\n  billingMaterializedConnections?: readonly AthenaBillingInspectedConnection[];\n  billingPlanChangeRecoveryScheduler?: BillingSchedulerHandle;\n  billingProviderRegistry?: BillingProviderRegistry;\n  billingRuntime?: AthenaBillingRuntimeDispatch;\n  billingRuntimeGeneration?: number;\n  billingRuntimeOwnerKey?: string;\n  billingSchedulerHandles?: BillingSchedulerHandle[];\n  capabilitiesFingerprint?: string;\n  /** Canonical runtime capability snapshot shared by compatibility projections. */\n  capabilitiesIr?: AthenaCapabilitiesIr;\n  close?: () => Promise<void>;\n  config: AthenaClientConfig;\n  eventIngressRuntime?: unknown;\n  gatewayTransport?: AthenaGatewayClient;\n  getAuthStores?: () => Promise<AthenaRuntimeAuthSessionStore>;\n  getRolesIr?: () => Promise<AthenaRolesIr | undefined>;\n  internalProtocolVersion: number;\n  lifecycle: AthenaClientLifecycle;\n  ownership: AthenaClientOwnership;\n  parent?: object;\n  plan: ResolvedAthenaRuntime;\n  postgresRuntime?: AthenaClientOwnedRuntime;\n  rightsAuthority?: AthenaRightsAuthority;\n  rightsFingerprint?: string;\n  /** Canonical authorization documents owned by this root application. */\n  rightsIr?: AthenaRightsIr;\n  rolesFingerprint?: string;\n  rolesIr?: AthenaRolesIr;\n  runtimeOwnership: AthenaRuntimeResourceOwnership;\n  runtimeReadiness?: AthenaRuntimeReadiness;\n  sdkVersion: string;\n  /**\n   * @deprecated Use `ownership`. Kept in sync for older internals readers.\n   */\n  source?: AthenaClientOwnership;\n  storageRuntime?: 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  const holder = globalThis as typeof globalThis & {\n    [ROOT_INTERNALS_MAP]?: WeakMap<object, AthenaClientInternals>;\n  };\n  holder[ROOT_INTERNALS_MAP] ??= new WeakMap();\n  return holder[ROOT_INTERNALS_MAP];\n}\n\ntype ClientWithInternals = object & {\n  [ROOT_INTERNALS]?: AthenaClientInternals;\n};\n\nexport function attachAthenaClientInternals(\n  client: object,\n  internals: AthenaClientInternals\n): void {\n  internalsByClient().set(client, internals);\n  try {\n    Object.defineProperty(client, ROOT_INTERNALS, {\n      configurable: true,\n      enumerable: false,\n      value: internals,\n      writable: false,\n    });\n  } catch {\n    // Frozen clients keep the WeakMap entry only.\n  }\n}\n\nexport function getAthenaClientInternals(\n  client: object\n): AthenaClientInternals | undefined {\n  return (\n    internalsByClient().get(client) ??\n    (client as ClientWithInternals)[ROOT_INTERNALS]\n  );\n}\n\nexport function createRootClientInternals(\n  partial: Omit<\n    AthenaClientInternals,\n    | \"internalProtocolVersion\"\n    | \"lifecycle\"\n    | \"ownership\"\n    | \"runtimeOwnership\"\n    | \"sdkVersion\"\n    | \"source\"\n  > & {\n    lifecycle?: AthenaClientLifecycle;\n    runtimeOwnership?: AthenaRuntimeResourceOwnership;\n  }\n): AthenaClientInternals {\n  const lifecycle = partial.lifecycle ?? createAthenaClientLifecycle();\n  const authorization = resolveAthenaAuthorizationIrState({\n    rightsIr:\n      partial.authorizationConfig?.rightsState.rightsIr ?? partial.rightsIr,\n    rolesIr: partial.rolesIr,\n  });\n  return {\n    ...partial,\n    getRolesIr: partial.getRolesIr,\n    internalProtocolVersion: ATHENA_CLIENT_INTERNAL_PROTOCOL,\n    lifecycle,\n    ownership: \"root\",\n    rightsAuthority:\n      partial.authorizationConfig?.rightsState.rightsAuthority ??\n      authorization.rightsAuthority,\n    rightsFingerprint:\n      partial.rightsFingerprint ?? authorization.rightsFingerprint,\n    rightsIr: authorization.rightsIr,\n    rolesFingerprint:\n      partial.rolesFingerprint ?? authorization.rolesFingerprint,\n    rolesIr: authorization.rolesIr,\n    runtimeOwnership: partial.runtimeOwnership ?? \"owned\",\n    sdkVersion: PACKAGE_VERSION,\n    source: \"root\",\n  };\n}\n\nexport function createViewClientInternals(\n  parent: object,\n  rootInternals: AthenaClientInternals\n): AthenaClientInternals {\n  rootInternals.lifecycle.requestViewsCreated += 1;\n  return {\n    ...rootInternals,\n    close: undefined,\n    ownership: \"request\",\n    parent,\n    runtimeOwnership: \"borrowed\",\n    source: \"request\",\n  };\n}\n\nexport function isAthenaRequestRuntime(\n  internals: AthenaClientInternals | undefined\n): boolean {\n  if (!internals) {\n    return false;\n  }\n  return internals.ownership === \"request\" || internals.source === \"request\";\n}\n\nexport function throwAthenaRuntimeOwnershipInvalid(caller: string): never {\n  throw new AthenaRuntimeOwnershipError({\n    caller,\n    code: \"ATHENA_RUNTIME_OWNERSHIP_INVALID\",\n    message: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_HANDLER_ROOT_CLIENT_REQUIRED_MESSAGE}`,\n    received: \"request-view\",\n  });\n}\n\nexport function requireAthenaRootClientInternals(\n  client: object,\n  caller: string\n): AthenaClientInternals {\n  const internals = getAthenaClientInternals(client);\n  if (!internals) {\n    throw new AthenaRuntimeOwnershipError({\n      caller,\n      code: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n      message: `${caller} requires the process-wide Athena root.\\n\\n${ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH_MESSAGE}`,\n      received: \"foreign-runtime\",\n    });\n  }\n  if (internals.internalProtocolVersion !== ATHENA_CLIENT_INTERNAL_PROTOCOL) {\n    throw new AthenaRuntimeOwnershipError({\n      caller,\n      code: \"ATHENA_CLIENT_RUNTIME_VERSION_MISMATCH\",\n      message: `${caller} received an Athena client from an incompatible runtime protocol (${String(internals.internalProtocolVersion)} ≠ ${String(ATHENA_CLIENT_INTERNAL_PROTOCOL)}).`,\n      received: \"foreign-runtime\",\n    });\n  }\n  if (!isAthenaRequestRuntime(internals)) {\n    return internals;\n  }\n  throwAthenaRuntimeOwnershipInvalid(caller);\n}\n\n/** Bind request-view Auth so migrate exists but cannot own the root executor. */\nexport function attachRequestAuthLifecycleGuards(\n  view: object,\n  parent: object\n): void {\n  const parentServer = (\n    parent as {\n      auth?: {\n        server?: {\n          handle?: (request: Request) => Promise<Response>;\n          handlers?: unknown;\n          migrate?: () => Promise<void>;\n        };\n      };\n    }\n  ).auth?.server;\n  if (!parentServer) {\n    return;\n  }\n  const viewAuth = (view as { auth?: object }).auth;\n  if (!viewAuth) {\n    return;\n  }\n  Object.assign(viewAuth, {\n    server: {\n      handle: parentServer.handle,\n      handlers: parentServer.handlers,\n      migrate: async () => {\n        throwAthenaRuntimeOwnershipInvalid(\"auth.server.migrate\");\n      },\n    },\n  });\n}\n\n/** Test/debug helper — not a product observability API. Root-only. */\nexport function getAthenaRuntimeDiagnostics(\n  client: object\n): AthenaRuntimeDiagnostics | undefined {\n  const internals = getAthenaClientInternals(client);\n  if (!internals) {\n    return;\n  }\n  if (isAthenaRequestRuntime(internals)) {\n    throwAthenaRuntimeOwnershipInvalid(\"getAthenaRuntimeDiagnostics\");\n  }\n  return describeAthenaRuntime(\n    internals.ownership,\n    internals.runtimeOwnership,\n    internals.lifecycle\n  );\n}\n\nexport type {\n  AthenaClientLifecycle,\n  AthenaClientOwnership,\n  AthenaRequestRuntime,\n  AthenaRootRuntime,\n  AthenaRuntimeDiagnostics,\n  AthenaRuntimeResourceOwnership,\n} from \"./ownership.ts\";\nexport {\n  ATHENA_CLIENT_INTERNAL_PROTOCOL,\n  AthenaRuntimeOwnershipError,\n  createAthenaClientLifecycle,\n} from \"./ownership.ts\";\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\n\nexport const ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED =\n  \"ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED\" as const;\n\ntype LifecycleConfigBag = {\n  d1?: unknown;\n  databaseUrl?: string | null;\n  db?: { d1?: unknown; pgUri?: string | null };\n  gatewayTransport?: unknown;\n  lifecycle?: { data?: Record<string, unknown> };\n};\n\nfunction hasLocalMutationRuntime(config: LifecycleConfigBag): boolean {\n  if (config.db?.d1 !== undefined && config.db.d1 !== null) {\n    return true;\n  }\n  if (config.d1 !== undefined && config.d1 !== null) {\n    return true;\n  }\n  if (typeof config.db?.pgUri === \"string\" && config.db.pgUri.trim()) {\n    return true;\n  }\n  if (typeof config.databaseUrl === \"string\" && config.databaseUrl.trim()) {\n    return true;\n  }\n  if (config.gatewayTransport) {\n    return true;\n  }\n  return false;\n}\n\nexport function assertDataLifecycleTransactionsUnsupported(): never {\n  throw new AthenaConfigurationError(\n    ATHENA_DATA_LIFECYCLE_TX_UNSUPPORTED,\n    \"Data lifecycle does not own a transaction-owning nucleus. Interactive transactions are unsupported until one exists.\",\n    \"db\"\n  );\n}\n\nexport function assertDataLifecycleConfig(config: LifecycleConfigBag): void {\n  const data = config.lifecycle?.data;\n  if (!data) {\n    return;\n  }\n  if (\"afterCommit\" in data && data.afterCommit != null) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_DATA_LIFECYCLE_AFTER_COMMIT_UNSUPPORTED\",\n      \"afterCommit is reserved until a transaction-owning data nucleus exists. It is not an alias of afterUpdate.\",\n      \"db\"\n    );\n  }\n  if (!hasLocalMutationRuntime(config)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_DATA_LIFECYCLE_REQUIRES_LOCAL_RUNTIME\",\n      \"createClient({ lifecycle: { data } }) requires a mutation-owning local runtime (db.pgUri, databaseUrl, or db.d1). Remote/browser clients cannot register data lifecycle hooks.\",\n      \"db\"\n    );\n  }\n}\n","import type { AthenaNotificationEventStore } from \"../../notifications/events-store.ts\";\nimport { createMemoryNotificationEventStore } from \"../../notifications/events-store.ts\";\nimport { createMemoryNotificationPreferenceStore } from \"../../notifications/memory-store.ts\";\nimport type { NotificationPreferenceStore } from \"../../notifications/store.ts\";\n\nexport interface AthenaClientNotificationStores {\n  eventStore: AthenaNotificationEventStore;\n  preferenceStore: NotificationPreferenceStore;\n}\n\nconst clientNotificationStores = new WeakMap<\n  object,\n  AthenaClientNotificationStores\n>();\nconst notificationStoreHoldersByClient = new WeakMap<\n  object,\n  AthenaClientNotificationStores\n>();\n\nexport function getOrCreateNotificationStores(\n  core: object,\n): AthenaClientNotificationStores {\n  const existing = clientNotificationStores.get(core);\n  if (existing) {\n    return existing;\n  }\n  const holder: AthenaClientNotificationStores = {\n    eventStore: createMemoryNotificationEventStore(),\n    preferenceStore: createMemoryNotificationPreferenceStore(),\n  };\n  clientNotificationStores.set(core, holder);\n  return holder;\n}\n\nexport function linkNotificationStores(\n  client: object,\n  stores: AthenaClientNotificationStores,\n): void {\n  notificationStoreHoldersByClient.set(client, stores);\n}\n\nexport function replaceClientNotificationPreferenceStore(\n  client: object,\n  store: NotificationPreferenceStore,\n): void {\n  const holder = notificationStoreHoldersByClient.get(client);\n  if (holder) {\n    holder.preferenceStore = store;\n  }\n}\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  return (\n    value === \"delete\" ||\n    value === \"get\" ||\n    value === \"head\" ||\n    value === \"list\" ||\n    value === \"put\"\n  );\n}\n\nexport interface StorageObjectRequest {\n  body?: Uint8Array | string;\n  contentType?: string;\n  cursor?: string;\n  key?: string;\n  limit?: number;\n  metadata?: Record<string, string>;\n  op: StorageObjectOp;\n  prefix?: string;\n}\n\nexport interface AuthorizedStorageOperation {\n  body?: Uint8Array;\n  contentType?: string;\n  cursor?: string;\n  key?: string;\n  limit?: number;\n  metadata?: Record<string, string>;\n  op: StorageObjectOp;\n  prefix?: string;\n  principal: AthenaPrincipal;\n}\n\nexport interface StorageObjectError {\n  code: string;\n  errorNumber: number;\n  message: string;\n  missing?: readonly string[];\n  operation?: StorageObjectOp;\n}\n\nexport interface StorageObjectResult {\n  data?: unknown;\n  error?: StorageObjectError;\n  ok: boolean;\n  status: number;\n}\n\nexport interface StorageObjectProvider {\n  execute(op: AuthorizedStorageOperation): Promise<StorageObjectResult>;\n}\n\nexport interface AthenaStorageLifecycleHooks {\n  after?(event: { op: StorageObjectOp; result: StorageObjectResult }): void;\n  before?(event: { op: StorageObjectOp; request: StorageObjectRequest }): void;\n}\n\nexport interface CreateStorageRuntimeOptions {\n  lifecycle?: AthenaStorageLifecycleHooks;\n  policies?: AthenaPolicyRegistry;\n  provider: StorageObjectProvider;\n}\n\nexport interface StorageRuntime {\n  execute(\n    request: StorageObjectRequest,\n    principal: AthenaPrincipal\n  ): Promise<StorageObjectResult>;\n  readonly provider: StorageObjectProvider;\n}\n\nexport const ATHENA_STORAGE_PROVIDER = Symbol.for(\n  \"@xylex-group/athena.storage.provider\"\n);\n\nexport const ATHENA_STORAGE_RUNTIME = Symbol.for(\n  \"@xylex-group/athena.storage.runtime\"\n);\n\nexport type StorageProviderHandle = StorageObjectProvider;\n","import {\n  ATHENA_STORAGE_PROVIDER,\n  ATHENA_STORAGE_RUNTIME,\n  type StorageObjectProvider,\n  type StorageRuntime,\n} from \"./types.ts\";\n\nexport function getStorageProvider(\n  storage: unknown\n): StorageObjectProvider | undefined {\n  if (!storage || typeof storage !== \"object\") {\n    return;\n  }\n  return (storage as { [ATHENA_STORAGE_PROVIDER]?: StorageObjectProvider })[\n    ATHENA_STORAGE_PROVIDER\n  ];\n}\n\nexport function bindStorageProvider<TStorage extends object>(\n  storage: TStorage,\n  provider: StorageObjectProvider\n): TStorage & { [ATHENA_STORAGE_PROVIDER]: StorageObjectProvider } {\n  return {\n    ...storage,\n    [ATHENA_STORAGE_PROVIDER]: provider,\n  };\n}\n\nexport function getStorageRuntime(\n  storage: unknown\n): StorageRuntime | undefined {\n  if (!storage || typeof storage !== \"object\") {\n    return;\n  }\n  return (storage as { [ATHENA_STORAGE_RUNTIME]?: StorageRuntime })[\n    ATHENA_STORAGE_RUNTIME\n  ];\n}\n\nexport function bindStorageRuntime<TStorage extends object>(\n  storage: TStorage,\n  runtime: StorageRuntime\n): TStorage & { [ATHENA_STORAGE_RUNTIME]: StorageRuntime } {\n  return {\n    ...storage,\n    [ATHENA_STORAGE_RUNTIME]: runtime,\n  };\n}\n","export const ATHENA_STORAGE_BYTES_KIND = \"athena.storage.bytes\" as const;\n\nexport type AthenaStorageBytesEncoding = \"base64\";\n\nexport interface AthenaStorageBytesEnvelope {\n  bytes: string;\n  encoding: AthenaStorageBytesEncoding;\n  kind: typeof ATHENA_STORAGE_BYTES_KIND;\n}\n\nexport function isAthenaStorageBytesEnvelope(\n  value: unknown\n): value is AthenaStorageBytesEnvelope {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const record = value as Record<string, unknown>;\n  return (\n    record.kind === ATHENA_STORAGE_BYTES_KIND &&\n    record.encoding === \"base64\" &&\n    typeof record.bytes === \"string\"\n  );\n}\n\nexport function encodeAthenaStorageBytes(\n  bytes: Uint8Array\n): AthenaStorageBytesEnvelope {\n  return {\n    bytes: bytesToBase64(bytes),\n    encoding: \"base64\",\n    kind: ATHENA_STORAGE_BYTES_KIND,\n  };\n}\n\nexport function decodeAthenaStorageBytes(\n  value: unknown\n): Uint8Array | undefined {\n  if (value instanceof Uint8Array) {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return new Uint8Array(value);\n  }\n  if (!isAthenaStorageBytesEnvelope(value)) {\n    return;\n  }\n  return base64ToBytes(value.bytes);\n}\n\nexport function decodeAthenaStorageRequestBody(\n  value: unknown\n): Uint8Array | undefined {\n  const decoded = decodeAthenaStorageBytes(value);\n  if (decoded) {\n    return decoded;\n  }\n  if (typeof value !== \"string\" || !value) {\n    return;\n  }\n  return base64ToBytes(value);\n}\n\nexport function serializeAthenaStorageData(data: unknown): unknown {\n  if (data instanceof Uint8Array) {\n    return encodeAthenaStorageBytes(data);\n  }\n  if (data instanceof ArrayBuffer) {\n    return encodeAthenaStorageBytes(new Uint8Array(data));\n  }\n  if (isAthenaStorageBytesEnvelope(data)) {\n    return data;\n  }\n  if (Array.isArray(data)) {\n    return data.map(serializeAthenaStorageData);\n  }\n  if (data && typeof data === \"object\") {\n    const out: Record<string, unknown> = {};\n    for (const [key, entry] of Object.entries(\n      data as Record<string, unknown>\n    )) {\n      out[key] = serializeAthenaStorageData(entry);\n    }\n    return out;\n  }\n  return data;\n}\n\nexport function reviveAthenaStorageData(data: unknown): unknown {\n  const bytes = decodeAthenaStorageBytes(data);\n  if (bytes) {\n    return bytes;\n  }\n  if (Array.isArray(data)) {\n    return data.map(reviveAthenaStorageData);\n  }\n  if (data && typeof data === \"object\") {\n    const out: Record<string, unknown> = {};\n    for (const [key, entry] of Object.entries(\n      data as Record<string, unknown>\n    )) {\n      out[key] = reviveAthenaStorageData(entry);\n    }\n    return out;\n  }\n  return data;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n  return btoa(binary);\n}\n\nfunction base64ToBytes(encoded: string): Uint8Array {\n  const binary = atob(encoded);\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","import {\n  type AthenaFailureIR,\n  athenaErrorResult,\n  classifyAthenaError,\n  createAthenaErrorInstance,\n  failureFromUnknown,\n  messageFromUnknown,\n} from \"../../runtime/error/index.ts\";\nimport {\n  isStorageObjectOp,\n  type StorageObjectOp,\n  type StorageObjectResult,\n} from \"./types.ts\";\n\nexport class AthenaStorageError extends Error {\n  readonly code: string;\n  readonly details?: unknown;\n  readonly errorNumber: number;\n  readonly status: number;\n\n  constructor(input: {\n    code: string;\n    details?: unknown;\n    errorNumber: number;\n    message: string;\n    status: number;\n  }) {\n    super(input.message);\n    this.name = \"AthenaStorageError\";\n    this.code = input.code;\n    this.errorNumber = input.errorNumber;\n    this.status = input.status;\n    this.details = input.details;\n  }\n}\n\nexport class AthenaStorageAuthorizationError extends AthenaStorageError {\n  readonly missing: readonly string[];\n  readonly operation: StorageObjectOp;\n\n  constructor(input: {\n    missing: readonly string[];\n    operation: StorageObjectOp;\n  }) {\n    super({\n      code: \"storage_authorization_denied\",\n      details: {\n        missing: input.missing,\n        operation: input.operation,\n      },\n      errorNumber: 3003,\n      message:\n        input.missing.length === 0\n          ? `Storage operation ${input.operation} denied`\n          : `Storage operation ${input.operation} denied (missing ${input.missing.join(\", \")})`,\n      status: 403,\n    });\n    this.name = \"AthenaStorageAuthorizationError\";\n    this.missing = input.missing;\n    this.operation = input.operation;\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n\nexport function isAthenaStorageAuthorizationError(\n  error: unknown\n): error is AthenaStorageAuthorizationError {\n  if (error instanceof AthenaStorageAuthorizationError) {\n    return true;\n  }\n  if (!isRecord(error)) {\n    return false;\n  }\n  return (\n    error.code === \"storage_authorization_denied\" &&\n    Array.isArray(error.missing) &&\n    isStorageObjectOp(error.operation)\n  );\n}\n\nexport function storageErrorResult(\n  failure: 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  errorNumber: number,\n  code: string,\n  message: string,\n  status: number\n): StorageObjectResult;\nexport function storageErrorResult(\n  failureOrErrorNumber: AthenaFailureIR | unknown | number,\n  code?: string,\n  message?: string,\n  status?: number\n): StorageObjectResult {\n  const failure =\n    typeof failureOrErrorNumber === \"number\"\n      ? failureFromUnknown(\n          \"runtime\",\n          new Error(message ?? \"storage request failed\"),\n          {\n            code,\n            status,\n          }\n        )\n      : failureOrErrorNumber;\n  const error = classifyAthenaError({ domain: \"storage\", failure });\n  const instance = createAthenaErrorInstance(error, {\n    details: occurrenceDetails(failure),\n    message:\n      typeof failureOrErrorNumber === \"number\"\n        ? (message ?? error.description)\n        : messageFromUnknownFailure(failure),\n  });\n  const result = athenaErrorResult(instance);\n  const explicitCode =\n    typeof code === \"string\" && code.trim() ? code.trim() : undefined;\n\n  // Pre-Error-Spine wire aliases. Keep them narrow so HTTP principal\n  // failures still classify with Direct (unknown codes → storage_internal).\n  if (explicitCode === \"storage_unauthenticated\" && status === 401) {\n    return {\n      error: {\n        code: \"storage_unauthenticated\",\n        errorNumber: 3003,\n        message: result.error.message,\n      },\n      ok: false,\n      status: 401,\n    };\n  }\n\n  if (failure instanceof AthenaStorageAuthorizationError) {\n    return {\n      error: {\n        code: failure.code,\n        errorNumber: failure.errorNumber,\n        message: failure.message,\n        missing: failure.missing,\n        operation: failure.operation,\n      },\n      ok: false,\n      status: failure.status,\n    };\n  }\n\n  const resolvedCode =\n    result.error.code === \"storage_provider_unavailable\"\n      ? \"storage_unavailable\"\n      : result.error.code;\n  const operation = isStorageObjectOp(result.error.operation)\n    ? result.error.operation\n    : undefined;\n  const missing = Array.isArray(result.error.missing)\n    ? result.error.missing\n    : undefined;\n\n  return {\n    error: {\n      code: resolvedCode,\n      errorNumber: result.error.errorNumber,\n      message: result.error.message,\n      ...(missing === undefined ? {} : { missing }),\n      ...(operation === undefined ? {} : { operation }),\n    },\n    ok: false,\n    status: result.status,\n  };\n}\n\nfunction occurrenceDetails(failure: unknown): unknown {\n  if (failure instanceof AthenaStorageAuthorizationError) {\n    return {\n      missing: failure.missing,\n      operation: failure.operation,\n    };\n  }\n  if (isRecord(failure) && failure.details !== undefined) {\n    return failure.details;\n  }\n}\n\nexport function storageOkResult(\n  data: unknown,\n  status = 200\n): StorageObjectResult {\n  return { data, ok: true, status };\n}\n\nexport function mapProviderFailure(error: unknown): StorageObjectResult {\n  return storageErrorResult({\n    ...providerFailureFields(error),\n    source: \"provider\",\n  });\n}\n\nfunction messageFromUnknownFailure(failure: unknown): string {\n  if (failure && typeof failure === \"object\") {\n    const message = (failure as { message?: unknown }).message;\n    if (typeof message === \"string\" && message.length > 0) {\n      return message;\n    }\n  }\n  return messageFromUnknown(failure);\n}\n\nfunction providerFailureFields(error: unknown): {\n  cause: unknown;\n  message: string;\n  providerCode?: string;\n  status?: number;\n} {\n  if (!error || typeof error !== \"object\") {\n    return { cause: error, message: messageFromUnknown(error) };\n  }\n  const record = error as {\n    $metadata?: { httpStatusCode?: unknown };\n    Code?: unknown;\n    code?: unknown;\n    message?: unknown;\n    name?: unknown;\n    status?: unknown;\n  };\n  const providerCode =\n    typeof record.Code === \"string\"\n      ? record.Code\n      : typeof record.code === \"string\"\n        ? record.code\n        : typeof record.name === \"string\"\n          ? record.name\n          : undefined;\n  const status =\n    typeof record.status === \"number\"\n      ? record.status\n      : typeof record.$metadata?.httpStatusCode === \"number\"\n        ? record.$metadata.httpStatusCode\n        : undefined;\n  return {\n    cause: error,\n    message:\n      typeof record.message === \"string\" ? record.message : String(error),\n    providerCode,\n    status,\n  };\n}\n","import type { AthenaRuntimeDiscoveryEndpoints } from \"../../gateway/discovery-types.ts\";\nimport { DEFAULT_ATHENA_NEXT_STORAGE_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 {\n  encodeAthenaStorageBytes,\n  reviveAthenaStorageData,\n} from \"./bytes-envelope.ts\";\nimport {\n  AthenaStorageAuthorizationError,\n  storageErrorResult,\n  storageOkResult,\n} from \"./errors.ts\";\nimport {\n  type AuthorizedStorageOperation,\n  isStorageObjectOp,\n  type StorageObjectOp,\n  type StorageObjectProvider,\n} from \"./types.ts\";\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  endpoints?:\n    | Pick<AthenaRuntimeDiscoveryEndpoints, \"storage\">\n    | { storage?: string }\n): string {\n  const advertised = endpoints?.storage?.trim();\n  return advertised || DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT;\n}\n\n/** Create an embedded storage facade.\n *\n * @returns The embedded storage facade.\n */\nexport function createEmbeddedStorageFacade(): {\n  file: {\n    delete: (input: unknown) => Promise<unknown>;\n    get: (input: unknown) => Promise<unknown>;\n    head: (input: unknown) => Promise<unknown>;\n    list: (input?: unknown) => Promise<unknown>;\n    upload: (input: unknown) => Promise<unknown>;\n  };\n} {\n  const unused = (): Promise<unknown> =>\n    Promise.reject(\n      new Error(\n        \"Athena embedded storage facade must be wrapped by StorageRuntime\"\n      )\n    );\n  return {\n    file: {\n      delete: unused,\n      get: unused,\n      head: unused,\n      list: unused,\n      upload: unused,\n    },\n  };\n}\n\nfunction asExecutorTransport(\n  ir: ReturnType<typeof createAthenaHttpTransportIR>\n): AthenaHttpTransportIR {\n  return {\n    basePath: ir.basePath,\n    credentials: ir.credentials,\n    domain: ir.domain,\n    encoding: \"json\",\n    kind: \"http\",\n    origin: ir.origin === \"absolute\" ? \"remote\" : ir.origin,\n  };\n}\n\ntype BrowserStorageTransportOptions = {\n  endpoints?: { storage?: string };\n  resolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n  topology?: AthenaRuntimeTopologyIR;\n};\n\nasync function resolveStorageTransport(\n  options?: BrowserStorageTransportOptions\n): Promise<AthenaHttpTransportIR | undefined> {\n  const explicit = options?.endpoints?.storage?.trim();\n  if (explicit) {\n    return asExecutorTransport(\n      createAthenaHttpTransportIR({\n        basePath: explicit,\n        domain: \"storage\",\n        origin: /^https?:\\/\\//i.test(explicit) ? \"remote\" : \"same-origin\",\n      })\n    );\n  }\n  const topology =\n    options?.topology ??\n    (options?.resolveTopology ? await options.resolveTopology() : undefined);\n  if (topology) {\n    const advertised = topology.transports.storage;\n    // Discovery ran: missing Storage is fail-closed, not a Data/Gateway fallback.\n    return advertised?.kind === \"http\" ? advertised : undefined;\n  }\n  return asExecutorTransport(\n    createAthenaHttpTransportIR({\n      basePath: DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT,\n      domain: \"storage\",\n      origin: \"same-origin\",\n    })\n  );\n}\n\nfunction asWireRecord(details: unknown): Record<string, unknown> | undefined {\n  if (!details || typeof details !== \"object\") {\n    return;\n  }\n  const record = details as Record<string, unknown>;\n  const nested = record.error;\n  if (nested && typeof nested === \"object\") {\n    return nested as Record<string, unknown>;\n  }\n  return record;\n}\n\nfunction storageErrorNumberFromDetails(details: unknown): number | undefined {\n  const record = asWireRecord(details);\n  if (typeof record?.errorNumber === \"number\") {\n    return record.errorNumber;\n  }\n}\n\ntype StorageAuthorizationWire = {\n  missing: readonly string[];\n  operation: StorageObjectOp;\n};\n\nfunction storageAuthorizationFromDetails(\n  details: unknown\n): StorageAuthorizationWire | undefined {\n  const record = asWireRecord(details);\n  if (!(record && isStorageObjectOp(record.operation))) {\n    return;\n  }\n  if (!Array.isArray(record.missing)) {\n    return;\n  }\n  const missing: string[] = [];\n  for (const entry of record.missing) {\n    if (typeof entry !== \"string\") {\n      return;\n    }\n    missing.push(entry);\n  }\n  return {\n    missing,\n    operation: record.operation,\n  };\n}\n\nfunction isGenericTransportHttpCode(code: string, status: number): boolean {\n  return code === `ATHENA_TRANSPORT_HTTP_${status}`;\n}\n\nexport function hasAuthoritativeStorageWireError(input: {\n  code: string;\n  errorNumber?: number;\n  status: number;\n}): boolean {\n  const wire = input.code.trim();\n  if (!wire || isGenericTransportHttpCode(wire, input.status)) {\n    return false;\n  }\n  return (\n    typeof input.errorNumber === \"number\" ||\n    !wire.startsWith(\"ATHENA_TRANSPORT_HTTP_\")\n  );\n}\n\nexport function projectStorageWireError(input: {\n  code: string;\n  details?: unknown;\n  errorNumber?: number;\n  message: string;\n  status: number;\n}) {\n  const wireNumber =\n    input.errorNumber ?? storageErrorNumberFromDetails(input.details);\n  const authorization = storageAuthorizationFromDetails(input.details);\n  if (input.code.trim() === \"storage_authorization_denied\" && authorization) {\n    return storageErrorResult(\n      new AthenaStorageAuthorizationError({\n        missing: authorization.missing,\n        operation: authorization.operation,\n      })\n    );\n  }\n  return storageErrorResult(\n    wireNumber ?? 3010,\n    input.code.trim(),\n    input.message,\n    input.status\n  );\n}\n\n/** Compatibility projector for generic `ATHENA_TRANSPORT_HTTP_*` bodies only. */\nexport function projectLegacyGenericStorageHttpError(input: {\n  message: string;\n  status: number;\n}) {\n  const status = input.status;\n  const errorNumber =\n    status === 401 || status === 403 ? 3003 : status === 503 ? 3007 : 3010;\n  const code =\n    status === 401\n      ? \"storage_unauthenticated\"\n      : status === 403\n        ? \"storage_authorization_denied\"\n        : status === 503\n          ? \"storage_unavailable\"\n          : \"storage_internal\";\n  return storageErrorResult(errorNumber, code, input.message, status);\n}\n\nfunction mapStorageHttpFailure(input: {\n  code: string;\n  details?: unknown;\n  errorNumber?: number;\n  message: string;\n  status: number;\n}) {\n  const json = input.details as { error?: { code?: unknown } } | undefined;\n  const nestedCode = json?.error?.code;\n  const wireCode =\n    typeof nestedCode === \"string\" && nestedCode.trim()\n      ? nestedCode.trim()\n      : input.code;\n  const wireNumber =\n    input.errorNumber ?? storageErrorNumberFromDetails(input.details);\n  if (\n    hasAuthoritativeStorageWireError({\n      code: wireCode,\n      errorNumber: wireNumber,\n      status: input.status,\n    })\n  ) {\n    return projectStorageWireError({\n      ...input,\n      code: wireCode,\n      errorNumber: wireNumber,\n    });\n  }\n  return projectLegacyGenericStorageHttpError({\n    message: input.message,\n    status: input.status,\n  });\n}\n\nexport function createBrowserStorageTransport(options?: {\n  baseUrl?: string;\n  endpoints?: { storage?: string };\n  fetch?: typeof fetch;\n  headers?: Record<string, string>;\n  resolveTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n  topology?: AthenaRuntimeTopologyIR;\n}): StorageObjectProvider {\n  let pending: Promise<AthenaHttpTransportIR | undefined> | undefined;\n  const loadTransport = () => {\n    pending ??= resolveStorageTransport(options);\n    return pending;\n  };\n\n  return {\n    async execute(op: AuthorizedStorageOperation) {\n      const transport = await loadTransport();\n      if (!transport) {\n        return storageErrorResult(\n          3007,\n          \"storage_unavailable\",\n          \"storage runtime is not configured\",\n          503\n        );\n      }\n      const result = await executeAthenaHttpTransport({\n        fetch: options?.fetch,\n        headers: options?.headers,\n        invocation: {\n          domain: \"storage\",\n          operation: op.op,\n          payload: compactStoragePayload({\n            body: op.body ? encodeAthenaStorageBytes(op.body) : undefined,\n            contentType: op.contentType,\n            cursor: op.cursor,\n            key: op.key,\n            limit: op.limit,\n            metadata: op.metadata,\n            prefix: op.prefix,\n          }),\n        },\n        root: options?.baseUrl,\n        transport,\n      });\n      if (!result.ok) {\n        return mapStorageHttpFailure(result.error);\n      }\n      return storageOkResult(reviveAthenaStorageData(result.data));\n    },\n  };\n}\n\nfunction compactStoragePayload(\n  payload: Record<string, unknown>\n): Record<string, unknown> {\n  const compact: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(payload)) {\n    if (value !== undefined) {\n      compact[key] = value;\n    }\n  }\n  return compact;\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type { PolicyPrincipal } from \"./types.ts\";\n\nconst PRINCIPAL_KINDS = new Set([\n  \"public\",\n  \"anonymous\",\n  \"authenticated\",\n  \"admin\",\n  \"role\",\n  \"permission\",\n  \"service\",\n]);\n\nexport function isKnownPolicyPrincipalKind(kind: string): boolean {\n  return PRINCIPAL_KINDS.has(kind);\n}\n\nfunction eqIgnoreCase(left: string | undefined, right: string): boolean {\n  return (\n    left != null &&\n    left.localeCompare(right, undefined, { sensitivity: \"accent\" }) === 0\n  );\n}\n\nfunction listHas(values: readonly string[] | undefined, name: string): boolean {\n  return 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  target: PolicyPrincipal,\n  principal: AthenaPrincipal\n): boolean {\n  switch (target.kind) {\n    case \"public\":\n      return true;\n    case \"anonymous\":\n      return principal.authenticated !== true;\n    case \"authenticated\":\n      return principal.authenticated === true;\n    case \"admin\":\n      return (\n        eqIgnoreCase(principal.role, \"admin\") ||\n        listHas(principal.rights, \"admin\")\n      );\n    case \"role\":\n      return eqIgnoreCase(principal.role, target.name);\n    case \"permission\":\n      return listHas(principal.rights, target.name);\n    case \"service\":\n      return eqIgnoreCase(principal.service, target.name);\n    default:\n      return false;\n  }\n}\n\nexport function policyAppliesToPrincipal(\n  principals: readonly PolicyPrincipal[],\n  principal: AthenaPrincipal\n): boolean {\n  if (principals.length === 0) {\n    return true;\n  }\n  return principals.some((target) => matchPolicyPrincipal(target, principal));\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type {\n  AthenaPolicyDecision,\n  AthenaPolicyDecisionReason,\n} from \"./decision.ts\";\nimport { policyAppliesToPrincipal } from \"./match-principal.ts\";\nimport type { AthenaPolicyRegistry } from \"./registry.ts\";\nimport type {\n  PolicyActionName,\n  PolicyDefinition,\n  PolicyExpr,\n} from \"./types.ts\";\n\nexport interface DecideAthenaPolicyInput {\n  action: PolicyActionName;\n  principal: AthenaPrincipal;\n  resource: string;\n}\n\nfunction combineOr(exprs: PolicyExpr[]): PolicyExpr | undefined {\n  if (exprs.length === 0) {\n    return;\n  }\n  if (exprs.length === 1) {\n    return exprs[0];\n  }\n  return { exprs, op: \"or\" };\n}\n\nfunction combineAnd(exprs: PolicyExpr[]): PolicyExpr | undefined {\n  if (exprs.length === 0) {\n    return;\n  }\n  if (exprs.length === 1) {\n    return exprs[0];\n  }\n  return { exprs, op: \"and\" };\n}\n\nfunction composeGroup(\n  matching: readonly PolicyDefinition[],\n  field: \"visibility\" | \"check\"\n): PolicyExpr | undefined {\n  const permissive = matching.filter(\n    (item) => item.composition === \"permissive\"\n  );\n  const restrictive = matching.filter(\n    (item) => item.composition === \"restrictive\"\n  );\n\n  const unrestrictedPermissive = permissive.some((item) => !item[field]);\n  const permissiveExprs = unrestrictedPermissive\n    ? []\n    : permissive\n        .map((item) => item[field])\n        .filter((expr): expr is PolicyExpr => expr !== undefined);\n  const restrictiveExprs = restrictive\n    .map((item) => item[field])\n    .filter((expr): expr is PolicyExpr => expr !== undefined);\n\n  const permissiveExpr = unrestrictedPermissive\n    ? undefined\n    : combineOr(permissiveExprs);\n  const parts: PolicyExpr[] = [];\n  if (permissiveExpr) {\n    parts.push(permissiveExpr);\n  }\n  parts.push(...restrictiveExprs);\n  return combineAnd(parts);\n}\n\nfunction decision(\n  input: Omit<AthenaPolicyDecision, \"matchedPolicyIds\"> & {\n    matchedPolicyIds?: readonly string[];\n  }\n): AthenaPolicyDecision {\n  return {\n    allowed: input.allowed,\n    matchedPolicyIds: Object.freeze([...(input.matchedPolicyIds ?? [])]),\n    mode: input.mode,\n    reason: input.reason,\n    ...(input.visibility ? { visibility: input.visibility } : {}),\n    ...(input.check ? { check: input.check } : {}),\n  };\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  registry: AthenaPolicyRegistry,\n  input: DecideAthenaPolicyInput\n): AthenaPolicyDecision {\n  if (registry.mode === \"disabled\") {\n    return decision({\n      allowed: true,\n      mode: \"disabled\",\n      reason: \"disabled\",\n    });\n  }\n\n  const candidates = registry.get(input.resource, input.action);\n  if (candidates.length === 0) {\n    return decision({\n      allowed: false,\n      mode: registry.mode,\n      reason: \"no_matching_policy\",\n    });\n  }\n\n  const matching = candidates.filter((item) =>\n    policyAppliesToPrincipal(item.principals, input.principal)\n  );\n  const matchingIds = matching.map((item) => item.id);\n  const permissiveMatches = matching.filter(\n    (item) => item.composition === \"permissive\"\n  );\n\n  let reason: AthenaPolicyDecisionReason = \"allowed\";\n  let allowed = true;\n  if (permissiveMatches.length === 0) {\n    allowed = false;\n    reason =\n      matching.length === 0 ? \"no_matching_policy\" : \"principal_not_allowed\";\n  }\n\n  return decision({\n    allowed,\n    check: allowed ? composeGroup(matching, \"check\") : undefined,\n    matchedPolicyIds: matchingIds,\n    mode: registry.mode,\n    reason,\n    visibility: allowed ? composeGroup(matching, \"visibility\") : undefined,\n  });\n}\n","import {\n  type AthenaRightKey,\n  athenaRightKeyString,\n  parseAthenaRightKey,\n} from \"../../rights/key.ts\";\nimport { missingRequiredRights } from \"../../rights/matching.ts\";\nimport { recordAthenaAuthorizationDecisionFromPrincipal } from \"../../runtime/authorization/decisions.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n  AthenaStorageAuthorizationError,\n  storageErrorResult,\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  delete: STORAGE_DELETE,\n  get: STORAGE_GET,\n  head: STORAGE_HEAD,\n  list: STORAGE_LIST,\n  put: STORAGE_PUT,\n};\n\nexport function requiredStorageRight(op: StorageObjectOp): AthenaRightKey {\n  return STORAGE_OPERATION_RIGHTS[op];\n}\n\nexport function listStorageRightKeys(): readonly AthenaRightKey[] {\n  return 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  principal: AthenaPrincipal,\n  op: StorageObjectOp\n): StorageObjectResult | undefined {\n  if (!principal.authenticated) {\n    return storageErrorResult(\n      3003,\n      \"storage_unauthenticated\",\n      \"authentication is required\",\n      401\n    );\n  }\n  const required = requiredStorageRight(op);\n  const missing = missingRequiredRights(principal.rights, [required]);\n  recordAthenaAuthorizationDecisionFromPrincipal({\n    domain: \"storage\",\n    operation: op,\n    principal,\n    required: [required],\n    resource: \"storage\",\n  });\n  if (missing.length === 0) {\n    return;\n  }\n  return storageErrorResult(\n    new AthenaStorageAuthorizationError({\n      missing: missing.map(athenaRightKeyString),\n      operation: op,\n    })\n  );\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  AuthorizedStorageOperation,\n  CreateStorageRuntimeOptions,\n  StorageObjectOp,\n  StorageObjectRequest,\n  StorageObjectResult,\n  StorageRuntime,\n} from \"./types.ts\";\n\nconst STORAGE_RESOURCE = \"storage.object\";\n\nfunction actionForOp(op: StorageObjectOp): PolicyActionName {\n  switch (op) {\n    case \"put\":\n      return \"storage.object.write\";\n    case \"delete\":\n      return \"storage.object.delete\";\n    default:\n      return \"storage.object.read\";\n  }\n}\n\nfunction toBytes(\n  body: Uint8Array | string | undefined\n): Uint8Array | undefined {\n  if (body == null) {\n    return;\n  }\n  if (typeof body === \"string\") {\n    return new TextEncoder().encode(body);\n  }\n  return body;\n}\n\nexport function createStorageRuntime(\n  options: CreateStorageRuntimeOptions\n): StorageRuntime {\n  const { provider, policies, lifecycle } = options;\n\n  return {\n    async execute(request: StorageObjectRequest, principal: AthenaPrincipal) {\n      if (\n        request.op !== \"get\" &&\n        request.op !== \"put\" &&\n        request.op !== \"delete\" &&\n        request.op !== \"list\" &&\n        request.op !== \"head\"\n      ) {\n        return storageErrorResult({\n          message: `unsupported op ${String(request.op)}`,\n          source: \"runtime\",\n          status: 400,\n        });\n      }\n      if (request.op !== \"list\" && !request.key?.trim()) {\n        return storageErrorResult({\n          message: `${request.op} requires key`,\n          source: \"runtime\",\n          status: 400,\n        });\n      }\n      const rightsDenied = authorizeStorageOperation(principal, request.op);\n      if (rightsDenied) {\n        return rightsDenied;\n      }\n\n      if (policies) {\n        const decision = decideAthenaPolicy(policies, {\n          action: actionForOp(request.op),\n          principal,\n          resource: STORAGE_RESOURCE,\n        });\n        if (!decision.allowed) {\n          return storageErrorResult({\n            message: decision.reason ?? \"denied\",\n            source: \"runtime\",\n            status: 403,\n          });\n        }\n      }\n\n      lifecycle?.before?.({ op: request.op, request });\n\n      const authorized: AuthorizedStorageOperation = {\n        body: toBytes(request.body),\n        contentType: request.contentType,\n        cursor: request.cursor,\n        key: request.key,\n        limit: request.limit,\n        metadata: request.metadata,\n        op: request.op,\n        prefix: request.prefix,\n        principal,\n      };\n\n      let result: StorageObjectResult;\n      try {\n        result = await provider.execute(authorized);\n      } catch (error) {\n        result = mapProviderFailure(error);\n      }\n\n      lifecycle?.after?.({ op: request.op, result });\n      return result;\n    },\n    provider,\n  };\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(\n  prefix: string | undefined | null\n): 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  isFolderPrefixInside,\n  joinObjectKey,\n  normalizeObjectPrefix,\n  renameObjectKey,\n  validateFolderSegment,\n} from \"../object-keys.ts\";\nimport {\n  AthenaStorageAuthorizationError,\n  AthenaStorageError,\n  isAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport type { StorageOverlayInput } from \"./overlays.ts\";\nimport type {\n  StorageObjectOp,\n  StorageObjectResult,\n  StorageRuntime,\n} from \"./types.ts\";\n\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n  authenticated: true,\n  grants: [],\n  rights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n  userId: \"storage-overlay\",\n};\n\nasync function runOverlay(runtime: StorageRuntime, input: StorageOverlayInput) {\n  return runtime.execute(\n    {\n      body: input.source,\n      contentType: input.contentType,\n      cursor: input.cursor,\n      key: input.key,\n      limit: input.limit,\n      metadata: input.metadata,\n      op: input.op,\n      prefix: input.prefix,\n    },\n    OVERLAY_PRINCIPAL\n  );\n}\n\nfunction unwrap(\n  result: StorageObjectResult,\n  operation: StorageObjectOp\n): unknown {\n  if (result.ok) {\n    return result.data;\n  }\n  if (result.error && isAthenaStorageAuthorizationError(result.error)) {\n    throw new AthenaStorageAuthorizationError({\n      missing: result.error.missing,\n      operation: result.error.operation,\n    });\n  }\n  throw new AthenaStorageError({\n    code: result.error?.code ?? \"storage_internal\",\n    errorNumber: result.error?.errorNumber ?? 3010,\n    message: result.error?.message ?? `storage ${operation} denied`,\n    status: result.status,\n  });\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  return value && typeof value === \"object\"\n    ? (value as Record<string, unknown>)\n    : {};\n}\n\nfunction readString(\n  record: Record<string, unknown>,\n  ...keys: string[]\n): string | undefined {\n  for (const key of keys) {\n    const value = record[key];\n    if (typeof value === \"string\" && value.trim()) {\n      return value.trim();\n    }\n  }\n}\n\nfunction isBinarySource(value: unknown): boolean {\n  return (\n    value instanceof Uint8Array ||\n    value instanceof ArrayBuffer ||\n    (typeof Blob !== \"undefined\" && value instanceof Blob) ||\n    typeof value === \"string\"\n  );\n}\n\nfunction isFileListLike(value: unknown): value is ArrayLike<unknown> {\n  if (Array.isArray(value)) {\n    return true;\n  }\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const record = value as { length?: unknown };\n  return (\n    typeof record.length === \"number\" &&\n    Number.isFinite(record.length) &&\n    record.length >= 0\n  );\n}\n\nexport async function coerceStorageBytes(\n  value: unknown\n): Promise<Uint8Array | string | undefined> {\n  if (value instanceof Uint8Array || typeof value === \"string\") {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return new Uint8Array(value);\n  }\n  if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n    return new Uint8Array(await value.arrayBuffer());\n  }\n}\n\nfunction fileNameOf(source: unknown, fallback: string): string {\n  if (source && typeof source === \"object\" && \"name\" in source) {\n    const name = (source as { name?: unknown }).name;\n    if (typeof name === \"string\" && name.trim()) {\n      return name.trim();\n    }\n  }\n  return fallback;\n}\n\nfunction sourceSizeOf(source: unknown): number {\n  if (source instanceof Uint8Array) {\n    return source.byteLength;\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.byteLength;\n  }\n  if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n    return source.size;\n  }\n  return 0;\n}\n\nfunction progressSnapshot(\n  phase: AthenaStorageUploadProgress[\"phase\"],\n  files: readonly { fileName: string; sizeBytes: number }[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number\n): AthenaStorageUploadProgress {\n  const total = files[fileIndex]?.sizeBytes ?? 0;\n  const aggregateTotal = files.reduce((sum, file) => sum + file.sizeBytes, 0);\n  return {\n    aggregateLoaded,\n    aggregatePercent:\n      aggregateTotal > 0\n        ? Math.round((aggregateLoaded / aggregateTotal) * 100)\n        : 100,\n    aggregateTotal,\n    fileCount: files.length,\n    fileIndex,\n    fileName: files[fileIndex]?.fileName ?? \"\",\n    loaded,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    phase,\n    total,\n  };\n}\n\nfunction listedKeys(data: unknown): string[] {\n  if (!data || typeof data !== \"object\") {\n    return [];\n  }\n  const record = data as Record<string, unknown>;\n  const items = record.objects ?? record.files ?? record.items;\n  if (!Array.isArray(items)) {\n    return [];\n  }\n  const keys: string[] = [];\n  for (const item of items) {\n    if (!item || typeof item !== \"object\") {\n      continue;\n    }\n    const entry = item as Record<string, unknown>;\n    const key = entry.key ?? entry.storage_key ?? entry.storageKey;\n    if (typeof key === \"string\" && key.trim()) {\n      keys.push(key.trim());\n    }\n  }\n  return keys;\n}\n\nfunction listedCursor(data: unknown): string | undefined {\n  if (!data || typeof data !== \"object\") {\n    return;\n  }\n  const record = data as Record<string, unknown>;\n  const cursor = record.cursor ?? record.nextCursor;\n  return typeof cursor === \"string\" && cursor.trim()\n    ? cursor.trim()\n    : undefined;\n}\n\nasync function listAllKeys(\n  runtime: StorageRuntime,\n  prefix: string\n): Promise<string[]> {\n  const keys: string[] = [];\n  let cursor: string | undefined;\n  for (let page = 0; page < 50; page += 1) {\n    const result = await runOverlay(runtime, {\n      cursor,\n      op: \"list\",\n      prefix: prefix || undefined,\n    });\n    const data = unwrap(result, \"list\");\n    keys.push(...listedKeys(data));\n    const next = listedCursor(data);\n    if (!next || next === cursor) {\n      break;\n    }\n    cursor = next;\n  }\n  return keys;\n}\n\nasync function putBytes(\n  runtime: StorageRuntime,\n  input: {\n    contentType?: string;\n    key: string;\n    metadata?: Record<string, string>;\n    source: unknown;\n  }\n) {\n  const source = await coerceStorageBytes(input.source);\n  const result = await runOverlay(runtime, {\n    contentType: input.contentType,\n    key: input.key,\n    metadata: input.metadata,\n    op: \"put\",\n    source,\n  });\n  return unwrap(result, \"put\");\n}\n\nexport function isHighLevelFileUpload(input: unknown): boolean {\n  const record = asRecord(input);\n  const files = record.files;\n  return isFileListLike(files) && !isBinarySource(files);\n}\n\nexport async function overlayUploadFiles(\n  runtime: StorageRuntime,\n  input: unknown,\n  options?: { signal?: AbortSignal }\n) {\n  const record = asRecord(input);\n  const filesField = record.files;\n  if (!isFileListLike(filesField)) {\n    throw new Error(\"storage.file.upload requires files\");\n  }\n  const sources = Array.from(filesField);\n  if (sources.length === 0) {\n    throw new Error(\"storage.file.upload requires at least one file\");\n  }\n  const prefixPath =\n    typeof record.prefixPath === \"string\"\n      ? record.prefixPath\n      : typeof record.prefix === \"string\"\n        ? record.prefix\n        : \"\";\n  const onProgress =\n    typeof record.onProgress === \"function\"\n      ? (record.onProgress as (progress: AthenaStorageUploadProgress) => void)\n      : undefined;\n  const described = sources.map((source, index) => ({\n    fileName: fileNameOf(source, `file-${index + 1}`),\n    sizeBytes: sourceSizeOf(source),\n    source,\n  }));\n  onProgress?.(progressSnapshot(\"preparing\", described, 0, 0, 0));\n  const uploaded: unknown[] = [];\n  let aggregateLoaded = 0;\n  for (let index = 0; index < described.length; index += 1) {\n    if (options?.signal?.aborted) {\n      const error = new Error(\"Upload cancelled\");\n      error.name = \"AbortError\";\n      throw error;\n    }\n    const item = described[index];\n    if (!item) {\n      continue;\n    }\n    onProgress?.(\n      progressSnapshot(\"uploading\", described, index, 0, aggregateLoaded)\n    );\n    const key = joinObjectKey(prefixPath, item.fileName);\n    const result = await putBytes(runtime, {\n      contentType:\n        typeof record.contentType === \"string\" ? record.contentType : undefined,\n      key,\n      source: item.source,\n    });\n    aggregateLoaded += item.sizeBytes;\n    onProgress?.(\n      progressSnapshot(\n        \"uploading\",\n        described,\n        index,\n        item.sizeBytes,\n        aggregateLoaded\n      )\n    );\n    uploaded.push(result);\n  }\n  onProgress?.(\n    progressSnapshot(\n      \"complete\",\n      described,\n      described.length - 1,\n      described[described.length - 1]?.sizeBytes ?? 0,\n      aggregateLoaded\n    )\n  );\n  return {\n    count: uploaded.length,\n    files: uploaded,\n    uploaded: described.map((item) => joinObjectKey(prefixPath, item.fileName)),\n  };\n}\n\nexport async function overlayMoveFile(runtime: StorageRuntime, input: unknown) {\n  const record = asRecord(input);\n  const from =\n    readString(record, \"from\", \"from_key\", \"source_key\", \"key\") ?? \"\";\n  const to = readString(record, \"to\", \"to_key\", \"destination_key\") ?? \"\";\n  if (!(from && to)) {\n    throw new Error(\"storage.file.move requires from and to keys\");\n  }\n  const getResult = await runOverlay(runtime, {\n    key: from,\n    op: \"get\",\n  });\n  const body = unwrap(getResult, \"get\");\n  await putBytes(runtime, { key: to, source: body });\n  const deleteResult = await runOverlay(runtime, {\n    key: from,\n    op: \"delete\",\n  });\n  unwrap(deleteResult, \"delete\");\n  return { from, storage_key: to, to };\n}\n\nexport async function overlayRenameFile(\n  runtime: StorageRuntime,\n  input: unknown\n) {\n  const record = asRecord(input);\n  const key = readString(record, \"key\", \"from\", \"storage_key\") ?? \"\";\n  const name = readString(record, \"name\", \"to\", \"newName\") ?? \"\";\n  if (!(key && name)) {\n    throw new Error(\"storage.file.rename requires key and name\");\n  }\n  return overlayMoveFile(runtime, {\n    from: key,\n    to: renameObjectKey(key, name, false),\n  });\n}\n\nexport async function overlayCreateFolder(\n  runtime: StorageRuntime,\n  input: unknown\n) {\n  const record = asRecord(input);\n  const name = readString(record, \"name\");\n  const parent =\n    (typeof record.prefixPath === \"string\" ? record.prefixPath : undefined) ||\n    readString(record, \"prefix\") ||\n    \"\";\n  const prefix = name\n    ? normalizeObjectPrefix(joinObjectKey(parent, validateFolderSegment(name)))\n    : normalizeObjectPrefix(readString(record, \"prefix\", \"key\", \"path\") ?? \"\");\n  if (!prefix) {\n    throw new Error(\"storage.folder.create requires a folder name or prefix\");\n  }\n  await putBytes(runtime, { key: prefix, source: new Uint8Array() });\n  return { created: true, prefix };\n}\n\nexport async function overlayDeleteFolder(\n  runtime: StorageRuntime,\n  input: unknown\n) {\n  const record = asRecord(input);\n  const prefix = normalizeObjectPrefix(\n    readString(record, \"prefix\", \"key\", \"from_prefix\") ?? \"\"\n  );\n  if (!prefix) {\n    throw new Error(\"storage.folder.delete requires prefix\");\n  }\n  const keys = await listAllKeys(runtime, prefix);\n  for (const key of keys) {\n    const result = await runOverlay(runtime, {\n      key,\n      op: \"delete\",\n    });\n    unwrap(result, \"delete\");\n  }\n  return { deleted: true, prefix };\n}\n\nexport async function overlayMoveFolder(\n  runtime: StorageRuntime,\n  input: unknown\n) {\n  const record = asRecord(input);\n  const from = normalizeObjectPrefix(\n    readString(record, \"from\", \"from_prefix\", \"prefix\") ?? \"\"\n  );\n  const to = normalizeObjectPrefix(\n    readString(record, \"to\", \"to_prefix\", \"destination\") ?? \"\"\n  );\n  if (!(from && to)) {\n    throw new Error(\"storage.folder.move requires from and to prefixes\");\n  }\n  if (isFolderPrefixInside(from, to)) {\n    throw new Error(\"Cannot move a folder into itself\");\n  }\n  const keys = await listAllKeys(runtime, from);\n  for (const key of keys) {\n    const next = `${to}${key.slice(from.length)}`;\n    const getResult = await runOverlay(runtime, {\n      key,\n      op: \"get\",\n    });\n    const body = unwrap(getResult, \"get\");\n    await putBytes(runtime, { key: next, source: body });\n    const deleteResult = await runOverlay(runtime, {\n      key,\n      op: \"delete\",\n    });\n    unwrap(deleteResult, \"delete\");\n  }\n  if (keys.length === 0) {\n    await putBytes(runtime, { key: to, source: new Uint8Array() });\n  }\n  return { from, prefix: to, to };\n}\n\nexport async function overlayRenameFolder(\n  runtime: StorageRuntime,\n  input: unknown\n) {\n  const record = asRecord(input);\n  const from = normalizeObjectPrefix(\n    readString(record, \"from\", \"from_prefix\", \"prefix\", \"key\") ?? \"\"\n  );\n  const name = readString(record, \"name\");\n  const explicitTo = readString(record, \"to_prefix\", \"to\");\n  const to = explicitTo\n    ? normalizeObjectPrefix(explicitTo)\n    : renameObjectKey(from, validateFolderSegment(name ?? \"\"), true);\n  return overlayMoveFolder(runtime, { from, to });\n}\n","import { parseAthenaRightKey } from \"../../rights/key.ts\";\nimport type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport {\n  AthenaStorageAuthorizationError,\n  AthenaStorageError,\n  isAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nimport {\n  coerceStorageBytes,\n  isHighLevelFileUpload,\n  overlayCreateFolder,\n  overlayDeleteFolder,\n  overlayMoveFile,\n  overlayMoveFolder,\n  overlayRenameFile,\n  overlayRenameFolder,\n  overlayUploadFiles,\n} from \"./object-ops.ts\";\nimport type {\n  StorageObjectOp,\n  StorageObjectResult,\n  StorageRuntime,\n} from \"./types.ts\";\n\nexport interface StorageOverlayInput {\n  contentType?: string;\n  cursor?: string;\n  key?: string;\n  limit?: number;\n  metadata?: Record<string, string>;\n  op: StorageObjectOp;\n  prefix?: string;\n  source?: Uint8Array | string;\n}\n\n/** Process-owned local ObjectStore caller — not an HTTP identity. */\nconst OVERLAY_PRINCIPAL: AthenaPrincipal = {\n  authenticated: true,\n  grants: [],\n  rights: Object.freeze([parseAthenaRightKey(\"storage.*\")]),\n  userId: \"storage-overlay\",\n};\n\nexport async function executeStorageOverlay(\n  runtime: StorageRuntime,\n  input: StorageOverlayInput\n) {\n  return runtime.execute(\n    {\n      body: input.source,\n      contentType: input.contentType,\n      cursor: input.cursor,\n      key: input.key,\n      limit: input.limit,\n      metadata: input.metadata,\n      op: input.op,\n      prefix: input.prefix,\n    },\n    OVERLAY_PRINCIPAL\n  );\n}\n\nexport function wrapStorageModuleWithRuntime<T extends object>(\n  module: T,\n  runtime: StorageRuntime\n): T {\n  const storage = module as T & {\n    file?: {\n      delete?: (input: unknown) => Promise<unknown>;\n      get?: (input: unknown) => Promise<unknown>;\n      list?: (input?: unknown) => Promise<unknown>;\n      move?: (input: unknown) => Promise<unknown>;\n      rename?: (input: unknown) => Promise<unknown>;\n      upload?: (\n        input: unknown,\n        options?: { signal?: AbortSignal }\n      ) => Promise<unknown>;\n    };\n    folder?: {\n      create?: (input: unknown) => Promise<unknown>;\n      delete?: (input: unknown) => Promise<unknown>;\n      move?: (input: unknown) => Promise<unknown>;\n      rename?: (input: unknown) => Promise<unknown>;\n    };\n  };\n  if (!storage.file) {\n    return module;\n  }\n  const file = storage.file;\n  const folder = storage.folder ?? {};\n  return {\n    ...storage,\n    file: {\n      ...file,\n      async delete(input: unknown) {\n        const result = await executeStorageOverlay(runtime, {\n          key: readKey(input),\n          op: \"delete\",\n        });\n        return unwrapStorageRuntimeResult(result, \"delete\");\n      },\n      async get(input: unknown) {\n        const result = await executeStorageOverlay(runtime, {\n          key: readKey(input),\n          op: \"get\",\n        });\n        return unwrapStorageRuntimeResult(result, \"get\");\n      },\n      async head(input: unknown) {\n        const result = await executeStorageOverlay(runtime, {\n          key: readKey(input),\n          op: \"head\",\n        });\n        return unwrapStorageRuntimeResult(result, \"head\");\n      },\n      async list(input?: unknown) {\n        const result = await executeStorageOverlay(runtime, {\n          cursor: readCursor(input),\n          limit: readLimit(input),\n          op: \"list\",\n          prefix: readPrefix(input),\n        });\n        return unwrapStorageRuntimeResult(result, \"list\");\n      },\n      async move(input: unknown) {\n        return overlayMoveFile(runtime, input);\n      },\n      async rename(input: unknown) {\n        return overlayRenameFile(runtime, input);\n      },\n      async upload(input: unknown, options?: { signal?: AbortSignal }) {\n        if (isHighLevelFileUpload(input)) {\n          return overlayUploadFiles(runtime, input, options);\n        }\n        const source = await coerceStorageBytes(\n          readSource(input) ?? readLooseSource(input)\n        );\n        const result = await executeStorageOverlay(runtime, {\n          contentType: readContentType(input),\n          key: readKey(input),\n          metadata: readMetadata(input),\n          op: \"put\",\n          source,\n        });\n        return unwrapStorageRuntimeResult(result, \"put\");\n      },\n    },\n    folder: {\n      ...folder,\n      create: folder.create ?? ((input) => overlayCreateFolder(runtime, input)),\n      delete: folder.delete ?? ((input) => overlayDeleteFolder(runtime, input)),\n      move: folder.move ?? ((input) => overlayMoveFolder(runtime, input)),\n      rename: folder.rename ?? ((input) => overlayRenameFolder(runtime, input)),\n    },\n  };\n}\n\nexport function unwrapStorageRuntimeResult(\n  result: StorageObjectResult,\n  operation: StorageObjectOp\n): unknown {\n  if (result.ok) {\n    return result.data;\n  }\n  throw projectStorageRuntimeError(result, operation);\n}\n\nexport function projectStorageRuntimeError(\n  result: StorageObjectResult,\n  operation: StorageObjectOp\n): AthenaStorageError {\n  if (result.error && isAthenaStorageAuthorizationError(result.error)) {\n    return new AthenaStorageAuthorizationError({\n      missing: result.error.missing,\n      operation: result.error.operation,\n    });\n  }\n  return new AthenaStorageError({\n    code: result.error?.code ?? \"storage_internal\",\n    errorNumber: result.error?.errorNumber ?? 3010,\n    message: result.error?.message ?? `storage ${operation} denied`,\n    status: result.status,\n  });\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  return value && typeof value === \"object\"\n    ? (value as Record<string, unknown>)\n    : {};\n}\n\nfunction readKey(input: unknown): string | undefined {\n  if (typeof input === \"string\" && input.trim()) {\n    return input;\n  }\n  const record = asRecord(input);\n  const key =\n    record.storage_key ?? record.storageKey ?? record.key ?? record.name;\n  return typeof key === \"string\" && key.trim() ? key : undefined;\n}\n\nfunction readPrefix(input: unknown): string | undefined {\n  const record = asRecord(input);\n  return typeof record.prefix === \"string\" ? record.prefix : undefined;\n}\n\nfunction readSource(input: unknown): Uint8Array | string | undefined {\n  if (input instanceof Uint8Array || typeof input === \"string\") {\n    return input;\n  }\n  const record = asRecord(input);\n  const source = record.source ?? record.body ?? record.files ?? record.bytes;\n  if (source instanceof Uint8Array || typeof source === \"string\") {\n    return source;\n  }\n}\n\nfunction readContentType(input: unknown): string | undefined {\n  const record = asRecord(input);\n  return typeof record.contentType === \"string\"\n    ? record.contentType\n    : undefined;\n}\n\nfunction readMetadata(input: unknown): Record<string, string> | undefined {\n  const record = asRecord(input);\n  const metadata = record.metadata;\n  if (!metadata || typeof metadata !== \"object\") {\n    return;\n  }\n  const out: Record<string, string> = {};\n  for (const [key, value] of Object.entries(\n    metadata as Record<string, unknown>\n  )) {\n    if (typeof value === \"string\") {\n      out[key] = value;\n    }\n  }\n  return out;\n}\n\nfunction readCursor(input: unknown): string | undefined {\n  const record = asRecord(input);\n  return typeof record.cursor === \"string\" ? record.cursor : undefined;\n}\n\nfunction readLimit(input: unknown): number | undefined {\n  const record = asRecord(input);\n  return typeof record.limit === \"number\" ? record.limit : undefined;\n}\n\nfunction readLooseSource(input: unknown): unknown {\n  if (\n    input instanceof Uint8Array ||\n    input instanceof ArrayBuffer ||\n    (typeof Blob !== \"undefined\" && input instanceof Blob)\n  ) {\n    return input;\n  }\n  const record = asRecord(input);\n  return 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  storage: object,\n  input?: {\n    bucket?: string | null;\n    provider?: string | null;\n    r2?: unknown;\n  }\n): void {\n  const bucket = input?.bucket?.trim() ?? \"\";\n  let provider: string | undefined;\n  if (typeof input?.provider === \"string\" && input.provider.trim()) {\n    provider = input.provider.trim();\n  } else if (input?.r2) {\n    provider = \"r2\";\n  }\n  const target = storage as { capabilities?: Record<string, unknown> };\n  target.capabilities = {\n    ...(target.capabilities && typeof target.capabilities === \"object\"\n      ? target.capabilities\n      : {}),\n    objects: true,\n    ...(provider ? { provider } : {}),\n    ...(bucket ? { bucket } : {}),\n  };\n}\n","export { DEFAULT_ATHENA_NEXT_STORAGE_ENDPOINT } from \"../../runtime/data/discovery-document.ts\";\nexport {\n  bindStorageProvider,\n  bindStorageRuntime,\n  getStorageProvider,\n  getStorageRuntime,\n} from \"./bind.ts\";\nexport {\n  createBrowserStorageTransport,\n  createEmbeddedStorageFacade,\n  resolveBrowserStorageEndpoint,\n} from \"./browser-transport.ts\";\nexport type { AthenaStorageBytesEnvelope } from \"./bytes-envelope.ts\";\nexport {\n  ATHENA_STORAGE_BYTES_KIND,\n  decodeAthenaStorageBytes,\n  decodeAthenaStorageRequestBody,\n  encodeAthenaStorageBytes,\n  isAthenaStorageBytesEnvelope,\n  reviveAthenaStorageData,\n  serializeAthenaStorageData,\n} from \"./bytes-envelope.ts\";\nexport {\n  AthenaStorageAuthorizationError,\n  AthenaStorageError,\n  isAthenaStorageAuthorizationError,\n} from \"./errors.ts\";\nexport { createStorageRuntime } from \"./nucleus.ts\";\nexport {\n  advertiseSafeStorageCapabilities,\n  executeStorageOverlay,\n  wrapStorageModuleWithRuntime,\n} from \"./overlays.ts\";\nexport {\n  authorizeStorageOperation,\n  requiredStorageRight,\n} from \"./rights.ts\";\nexport type {\n  AthenaStorageLifecycleHooks,\n  AuthorizedStorageOperation,\n  CreateStorageRuntimeOptions,\n  StorageObjectOp,\n  StorageObjectProvider,\n  StorageObjectRequest,\n  StorageObjectResult,\n  StorageRuntime,\n} from \"./types.ts\";\nexport {\n  ATHENA_STORAGE_PROVIDER,\n  ATHENA_STORAGE_RUNTIME,\n  isStorageObjectOp,\n} from \"./types.ts\";\n","/**\n * Browser-safe Athena client assembly.\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  athenaAuthConfig,\n  isDisabledAthenaAuthConfig,\n  isLocalAthenaAuthConfig,\n} from \"./auth/config.ts\";\nimport { assertLocalAuthHooks } from \"./auth/hooks/assert-local.ts\";\nimport { assertLocalAuthObservability } from \"./auth/observability/config.ts\";\nimport {\n  type AthenaAuthDiagnostics,\n  attachAthenaAuthRouting,\n  getAttachedAthenaAuthRouting,\n  type ResolvedAthenaAuthRouting,\n  resolveAthenaAuthRouting,\n  toAthenaAuthDiagnostics,\n} from \"./auth/resolve-routing.ts\";\nimport {\n  normalizeUniversalCreateClientConfig as normalizeUniversalCreateClientConfigImpl,\n} from \"./client/config/normalize.ts\";\nimport {\n  athenaChatConfig,\n  hasExplicitRemoteHttpApiKeyNeed,\n  isEdgeLocalSentinelUrl,\n  normalizeOptional,\n  isR2Binding,\n} from \"./client/config/predicates.ts\";\nimport type {\n  AthenaAuthBindings,\n} from \"./auth/types.ts\";\nimport type { AthenaBillingConfig } from \"./billing/create-client-config.ts\";\nimport {\n  type AthenaBillingModule,\n  createBillingModule,\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  AthenaChatModule,\n} from \"./chat/types.ts\";\nimport {\n  createInternalClientCore,\n  createInternalClientView,\n  type AthenaClientRuntimeBindings,\n  type InternalAthenaClient,\n  type InternalAthenaClientCore,\n} from \"./client/context.ts\";\nimport type { AthenaRequestClient } from \"./client-brands.ts\";\nimport type {\n  AthenaChatConfig as ClientAthenaChatConfig,\n  AthenaClient as ClientAthenaClient,\n  AthenaClientConfig as ClientAthenaClientConfig,\n  AthenaClientConfigWithR2 as ClientAthenaClientConfigWithR2,\n  AthenaClientWithR2Storage as ClientAthenaClientWithR2Storage,\n  AthenaRequestContext as ClientAthenaRequestContext,\n} from \"./client/contracts.ts\";\nexport type {\n  AthenaAuthConfig,\n  AthenaChatConfig,\n  AthenaChatMode,\n  AthenaClient,\n  AthenaClientConfig,\n  AthenaClientConfigWithR2,\n  AthenaClientRuntimeConfig,\n  AthenaClientServicesConfig,\n  AthenaClientWithR2Storage,\n  AthenaDbConfig,\n  AthenaRequestContext,\n  AthenaRequestContextProvider,\n  AthenaStorageConfig,\n} from \"./client/contracts.ts\";\nimport type {\n  AthenaRequestOptions,\n} from \"./client-request.ts\";\nimport {\n  normalizeAthenaAuthorizationConfig,\n} from \"./runtime/authorization/normalize-config.ts\";\nimport {\n  createGatewayCapabilities,\n} from \"./cloudflare/capabilities.ts\";\nimport { resolveAthenaClientCapabilitiesIr } from \"./capabilities/assembly.ts\";\nimport { projectAthenaClientCapabilities } from \"./capabilities/client-projection.ts\";\nimport {\n  D1_QUERY_CAPABILITIES,\n  GATEWAY_QUERY_CAPABILITIES,\n  POSTGRES_QUERY_CAPABILITIES,\n  SQLITE_LOCAL_QUERY_CAPABILITIES,\n} from \"./query/engine/capabilities.ts\";\nimport {\n  type CloudflareR2StorageModule,\n  composeHttpAndR2Storage,\n  createCloudflareR2StorageModule,\n} from \"./cloudflare/r2/storage.ts\";\nimport type {\n  R2BucketLike,\n} from \"./cloudflare/types.ts\";\nimport {\n  AthenaConfigurationError,\n  type AthenaService,\n} from \"./config/errors.ts\";\nimport { mergeAthenaRequestContexts } from \"./context/merge.ts\";\nimport { registerTransactionCacheObserver } from \"./db/transaction/cache.ts\";\nimport { createEmailModule } from \"./email/module.ts\";\nimport {\n  type AthenaDiagnosticsMode,\n  resolveAthenaClientDiagnostics,\n} from \"./diagnostics.ts\";\nimport {\n  ATHENA_ENV_API_KEY_KEYS,\n  ATHENA_ENV_CLIENT_KEYS,\n  ATHENA_ENV_DB_URL_KEYS,\n  ATHENA_ENV_URL_KEYS,\n} from \"./env/index.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n} from \"./gateway/types.ts\";\nimport { createNotificationsEmbeddedHttpRequest } from \"./notifications/http-adapter.ts\";\nimport {\n  createNotificationsModule,\n  unwrapNotificationsGatewayResult,\n} from \"./notifications/module.ts\";\nimport { explainAthenaQuery } from \"./query/explain.ts\";\nimport {\n  type AthenaQueryClient,\n  createAthenaQueryClient,\n} from \"./react/query-client.ts\";\nimport {\n  attachAthenaClientInternals,\n  attachRequestAuthLifecycleGuards,\n  createViewClientInternals,\n  getAthenaClientInternals,\n  isAthenaRequestRuntime,\n  throwAthenaRuntimeOwnershipInvalid,\n} from \"./runtime/client-internals.ts\";\nimport { assertDataLifecycleConfig } from \"./runtime/data/lifecycle/assert.ts\";\nimport {\n  detectAthenaRuntimeEnvironment,\n  resolveAthenaRuntime,\n  toAthenaRuntimeDiagnostics,\n} from \"./runtime/resolve.ts\";\nimport type { AthenaRuntimeTopologyIR } from \"./runtime/transport/topology.ts\";\nimport type {\n  AthenaClientModelsInput,\n} from \"./schema/types.ts\";\nimport type { AthenaStorageModule } from \"./storage/module.ts\";\nimport {\n  getOrCreateNotificationStores,\n  linkNotificationStores,\n} from \"./client/compose/notifications.ts\";\nimport {\n  advertiseSafeStorageCapabilities,\n  createBrowserStorageTransport,\n  createEmbeddedStorageFacade,\n  createStorageRuntime,\n  getStorageProvider,\n  getStorageRuntime,\n  wrapStorageModuleWithRuntime,\n} from \"./storage/runtime/index.ts\";\nimport {\n  getLocalObjectStore,\n  isLocalStorageConfig,\n  isS3StorageConfig,\n} from \"./storage/runtime.ts\";\n\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput\n  ? TModels\n  : never;\n\n/** Service-specific URL keys (not shared gateway root/db/key/client SSOT). */\nconst ENV_AUTH_URL_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\nconst ENV_CHAT_URL_KEYS = [\n  \"ATHENA_CHAT_URL\",\n  \"NEXT_PUBLIC_ATHENA_CHAT_URL\",\n] as const;\nconst ENV_CHAT_WS_URL_KEYS = [\n  \"ATHENA_CHAT_WS_URL\",\n  \"NEXT_PUBLIC_ATHENA_CHAT_WS_URL\",\n] as const;\nconst ENV_STORAGE_URL_KEYS = [\n  \"ATHENA_STORAGE_URL\",\n  \"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n] as const;\nconst MISSING_DB_SENTINEL = \"https://athena.invalid/db\";\n\nexport {\n  AthenaConfigurationError,\n  type AthenaConfigurationErrorCode,\n  type AthenaService,\n} from \"./config/errors.ts\";\nexport {\n  athenaChatConfig,\n  hasRemoteAuthService,\n  hasRemoteDbGatewayUrl,\n  hasRemoteHttpServices,\n  hasRemoteHttpStorage,\n  isD1Binding,\n  isEdgeLocalSentinelUrl,\n  resolveUnifiedRemoteRoot,\n} from \"./client/config/predicates.ts\";\n\ntype AthenaRequestContext = ClientAthenaRequestContext;\ntype AthenaChatConfig = ClientAthenaChatConfig;\ntype AthenaClientConfig<TModels extends AthenaClientModelsInput | undefined = undefined> =\n  ClientAthenaClientConfig<TModels>;\nexport type { AthenaBillingConfig, AthenaDiagnosticsMode };\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  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n  localDatabase?: boolean;\n  ownedResourceClose?: () => Promise<void>;\n  resolveRuntimeTopology?: () => Promise<AthenaRuntimeTopologyIR>;\n};\n\nfunction hasDiscoveredRuntimeTopology(config: unknown): boolean {\n  return (\n    typeof config === \"object\" &&\n    config != null &&\n    typeof (config as { resolveRuntimeTopology?: unknown })\n      .resolveRuntimeTopology === \"function\"\n  );\n}\n\ntype AthenaClientConfigWithR2<TModels extends AthenaClientModelsInput | undefined = undefined> =\n  ClientAthenaClientConfigWithR2<TModels>;\ntype AthenaClientWithR2Storage<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = ClientAthenaClientWithR2Storage<TModels>;\n\ntype AthenaClient<\n  TModels extends AthenaClientModelsInput | undefined =\n    | AthenaClientModelsInput\n    | undefined,\n> = ClientAthenaClient<TModels>;\n\ninterface ResolvedServiceUrls {\n  auth?: string;\n  billing?: string;\n  chat?: string;\n  chatWs?: string;\n  db?: string;\n  storage?: string;\n}\n\ninterface AthenaClientCoreBase<\n  TModels extends AthenaClientModelsInput | undefined,\n> {\n  readonly authRouting?: ResolvedAthenaAuthRouting;\n  readonly client?: string;\n  readonly config: AthenaInternalClientConfig<TModels>;\n  readonly authorizationConfig: ReturnType<\n    typeof normalizeAthenaAuthorizationConfig\n  >;\n  readonly key: string;\n  readonly runtimeBindings?: AthenaClientRuntimeBindings;\n  readonly urls: ResolvedServiceUrls;\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n  extends AthenaClientCoreBase<TModels> {\n  readonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>;\n}\n\nfunction readFirstEnv(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[]\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim();\n    if (value) {\n      return value;\n    }\n  }\n}\n\n/**\n * First env value that looks like an absolute http(s) URL.\n * Skips unexpanded placeholders (e.g. `${ATHENA_URL}`) and other non-URLs so\n * ambient shell pollution cannot crash createClient during service resolution.\n */\nfunction readFirstEnvHttpUrl(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[]\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim();\n    if (value && isAbsoluteHttpUrl(value)) {\n      return value;\n    }\n  }\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return url.protocol === \"http:\" || url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction toWebSocketUrl(baseUrl: string): string | undefined {\n  if (!isAbsoluteHttpUrl(baseUrl)) {\n    return;\n  }\n  const url = new URL(baseUrl);\n  url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n  url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/wss/gateway`;\n  url.search = \"\";\n  url.hash = \"\";\n  return url.toString();\n}\n\nfunction isRemoteAuthOnlyClient<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const authObject = athenaAuthConfig(config.auth);\n  if (\n    isDisabledAthenaAuthConfig(config.auth) ||\n    isLocalAthenaAuthConfig(config.auth) ||\n    !normalizeOptional(authObject?.url)\n  ) {\n    return false;\n  }\n  if (config.gatewayTransport) {\n    return false;\n  }\n  if (\n    normalizeOptional(config.url) ||\n    normalizeOptional(config.db?.url) ||\n    normalizeOptional(config.db?.pgUri) ||\n    normalizeOptional(config.databaseUrl)\n  ) {\n    return false;\n  }\n  if (\n    normalizeOptional(config.storage?.url) ||\n    (isLocalStorageConfig(config.storage) &&\n      Boolean(\n        getLocalObjectStore(config.storage) ||\n          normalizeOptional(config.storage.root)\n      ))\n  ) {\n    return false;\n  }\n  if (normalizeOptional(athenaChatConfig(config.chat)?.url)) {\n    return false;\n  }\n  if (normalizeOptional(config.billing?.url)) {\n    return false;\n  }\n  if (\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_URL_KEYS) ||\n    readFirstEnvHttpUrl(config.env, ATHENA_ENV_DB_URL_KEYS) ||\n    readFirstEnvHttpUrl(config.env, ENV_STORAGE_URL_KEYS) ||\n    readFirstEnvHttpUrl(config.env, ENV_CHAT_URL_KEYS)\n  ) {\n    return false;\n  }\n  return true;\n}\n\nfunction hasChatSessionCredentials(chat?: boolean | AthenaChatConfig): boolean {\n  const options = athenaChatConfig(chat);\n  return Boolean(\n    normalizeOptional(options?.bearerToken) ??\n      normalizeOptional(options?.cookie) ??\n      normalizeOptional(options?.sessionToken)\n  );\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>,\n  runtimeBindings?: AthenaClientRuntimeBindings\n): AthenaClientCore<TModels> {\n  const ownedResourceClose = (\n    config as AthenaInternalClientConfig<TModels>\n  ).ownedResourceClose;\n  const resolvedRuntimeBindings = ownedResourceClose\n    ? { ...runtimeBindings, ownedResourceClose }\n    : runtimeBindings;\n  const env = config.env;\n  const explicitRoot = normalizeOptional(config.url);\n  const envRoot = readFirstEnvHttpUrl(env, ATHENA_ENV_URL_KEYS);\n  const root =\n    explicitRoot && isAbsoluteHttpUrl(explicitRoot)\n      ? explicitRoot\n      : explicitRoot\n        ? undefined\n        : envRoot;\n  const explicitRootWinsOverEnvServices = Boolean(\n    root && explicitRoot && isAbsoluteHttpUrl(explicitRoot)\n  );\n  const resolveService = (\n    explicit: string | null | undefined,\n    envKeys: readonly string[],\n    path: string\n  ): string | undefined =>\n    normalizeOptional(explicit) ??\n    (explicitRootWinsOverEnvServices && root\n      ? appendPath(root, path)\n      : undefined) ??\n    readFirstEnvHttpUrl(env, envKeys) ??\n    (root ? appendPath(root, path) : undefined);\n\n  const dbUrl = resolveService(config.db?.url, ATHENA_ENV_DB_URL_KEYS, \"db\");\n  const authObject = athenaAuthConfig(config.auth);\n  const authDisabled = isDisabledAthenaAuthConfig(config.auth);\n\n  // Auth routing policy (SSOT). Legacy configs (no routing) keep historical\n  // resolveService outcomes; same-origin enables relative `/api/auth`.\n  // `auth: false` skips env/root Auth URL inference so DB-only clients stay DB-only.\n  const authRouting = authDisabled\n    ? undefined\n    : resolveAthenaAuthRouting({\n        credentials: authObject?.credentials,\n        emitWarnings: true,\n        env,\n        execution: isLocalAthenaAuthConfig(config.auth) ? \"local\" : \"remote\",\n        explicitRootWinsOverEnvServices,\n        rootUrl: root,\n        routing: authObject?.routing,\n        upstreamUrl: authObject?.upstreamUrl,\n        url: authObject?.url,\n      });\n\n  const authUrl = authDisabled\n    ? undefined\n    : authRouting?.mode === \"legacy\"\n      ? authRouting.browserRequestBaseUrl ||\n        resolveService(authObject?.url, ENV_AUTH_URL_KEYS, \"auth\")\n      : authRouting?.browserRequestBaseUrl || undefined;\n\n  const urls: ResolvedServiceUrls = {\n    auth: authUrl || undefined,\n    // Billing lives on the main Athena HTTP surface.\n    billing: hasDiscoveredRuntimeTopology(config)\n      ? normalizeOptional(config.billing?.url)\n      : (normalizeOptional(config.billing?.url) ?? dbUrl ?? root ?? undefined),\n    chat:\n      config.chat === true || athenaChatConfig(config.chat)?.mode === \"local\"\n        ? undefined\n        : resolveService(\n            athenaChatConfig(config.chat)?.url,\n            ENV_CHAT_URL_KEYS,\n            \"chat\"\n          ),\n    chatWs:\n      normalizeOptional(athenaChatConfig(config.chat)?.wsUrl) ??\n      (explicitRootWinsOverEnvServices && root\n        ? toWebSocketUrl(root)\n        : undefined) ??\n      readFirstEnvHttpUrl(env, ENV_CHAT_WS_URL_KEYS) ??\n      (root ? toWebSocketUrl(root) : undefined),\n    db: dbUrl,\n    storage: hasDiscoveredRuntimeTopology(config)\n      ? normalizeOptional(config.storage?.url)\n      : resolveService(\n          config.storage?.url,\n          ENV_STORAGE_URL_KEYS,\n          \"storage\"\n        ),\n  };\n\n  const localStorageConfigured =\n    isLocalStorageConfig(config.storage) &&\n    Boolean(\n      getLocalObjectStore(config.storage) ||\n        normalizeOptional(config.storage.root)\n    );\n  const s3StorageConfigured = isS3StorageConfig(config.storage);\n  const runtimeEnv = detectAthenaRuntimeEnvironment();\n  const browserEmbeddedStorage =\n    (runtimeEnv === \"browser\" || runtimeEnv === \"react-native\") &&\n    !localStorageConfigured &&\n    !s3StorageConfigured &&\n    !isR2Binding(config.storage?.r2 ?? config.r2) &&\n    !normalizeOptional(config.storage?.url) &&\n    !readFirstEnvHttpUrl(env, ENV_STORAGE_URL_KEYS);\n\n  if (\n    !(\n      urls.db ||\n      urls.auth ||\n      urls.chat ||\n      urls.storage ||\n      urls.billing ||\n      config.gatewayTransport ||\n      Boolean(config.db?.sqlite?.executor) ||\n      config.chatRuntime ||\n      localStorageConfigured ||\n      s3StorageConfigured ||\n      browserEmbeddedStorage\n    )\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      \"Athena requires a unified URL or at least one configured service URL.\",\n      \"db\"\n    );\n  }\n\n  const key =\n    normalizeOptional(config.key) ?? readFirstEnv(env, ATHENA_ENV_API_KEY_KEYS);\n  if (\n    !(\n      key ||\n      hasChatSessionCredentials(config.chat) ||\n      config.gatewayTransport ||\n      localStorageConfigured ||\n      s3StorageConfigured ||\n      isRemoteAuthOnlyClient(config)\n    )\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_API_KEY_REQUIRED\",\n      \"Athena API key is required unless chat session credentials are configured.\"\n    );\n  }\n  if (\n    !(key || hasChatSessionCredentials(config.chat)) &&\n    hasExplicitRemoteHttpApiKeyNeed(config) &&\n    !isRemoteAuthOnlyClient(config)\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_API_KEY_REQUIRED\",\n      \"Athena API key is required unless chat session credentials are configured.\"\n    );\n  }\n\n  // Default credentials for same-origin when not explicitly set on auth options.\n  const authWithCredentials =\n    authObject &&\n    authObject.credentials === undefined &&\n    authRouting?.credentials\n      ? { ...authObject, credentials: authRouting.credentials }\n      : config.auth;\n\n  const resolvedConfig: AthenaInternalClientConfig<TModels> =\n    authWithCredentials ? { ...config, auth: authWithCredentials } : config;\n\n  const base: AthenaClientCoreBase<TModels> = {\n    authRouting:\n      authRouting &&\n      (authRouting.browserRequestBaseUrl || authRouting.mode !== \"legacy\")\n        ? authRouting\n        : undefined,\n    client:\n      normalizeOptional(config.client) ??\n      readFirstEnv(env, ATHENA_ENV_CLIENT_KEYS),\n    config: resolvedConfig,\n    authorizationConfig: normalizeAthenaAuthorizationConfig(resolvedConfig),\n    key: key ?? \"\",\n    ...(resolvedRuntimeBindings\n      ? { runtimeBindings: resolvedRuntimeBindings }\n      : {}),\n    urls,\n  };\n  return {\n    ...base,\n    internalCore: createInternalClientCore(\n      createInternalConfig(base),\n      resolvedRuntimeBindings\n    ),\n  };\n}\n\nasync function resolveConfiguredContext<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  core: AthenaClientCore<TModels>,\n  viewContext: AthenaRequestContext | undefined\n): Promise<AthenaRequestContext | undefined> {\n  const configured = core.config.context;\n  const base =\n    typeof configured === \"function\" ? await configured() : configured;\n  return mergeAthenaRequestContexts(base, viewContext);\n}\n\nfunction createInternalConfig<\n  TModels extends AthenaClientModelsInput | undefined,\n>(core: AthenaClientCoreBase<TModels>) {\n  const { config, urls } = core;\n  const {\n    url: _authUrl,\n    routing: _authRouting,\n    upstreamUrl: _authUpstreamUrl,\n    ...authOptions\n  } = athenaAuthConfig(config.auth) ?? {};\n  const {\n    url: _storageUrl,\n    directUpload,\n    r2: _r2,\n    prefix: _r2Prefix,\n    ...storageOptions\n  } = config.storage ?? {};\n  void _authUrl;\n  void _authRouting;\n  void _authUpstreamUrl;\n  void _storageUrl;\n  void _r2;\n  void _r2Prefix;\n\n  const diagnostics = resolveAthenaClientDiagnostics({\n    debugAst: config.debugAst,\n    diagnostics: config.diagnostics,\n    env: config.env,\n    findManyAst: config.findManyAst,\n    traceQueries: config.traceQueries,\n  });\n\n  return {\n    apiKey: core.key,\n    auth: authOptions,\n    authUrl: urls.auth,\n    backend:\n      typeof config.backend === \"string\"\n        ? { type: config.backend }\n        : config.backend,\n    baseUrl: urls.db ?? MISSING_DB_SENTINEL,\n    behavior: {\n      debugAst: diagnostics.debugAst,\n      canonicalQueries: config.canonicalQueries,\n      findManyAst: diagnostics.findManyAst,\n      findManyAstRelationSchema: Boolean(config.db?.pgUri),\n      rawQueryDiagnostics: diagnostics.rawQueryDiagnostics,\n      retryReads: config.retryReads,\n      traceQueries: diagnostics.traceQueries,\n    },\n    chat: athenaChatConfig(config.chat),\n    chatUrl: urls.chat,\n    chatWsUrl: urls.chatWs,\n    client: core.client,\n    env: config.env,\n    gatewayTransport: config.gatewayTransport,\n    headers: config.headers,\n    jdbcUrl: config.db?.jdbcUrl,\n    localDatabase: Boolean(config.db?.sqlite?.executor),\n    models: config.models as ResolvedModels<TModels>,\n    pgUri: config.db?.pgUri,\n    storage: {\n      ...storageOptions,\n      ...(directUpload ? { directUpload } : {}),\n    },\n    storageUrl: urls.storage,\n  };\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n  if (!urls[service]) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_SERVICE_NOT_CONFIGURED\",\n      `Athena ${service} is not configured.`,\n      service\n    );\n  }\n}\n\nfunction createUnavailableNamespace(\n  service: AthenaService,\n  urls: ResolvedServiceUrls,\n  path: readonly PropertyKey[] = []\n): unknown {\n  return new Proxy(() => undefined, {\n    apply() {\n      serviceGuard(urls, service);\n      throw new TypeError(\n        `Athena service property ${path.map(String).join(\".\")} is not callable.`\n      );\n    },\n    get(_target, property) {\n      return createUnavailableNamespace(service, urls, [...path, property]);\n    },\n  });\n}\n\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  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  return normalizeUniversalCreateClientConfigImpl(config);\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  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (\n    normalizeOptional(config.db?.pgUri) ||\n    normalizeOptional(config.databaseUrl) ||\n    normalizeOptional(config.env?.DATABASE_URL) ||\n    config.db?.pool\n  ) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_POSTGRES_DIRECT_NODE_REQUIRED\",\n      \"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      \"db\"\n    );\n  }\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  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isLocalAthenaAuthConfig(config.auth)) {\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}\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  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isLocalStorageConfig(config.storage)) {\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}\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  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  if (isS3StorageConfig(config.storage)) {\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\nexport function assertLocalChatRequiresNodeRuntime<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): void {\n  const chat = config.chat;\n  const wantsLocal =\n    chat === true ||\n    (typeof chat === \"object\" && chat !== null && chat.mode === \"local\");\n  if (wantsLocal || config.chatRuntime) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_CHAT_LOCAL_NODE_REQUIRED\",\n      'Local Chat requires a Node.js server runtime. Import createClient from @xylex-group/athena in a server module, or use chat.mode \"remote\".',\n      \"chat\"\n    );\n  }\n}\n\nconst clientQueryCaches = new WeakMap<object, AthenaQueryClient>();\n\nfunction authSessionRecord(client: { auth?: unknown }): {\n  session?: { id?: unknown; token?: unknown; userId?: unknown };\n  user?: { id?: unknown };\n} | null {\n  try {\n    const sessionApi = (\n      client.auth as { session?: { get?: () => unknown } } | undefined\n    )?.session;\n    // Root Auth UI clients have no viewContext.userId; read client.auth.session.\n    const payload = sessionApi?.get?.();\n    if (!payload || typeof payload !== \"object\") {\n      return null;\n    }\n    return payload as {\n      session?: { id?: unknown; token?: unknown; userId?: unknown };\n      user?: { id?: unknown };\n    };\n  } catch {\n    return null;\n  }\n}\n\nfunction userIdFromAuthSession(client: { auth?: unknown }): string | null {\n  const record = authSessionRecord(client);\n  if (!record) {\n    return null;\n  }\n  const userId =\n    typeof record.user?.id === \"string\" ? record.user.id.trim() : \"\";\n  if (userId) {\n    return userId;\n  }\n  const sessionUserId =\n    typeof record.session?.userId === \"string\"\n      ? record.session.userId.trim()\n      : \"\";\n  return sessionUserId || null;\n}\n\nfunction requestContextFromAuthSession(client: {\n  auth?: unknown;\n}): AthenaRequestContext | undefined {\n  const record = authSessionRecord(client);\n  if (!record) {\n    return;\n  }\n  const userId = userIdFromAuthSession(client);\n  const token =\n    typeof record.session?.token === \"string\"\n      ? record.session.token.trim()\n      : \"\";\n  const sessionId =\n    typeof record.session?.id === \"string\" ? record.session.id.trim() : \"\";\n  const sessionToken = token || sessionId;\n  if (!(userId || sessionToken)) {\n    return;\n  }\n  return {\n    sessionToken: sessionToken || undefined,\n    userId: userId || undefined,\n  };\n}\n\nfunction getOrCreateClientQueryCache(core: {\n  config: AthenaClientConfig<AthenaClientModelsInput | undefined>;\n}): AthenaQueryClient {\n  const existing = clientQueryCaches.get(core);\n  if (existing) {\n    return existing;\n  }\n  const created = createAthenaQueryClient({\n    cache: {\n      gcTime: core.config.query?.gcTime,\n      mode: core.config.query?.cache ?? \"memory\",\n      staleTime: core.config.query?.staleTime,\n    },\n  });\n  clientQueryCaches.set(core, created);\n  return created;\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext?: AthenaRequestContext\n): AthenaClient<TModels> {\n  // Bypass generic expansion during dts emit (TS2589).\n  const createView = createInternalClientView as unknown as (\n    internalCore: AthenaClientCore<TModels>[\"internalCore\"],\n    resolveContext: () => ReturnType<typeof resolveConfiguredContext<TModels>>,\n    cacheContext?: {\n      accessScope?: string;\n      organizationId?: string;\n      policyRevision?: string;\n      userId?: string;\n    }\n  ) => InternalAthenaClient<ResolvedModels<TModels>>;\n  const organizationId = viewContext?.organizationId?.trim();\n  const userId = viewContext?.userId?.trim();\n  const accessScope = viewContext?.accessScope?.trim();\n  const policyRevision = viewContext?.policyRevision?.trim();\n  const resolved = createView(\n    core.internalCore,\n    () => resolveConfiguredContext(core, viewContext),\n    organizationId || userId || accessScope || policyRevision\n      ? {\n          accessScope: accessScope || undefined,\n          organizationId: organizationId || undefined,\n          policyRevision: policyRevision || undefined,\n          userId: userId || undefined,\n        }\n      : undefined\n  );\n  const requireDb = (): void => {\n    if (core.config.localDatabase || core.config.gatewayTransport) {\n      return;\n    }\n    serviceGuard(core.urls, \"db\");\n  };\n\n  const {\n    providers: _billingProviders,\n    url: _billingUrl,\n    testMode: _billingTestMode,\n    mode: _billingMode,\n    ...billingOptions\n  } = core.config.billing ?? {};\n  void _billingProviders;\n  void _billingUrl;\n  void _billingTestMode;\n  void _billingMode;\n  const explicitBillingUrl = normalizeOptional(_billingUrl);\n  const billingRuntimeEnv = detectAthenaRuntimeEnvironment();\n  const attachEmbeddedHttpBilling =\n    (billingRuntimeEnv === \"browser\" ||\n      billingRuntimeEnv === \"react-native\" ||\n      hasDiscoveredRuntimeTopology(core.config)) &&\n    !explicitBillingUrl &&\n    core.config.billing?.mode !== \"remote\";\n  const billingModule: AthenaBillingModule | unknown =\n    core.internalCore.runtimeBindings?.billing ??\n    (attachEmbeddedHttpBilling\n    ? (createBrowserBillingTransport({\n        ...(core.config.app?.url ? { appUrl: core.config.app.url } : {}),\n        ...(core.config.billing?.endpoint\n          ? { endpoints: { billing: core.config.billing.endpoint } }\n          : {}),\n        headers: core.config.headers,\n        ...(core.config.resolveRuntimeTopology\n          ? { resolveTopology: core.config.resolveRuntimeTopology }\n          : {}),\n      }) as unknown as AthenaBillingModule)\n    : core.urls.billing\n        ? createBillingModule({\n            apiKey: core.key,\n            baseUrl: core.urls.billing,\n            client: core.client,\n            headers: {\n              ...(core.config.headers ?? {}),\n              ...(billingOptions.headers ?? {}),\n            },\n            ...billingOptions,\n          })\n        : createUnavailableNamespace(\"billing\", core.urls));\n\n  const r2 = core.config.storage?.r2;\n  const hasR2Binding = isR2Binding(r2);\n  // Edge-local sentinel URLs are not real HTTP storage ports.\n  const hasHttpStorage = Boolean(\n    core.urls.storage && !isEdgeLocalSentinelUrl(core.urls.storage)\n  );\n  const localObjectStore = getLocalObjectStore<AthenaStorageModule>(\n    core.config.storage\n  );\n  const runtimeEnv = detectAthenaRuntimeEnvironment();\n  const hasS3Storage = isS3StorageConfig(core.config.storage);\n  const attachEmbeddedHttpStorage =\n    (runtimeEnv === \"browser\" ||\n      runtimeEnv === \"react-native\" ||\n      hasDiscoveredRuntimeTopology(core.config)) &&\n    !localObjectStore &&\n    !hasR2Binding &&\n    !hasS3Storage &&\n    !normalizeOptional(core.config.storage?.url);\n\n  const baseCapabilities =\n    core.config.capabilities ??\n    createGatewayCapabilities({\n      authRemote: Boolean(core.urls.auth),\n      // Match callable surface: catalogs/backups need real remote HTTP storage.\n      storageBackups: hasHttpStorage,\n      storageCatalogs: hasHttpStorage,\n      storageLocal: Boolean(localObjectStore),\n      storageConfigured:\n        hasHttpStorage ||\n        hasR2Binding ||\n        Boolean(localObjectStore) ||\n        hasS3Storage ||\n        attachEmbeddedHttpStorage,\n    });\n\n  // Hybrid: preserve HTTP storage.* (file/catalog/multipart/backup) and attach L3a R2.\n  // R2-only: L3a helpers + clear unsupported for managed ports.\n  // Local Node ObjectStore: catalog-optional file.* (ADR 0027).\n  const storageModule:\n    | AthenaStorageModule\n    | CloudflareR2StorageModule\n    | unknown = localObjectStore\n    ? localObjectStore\n    : hasR2Binding && hasHttpStorage\n      ? composeHttpAndR2Storage(resolved.storage as AthenaStorageModule, {\n          prefix: core.config.storage?.prefix ?? undefined,\n          r2,\n        })\n      : hasR2Binding\n        ? createCloudflareR2StorageModule({\n            prefix: core.config.storage?.prefix ?? undefined,\n            r2,\n          })\n        : hasS3Storage || attachEmbeddedHttpStorage\n          ? createEmbeddedStorageFacade()\n          : core.urls.storage\n            ? resolved.storage\n            : createUnavailableNamespace(\"storage\", core.urls);\n\n  const storageProvider = getStorageProvider(core.config.storage);\n  const embeddedHttpProvider = attachEmbeddedHttpStorage\n    ? createBrowserStorageTransport({\n        ...(core.config.storage?.endpoint\n          ? { endpoints: { storage: core.config.storage.endpoint } }\n          : {}),\n        headers: core.config.headers,\n        ...(core.config.resolveRuntimeTopology\n          ? { resolveTopology: core.config.resolveRuntimeTopology }\n          : {}),\n      })\n    : undefined;\n  const storageRuntime =\n    getStorageRuntime(core.config.storage) ??\n    (storageProvider\n      ? createStorageRuntime({\n          lifecycle: core.config.lifecycle?.storage,\n          provider: storageProvider,\n        })\n      : undefined) ??\n    (embeddedHttpProvider\n      ? createStorageRuntime({\n          lifecycle: core.config.lifecycle?.storage,\n          provider: embeddedHttpProvider,\n        })\n      : undefined);\n  const boundStorage =\n    storageRuntime &&\n    (localObjectStore || attachEmbeddedHttpStorage || hasS3Storage)\n      ? wrapStorageModuleWithRuntime(storageModule as object, storageRuntime)\n      : storageModule;\n  if (storageRuntime && boundStorage && typeof boundStorage === \"object\") {\n    advertiseSafeStorageCapabilities(\n      boundStorage as object,\n      core.config.storage\n    );\n  }\n  const capabilitiesIr = resolveAthenaClientCapabilitiesIr({\n    base: baseCapabilities,\n    query:\n      baseCapabilities.db.engine === \"sqlite\"\n        ? SQLITE_LOCAL_QUERY_CAPABILITIES\n        : baseCapabilities.db.engine === \"cloudflare-d1\"\n        ? D1_QUERY_CAPABILITIES\n        : baseCapabilities.db.engine === \"postgresql\"\n          ? POSTGRES_QUERY_CAPABILITIES\n          : GATEWAY_QUERY_CAPABILITIES,\n    auth:\n      core.config.auth !== false &&\n      (Boolean(core.urls.auth) || isLocalAthenaAuthConfig(core.config.auth))\n        ? resolved.auth.capabilities.getSnapshot()\n        : undefined,\n    chat:\n      core.config.chatRuntime || core.urls.chat\n        ? resolved.chat.capabilities\n        : undefined,\n    storage: {\n      backups: baseCapabilities.storage.backups,\n      catalogs: baseCapabilities.storage.catalogs,\n      objects:\n        Boolean(storageRuntime) || baseCapabilities.storage.objects,\n      source: core.config.storage?.provider ?? \"runtime\",\n    },\n    billingProvider: core.config.billing?.providers\n      ? Object.keys(core.config.billing.providers)[0] ?? \"configured\"\n      : undefined,\n  });\n  const capabilities = projectAthenaClientCapabilities(\n    capabilitiesIr,\n    baseCapabilities\n  );\n\n  const useRemoteNotifications =\n    !(\n      isLocalAthenaAuthConfig(core.config.auth) ||\n      core.config.db?.pgUri ||\n      core.config.gatewayTransport\n    ) && Boolean(core.urls.db || core.urls.auth);\n  const notificationsRuntimeEnv = detectAthenaRuntimeEnvironment();\n  const attachEmbeddedHttpNotifications =\n    notificationsRuntimeEnv === \"browser\" ||\n    notificationsRuntimeEnv === \"react-native\";\n  const notificationStores = getOrCreateNotificationStores(core);\n\n  const queryCache = getOrCreateClientQueryCache(core);\n  registerTransactionCacheObserver(core.internalCore.gatewayTransport, {\n    reconcileCommitted(operations, results) {\n      for (const [index, operation] of operations.entries()) {\n        const result = results[index];\n        if (!result || result.error) {\n          continue;\n        }\n        queryCache.reconcileExecutable(operation.descriptor, result);\n      }\n    },\n  });\n\n  const client: AthenaClient<TModels> = {\n    admin: {\n      query: ((...args: unknown[]) => {\n        requireDb();\n        return Reflect.apply(resolved.admin.query, resolved.admin, args);\n      }) as AthenaClient<TModels>[\"admin\"][\"query\"],\n    },\n    auth: (core.urls.auth\n      ? resolved.auth\n      : createUnavailableNamespace(\"auth\", core.urls)) as AthenaAuthBindings,\n    billing: billingModule as AthenaBillingModule,\n    cache: queryCache,\n    capabilities,\n    chat: (core.config.chatRuntime\n      ? core.config.chatRuntime\n      : core.urls.chat\n        ? resolved.chat\n        : createUnavailableNamespace(\"chat\", core.urls)) as AthenaChatModule,\n    async close() {\n      const internals = getAthenaClientInternals(client);\n      if (isAthenaRequestRuntime(internals)) {\n        throwAthenaRuntimeOwnershipInvalid(\"close\");\n      }\n      if (internals?.close) {\n        await internals.close();\n      } else {\n        await core.internalCore.runtimeBindings?.ownedResourceClose?.();\n      }\n    },\n    db: (core.urls.db || core.config.localDatabase || core.config.gatewayTransport\n      ? resolved.db\n      : createUnavailableNamespace(\n          \"db\",\n          core.urls\n        )) as AthenaClient<TModels>[\"db\"],\n    email: createEmailModule(core.config.email),\n    explain: (executable) => explainAthenaQuery(executable),\n    from: ((...args: unknown[]) => {\n      requireDb();\n      return Reflect.apply(resolved.from, resolved, args);\n    }) as AthenaClient<TModels>[\"from\"],\n    health: () => {\n      requireDb();\n      return resolved.health();\n    },\n    models: core.config.models as TModels,\n    notifications: createNotificationsModule({\n      catalog: core.config.notifications?.catalog,\n      eventStore: notificationStores.eventStore,\n      getUserId: () => {\n        const scoped = viewContext?.userId?.trim();\n        if (scoped) {\n          return scoped;\n        }\n        return userIdFromAuthSession(client);\n      },\n      preferenceStore: notificationStores.preferenceStore,\n      remoteDialect: attachEmbeddedHttpNotifications\n        ? \"embedded-http\"\n        : \"gateway-v1\",\n      remoteRequest: attachEmbeddedHttpNotifications\n        ? createNotificationsEmbeddedHttpRequest()\n        : useRemoteNotifications\n          ? async (input) => {\n              const forwarded = mergeAthenaRequestContexts(\n                requestContextFromAuthSession(client),\n                viewContext\n              );\n              const requester =\n                forwarded && !isEmptyAthenaRequestContext(forwarded)\n                  ? client.withContext(forwarded)\n                  : client;\n              const result = await requester.request({\n                body:\n                  input.method === \"GET\" || input.method === \"DELETE\"\n                    ? undefined\n                    : input.body,\n                credentials: athenaAuthConfig(core.config.auth)?.credentials,\n                method: input.method,\n                path: input.path,\n                query: input.query,\n                service: core.urls.db ? \"db\" : \"auth\",\n              });\n              return unwrapNotificationsGatewayResult(result);\n            }\n          : undefined,\n      transport:\n        attachEmbeddedHttpNotifications || useRemoteNotifications\n          ? \"remote\"\n          : \"embedded\",\n    }),\n    query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n      requireDb();\n      return resolved.query<Row>(query, options);\n    },\n    request<T = unknown>(options: AthenaRequestOptions) {\n      // Absolute URLs do not need a configured service base URL.\n      if (!options.url?.trim()) {\n        serviceGuard(core.urls, options.service ?? \"db\");\n      }\n      return resolved.request<T>(options);\n    },\n    rpc: ((...args: unknown[]) => {\n      requireDb();\n      return Reflect.apply(resolved.rpc, resolved, args);\n    }) as AthenaClient<TModels>[\"rpc\"],\n    storage: boundStorage as AthenaStorageModule,\n    system: {\n      compatibility: () => {\n        requireDb();\n        return resolved.system.compatibility();\n      },\n      /**\n       * Safe auth routing snapshot (no secrets). Does not require db.\n       */\n      inspectAuth(options?: {\n        requestOrigin?: string | null;\n      }): AthenaAuthDiagnostics {\n        const ctx = viewContext;\n        // AUTH-1: project the construction-time authority only. Origin may\n        // fill serverRequestBaseUrl; it must not re-run routing policy.\n        const routing =\n          getAttachedAthenaAuthRouting(client) ?? core.authRouting;\n        return toAthenaAuthDiagnostics(routing, {\n          bearerToken: ctx?.bearerToken,\n          cookie: ctx?.cookie,\n          requestOrigin: options?.requestOrigin,\n          sessionToken: ctx?.sessionToken,\n        });\n      },\n      release: () => {\n        requireDb();\n        return resolved.system.release();\n      },\n      runtime: () =>\n        toAthenaRuntimeDiagnostics(\n          resolveAthenaRuntime(core.config, {\n            environment: detectAthenaRuntimeEnvironment(),\n            trustedNode: detectAthenaRuntimeEnvironment() === \"node\",\n          })\n        ),\n    },\n    verifyConnection(options?: AthenaGatewayConnectionOptions) {\n      requireDb();\n      return resolved.verifyConnection(options);\n    },\n    withContext(\n      context: AthenaRequestContext\n    ): AthenaRequestClient<AthenaClient<TModels>> {\n      warnIfEmptyRequestContext(context);\n      // Recursive view construction hits TS2589 under dts emit.\n      const next = (\n        createClientView as (c: unknown, ctx?: AthenaRequestContext) => unknown\n      )(core, mergeAthenaRequestContexts(viewContext, context));\n      if (core.authRouting) {\n        attachAthenaAuthRouting(next as object, core.authRouting);\n      }\n      const internals = getAthenaClientInternals(client);\n      if (internals) {\n        attachAthenaClientInternals(\n          next as object,\n          createViewClientInternals(client, internals)\n        );\n      }\n      attachRequestAuthLifecycleGuards(next as object, client);\n      linkNotificationStores(next as object, notificationStores);\n      return next as AthenaRequestClient<AthenaClient<TModels>>;\n    },\n  } as AthenaClient<TModels>;\n\n  linkNotificationStores(client, notificationStores);\n\n  if (core.authRouting) {\n    attachAthenaAuthRouting(client, core.authRouting);\n  }\n\n  return Object.freeze(client);\n}\n\n/**\n * True when a context object carries no identity, auth, cache, or header signal.\n * Used to catch the common footgun `withContext({})` in development.\n */\nexport function isEmptyAthenaRequestContext(\n  context: AthenaRequestContext | undefined | null\n): boolean {\n  if (!context) {\n    return true;\n  }\n  const hasHeaders =\n    context.headers !== undefined &&\n    context.headers !== null &&\n    Object.keys(context.headers).length > 0;\n  // Treat omitted fields (undefined) the same as explicit null so `{}` is empty.\n\n  return (\n    (context.userId === undefined || context.userId === null) &&\n    (context.organizationId === undefined || context.organizationId === null) &&\n    !normalizeOptionalContextString(context.accessScope) &&\n    !normalizeOptionalContextString(context.policyRevision) &&\n    !normalizeOptionalContextString(context.cookie) &&\n    !normalizeOptionalContextString(context.bearerToken) &&\n    !normalizeOptionalContextString(context.sessionToken) &&\n    !context.forceNoCache &&\n    !hasHeaders\n  );\n}\n\nfunction normalizeOptionalContextString(\n  value: string | null | undefined\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed || undefined;\n}\n\nfunction warnIfEmptyRequestContext(context: AthenaRequestContext): void {\n  if (!isEmptyAthenaRequestContext(context)) {\n    return;\n  }\n  // globalThis.process avoids DTS failures without @types/node (Workers CI).\n  const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n    .process?.env?.NODE_ENV;\n  if (nodeEnv === \"production\") {\n    return;\n  }\n  console.warn(\n    \"[athena] withContext({}) has no userId, organizationId, cookie, bearerToken, sessionToken, headers, or forceNoCache. \" +\n      \"Gateway scope headers will not change. Pass identity fields, or use createAthenaServerClient({ session, scope }).\"\n  );\n}\n\n/**\n * 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  TModels extends AthenaClientModelsInput | undefined,\n>(\n  config: AthenaClientConfig<TModels>,\n  normalize: (input: AthenaClientConfig<TModels>) => AthenaClientConfig<TModels>,\n  runtimeBindings?: AthenaClientRuntimeBindings\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n  // Nuclear casts: createClientView/resolveCore generics overflow TS depth\n  // during declaration emit (TS2589). Keep the public overload return types;\n  // never re-instantiate AthenaClient<TModels> in the body expression tree.\n  const pipeline = normalize as (c: unknown) => unknown;\n  const coreOf = resolveCore as (\n    c: unknown,\n    bindings?: AthenaClientRuntimeBindings\n  ) => unknown;\n  const viewOf = createClientView as (c: unknown) => unknown;\n  const client: unknown = viewOf(coreOf(pipeline(config), runtimeBindings));\n  return 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  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config:\n    | (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n    | AthenaClientConfigWithR2<TModels>\n): AthenaClientWithR2Storage<TModels>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config: AthenaClientConfig<TModels>\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n  // Nuclear cast: passing the generic normalizer re-instantiates the config\n  // graph (TS2589); the spine already erases generics internally.\n  const factory = createClientWithNormalizer as unknown as (\n    input: unknown,\n    normalizer: (c: unknown) => unknown,\n    runtimeBindings?: AthenaClientRuntimeBindings\n  ) => unknown;\n  const normalize = normalizeUniversalCreateClientConfig as unknown as (\n    c: unknown\n  ) => unknown;\n  assertDataLifecycleConfig(config);\n  assertLocalBillingRuntimeEnvironment({\n    configuredProviders: config.billing?.providers,\n    mode: config.billing?.mode,\n  });\n  assertBillingProviderRuntimeEnvironment(config.billing?.providers);\n  const client: unknown = factory(config, normalize);\n  assertLocalAuthHooks(athenaAuthConfig(config.auth));\n  assertLocalAuthObservability(athenaAuthConfig(config.auth));\n  return client as AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n}\n","/**\n * Browser-safe Athena client compatibility entry.\n *\n * The construction implementation lives in `v3-client-assembly.ts`; this\n * stable entry remains for browser and compatibility imports.\n */\n\nexport * from \"./v3-client-assembly.ts\";\nexport type {\n  AthenaAuthConfig,\n  AthenaChatConfig,\n  AthenaChatMode,\n  AthenaClient,\n  AthenaClientConfig,\n  AthenaClientConfigWithR2,\n  AthenaClientRuntimeConfig,\n  AthenaClientServicesConfig,\n  AthenaClientWithR2Storage,\n  AthenaDbConfig,\n  AthenaRequestContext,\n  AthenaRequestContextProvider,\n  AthenaStorageConfig,\n} from \"./client/contracts.ts\";\nexport type {\n  AthenaSqliteBindValue,\n  AthenaSqliteConfig,\n  AthenaSqliteExecutionOptions,\n  AthenaSqliteExecutionResult,\n  AthenaSqliteExecutor,\n  AthenaSqliteExecutorCapabilities,\n  AthenaSqliteStorageValue,\n  AthenaSqliteTransaction,\n} from \"./sqlite-local/contracts.ts\";\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 { SchemaColumnGenerationStrategy } from \"../ir/column.ts\";\nimport type { AthenaSchemaIr } from \"../ir/document.ts\";\nimport type { PostgresIntervalQualifier } from \"../ir/type.ts\";\n\nexport type { SchemaColumnGenerationStrategy } from \"../ir/column.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  /** Database axis when the IR is multi-database. */\n  readonly database?: string;\n  readonly name: string;\n  readonly schema: string;\n}\n\n/** Canonical column type after normalization. */\nexport interface SchemaColumnType {\n  /** Array dimensions (`0` = scalar). */\n  readonly arrayDimensions: number;\n  /** Enum labels when type is a managed enum. */\n  readonly enumValues?: readonly string[] | null;\n  /** PostgreSQL interval field qualifier when the native type is qualified. */\n  readonly intervalQualifier?: PostgresIntervalQualifier;\n  /** Character length for `varchar`/`char` when known. */\n  readonly length?: number | null;\n  /**\n   * Normalized base type name (e.g. `integer`, `bigint`, `text`, `varchar`).\n   * Postgres aliases are folded in {@link normalizeSchemaSnapshot}.\n   */\n  readonly name: string;\n  /** Numeric precision when known. */\n  readonly precision?: number | null;\n  /** Numeric scale when known. */\n  readonly scale?: number | null;\n}\n\n/** Canonical column definition. */\nexport interface SchemaColumn {\n  /**\n   * Normalized default expression, or `null` when absent.\n   * Prefer `null` over `undefined` for stable serialization.\n   */\n  readonly default: string | null;\n  readonly isGenerated: boolean;\n  readonly name: string;\n  readonly nullable: boolean;\n  readonly type: SchemaColumnType;\n}\n\nexport interface SchemaPrimaryKey {\n  readonly columns: readonly string[];\n  /** Physical name when known; structural identity is `columns` order. */\n  readonly name?: string | null;\n}\n\nexport interface SchemaUniqueConstraint {\n  readonly columns: readonly string[];\n  readonly name?: string | null;\n}\n\nexport type SchemaReferentialAction =\n  | \"no_action\"\n  | \"restrict\"\n  | \"cascade\"\n  | \"set_null\"\n  | \"set_default\";\n\nexport interface SchemaForeignKey {\n  readonly columns: readonly string[];\n  readonly name?: string | null;\n  readonly onDelete: SchemaReferentialAction;\n  readonly onUpdate: SchemaReferentialAction;\n  readonly target: SchemaTableIdentity;\n  readonly targetColumns: readonly string[];\n}\n\nexport interface SchemaIndexColumn {\n  /** `asc` | `desc`; default treated as `asc` after normalize. */\n  readonly direction?: \"asc\" | \"desc\" | null;\n  readonly name: string;\n}\n\nexport interface SchemaIndex {\n  readonly columns: readonly SchemaIndexColumn[];\n  /** Index method (`btree`, …) when known. */\n  readonly method?: string | null;\n  readonly name?: string | null;\n  /** Partial index predicate when modeled; otherwise null. */\n  readonly predicate?: string | null;\n  readonly unique: boolean;\n}\n\nexport interface SchemaTable {\n  readonly columns: readonly SchemaColumn[];\n  readonly database?: string;\n  readonly foreignKeys: readonly SchemaForeignKey[];\n  readonly indexes: readonly SchemaIndex[];\n  readonly name: string;\n  readonly primaryKey: SchemaPrimaryKey | null;\n  readonly schema: string;\n  readonly uniqueConstraints: readonly SchemaUniqueConstraint[];\n}\n\nexport interface SchemaNamespace {\n  /** Database axis when the IR is multi-database; omitted for single-db v1. */\n  readonly database?: string;\n  readonly name: string;\n  readonly tables: readonly SchemaTable[];\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  /** Optional backend hint (`postgresql`, `d1`, …). */\n  readonly backend?: string | null;\n  readonly schemas: readonly SchemaNamespace[];\n  readonly version: typeof ATHENA_SCHEMA_SNAPSHOT_VERSION;\n}\n\nexport type SchemaDiffOperationKind =\n  | \"create_schema\"\n  | \"drop_schema\"\n  | \"create_table\"\n  | \"drop_table\"\n  | \"rename_table\"\n  | \"add_column\"\n  | \"drop_column\"\n  | \"rename_column\"\n  | \"alter_column\"\n  | \"add_primary_key\"\n  | \"drop_primary_key\"\n  | \"add_unique_constraint\"\n  | \"drop_unique_constraint\"\n  | \"add_foreign_key\"\n  | \"drop_foreign_key\"\n  | \"alter_foreign_key\"\n  | \"add_index\"\n  | \"drop_index\";\n\nexport interface SchemaDiffBase {\n  readonly kind: SchemaDiffOperationKind;\n}\n\nexport interface CreateSchemaOperation extends SchemaDiffBase {\n  /** Database axis when the IR is multi-database. */\n  readonly database?: string;\n  readonly kind: \"create_schema\";\n  readonly schema: string;\n}\n\nexport interface DropSchemaOperation extends SchemaDiffBase {\n  /** Database axis when the IR is multi-database. */\n  readonly database?: string;\n  readonly kind: \"drop_schema\";\n  readonly schema: string;\n}\n\nexport interface CreateTableOperation extends SchemaDiffBase {\n  readonly kind: \"create_table\";\n  readonly table: SchemaTable;\n}\n\nexport interface DropTableOperation extends SchemaDiffBase {\n  readonly kind: \"drop_table\";\n  /** Full prior definition when known (for later analysis). */\n  readonly previous?: SchemaTable | null;\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface RenameTableOperation extends SchemaDiffBase {\n  readonly from: SchemaTableIdentity;\n  readonly kind: \"rename_table\";\n  readonly to: SchemaTableIdentity;\n}\n\nexport interface AddColumnOperation extends SchemaDiffBase {\n  readonly column: SchemaColumn;\n  readonly kind: \"add_column\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface DropColumnOperation extends SchemaDiffBase {\n  readonly column: SchemaColumn;\n  readonly kind: \"drop_column\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface RenameColumnOperation extends SchemaDiffBase {\n  readonly from: string;\n  readonly kind: \"rename_column\";\n  readonly table: SchemaTableIdentity;\n  readonly to: string;\n}\n\nexport interface SchemaColumnChange<T> {\n  readonly from: T;\n  readonly to: T;\n}\n\nexport interface SchemaColumnChanges {\n  readonly default?: SchemaColumnChange<string | null>;\n  readonly generationStrategy?: SchemaColumnChange<SchemaColumnGenerationStrategy>;\n  readonly isGenerated?: SchemaColumnChange<boolean>;\n  readonly nullable?: SchemaColumnChange<boolean>;\n  readonly type?: SchemaColumnChange<SchemaColumnType>;\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  readonly after: SchemaColumn;\n  readonly before: SchemaColumn;\n  readonly changes: SchemaColumnChanges;\n  readonly column: string;\n  readonly kind: \"alter_column\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface AddPrimaryKeyOperation extends SchemaDiffBase {\n  readonly kind: \"add_primary_key\";\n  readonly primaryKey: SchemaPrimaryKey;\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface DropPrimaryKeyOperation extends SchemaDiffBase {\n  readonly kind: \"drop_primary_key\";\n  readonly primaryKey: SchemaPrimaryKey;\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface AddUniqueConstraintOperation extends SchemaDiffBase {\n  readonly kind: \"add_unique_constraint\";\n  readonly table: SchemaTableIdentity;\n  readonly unique: SchemaUniqueConstraint;\n}\n\nexport interface DropUniqueConstraintOperation extends SchemaDiffBase {\n  readonly kind: \"drop_unique_constraint\";\n  readonly table: SchemaTableIdentity;\n  readonly unique: SchemaUniqueConstraint;\n}\n\nexport interface AddForeignKeyOperation extends SchemaDiffBase {\n  readonly foreignKey: SchemaForeignKey;\n  readonly kind: \"add_foreign_key\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface DropForeignKeyOperation extends SchemaDiffBase {\n  readonly foreignKey: SchemaForeignKey;\n  readonly kind: \"drop_foreign_key\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface AlterForeignKeyOperation extends SchemaDiffBase {\n  readonly after: SchemaForeignKey;\n  readonly before: SchemaForeignKey;\n  readonly kind: \"alter_foreign_key\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface AddIndexOperation extends SchemaDiffBase {\n  readonly index: SchemaIndex;\n  readonly kind: \"add_index\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport interface DropIndexOperation extends SchemaDiffBase {\n  readonly index: SchemaIndex;\n  readonly kind: \"drop_index\";\n  readonly table: SchemaTableIdentity;\n}\n\nexport type SchemaDiffOperation =\n  | CreateSchemaOperation\n  | DropSchemaOperation\n  | CreateTableOperation\n  | DropTableOperation\n  | RenameTableOperation\n  | AddColumnOperation\n  | DropColumnOperation\n  | RenameColumnOperation\n  | AlterColumnOperation\n  | AddPrimaryKeyOperation\n  | DropPrimaryKeyOperation\n  | AddUniqueConstraintOperation\n  | DropUniqueConstraintOperation\n  | AddForeignKeyOperation\n  | DropForeignKeyOperation\n  | AlterForeignKeyOperation\n  | AddIndexOperation\n  | DropIndexOperation;\n\nexport interface SchemaDiffSummary {\n  readonly columnsAdded: number;\n  readonly columnsChanged: number;\n  readonly columnsRemoved: number;\n  readonly columnsRenamed: number;\n  readonly foreignKeysAdded: number;\n  readonly foreignKeysChanged: number;\n  readonly foreignKeysRemoved: number;\n  readonly indexesAdded: number;\n  readonly indexesRemoved: number;\n  readonly primaryKeysAdded: number;\n  readonly primaryKeysRemoved: number;\n  readonly schemasAdded: number;\n  readonly schemasRemoved: number;\n  readonly tablesAdded: number;\n  readonly tablesRemoved: number;\n  readonly tablesRenamed: number;\n  readonly totalOperations: number;\n  readonly uniquesAdded: number;\n  readonly uniquesRemoved: number;\n}\n\nexport interface SchemaDiff {\n  readonly isEmpty: boolean;\n  readonly operations: readonly SchemaDiffOperation[];\n  readonly summary: SchemaDiffSummary;\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  readonly from: AthenaSchemaSnapshot | AthenaSchemaIr;\n  readonly to: AthenaSchemaSnapshot | AthenaSchemaIr;\n}\n\nexport interface DiffSchemasOptions {\n  /**\n   * When true (default), validate both snapshots before comparing.\n   */\n  readonly validate?: boolean;\n}\n","import {\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  type AthenaSchemaSnapshot,\n  type SchemaColumn,\n  type SchemaColumnType,\n  type SchemaForeignKey,\n  type SchemaIndex,\n  type SchemaNamespace,\n  type SchemaPrimaryKey,\n  type SchemaReferentialAction,\n  type SchemaTable,\n  type SchemaUniqueConstraint,\n} from \"./types.ts\";\nimport type { PostgresIntervalQualifier } from \"../ir/type.ts\";\n\n/** Postgres type aliases → canonical names (representational noise only). */\nconst TYPE_ALIASES: Readonly<Record<string, string>> = {\n  bigint: \"bigint\",\n  bigserial: \"bigint\",\n  bit: \"bit\",\n  \"bit varying\": \"varbit\",\n  bool: \"boolean\",\n  boolean: \"boolean\",\n  bpchar: \"char\",\n  char: \"char\",\n  character: \"char\",\n  \"character varying\": \"varchar\",\n  decimal: \"numeric\",\n  \"double precision\": \"double precision\",\n  float4: \"real\",\n  float8: \"double precision\",\n  int: \"integer\",\n  int2: \"smallint\",\n  int4: \"integer\",\n  int8: \"bigint\",\n  integer: \"integer\",\n  numeric: \"numeric\",\n  real: \"real\",\n  serial: \"integer\",\n  serial2: \"smallint\",\n  serial4: \"integer\",\n  serial8: \"bigint\",\n  smallint: \"smallint\",\n  smallserial: \"smallint\",\n  time: \"time\",\n  \"time with time zone\": \"timetz\",\n  \"time without time zone\": \"time\",\n  timestamp: \"timestamp\",\n  \"timestamp with time zone\": \"timestamptz\",\n  \"timestamp without time zone\": \"timestamp\",\n  timestamptz: \"timestamptz\",\n  timetz: \"timetz\",\n  varchar: \"varchar\",\n  varbit: \"varbit\",\n};\n\nconst POSTGRES_INTERVAL_QUALIFIERS: ReadonlySet<PostgresIntervalQualifier> =\n  new Set([\n    \"year\",\n    \"month\",\n    \"day\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"year to month\",\n    \"day to hour\",\n    \"day to minute\",\n    \"day to second\",\n    \"hour to minute\",\n    \"hour to second\",\n    \"minute to second\",\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  \"now()\",\n  \"current_timestamp\",\n  \"current_timestamp()\",\n  \"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  raw: string,\n  arrayDimensions = 0\n): SchemaColumnType {\n  let text = raw.trim().toLowerCase();\n  let dims = arrayDimensions;\n\n  while (text.endsWith(\"[]\")) {\n    dims += 1;\n    text = text.slice(0, -2).trim();\n  }\n\n  // `_int4` style udt array markers\n  if (text.startsWith(\"_\") && !text.includes(\" \")) {\n    dims = Math.max(dims, 1);\n    text = text.slice(1);\n  }\n\n  let length: number | null = null;\n  let precision: number | null = null;\n  let scale: number | null = null;\n  let intervalQualifier: PostgresIntervalQualifier | undefined;\n\n  const qualifiedInterval = text.match(\n    /^interval\\s+(year to month|day to hour|day to minute|day to second|hour to minute|hour to second|minute to second|year|month|day|hour|minute|second)(?:\\s*\\((\\d+)\\))?$/\n  );\n  if (qualifiedInterval) {\n    const qualifier = qualifiedInterval[1] as PostgresIntervalQualifier;\n    if (POSTGRES_INTERVAL_QUALIFIERS.has(qualifier)) {\n      intervalQualifier = qualifier;\n      text = \"interval\";\n      if (qualifiedInterval[2] !== undefined) {\n        precision = Number(qualifiedInterval[2]);\n      }\n    }\n  }\n\n  const paramMatch = intervalQualifier\n    ? null\n    : text.match(/^([a-z0-9_ ]+?)\\s*\\(([^)]+)\\)(.*)$/);\n  if (paramMatch) {\n    text = `${paramMatch[1].trim()}${paramMatch[3] ? ` ${paramMatch[3].trim()}` : \"\"}`.trim();\n    const parts = paramMatch[2].split(\",\").map((p) => p.trim());\n    if (parts.length === 1) {\n      const n = Number(parts[0]);\n      if (Number.isFinite(n)) {\n        length = n;\n        precision = n;\n      }\n    } else if (parts.length >= 2) {\n      const p = Number(parts[0]);\n      const s = Number(parts[1]);\n      if (Number.isFinite(p)) {\n        precision = p;\n      }\n      if (Number.isFinite(s)) {\n        scale = s;\n      }\n    }\n  }\n\n  const canonical = TYPE_ALIASES[text] ?? text;\n\n  // length only meaningful for char/varchar; precision/scale for numeric\n  if (\n    canonical === \"varchar\" ||\n    canonical === \"char\" ||\n    canonical === \"bit\" ||\n    canonical === \"varbit\"\n  ) {\n    precision = null;\n    scale = null;\n  } else if (canonical === \"numeric\") {\n    length = null;\n  } else if (\n    canonical === \"interval\" ||\n    canonical === \"time\" ||\n    canonical === \"timetz\" ||\n    canonical === \"timestamp\" ||\n    canonical === \"timestamptz\"\n  ) {\n    length = null;\n  } else {\n    length = null;\n    // keep precision/scale only for numeric-like; drop for others\n    if (canonical !== \"numeric\") {\n      precision = null;\n      scale = null;\n    }\n  }\n\n  return {\n    arrayDimensions: dims,\n    enumValues: null,\n    ...(intervalQualifier === undefined ? {} : { intervalQualifier }),\n    length,\n    name: canonical,\n    precision,\n    scale,\n  };\n}\n\nexport function normalizeSchemaColumnType(\n  type: SchemaColumnType\n): SchemaColumnType {\n  const base = parseSchemaTypeString(type.name, type.arrayDimensions ?? 0);\n  const name = TYPE_ALIASES[base.name] ?? base.name;\n  const intervalQualifier =\n    name === \"interval\"\n      ? (type.intervalQualifier ?? base.intervalQualifier)\n      : undefined;\n\n  let length = type.length ?? base.length ?? null;\n  let precision = type.precision ?? base.precision ?? null;\n  let scale = type.scale ?? base.scale ?? null;\n\n  if (\n    name === \"varchar\" ||\n    name === \"char\" ||\n    name === \"bit\" ||\n    name === \"varbit\"\n  ) {\n    precision = null;\n    scale = null;\n  } else if (name === \"numeric\") {\n    length = null;\n  } else if (\n    name === \"interval\" ||\n    name === \"time\" ||\n    name === \"timetz\" ||\n    name === \"timestamp\" ||\n    name === \"timestamptz\"\n  ) {\n    length = null;\n    scale = null;\n  } else {\n    length = null;\n    precision = null;\n    scale = null;\n  }\n\n  const enumValues =\n    type.enumValues && type.enumValues.length > 0 ? [...type.enumValues] : null;\n\n  return {\n    arrayDimensions: base.arrayDimensions,\n    enumValues,\n    ...(intervalQualifier === undefined ? {} : { intervalQualifier }),\n    length,\n    name,\n    precision,\n    scale,\n  };\n}\n\n/**\n * Conservative default normalization — only proven-safe syntactic noise.\n */\nexport function normalizeDefaultExpression(\n  value: string | null | undefined\n): string | null {\n  if (value === undefined || value === null) {\n    return null;\n  }\n  let text = value.trim();\n  if (!text) {\n    return null;\n  }\n\n  // Strip trailing ::type casts repeatedly: 'active'::text → 'active'\n  for (let i = 0; i < 4; i += 1) {\n    const castMatch = text.match(/^(.*?)::[a-zA-Z_][\\w\\s.\"]*$/);\n    if (!castMatch) {\n      break;\n    }\n    text = castMatch[1].trim();\n  }\n\n  // nextval('seq'::regclass) → nextval('seq')\n  text = text.replace(\n    /nextval\\s*\\(\\s*'([^']+)'\\s*::\\s*regclass\\s*\\)/gi,\n    (_m, seq: string) => `nextval('${seq}')`\n  );\n\n  const lower = text.toLowerCase();\n  if (DEFAULT_NOW_EQUIVALENTS.has(lower)) {\n    return \"now()\";\n  }\n\n  return text;\n}\n\nexport function normalizeReferentialAction(\n  action: SchemaReferentialAction | string | null | undefined\n): SchemaReferentialAction {\n  if (!action) {\n    return \"no_action\";\n  }\n  const normalized = String(action).trim().toLowerCase().replace(/\\s+/g, \"_\");\n  switch (normalized) {\n    case \"a\":\n    case \"no_action\":\n    case \"noaction\":\n      return \"no_action\";\n    case \"r\":\n    case \"restrict\":\n      return \"restrict\";\n    case \"c\":\n    case \"cascade\":\n      return \"cascade\";\n    case \"n\":\n    case \"set_null\":\n    case \"setnull\":\n      return \"set_null\";\n    case \"d\":\n    case \"set_default\":\n    case \"setdefault\":\n      return \"set_default\";\n    default:\n      return \"no_action\";\n  }\n}\n\nfunction normalizeColumn(column: SchemaColumn): SchemaColumn {\n  return {\n    default: normalizeDefaultExpression(column.default),\n    isGenerated: Boolean(column.isGenerated),\n    name: column.name,\n    nullable: Boolean(column.nullable),\n    type: normalizeSchemaColumnType(column.type),\n  };\n}\n\nfunction normalizePrimaryKey(\n  pk: SchemaPrimaryKey | null | undefined\n): SchemaPrimaryKey | null {\n  if (!pk || pk.columns.length === 0) {\n    return null;\n  }\n  return {\n    columns: [...pk.columns],\n    name: pk.name ?? null,\n  };\n}\n\nfunction normalizeUnique(\n  unique: SchemaUniqueConstraint\n): SchemaUniqueConstraint {\n  return {\n    columns: [...unique.columns],\n    name: unique.name ?? null,\n  };\n}\n\nfunction normalizeForeignKey(fk: SchemaForeignKey): SchemaForeignKey {\n  const database = fk.target.database?.trim();\n  return {\n    columns: [...fk.columns],\n    name: fk.name ?? null,\n    onDelete: normalizeReferentialAction(fk.onDelete),\n    onUpdate: normalizeReferentialAction(fk.onUpdate),\n    target: {\n      name: fk.target.name,\n      schema: fk.target.schema,\n      ...(database ? { database } : {}),\n    },\n    targetColumns: [...fk.targetColumns],\n  };\n}\n\nfunction normalizeIndex(index: SchemaIndex): SchemaIndex {\n  return {\n    columns: index.columns.map((c) => ({\n      direction: c.direction === \"desc\" ? \"desc\" : \"asc\",\n      name: c.name,\n    })),\n    method: index.method?.trim() ? index.method.trim().toLowerCase() : null,\n    name: index.name ?? null,\n    predicate: index.predicate?.trim() ? index.predicate.trim() : null,\n    unique: Boolean(index.unique),\n  };\n}\n\nfunction compareByName<T extends { name: string }>(a: T, b: T): number {\n  return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n}\n\nfunction uniqueSortKey(u: SchemaUniqueConstraint): string {\n  return u.columns.join(\"\\0\");\n}\n\nfunction fkSortKey(fk: SchemaForeignKey): string {\n  return [\n    fk.columns.join(\",\"),\n    fk.target.database ?? \"\",\n    fk.target.schema,\n    fk.target.name,\n    fk.targetColumns.join(\",\"),\n    fk.onDelete,\n    fk.onUpdate,\n    fk.name ?? \"\",\n  ].join(\"\\0\");\n}\n\nfunction indexSortKey(ix: SchemaIndex): string {\n  return [\n    ix.unique ? \"1\" : \"0\",\n    ix.columns.map((c) => `${c.name}:${c.direction ?? \"asc\"}`).join(\",\"),\n    ix.predicate ?? \"\",\n    ix.method ?? \"\",\n    ix.name ?? \"\",\n  ].join(\"\\0\");\n}\n\nfunction normalizeTable(table: SchemaTable): SchemaTable {\n  const columns = table.columns.map(normalizeColumn).sort(compareByName);\n  const uniqueConstraints = table.uniqueConstraints\n    .map(normalizeUnique)\n    .sort((a, b) => {\n      const ka = uniqueSortKey(a);\n      const kb = uniqueSortKey(b);\n      return ka < kb ? -1 : ka > kb ? 1 : 0;\n    });\n  const foreignKeys = table.foreignKeys\n    .map(normalizeForeignKey)\n    .sort((a, b) => {\n      const ka = fkSortKey(a);\n      const kb = fkSortKey(b);\n      return ka < kb ? -1 : ka > kb ? 1 : 0;\n    });\n  const indexes = table.indexes.map(normalizeIndex).sort((a, b) => {\n    const ka = indexSortKey(a);\n    const kb = indexSortKey(b);\n    return ka < kb ? -1 : ka > kb ? 1 : 0;\n  });\n\n  const database = table.database?.trim();\n  return {\n    name: table.name,\n    schema: table.schema,\n    ...(database ? { database } : {}),\n    columns,\n    foreignKeys,\n    indexes,\n    primaryKey: normalizePrimaryKey(table.primaryKey),\n    uniqueConstraints,\n  };\n}\n\nfunction normalizeNamespace(ns: SchemaNamespace): SchemaNamespace {\n  const tables = ns.tables.map(normalizeTable).sort((a, b) => {\n    if (a.name < b.name) {\n      return -1;\n    }\n    if (a.name > b.name) {\n      return 1;\n    }\n    return 0;\n  });\n  const database = ns.database?.trim();\n  return {\n    name: ns.name,\n    tables,\n    ...(database && database.length > 0 ? { database } : {}),\n  };\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  snapshot: AthenaSchemaSnapshot\n): AthenaSchemaSnapshot {\n  const schemas = snapshot.schemas.map(normalizeNamespace).sort((a, b) => {\n    const database = (a.database ?? \"\").localeCompare(b.database ?? \"\");\n    if (database !== 0) {\n      return database;\n    }\n    return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;\n  });\n\n  return {\n    backend: snapshot.backend ?? null,\n    schemas,\n    version: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  };\n}\n\nexport function columnTypesEqual(\n  a: SchemaColumnType,\n  b: SchemaColumnType\n): boolean {\n  const na = normalizeSchemaColumnType(a);\n  const nb = normalizeSchemaColumnType(b);\n  if (na.name !== nb.name) {\n    return false;\n  }\n  if (na.arrayDimensions !== nb.arrayDimensions) {\n    return false;\n  }\n  if ((na.length ?? null) !== (nb.length ?? null)) {\n    return false;\n  }\n  if ((na.precision ?? null) !== (nb.precision ?? null)) {\n    return false;\n  }\n  if ((na.scale ?? null) !== (nb.scale ?? null)) {\n    return false;\n  }\n  const ea = na.enumValues ?? null;\n  const eb = nb.enumValues ?? null;\n  if (ea === null && eb === null) {\n    return true;\n  }\n  if (ea === null || eb === null) {\n    return false;\n  }\n  if (ea.length !== eb.length) {\n    return false;\n  }\n  for (let i = 0; i < ea.length; i += 1) {\n    if (ea[i] !== eb[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function columnsEqual(a: SchemaColumn, b: SchemaColumn): boolean {\n  return (\n    a.name === b.name &&\n    columnTypesEqual(a.type, b.type) &&\n    a.nullable === b.nullable &&\n    normalizeDefaultExpression(a.default) ===\n      normalizeDefaultExpression(b.default) &&\n    a.isGenerated === b.isGenerated\n  );\n}\n\nexport function primaryKeysEqual(\n  a: SchemaPrimaryKey | null,\n  b: SchemaPrimaryKey | null\n): boolean {\n  if (a === null && b === null) {\n    return true;\n  }\n  if (a === null || b === null) {\n    return false;\n  }\n  if (a.columns.length !== b.columns.length) {\n    return false;\n  }\n  for (let i = 0; i < a.columns.length; i += 1) {\n    if (a.columns[i] !== b.columns[i]) {\n      return false;\n    }\n  }\n  return 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  identity_generation?: string | null;\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      CASE a.attidentity\n        WHEN 'a' THEN 'always'\n        WHEN 'd' THEN 'by-default'\n        ELSE NULL\n      END AS identity_generation,\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  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  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} 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\" ||\n        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        ...(row.identity_generation === \"always\" ||\n        row.identity_generation === \"by-default\"\n          ? { identity: row.identity_generation }\n          : {}),\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),\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 AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../postgres/owned-runtime.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 runtime: AthenaPostgresRuntime) {}\n\n  async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\n    const result = await this.runtime.query<ColumnQueryRow>(\n      POSTGRES_CATALOG_SQL.columns,\n      [schemas],\n      { workload: \"introspection\" }\n    );\n    return result.rows;\n  }\n\n  async queryEnums(): Promise<Map<number, string[]>> {\n    const result = await this.runtime.query<EnumQueryRow>(\n      POSTGRES_CATALOG_SQL.enums,\n      undefined,\n      { workload: \"introspection\" }\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.runtime.query<PrimaryKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.primaryKeys,\n      [schemas],\n      { workload: \"introspection\" }\n    );\n    return result.rows;\n  }\n\n  async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\n    const result = await this.runtime.query<ForeignKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.foreignKeys,\n      [schemas],\n      { workload: \"introspection\" }\n    );\n    return result.rows;\n  }\n\n  async queryUniqueConstraints(\n    schemas: string[]\n  ): Promise<UniqueConstraintQueryRow[]> {\n    const result = await this.runtime.query<UniqueConstraintQueryRow>(\n      POSTGRES_CATALOG_SQL.uniqueConstraints,\n      [schemas],\n      { workload: \"introspection\" }\n    );\n    return result.rows;\n  }\n\n  async queryIndexes(schemas: string[]): Promise<IndexQueryRow[]> {\n    const result = await this.runtime.query<IndexQueryRow>(\n      POSTGRES_CATALOG_SQL.indexes,\n      [schemas],\n      { workload: \"introspection\" }\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 runtime = createAthenaPostgresRuntime({\n      connectionString: this.connectionString,\n    });\n    const catalogClient = new PgCatalogClient(runtime);\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 runtime.close();\n    }\n  }\n}\n\n/**\n * Creates a PostgreSQL-backed schema introspection provider.\n */\nexport function createPostgresIntrospectionProvider(\n  options: PostgresIntrospectionProviderOptions\n): SchemaIntrospectionProvider {\n  return new PostgresIntrospectionProvider(options);\n}\n","import {\n  buildGatewayCatalogQueries,\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  type IndexQueryRow,\n  PostgresCatalogSnapshotAssembler,\n  type PrimaryKeyQueryRow,\n  type UniqueConstraintQueryRow,\n} from \"../schema/postgres-introspection-core.ts\";\nimport { createPostgresIntrospectionProvider } from \"../schema/postgres-provider.ts\";\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from \"../schema/types.ts\";\nimport { type AthenaClient, createClient } from \"../v3-client-core.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport type {\n  GeneratorExperimentalFlags,\n  GeneratorProviderConfig,\n  PostgresDirectProviderConfig,\n  PostgresGatewayProviderConfig,\n  ScyllaDirectProviderConfig,\n} from \"./types.ts\";\n\nclass AthenaGatewayCatalogClient {\n  constructor(private readonly client: AthenaClient) {}\n\n  async queryRows<T>(query: string): Promise<T[]> {\n    const result = await this.client.query<T & Record<string, unknown>>(query);\n    if (result.error || result.status < 200 || result.status >= 300) {\n      throw new Error(\n        result.error?.message ??\n          `Gateway query failed with status ${result.status}`\n      );\n    }\n    return (result.data ?? []) as T[];\n  }\n\n  async queryColumns(query: string): Promise<ColumnQueryRow[]> {\n    return this.queryRows<ColumnQueryRow>(query);\n  }\n\n  async queryEnums(query: string): Promise<Map<number, string[]>> {\n    const rows = await this.queryRows<EnumQueryRow>(query);\n    const enumMap = new Map<number, string[]>();\n    for (const row of rows) {\n      const existing = enumMap.get(row.type_oid) ?? [];\n      existing.push(row.enum_label);\n      enumMap.set(row.type_oid, existing);\n    }\n    return enumMap;\n  }\n\n  async queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\n    return this.queryRows<PrimaryKeyQueryRow>(query);\n  }\n\n  async queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\n    return this.queryRows<ForeignKeyQueryRow>(query);\n  }\n}\n\nclass AthenaGatewayPostgresIntrospectionProvider\n  implements SchemaIntrospectionProvider\n{\n  readonly backend = \"postgresql\" as const;\n\n  private readonly client: AthenaClient;\n  private readonly schemas: string[];\n\n  constructor(private readonly config: PostgresGatewayProviderConfig) {\n    // Set unified `url` as well as `db.url` so root/chatWs resolution uses the\n    // configured gateway and is not poisoned by ambient invalid ATHENA_URL env\n    // placeholders (e.g. unexpanded `${ATHENA_URL}`).\n    // Cast through unknown: createClient generics overflow TS depth (TS2589).\n    this.client = (\n      createClient as unknown as (config: unknown) => AthenaClient\n    )({\n      backend: {\n        type: this.config.backend ?? \"postgresql\",\n      },\n      // Multi-tenant gateways reject DEFAULT_CLIENT; prefer explicit config.\n      // Also pass process.env so ATHENA_CLIENT / ATHENA_GATEWAY_CLIENT still resolve\n      // when the field was not normalized into provider config.\n      client: this.config.client,\n      db: { url: this.config.gatewayUrl },\n      env: typeof process === \"undefined\" ? undefined : process.env,\n      key: this.config.apiKey,\n      url: this.config.gatewayUrl,\n    });\n    this.schemas = normalizeSchemaSelection(this.config.schemas);\n  }\n\n  async inspect(\n    options?: IntrospectionInspectOptions\n  ): Promise<IntrospectionSnapshot> {\n    const schemas =\n      options?.schemas && options.schemas.length > 0\n        ? normalizeSchemaSelection(options.schemas)\n        : this.schemas;\n\n    const catalogClient = new AthenaGatewayCatalogClient(this.client);\n    const queries = buildGatewayCatalogQueries(schemas);\n\n    const [\n      columnRows,\n      enumMap,\n      primaryKeyRows,\n      foreignKeyRows,\n      uniqueConstraintRows,\n      indexRows,\n    ] = await Promise.all([\n      catalogClient.queryColumns(queries.columns),\n      catalogClient.queryEnums(queries.enums),\n      catalogClient.queryPrimaryKeys(queries.primaryKeys),\n      catalogClient.queryForeignKeys(queries.foreignKeys),\n      catalogClient.queryRows<UniqueConstraintQueryRow>(\n        queries.uniqueConstraints\n      ),\n      catalogClient.queryRows<IndexQueryRow>(queries.indexes),\n    ]);\n\n    const assembler = new PostgresCatalogSnapshotAssembler();\n    assembler.addColumnRows(columnRows, enumMap);\n    assembler.addPrimaryKeyRows(primaryKeyRows);\n    assembler.addForeignKeyRows(foreignKeyRows);\n    assembler.addUniqueConstraintRows(uniqueConstraintRows);\n    assembler.addIndexRows(indexRows);\n    assembler.addManyToManyRows(foreignKeyRows);\n\n    return {\n      backend: \"postgresql\",\n      database: this.config.database,\n      generatedAt: new Date().toISOString(),\n      schemas: assembler.toSchemas(),\n    };\n  }\n}\n\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = \"scylladb\" as const;\n\n  constructor(private readonly config: ScyllaDirectProviderConfig) {}\n\n  async inspect(): Promise<IntrospectionSnapshot> {\n    throw new Error(\n      `Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`\n    );\n  }\n}\n\nfunction createPostgresProvider(\n  config: PostgresDirectProviderConfig\n): SchemaIntrospectionProvider {\n  return createPostgresIntrospectionProvider({\n    connectionString: config.connectionString,\n    database: config.database,\n    schemas: normalizeSchemaSelection(config.schemas),\n  });\n}\n\n/**\n * Resolves a runtime introspection provider from generator config.\n */\nexport function resolveGeneratorProvider(\n  providerConfig: GeneratorProviderConfig,\n  experimentalFlags: GeneratorExperimentalFlags\n): SchemaIntrospectionProvider {\n  if (providerConfig.kind === \"postgres\" && providerConfig.mode === \"direct\") {\n    return createPostgresProvider(providerConfig);\n  }\n\n  if (providerConfig.kind === \"postgres\" && providerConfig.mode === \"gateway\") {\n    return new AthenaGatewayPostgresIntrospectionProvider(providerConfig);\n  }\n\n  if (providerConfig.kind === \"scylla\") {\n    if (!experimentalFlags.scyllaProviderContracts) {\n      throw new Error(\n        \"Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.\"\n      );\n    }\n    return new ScyllaIntrospectionProvider(providerConfig);\n  }\n\n  throw new Error(\n    `Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? \"unknown\"}`\n  );\n}\n","import { unknownOptionError } from \"../../parse-helpers.ts\";\nimport type { CliCommand, MigrateCommand } from \"../../types.ts\";\nimport { ATHENA_MIGRATE_RECONCILE_COMMAND } from \"../../../migrations/commands.ts\";\n\nexport type MigrateMode = MigrateCommand[\"mode\"];\n\nconst READ_MODES = new Set<MigrateMode>([\n  \"status\",\n  \"plan\",\n  \"check\",\n  \"graph\",\n  \"explain\",\n  \"drift\",\n  \"reconcile\",\n  \"verify\",\n]);\n\nexport function parseMigrateFlags(\n  rest: readonly string[],\n  mode: MigrateMode\n): CliCommand {\n  let configPath: string | undefined;\n  let dryRun = false;\n  let json = false;\n  let plain = false;\n  let yes = false;\n  let strict = false;\n  let allowDirty = false;\n  let applyReconcile = false;\n  let explainTarget: string | undefined;\n  let resolvedMode = mode;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      if (resolvedMode === \"status\") {\n        return { command: \"help\", topic: \"migrate-status\" };\n      }\n      return { command: \"help\", topic: \"migrate\" };\n    }\n\n    if (\n      resolvedMode === \"explain\" &&\n      token &&\n      !token.startsWith(\"-\") &&\n      !explainTarget\n    ) {\n      explainTarget = token;\n      continue;\n    }\n\n    if (token === \"--dry-run\") {\n      if (READ_MODES.has(resolvedMode)) {\n        throw new Error(\n          `--dry-run cannot be combined with migrate ${resolvedMode}.`\n        );\n      }\n      dryRun = true;\n      if (resolvedMode !== \"repair\") {\n        resolvedMode = \"dry-run\";\n      }\n      continue;\n    }\n\n    if (token === \"--apply\") {\n      if (resolvedMode !== \"reconcile\") {\n        throw new Error(\n          `Unexpected \"--apply\". Use: ${ATHENA_MIGRATE_RECONCILE_COMMAND} --apply`\n        );\n      }\n      applyReconcile = true;\n      continue;\n    }\n\n    if (token === \"--yes\" || token === \"-y\") {\n      yes = true;\n      continue;\n    }\n\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n\n    if (token === \"--strict\") {\n      strict = true;\n      continue;\n    }\n\n    if (token === \"--allow-dirty-migrations\" || token === \"--allow-dirty\") {\n      allowDirty = true;\n      continue;\n    }\n\n    if (token === \"--plain\" || token === \"--no-color\") {\n      plain = true;\n      continue;\n    }\n\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n\n    throw unknownOptionError(token ?? \"\", \"migrate\");\n  }\n\n  if (resolvedMode === \"explain\" && !explainTarget) {\n    return { command: \"help\", topic: \"migrate\" };\n  }\n\n  return {\n    allowDirty,\n    applyReconcile,\n    command: \"migrate\",\n    configPath,\n    dryRun: resolvedMode === \"dry-run\" || (resolvedMode === \"repair\" && dryRun),\n    explainTarget,\n    json,\n    mode: resolvedMode,\n    plain,\n    strict,\n    yes,\n  };\n}\n","import {\n  ensureAthenaProjectLayout,\n  inspectManagedAuthMigrations,\n  materializeManagedAuthMigrations,\n} from \"../../../migrations/managed-auth.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 { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type { CliCommand, MigrateAuthSyncCommand } from \"../../types.ts\";\n\nexport function parseMigrateAuthSyncFlags(rest: readonly string[]): CliCommand {\n  let configPath: string | undefined;\n  let dryRun = false;\n  let json = false;\n  let plain = false;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"migrate\" };\n    }\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--plain\" || token === \"--no-color\") {\n      plain = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"sync\" || token === \"materialize\") {\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"migrate\");\n  }\n\n  return {\n    command: \"migrate-auth-sync\",\n    configPath,\n    dryRun,\n    json,\n    plain,\n  };\n}\n\nexport async function runMigrateAuthSync(\n  ctx: CommandContext,\n  parsed: MigrateAuthSyncCommand\n): Promise<void> {\n  const cwd = process.cwd();\n  try {\n    await ensureAthenaProjectLayout({ cwd, dryRun: parsed.dryRun });\n    const result = await materializeManagedAuthMigrations({\n      cwd,\n      dryRun: parsed.dryRun,\n      overwrite: true,\n    });\n    const inspection = parsed.dryRun\n      ? await inspectManagedAuthMigrations({ cwd })\n      : undefined;\n    if (parsed.json) {\n      ctx.log(\n        JSON.stringify(\n          {\n            command: \"migrate-auth-sync\",\n            directory: result.directory,\n            drifted: inspection?.drifted ?? false,\n            dryRun: parsed.dryRun,\n            restored: result.restored,\n            unchanged: result.unchanged,\n            unexpected: result.unexpected,\n            written: result.written,\n          },\n          null,\n          2\n        )\n      );\n      return;\n    }\n    const prefix = parsed.dryRun ? \"[dry-run] \" : \"\";\n    ctx.log(\n      `${prefix}Managed Embedded Auth migrations → athena/managed/auth/migrations`\n    );\n    ctx.log(\n      `${prefix}written ${result.written.length} · restored ${result.restored.length} · unchanged ${result.unchanged.length}`\n    );\n    if (result.unexpected.length > 0) {\n      ctx.log(\n        `${prefix}unexpected local files (left in place): ${result.unexpected.join(\", \")}`\n      );\n    }\n    ctx.log(\n      `${prefix}These files are a read-only view. Runtime apply uses package-owned SQL.`\n    );\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(\n      formatGeneratorError(error, parsed.configPath),\n      ctx.errorLog,\n      ctx.capabilities\n    );\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n\nexport const migrateAuthSyncCommand = defineCommand({\n  aliasPaths: [\n    [\"migrate\", \"auth\", \"materialize\"],\n    [\"migrate\", \"auth\"],\n  ],\n  legacy: \"migrate-auth-sync\",\n  parse: parseMigrateAuthSyncFlags,\n  path: [\"migrate\", \"auth\", \"sync\"],\n  run: (ctx, parsed) =>\n    runMigrateAuthSync(ctx, parsed as MigrateAuthSyncCommand),\n  usage: () => formatCatalogTopicUsage(\"migrate\"),\n});\n","import { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport { checksumMigrationSql } from \"./checksum.ts\";\nimport { planHasBlockingConflicts } from \"./planner.ts\";\nimport type { MigrationConflict, MigrationPlan } from \"./types.ts\";\n\nexport type MigrationVerifyResult = \"READY\" | \"NOT_READY\";\n\nexport interface MigrationVerifyAuthFacts {\n  conflictCount: number;\n  currentGeneration: number | null;\n  expectedGeneration: number;\n  hasBlockingDrift: boolean;\n  pendingCount: number;\n}\n\nexport interface MigrationVerifyInput {\n  allowDirty?: boolean;\n  auth: MigrationVerifyAuthFacts;\n  databaseLabel: string;\n  dirtyWorktree: boolean;\n  plan: Pick<MigrationPlan, \"applied\" | \"conflicts\" | \"pending\">;\n  providerLabel: string;\n  sdkVersion?: string;\n  semanticBlocked: boolean;\n}\n\nexport interface MigrationVerifyReport {\n  application: \"ok\" | \"conflict\" | \"blocked\";\n  auth: \"ok\" | \"drift\" | \"conflict\";\n  database: string;\n  dirtyWorktree: boolean;\n  drift: \"none\" | \"application\" | \"auth\" | \"worktree\";\n  embeddedAuth: {\n    current: number | null;\n    expected: number;\n    pending: number;\n  };\n  ok: boolean;\n  pending: number;\n  plan: string;\n  provider: string;\n  reasons: string[];\n  result: MigrationVerifyResult;\n  sdkVersion: string;\n}\n\nfunction fingerprintPayload(input: MigrationVerifyInput): string {\n  const applied = input.plan.applied.map(\n    (entry) =>\n      `${entry.migration.version}:${entry.migration.checksum}:${entry.migration.filename}`\n  );\n  const pending = input.plan.pending.map(\n    (entry) =>\n      `${entry.migration.version}:${entry.migration.checksum}:${entry.migration.filename}`\n  );\n  const conflicts = input.plan.conflicts.map(\n    (conflict: MigrationConflict) => `${conflict.version}:${conflict.kind}`\n  );\n  return [\n    applied.join(\"|\"),\n    pending.join(\"|\"),\n    conflicts.join(\"|\"),\n    `auth:${input.auth.expectedGeneration}:${input.auth.currentGeneration ?? \"none\"}:${input.auth.pendingCount}:${input.auth.hasBlockingDrift ? \"1\" : \"0\"}`,\n    `dirty:${input.dirtyWorktree ? \"1\" : \"0\"}`,\n    `semantic:${input.semanticBlocked ? \"1\" : \"0\"}`,\n  ].join(\"\\n\");\n}\n\nexport function evaluateMigrationReadiness(\n  input: MigrationVerifyInput\n): MigrationVerifyReport {\n  const reasons: string[] = [];\n  let application: MigrationVerifyReport[\"application\"] = \"ok\";\n  if (planHasBlockingConflicts(input.plan as MigrationPlan)) {\n    application = \"conflict\";\n    reasons.push(\"application ledger conflicts\");\n  } else if (input.semanticBlocked) {\n    application = \"blocked\";\n    reasons.push(\"application schema/preflight blocked\");\n  }\n\n  let auth: MigrationVerifyReport[\"auth\"] = \"ok\";\n  if (input.auth.hasBlockingDrift) {\n    auth = \"drift\";\n    reasons.push(\"Embedded Auth schema drift\");\n  } else if (input.auth.conflictCount > 0) {\n    auth = \"conflict\";\n    reasons.push(\"Embedded Auth ledger conflicts\");\n  }\n\n  if (input.dirtyWorktree && !input.allowDirty) {\n    reasons.push(\"dirty migration worktree\");\n  }\n\n  let drift: MigrationVerifyReport[\"drift\"] = \"none\";\n  if (application !== \"ok\") {\n    drift = \"application\";\n  } else if (auth !== \"ok\") {\n    drift = \"auth\";\n  } else if (input.dirtyWorktree && !input.allowDirty) {\n    drift = \"worktree\";\n  }\n\n  const ok = reasons.length === 0;\n  const plan = checksumMigrationSql(fingerprintPayload(input)).slice(0, 12);\n\n  return {\n    application,\n    auth,\n    database: input.databaseLabel,\n    dirtyWorktree: input.dirtyWorktree,\n    drift,\n    embeddedAuth: {\n      current: input.auth.currentGeneration,\n      expected: input.auth.expectedGeneration,\n      pending: input.auth.pendingCount,\n    },\n    ok,\n    pending: input.plan.pending.length,\n    plan,\n    provider: input.providerLabel,\n    reasons,\n    result: ok ? \"READY\" : \"NOT_READY\",\n    sdkVersion: input.sdkVersion ?? PACKAGE_VERSION,\n  };\n}\n\nexport function formatMigrationVerifyText(\n  report: MigrationVerifyReport\n): string {\n  const authStatus =\n    report.auth === \"ok\" ? \"✓\" : report.auth === \"drift\" ? \"drift\" : \"conflict\";\n  const appStatus =\n    report.application === \"ok\"\n      ? \"✓\"\n      : report.application === \"conflict\"\n        ? \"conflict\"\n        : \"blocked\";\n  const lines = [\n    \"Migration readiness\",\n    \"\",\n    `Database       ${report.database}`,\n    `Provider       ${report.provider}`,\n    `Application    ${appStatus}`,\n    `Embedded Auth  ${authStatus}  (expected ${report.embeddedAuth.expected}${report.embeddedAuth.current == null ? \"\" : `, ledger ${report.embeddedAuth.current}`})`,\n    `Drift          ${report.drift}`,\n    `Pending        ${report.pending}`,\n    `Plan           ${report.plan}`,\n    `Result         ${report.result}`,\n  ];\n  if (report.reasons.length > 0) {\n    lines.push(\"\", \"Blocked by:\");\n    for (const reason of report.reasons) {\n      lines.push(`  - ${reason}`);\n    }\n  }\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport async function runMigrationVerify(\n  options: import(\"./types.ts\").RunMigrationsOptions = {}\n): Promise<MigrationVerifyReport> {\n  const { prepareApplicationMigrationRun } = await import(\n    \"./application/prepare.ts\"\n  );\n  const { assertDirectPostgres, databaseLabel, providerLabel } = await import(\n    \"./application/authority.ts\"\n  );\n  const { blockingSemantic, compileApplicationSemantics } = await import(\n    \"./application/semantics.ts\"\n  );\n  const { loadAuthPlan } = await import(\"./embedded-auth/plan.ts\");\n  const { planMigrations } = await import(\"./planner.ts\");\n  const { createPostgresMigrationBackend } = await import(\"./postgres.ts\");\n  const { ATHENA_AUTH_SCHEMA_GENERATION } = await import(\n    \"../auth/contract/index.ts\"\n  );\n\n  const prepared = await prepareApplicationMigrationRun({\n    ...options,\n    dryRun: true,\n    mode: \"verify\",\n  });\n  const pg = assertDirectPostgres(prepared.config);\n  const backend =\n    (await options.createBackend?.({\n      connectionString: pg.connectionString,\n      database: pg.database,\n    })) ??\n    (await createPostgresMigrationBackend({\n      connectionString: pg.connectionString,\n      database: pg.database,\n    }));\n\n  try {\n    const applied = await backend.listAppliedMigrations();\n    const plan = planMigrations({ applied, local: prepared.local });\n    const authPlan = await loadAuthPlan(options, pg.connectionString, true);\n    const semantic = await compileApplicationSemantics({\n      authPlan,\n      backend,\n      cacheDir: prepared.cwd,\n      local: prepared.local,\n      modules: prepared.config.modules,\n      plan,\n      strict: options.strict,\n    });\n    const appliedAuth = authPlan?.entries.filter(\n      (entry) => entry.ledgerState === \"applied\" || entry.action === \"none\"\n    );\n    const currentGeneration =\n      appliedAuth && appliedAuth.length > 0\n        ? Math.max(...appliedAuth.map((entry) => entry.version))\n        : null;\n    return evaluateMigrationReadiness({\n      allowDirty: prepared.allowDirtyMigrations,\n      auth: {\n        conflictCount: authPlan?.conflictCount ?? 0,\n        currentGeneration,\n        expectedGeneration: ATHENA_AUTH_SCHEMA_GENERATION,\n        hasBlockingDrift: authPlan?.hasBlockingDrift === true,\n        pendingCount: authPlan?.pendingCount ?? 0,\n      },\n      databaseLabel: databaseLabel(prepared.config),\n      dirtyWorktree: prepared.gitWorktree.dirty,\n      plan,\n      providerLabel: providerLabel(prepared.config),\n      semanticBlocked: blockingSemantic(semantic),\n    });\n  } finally {\n    await backend.close();\n  }\n}\n","import {\n  formatMigrationVerifyText,\n  runMigrationVerify as runMigrationVerifyLive,\n} from \"../../../migrations/verify.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { CliExitCode, setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport {\n  encodeCliJsonSuccess,\n  exitCodeForError,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { MigrateCommand } from \"../../types.ts\";\nimport { defineMigrateCommand } from \"./define.ts\";\n\nexport async function runMigrateVerify(\n  ctx: CommandContext,\n  parsed: MigrateCommand\n): Promise<void> {\n  const json = ctx.output === \"json\" || parsed.json === true;\n  try {\n    const runVerify = ctx.runtime.runMigrationVerify ?? runMigrationVerifyLive;\n    const report = await runVerify({\n      allowDirty: parsed.allowDirty,\n      allowDirtyMigrations: parsed.allowDirty,\n      configPath: parsed.configPath,\n      cwd: ctx.cwd,\n      json,\n      plain: parsed.plain,\n      strict: parsed.strict,\n    });\n    if (json) {\n      ctx.log(stringifyCliJson(encodeCliJsonSuccess(\"migrate.verify\", report)));\n    } else {\n      ctx.logRaw(formatMigrationVerifyText(report));\n    }\n    if (!report.ok) {\n      setCliExitCode(CliExitCode.Conflict);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n\nexport const migrateVerifyCommand = defineMigrateCommand({\n  mode: \"verify\",\n  path: [\"migrate\", \"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  \"status\",\n  \"plan\",\n  \"repair\",\n  \"check\",\n  \"graph\",\n  \"explain\",\n  \"drift\",\n  \"reconcile\",\n  \"verify\",\n]);\n\nexport function parse(rest: string[]): CliCommand {\n  const head = rest[0];\n  if (head === \"auth\") {\n    const flags =\n      rest[1] === \"sync\" || rest[1] === \"materialize\"\n        ? rest.slice(2)\n        : rest.slice(1);\n    return parseMigrateAuthSyncFlags(flags);\n  }\n  if (head && MIGRATE_SUBCOMMANDS.has(head as MigrateMode)) {\n    return parseMigrateFlags(rest.slice(1), head as MigrateMode);\n  }\n  return parseMigrateFlags(rest, \"apply\");\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"migrate\");\n}\n\nexport function migrateStatusUsage(): string {\n  return formatCatalogTopicUsage(\"migrate-status\");\n}\n\nexport function sessionTitle(_parsed: MigrateCommand): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: MigrateCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, presentation, runtime } = ctx;\n  if (parsed.mode === \"verify\") {\n    const { runMigrateVerify } = await import(\"./verify.ts\");\n    await runMigrateVerify(ctx, parsed);\n    return;\n  }\n  const runMigrate = runtime.runMigrations ?? runMigrations;\n  try {\n    if (isDebugEnabled()) {\n      errorLog(\n        `[athena-js] migrate starting (mode=${parsed.mode} dryRun=${parsed.dryRun}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n      );\n    }\n    await ctx.trace.span(\n      `migrations.${parsed.mode}`,\n      {\n        configPath: parsed.configPath,\n        dryRun: parsed.dryRun || parsed.mode === \"dry-run\",\n        explainTarget: parsed.explainTarget,\n      },\n      () =>\n        runMigrate({\n          allowDirty: parsed.allowDirty,\n          allowDirtyMigrations: parsed.allowDirty,\n          applyReconcile: parsed.applyReconcile,\n          configPath: parsed.configPath,\n          dryRun: parsed.dryRun || parsed.mode === \"dry-run\",\n          explainTarget: parsed.explainTarget,\n          json: parsed.json,\n          log,\n          mode: parsed.mode,\n          plain: parsed.plain || presentation.noColor === true,\n          strict: parsed.strict,\n          yes: parsed.yes,\n        })\n    );\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    if (error instanceof MigrationError) {\n      logCliError(error, errorLog, capabilities);\n    } else {\n      logCliError(\n        formatGeneratorError(error, parsed.configPath),\n        errorLog,\n        capabilities\n      );\n    }\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n  defineCommand,\n  type RegisteredCommand,\n} from \"../../platform/define-command.ts\";\nimport type { CliCommand, MigrateCommand } from \"../../types.ts\";\nimport { type MigrateMode, parseMigrateFlags } from \"./flags.ts\";\nimport { migrateStatusUsage, run as runMigrate, usage } from \"./index.ts\";\n\nexport function defineMigrateCommand(options: {\n  path: readonly string[];\n  mode: MigrateMode;\n}): RegisteredCommand {\n  return defineCommand({\n    legacy: \"migrate\",\n    parse: (rest) => parseMigrateFlags(rest, options.mode),\n    path: options.path,\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      runMigrate(ctx, parsed as MigrateCommand),\n    usage: options.mode === \"status\" ? migrateStatusUsage : usage,\n  });\n}\n","import type { AthenaPrincipal } from \"../runtime/data/principal.ts\";\nimport type {\n  PolicyExpr,\n  PolicyOperand,\n  PolicyValue,\n  SubjectRef,\n} from \"./types.ts\";\n\nexport class AthenaPolicyBindError extends Error {\n  readonly code = \"ATHENA_POLICY_SUBJECT_MISSING\";\n  readonly slot: string;\n\n  constructor(slot: string) {\n    super(\n      `ATHENA_POLICY_SUBJECT_MISSING: required subject slot \"${slot}\" is not bound`\n    );\n    this.name = \"AthenaPolicyBindError\";\n    this.slot = slot;\n  }\n}\n\nfunction slotName(subject: SubjectRef): string {\n  return subject.slot === \"claim\" ? `claim:${subject.path}` : subject.slot;\n}\n\nfunction subjectValue(\n  subject: SubjectRef,\n  principal: AthenaPrincipal\n): PolicyValue {\n  switch (subject.slot) {\n    case \"userId\":\n      if (!principal.userId) {\n        throw new AthenaPolicyBindError(\"userId\");\n      }\n      return { type: \"string\", value: principal.userId };\n    case \"organizationId\":\n      if (!principal.organizationId) {\n        throw new AthenaPolicyBindError(\"organizationId\");\n      }\n      return { type: \"string\", value: principal.organizationId };\n    case \"tenantId\":\n      if (!principal.tenantId) {\n        throw new AthenaPolicyBindError(\"tenantId\");\n      }\n      return { type: \"string\", value: principal.tenantId };\n    case \"sessionId\":\n      if (!principal.sessionId) {\n        throw new AthenaPolicyBindError(\"sessionId\");\n      }\n      return { type: \"string\", value: principal.sessionId };\n    case \"roles\":\n      return {\n        type: \"list\",\n        value: principal.role\n          ? [{ type: \"string\", value: principal.role }]\n          : [],\n      };\n    case \"permissions\":\n      return {\n        type: \"list\",\n        value: principal.rights.map((right) => ({\n          type: \"string\" as const,\n          value: right,\n        })),\n      };\n    case \"claim\": {\n      const raw = principal.claims?.[subject.path];\n      if (raw === undefined) {\n        throw new AthenaPolicyBindError(`claim:${subject.path}`);\n      }\n      if (raw === null) {\n        return { type: \"null\" };\n      }\n      if (typeof raw === \"boolean\") {\n        return { type: \"bool\", value: raw };\n      }\n      if (typeof raw === \"number\" && Number.isInteger(raw)) {\n        return { type: \"integer\", value: raw };\n      }\n      return { type: \"string\", value: String(raw) };\n    }\n    default:\n      throw new AthenaPolicyBindError(slotName(subject));\n  }\n}\n\nexport function bindPolicyOperand(\n  operand: PolicyOperand,\n  principal: AthenaPrincipal\n): PolicyOperand {\n  if (operand.kind !== \"subject\") {\n    return operand;\n  }\n  return {\n    kind: \"literal\",\n    value: subjectValue(operand.subject, principal),\n  };\n}\n\nexport function bindPolicyExpr(\n  expr: PolicyExpr,\n  principal: AthenaPrincipal\n): PolicyExpr {\n  switch (expr.op) {\n    case \"eq\":\n    case \"ne\":\n    case \"lt\":\n    case \"lte\":\n    case \"gt\":\n    case \"gte\":\n      return {\n        ...expr,\n        left: bindPolicyOperand(expr.left, principal),\n        right: bindPolicyOperand(expr.right, principal),\n      };\n    case \"is_null\":\n    case \"is_not_null\":\n      return {\n        ...expr,\n        operand: bindPolicyOperand(expr.operand, principal),\n      };\n    case \"in\":\n      return {\n        ...expr,\n        haystack: expr.haystack.map((item) =>\n          bindPolicyOperand(item, principal)\n        ),\n        needle: bindPolicyOperand(expr.needle, principal),\n      };\n    case \"and\":\n    case \"or\":\n      return {\n        ...expr,\n        exprs: expr.exprs.map((child) => bindPolicyExpr(child, principal)),\n      };\n    case \"not\":\n      return {\n        ...expr,\n        expr: bindPolicyExpr(expr.expr, principal),\n      };\n    default:\n      return expr;\n  }\n}\n","import type { PolicyExpr, PolicyOperand, PolicyValue } from \"./types.ts\";\n\nexport class AthenaPolicyEvalError extends Error {\n  readonly code = \"ATHENA_POLICY_UNSUPPORTED_EXPRESSION\";\n\n  constructor(message: string) {\n    super(`ATHENA_POLICY_UNSUPPORTED_EXPRESSION: ${message}`);\n    this.name = \"AthenaPolicyEvalError\";\n  }\n}\n\nfunction unwrapValue(value: PolicyValue): unknown {\n  switch (value.type) {\n    case \"null\":\n      return null;\n    case \"bool\":\n      return value.value;\n    case \"string\":\n    case \"uuid\":\n    case \"date_time\":\n      return value.value;\n    case \"integer\":\n      return value.value;\n    case \"list\":\n      return value.value.map(unwrapValue);\n    default:\n      return;\n  }\n}\n\nfunction readOperand(\n  operand: PolicyOperand,\n  row: Record<string, unknown>\n): unknown {\n  if (operand.kind === \"literal\") {\n    return unwrapValue(operand.value);\n  }\n  if (operand.kind === \"subject\") {\n    throw new AthenaPolicyEvalError(\n      `unbound subject slot \"${operand.subject.slot}\"`\n    );\n  }\n  const logical = operand.column.logical;\n  const physical = operand.column.physical;\n  if (physical && physical in row) {\n    return row[physical];\n  }\n  if (logical in row) {\n    return row[logical];\n  }\n  throw new AthenaPolicyEvalError(\n    `column \"${physical ?? logical}\" is missing from the row image`\n  );\n}\n\nfunction asNumber(value: unknown): number | undefined {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    return Number(value);\n  }\n  if (\n    typeof value === \"string\" &&\n    value.trim() !== \"\" &&\n    !Number.isNaN(Number(value))\n  ) {\n    return Number(value);\n  }\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n  if (left === null || left === undefined) {\n    return right === null || right === undefined;\n  }\n  if (right === null || right === undefined) {\n    return false;\n  }\n  if (typeof left === \"boolean\" || typeof right === \"boolean\") {\n    return Boolean(left) === Boolean(right);\n  }\n  const ln = asNumber(left);\n  const rn = asNumber(right);\n  if (ln !== undefined && rn !== undefined) {\n    return ln === rn;\n  }\n  return String(left) === String(right);\n}\n\nfunction compareOrd(left: unknown, right: unknown): number | undefined {\n  const ln = asNumber(left);\n  const rn = asNumber(right);\n  if (ln !== undefined && rn !== undefined) {\n    return ln === rn ? 0 : ln < rn ? -1 : 1;\n  }\n  if (typeof left === \"string\" && typeof right === \"string\") {\n    return left.localeCompare(right);\n  }\n}\n\nexport function evaluatePolicyExpr(\n  expr: PolicyExpr,\n  row: Record<string, unknown>\n): boolean {\n  switch (expr.op) {\n    case \"and\":\n      return expr.exprs.every((child) => evaluatePolicyExpr(child, row));\n    case \"or\":\n      return expr.exprs.some((child) => evaluatePolicyExpr(child, row));\n    case \"not\":\n      return !evaluatePolicyExpr(expr.expr, row);\n    case \"is_null\": {\n      const value = readOperand(expr.operand, row);\n      return value === null || value === undefined;\n    }\n    case \"is_not_null\": {\n      const value = readOperand(expr.operand, row);\n      return value !== null && value !== undefined;\n    }\n    case \"in\": {\n      const needle = readOperand(expr.needle, row);\n      if (expr.haystack.length === 0) {\n        return false;\n      }\n      return expr.haystack.some((item) =>\n        valuesEqual(needle, readOperand(item, row))\n      );\n    }\n    case \"eq\":\n      return valuesEqual(\n        readOperand(expr.left, row),\n        readOperand(expr.right, row)\n      );\n    case \"ne\":\n      return !valuesEqual(\n        readOperand(expr.left, row),\n        readOperand(expr.right, row)\n      );\n    case \"lt\":\n    case \"lte\":\n    case \"gt\":\n    case \"gte\": {\n      const ord = compareOrd(\n        readOperand(expr.left, row),\n        readOperand(expr.right, row)\n      );\n      if (ord === undefined) {\n        throw new AthenaPolicyEvalError(\n          `cannot compare operands for ${expr.op}`\n        );\n      }\n      if (expr.op === \"lt\") {\n        return ord < 0;\n      }\n      if (expr.op === \"lte\") {\n        return ord <= 0;\n      }\n      if (expr.op === \"gt\") {\n        return ord > 0;\n      }\n      return ord >= 0;\n    }\n    default:\n      throw new AthenaPolicyEvalError(\"unknown operator\");\n  }\n}\n","import { sha256HexUtf8 } from \"../node-crypto.ts\";\nimport type {\n  PolicyDefinition,\n  PolicyIrDocument,\n  PolicyPrincipal,\n} from \"./types.ts\";\n\nfunction principalSortKey(p: PolicyPrincipal): [number, string] {\n  switch (p.kind) {\n    case \"public\":\n      return [0, \"\"];\n    case \"anonymous\":\n      return [1, \"\"];\n    case \"authenticated\":\n      return [2, \"\"];\n    case \"role\":\n      return [3, p.name];\n    case \"permission\":\n      return [4, p.name];\n    case \"service\":\n      return [5, p.name];\n    case \"admin\":\n      return [6, \"\"];\n    default:\n      return [99, \"\"];\n  }\n}\n\nfunction principalJson(p: PolicyPrincipal): unknown {\n  switch (p.kind) {\n    case \"role\":\n    case \"permission\":\n    case \"service\":\n      return { kind: p.kind, name: p.name };\n    default:\n      return { kind: p.kind };\n  }\n}\n\nconst ACTION_NAMES = [\n  \"select\",\n  \"insert\",\n  \"update\",\n  \"delete\",\n  \"storage.object.read\",\n  \"storage.object.write\",\n  \"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  const out: string[] = [];\n  for (let i = 0; i < ACTION_BITS.length; i++) {\n    if (mask & ACTION_BITS[i]) {\n      out.push(ACTION_NAMES[i]);\n    }\n  }\n  return out;\n}\n\nfunction canonicalizePolicy(policy: PolicyDefinition): unknown {\n  const principals = [...policy.principals].sort((a, b) => {\n    const [ak, an] = principalSortKey(a);\n    const [bk, bn] = principalSortKey(b);\n    return ak - bk || an.localeCompare(bn);\n  });\n\n  return {\n    actions: actionsList(policy.actions),\n    check: policy.check ?? null,\n    composition: policy.composition,\n    extensions: {},\n    id: policy.id,\n    name: policy.name ?? null,\n    principals: principals.map(principalJson),\n    resource: {\n      database: policy.resource.database ?? null,\n      schema: policy.resource.schema ?? null,\n      table: policy.resource.table,\n    },\n    visibility: policy.visibility ?? null,\n  };\n}\n\n/** Semantic canonical form matching athena-policy-core::canonicalize_document. */\nexport function canonicalizeDocument(doc: PolicyIrDocument): unknown {\n  const policies = [...doc.policies]\n    .sort((a, b) => a.id.localeCompare(b.id))\n    .map(canonicalizePolicy);\n  return {\n    irVersion: doc.irVersion,\n    policies,\n  };\n}\n\n/** Recursively sort object keys for cross-language stable hashing. */\nfunction sortValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(sortValue);\n  }\n  if (value && typeof value === \"object\") {\n    const obj = value as Record<string, unknown>;\n    const out: Record<string, unknown> = {};\n    for (const key of Object.keys(obj).sort()) {\n      out[key] = sortValue(obj[key]);\n    }\n    return out;\n  }\n  return 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  const canonical = sortValue(canonicalizeDocument(doc));\n  // Avoid Buffer / node:crypto static imports so DTS emit does not need @types/node.\n  return 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  | \"select\"\n  | \"insert\"\n  | \"update\"\n  | \"delete\"\n  | \"storage.object.read\"\n  | \"storage.object.write\"\n  | \"storage.object.delete\";\n\nexport type PolicyCompositionName = \"permissive\" | \"restrictive\";\n\nexport type PolicyPrincipal =\n  | { kind: \"public\" }\n  | { kind: \"anonymous\" }\n  | { kind: \"authenticated\" }\n  | { kind: \"role\"; name: string }\n  | { kind: \"permission\"; name: string }\n  | { kind: \"service\"; name: string }\n  | { 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  | { slot: \"userId\" }\n  | { slot: \"organizationId\" }\n  | { slot: \"tenantId\" }\n  | { slot: \"sessionId\" }\n  | { slot: \"roles\" }\n  | { slot: \"permissions\" }\n  | { slot: \"claim\"; path: string };\n\nexport type PolicyValue =\n  | { type: \"null\" }\n  | { type: \"bool\"; value: boolean }\n  | { type: \"string\"; value: string }\n  | { type: \"integer\"; value: number }\n  | { type: \"uuid\"; value: string }\n  | { type: \"date_time\"; value: string }\n  | { type: \"list\"; value: PolicyValue[] };\n\nexport interface PolicyColumnRef {\n  logical: string;\n  physical?: string;\n}\n\nexport type PolicyOperand =\n  | { kind: \"column\"; column: PolicyColumnRef }\n  | { kind: \"subject\"; subject: SubjectRef }\n  | { kind: \"literal\"; value: PolicyValue };\n\nexport type PolicyExpr =\n  | { op: \"eq\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"ne\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"lt\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"lte\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"gt\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"gte\"; left: PolicyOperand; right: PolicyOperand }\n  | { op: \"is_null\"; operand: PolicyOperand }\n  | { op: \"is_not_null\"; operand: PolicyOperand }\n  | { op: \"in\"; needle: PolicyOperand; haystack: PolicyOperand[] }\n  | { op: \"and\"; exprs: PolicyExpr[] }\n  | { op: \"or\"; exprs: PolicyExpr[] }\n  | { op: \"not\"; expr: PolicyExpr };\n\nexport type PolicyResourceRef = AthenaResourceRef;\n\nexport interface PolicyDefinition {\n  /** Action bitmask: select=1, insert=2, update=4, delete=8, storage.object.read=16, write=32, delete=64 */\n  actions: number;\n  check?: PolicyExpr;\n  composition: PolicyCompositionName;\n  id: string;\n  name?: string;\n  principals: PolicyPrincipal[];\n  resource: PolicyResourceRef;\n  visibility?: PolicyExpr;\n}\n\nexport interface PolicyIrDocument {\n  irVersion: number;\n  policies: PolicyDefinition[];\n}\n\nexport const POLICY_IR_VERSION = 1 as const;\n\nexport const ACTION_BITS = {\n  delete: 8,\n  insert: 2,\n  select: 1,\n  \"storage.object.delete\": 64,\n  \"storage.object.read\": 16,\n  \"storage.object.write\": 32,\n  update: 4,\n} as const satisfies Record<PolicyActionName, number>;\n","import {\n  type AthenaResourceRef,\n  athenaResourceKeys,\n} from \"../schema/resource.ts\";\nimport { isKnownPolicyPrincipalKind } from \"./match-principal.ts\";\nimport {\n  ACTION_BITS,\n  type PolicyActionName,\n  type PolicyDefinition,\n  type PolicyExpr,\n  type PolicyOperand,\n  type PolicyPrincipal,\n} from \"./types.ts\";\n\nconst EXPR_OPS = new Set([\n  \"eq\",\n  \"ne\",\n  \"lt\",\n  \"lte\",\n  \"gt\",\n  \"gte\",\n  \"is_null\",\n  \"is_not_null\",\n  \"in\",\n  \"and\",\n  \"or\",\n  \"not\",\n]);\n\nconst OPERAND_KINDS = new Set([\"column\", \"subject\", \"literal\"]);\n\nexport class AthenaPolicyConfigError extends Error {\n  readonly code = \"ATHENA_POLICY_INVALID\";\n\n  constructor(message: string) {\n    super(`ATHENA_POLICY_INVALID: ${message}`);\n    this.name = \"AthenaPolicyConfigError\";\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 validateOperand(operand: PolicyOperand, path: string): void {\n  if (!isRecord(operand) || typeof operand.kind !== \"string\") {\n    throw new AthenaPolicyConfigError(`malformed operand at ${path}`);\n  }\n  if (!OPERAND_KINDS.has(operand.kind)) {\n    throw new AthenaPolicyConfigError(\n      `unsupported operand kind \"${operand.kind}\" at ${path}`\n    );\n  }\n  if (operand.kind === \"column\" && !operand.column?.logical) {\n    throw new AthenaPolicyConfigError(\n      `column operand missing logical name at ${path}`\n    );\n  }\n  if (operand.kind === \"subject\" && !operand.subject?.slot) {\n    throw new AthenaPolicyConfigError(\n      `subject operand missing slot at ${path}`\n    );\n  }\n}\n\nexport function validatePolicyExpr(expr: PolicyExpr, path = \"expr\"): void {\n  if (!isRecord(expr) || typeof expr.op !== \"string\") {\n    throw new AthenaPolicyConfigError(`malformed PolicyExpr at ${path}`);\n  }\n  if (!EXPR_OPS.has(expr.op)) {\n    throw new AthenaPolicyConfigError(\n      `unsupported operator \"${expr.op}\" at ${path}`\n    );\n  }\n  switch (expr.op) {\n    case \"eq\":\n    case \"ne\":\n    case \"lt\":\n    case \"lte\":\n    case \"gt\":\n    case \"gte\":\n      validateOperand(expr.left, `${path}.left`);\n      validateOperand(expr.right, `${path}.right`);\n      return;\n    case \"is_null\":\n    case \"is_not_null\":\n      validateOperand(expr.operand, `${path}.operand`);\n      return;\n    case \"in\":\n      validateOperand(expr.needle, `${path}.needle`);\n      if (!Array.isArray(expr.haystack)) {\n        throw new AthenaPolicyConfigError(`malformed in.haystack at ${path}`);\n      }\n      expr.haystack.forEach((item, index) => {\n        validateOperand(item, `${path}.haystack[${index}]`);\n      });\n      return;\n    case \"and\":\n    case \"or\":\n      if (!Array.isArray(expr.exprs) || expr.exprs.length === 0) {\n        throw new AthenaPolicyConfigError(\n          `malformed ${expr.op}.exprs at ${path}`\n        );\n      }\n      expr.exprs.forEach((item, index) => {\n        validatePolicyExpr(item, `${path}.exprs[${index}]`);\n      });\n      return;\n    case \"not\":\n      validatePolicyExpr(expr.expr, `${path}.expr`);\n  }\n}\n\nfunction validatePrincipal(principal: PolicyPrincipal, path: string): void {\n  if (!isRecord(principal) || typeof principal.kind !== \"string\") {\n    throw new AthenaPolicyConfigError(`malformed principal at ${path}`);\n  }\n  if (!isKnownPolicyPrincipalKind(principal.kind)) {\n    throw new AthenaPolicyConfigError(\n      `unknown principal kind \"${principal.kind}\" at ${path}`\n    );\n  }\n  if (\n    (principal.kind === \"role\" ||\n      principal.kind === \"permission\" ||\n      principal.kind === \"service\") &&\n    !principal.name?.trim()\n  ) {\n    throw new AthenaPolicyConfigError(\n      `${principal.kind} principal missing name at ${path}`\n    );\n  }\n}\n\nexport function validatePolicyDefinition(definition: PolicyDefinition): void {\n  if (!definition?.id?.trim()) {\n    throw new AthenaPolicyConfigError(\"policy id is required\");\n  }\n  if (!definition.resource?.table?.trim()) {\n    throw new AthenaPolicyConfigError(\n      `policy ${definition.id} missing resource.table`\n    );\n  }\n  if (\n    typeof definition.actions !== \"number\" ||\n    definition.actions <= 0 ||\n    (definition.actions &\n      ~(\n        ACTION_BITS.select |\n        ACTION_BITS.insert |\n        ACTION_BITS.update |\n        ACTION_BITS.delete |\n        ACTION_BITS[\"storage.object.read\"] |\n        ACTION_BITS[\"storage.object.write\"] |\n        ACTION_BITS[\"storage.object.delete\"]\n      )) !==\n      0\n  ) {\n    throw new AthenaPolicyConfigError(\n      `policy ${definition.id} has invalid actions`\n    );\n  }\n  if (\n    definition.composition !== \"permissive\" &&\n    definition.composition !== \"restrictive\"\n  ) {\n    throw new AthenaPolicyConfigError(\n      `policy ${definition.id} has unknown composition`\n    );\n  }\n  if (!Array.isArray(definition.principals)) {\n    throw new AthenaPolicyConfigError(\n      `policy ${definition.id} principals must be an array`\n    );\n  }\n  definition.principals.forEach((item, index) => {\n    validatePrincipal(item, `${definition.id}.principals[${index}]`);\n  });\n  if (definition.visibility) {\n    validatePolicyExpr(definition.visibility, `${definition.id}.visibility`);\n  }\n  if (definition.check) {\n    validatePolicyExpr(definition.check, `${definition.id}.check`);\n  }\n}\n\nexport function actionsFromMask(mask: number): PolicyActionName[] {\n  const actions: PolicyActionName[] = [];\n  if (mask & ACTION_BITS.select) {\n    actions.push(\"select\");\n  }\n  if (mask & ACTION_BITS.insert) {\n    actions.push(\"insert\");\n  }\n  if (mask & ACTION_BITS.update) {\n    actions.push(\"update\");\n  }\n  if (mask & ACTION_BITS.delete) {\n    actions.push(\"delete\");\n  }\n  if (mask & ACTION_BITS[\"storage.object.read\"]) {\n    actions.push(\"storage.object.read\");\n  }\n  if (mask & ACTION_BITS[\"storage.object.write\"]) {\n    actions.push(\"storage.object.write\");\n  }\n  if (mask & ACTION_BITS[\"storage.object.delete\"]) {\n    actions.push(\"storage.object.delete\");\n  }\n  return actions;\n}\n\nexport function resourceKeys(resource: AthenaResourceRef): string[] {\n  return 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  PolicyActionName,\n  PolicyDefinition,\n  PolicyIrDocument,\n} from \"./types.ts\";\nimport {\n  AthenaPolicyConfigError,\n  actionsFromMask,\n  resourceKeys,\n  validatePolicyDefinition,\n} from \"./validate-ir.ts\";\n\nexport interface CreatePolicyRegistryOptions {\n  definitions: unknown;\n  mode: AthenaPolicyMode;\n  modelIndex?: AthenaRuntimeModelIndex;\n}\n\nexport interface AthenaPolicyRegistry {\n  get(resource: string, action: PolicyActionName): readonly PolicyDefinition[];\n  readonly mode: AthenaPolicyMode;\n  readonly revision: string;\n}\n\nfunction isPolicyDocument(value: unknown): value is PolicyIrDocument {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      Array.isArray((value as PolicyIrDocument).policies)\n  );\n}\n\nfunction isAuthored(\n  value: unknown\n): value is { definitions: PolicyDefinition[] } {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      Array.isArray((value as { definitions?: unknown }).definitions)\n  );\n}\n\nexport function normalizePolicyDefinitions(input: unknown): PolicyDefinition[] {\n  if (input == null) {\n    return [];\n  }\n  if (Array.isArray(input)) {\n    const out: PolicyDefinition[] = [];\n    for (const item of input) {\n      if (isAuthored(item) && !(\"resource\" in item)) {\n        out.push(...item.definitions);\n      } else {\n        out.push(item as PolicyDefinition);\n      }\n    }\n    return out;\n  }\n  if (isPolicyDocument(input)) {\n    return input.policies;\n  }\n  if (isAuthored(input)) {\n    return input.definitions;\n  }\n  throw new AthenaPolicyConfigError(\n    \"policies.definitions must be an array or Policy IR document\"\n  );\n}\n\nfunction lookupKeys(resource: string): string[] {\n  const trimmed = resource.trim();\n  if (!trimmed) {\n    return [];\n  }\n  const keys = [trimmed];\n  if (trimmed.includes(\".\")) {\n    const table = trimmed.split(\".\").pop();\n    if (table) {\n      keys.push(table);\n    }\n  } else {\n    keys.push(`public.${trimmed}`);\n  }\n  return keys;\n}\n\nexport function createPolicyRegistry(\n  options: CreatePolicyRegistryOptions\n): AthenaPolicyRegistry {\n  const definitions = normalizePolicyDefinitions(options.definitions);\n  if (options.mode === \"enforce\") {\n    for (const definition of definitions) {\n      validatePolicyDefinition(definition);\n    }\n  } else {\n    for (const definition of definitions) {\n      try {\n        validatePolicyDefinition(definition);\n      } catch {\n        throw new AthenaPolicyConfigError(\n          `invalid policy in ${options.mode} mode: ${definition?.id ?? \"<missing id>\"}`\n        );\n      }\n    }\n  }\n\n  if (options.mode === \"enforce\" && options.modelIndex) {\n    for (const definition of definitions) {\n      const found = resourceKeys(definition.resource).some((key) =>\n        options.modelIndex?.get(key)\n      );\n      if (!found) {\n        throw new AthenaPolicyConfigError(\n          `policy ${definition.id} references unknown resource ${definition.resource.schema ? `${definition.resource.schema}.` : \"\"}${definition.resource.table}`\n        );\n      }\n    }\n  }\n\n  const seen = new Set<string>();\n  for (const definition of definitions) {\n    if (seen.has(definition.id)) {\n      throw new AthenaPolicyConfigError(`duplicate policy id ${definition.id}`);\n    }\n    seen.add(definition.id);\n  }\n\n  const index = new Map<string, Map<PolicyActionName, PolicyDefinition[]>>();\n  for (const definition of definitions) {\n    for (const action of actionsFromMask(definition.actions)) {\n      for (const key of resourceKeys(definition.resource)) {\n        let byAction = index.get(key);\n        if (!byAction) {\n          byAction = new Map();\n          index.set(key, byAction);\n        }\n        const list = byAction.get(action) ?? [];\n        list.push(definition);\n        byAction.set(action, list);\n      }\n    }\n  }\n\n  const frozen = new Map<\n    string,\n    Map<PolicyActionName, readonly PolicyDefinition[]>\n  >();\n  for (const [resource, byAction] of index) {\n    const frozenActions = new Map<\n      PolicyActionName,\n      readonly PolicyDefinition[]\n    >();\n    for (const [action, list] of byAction) {\n      frozenActions.set(action, Object.freeze([...list]));\n    }\n    frozen.set(resource, frozenActions);\n  }\n\n  const revision = fingerprintDocument({\n    irVersion: 1,\n    policies: definitions,\n  });\n\n  return {\n    get(resource, action) {\n      for (const key of lookupKeys(resource)) {\n        const list = frozen.get(key)?.get(action);\n        if (list) {\n          return list;\n        }\n      }\n      return Object.freeze([]);\n    },\n    mode: options.mode,\n    revision,\n  };\n}\n","import { normalizePolicyDefinitions } from \"./registry.ts\";\nimport {\n  ACTION_BITS,\n  type PolicyActionName,\n  type PolicyIrDocument,\n} from \"./types.ts\";\nimport { actionsFromMask, resourceKeys } from \"./validate-ir.ts\";\n\nexport type AthenaPolicyCoverageCellKind =\n  | \"permissive\"\n  | \"restrictive-only\"\n  | \"permissive+restrictive\"\n  | \"none\";\n\nexport type AthenaPolicyCoverageCell = {\n  action: PolicyActionName;\n  cell: AthenaPolicyCoverageCellKind;\n  resource: string;\n};\n\nexport type AthenaPolicyCoverageReport = {\n  cells: AthenaPolicyCoverageCell[];\n};\n\nconst ACTIONS: readonly PolicyActionName[] = [\n  \"select\",\n  \"insert\",\n  \"update\",\n  \"delete\",\n];\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n  if (\n    input &&\n    typeof input === \"object\" &&\n    Array.isArray((input as PolicyIrDocument).policies)\n  ) {\n    return input as PolicyIrDocument;\n  }\n  return {\n    irVersion: 1,\n    policies: normalizePolicyDefinitions(input),\n  };\n}\n\nfunction qualify(resource: { schema?: string; table: string }): string {\n  return resource.schema\n    ? `${resource.schema}.${resource.table}`\n    : resource.table;\n}\n\nfunction cellKind(\n  permissive: boolean,\n  restrictive: boolean\n): AthenaPolicyCoverageCellKind {\n  if (permissive && restrictive) {\n    return \"permissive+restrictive\";\n  }\n  if (permissive) {\n    return \"permissive\";\n  }\n  if (restrictive) {\n    return \"restrictive-only\";\n  }\n  return \"none\";\n}\n\n/**\n * Coverage **cells** per resource × action — not a binary covered flag.\n */\nexport function coverageAthenaPolicy(\n  document: unknown,\n  options?: { resources?: readonly string[] }\n): AthenaPolicyCoverageReport {\n  const doc = asDocument(document);\n  const resources = new Set<string>(options?.resources ?? []);\n  for (const policy of doc.policies) {\n    resources.add(qualify(policy.resource));\n    for (const key of resourceKeys(policy.resource)) {\n      resources.add(key);\n    }\n  }\n  if (resources.size === 0) {\n    resources.add(\"invoices\");\n  }\n\n  const cells: AthenaPolicyCoverageCell[] = [];\n  for (const resource of [...resources].sort()) {\n    for (const action of ACTIONS) {\n      let permissive = false;\n      let restrictive = false;\n      for (const policy of doc.policies) {\n        const keys = resourceKeys(policy.resource);\n        const matches =\n          keys.includes(resource) ||\n          qualify(policy.resource) === resource ||\n          policy.resource.table === resource ||\n          resource.includes(policy.resource.table);\n        if (!matches) {\n          continue;\n        }\n        if (\n          (policy.actions & ACTION_BITS[action]) === 0 &&\n          !actionsFromMask(policy.actions).includes(action)\n        ) {\n          continue;\n        }\n        if ((policy.actions & ACTION_BITS[action]) === 0) {\n          continue;\n        }\n        if (policy.composition === \"restrictive\") {\n          restrictive = true;\n        } else {\n          permissive = true;\n        }\n      }\n      cells.push({\n        action,\n        cell: cellKind(permissive, restrictive),\n        resource,\n      });\n    }\n  }\n  return { cells };\n}\n","export type AthenaMalformedRightsSource =\n  | \"athena-session\"\n  | \"custom-trusted\"\n  | \"jwt\"\n  | \"policy\"\n  | \"principal\"\n  | \"service\";\n\nexport const ATHENA_MALFORMED_RIGHTS_KIND = \"athena.rights.malformed\" as const;\n\nexport interface AthenaMalformedRightsDiagnostic {\n  kind: typeof ATHENA_MALFORMED_RIGHTS_KIND;\n  malformedKeyCount: number;\n  source: AthenaMalformedRightsSource;\n}\n\nexport type AthenaMalformedRightsDiagnosticListener = (\n  diagnostic: AthenaMalformedRightsDiagnostic\n) => void;\n\nconst listeners = new Set<AthenaMalformedRightsDiagnosticListener>();\n\nexport function subscribeAthenaMalformedRightsDiagnostics(\n  listener: AthenaMalformedRightsDiagnosticListener\n): () => void {\n  listeners.add(listener);\n  return () => {\n    listeners.delete(listener);\n  };\n}\n\nexport function emitAthenaMalformedRightsDiagnostic(\n  source: AthenaMalformedRightsSource,\n  malformedKeyCount: number\n): void {\n  if (malformedKeyCount <= 0) {\n    return;\n  }\n  const diagnostic: AthenaMalformedRightsDiagnostic = Object.freeze({\n    kind: ATHENA_MALFORMED_RIGHTS_KIND,\n    malformedKeyCount,\n    source,\n  });\n  for (const listener of [...listeners]) {\n    listener(diagnostic);\n  }\n  console.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  claims?: Readonly<Record<string, unknown>>;\n  /** Legacy provenance; never used to satisfy Right checks. */\n  grants: readonly string[];\n  organizationId?: string;\n  oauth?: AthenaOAuthPrincipalContext;\n  rights: readonly AthenaRightKey[];\n  role?: string;\n  service?: string;\n  sessionId?: string;\n  tenantId?: string;\n  userId?: string;\n}\n\nexport interface AthenaOAuthPrincipalContext {\n  clientId: string;\n  grantId: string;\n  resource: string;\n  scopes: readonly string[];\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\nexport type AthenaRuntimeJwtVerifier = (input: {\n  headers: Headers;\n  request?: Request;\n  requestId?: string;\n}) =>\n  | Promise<AthenaResolvedPrincipal | null>\n  | AthenaResolvedPrincipal\n  | null;\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  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  hasAuthorizationAssignment?(userId: string): Promise<boolean>;\n  resolveEffectiveRights?(input: {\n    activeOrganizationId?: string | null;\n    userId: string;\n  }): Promise<readonly string[]>;\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      jwtVerifier?: AthenaRuntimeJwtVerifier;\n      verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n    }\n  | {\n      mode: \"jwt\";\n      verifyToken: AthenaRuntimeJwtVerifier;\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      jwtVerifier?: AthenaRuntimeJwtVerifier;\n      mode: \"athena-session\";\n      verifyOrganizationMembership?: AthenaRuntimeOrganizationVerifier;\n    }\n  | {\n      mode: \"jwt\";\n      verifyToken: AthenaRuntimeJwtVerifier;\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.oauth\n      ? {\n          oauth: Object.freeze({\n            clientId: principal.oauth.clientId,\n            grantId: principal.oauth.grantId,\n            resource: principal.oauth.resource,\n            scopes: Object.freeze([...principal.oauth.scopes]),\n          }),\n        }\n      : {}),\n    ...(principal.tenantId ? { tenantId: principal.tenantId } : {}),\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  type AthenaPrincipal,\n  type AthenaPrincipalInput,\n  normalizeAthenaPrincipal,\n} from \"../runtime/data/principal.ts\";\nimport { bindPolicyExpr } from \"./bind.ts\";\nimport { decideAthenaPolicy } from \"./decide.ts\";\nimport { evaluatePolicyExpr } from \"./eval-expr.ts\";\nimport {\n  createPolicyRegistry,\n  normalizePolicyDefinitions,\n} from \"./registry.ts\";\nimport type {\n  PolicyActionName,\n  PolicyExpr,\n  PolicyIrDocument,\n} from \"./types.ts\";\n\nexport type AthenaPolicyExplainInput = {\n  action: PolicyActionName;\n  document: PolicyIrDocument | unknown;\n  principal?: unknown;\n  resource: string;\n  row?: Record<string, unknown>;\n};\n\nexport type AthenaPolicyExplainResult = {\n  action: PolicyActionName;\n  allowed?: boolean;\n  bound: false;\n  composition: {\n    permissive: number;\n    restrictive: number;\n  };\n  matchedPolicyIds: readonly string[];\n  principals: unknown[];\n  reason?: string;\n  resource: string;\n  unboundCheck?: PolicyExpr;\n  unboundVisibility?: PolicyExpr;\n};\n\nexport type AthenaPolicySimulateInput = AthenaPolicyExplainInput & {\n  row: Record<string, unknown>;\n};\n\nexport type AthenaPolicySimulateResult = {\n  action: PolicyActionName;\n  allowed: boolean;\n  bound: true;\n  matchedPolicyIds: readonly string[];\n  reason?: string;\n  resource: string;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n  if (\n    input &&\n    typeof input === \"object\" &&\n    Array.isArray((input as PolicyIrDocument).policies)\n  ) {\n    return input as PolicyIrDocument;\n  }\n  return {\n    irVersion: 1,\n    policies: normalizePolicyDefinitions(input),\n  };\n}\n\nfunction principalFromInput(input: unknown): AthenaPrincipal {\n  if (!input || typeof input !== \"object\") {\n    return normalizeAthenaPrincipal({ authenticated: false });\n  }\n  const record = input as Record<string, unknown>;\n  const kind = typeof record.kind === \"string\" ? record.kind : undefined;\n  const authenticated =\n    record.authenticated === true ||\n    kind === \"authenticated\" ||\n    kind === \"admin\" ||\n    kind === \"role\" ||\n    kind === \"service\";\n  const claims =\n    record.claims && typeof record.claims === \"object\"\n      ? (record.claims as Record<string, unknown>)\n      : undefined;\n  const principal: AthenaPrincipalInput = {\n    authenticated,\n    grants: Array.isArray(record.grants)\n      ? record.grants.map((item) => String(item))\n      : [],\n    rights: Array.isArray(record.rights)\n      ? record.rights.map((item) => String(item))\n      : [],\n    ...(typeof record.userId === \"string\" ? { userId: record.userId } : {}),\n    ...(typeof record.organizationId === \"string\"\n      ? { organizationId: record.organizationId }\n      : {}),\n    ...(typeof record.sessionId === \"string\"\n      ? { sessionId: record.sessionId }\n      : {}),\n    ...(typeof record.role === \"string\"\n      ? { role: record.role }\n      : kind === \"role\" && typeof record.name === \"string\"\n        ? { role: record.name }\n        : {}),\n    ...(typeof record.service === \"string\" ? { service: record.service } : {}),\n    ...(claims ? { claims } : {}),\n  };\n  return 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  input: AthenaPolicyExplainInput\n): AthenaPolicyExplainResult {\n  const document = asDocument(input.document);\n  const principal = principalFromInput(input.principal);\n  const registry = createPolicyRegistry({\n    definitions: document,\n    mode: \"observe\",\n  });\n  const decision = decideAthenaPolicy(registry, {\n    action: input.action,\n    principal,\n    resource: input.resource,\n  });\n  const matching = document.policies.filter((item) =>\n    decision.matchedPolicyIds.includes(item.id)\n  );\n  return {\n    action: input.action,\n    allowed: decision.allowed,\n    bound: false,\n    composition: {\n      permissive: matching.filter((item) => item.composition === \"permissive\")\n        .length,\n      restrictive: matching.filter((item) => item.composition === \"restrictive\")\n        .length,\n    },\n    matchedPolicyIds: decision.matchedPolicyIds,\n    principals: matching.flatMap((item) => item.principals),\n    reason: decision.reason,\n    resource: input.resource,\n    ...(decision.check ? { unboundCheck: decision.check } : {}),\n    ...(decision.visibility ? { unboundVisibility: decision.visibility } : {}),\n  };\n}\n\n/**\n * Concrete evaluator: binds subject slots and evaluates against `--row`.\n */\nexport function simulateAthenaPolicy(\n  input: AthenaPolicySimulateInput\n): AthenaPolicySimulateResult {\n  const document = asDocument(input.document);\n  const principal = principalFromInput(input.principal);\n  const registry = createPolicyRegistry({\n    definitions: document,\n    mode: \"observe\",\n  });\n  const decision = decideAthenaPolicy(registry, {\n    action: input.action,\n    principal,\n    resource: input.resource,\n  });\n  if (!decision.allowed) {\n    return {\n      action: input.action,\n      allowed: false,\n      bound: true,\n      matchedPolicyIds: decision.matchedPolicyIds,\n      reason: decision.reason,\n      resource: input.resource,\n    };\n  }\n  let allowed = true;\n  if (decision.visibility) {\n    const bound = bindPolicyExpr(decision.visibility, principal);\n    allowed = evaluatePolicyExpr(bound, input.row);\n  }\n  if (allowed && decision.check) {\n    const bound = bindPolicyExpr(decision.check, principal);\n    allowed = evaluatePolicyExpr(bound, input.row);\n  }\n  return {\n    action: input.action,\n    allowed,\n    bound: true,\n    matchedPolicyIds: decision.matchedPolicyIds,\n    reason: allowed ? \"allowed\" : \"row_predicate\",\n    resource: input.resource,\n  };\n}\n","import { normalizePolicyDefinitions } from \"./registry.ts\";\nimport {\n  ACTION_BITS,\n  type PolicyActionName,\n  type PolicyDefinition,\n  type PolicyExpr,\n  type PolicyIrDocument,\n  type PolicyOperand,\n} from \"./types.ts\";\n\nexport type AthenaPolicyLintSeverity = \"error\" | \"warning\" | \"info\";\n\nexport type AthenaPolicyLintFinding = {\n  code: string;\n  message: string;\n  policyId?: string;\n  severity: AthenaPolicyLintSeverity;\n};\n\nexport type AthenaPolicyLintReport = {\n  findings: AthenaPolicyLintFinding[];\n};\n\nexport type AthenaPolicyLintOptions = {\n  columnHints?: Record<string, readonly string[]>;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n  if (\n    input &&\n    typeof input === \"object\" &&\n    Array.isArray((input as PolicyIrDocument).policies)\n  ) {\n    return input as PolicyIrDocument;\n  }\n  return {\n    irVersion: 1,\n    policies: normalizePolicyDefinitions(input),\n  };\n}\n\nfunction walkOperands(\n  expr: PolicyExpr | undefined,\n  visit: (operand: PolicyOperand) => void\n): void {\n  if (!expr) {\n    return;\n  }\n  switch (expr.op) {\n    case \"eq\":\n    case \"ne\":\n    case \"lt\":\n    case \"lte\":\n    case \"gt\":\n    case \"gte\":\n      visit(expr.left);\n      visit(expr.right);\n      return;\n    case \"is_null\":\n    case \"is_not_null\":\n      visit(expr.operand);\n      return;\n    case \"in\":\n      visit(expr.needle);\n      for (const item of expr.haystack) {\n        visit(item);\n      }\n      return;\n    case \"and\":\n    case \"or\":\n      for (const child of expr.exprs) {\n        walkOperands(child, visit);\n      }\n      return;\n    case \"not\":\n      walkOperands(expr.expr, visit);\n  }\n}\n\nfunction hasAction(\n  definition: PolicyDefinition,\n  action: PolicyActionName\n): boolean {\n  return (definition.actions & ACTION_BITS[action]) !== 0;\n}\n\nfunction isPublicPrincipal(definition: PolicyDefinition): boolean {\n  return definition.principals.some((item) => item.kind === \"public\");\n}\n\nfunction hintedColumns(\n  hints: Record<string, readonly string[]> | undefined,\n  table: string\n): Set<string> | undefined {\n  if (!hints) {\n    return;\n  }\n  const direct = hints[table];\n  if (direct) {\n    return new Set(direct);\n  }\n  for (const [key, columns] of Object.entries(hints)) {\n    if (\n      key === table ||\n      key.endsWith(`.${table}`) ||\n      table.endsWith(`.${key}`)\n    ) {\n      return new Set(columns);\n    }\n  }\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  document: unknown,\n  options?: AthenaPolicyLintOptions\n): AthenaPolicyLintReport {\n  const doc = asDocument(document);\n  const findings: AthenaPolicyLintFinding[] = [];\n\n  for (const definition of doc.policies) {\n    if (hasAction(definition, \"update\") && isPublicPrincipal(definition)) {\n      const conditional = Boolean(definition.visibility || definition.check);\n      if (conditional) {\n        findings.push({\n          code: \"POL-PUBLIC-UPDATE-CONDITIONAL\",\n          message: `Policy ${definition.id} allows public UPDATE under a row predicate.`,\n          policyId: definition.id,\n          severity: \"warning\",\n        });\n      } else {\n        findings.push({\n          code: \"POL-PUBLIC-UPDATE-UNCONDITIONAL\",\n          message: `Policy ${definition.id} allows unconditional public UPDATE.`,\n          policyId: definition.id,\n          severity: \"error\",\n        });\n      }\n    }\n\n    const columns = hintedColumns(\n      options?.columnHints,\n      definition.resource.table\n    );\n    if (columns) {\n      const visit = (operand: PolicyOperand) => {\n        if (operand.kind !== \"column\") {\n          return;\n        }\n        const logical = operand.column.logical;\n        const physical = operand.column.physical;\n        if (columns.has(logical) || (physical && columns.has(physical))) {\n          return;\n        }\n        findings.push({\n          code: \"POL-COLUMN-HINT-UNKNOWN\",\n          message: `Policy ${definition.id} references column \"${logical}\" not listed in column hints.`,\n          policyId: definition.id,\n          severity: \"info\",\n        });\n      };\n      walkOperands(definition.visibility, visit);\n      walkOperands(definition.check, visit);\n    }\n  }\n\n  return { findings };\n}\n","import type { SchemaDiffOperation } from \"../schema/diff/types.ts\";\nimport { normalizePolicyDefinitions } from \"./registry.ts\";\nimport type {\n  PolicyDefinition,\n  PolicyExpr,\n  PolicyIrDocument,\n  PolicyOperand,\n} from \"./types.ts\";\nimport { resourceKeys } from \"./validate-ir.ts\";\n\nexport type AthenaPolicySchemaImpactHit = {\n  model: string;\n  operations: string[];\n  policyId: string;\n  resource: string;\n  table: string;\n};\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n  if (\n    input &&\n    typeof input === \"object\" &&\n    Array.isArray((input as PolicyIrDocument).policies)\n  ) {\n    return input as PolicyIrDocument;\n  }\n  return {\n    irVersion: 1,\n    policies: normalizePolicyDefinitions(input),\n  };\n}\n\nfunction walkOperands(\n  expr: PolicyExpr | undefined,\n  visit: (operand: PolicyOperand) => void\n): void {\n  if (!expr) {\n    return;\n  }\n  switch (expr.op) {\n    case \"eq\":\n    case \"ne\":\n    case \"lt\":\n    case \"lte\":\n    case \"gt\":\n    case \"gte\":\n      visit(expr.left);\n      visit(expr.right);\n      return;\n    case \"is_null\":\n    case \"is_not_null\":\n      visit(expr.operand);\n      return;\n    case \"in\":\n      visit(expr.needle);\n      for (const item of expr.haystack) {\n        visit(item);\n      }\n      return;\n    case \"and\":\n    case \"or\":\n      for (const child of expr.exprs) {\n        walkOperands(child, visit);\n      }\n      return;\n    case \"not\":\n      walkOperands(expr.expr, visit);\n  }\n}\n\nfunction columnNames(definition: PolicyDefinition): Set<string> {\n  const names = new Set<string>();\n  const visit = (operand: PolicyOperand) => {\n    if (operand.kind !== \"column\") {\n      return;\n    }\n    names.add(operand.column.logical);\n    if (operand.column.physical) {\n      names.add(operand.column.physical);\n    }\n  };\n  walkOperands(definition.visibility, visit);\n  walkOperands(definition.check, visit);\n  return names;\n}\n\nfunction tableIdentity(op: SchemaDiffOperation): {\n  name?: string;\n  schema?: string;\n} {\n  if (\n    op.kind === \"drop_table\" ||\n    op.kind === \"drop_column\" ||\n    op.kind === \"rename_column\" ||\n    op.kind === \"add_column\" ||\n    op.kind === \"alter_column\"\n  ) {\n    return { name: op.table.name, schema: op.table.schema };\n  }\n  if (op.kind === \"rename_table\") {\n    return { name: op.from.name, schema: op.from.schema };\n  }\n  if (op.kind === \"create_table\") {\n    return { name: op.table.name, schema: op.table.schema };\n  }\n  return {};\n}\n\nfunction policyMatchesTable(\n  definition: PolicyDefinition,\n  tableName: string | undefined,\n  schema?: string\n): boolean {\n  if (!tableName) {\n    return false;\n  }\n  const keys = resourceKeys(definition.resource);\n  if (keys.includes(tableName) || definition.resource.table === tableName) {\n    return true;\n  }\n  if (schema && keys.includes(`${schema}.${tableName}`)) {\n    return true;\n  }\n  return false;\n}\n\nfunction impactKinds(op: SchemaDiffOperation, columns: Set<string>): boolean {\n  if (op.kind === \"drop_table\" || op.kind === \"rename_table\") {\n    return true;\n  }\n  if (op.kind === \"drop_column\") {\n    return columns.has(op.column.name);\n  }\n  if (op.kind === \"rename_column\") {\n    return columns.has(op.from) || columns.has(op.to);\n  }\n  return 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  operations: readonly SchemaDiffOperation[];\n  policies: unknown;\n}): AthenaPolicySchemaImpactHit[] {\n  const document = asDocument(options.policies);\n  const hits = new Map<string, AthenaPolicySchemaImpactHit>();\n\n  for (const definition of document.policies) {\n    const columns = columnNames(definition);\n    const operations: string[] = [];\n    for (const op of options.operations) {\n      const identity = tableIdentity(op);\n      if (!policyMatchesTable(definition, identity.name, identity.schema)) {\n        continue;\n      }\n      if (\n        !impactKinds(op, columns) &&\n        op.kind !== \"drop_table\" &&\n        op.kind !== \"rename_table\"\n      ) {\n        continue;\n      }\n      if (\n        op.kind === \"drop_table\" ||\n        op.kind === \"rename_table\" ||\n        impactKinds(op, columns)\n      ) {\n        operations.push(op.kind);\n      }\n    }\n    if (operations.length === 0) {\n      continue;\n    }\n    const table = definition.resource.table;\n    const resource = definition.resource.schema\n      ? `${definition.resource.schema}.${table}`\n      : table;\n    hits.set(definition.id, {\n      model: table,\n      operations: [...new Set(operations)],\n      policyId: definition.id,\n      resource,\n      table,\n    });\n  }\n\n  return [...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  DecisionOutcome,\n  DecisionReasonKind,\n  PrincipalKind,\n  PublicAuthorizationMessage,\n} from \"../authorization/types.ts\";\nexport { publicAuthorizationMessage } from \"../authorization/types.ts\";\nexport { applyAthenaPolicyDecision } from \"./apply.ts\";\nexport { bindPolicyExpr } from \"./bind.ts\";\nexport type {\n  AthenaPolicyCoverageCell,\n  AthenaPolicyCoverageCellKind,\n  AthenaPolicyCoverageReport,\n} from \"./coverage.ts\";\nexport { coverageAthenaPolicy } from \"./coverage.ts\";\nexport { decideAthenaPolicy } from \"./decide.ts\";\nexport type {\n  AthenaPolicyDecision,\n  AthenaPolicyDecisionReason,\n  AthenaPolicyMode,\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  AthenaPolicyExplainInput,\n  AthenaPolicyExplainResult,\n  AthenaPolicySimulateInput,\n  AthenaPolicySimulateResult,\n} from \"./explain.ts\";\nexport { explainAthenaPolicy, simulateAthenaPolicy } from \"./explain.ts\";\nexport type {\n  PolicyExprNode,\n  PolicyOperandInput,\n  PolicyOperandNode,\n} from \"./expr-builders.ts\";\nexport { and, auth, not, or } from \"./expr-builders.ts\";\nexport { canonicalizeDocument, fingerprintDocument } from \"./fingerprint.ts\";\nexport type {\n  AthenaPolicyLintFinding,\n  AthenaPolicyLintOptions,\n  AthenaPolicyLintReport,\n  AthenaPolicyLintSeverity,\n} from \"./lint.ts\";\nexport { lintAthenaPolicy } from \"./lint.ts\";\nexport {\n  matchPolicyPrincipal,\n  policyAppliesToPrincipal,\n} from \"./match-principal.ts\";\nexport type {\n  AuthoredPolicy,\n  PolicyActionConfig,\n  PolicyConfig,\n  PolicyPrincipalInput,\n} from \"./policy.ts\";\nexport { policy } from \"./policy.ts\";\nexport {\n  authenticatedOnly,\n  organizationScoped,\n  ownerOrRole,\n  publicRead,\n  roleRestricted,\n  serviceOnly,\n  tenantScoped,\n  userOwned,\n} from \"./presets.ts\";\nexport type {\n  AthenaPolicyRegistry,\n  CreatePolicyRegistryOptions,\n} from \"./registry.ts\";\nexport {\n  createPolicyRegistry,\n  normalizePolicyDefinitions,\n} from \"./registry.ts\";\nexport type { PolicyRowProxy } from \"./row.ts\";\nexport type { AthenaPolicySchemaImpactHit } from \"./schema-impact.ts\";\nexport { reportAthenaPolicySchemaImpact } from \"./schema-impact.ts\";\nexport type {\n  AthenaResourceIdentity,\n  AthenaResourceRef,\n  PolicyActionName,\n  PolicyCompositionName,\n  PolicyDefinition,\n  PolicyExpr,\n  PolicyIrDocument,\n  PolicyOperand,\n  PolicyPrincipal,\n  PolicyResourceBinding,\n  PolicyResourceRef,\n  PolicyValue,\n  SubjectRef,\n} from \"./types.ts\";\nexport {\n  ACTION_BITS,\n  POLICY_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  normalizePolicyDefinitions,\n  POLICY_IR_VERSION,\n  type PolicyIrDocument,\n} from \"../../../policy/index.ts\";\n\nexport interface LoadedPolicyDocument {\n  config: AthenaConfig;\n  configPath: string;\n  document: PolicyIrDocument;\n}\n\nfunction asDocument(input: unknown): PolicyIrDocument {\n  if (\n    input &&\n    typeof input === \"object\" &&\n    Array.isArray((input as PolicyIrDocument).policies)\n  ) {\n    return input as PolicyIrDocument;\n  }\n  return {\n    irVersion: POLICY_IR_VERSION,\n    policies: normalizePolicyDefinitions(input),\n  };\n}\n\nfunction pickModuleExport(module: Record<string, unknown>): unknown {\n  if (module.default !== undefined) {\n    const exported = module.default;\n    if (exported && typeof exported === \"object\") {\n      const record = exported as Record<string, unknown>;\n      if (Array.isArray(record.policies) || Array.isArray(record.definitions)) {\n        return exported;\n      }\n      if (record.policies && typeof record.policies === \"object\") {\n        return record.policies;\n      }\n    }\n    return exported;\n  }\n  if (module.policies !== undefined) {\n    return module.policies;\n  }\n  if (module.document !== undefined) {\n    return module.document;\n  }\n  return module;\n}\n\nasync function importPoliciesPath(\n  configPath: string,\n  relativePath: string\n): Promise<unknown> {\n  const base = dirname(configPath);\n  const absolute = isAbsolute(relativePath)\n    ? relativePath\n    : resolve(base, relativePath);\n  const module = (await import(pathToFileURL(absolute).href)) as Record<\n    string,\n    unknown\n  >;\n  return pickModuleExport(module);\n}\n\nexport async function loadPolicyDocument(options: {\n  configPath?: string;\n  cwd: string;\n}): Promise<LoadedPolicyDocument> {\n  const loaded = await loadAthenaConfig({\n    configPath: options.configPath,\n    cwd: options.cwd,\n  });\n  const project = loaded.config;\n  if (project.policies != null) {\n    const definitions = project.policies.definitions ?? project.policies;\n    return {\n      config: project,\n      configPath: loaded.configPath,\n      document: asDocument(definitions),\n    };\n  }\n  const toolingPath = project.tooling?.policies;\n  if (!toolingPath) {\n    return {\n      config: project,\n      configPath: loaded.configPath,\n      document: { irVersion: POLICY_IR_VERSION, policies: [] },\n    };\n  }\n  const imported = await importPoliciesPath(loaded.configPath, toolingPath);\n  return {\n    config: project,\n    configPath: loaded.configPath,\n    document: asDocument(imported),\n  };\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  readonly [schemaObjectIdBrand]: \"SchemaObjectId\";\n};\n\nexport interface SchemaNameTriple {\n  readonly database: string;\n  readonly name: string;\n  readonly namespace: string;\n}\n\n/** Logical (Athena) vs physical (backend) identity. */\nexport interface SchemaObjectIdentity {\n  readonly logical: SchemaNameTriple;\n  readonly physical: SchemaNameTriple;\n}\n\nexport function asSchemaObjectId(id: string): SchemaObjectId {\n  return id as SchemaObjectId;\n}\n\nexport function schemaNameTriple(\n  database: string,\n  namespace: string,\n  name: string\n): SchemaNameTriple {\n  return { database, name, namespace };\n}\n\nexport function schemaObjectIdentity(\n  database: string,\n  namespace: string,\n  name: string,\n  physical: Partial<SchemaNameTriple> = {}\n): SchemaObjectIdentity {\n  return {\n    logical: schemaNameTriple(database, namespace, name),\n    physical: schemaNameTriple(\n      physical.database ?? database,\n      physical.namespace ?? namespace,\n      physical.name ?? name\n    ),\n  };\n}\n\nexport function physicalIdentityKey(identity: SchemaObjectIdentity): string {\n  const p = identity.physical;\n  return `${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  constructor(message: string) {\n    super(message);\n    this.name = \"SchemaIrError\";\n  }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction requireArray(value: unknown, label: string): unknown[] {\n  if (!Array.isArray(value)) {\n    throw new SchemaIrError(`${label} must be an array`);\n  }\n  return value;\n}\n\nfunction requireNonEmptyId(value: unknown, label: string): string {\n  if (typeof value !== \"string\" || value.length === 0) {\n    throw new SchemaIrError(`${label}.id is required`);\n  }\n  return value;\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): string {\n  if (typeof value !== \"string\" || value.length === 0) {\n    throw new SchemaIrError(`${label} must be a non-empty string`);\n  }\n  return value;\n}\n\nfunction requireOptionalNullableString(value: unknown, label: string): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (typeof value !== \"string\") {\n    throw new SchemaIrError(`${label} must be a string or null`);\n  }\n}\n\nfunction requireStringArray(value: unknown, label: string): string[] {\n  const items = requireArray(value, label);\n  return items.map((entry, index) =>\n    requireNonEmptyString(entry, `${label}[${index}]`)\n  );\n}\n\nfunction requireNonEmptyStringArray(value: unknown, label: string): string[] {\n  const items = requireStringArray(value, label);\n  if (items.length === 0) {\n    throw new SchemaIrError(`${label} is required`);\n  }\n  return items;\n}\n\nfunction requireOptionalIntegerParameter(\n  value: unknown,\n  label: string,\n  min: number\n): void {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (typeof value !== \"number\" || !Number.isInteger(value) || value < min) {\n    throw new SchemaIrError(\n      `${label} must be an integer >= ${String(min)} or null`\n    );\n  }\n}\n\nfunction requireUniqueId(id: string, seen: Set<string>, label: string): void {\n  if (seen.has(id)) {\n    throw new SchemaIrError(`Duplicate ${label} id \"${id}\"`);\n  }\n  seen.add(id);\n}\n\nfunction requireIdentity(value: unknown, label: string): void {\n  if (!isObject(value)) {\n    throw new SchemaIrError(`${label}.identity is required`);\n  }\n  for (const axis of [\"logical\", \"physical\"] as const) {\n    const side = value[axis];\n    if (!isObject(side)) {\n      throw new SchemaIrError(`${label}.identity.${axis} is required`);\n    }\n    for (const key of [\"database\", \"namespace\", \"name\"] as const) {\n      if (typeof side[key] !== \"string\") {\n        throw new SchemaIrError(\n          `${label}.identity.${axis}.${key} must be a string`\n        );\n      }\n    }\n    if (axis === \"physical\") {\n      requireNonEmptyString(side.name, `${label}.identity.physical.name`);\n    }\n  }\n}\n\nfunction physicalTableIdentityKey(identity: unknown): string {\n  if (!(isObject(identity) && isObject(identity.physical))) {\n    return \"\";\n  }\n  const physical = identity.physical;\n  if (\n    typeof physical.database !== \"string\" ||\n    typeof physical.namespace !== \"string\" ||\n    typeof physical.name !== \"string\"\n  ) {\n    return \"\";\n  }\n  return `${physical.database}\\0${physical.namespace}\\0${physical.name}`;\n}\n\nfunction physicalNamespaceScopeKey(identity: unknown): string {\n  if (!(isObject(identity) && isObject(identity.physical))) {\n    return \"\";\n  }\n  const physical = identity.physical;\n  if (\n    typeof physical.database !== \"string\" ||\n    typeof physical.namespace !== \"string\"\n  ) {\n    return \"\";\n  }\n  return `${physical.database}\\0${physical.namespace}`;\n}\n\nconst TYPE_KINDS = new Set([\"scalar\", \"enum\", \"native\"]);\nconst POSTGRES_INTERVAL_QUALIFIERS = new Set([\n  \"year\",\n  \"month\",\n  \"day\",\n  \"hour\",\n  \"minute\",\n  \"second\",\n  \"year to month\",\n  \"day to hour\",\n  \"day to minute\",\n  \"day to second\",\n  \"hour to minute\",\n  \"hour to second\",\n  \"minute to second\",\n]);\n\nfunction requireType(\n  value: unknown,\n  label: string,\n  enumRefs: Array<{ enumId: string; label: string }>\n): void {\n  if (!isObject(value)) {\n    throw new SchemaIrError(`${label}.type is required`);\n  }\n  if (typeof value.kind !== \"string\" || !TYPE_KINDS.has(value.kind)) {\n    throw new SchemaIrError(\n      `${label}.type.kind \"${String(value.kind)}\" is unsupported`\n    );\n  }\n  if (!isObject(value.native)) {\n    throw new SchemaIrError(`${label}.type.native is required`);\n  }\n  if (\n    typeof value.native.backend !== \"string\" ||\n    value.native.backend.length === 0\n  ) {\n    throw new SchemaIrError(`${label}.type.native.backend is required`);\n  }\n  if (typeof value.native.name !== \"string\" || value.native.name.length === 0) {\n    throw new SchemaIrError(`${label}.type.native.name is required`);\n  }\n  if (\n    value.native.intervalQualifier !== undefined &&\n    (typeof value.native.intervalQualifier !== \"string\" ||\n      !POSTGRES_INTERVAL_QUALIFIERS.has(value.native.intervalQualifier))\n  ) {\n    throw new SchemaIrError(\n      `${label}.type.native.intervalQualifier is unsupported`\n    );\n  }\n  if (\n    typeof value.native.arrayDimensions !== \"number\" ||\n    !Number.isInteger(value.native.arrayDimensions) ||\n    value.native.arrayDimensions < 0\n  ) {\n    throw new SchemaIrError(\n      `${label}.type.native.arrayDimensions must be a nonnegative integer`\n    );\n  }\n  requireOptionalIntegerParameter(\n    value.native.length,\n    `${label}.type.native.length`,\n    1\n  );\n  requireOptionalIntegerParameter(\n    value.native.precision,\n    `${label}.type.native.precision`,\n    1\n  );\n  requireOptionalIntegerParameter(\n    value.native.scale,\n    `${label}.type.native.scale`,\n    0\n  );\n  if (\n    value.kind === \"scalar\" &&\n    (typeof value.semantic !== \"string\" || value.semantic.length === 0)\n  ) {\n    throw new SchemaIrError(`${label}.type.semantic is required`);\n  }\n  if (value.kind === \"enum\") {\n    if (typeof value.enumId !== \"string\" || value.enumId.length === 0) {\n      throw new SchemaIrError(`${label}.type.enumId is required`);\n    }\n    enumRefs.push({ enumId: value.enumId, label });\n  }\n}\n\nconst CONSTRAINT_KINDS = new Set([\n  \"primary_key\",\n  \"unique\",\n  \"foreign_key\",\n  \"check\",\n]);\n\nconst REFERENTIAL_ACTIONS = new Set([\n  \"no_action\",\n  \"restrict\",\n  \"cascade\",\n  \"set_null\",\n  \"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  columns: string[],\n  known: Set<string>,\n  label: string\n): void {\n  for (const column of columns) {\n    if (!known.has(column)) {\n      throw new SchemaIrError(\n        `${label} \"${column}\" does not identify a column`\n      );\n    }\n  }\n}\n\nfunction requireUniqueColumnNames(columns: string[], label: string): void {\n  const seen = new Set<string>();\n  for (const column of columns) {\n    if (seen.has(column)) {\n      throw new SchemaIrError(`${label} must not repeat column \"${column}\"`);\n    }\n    seen.add(column);\n  }\n}\n\nfunction validateConstraint(\n  item: Record<string, unknown>,\n  sourceColumns: Set<string>,\n  pendingFks: Array<{ targetTableId: string; targetColumns: string[] }>\n): void {\n  if (typeof item.kind !== \"string\" || item.kind.length === 0) {\n    throw new SchemaIrError(\"SchemaConstraint.kind is required\");\n  }\n  if (!CONSTRAINT_KINDS.has(item.kind)) {\n    throw new SchemaIrError(\n      `SchemaConstraint.kind \"${item.kind}\" is unsupported`\n    );\n  }\n  if (\n    item.name !== undefined &&\n    item.name !== null &&\n    (typeof item.name !== \"string\" || item.name.length === 0)\n  ) {\n    throw new SchemaIrError(\n      \"SchemaConstraint.name must be a non-empty string or null\"\n    );\n  }\n  if (item.kind === \"check\") {\n    if (typeof item.expression !== \"string\" || item.expression.length === 0) {\n      throw new SchemaIrError(\"SchemaConstraint.expression is required\");\n    }\n    return;\n  }\n  const columns = requireNonEmptyStringArray(\n    item.columns,\n    \"SchemaConstraint.columns\"\n  );\n  requireKnownColumns(columns, sourceColumns, \"SchemaConstraint.columns\");\n  requireUniqueColumnNames(columns, \"SchemaConstraint.columns\");\n  if (item.kind === \"foreign_key\") {\n    const targetTableId = requireNonEmptyString(\n      item.targetTableId,\n      \"SchemaConstraint.targetTableId\"\n    );\n    const targetColumns = requireNonEmptyStringArray(\n      item.targetColumns,\n      \"SchemaConstraint.targetColumns\"\n    );\n    requireUniqueColumnNames(targetColumns, \"SchemaConstraint.targetColumns\");\n    if (columns.length !== targetColumns.length) {\n      throw new SchemaIrError(\n        \"SchemaConstraint.targetColumns must have the same length as SchemaConstraint.columns\"\n      );\n    }\n    if (\n      item.onDelete !== undefined &&\n      (typeof item.onDelete !== \"string\" ||\n        !REFERENTIAL_ACTIONS.has(item.onDelete))\n    ) {\n      throw new SchemaIrError(\n        `SchemaConstraint.onDelete \"${String(item.onDelete)}\" is unsupported`\n      );\n    }\n    if (\n      item.onUpdate !== undefined &&\n      (typeof item.onUpdate !== \"string\" ||\n        !REFERENTIAL_ACTIONS.has(item.onUpdate))\n    ) {\n      throw new SchemaIrError(\n        `SchemaConstraint.onUpdate \"${String(item.onUpdate)}\" is unsupported`\n      );\n    }\n    pendingFks.push({ targetColumns, targetTableId });\n  }\n}\n\nfunction validateColumn(\n  item: Record<string, unknown>,\n  enumRefs: Array<{ enumId: string; label: string }>\n): void {\n  requireIdentity(item.identity, \"SchemaColumn\");\n  requireType(item.type, \"SchemaColumn\", enumRefs);\n  if (typeof item.nullable !== \"boolean\") {\n    throw new SchemaIrError(\"SchemaColumn.nullable must be a boolean\");\n  }\n  if (\n    item.default !== undefined &&\n    item.default !== null &&\n    typeof item.default !== \"string\"\n  ) {\n    throw new SchemaIrError(\"SchemaColumn.default must be a string or null\");\n  }\n  if (item.generated !== undefined && typeof item.generated !== \"boolean\") {\n    throw new SchemaIrError(\"SchemaColumn.generated must be a boolean\");\n  }\n  if (item.isGenerated !== undefined && typeof item.isGenerated !== \"boolean\") {\n    throw new SchemaIrError(\"SchemaColumn.isGenerated must be a boolean\");\n  }\n  const strategy = item.generationStrategy;\n  if (strategy !== undefined) {\n    if (!isObject(strategy)) {\n      throw new SchemaIrError(\n        \"SchemaColumn.generationStrategy must be an object\"\n      );\n    }\n    if (\n      strategy.kind !== \"none\" &&\n      strategy.kind !== \"identity\" &&\n      strategy.kind !== \"generated-always\"\n    ) {\n      throw new SchemaIrError(\n        `SchemaColumn.generationStrategy.kind \"${String(strategy.kind)}\" is unsupported`\n      );\n    }\n    if (\n      strategy.kind === \"identity\" &&\n      strategy.mode !== \"always\" &&\n      strategy.mode !== \"by-default\"\n    ) {\n      throw new SchemaIrError(\n        `SchemaColumn.generationStrategy.mode \"${String(strategy.mode)}\" is unsupported`\n      );\n    }\n    if (\n      strategy.kind === \"identity\" &&\n      item.nullable === true\n    ) {\n      throw new SchemaIrError(\n        \"SchemaColumn identity generation strategy must be non-nullable\"\n      );\n    }\n    if (\n      strategy.kind !== \"generated-always\" &&\n      item.generated === true\n    ) {\n      throw new SchemaIrError(\n        \"SchemaColumn generated flag contradicts generation strategy\"\n      );\n    }\n  }\n}\n\nfunction validateEnum(item: Record<string, unknown>): void {\n  requireIdentity(item.identity, \"SchemaEnum\");\n  if (\n    item.name !== undefined &&\n    item.name !== null &&\n    (typeof item.name !== \"string\" || item.name.length === 0)\n  ) {\n    throw new SchemaIrError(\n      \"SchemaEnum.name must be a non-empty string or null\"\n    );\n  }\n  const labels = requireStringArray(item.labels, \"SchemaEnum.labels\");\n  const seen = new Set<string>();\n  for (const label of labels) {\n    if (seen.has(label)) {\n      throw new SchemaIrError(`Duplicate SchemaEnum label \"${label}\"`);\n    }\n    seen.add(label);\n  }\n}\n\ntype TableCatalogEntry = {\n  columns: Set<string>;\n  constraints: Set<string>;\n};\n\ntype PendingRelationThrough = {\n  sourceColumns: string[];\n  tableId: string;\n  targetColumns: string[];\n};\n\ntype PendingRelation = {\n  backingConstraintIds: string[];\n  sourceColumns: string[] | undefined;\n  sourceTableId: string;\n  targetColumns: string[] | undefined;\n  targetTableId: string;\n  through: PendingRelationThrough | undefined;\n};\n\nfunction validateRelation(item: Record<string, unknown>): PendingRelation {\n  if (\n    item.name !== undefined &&\n    item.name !== null &&\n    (typeof item.name !== \"string\" || item.name.length === 0)\n  ) {\n    throw new SchemaIrError(\n      \"SchemaRelation.name must be a non-empty string or null\"\n    );\n  }\n  if (\n    typeof item.cardinality !== \"string\" ||\n    !RELATION_CARDINALITIES.has(item.cardinality)\n  ) {\n    throw new SchemaIrError(\n      `SchemaRelation.cardinality \"${String(item.cardinality)}\" is unsupported`\n    );\n  }\n  const sourceTableId = requireNonEmptyString(\n    item.sourceTableId,\n    \"SchemaRelation.sourceTableId\"\n  );\n  const targetTableId = requireNonEmptyString(\n    item.targetTableId,\n    \"SchemaRelation.targetTableId\"\n  );\n  if (!Array.isArray(item.backingConstraintIds)) {\n    throw new SchemaIrError(\n      \"SchemaRelation.backingConstraintIds must be an array\"\n    );\n  }\n  const backingConstraintIds = item.backingConstraintIds.map(\n    (backingId, index) =>\n      requireNonEmptyString(\n        backingId,\n        `SchemaRelation.backingConstraintIds[${index}]`\n      )\n  );\n  const sourceColumns =\n    item.sourceColumns === undefined\n      ? undefined\n      : requireStringArray(item.sourceColumns, \"SchemaRelation.sourceColumns\");\n  const targetColumns =\n    item.targetColumns === undefined\n      ? undefined\n      : requireStringArray(item.targetColumns, \"SchemaRelation.targetColumns\");\n  let through: PendingRelation[\"through\"];\n  if (item.cardinality === \"n:n\" || item.through !== undefined) {\n    if (!isObject(item.through)) {\n      throw new SchemaIrError(\"SchemaRelation.through is required\");\n    }\n    through = {\n      sourceColumns: requireStringArray(\n        item.through.sourceColumns,\n        \"SchemaRelation.through.sourceColumns\"\n      ),\n      tableId: requireNonEmptyString(\n        item.through.tableId,\n        \"SchemaRelation.through.tableId\"\n      ),\n      targetColumns: requireStringArray(\n        item.through.targetColumns,\n        \"SchemaRelation.through.targetColumns\"\n      ),\n    };\n  }\n  return {\n    backingConstraintIds,\n    sourceColumns,\n    sourceTableId,\n    targetColumns,\n    targetTableId,\n    through,\n  };\n}\n\nfunction validateIndex(\n  item: Record<string, unknown>,\n  sourceColumns: Set<string>,\n  seenIndexNames: Set<string>,\n  namespaceScope: string\n): void {\n  const columns = requireArray(item.columns, \"SchemaIndex.columns\");\n  if (columns.length === 0) {\n    throw new SchemaIrError(\"SchemaIndex.columns is required\");\n  }\n  const columnNames: string[] = [];\n  for (const [index, raw] of columns.entries()) {\n    const label = `SchemaIndex.columns[${index}]`;\n    if (typeof raw === \"string\") {\n      requireNonEmptyString(raw, `${label}.name`);\n      requireKnownColumns([raw], sourceColumns, \"SchemaIndex.columns\");\n      columnNames.push(raw);\n      continue;\n    }\n    if (!isObject(raw)) {\n      throw new SchemaIrError(`${label} must be a string or object`);\n    }\n    const name = requireNonEmptyString(raw.name, `${label}.name`);\n    requireKnownColumns([name], sourceColumns, \"SchemaIndex.columns\");\n    columnNames.push(name);\n    if (\n      raw.direction !== undefined &&\n      raw.direction !== null &&\n      (typeof raw.direction !== \"string\" ||\n        !INDEX_DIRECTIONS.has(raw.direction))\n    ) {\n      throw new SchemaIrError(`${label}.direction is unsupported`);\n    }\n  }\n  requireUniqueColumnNames(columnNames, \"SchemaIndex.columns\");\n  if (typeof item.unique !== \"boolean\") {\n    throw new SchemaIrError(\"SchemaIndex.unique must be a boolean\");\n  }\n  if (item.name !== undefined && item.name !== null) {\n    if (typeof item.name !== \"string\" || item.name.length === 0) {\n      throw new SchemaIrError(\n        \"SchemaIndex.name must be a non-empty string or null\"\n      );\n    }\n    const key = `${namespaceScope}\\0${item.name}`;\n    if (seenIndexNames.has(key)) {\n      throw new SchemaIrError(\n        `Duplicate SchemaIndex.name \"${item.name}\" conflicts with a table or index in the same namespace`\n      );\n    }\n    seenIndexNames.add(key);\n  }\n  if (\n    item.predicate !== undefined &&\n    item.predicate !== null &&\n    typeof item.predicate !== \"string\"\n  ) {\n    throw new SchemaIrError(\"SchemaIndex.predicate must be a string or null\");\n  }\n  if (\n    item.method !== undefined &&\n    item.method !== null &&\n    typeof item.method !== \"string\"\n  ) {\n    throw new SchemaIrError(\"SchemaIndex.method must be a string or null\");\n  }\n}\n\nfunction columnPhysicalName(item: Record<string, unknown>): string {\n  if (!(isObject(item.identity) && isObject(item.identity.physical))) {\n    return \"\";\n  }\n  return typeof item.identity.physical.name === \"string\"\n    ? item.identity.physical.name\n    : \"\";\n}\n\nfunction validateNamedObjects(\n  values: unknown[],\n  label: string,\n  seen: Set<string>,\n  validateItem?: (item: Record<string, unknown>) => void\n): void {\n  for (const raw of values) {\n    if (!isObject(raw)) {\n      throw new SchemaIrError(`${label} must be an object`);\n    }\n    const id = requireNonEmptyId(raw.id, label);\n    requireUniqueId(id, seen, label);\n    validateItem?.(raw);\n  }\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  if (!isObject(doc)) {\n    throw new SchemaIrError(\"AthenaSchemaIr must be an object\");\n  }\n  if (doc.kind !== ATHENA_SCHEMA_IR_KIND) {\n    throw new SchemaIrError(\n      `AthenaSchemaIr.kind must be \"${ATHENA_SCHEMA_IR_KIND}\"`\n    );\n  }\n  if (doc.irVersion !== ATHENA_SCHEMA_IR_VERSION) {\n    throw new SchemaIrError(\n      `AthenaSchemaIr.irVersion must be ${ATHENA_SCHEMA_IR_VERSION}`\n    );\n  }\n  if (!(\"databases\" in doc && Array.isArray(doc.databases))) {\n    throw new SchemaIrError(\"AthenaSchemaIr.databases[] is required\");\n  }\n\n  const seenIds = new Set<string>();\n  const seenPhysicalTables = new Set<string>();\n  const enumIds = new Set<string>();\n  const pendingEnumRefs: Array<{ enumId: string; label: string }> = [];\n  const tablesById = new Map<string, TableCatalogEntry>();\n  const pendingFks: Array<{ targetTableId: string; targetColumns: string[] }> =\n    [];\n  const pendingRelations: PendingRelation[] = [];\n  const seenIndexNames = new Set<string>();\n  for (const rawDb of doc.databases) {\n    if (!isObject(rawDb)) {\n      throw new SchemaIrError(\"SchemaDatabase must be an object\");\n    }\n    const dbId = requireNonEmptyId(rawDb.id, \"SchemaDatabase\");\n    requireUniqueId(dbId, seenIds, \"SchemaDatabase\");\n    requireIdentity(rawDb.identity, \"SchemaDatabase\");\n    requireOptionalNullableString(rawDb.backend, \"SchemaDatabase.backend\");\n    if (rawDb.enums !== undefined) {\n      validateNamedObjects(\n        requireArray(rawDb.enums, \"SchemaDatabase.enums\"),\n        \"SchemaEnum\",\n        seenIds,\n        (item) => {\n          validateEnum(item);\n          enumIds.add(String(item.id));\n        }\n      );\n    }\n    const namespaces = rawDb.namespaces ?? rawDb.schemas;\n    requireArray(namespaces, \"SchemaDatabase.namespaces\");\n    for (const rawNs of namespaces as unknown[]) {\n      if (!isObject(rawNs)) {\n        throw new SchemaIrError(\"SchemaNamespace must be an object\");\n      }\n      const nsId = requireNonEmptyId(rawNs.id, \"SchemaNamespace\");\n      requireUniqueId(nsId, seenIds, \"SchemaNamespace\");\n      requireIdentity(rawNs.identity, \"SchemaNamespace\");\n      const namespaceScope = physicalNamespaceScopeKey(rawNs.identity);\n      if (rawNs.enums !== undefined) {\n        validateNamedObjects(\n          requireArray(rawNs.enums, \"SchemaNamespace.enums\"),\n          \"SchemaEnum\",\n          seenIds,\n          (item) => {\n            validateEnum(item);\n            enumIds.add(String(item.id));\n          }\n        );\n      }\n      const tables = requireArray(rawNs.tables, \"SchemaNamespace.tables\");\n      for (const rawTable of tables) {\n        if (!isObject(rawTable)) {\n          throw new SchemaIrError(\"SchemaTable must be an object\");\n        }\n        const tableId = requireNonEmptyId(rawTable.id, \"SchemaTable\");\n        requireUniqueId(tableId, seenIds, \"SchemaTable\");\n        requireIdentity(rawTable.identity, \"SchemaTable\");\n        const tableNamespaceScope =\n          physicalNamespaceScopeKey(rawTable.identity) || namespaceScope;\n        const physicalKey = physicalTableIdentityKey(rawTable.identity);\n        if (physicalKey.length > 0) {\n          if (seenPhysicalTables.has(physicalKey)) {\n            throw new SchemaIrError(\n              `Duplicate SchemaTable physical identity \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`\n            );\n          }\n          seenPhysicalTables.add(physicalKey);\n          if (seenIndexNames.has(physicalKey)) {\n            throw new SchemaIrError(\n              `SchemaTable physical name conflicts with an index in the same namespace \"${physicalKey.replaceAll(\"\\0\", \".\")}\"`\n            );\n          }\n          seenIndexNames.add(physicalKey);\n        }\n        const columns = requireArray(rawTable.columns, \"SchemaTable.columns\");\n        validateNamedObjects(columns, \"SchemaColumn\", seenIds, (item) => {\n          validateColumn(item, pendingEnumRefs);\n        });\n        const sourceColumns = new Set<string>();\n        for (const rawColumn of columns) {\n          if (isObject(rawColumn)) {\n            const name = columnPhysicalName(rawColumn);\n            if (name.length > 0) {\n              if (sourceColumns.has(name)) {\n                throw new SchemaIrError(\n                  `Duplicate SchemaColumn physical name \"${name}\"`\n                );\n              }\n              sourceColumns.add(name);\n            }\n          }\n        }\n        const tableConstraintIds = new Set<string>();\n        if (rawTable.constraints !== undefined) {\n          let primaryKeyCount = 0;\n          const tableConstraintNames = new Set<string>();\n          validateNamedObjects(\n            requireArray(rawTable.constraints, \"SchemaTable.constraints\"),\n            \"SchemaConstraint\",\n            seenIds,\n            (item) => {\n              tableConstraintIds.add(String(item.id));\n              validateConstraint(item, sourceColumns, pendingFks);\n              if (typeof item.name === \"string\" && item.name.length > 0) {\n                if (tableConstraintNames.has(item.name)) {\n                  throw new SchemaIrError(\n                    `Duplicate SchemaConstraint.name \"${item.name}\"`\n                  );\n                }\n                tableConstraintNames.add(item.name);\n                if (item.kind === \"primary_key\" || item.kind === \"unique\") {\n                  const key = `${tableNamespaceScope}\\0${item.name}`;\n                  if (seenIndexNames.has(key)) {\n                    throw new SchemaIrError(\n                      `SchemaConstraint.name \"${item.name}\" conflicts with a table or index in the same namespace`\n                    );\n                  }\n                  seenIndexNames.add(key);\n                }\n              }\n              if (item.kind === \"primary_key\") {\n                primaryKeyCount += 1;\n                if (primaryKeyCount > 1) {\n                  throw new SchemaIrError(\n                    \"SchemaTable may declare at most one primary_key constraint\"\n                  );\n                }\n              }\n            }\n          );\n        }\n        tablesById.set(tableId, {\n          columns: sourceColumns,\n          constraints: tableConstraintIds,\n        });\n        if (rawTable.relations !== undefined) {\n          validateNamedObjects(\n            requireArray(rawTable.relations, \"SchemaTable.relations\"),\n            \"SchemaRelation\",\n            seenIds,\n            (item) => {\n              pendingRelations.push(validateRelation(item));\n            }\n          );\n        }\n        if (rawTable.indexes !== undefined) {\n          validateNamedObjects(\n            requireArray(rawTable.indexes, \"SchemaTable.indexes\"),\n            \"SchemaIndex\",\n            seenIds,\n            (item) => {\n              validateIndex(\n                item,\n                sourceColumns,\n                seenIndexNames,\n                tableNamespaceScope\n              );\n            }\n          );\n        }\n      }\n    }\n  }\n\n  for (const ref of pendingEnumRefs) {\n    if (!enumIds.has(ref.enumId)) {\n      throw new SchemaIrError(\n        `${ref.label}.type.enumId \"${ref.enumId}\" does not identify an enum`\n      );\n    }\n  }\n\n  for (const fk of pendingFks) {\n    const target = tablesById.get(fk.targetTableId);\n    if (!target) {\n      throw new SchemaIrError(\n        `SchemaConstraint.targetTableId \"${fk.targetTableId}\" does not identify a table`\n      );\n    }\n    requireKnownColumns(\n      fk.targetColumns,\n      target.columns,\n      \"SchemaConstraint.targetColumns\"\n    );\n  }\n\n  for (const relation of pendingRelations) {\n    const source = tablesById.get(relation.sourceTableId);\n    if (!source) {\n      throw new SchemaIrError(\n        `SchemaRelation.sourceTableId \"${relation.sourceTableId}\" does not identify a table`\n      );\n    }\n    const target = tablesById.get(relation.targetTableId);\n    if (!target) {\n      throw new SchemaIrError(\n        `SchemaRelation.targetTableId \"${relation.targetTableId}\" does not identify a table`\n      );\n    }\n    if (relation.sourceColumns !== undefined) {\n      requireKnownColumns(\n        relation.sourceColumns,\n        source.columns,\n        \"SchemaRelation.sourceColumns\"\n      );\n    }\n    if (relation.targetColumns !== undefined) {\n      requireKnownColumns(\n        relation.targetColumns,\n        target.columns,\n        \"SchemaRelation.targetColumns\"\n      );\n    }\n    for (const backingId of relation.backingConstraintIds) {\n      let found = false;\n      for (const table of tablesById.values()) {\n        if (table.constraints.has(backingId)) {\n          found = true;\n          break;\n        }\n      }\n      if (!found) {\n        throw new SchemaIrError(\n          `SchemaRelation.backingConstraintIds \"${backingId}\" does not identify a constraint`\n        );\n      }\n    }\n    if (relation.through !== undefined) {\n      const through = tablesById.get(relation.through.tableId);\n      if (!through) {\n        throw new SchemaIrError(\n          `SchemaRelation.through.tableId \"${relation.through.tableId}\" does not identify a table`\n        );\n      }\n      requireKnownColumns(\n        relation.through.sourceColumns,\n        through.columns,\n        \"SchemaRelation.through.sourceColumns\"\n      );\n      requireKnownColumns(\n        relation.through.targetColumns,\n        through.columns,\n        \"SchemaRelation.through.targetColumns\"\n      );\n    }\n  }\n\n  return doc as unknown as AthenaSchemaIr;\n}\n","import type { SchemaColumn } from \"./column.ts\";\nimport type {\n  SchemaConstraint,\n  SchemaReferentialAction,\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 {\n  NativeTypeDescriptor,\n  PostgresIntervalQualifier,\n  SchemaType,\n} 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  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction canonOptionalFiniteNumber(value: unknown): number | null {\n  if (value === null) {\n    return null;\n  }\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  throw new Error(\n    \"native length, precision, and scale must be finite numbers or null\"\n  );\n}\n\nfunction asString(value: unknown, fallback = \"\"): string {\n  return typeof value === \"string\" ? value : fallback;\n}\n\nconst REFERENTIAL_ACTIONS = new Set<SchemaReferentialAction>([\n  \"no_action\",\n  \"restrict\",\n  \"cascade\",\n  \"set_null\",\n  \"set_default\",\n]);\n\nconst POSTGRES_INTERVAL_QUALIFIERS = new Set<PostgresIntervalQualifier>([\n  \"year\",\n  \"month\",\n  \"day\",\n  \"hour\",\n  \"minute\",\n  \"second\",\n  \"year to month\",\n  \"day to hour\",\n  \"day to minute\",\n  \"day to second\",\n  \"hour to minute\",\n  \"hour to second\",\n  \"minute to second\",\n]);\n\nfunction asReferentialAction(\n  value: unknown,\n  label: string\n): SchemaReferentialAction | undefined {\n  if (value === undefined) {\n    return;\n  }\n  if (\n    typeof value === \"string\" &&\n    REFERENTIAL_ACTIONS.has(value as SchemaReferentialAction)\n  ) {\n    return value as SchemaReferentialAction;\n  }\n  throw new Error(`${label} \"${String(value)}\" is unsupported`);\n}\n\nfunction compareId(a: { id: string }, b: { id: string }): number {\n  return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n}\n\nfunction canonIdentity(raw: unknown): SchemaObjectIdentity {\n  const obj = isObject(raw) ? raw : {};\n  const logical = isObject(obj.logical) ? obj.logical : {};\n  const physical = isObject(obj.physical) ? obj.physical : logical;\n  const database = asString(logical.database);\n  const namespace = asString(logical.namespace);\n  const name = asString(logical.name);\n  return {\n    logical: { database, name, namespace },\n    physical: {\n      database: asString(physical.database, database),\n      name: asString(physical.name, name),\n      namespace: asString(physical.namespace, namespace),\n    },\n  };\n}\n\nfunction canonNative(raw: unknown): NativeTypeDescriptor {\n  const obj = isObject(raw) ? raw : {};\n  const dims =\n    typeof obj.arrayDimensions === \"number\" &&\n    Number.isFinite(obj.arrayDimensions)\n      ? obj.arrayDimensions\n      : 0;\n  const native: NativeTypeDescriptor = {\n    arrayDimensions: dims,\n    backend: asString(obj.backend, \"postgresql\"),\n    name: asString(obj.name),\n  };\n  if (obj.intervalQualifier !== undefined) {\n    if (\n      typeof obj.intervalQualifier !== \"string\" ||\n      !POSTGRES_INTERVAL_QUALIFIERS.has(\n        obj.intervalQualifier as PostgresIntervalQualifier\n      )\n    ) {\n      throw new Error(\n        `Unsupported PostgreSQL interval qualifier \"${String(obj.intervalQualifier)}\"`\n      );\n    }\n    return addNativeNumericFields(\n      {\n        ...native,\n        intervalQualifier:\n          obj.intervalQualifier as PostgresIntervalQualifier,\n      },\n      obj\n    );\n  }\n  return addNativeNumericFields(native, obj);\n}\n\nfunction addNativeNumericFields(\n  native: NativeTypeDescriptor,\n  obj: Record<string, unknown>\n): NativeTypeDescriptor {\n  const withLength =\n    obj.length === undefined\n      ? native\n      : { ...native, length: canonOptionalFiniteNumber(obj.length) };\n  const withPrecision =\n    obj.precision === undefined\n      ? withLength\n      : {\n          ...withLength,\n          precision: canonOptionalFiniteNumber(obj.precision),\n        };\n  if (obj.scale === undefined) {\n    return withPrecision;\n  }\n  return {\n    ...withPrecision,\n    scale: canonOptionalFiniteNumber(obj.scale),\n  };\n}\n\nfunction canonType(raw: unknown): SchemaType {\n  const obj = isObject(raw) ? raw : {};\n  const native = canonNative(obj.native);\n  if (obj.kind === \"enum\" || typeof obj.enumId === \"string\") {\n    return {\n      enumId: asString(obj.enumId),\n      kind: \"enum\",\n      native,\n    };\n  }\n  if (obj.kind === \"native\") {\n    return { kind: \"native\", native };\n  }\n  return {\n    kind: \"scalar\",\n    native,\n    semantic: asString(obj.semantic, native.name),\n  };\n}\n\nfunction canonColumn(raw: unknown): SchemaColumn {\n  const obj = isObject(raw) ? raw : {};\n  const nullable = obj.nullable === true;\n  const column: SchemaColumn = {\n    id: asSchemaObjectId(asString(obj.id)),\n    identity: canonIdentity(obj.identity),\n    nullable,\n    type: canonType(obj.type),\n  };\n  const withDefault =\n    obj.default === undefined\n      ? column\n      : {\n          ...column,\n          default: obj.default === null ? null : asString(obj.default),\n        };\n  if (obj.generationStrategy !== undefined) {\n    const strategy = obj.generationStrategy;\n    if (\n      !isObject(strategy) ||\n      (strategy.kind !== \"none\" &&\n        strategy.kind !== \"generated-always\" &&\n        strategy.kind !== \"identity\")\n    ) {\n      throw new Error(\"Invalid column generation strategy\");\n    }\n    if (\n      strategy.kind === \"identity\" &&\n      strategy.mode !== \"always\" &&\n      strategy.mode !== \"by-default\"\n    ) {\n      throw new Error(\"Invalid identity generation strategy mode\");\n    }\n    return {\n      ...withDefault,\n      generationStrategy: strategy as SchemaColumn[\"generationStrategy\"],\n      generated: strategy.kind === \"generated-always\",\n    };\n  }\n  if (obj.generated === undefined && obj.isGenerated === undefined) {\n    return withDefault;\n  }\n  const generated = obj.generated === true || obj.isGenerated === true;\n  return {\n    ...withDefault,\n    generationStrategy: generated\n      ? { kind: \"generated-always\" }\n      : { kind: \"none\" },\n    generated,\n  };\n}\n\nfunction canonConstraint(raw: unknown): SchemaConstraint {\n  const obj = isObject(raw) ? raw : {};\n  const id = asSchemaObjectId(asString(obj.id));\n  const kindRaw = asString(obj.kind).toLowerCase();\n  const columns = Array.isArray(obj.columns)\n    ? obj.columns.map((c) => asString(c))\n    : [];\n  const name =\n    obj.name === undefined\n      ? undefined\n      : obj.name === null\n        ? null\n        : asString(obj.name);\n\n  if (kindRaw === \"check\") {\n    return {\n      expression: asString(obj.expression),\n      id,\n      kind: \"check\",\n      ...(name === undefined ? {} : { name }),\n    };\n  }\n  if (kindRaw === \"unique\") {\n    return {\n      columns,\n      id,\n      kind: \"unique\",\n      ...(name === undefined ? {} : { name }),\n    };\n  }\n  if (kindRaw === \"foreign_key\" || kindRaw === \"fk\") {\n    return {\n      columns,\n      id,\n      kind: \"foreign_key\",\n      targetColumns: Array.isArray(obj.targetColumns)\n        ? obj.targetColumns.map((c) => asString(c))\n        : [],\n      targetTableId: asString(obj.targetTableId),\n      ...(name === undefined ? {} : { name }),\n      ...(obj.onDelete === undefined\n        ? {}\n        : {\n            onDelete: asReferentialAction(\n              obj.onDelete,\n              \"SchemaConstraint.onDelete\"\n            ),\n          }),\n      ...(obj.onUpdate === undefined\n        ? {}\n        : {\n            onUpdate: asReferentialAction(\n              obj.onUpdate,\n              \"SchemaConstraint.onUpdate\"\n            ),\n          }),\n    };\n  }\n  return {\n    columns,\n    id,\n    kind: \"primary_key\",\n    ...(name === undefined ? {} : { name }),\n  };\n}\n\nfunction canonRelation(raw: unknown): SchemaRelation {\n  const obj = isObject(raw) ? raw : {};\n  const through = isObject(obj.through)\n    ? {\n        sourceColumns: Array.isArray(obj.through.sourceColumns)\n          ? obj.through.sourceColumns.map((c) => asString(c))\n          : [],\n        tableId: asString(obj.through.tableId),\n        targetColumns: Array.isArray(obj.through.targetColumns)\n          ? obj.through.targetColumns.map((c) => asString(c))\n          : [],\n      }\n    : undefined;\n  const relation: SchemaRelation = {\n    backingConstraintIds: Array.isArray(obj.backingConstraintIds)\n      ? [...obj.backingConstraintIds].map((c) => asString(c)).sort()\n      : [],\n    cardinality: asString(obj.cardinality) as SchemaRelation[\"cardinality\"],\n    id: asSchemaObjectId(asString(obj.id)),\n    sourceTableId: asString(obj.sourceTableId),\n    targetTableId: asString(obj.targetTableId),\n  };\n  const withSource =\n    obj.sourceColumns === undefined\n      ? relation\n      : {\n          ...relation,\n          sourceColumns: Array.isArray(obj.sourceColumns)\n            ? obj.sourceColumns.map((c) => asString(c))\n            : [],\n        };\n  const withCols =\n    obj.targetColumns === undefined\n      ? withSource\n      : {\n          ...withSource,\n          targetColumns: Array.isArray(obj.targetColumns)\n            ? obj.targetColumns.map((c) => asString(c))\n            : [],\n        };\n  const withThrough =\n    through === undefined ? withCols : { ...withCols, through };\n  if (obj.name === undefined) {\n    return withThrough;\n  }\n  return {\n    ...withThrough,\n    name: obj.name === null ? null : asString(obj.name),\n  };\n}\n\nfunction canonIndex(raw: unknown): SchemaIndex {\n  const obj = isObject(raw) ? raw : {};\n  const columns = Array.isArray(obj.columns)\n    ? obj.columns.map((col) => {\n        if (typeof col === \"string\") {\n          return { direction: \"asc\" as const, name: col };\n        }\n        const c = isObject(col) ? col : {};\n        const direction =\n          c.direction === \"desc\" ? (\"desc\" as const) : (\"asc\" as const);\n        return { direction, name: asString(c.name) };\n      })\n    : [];\n  return {\n    columns,\n    id: asSchemaObjectId(asString(obj.id)),\n    unique: obj.unique === true,\n    ...(obj.name === undefined\n      ? {}\n      : { name: obj.name === null ? null : asString(obj.name) }),\n    ...(obj.predicate === undefined\n      ? {}\n      : { predicate: obj.predicate === null ? null : asString(obj.predicate) }),\n    ...(obj.method === undefined\n      ? {}\n      : { method: obj.method === null ? null : asString(obj.method) }),\n  };\n}\n\nfunction canonEnum(raw: unknown): SchemaEnum {\n  const obj = isObject(raw) ? raw : {};\n  const labels = Array.isArray(obj.labels)\n    ? obj.labels.map((l) => asString(l))\n    : Array.isArray(obj.values)\n      ? obj.values.map((l) => asString(l))\n      : [];\n  return {\n    id: asSchemaObjectId(asString(obj.id)),\n    identity: canonIdentity(obj.identity),\n    labels,\n    ...(obj.name === undefined\n      ? {}\n      : { name: obj.name === null ? null : asString(obj.name) }),\n  };\n}\n\nfunction canonTable(raw: unknown): SchemaTable {\n  const obj = isObject(raw) ? raw : {};\n  return {\n    columns: (Array.isArray(obj.columns) ? obj.columns : [])\n      .map(canonColumn)\n      .sort(compareId),\n    constraints: (Array.isArray(obj.constraints) ? obj.constraints : [])\n      .map(canonConstraint)\n      .sort(compareId),\n    id: asSchemaObjectId(asString(obj.id)),\n    identity: canonIdentity(obj.identity),\n    indexes: (Array.isArray(obj.indexes) ? obj.indexes : [])\n      .map(canonIndex)\n      .sort(compareId),\n    relations: (Array.isArray(obj.relations) ? obj.relations : [])\n      .map(canonRelation)\n      .sort(compareId),\n  };\n}\n\nfunction canonNamespace(raw: unknown): SchemaNamespace {\n  const obj = isObject(raw) ? raw : {};\n  const enums = (Array.isArray(obj.enums) ? obj.enums : [])\n    .map(canonEnum)\n    .sort(compareId);\n  return {\n    enums,\n    id: asSchemaObjectId(asString(obj.id)),\n    identity: canonIdentity(obj.identity),\n    tables: (Array.isArray(obj.tables) ? obj.tables : [])\n      .map(canonTable)\n      .sort(compareId),\n  };\n}\n\nfunction canonDatabase(raw: unknown): SchemaDatabase {\n  const obj = isObject(raw) ? raw : {};\n  const namespacesRaw = obj.namespaces ?? obj.schemas;\n  const db: SchemaDatabase = {\n    id: asSchemaObjectId(asString(obj.id)),\n    identity: canonIdentity(obj.identity),\n    namespaces: (Array.isArray(namespacesRaw) ? namespacesRaw : [])\n      .map(canonNamespace)\n      .sort(compareId),\n  };\n  const withEnums = Array.isArray(obj.enums)\n    ? { ...db, enums: obj.enums.map(canonEnum).sort(compareId) }\n    : db;\n  if (obj.backend === undefined) {\n    return withEnums;\n  }\n  return {\n    ...withEnums,\n    backend: obj.backend === null ? null : asString(obj.backend),\n  };\n}\n\nfunction canonMetadata(raw: unknown): SchemaMetadata {\n  if (!isObject(raw)) {\n    return {};\n  }\n  const provenance = isObject(raw.provenance)\n    ? {\n        ...(raw.provenance.source === undefined\n          ? {}\n          : { source: asString(raw.provenance.source) }),\n        ...(raw.provenance.generatedAt === undefined\n          ? {}\n          : { generatedAt: asString(raw.provenance.generatedAt) }),\n        ...(raw.provenance.generator === undefined\n          ? {}\n          : { generator: asString(raw.provenance.generator) }),\n        ...(raw.provenance.backend === undefined\n          ? {}\n          : {\n              backend:\n                raw.provenance.backend === null\n                  ? null\n                  : asString(raw.provenance.backend),\n            }),\n      }\n    : undefined;\n  const extensions = isObject(raw.extensions)\n    ? { ...raw.extensions }\n    : undefined;\n  return {\n    ...(provenance === undefined ? {} : { provenance }),\n    ...(extensions === undefined ? {} : { extensions }),\n  };\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  validateAthenaSchemaIr(doc);\n  const obj = doc as Record<string, unknown>;\n  const canonical: AthenaSchemaIr = {\n    databases: (Array.isArray(obj.databases) ? obj.databases : [])\n      .map(canonDatabase)\n      .sort(compareId),\n    irVersion: ATHENA_SCHEMA_IR_VERSION,\n    kind: ATHENA_SCHEMA_IR_KIND,\n    metadata: canonMetadata(obj.metadata),\n  };\n  return 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  normalizeReferentialAction,\n  parseSchemaTypeString,\n} from \"../diff/normalize.ts\";\nimport {\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  type AthenaSchemaSnapshot,\n  type SchemaColumn as V1Column,\n  type SchemaColumnType as V1ColumnType,\n  type SchemaForeignKey as V1ForeignKey,\n  type SchemaIndex as V1Index,\n  type SchemaTable as V1Table,\n  type SchemaUniqueConstraint as V1Unique,\n} from \"../diff/types.ts\";\nimport { collectModelsFromSqlInput, type ModelSqlInput } from \"../model-sql.ts\";\nimport type {\n  IntrospectionColumn,\n  IntrospectionRelation,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n  ModelColumnDefault,\n  ModelColumnKind,\n  ModelRelationKind,\n  ModelRelationMetadata,\n} from \"../types.ts\";\nimport { canonicalizeAthenaSchemaIr } from \"./canonicalize.ts\";\nimport type { SchemaColumn } from \"./column.ts\";\nimport type {\n  SchemaConstraint,\n  SchemaReferentialAction,\n} from \"./constraint.ts\";\nimport type { SchemaDatabase } from \"./database.ts\";\nimport type { AthenaSchemaIr } from \"./document.ts\";\nimport {\n  asSchemaObjectId,\n  type SchemaObjectId,\n  schemaObjectIdentity,\n} from \"./identity.ts\";\nimport type { SchemaIndex } from \"./indexes.ts\";\nimport type { SchemaEnum, SchemaNamespace } from \"./namespace.ts\";\nimport type {\n  SchemaRelation,\n  SchemaRelationCardinality,\n  SchemaRelationThrough,\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  readonly backend?: string | null;\n  readonly defaultDatabase?: string;\n  readonly defaultSchema?: string;\n}\n\nexport interface SchemaIrFromIntrospectionOptions {\n  readonly excludeInternal?: boolean;\n  readonly schemas?: readonly string[];\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isAthenaSchemaIr(value: unknown): value is AthenaSchemaIr {\n  return (\n    isObject(value) &&\n    value.kind === ATHENA_SCHEMA_IR_KIND &&\n    value.irVersion === ATHENA_SCHEMA_IR_VERSION &&\n    Array.isArray(value.databases)\n  );\n}\n\nfunction id(value: string): SchemaObjectId {\n  return asSchemaObjectId(value);\n}\n\nfunction nativeFromV1(\n  type: V1ColumnType,\n  backend: string\n): NativeTypeDescriptor {\n  return {\n    arrayDimensions: type.arrayDimensions,\n    backend,\n    name: type.name,\n    ...(type.intervalQualifier === undefined\n      ? {}\n      : { intervalQualifier: type.intervalQualifier }),\n    ...(type.length === undefined ? {} : { length: type.length }),\n    ...(type.precision === undefined ? {} : { precision: type.precision }),\n    ...(type.scale === undefined ? {} : { scale: type.scale }),\n  };\n}\n\nfunction typeFromV1Column(\n  type: V1ColumnType,\n  backend: string,\n  enumId?: string\n): SchemaType {\n  const native = nativeFromV1(type, backend);\n  if (enumId) {\n    return { enumId, kind: \"enum\", native };\n  }\n  return { kind: \"scalar\", native, semantic: type.name };\n}\n\nfunction tableStableId(database: string, schema: string, name: string): string {\n  return `tbl:${database}.${schema}.${name}`;\n}\n\nfunction columnStableId(\n  database: string,\n  schema: string,\n  table: string,\n  name: string\n): string {\n  return `col:${database}.${schema}.${table}.${name}`;\n}\n\nfunction enumStableId(\n  database: string,\n  schema: string,\n  table: string,\n  name: string\n): string {\n  return `enum:${database}.${schema}.${table}.${name}`;\n}\n\nfunction fkStableId(\n  tableId: string,\n  sourceColumns: readonly string[],\n  targetTableId: string,\n  targetColumns: readonly string[]\n): string {\n  return `cst:${tableId}:fk:${sourceColumns.join(\",\")}:${targetTableId}:${targetColumns.join(\",\")}`;\n}\n\nfunction mapAuthoredColumns(\n  names: readonly string[],\n  logicalToPhysical: Map<string, string> | undefined\n): string[] {\n  return names.map((name) => logicalToPhysical?.get(name) ?? name);\n}\n\nfunction snapshotDatabaseName(\n  value: string | undefined,\n  fallback: string\n): string {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : fallback;\n}\n\nfunction snapshotTableDatabase(table: V1Table, fallback: string): string {\n  return snapshotDatabaseName(table.database, fallback);\n}\n\nexport function schemaIrFromSnapshot(\n  snapshot: AthenaSchemaSnapshot,\n  options: { database?: string } = {}\n): AthenaSchemaIr {\n  const backend = snapshot.backend ?? DEFAULT_BACKEND;\n  const fallbackDatabase = options.database?.trim() || DEFAULT_DATABASE;\n  type NamespaceBucket = {\n    enums: SchemaEnum[];\n    tables: SchemaTable[];\n    seenEnums: Set<string>;\n  };\n  const databases = new Map<string, Map<string, NamespaceBucket>>();\n\n  const namespaceBucket = (dbName: string, nsName: string): NamespaceBucket => {\n    let namespaces = databases.get(dbName);\n    if (!namespaces) {\n      namespaces = new Map();\n      databases.set(dbName, namespaces);\n    }\n    let bucket = namespaces.get(nsName);\n    if (!bucket) {\n      bucket = { enums: [], seenEnums: new Set(), tables: [] };\n      namespaces.set(nsName, bucket);\n    }\n    return bucket;\n  };\n\n  for (const ns of snapshot.schemas) {\n    if (ns.tables.length === 0) {\n      namespaceBucket(\n        snapshotDatabaseName(ns.database, fallbackDatabase),\n        ns.name\n      );\n    }\n\n    for (const table of ns.tables) {\n      const databaseName = snapshotTableDatabase(table, fallbackDatabase);\n      const bucket = namespaceBucket(databaseName, table.schema || ns.name);\n      const { enums, tables, seenEnums } = bucket;\n      const tableId = tableStableId(databaseName, table.schema, table.name);\n      const columns: SchemaColumn[] = [];\n      for (const column of table.columns) {\n        let enumId: string | undefined;\n        if (column.type.enumValues && column.type.enumValues.length > 0) {\n          enumId = introspectedEnumStableId(\n            databaseName,\n            table.schema,\n            column.type.name\n          );\n          if (!seenEnums.has(enumId)) {\n            seenEnums.add(enumId);\n            enums.push({\n              id: id(enumId),\n              identity: schemaObjectIdentity(\n                databaseName,\n                table.schema,\n                column.type.name\n              ),\n              labels: [...column.type.enumValues],\n            });\n          }\n        }\n        columns.push({\n          default: column.default,\n          generationStrategy: column.isGenerated\n            ? { kind: \"generated-always\" }\n            : { kind: \"none\" },\n          generated: column.isGenerated,\n          id: id(\n            columnStableId(databaseName, table.schema, table.name, column.name)\n          ),\n          identity: schemaObjectIdentity(\n            databaseName,\n            table.schema,\n            column.name\n          ),\n          nullable: column.nullable,\n          type: typeFromV1Column(\n            column.type,\n            backend ?? DEFAULT_BACKEND,\n            enumId\n          ),\n        });\n      }\n\n      const constraints: SchemaConstraint[] = [];\n      if (table.primaryKey && table.primaryKey.columns.length > 0) {\n        constraints.push({\n          columns: [...table.primaryKey.columns],\n          id: id(`cst:${tableId}:pk`),\n          kind: \"primary_key\",\n          name: table.primaryKey.name ?? null,\n        });\n      }\n      for (const unique of table.uniqueConstraints) {\n        constraints.push({\n          columns: [...unique.columns],\n          id: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n          kind: \"unique\",\n          name: unique.name ?? null,\n        });\n      }\n      const relations: SchemaRelation[] = [];\n      for (const fk of table.foreignKeys) {\n        const targetDatabase = snapshotDatabaseName(\n          fk.target.database,\n          databaseName\n        );\n        const targetId = tableStableId(\n          targetDatabase,\n          fk.target.schema,\n          fk.target.name\n        );\n        const fkId = fkStableId(\n          tableId,\n          fk.columns,\n          targetId,\n          fk.targetColumns\n        );\n        constraints.push({\n          columns: [...fk.columns],\n          id: id(fkId),\n          kind: \"foreign_key\",\n          name: fk.name ?? null,\n          onDelete: fk.onDelete,\n          onUpdate: fk.onUpdate,\n          targetColumns: [...fk.targetColumns],\n          targetTableId: targetId,\n        });\n        relations.push({\n          backingConstraintIds: [fkId],\n          cardinality: \"n:1\",\n          id: id(`rel:${tableId}:${fk.columns.join(\",\")}:${targetId}`),\n          name: fk.name ?? null,\n          sourceColumns: [...fk.columns],\n          sourceTableId: tableId,\n          targetColumns: [...fk.targetColumns],\n          targetTableId: targetId,\n        });\n      }\n\n      const indexes: SchemaIndex[] = table.indexes.map((ix, index) => ({\n        columns: ix.columns.map((c) => ({\n          direction: c.direction ?? \"asc\",\n          name: c.name,\n        })),\n        id: id(`idx:${tableId}:${ix.name ?? index}`),\n        method: ix.method ?? null,\n        name: ix.name ?? null,\n        predicate: ix.predicate ?? null,\n        unique: ix.unique,\n      }));\n\n      tables.push({\n        columns,\n        constraints,\n        id: id(tableId),\n        identity: schemaObjectIdentity(databaseName, table.schema, table.name),\n        indexes,\n        relations,\n      });\n    }\n  }\n\n  const lifted: SchemaDatabase[] = [...databases.entries()].map(\n    ([dbName, namespaces]) => ({\n      backend,\n      id: id(`db:${dbName}`),\n      identity: schemaObjectIdentity(dbName, DEFAULT_SCHEMA, dbName),\n      namespaces: [...namespaces.entries()].map(([nsName, bucket]) => ({\n        enums: bucket.enums,\n        id: id(`ns:${dbName}.${nsName}`),\n        identity: schemaObjectIdentity(dbName, nsName, nsName),\n        tables: bucket.tables,\n      })),\n    })\n  );\n\n  return canonicalizeAthenaSchemaIr({\n    databases: lifted,\n    irVersion: ATHENA_SCHEMA_IR_VERSION,\n    kind: ATHENA_SCHEMA_IR_KIND,\n    metadata: {\n      extensions: {},\n      provenance: {\n        backend,\n        source: \"snapshot\",\n      },\n    },\n  });\n}\n\nfunction collectIrTables(ir: AthenaSchemaIr): SchemaTable[] {\n  const tables: SchemaTable[] = [];\n  for (const db of ir.databases) {\n    for (const ns of db.namespaces) {\n      tables.push(...ns.tables);\n    }\n  }\n  return tables;\n}\n\nfunction collectIrNamespaceNames(ir: AthenaSchemaIr): Set<string> {\n  const names = new Set<string>();\n  for (const identity of collectIrNamespaceIdentities(ir).values()) {\n    names.add(identity.schema);\n  }\n  return names;\n}\n\nfunction collectIrNamespaceIdentities(\n  ir: AthenaSchemaIr\n): Map<string, { database: string; schema: string }> {\n  const identities = new Map<string, { database: string; schema: string }>();\n  for (const db of ir.databases) {\n    const database = db.identity.physical.database;\n    for (const ns of db.namespaces) {\n      const schema = ns.identity.physical.namespace;\n      identities.set(`${database}\\0${schema}`, { database, schema });\n    }\n  }\n  return identities;\n}\n\nfunction collectIrEnums(ir: AthenaSchemaIr): Map<string, SchemaEnum> {\n  const map = new Map<string, SchemaEnum>();\n  for (const db of ir.databases) {\n    for (const item of db.enums ?? []) {\n      map.set(item.id, item);\n    }\n    for (const ns of db.namespaces) {\n      for (const item of ns.enums ?? []) {\n        map.set(item.id, item);\n      }\n    }\n  }\n  return map;\n}\n\nfunction projectType(\n  type: SchemaType,\n  enums: Map<string, SchemaEnum>,\n  includeEnumValues: boolean\n): V1ColumnType {\n  const native = type.native;\n  const projected: V1ColumnType = {\n    arrayDimensions: native.arrayDimensions,\n    name: native.name,\n    ...(native.intervalQualifier === undefined\n      ? {}\n      : { intervalQualifier: native.intervalQualifier }),\n    ...(native.length === undefined ? {} : { length: native.length }),\n    ...(native.precision === undefined ? {} : { precision: native.precision }),\n    ...(native.scale === undefined ? {} : { scale: native.scale }),\n  };\n  if (includeEnumValues && type.kind === \"enum\") {\n    const labels = enums.get(type.enumId)?.labels;\n    if (labels && labels.length > 0) {\n      return { ...projected, enumValues: [...labels] };\n    }\n  }\n  return projected;\n}\n\nfunction projectTable(\n  table: SchemaTable,\n  ir: AthenaSchemaIr,\n  includeEnumValues: boolean\n): V1Table {\n  const enums = collectIrEnums(ir);\n  const tablesById = new Map(\n    collectIrTables(ir).map((item) => [item.id as string, item])\n  );\n  const schema = table.identity.physical.namespace;\n  const name = table.identity.physical.name;\n  const columns: V1Column[] = table.columns.map((column) => ({\n    default: column.default ?? null,\n    isGenerated: column.generationStrategy?.kind === \"generated-always\",\n    name: column.identity.physical.name,\n    nullable: column.nullable,\n    type: projectType(column.type, enums, includeEnumValues),\n  }));\n\n  let primaryKey: V1Table[\"primaryKey\"] = null;\n  const uniqueConstraints: V1Unique[] = [];\n  const foreignKeys: V1ForeignKey[] = [];\n\n  for (const constraint of table.constraints) {\n    if (constraint.kind === \"primary_key\") {\n      primaryKey = {\n        columns: [...constraint.columns],\n        name: constraint.name ?? null,\n      };\n    } else if (constraint.kind === \"unique\") {\n      uniqueConstraints.push({\n        columns: [...constraint.columns],\n        name: constraint.name ?? null,\n      });\n    } else if (constraint.kind === \"foreign_key\") {\n      const target = tablesById.get(String(constraint.targetTableId));\n      const targetSchema =\n        target?.identity.physical.namespace ??\n        String(constraint.targetTableId).split(\":\")[1]?.split(\".\")[0] ??\n        schema;\n      const targetName =\n        target?.identity.physical.name ??\n        String(constraint.targetTableId).split(\".\").pop() ??\n        String(constraint.targetTableId);\n      const targetDatabase =\n        target?.identity.physical.database ?? table.identity.physical.database;\n      foreignKeys.push({\n        columns: [...constraint.columns],\n        name: constraint.name ?? null,\n        onDelete: constraint.onDelete ?? \"no_action\",\n        onUpdate: constraint.onUpdate ?? \"no_action\",\n        target: {\n          name: targetName,\n          schema: targetSchema,\n          ...(targetDatabase ? { database: targetDatabase } : {}),\n        },\n        targetColumns: [...constraint.targetColumns],\n      });\n    }\n  }\n\n  const indexes: V1Index[] = table.indexes.map((ix) => ({\n    columns: ix.columns.map((c) => ({\n      direction: c.direction ?? \"asc\",\n      name: c.name,\n    })),\n    method: ix.method ?? null,\n    name: ix.name ?? null,\n    predicate: ix.predicate ?? null,\n    unique: ix.unique,\n  }));\n\n  const database = table.identity.physical.database;\n  return {\n    name,\n    schema,\n    ...(database ? { database } : {}),\n    columns,\n    foreignKeys,\n    indexes,\n    primaryKey,\n    uniqueConstraints,\n  };\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  const canonical = canonicalizeAthenaSchemaIr(ir);\n  validateAthenaSchemaIr(canonical);\n  const includeEnumValues =\n    canonical.metadata.provenance?.source !== \"models\" &&\n    canonical.metadata.provenance?.source !== \"table\";\n  const backend =\n    canonical.databases[0]?.backend ??\n    canonical.metadata.provenance?.backend ??\n    null;\n\n  const byNamespace = new Map<\n    string,\n    { database: string; name: string; tables: V1Table[] }\n  >();\n  for (const identity of collectIrNamespaceIdentities(canonical).values()) {\n    const key = `${identity.database}\\0${identity.schema}`;\n    if (!byNamespace.has(key)) {\n      byNamespace.set(key, {\n        database: identity.database,\n        name: identity.schema,\n        tables: [],\n      });\n    }\n  }\n  for (const table of collectIrTables(canonical)) {\n    const projected = projectTable(table, canonical, includeEnumValues);\n    const database = table.identity.physical.database;\n    const key = `${database}\\0${projected.schema}`;\n    const bucket = byNamespace.get(key) ?? {\n      database,\n      name: projected.schema,\n      tables: [],\n    };\n    bucket.tables.push(projected);\n    byNamespace.set(key, bucket);\n  }\n\n  const schemas = [...byNamespace.values()].map((ns) => ({\n    name: ns.name,\n    tables: ns.tables,\n    ...(ns.database ? { database: ns.database } : {}),\n  }));\n\n  return {\n    backend,\n    schemas,\n    version: ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  };\n}\n\nfunction semanticFromKind(kind: ModelColumnKind): string {\n  switch (kind) {\n    case \"boolean\":\n      return \"boolean\";\n    case \"number\":\n      return \"float\";\n    case \"smallint\":\n      return \"smallint\";\n    case \"integer\":\n      return \"integer\";\n    case \"bigint\":\n      return \"bigint\";\n    case \"decimal\":\n      return \"decimal\";\n    case \"json\":\n      return \"json\";\n    case \"enumeration\":\n      return \"enum\";\n    default:\n      return \"string\";\n  }\n}\n\nfunction sqlTypeFromKind(\n  kind: ModelColumnKind,\n  isSoleGeneratedPk: boolean,\n  precision?: number,\n  scale?: number,\n  isIdentity = false\n): string {\n  if (isSoleGeneratedPk) {\n    if (kind === \"smallint\") {\n      return \"smallint\";\n    }\n    if (kind === \"integer\") {\n      return \"integer\";\n    }\n    if (kind === \"bigint\" || kind === \"number\") {\n      return \"bigint\";\n    }\n  }\n  if (isIdentity && kind === \"number\") {\n    return \"bigint\";\n  }\n  switch (kind) {\n    case \"boolean\":\n      return \"boolean\";\n    case \"number\":\n      return \"double precision\";\n    case \"smallint\":\n      return \"smallint\";\n    case \"integer\":\n      return \"integer\";\n    case \"bigint\":\n      return \"bigint\";\n    case \"decimal\":\n      if (typeof precision === \"number\" && typeof scale === \"number\") {\n        return `numeric(${precision}, ${scale})`;\n      }\n      if (typeof precision === \"number\") {\n        return `numeric(${precision})`;\n      }\n      return \"numeric\";\n    case \"json\":\n      return \"jsonb\";\n    case \"enumeration\":\n      return \"text\";\n    default:\n      return \"text\";\n  }\n}\n\nfunction cardinalityFromKind(\n  kind: ModelRelationKind\n): SchemaRelationCardinality {\n  switch (kind) {\n    case \"one-to-one\":\n      return \"1:1\";\n    case \"one-to-many\":\n      return \"1:n\";\n    case \"many-to-many\":\n      return \"n:n\";\n    default:\n      return \"n:1\";\n  }\n}\n\nfunction nativeFromParsed(\n  parsed: V1ColumnType,\n  backend: string\n): NativeTypeDescriptor {\n  return nativeFromV1(parsed, backend);\n}\n\nfunction modelDefaultExpression(\n  defaultValue: ModelColumnDefault,\n  backend: string,\n  columnName: string\n): string | null {\n  switch (defaultValue.kind) {\n    case \"none\":\n    case \"unknown\":\n      return null;\n    case \"sql\": {\n      const expectedDialect =\n        backend === \"postgresql\" || backend === \"postgres\"\n          ? \"postgres\"\n          : backend === \"d1\" || backend === \"sqlite\"\n            ? \"sqlite\"\n            : backend;\n      const actualDialect =\n        defaultValue.dialect === \"d1\" ? \"sqlite\" : defaultValue.dialect;\n      if (actualDialect !== expectedDialect) {\n        throw new Error(\n          `Cannot project ${backend} Schema IR for column \"${columnName}\": default belongs to ${defaultValue.dialect}`\n        );\n      }\n      return defaultValue.expression;\n    }\n    case \"literal\":\n      if (defaultValue.value === null) {\n        return \"NULL\";\n      }\n      if (typeof defaultValue.value === \"string\") {\n        return `'${defaultValue.value.replaceAll(\"'\", \"''\")}'`;\n      }\n      if (typeof defaultValue.value === \"number\") {\n        return String(defaultValue.value);\n      }\n      return defaultValue.value ? \"TRUE\" : \"FALSE\";\n  }\n}\n\nexport function schemaIrFromModels(\n  models: unknown,\n  options: SchemaIrFromModelsOptions = {}\n): AthenaSchemaIr {\n  const defaultSchema = options.defaultSchema?.trim() || DEFAULT_SCHEMA;\n  const defaultDatabase = options.defaultDatabase?.trim() || DEFAULT_DATABASE;\n  const backend =\n    options.backend === undefined ? DEFAULT_BACKEND : options.backend;\n  const resolved = collectModelsFromSqlInput(models as ModelSqlInput);\n\n  const physicalByTableId = new Map<string, Map<string, string>>();\n  for (const table of resolved) {\n    const schemaName = table.schemaName?.trim() || defaultSchema;\n    const databaseName =\n      (table.model.meta as { database?: string }).database?.trim() ||\n      defaultDatabase;\n    const logicalName =\n      (table.model.meta.model ?? table.tableName).trim() || table.tableName;\n    physicalByTableId.set(\n      tableStableId(databaseName, schemaName, logicalName),\n      new Map(table.columns.map((column) => [column.logicalName, column.name]))\n    );\n  }\n\n  const databases = new Map<\n    string,\n    Map<string, { enums: SchemaEnum[]; tables: SchemaTable[] }>\n  >();\n\n  const ensureNs = (databaseName: string, schemaName: string) => {\n    let bySchema = databases.get(databaseName);\n    if (!bySchema) {\n      bySchema = new Map();\n      databases.set(databaseName, bySchema);\n    }\n    let bucket = bySchema.get(schemaName);\n    if (!bucket) {\n      bucket = { enums: [], tables: [] };\n      bySchema.set(schemaName, bucket);\n    }\n    return bucket;\n  };\n\n  for (const table of resolved) {\n    const schemaName = table.schemaName?.trim() || defaultSchema;\n    const databaseName =\n      (table.model.meta as { database?: string }).database?.trim() ||\n      defaultDatabase;\n    const bucket = ensureNs(databaseName, schemaName);\n    const logicalName =\n      (table.model.meta.model ?? table.tableName).trim() || table.tableName;\n    const tableId = tableStableId(databaseName, schemaName, logicalName);\n    const logicalToPhysical = new Map(\n      table.columns.map((column) => [column.logicalName, column.name])\n    );\n    const solePk =\n      table.primaryKey.length === 1 ? table.primaryKey[0] : undefined;\n    const soleGeneratedPk =\n      solePk !== undefined &&\n      table.columns.some(\n        (c) =>\n          c.name === solePk &&\n          c.isGenerated &&\n          c.generationStrategy.kind === \"generated-always\" &&\n          c.defaultValue.kind === \"none\" &&\n          (c.kind === \"number\" ||\n            c.kind === \"smallint\" ||\n            c.kind === \"integer\" ||\n            c.kind === \"bigint\")\n      );\n\n    const columns: SchemaColumn[] = [];\n    const constraints: SchemaConstraint[] = [];\n\n    for (const column of table.columns) {\n      const isSoleGeneratedPk = Boolean(\n        soleGeneratedPk &&\n        column.name === solePk &&\n        (column.kind === \"number\" ||\n          column.kind === \"smallint\" ||\n          column.kind === \"integer\" ||\n          column.kind === \"bigint\")\n      );\n      const sqlType = sqlTypeFromKind(\n        column.kind,\n        isSoleGeneratedPk,\n        column.precision,\n        column.scale,\n        column.identity !== undefined\n      );\n      const parsed = parseSchemaTypeString(sqlType, 0);\n      let enumId: string | undefined;\n      if (column.kind === \"enumeration\" && column.enumValues?.length) {\n        enumId = enumStableId(\n          databaseName,\n          schemaName,\n          logicalName,\n          column.name\n        );\n        bucket.enums.push({\n          id: id(enumId),\n          identity: schemaObjectIdentity(databaseName, schemaName, column.name),\n          labels: [...column.enumValues],\n        });\n        const quoted = column.enumValues\n          .map((v) => `'${String(v).replaceAll(\"'\", \"''\")}'`)\n          .join(\", \");\n        constraints.push({\n          expression: `${column.name} IN (${quoted})`,\n          id: id(`cst:${tableId}:${column.name}:check`),\n          kind: \"check\",\n        });\n      }\n\n      const requestedBackend = backend ?? DEFAULT_BACKEND;\n      const native =\n        column.nativeType?.backend === requestedBackend\n          ? column.nativeType\n          : nativeFromParsed(parsed, requestedBackend);\n      const type: SchemaType = enumId\n        ? { enumId, kind: \"enum\", native }\n        : {\n            kind: \"scalar\",\n            native,\n            semantic:\n              (isSoleGeneratedPk || column.identity !== undefined) &&\n              column.kind === \"number\"\n                ? \"bigint\"\n                : semanticFromKind(column.kind),\n          };\n\n      let defaultExpr = modelDefaultExpression(\n        column.defaultValue,\n        requestedBackend,\n        column.name\n      );\n      let generated = column.isGenerated;\n      if (isSoleGeneratedPk) {\n        const seqName = `${table.tableName}_${column.name}_seq`;\n        defaultExpr = `nextval('${seqName}'::regclass)`;\n        generated = false;\n      }\n\n      const logicalColumnName = column.logicalName || column.name;\n      columns.push({\n        default: defaultExpr,\n        generationStrategy: isSoleGeneratedPk\n          ? { kind: \"none\" }\n          : (column.generationStrategy ??\n            (column.isGenerated\n              ? { kind: \"generated-always\" }\n              : column.identity === undefined\n                ? { kind: \"none\" }\n                : { kind: \"identity\", mode: column.identity })),\n        generated,\n        id: id(\n          columnStableId(\n            databaseName,\n            schemaName,\n            logicalName,\n            logicalColumnName\n          )\n        ),\n        identity: schemaObjectIdentity(\n          databaseName,\n          schemaName,\n          logicalColumnName,\n          { name: column.name }\n        ),\n        nullable: column.nullable,\n        type,\n      });\n    }\n\n    if (table.primaryKey.length > 0) {\n      constraints.push({\n        columns: table.primaryKey,\n        id: id(`cst:${tableId}:pk`),\n        kind: \"primary_key\",\n        name: null,\n      });\n    }\n\n    const relations: SchemaRelation[] = [];\n    const authoredRelations = table.model.meta.relations ?? {};\n    for (const [relName, relation] of Object.entries(authoredRelations) as [\n      string,\n      ModelRelationMetadata,\n    ][]) {\n      const targetId = tableStableId(\n        relation.targetDatabase ?? databaseName,\n        relation.targetSchema,\n        relation.targetModel\n      );\n      if (!physicalByTableId.has(targetId)) {\n        continue;\n      }\n      const isFk =\n        (relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\") &&\n        !relation.through;\n      const backing: string[] = [];\n      const sourcePhysical = mapAuthoredColumns(\n        relation.sourceColumns,\n        logicalToPhysical\n      );\n      const targetPhysical = mapAuthoredColumns(\n        relation.targetColumns,\n        physicalByTableId.get(targetId)\n      );\n      if (isFk) {\n        const fkId = fkStableId(\n          tableId,\n          sourcePhysical,\n          targetId,\n          targetPhysical\n        );\n        backing.push(fkId);\n        constraints.push({\n          columns: sourcePhysical,\n          id: id(fkId),\n          kind: \"foreign_key\",\n          name: null,\n          onDelete: \"no_action\",\n          onUpdate: \"no_action\",\n          targetColumns: targetPhysical,\n          targetTableId: targetId,\n        });\n      }\n      let through: SchemaRelationThrough | undefined;\n      if (relation.through) {\n        const throughTableId = tableStableId(\n          databaseName,\n          relation.through.schema,\n          relation.through.model\n        );\n        if (!physicalByTableId.has(throughTableId)) {\n          continue;\n        }\n        const throughMap = physicalByTableId.get(throughTableId);\n        through = {\n          sourceColumns: mapAuthoredColumns(\n            relation.through.sourceColumns,\n            throughMap\n          ),\n          tableId: throughTableId,\n          targetColumns: mapAuthoredColumns(\n            relation.through.targetColumns,\n            throughMap\n          ),\n        };\n      }\n      relations.push({\n        backingConstraintIds: backing,\n        cardinality: cardinalityFromKind(relation.kind),\n        id: id(`rel:${tableId}:${relName}`),\n        name: relName,\n        sourceColumns: sourcePhysical,\n        sourceTableId: tableId,\n        targetColumns: targetPhysical,\n        targetTableId: targetId,\n        through,\n      });\n    }\n\n    bucket.tables.push({\n      columns,\n      constraints,\n      id: id(tableId),\n      identity: schemaObjectIdentity(\n        databaseName,\n        schemaName,\n        (table.model.meta.model ?? table.tableName).trim() || table.tableName,\n        { name: table.tableName }\n      ),\n      indexes: [],\n      relations,\n    });\n  }\n\n  const emittedDatabases: SchemaDatabase[] = [...databases.entries()].map(\n    ([databaseName, bySchema]) => ({\n      backend,\n      id: id(`db:${databaseName}`),\n      identity: schemaObjectIdentity(\n        databaseName,\n        DEFAULT_SCHEMA,\n        databaseName\n      ),\n      namespaces: [...bySchema.entries()].map(([schemaName, bucket]) => ({\n        enums: bucket.enums,\n        id: id(`ns:${databaseName}.${schemaName}`),\n        identity: schemaObjectIdentity(databaseName, schemaName, schemaName),\n        tables: bucket.tables,\n      })),\n    })\n  );\n\n  return canonicalizeAthenaSchemaIr({\n    databases: emittedDatabases,\n    irVersion: ATHENA_SCHEMA_IR_VERSION,\n    kind: ATHENA_SCHEMA_IR_KIND,\n    metadata: {\n      extensions: {},\n      provenance: { backend, source: \"models\" },\n    },\n  });\n}\n\nexport function schemaIrFromTable(tableDef: unknown): AthenaSchemaIr {\n  if (isObject(tableDef) && tableDef.ir != null) {\n    return canonicalizeAthenaSchemaIr(tableDef.ir);\n  }\n  return schemaIrFromModels([tableDef], { defaultDatabase: DEFAULT_DATABASE });\n}\n\nfunction columnTypeFromIntrospection(\n  column: IntrospectionColumn,\n  backend: string,\n  enumId?: string\n): SchemaType {\n  const parsedUdt = parseSchemaTypeString(\n    column.udtName || column.dataType,\n    column.arrayDimensions ?? 0\n  );\n  const formatted = parseSchemaTypeString(\n    column.dataType || column.udtName,\n    column.arrayDimensions ?? 0\n  );\n  const name =\n    parsedUdt.name.length <= formatted.name.length\n      ? parsedUdt.name\n      : formatted.name;\n  const native: NativeTypeDescriptor = {\n    arrayDimensions: formatted.arrayDimensions || parsedUdt.arrayDimensions,\n    backend,\n    ...(formatted.intervalQualifier === undefined &&\n    parsedUdt.intervalQualifier === undefined\n      ? {}\n      : {\n          intervalQualifier:\n            formatted.intervalQualifier ?? parsedUdt.intervalQualifier,\n        }),\n    length: formatted.length ?? parsedUdt.length,\n    name,\n    precision: formatted.precision ?? parsedUdt.precision,\n    scale: formatted.scale ?? parsedUdt.scale,\n  };\n  if (enumId || column.typeKind === \"enum\") {\n    return {\n      enumId:\n        enumId ??\n        enumStableId(\"default\", \"_\", \"_\", column.udtName || column.name),\n      kind: \"enum\",\n      native,\n    };\n  }\n  return { kind: \"scalar\", native, semantic: name };\n}\n\nfunction isOutboundFkRelation(relation: IntrospectionRelation): boolean {\n  return relation.kind === \"many-to-one\" || relation.kind === \"one-to-one\";\n}\n\nfunction introspectedEnumStableId(\n  database: string,\n  schema: string,\n  name: string\n): string {\n  return `enum:${database}.${schema}.${name}`;\n}\n\nfunction lookupIntrospectionTable(\n  snapshot: IntrospectionSnapshot,\n  schema: string,\n  name: string\n): IntrospectionTable | undefined {\n  const ns = snapshot.schemas[schema];\n  if (!ns) {\n    return;\n  }\n  const direct = ns.tables[name];\n  if (direct) {\n    return direct;\n  }\n  return Object.values(ns.tables).find((table) => table.name === name);\n}\n\nfunction collectIntrospectionTables(\n  snapshot: IntrospectionSnapshot,\n  selectedNamespaces: ReadonlySet<string>\n): Map<string, IntrospectionTable> {\n  const included = new Map<string, IntrospectionTable>();\n  const tableKey = (schema: string, name: string) => `${schema}\\u0000${name}`;\n  const includeTable = (schema: string, name: string): void => {\n    const key = tableKey(schema, name);\n    if (included.has(key)) {\n      return;\n    }\n    const table = lookupIntrospectionTable(snapshot, schema, name);\n    if (!table) {\n      return;\n    }\n    included.set(key, table);\n    for (const relation of Object.values(table.relations)) {\n      includeTable(relation.targetSchema, relation.targetModel);\n      if (relation.through) {\n        includeTable(relation.through.schema, relation.through.model);\n      }\n    }\n  };\n  for (const nsName of selectedNamespaces) {\n    const ns = snapshot.schemas[nsName];\n    if (!ns) {\n      continue;\n    }\n    for (const table of Object.values(ns.tables)) {\n      includeTable(table.schema || nsName, table.name);\n    }\n  }\n  return included;\n}\n\nexport function schemaIrFromIntrospection(\n  snapshot: IntrospectionSnapshot,\n  options: SchemaIrFromIntrospectionOptions = {}\n): AthenaSchemaIr {\n  const excludeInternal = options.excludeInternal !== false;\n  const allow = options.schemas ? new Set(options.schemas) : null;\n  const databaseName = snapshot.database?.trim() || DEFAULT_DATABASE;\n  const backend = snapshot.backend || DEFAULT_BACKEND;\n\n  const selectedNamespaces = new Set<string>();\n  for (const ns of Object.values(snapshot.schemas)) {\n    if (allow && !allow.has(ns.name)) {\n      continue;\n    }\n    if (excludeInternal && INTERNAL_SCHEMAS.has(ns.name)) {\n      continue;\n    }\n    selectedNamespaces.add(ns.name);\n  }\n  const includedTables = collectIntrospectionTables(\n    snapshot,\n    selectedNamespaces\n  );\n\n  const namespaces: SchemaNamespace[] = [];\n\n  for (const ns of Object.values(snapshot.schemas)) {\n    const schemaTables = [...includedTables.values()].filter(\n      (table) => (table.schema || ns.name) === ns.name\n    );\n    if (schemaTables.length === 0) {\n      if (!selectedNamespaces.has(ns.name)) {\n        continue;\n      }\n      namespaces.push({\n        enums: [],\n        id: id(`ns:${databaseName}.${ns.name}`),\n        identity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n        tables: [],\n      });\n      continue;\n    }\n\n    const enums: SchemaEnum[] = [];\n    const seenEnums = new Set<string>();\n    const tables: SchemaTable[] = [];\n\n    for (const table of schemaTables) {\n      const tableId = tableStableId(databaseName, table.schema, table.name);\n      const columns: SchemaColumn[] = [];\n      for (const column of Object.values(table.columns)) {\n        if (column.identity !== undefined && column.isNullable) {\n          throw new Error(\n            `Introspection identity column \"${table.schema}.${table.name}.${column.name}\" must be non-nullable`\n          );\n        }\n        let enumId: string | undefined;\n        if (column.enumValues && column.enumValues.length > 0) {\n          const enumName = column.udtName || column.dataType || column.name;\n          enumId = introspectedEnumStableId(\n            databaseName,\n            table.schema,\n            enumName\n          );\n          if (!seenEnums.has(enumId)) {\n            seenEnums.add(enumId);\n            enums.push({\n              id: id(enumId),\n              identity: schemaObjectIdentity(\n                databaseName,\n                table.schema,\n                enumName\n              ),\n              labels: [...column.enumValues],\n            });\n          }\n        }\n        const defaultExpr =\n          column.defaultExpression === undefined\n            ? null\n            : column.defaultExpression;\n        columns.push({\n          default: defaultExpr,\n          generationStrategy:\n            column.identity !== undefined\n              ? { kind: \"identity\", mode: column.identity }\n              : column.isGenerated\n                ? { kind: \"generated-always\" }\n                : { kind: \"none\" },\n          generated: column.isGenerated,\n          id: id(\n            columnStableId(databaseName, table.schema, table.name, column.name)\n          ),\n          identity: schemaObjectIdentity(\n            databaseName,\n            table.schema,\n            column.name\n          ),\n          nullable: column.isNullable,\n          type: columnTypeFromIntrospection(column, backend, enumId),\n        });\n      }\n\n      const constraints: SchemaConstraint[] = [];\n      if (table.primaryKey.length > 0) {\n        constraints.push({\n          columns: [...table.primaryKey],\n          id: id(`cst:${tableId}:pk`),\n          kind: \"primary_key\",\n          name: null,\n        });\n      }\n      for (const unique of table.uniqueConstraints ?? []) {\n        constraints.push({\n          columns: [...unique.columns],\n          id: id(`cst:${tableId}:uq:${unique.columns.join(\",\")}`),\n          kind: \"unique\",\n          name: unique.name ?? null,\n        });\n      }\n\n      const relations: SchemaRelation[] = [];\n      const seenFk = new Set<string>();\n      for (const [relName, relation] of Object.entries(table.relations)) {\n        const targetId = tableStableId(\n          relation.targetDatabase ?? databaseName,\n          relation.targetSchema,\n          relation.targetModel\n        );\n        if (\n          !includedTables.has(\n            `${relation.targetSchema}\\u0000${relation.targetModel}`\n          )\n        ) {\n          continue;\n        }\n        if (relation.through) {\n          const throughKey = `${relation.through.schema}\\u0000${relation.through.model}`;\n          if (!includedTables.has(throughKey)) {\n            continue;\n          }\n        }\n        const backing: string[] = [];\n        if (isOutboundFkRelation(relation) && !relation.through) {\n          const key = [\n            relation.sourceColumns.join(\",\"),\n            relation.targetSchema,\n            relation.targetModel,\n            relation.targetColumns.join(\",\"),\n          ].join(\"\\0\");\n          if (!seenFk.has(key)) {\n            seenFk.add(key);\n            const fkId = fkStableId(\n              tableId,\n              relation.sourceColumns,\n              targetId,\n              relation.targetColumns\n            );\n            backing.push(fkId);\n            constraints.push({\n              columns: [...relation.sourceColumns],\n              id: id(fkId),\n              kind: \"foreign_key\",\n              name: relation.name ?? null,\n              onDelete: normalizeReferentialAction(\n                relation.onDelete\n              ) as SchemaReferentialAction,\n              onUpdate: normalizeReferentialAction(\n                relation.onUpdate\n              ) as SchemaReferentialAction,\n              targetColumns: [...relation.targetColumns],\n              targetTableId: targetId,\n            });\n          }\n        }\n        relations.push({\n          backingConstraintIds: backing,\n          cardinality: cardinalityFromKind(relation.kind),\n          id: id(`rel:${tableId}:${relName}`),\n          name: relation.name ?? relName,\n          sourceColumns: [...relation.sourceColumns],\n          sourceTableId: tableId,\n          targetColumns: [...relation.targetColumns],\n          targetTableId: targetId,\n          ...(relation.through\n            ? {\n                through: {\n                  sourceColumns: [...relation.through.sourceColumns],\n                  tableId: tableStableId(\n                    databaseName,\n                    relation.through.schema,\n                    relation.through.model\n                  ),\n                  targetColumns: [...relation.through.targetColumns],\n                },\n              }\n            : {}),\n        });\n      }\n\n      const indexes: SchemaIndex[] = (table.indexes ?? []).map((ix, index) => {\n        const directions = ix.columnDirections ?? [];\n        return {\n          columns: ix.columns.map((colName, i) => ({\n            direction:\n              directions[i] === \"desc\" ? (\"desc\" as const) : (\"asc\" as const),\n            name: colName,\n          })),\n          id: id(`idx:${tableId}:${ix.name ?? index}`),\n          method: ix.method ?? null,\n          name: ix.name ?? null,\n          predicate: ix.predicate ?? null,\n          unique: Boolean(ix.unique),\n        };\n      });\n\n      tables.push({\n        columns,\n        constraints,\n        id: id(tableId),\n        identity: schemaObjectIdentity(databaseName, table.schema, table.name),\n        indexes,\n        relations,\n      });\n    }\n\n    namespaces.push({\n      enums,\n      id: id(`ns:${databaseName}.${ns.name}`),\n      identity: schemaObjectIdentity(databaseName, ns.name, ns.name),\n      tables,\n    });\n  }\n\n  return canonicalizeAthenaSchemaIr({\n    databases: [\n      {\n        backend,\n        id: id(`db:${databaseName}`),\n        identity: schemaObjectIdentity(\n          databaseName,\n          DEFAULT_SCHEMA,\n          databaseName\n        ),\n        namespaces,\n      },\n    ],\n    irVersion: ATHENA_SCHEMA_IR_VERSION,\n    kind: ATHENA_SCHEMA_IR_KIND,\n    metadata: {\n      extensions: {},\n      provenance: {\n        backend,\n        generatedAt: snapshot.generatedAt,\n        source: \"introspection\",\n      },\n    },\n  });\n}\n\nfunction irDatabaseNames(ir: AthenaSchemaIr): string[] {\n  const names = new Set<string>();\n  for (const db of ir.databases) {\n    names.add(db.identity.physical.database || DEFAULT_DATABASE);\n  }\n  return [...names];\n}\n\nfunction rewriteIrDatabaseName(\n  ir: AthenaSchemaIr,\n  from: string,\n  to: string\n): AthenaSchemaIr {\n  if (from === to) {\n    return ir;\n  }\n  const rewritten: unknown = JSON.parse(JSON.stringify(ir), (key, value) => {\n    if (key === \"database\" && value === from) {\n      return to;\n    }\n    if (typeof value !== \"string\") {\n      return value;\n    }\n    if (value === `db:${from}`) {\n      return `db:${to}`;\n    }\n    if (\n      key === \"id\" ||\n      key === \"enumId\" ||\n      key === \"targetTableId\" ||\n      key.endsWith(\"Id\")\n    ) {\n      return value\n        .replaceAll(`:${from}.`, `:${to}.`)\n        .replaceAll(`db:${from}`, `db:${to}`);\n    }\n    return value;\n  });\n  return 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  from: AthenaSchemaIr,\n  to: AthenaSchemaIr\n): { from: AthenaSchemaIr; to: AthenaSchemaIr } {\n  const fromNames = irDatabaseNames(from);\n  const toNames = irDatabaseNames(to);\n  if (fromNames.length !== 1 || toNames.length !== 1) {\n    return { from, to };\n  }\n  const fromDb = fromNames[0];\n  const toDb = toNames[0];\n  if (!(fromDb && toDb) || fromDb === toDb) {\n    return { from, to };\n  }\n  if (toDb === DEFAULT_DATABASE) {\n    return { from, to: rewriteIrDatabaseName(to, DEFAULT_DATABASE, fromDb) };\n  }\n  if (fromDb === DEFAULT_DATABASE) {\n    return { from: rewriteIrDatabaseName(from, DEFAULT_DATABASE, toDb), to };\n  }\n  return { from, to };\n}\n\nexport {\n  collectIrNamespaceIdentities,\n  collectIrNamespaceNames,\n  collectIrTables,\n  projectTable,\n};\n","import type {\n  SchemaForeignKey,\n  SchemaIndex,\n  SchemaTableIdentity,\n  SchemaUniqueConstraint,\n} from \"./types.ts\";\n\n/** Stable map key for a schema-qualified table. */\nexport function tableIdentityKey(identity: SchemaTableIdentity): string {\n  return `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nexport function tableIdentityKeyParts(schema: string, name: string): string {\n  return tableIdentityKey({ name, schema });\n}\n\n/** Structural unique key: ordered columns (names ignored). */\nexport function uniqueStructuralKey(\n  unique: Pick<SchemaUniqueConstraint, \"columns\">\n): string {\n  return `u:${unique.columns.join(\"\\u0000\")}`;\n}\n\n/** Structural FK key: columns + target + target columns + actions. */\nexport function foreignKeyStructuralKey(\n  fk: Pick<\n    SchemaForeignKey,\n    \"columns\" | \"target\" | \"targetColumns\" | \"onDelete\" | \"onUpdate\"\n  >\n): string {\n  return [\n    \"fk\",\n    fk.columns.join(\",\"),\n    tableIdentityKey(fk.target),\n    fk.targetColumns.join(\",\"),\n    fk.onDelete,\n    fk.onUpdate,\n  ].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  readonly columns: readonly string[];\n  readonly target: SchemaTableIdentity;\n  readonly targetColumns: readonly string[];\n}\n\nexport function foreignKeyMatchKey(fk: ForeignKeyMatchKeyInput): string {\n  return [\n    \"fkm\",\n    fk.columns.join(\",\"),\n    tableIdentityKey(fk.target),\n    fk.targetColumns.join(\",\"),\n  ].join(\"\\u0000\");\n}\n\n/** Structural index key: unique flag + ordered columns + directions + predicate. */\nexport function indexStructuralKey(\n  index: Pick<SchemaIndex, \"columns\" | \"unique\" | \"predicate\" | \"method\">\n): string {\n  const cols = index.columns\n    .map((c) => `${c.name}:${c.direction ?? \"asc\"}`)\n    .join(\",\");\n  return [\n    \"ix\",\n    index.unique ? \"1\" : \"0\",\n    cols,\n    index.predicate ?? \"\",\n    index.method ?? \"\",\n  ].join(\"\\u0000\");\n}\n\nexport function compareStrings(a: string, b: string): number {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\nexport function compareTableIdentity(\n  a: SchemaTableIdentity,\n  b: SchemaTableIdentity\n): number {\n  const schemaCmp = compareStrings(a.schema, b.schema);\n  if (schemaCmp !== 0) {\n    return schemaCmp;\n  }\n  return compareStrings(a.name, b.name);\n}\n","import type { SchemaDiffOperation, SchemaDiffSummary } from \"./types.ts\";\n\nconst EMPTY_SUMMARY: SchemaDiffSummary = {\n  columnsAdded: 0,\n  columnsChanged: 0,\n  columnsRemoved: 0,\n  columnsRenamed: 0,\n  foreignKeysAdded: 0,\n  foreignKeysChanged: 0,\n  foreignKeysRemoved: 0,\n  indexesAdded: 0,\n  indexesRemoved: 0,\n  primaryKeysAdded: 0,\n  primaryKeysRemoved: 0,\n  schemasAdded: 0,\n  schemasRemoved: 0,\n  tablesAdded: 0,\n  tablesRemoved: 0,\n  tablesRenamed: 0,\n  totalOperations: 0,\n  uniquesAdded: 0,\n  uniquesRemoved: 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  | \"duplicate_schema\"\n  | \"duplicate_table\"\n  | \"duplicate_column\"\n  | \"duplicate_unique\"\n  | \"duplicate_foreign_key\"\n  | \"duplicate_index\"\n  | \"missing_pk_column\"\n  | \"missing_unique_column\"\n  | \"missing_fk_column\"\n  | \"missing_index_column\"\n  | \"fk_arity_mismatch\"\n  | \"invalid_snapshot\"\n  | \"unsupported_snapshot_version\";\n\nexport class SchemaDiffError extends Error {\n  readonly code: SchemaDiffErrorCode;\n  readonly details?: Readonly<Record<string, unknown>>;\n\n  constructor(\n    code: SchemaDiffErrorCode,\n    message: string,\n    details?: Readonly<Record<string, unknown>>\n  ) {\n    super(message);\n    this.name = \"SchemaDiffError\";\n    this.code = code;\n    this.details = details;\n  }\n}\n","import { SchemaDiffError } from \"./errors.ts\";\nimport {\n  foreignKeyMatchKey,\n  indexStructuralKey,\n  uniqueStructuralKey,\n} 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        { column: column.name, table: tableLabel }\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          { column: col, table: tableLabel }\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        { columns: unique.columns, table: tableLabel }\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          { column: col, table: tableLabel }\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          columns: fk.columns,\n          table: tableLabel,\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        { columns: fk.columns, table: tableLabel }\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          { column: col, table: tableLabel }\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        { columns: index.columns.map((c) => c.name), table: tableLabel }\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          { column: col.name, table: tableLabel }\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  alignSingletonDefaultDatabase,\n  collectIrNamespaceIdentities,\n  collectIrTables,\n  isAthenaSchemaIr,\n  projectTable,\n  schemaIrFromSnapshot,\n  schemaSnapshotFromIr,\n} from \"../ir/compatibility.ts\";\nimport type { SchemaColumnGenerationStrategy } from \"../ir/column.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  foreignKeyMatchKey,\n  indexStructuralKey,\n  uniqueStructuralKey,\n} from \"./identity.ts\";\nimport {\n  columnsEqual,\n  columnTypesEqual,\n  normalizeSchemaSnapshot,\n  primaryKeysEqual,\n} from \"./normalize.ts\";\nimport { summarizeSchemaDiffOperations } from \"./summary.ts\";\nimport type {\n  AthenaSchemaSnapshot,\n  DiffSchemasInput,\n  DiffSchemasOptions,\n  SchemaColumn,\n  SchemaColumnChange,\n  SchemaDiff,\n  SchemaDiffOperation,\n  SchemaForeignKey,\n  SchemaIndex,\n  SchemaTable,\n  SchemaTableIdentity,\n  SchemaUniqueConstraint,\n} from \"./types.ts\";\nimport { validateSchemaSnapshot } from \"./validate.ts\";\n\nconst OPERATION_KIND_ORDER: Readonly<\n  Record<SchemaDiffOperation[\"kind\"], number>\n> = {\n  add_column: 110,\n  add_foreign_key: 170,\n  add_index: 160,\n  add_primary_key: 140,\n  add_unique_constraint: 150,\n  alter_column: 130,\n  alter_foreign_key: 180,\n  create_schema: 4,\n  create_table: 90,\n  drop_column: 50,\n  drop_foreign_key: 10,\n  drop_index: 20,\n  drop_primary_key: 40,\n  drop_schema: 70,\n  drop_table: 60,\n  drop_unique_constraint: 30,\n  rename_column: 100,\n  rename_table: 5,\n};\n\nfunction tableId(table: SchemaTable): SchemaTableIdentity {\n  const database = table.database?.trim();\n  return {\n    name: table.name,\n    schema: table.schema,\n    ...(database ? { database } : {}),\n  };\n}\n\nfunction operationSortKey(op: SchemaDiffOperation): string {\n  const kindOrder = String(OPERATION_KIND_ORDER[op.kind]).padStart(3, \"0\");\n  switch (op.kind) {\n    case \"create_schema\":\n    case \"drop_schema\":\n      return `${kindOrder}\\u0000${op.database ?? \"\"}\\u0000${op.schema}`;\n    case \"create_table\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n    case \"drop_table\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n    case \"rename_table\":\n      return `${kindOrder}\\u0000${op.from.schema}\\u0000${op.from.name}\\u0000${op.to.name}`;\n    case \"add_column\":\n    case \"drop_column\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column.name}`;\n    case \"rename_column\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}`;\n    case \"alter_column\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.column}`;\n    case \"add_primary_key\":\n    case \"drop_primary_key\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.primaryKey.columns.join(\",\")}`;\n    case \"add_unique_constraint\":\n    case \"drop_unique_constraint\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${op.unique.columns.join(\",\")}`;\n    case \"add_foreign_key\":\n    case \"drop_foreign_key\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.foreignKey)}`;\n    case \"alter_foreign_key\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${foreignKeyMatchKey(op.before)}`;\n    case \"add_index\":\n    case \"drop_index\":\n      return `${kindOrder}\\u0000${op.table.schema}\\u0000${op.table.name}\\u0000${indexStructuralKey(op.index)}`;\n    default: {\n      const _never: never = op;\n      return kindOrder + String(_never);\n    }\n  }\n}\n\nfunction sortOperations(\n  operations: SchemaDiffOperation[]\n): SchemaDiffOperation[] {\n  return operations\n    .map((op, index) => ({ index, op }))\n    .sort((a, b) => {\n      const ka = operationSortKey(a.op);\n      const kb = operationSortKey(b.op);\n      if (ka < kb) {\n        return -1;\n      }\n      if (ka > kb) {\n        return 1;\n      }\n      return a.index - b.index;\n    })\n    .map((item) => item.op);\n}\n\nfunction indexColumns(table: SchemaTable): Map<string, SchemaColumn> {\n  const map = new Map<string, SchemaColumn>();\n  for (const column of table.columns) {\n    map.set(column.name, column);\n  }\n  return map;\n}\n\nfunction indexUniques(table: SchemaTable): Map<string, SchemaUniqueConstraint> {\n  const map = new Map<string, SchemaUniqueConstraint>();\n  for (const unique of table.uniqueConstraints) {\n    map.set(uniqueStructuralKey(unique), unique);\n  }\n  return map;\n}\n\nfunction indexForeignKeys(table: SchemaTable): Map<string, SchemaForeignKey> {\n  const map = new Map<string, SchemaForeignKey>();\n  for (const fk of table.foreignKeys) {\n    map.set(foreignKeyMatchKey(fk), fk);\n  }\n  return map;\n}\n\nfunction indexIndexes(table: SchemaTable): Map<string, SchemaIndex> {\n  const map = new Map<string, SchemaIndex>();\n  for (const index of table.indexes) {\n    map.set(indexStructuralKey(index), index);\n  }\n  return map;\n}\n\nfunction diffColumns(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[],\n  fromGenerationStrategies: ReadonlyMap<\n    string,\n    SchemaColumnGenerationStrategy\n  >,\n  toGenerationStrategies: ReadonlyMap<string, SchemaColumnGenerationStrategy>\n): void {\n  const identity = tableId(toTable);\n  const fromCols = indexColumns(fromTable);\n  const toCols = indexColumns(toTable);\n\n  for (const [name, fromCol] of fromCols) {\n    if (!toCols.has(name)) {\n      ops.push({\n        column: fromCol,\n        kind: \"drop_column\",\n        table: identity,\n      });\n    }\n  }\n\n  for (const [name, toCol] of toCols) {\n    const fromCol = fromCols.get(name);\n    if (!fromCol) {\n      ops.push({\n        column: toCol,\n        kind: \"add_column\",\n        table: identity,\n      });\n      continue;\n    }\n    const fromGenerationStrategy = fromGenerationStrategies.get(name) ?? {\n      kind: \"none\",\n    };\n    const toGenerationStrategy = toGenerationStrategies.get(name) ?? {\n      kind: \"none\",\n    };\n    if (\n      columnsEqual(fromCol, toCol) &&\n      generationStrategiesEqual(fromGenerationStrategy, toGenerationStrategy)\n    ) {\n      continue;\n    }\n\n    const changes: {\n      type?: { from: SchemaColumn[\"type\"]; to: SchemaColumn[\"type\"] };\n      nullable?: { from: boolean; to: boolean };\n      default?: { from: string | null; to: string | null };\n      generationStrategy?: SchemaColumnChange<\n        SchemaColumnGenerationStrategy\n      >;\n      isGenerated?: { from: boolean; to: boolean };\n    } = {};\n\n    // Include enumValues (and all other type fields) so enum-label-only\n    // changes populate the explicit `changes.type` delta for planners.\n    if (!columnTypesEqual(fromCol.type, toCol.type)) {\n      changes.type = { from: fromCol.type, to: toCol.type };\n    }\n    if (fromCol.nullable !== toCol.nullable) {\n      changes.nullable = { from: fromCol.nullable, to: toCol.nullable };\n    }\n    if (fromCol.default !== toCol.default) {\n      changes.default = { from: fromCol.default, to: toCol.default };\n    }\n    if (fromCol.isGenerated !== toCol.isGenerated) {\n      changes.isGenerated = {\n        from: fromCol.isGenerated,\n        to: toCol.isGenerated,\n      };\n    }\n    if (\n      !generationStrategiesEqual(\n        fromGenerationStrategy,\n        toGenerationStrategy\n      )\n    ) {\n      changes.generationStrategy = {\n        from: fromGenerationStrategy,\n        to: toGenerationStrategy,\n      };\n    }\n\n    ops.push({\n      after: toCol,\n      before: fromCol,\n      changes,\n      column: name,\n      kind: \"alter_column\",\n      table: identity,\n    });\n  }\n}\n\nfunction generationStrategiesEqual(\n  from: SchemaColumnGenerationStrategy,\n  to: SchemaColumnGenerationStrategy\n): boolean {\n  if (from.kind !== to.kind) {\n    return false;\n  }\n  return (\n    from.kind !== \"identity\" ||\n    (to.kind === \"identity\" && from.mode === to.mode)\n  );\n}\n\nfunction diffPrimaryKey(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[]\n): void {\n  const identity = tableId(toTable);\n  if (primaryKeysEqual(fromTable.primaryKey, toTable.primaryKey)) {\n    return;\n  }\n  if (fromTable.primaryKey) {\n    ops.push({\n      kind: \"drop_primary_key\",\n      primaryKey: fromTable.primaryKey,\n      table: identity,\n    });\n  }\n  if (toTable.primaryKey) {\n    ops.push({\n      kind: \"add_primary_key\",\n      primaryKey: toTable.primaryKey,\n      table: identity,\n    });\n  }\n}\n\nfunction diffUniques(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[]\n): void {\n  const identity = tableId(toTable);\n  const fromMap = indexUniques(fromTable);\n  const toMap = indexUniques(toTable);\n\n  for (const [key, unique] of fromMap) {\n    if (!toMap.has(key)) {\n      ops.push({\n        kind: \"drop_unique_constraint\",\n        table: identity,\n        unique,\n      });\n    }\n  }\n  for (const [key, unique] of toMap) {\n    if (!fromMap.has(key)) {\n      ops.push({\n        kind: \"add_unique_constraint\",\n        table: identity,\n        unique,\n      });\n    }\n  }\n}\n\nfunction foreignKeysEqual(a: SchemaForeignKey, b: SchemaForeignKey): boolean {\n  return (\n    foreignKeyMatchKey(a) === foreignKeyMatchKey(b) &&\n    a.onDelete === b.onDelete &&\n    a.onUpdate === b.onUpdate\n  );\n}\n\nfunction diffForeignKeys(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[]\n): void {\n  const identity = tableId(toTable);\n  const fromMap = indexForeignKeys(fromTable);\n  const toMap = indexForeignKeys(toTable);\n\n  for (const [key, fromFk] of fromMap) {\n    const toFk = toMap.get(key);\n    if (!toFk) {\n      ops.push({\n        foreignKey: fromFk,\n        kind: \"drop_foreign_key\",\n        table: identity,\n      });\n      continue;\n    }\n    if (!foreignKeysEqual(fromFk, toFk)) {\n      ops.push({\n        after: toFk,\n        before: fromFk,\n        kind: \"alter_foreign_key\",\n        table: identity,\n      });\n    }\n  }\n\n  for (const [key, toFk] of toMap) {\n    if (!fromMap.has(key)) {\n      ops.push({\n        foreignKey: toFk,\n        kind: \"add_foreign_key\",\n        table: identity,\n      });\n    }\n  }\n}\n\nfunction diffIndexes(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[]\n): void {\n  const identity = tableId(toTable);\n  const fromMap = indexIndexes(fromTable);\n  const toMap = indexIndexes(toTable);\n\n  for (const [key, index] of fromMap) {\n    if (!toMap.has(key)) {\n      ops.push({\n        index,\n        kind: \"drop_index\",\n        table: identity,\n      });\n    }\n  }\n  for (const [key, index] of toMap) {\n    if (!fromMap.has(key)) {\n      ops.push({\n        index,\n        kind: \"add_index\",\n        table: identity,\n      });\n    }\n  }\n}\n\nfunction rewriteColumnName(\n  name: string,\n  renameMap: ReadonlyMap<string, string>\n): string {\n  return renameMap.get(name) ?? name;\n}\n\nfunction alignProjectedTableAfterColumnRenames(\n  table: SchemaTable,\n  renameMap: Map<string, string>,\n  droppedNames: Set<string>\n): SchemaTable {\n  if (renameMap.size === 0 && droppedNames.size === 0) {\n    return table;\n  }\n  return {\n    ...table,\n    columns: table.columns\n      .filter((column) => !droppedNames.has(column.name))\n      .map((column) => ({\n        ...column,\n        name: rewriteColumnName(column.name, renameMap),\n      })),\n    foreignKeys: table.foreignKeys.map((fk) => ({\n      ...fk,\n      columns: fk.columns.map((name) => rewriteColumnName(name, renameMap)),\n    })),\n    indexes: table.indexes.map((index) => ({\n      ...index,\n      columns: index.columns.map((column) => ({\n        ...column,\n        name: rewriteColumnName(column.name, renameMap),\n      })),\n    })),\n    primaryKey: table.primaryKey\n      ? {\n          ...table.primaryKey,\n          columns: table.primaryKey.columns.map((name) =>\n            rewriteColumnName(name, renameMap)\n          ),\n        }\n      : table.primaryKey,\n    uniqueConstraints: table.uniqueConstraints.map((unique) => ({\n      ...unique,\n      columns: unique.columns.map((name) => rewriteColumnName(name, renameMap)),\n    })),\n  };\n}\n\nfunction generationStrategiesForProjectedTable(\n  table: IrSchemaTable,\n  renameMap: ReadonlyMap<string, string>\n): ReadonlyMap<string, SchemaColumnGenerationStrategy> {\n  const strategies = new Map<string, SchemaColumnGenerationStrategy>();\n  for (const column of table.columns) {\n    strategies.set(\n      rewriteColumnName(column.identity.physical.name, renameMap),\n      column.generationStrategy ?? { kind: \"none\" }\n    );\n  }\n  return strategies;\n}\n\nfunction tableIdentityKey(identity: SchemaTableIdentity): string {\n  return `${identity.database ?? \"\"}\\u0000${identity.schema}\\u0000${identity.name}`;\n}\n\nfunction relationNameKey(table: SchemaTableIdentity, name: string): string {\n  return `${table.database ?? \"\"}\\u0000${table.schema}\\u0000${name}`;\n}\n\nfunction droppedRelationNameKey(op: SchemaDiffOperation): string | null {\n  let name: string | null | undefined;\n  switch (op.kind) {\n    case \"drop_index\":\n      name = op.index.name;\n      break;\n    case \"drop_unique_constraint\":\n      name = op.unique.name;\n      break;\n    case \"drop_primary_key\":\n      name = op.primaryKey.name;\n      break;\n    default:\n      return null;\n  }\n  if (typeof name !== \"string\" || name.length === 0) {\n    return null;\n  }\n  return relationNameKey(op.table, name);\n}\n\nfunction droppedRelationTableKey(op: SchemaDiffOperation): string | null {\n  switch (op.kind) {\n    case \"drop_index\":\n    case \"drop_unique_constraint\":\n    case \"drop_primary_key\":\n      return tableIdentityKey(op.table);\n    default:\n      return null;\n  }\n}\n\nfunction relationNameFromDroppedTable(\n  table: SchemaTableIdentity,\n  name: string | null | undefined\n): string | null {\n  if (typeof name !== \"string\" || name.length === 0) {\n    return null;\n  }\n  return relationNameKey(table, name);\n}\n\nfunction relationNamesOwnedByDroppedTable(op: SchemaDiffOperation): string[] {\n  if (op.kind !== \"drop_table\" || !op.previous) {\n    return [];\n  }\n  const names: string[] = [];\n  const add = (name: string | null | undefined) => {\n    const key = relationNameFromDroppedTable(op.table, name);\n    if (key !== null) {\n      names.push(key);\n    }\n  };\n  add(op.previous.primaryKey?.name);\n  for (const unique of op.previous.uniqueConstraints) {\n    add(unique.name);\n  }\n  for (const index of op.previous.indexes) {\n    add(index.name);\n  }\n  return names;\n}\n\nfunction unusedTableName(\n  identity: SchemaTableIdentity,\n  reserved: Set<string>\n): string {\n  const safeFrom = identity.name.replace(/[^A-Za-z0-9_]/g, \"_\");\n  let name = `__athena_rename_${safeFrom}`;\n  let n = 2;\n  while (reserved.has(tableIdentityKey({ ...identity, name }))) {\n    name = `__athena_rename_${safeFrom}_${n}`;\n    n += 1;\n  }\n  reserved.add(tableIdentityKey({ ...identity, name }));\n  return name;\n}\n\nfunction isDependencyRemovalForDroppedTable(\n  op: SchemaDiffOperation,\n  dest: string\n): boolean {\n  return (\n    op.kind === \"drop_foreign_key\" &&\n    tableIdentityKey(op.foreignKey.target) === dest\n  );\n}\n\nfunction extractPendingMatching(\n  pending: SchemaDiffOperation[],\n  predicate: (op: SchemaDiffOperation) => boolean\n): SchemaDiffOperation[] {\n  const extracted: SchemaDiffOperation[] = [];\n  const kept: SchemaDiffOperation[] = [];\n  for (const op of pending) {\n    if (predicate(op)) {\n      extracted.push(op);\n    } else {\n      kept.push(op);\n    }\n  }\n  pending.length = 0;\n  pending.push(...kept);\n  return extracted;\n}\n\nfunction applyTableIdentityScheduling(\n  ops: SchemaDiffOperation[]\n): SchemaDiffOperation[] {\n  const occupied = new Set<string>();\n  const reserved = new Set<string>();\n  for (const op of ops) {\n    if (op.kind === \"drop_table\") {\n      occupied.add(tableIdentityKey(op.table));\n      reserved.add(tableIdentityKey(op.table));\n      for (const relation of relationNamesOwnedByDroppedTable(op)) {\n        occupied.add(relation);\n        reserved.add(relation);\n      }\n    }\n    if (op.kind === \"rename_table\") {\n      occupied.add(tableIdentityKey(op.from));\n      reserved.add(tableIdentityKey(op.from));\n      reserved.add(tableIdentityKey(op.to));\n    }\n    if (op.kind === \"create_table\") {\n      reserved.add(tableIdentityKey(tableId(op.table)));\n    }\n    const droppedRelation = droppedRelationNameKey(op);\n    const dropTableKey = droppedRelationTableKey(op);\n    if (droppedRelation !== null && dropTableKey !== null) {\n      reserved.add(droppedRelation);\n      if (dropTableKey !== droppedRelation) {\n        occupied.add(droppedRelation);\n      }\n    }\n  }\n\n  const pending = [...ops];\n  const out: SchemaDiffOperation[] = [];\n  while (pending.length > 0) {\n    const op = pending[0];\n    if (op === undefined) {\n      break;\n    }\n    if (op.kind === \"rename_table\") {\n      const dest = tableIdentityKey(op.to);\n      if (occupied.has(dest)) {\n        const dropIdx = pending.findIndex(\n          (candidate) =>\n            candidate.kind === \"drop_table\" &&\n            (tableIdentityKey(candidate.table) === dest ||\n              relationNamesOwnedByDroppedTable(candidate).includes(dest))\n        );\n        if (dropIdx >= 0) {\n          const drop = pending.splice(dropIdx, 1)[0];\n          if (drop?.kind === \"drop_table\") {\n            const removals = extractPendingMatching(pending, (candidate) =>\n              isDependencyRemovalForDroppedTable(candidate, dest)\n            );\n            out.push(...removals, drop);\n            occupied.delete(dest);\n            occupied.delete(tableIdentityKey(drop.table));\n            for (const relation of relationNamesOwnedByDroppedTable(drop)) {\n              occupied.delete(relation);\n            }\n          }\n          continue;\n        }\n        const dropRelationIdx = pending.findIndex((candidate) => {\n          const key = droppedRelationNameKey(candidate);\n          return key === dest && droppedRelationTableKey(candidate) !== dest;\n        });\n        if (dropRelationIdx >= 0) {\n          const dropRelation = pending.splice(dropRelationIdx, 1)[0];\n          if (dropRelation !== undefined) {\n            out.push(dropRelation);\n            occupied.delete(dest);\n          }\n          continue;\n        }\n        const occupantIdx = pending.findIndex((candidate, index) => {\n          if (index === 0 || candidate.kind !== \"rename_table\") {\n            return false;\n          }\n          return (\n            tableIdentityKey(candidate.from) === dest &&\n            !occupied.has(tableIdentityKey(candidate.to))\n          );\n        });\n        if (occupantIdx > 0) {\n          const [occupant] = pending.splice(occupantIdx, 1);\n          if (occupant) {\n            pending.unshift(occupant);\n          }\n          continue;\n        }\n        const tempName = unusedTableName(op.from, reserved);\n        const tempIdentity: SchemaTableIdentity = {\n          name: tempName,\n          schema: op.from.schema,\n        };\n        out.push({\n          from: op.from,\n          kind: \"rename_table\",\n          to: tempIdentity,\n        });\n        occupied.delete(tableIdentityKey(op.from));\n        occupied.add(tableIdentityKey(tempIdentity));\n        pending[0] = {\n          from: tempIdentity,\n          kind: \"rename_table\",\n          to: op.to,\n        };\n        continue;\n      }\n      pending.shift();\n      out.push(op);\n      occupied.delete(tableIdentityKey(op.from));\n      occupied.add(dest);\n      continue;\n    }\n    pending.shift();\n    if (op.kind === \"drop_table\") {\n      occupied.delete(tableIdentityKey(op.table));\n      for (const relation of relationNamesOwnedByDroppedTable(op)) {\n        occupied.delete(relation);\n      }\n    }\n    const droppedRelation = droppedRelationNameKey(op);\n    if (droppedRelation !== null) {\n      occupied.delete(droppedRelation);\n    }\n    if (op.kind === \"create_table\") {\n      occupied.add(tableIdentityKey(tableId(op.table)));\n    }\n    out.push(op);\n  }\n  return out;\n}\n\nfunction unusedPhysicalName(base: string, reserved: Set<string>): string {\n  let name = base;\n  let n = 2;\n  while (reserved.has(name)) {\n    name = `${base}_${n}`;\n    n += 1;\n  }\n  reserved.add(name);\n  return name;\n}\n\nfunction linearizeColumnRenames(\n  renames: Array<{ from: string; to: string }>,\n  occupied: Set<string>,\n  reservedNames: Set<string>\n): Array<{ from: string; to: string }> {\n  const remaining = new Map<string, string>();\n  for (const rename of renames) {\n    if (rename.from !== rename.to) {\n      remaining.set(rename.from, rename.to);\n    }\n  }\n  const reserved = new Set(reservedNames);\n  for (const to of remaining.values()) {\n    reserved.add(to);\n  }\n\n  const seen = new Set<string>();\n  for (const start of remaining.keys()) {\n    if (seen.has(start)) {\n      continue;\n    }\n    const stack: string[] = [];\n    const onStack = new Set<string>();\n    let node: string | undefined = start;\n    while (node !== undefined && remaining.has(node)) {\n      if (onStack.has(node)) {\n        const dest = remaining.get(node);\n        if (dest === undefined) {\n          break;\n        }\n        const safeFrom = node.replace(/[^A-Za-z0-9_]/g, \"_\");\n        const temp = unusedPhysicalName(\n          `__athena_rename_${safeFrom}`,\n          reserved\n        );\n        remaining.set(node, temp);\n        remaining.set(temp, dest);\n        break;\n      }\n      if (seen.has(node)) {\n        break;\n      }\n      onStack.add(node);\n      stack.push(node);\n      node = remaining.get(node);\n    }\n    for (const item of stack) {\n      seen.add(item);\n    }\n  }\n\n  const live = new Set(occupied);\n  const ordered: Array<{ from: string; to: string }> = [];\n  const pending = [...remaining.entries()].map(([from, to]) => ({ from, to }));\n  while (pending.length > 0) {\n    const idx = pending.findIndex((item) => !live.has(item.to));\n    if (idx < 0) {\n      throw new SchemaIrError(\"Column rename cycle could not be linearized\");\n    }\n    const item = pending.splice(idx, 1)[0];\n    if (!item) {\n      break;\n    }\n    ordered.push(item);\n    live.delete(item.from);\n    live.add(item.to);\n  }\n  return ordered;\n}\n\nfunction emitColumnRenamesByIrId(\n  fromIrTable: IrSchemaTable,\n  toIrTable: IrSchemaTable,\n  fromProjected: SchemaTable,\n  tableIdentity: SchemaTableIdentity,\n  ops: SchemaDiffOperation[]\n): { droppedNames: Set<string>; renameMap: Map<string, string> } {\n  const toById = new Map(\n    toIrTable.columns.map((column) => [String(column.id), column])\n  );\n  const fromProjectedByName = indexColumns(fromProjected);\n  const planned: Array<{ from: string; to: string }> = [];\n  const renameMap = new Map<string, string>();\n  const occupied = new Set<string>();\n  const reserved = new Set<string>();\n  const droppedNames = new Set<string>();\n  for (const fromCol of fromIrTable.columns) {\n    const fromName = fromCol.identity.physical.name;\n    reserved.add(fromName);\n    const toCol = toById.get(String(fromCol.id));\n    if (!toCol) {\n      droppedNames.add(fromName);\n      const column = fromProjectedByName.get(fromName);\n      if (column) {\n        ops.push({\n          column,\n          kind: \"drop_column\",\n          table: tableIdentity,\n        });\n      }\n      continue;\n    }\n    occupied.add(fromName);\n    const toName = toCol.identity.physical.name;\n    if (fromName === toName) {\n      continue;\n    }\n    renameMap.set(fromName, toName);\n    planned.push({ from: fromName, to: toName });\n  }\n  for (const toCol of toIrTable.columns) {\n    reserved.add(toCol.identity.physical.name);\n  }\n  for (const rename of linearizeColumnRenames(planned, occupied, reserved)) {\n    ops.push({\n      from: rename.from,\n      kind: \"rename_column\",\n      table: tableIdentity,\n      to: rename.to,\n    });\n  }\n  return { droppedNames, renameMap };\n}\n\nfunction diffTable(\n  fromTable: SchemaTable,\n  toTable: SchemaTable,\n  ops: SchemaDiffOperation[],\n  fromGenerationStrategies: ReadonlyMap<\n    string,\n    SchemaColumnGenerationStrategy\n  >,\n  toGenerationStrategies: ReadonlyMap<string, SchemaColumnGenerationStrategy>\n): void {\n  diffColumns(\n    fromTable,\n    toTable,\n    ops,\n    fromGenerationStrategies,\n    toGenerationStrategies\n  );\n  diffPrimaryKey(fromTable, toTable, ops);\n  diffUniques(fromTable, toTable, ops);\n  diffForeignKeys(fromTable, toTable, ops);\n  diffIndexes(fromTable, toTable, ops);\n}\n\nfunction liftToIr(\n  value: AthenaSchemaSnapshot | AthenaSchemaIr,\n  shouldValidate: boolean\n): AthenaSchemaIr {\n  if (isAthenaSchemaIr(value)) {\n    const canonical = canonicalizeAthenaSchemaIr(value);\n    if (shouldValidate) {\n      validateAthenaSchemaIr(canonical);\n    }\n    return canonical;\n  }\n  const normalized = normalizeSchemaSnapshot(value);\n  if (shouldValidate) {\n    validateSchemaSnapshot(normalized);\n  }\n  return schemaIrFromSnapshot(normalized);\n}\n\nfunction normalizeProjectedTable(\n  table: SchemaTable,\n  backend: string | null | undefined\n): SchemaTable {\n  const snapshot = normalizeSchemaSnapshot({\n    backend: backend ?? null,\n    schemas: [{ name: table.schema, tables: [table] }],\n    version: 1,\n  });\n  return 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  input: DiffSchemasInput,\n  options: DiffSchemasOptions = {}\n): SchemaDiff {\n  const shouldValidate = options.validate !== false;\n  const lifted = alignSingletonDefaultDatabase(\n    liftToIr(input.from, shouldValidate),\n    liftToIr(input.to, shouldValidate)\n  );\n  const fromIr = lifted.from;\n  const toIr = lifted.to;\n\n  const fromProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(fromIr));\n  const toProjected = normalizeSchemaSnapshot(schemaSnapshotFromIr(toIr));\n  const backend = toProjected.backend ?? fromProjected.backend;\n\n  const ops: SchemaDiffOperation[] = [];\n  const fromIrTables = collectIrTables(fromIr);\n  const toIrTables = collectIrTables(toIr);\n  const fromById = new Map(\n    fromIrTables.map((table) => [String(table.id), table])\n  );\n  const toById = new Map(toIrTables.map((table) => [String(table.id), table]));\n\n  const fromSchemas = collectIrNamespaceIdentities(fromIr);\n  const toSchemas = collectIrNamespaceIdentities(toIr);\n\n  for (const [key, identity] of fromSchemas) {\n    if (!toSchemas.has(key)) {\n      ops.push({\n        kind: \"drop_schema\",\n        schema: identity.schema,\n        ...(identity.database ? { database: identity.database } : {}),\n      });\n    }\n  }\n  for (const [key, identity] of toSchemas) {\n    if (!fromSchemas.has(key)) {\n      ops.push({\n        kind: \"create_schema\",\n        schema: identity.schema,\n        ...(identity.database ? { database: identity.database } : {}),\n      });\n    }\n  }\n\n  const pairedToIds = new Set<string>();\n  const pairs: Array<{\n    fromTable: IrSchemaTable;\n    toTable: IrSchemaTable;\n  }> = [];\n\n  for (const [tableObjectId, fromTable] of fromById) {\n    const toTable = toById.get(tableObjectId);\n    if (toTable) {\n      pairs.push({ fromTable, toTable });\n      pairedToIds.add(tableObjectId);\n    }\n  }\n\n  const unmatchedFrom = [...fromById.entries()].filter(\n    ([id]) => !toById.has(id)\n  );\n  const unmatchedTo = [...toById.entries()].filter(\n    ([id]) => !pairedToIds.has(id)\n  );\n  const toByPhysical = new Map<string, IrSchemaTable[]>();\n  for (const [, table] of unmatchedTo) {\n    const key = physicalIdentityKey(table.identity);\n    const list = toByPhysical.get(key) ?? [];\n    list.push(table);\n    toByPhysical.set(key, list);\n  }\n\n  const physicallyPairedFrom = new Set<string>();\n  for (const [fromId, fromTable] of unmatchedFrom) {\n    const candidates = toByPhysical.get(\n      physicalIdentityKey(fromTable.identity)\n    );\n    const toTable = candidates?.shift();\n    if (toTable) {\n      pairs.push({ fromTable, toTable });\n      physicallyPairedFrom.add(fromId);\n      pairedToIds.add(String(toTable.id));\n    }\n  }\n\n  for (const [fromId, fromTable] of unmatchedFrom) {\n    if (physicallyPairedFrom.has(fromId)) {\n      continue;\n    }\n    const projected = normalizeProjectedTable(\n      projectTable(fromTable, fromIr, true),\n      backend\n    );\n    ops.push({\n      kind: \"drop_table\",\n      previous: projected,\n      table: tableId(projected),\n    });\n  }\n\n  for (const [tableObjectId, toTable] of toById) {\n    if (pairedToIds.has(tableObjectId)) {\n      continue;\n    }\n    const toProjectedTable = normalizeProjectedTable(\n      projectTable(toTable, toIr, true),\n      backend\n    );\n    ops.push({\n      kind: \"create_table\",\n      table: toProjectedTable,\n    });\n  }\n\n  for (const { fromTable, toTable } of pairs) {\n    const toProjectedTable = normalizeProjectedTable(\n      projectTable(toTable, toIr, true),\n      backend\n    );\n    const fromProjectedTable = normalizeProjectedTable(\n      projectTable(fromTable, fromIr, true),\n      backend\n    );\n    const fromIdentity = tableId(fromProjectedTable);\n    const toIdentity = tableId(toProjectedTable);\n    const fromDatabase = fromTable.identity.physical.database;\n    const toDatabase = toTable.identity.physical.database;\n    if (fromDatabase !== toDatabase) {\n      throw new SchemaIrError(\n        `Cross-database table moves are unsupported (${fromDatabase} → ${toDatabase})`\n      );\n    }\n    if (\n      fromIdentity.schema !== toIdentity.schema ||\n      fromIdentity.name !== toIdentity.name\n    ) {\n      ops.push({\n        from: fromIdentity,\n        kind: \"rename_table\",\n        to: toIdentity,\n      });\n    }\n    const { droppedNames, renameMap: columnRenames } = emitColumnRenamesByIrId(\n      fromTable,\n      toTable,\n      fromProjectedTable,\n      toIdentity,\n      ops\n    );\n    const fromAligned = alignProjectedTableAfterColumnRenames(\n      fromProjectedTable,\n      columnRenames,\n      droppedNames\n    );\n    diffTable(\n      fromAligned,\n      toProjectedTable,\n      ops,\n      generationStrategiesForProjectedTable(fromTable, columnRenames),\n      generationStrategiesForProjectedTable(toTable, new Map())\n    );\n  }\n\n  const operations = expandDroppedTableColumns(\n    applyTableIdentityScheduling(sortOperations(ops))\n  );\n  const summary = summarizeSchemaDiffOperations(operations);\n  return {\n    isEmpty: operations.length === 0,\n    operations,\n    summary,\n  };\n}\n\nfunction expandDroppedTableColumns(\n  operations: SchemaDiffOperation[]\n): SchemaDiffOperation[] {\n  const extra: SchemaDiffOperation[] = [];\n  const seen = new Set<string>();\n  for (const op of operations) {\n    if (op.kind === \"drop_column\") {\n      seen.add(`${tableIdentityKey(op.table)}.${op.column.name}`);\n    }\n  }\n  for (const op of operations) {\n    if (op.kind !== \"drop_table\" || !op.previous) {\n      continue;\n    }\n    for (const column of op.previous.columns) {\n      const key = `${tableIdentityKey(op.table)}.${column.name}`;\n      if (seen.has(key)) {\n        continue;\n      }\n      seen.add(key);\n      extra.push({\n        column,\n        kind: \"drop_column\",\n        table: op.table,\n      });\n    }\n  }\n  return extra.length === 0 ? operations : [...operations, ...extra];\n}\n\n/** Convenience: true when normalized snapshots are equivalent. */\nexport function isSchemaDiffEmpty(diff: SchemaDiff): boolean {\n  return diff.isEmpty;\n}\n\n/**\n * Build an empty Athena schema snapshot (useful for tests / baselines).\n */\nexport function emptySchemaSnapshot(\n  backend: string | null = null\n): AthenaSchemaSnapshot {\n  return normalizeSchemaSnapshot({\n    backend,\n    schemas: [],\n    version: 1,\n  });\n}\n","import {\n  schemaIrFromIntrospection,\n  schemaSnapshotFromIr,\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  /** Drop Athena internal namespaces (default true). */\n  readonly excludeInternal?: boolean;\n  /**\n   * Schema names to include. When omitted, all introspected schemas are kept\n   * except {@link ATHENA_INTERNAL_SCHEMAS} when `excludeInternal` is true.\n   */\n  readonly schemas?: readonly string[];\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  snapshot: IntrospectionSnapshot,\n  options: SchemaSnapshotFromIntrospectionOptions = {}\n): AthenaSchemaSnapshot {\n  const ir: AthenaSchemaIr = schemaIrFromIntrospection(snapshot, {\n    excludeInternal: options.excludeInternal,\n    schemas: options.schemas,\n  });\n  return 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  diffSchemas,\n  emptySchemaSnapshot,\n  isSchemaDiffEmpty,\n} from \"./diff.ts\";\nexport { SchemaDiffError, type SchemaDiffErrorCode } from \"./errors.ts\";\nexport {\n  ATHENA_INTERNAL_SCHEMAS,\n  type SchemaSnapshotFromIntrospectionOptions,\n  schemaSnapshotFromIntrospection,\n} from \"./from-introspection.ts\";\nexport {\n  type SchemaSnapshotFromModelsOptions,\n  schemaSnapshotFromModels,\n} from \"./from-models.ts\";\nexport {\n  compareStrings,\n  compareTableIdentity,\n  foreignKeyMatchKey,\n  foreignKeyStructuralKey,\n  indexStructuralKey,\n  tableIdentityKey,\n  tableIdentityKeyParts,\n  uniqueStructuralKey,\n} from \"./identity.ts\";\nexport {\n  columnsEqual,\n  columnTypesEqual,\n  normalizeDefaultExpression,\n  normalizeReferentialAction,\n  normalizeSchemaColumnType,\n  normalizeSchemaSnapshot,\n  parseSchemaTypeString,\n  primaryKeysEqual,\n} from \"./normalize.ts\";\nexport { summarizeSchemaDiffOperations } from \"./summary.ts\";\nexport {\n  type AddColumnOperation,\n  type AddForeignKeyOperation,\n  type AddIndexOperation,\n  type AddPrimaryKeyOperation,\n  type AddUniqueConstraintOperation,\n  type AlterColumnOperation,\n  type AlterForeignKeyOperation,\n  ATHENA_SCHEMA_SNAPSHOT_VERSION,\n  type AthenaSchemaSnapshot,\n  type CreateSchemaOperation,\n  type CreateTableOperation,\n  type DiffSchemasInput,\n  type DiffSchemasOptions,\n  type DropColumnOperation,\n  type DropForeignKeyOperation,\n  type DropIndexOperation,\n  type DropPrimaryKeyOperation,\n  type DropSchemaOperation,\n  type DropTableOperation,\n  type DropUniqueConstraintOperation,\n  type RenameColumnOperation,\n  type RenameTableOperation,\n  type SchemaColumn,\n  type SchemaColumnChange,\n  type SchemaColumnChanges,\n  type SchemaColumnGenerationStrategy,\n  type SchemaColumnType,\n  type SchemaDiff,\n  type SchemaDiffOperation,\n  type SchemaDiffOperationKind,\n  type SchemaDiffSummary,\n  type SchemaForeignKey,\n  type SchemaIndex,\n  type SchemaIndexColumn,\n  type SchemaNamespace,\n  type SchemaPrimaryKey,\n  type SchemaReferentialAction,\n  type SchemaTable,\n  type SchemaTableIdentity,\n  type SchemaUniqueConstraint,\n} from \"./types.ts\";\nexport { validateSchemaSnapshot } from \"./validate.ts\";\n","import type {\n  SchemaColumnType,\n  SchemaDiff,\n  SchemaDiffOperation,\n  SchemaTableIdentity,\n} from \"../../../schema/diff/index.ts\";\n\nexport const DESTRUCTIVE_SCHEMA_KINDS = new Set<SchemaDiffOperation[\"kind\"]>([\n  \"drop_schema\",\n  \"drop_table\",\n  \"drop_column\",\n  \"drop_primary_key\",\n  \"drop_unique_constraint\",\n  \"drop_foreign_key\",\n  \"drop_index\",\n]);\n\nexport function isDestructiveSchemaOperation(\n  operation: SchemaDiffOperation\n): boolean {\n  return DESTRUCTIVE_SCHEMA_KINDS.has(operation.kind);\n}\n\nexport function formatColumnType(type: SchemaColumnType): string {\n  if (type.length != null) {\n    return `${type.name}(${type.length})`;\n  }\n  if (type.precision != null && type.scale != null) {\n    return `${type.name}(${type.precision},${type.scale})`;\n  }\n  if (type.arrayDimensions > 0) {\n    return `${type.name}${\"[]\".repeat(type.arrayDimensions)}`;\n  }\n  return type.name;\n}\n\nfunction tableKey(table: SchemaTableIdentity): string {\n  return table.schema === \"public\"\n    ? table.name\n    : `${table.schema}.${table.name}`;\n}\n\nfunction operationTable(operation: SchemaDiffOperation): string {\n  switch (operation.kind) {\n    case \"create_schema\":\n    case \"drop_schema\":\n      return operation.schema;\n    case \"create_table\":\n      return tableKey(operation.table);\n    case \"drop_table\":\n      return tableKey(operation.table);\n    case \"rename_table\":\n      return tableKey(operation.from);\n    case \"add_column\":\n    case \"drop_column\":\n    case \"rename_column\":\n    case \"alter_column\":\n    case \"add_primary_key\":\n    case \"drop_primary_key\":\n    case \"add_unique_constraint\":\n    case \"drop_unique_constraint\":\n    case \"add_foreign_key\":\n    case \"drop_foreign_key\":\n    case \"alter_foreign_key\":\n    case \"add_index\":\n    case \"drop_index\":\n      return tableKey(operation.table);\n    default: {\n      const _exhaustive: never = operation;\n      return _exhaustive;\n    }\n  }\n}\n\nfunction formatOperationLine(operation: SchemaDiffOperation): string {\n  switch (operation.kind) {\n    case \"create_schema\":\n      return \"+ schema\";\n    case \"drop_schema\":\n      return \"- schema\";\n    case \"create_table\":\n      return \"+ table\";\n    case \"drop_table\":\n      return \"- table\";\n    case \"rename_table\":\n      return `~ ${operation.from.name} → ${operation.to.name}`;\n    case \"add_column\":\n      return `+ ${operation.column.name} ${formatColumnType(operation.column.type)}`;\n    case \"drop_column\":\n      return `- ${operation.column.name}`;\n    case \"rename_column\":\n      return `~ ${operation.from} → ${operation.to}`;\n    case \"alter_column\": {\n      const typeChange = operation.changes.type;\n      if (typeChange) {\n        return `~ ${operation.column} ${formatColumnType(typeChange.from)} → ${formatColumnType(typeChange.to)}`;\n      }\n      return `~ ${operation.column}`;\n    }\n    case \"add_primary_key\":\n      return `+ primary key (${operation.primaryKey.columns.join(\", \")})`;\n    case \"drop_primary_key\":\n      return \"- primary key\";\n    case \"add_unique_constraint\":\n      return `+ unique (${operation.unique.columns.join(\", \")})`;\n    case \"drop_unique_constraint\":\n      return `- unique (${operation.unique.columns.join(\", \")})`;\n    case \"add_foreign_key\":\n      return `+ foreign key (${operation.foreignKey.columns.join(\", \")})`;\n    case \"drop_foreign_key\":\n      return `- foreign key (${operation.foreignKey.columns.join(\", \")})`;\n    case \"alter_foreign_key\":\n      return \"~ foreign key\";\n    case \"add_index\":\n      return `+ index (${operation.index.columns.map((column) => column.name).join(\", \")})`;\n    case \"drop_index\":\n      return `- index (${operation.index.columns.map((column) => column.name).join(\", \")})`;\n    default: {\n      const _exhaustive: never = operation;\n      return _exhaustive;\n    }\n  }\n}\n\nexport function formatSchemaDiffText(diff: SchemaDiff): string {\n  if (diff.operations.length === 0) {\n    return [\"Athena schema diff\", \"\", \"No changes.\", \"\"].join(\"\\n\");\n  }\n\n  const grouped = new Map<string, SchemaDiffOperation[]>();\n  for (const operation of diff.operations) {\n    const key = operationTable(operation);\n    const list = grouped.get(key) ?? [];\n    list.push(operation);\n    grouped.set(key, list);\n  }\n\n  const lines: string[] = [\"Athena schema diff\", \"\"];\n  for (const [table, operations] of grouped) {\n    lines.push(table);\n    for (const operation of operations) {\n      lines.push(`  ${formatOperationLine(operation)}`);\n    }\n    lines.push(\"\");\n  }\n\n  const destructive = diff.operations.filter(\n    isDestructiveSchemaOperation\n  ).length;\n  lines.push(\n    `${diff.summary.totalOperations} change${diff.summary.totalOperations === 1 ? \"\" : \"s\"}`\n  );\n  if (destructive > 0) {\n    lines.push(`${destructive} potentially destructive`);\n  }\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatProposedMigration(diff: SchemaDiff): string {\n  const lines = [\n    \"-- Proposed Athena schema migration (not applied).\",\n    \"-- Generated by `athena-js schema diff --migration`.\",\n    \"-- Review, then author SQL under athena/migrations/.\",\n    \"\",\n  ];\n  if (diff.operations.length === 0) {\n    lines.push(\"-- No operations.\");\n    return `${lines.join(\"\\n\")}\\n`;\n  }\n  for (const operation of diff.operations) {\n    const risk = isDestructiveSchemaOperation(operation)\n      ? \"destructive\"\n      : \"additive\";\n    lines.push(`-- [${risk}] ${operation.kind} ${operationTable(operation)}`);\n    lines.push(`--   ${formatOperationLine(operation)}`);\n  }\n  return `${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  cwd: string,\n  explicit?: string\n): string {\n  if (!explicit) {\n    return join(cwd, DEFAULT_SCHEMA_SNAPSHOT_PATH);\n  }\n  if (explicit.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(explicit)) {\n    return explicit;\n  }\n  return 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 { reportAthenaPolicySchemaImpact } from \"../../../policy/schema-impact.ts\";\nimport {\n  type AthenaSchemaSnapshot,\n  diffSchemas,\n  normalizeSchemaSnapshot,\n  schemaSnapshotFromIntrospection,\n  validateSchemaSnapshot,\n} from \"../../../schema/diff/index.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport { loadPolicyDocument } from \"../policy/load.ts\";\nimport {\n  formatProposedMigration,\n  formatSchemaDiffText,\n  isDestructiveSchemaOperation,\n} from \"./format.ts\";\nimport { resolveSchemaSnapshotPath } from \"./paths.ts\";\n\nexport interface SchemaDiffReport {\n  /** True when this run wrote the first snapshot because none existed. */\n  baselineWritten?: boolean;\n  destructiveCount: number;\n  diff: ReturnType<typeof diffSchemas>;\n  fromPath?: string;\n  ok: boolean;\n  policyImpact?: ReturnType<typeof reportAthenaPolicySchemaImpact>;\n  proposedMigration?: string;\n  text: string;\n}\n\nexport async function inspectPhysicalSchemaSnapshot(options: {\n  configPath?: string;\n  cwd: string;\n  inspect?: () => Promise<AthenaSchemaSnapshot>;\n}): Promise<AthenaSchemaSnapshot> {\n  if (options.inspect) {\n    return normalizeSchemaSnapshot(await options.inspect());\n  }\n\n  const loaded = await loadGeneratorConfig({\n    configPath: options.configPath,\n    cwd: options.cwd,\n  });\n  const authority = resolveGeneratorDatabaseAuthority({\n    applyProjectEnv: false,\n    cwd: options.cwd,\n    loaded,\n    mode: \"direct\",\n  });\n  try {\n    const provider = resolveGeneratorProvider(\n      authority.provider,\n      loaded.config.experimental\n    );\n    const introspection = await provider.inspect({\n      schemas:\n        authority.provider.kind === \"postgres\"\n          ? resolveProviderSchemas(authority.provider)\n          : undefined,\n    });\n    return schemaSnapshotFromIntrospection(introspection);\n  } finally {\n    authority.restoreEnv();\n  }\n}\n\nexport function readSchemaSnapshotFile(path: string): AthenaSchemaSnapshot {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(readFileSync(path, \"utf8\"));\n  } catch (error) {\n    if (\n      error instanceof Error &&\n      \"code\" in error &&\n      (error as { code?: string }).code === \"ENOENT\"\n    ) {\n      throw error;\n    }\n    throw new AthenaCliError({\n      code: \"SCHEMA001\",\n      exitCode: CliExitCode.Configuration,\n      hint: error instanceof Error ? error.message : String(error),\n      message: `Could not read schema snapshot \"${path}\".`,\n    });\n  }\n  validateSchemaSnapshot(parsed as AthenaSchemaSnapshot);\n  return normalizeSchemaSnapshot(parsed as AthenaSchemaSnapshot);\n}\n\nexport function writeSchemaSnapshotFile(\n  path: string,\n  snapshot: AthenaSchemaSnapshot\n): void {\n  mkdirSync(dirname(path), { recursive: true });\n  writeFileSync(`${path}`, `${JSON.stringify(snapshot, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function runSchemaDiff(options: {\n  configPath?: string;\n  cwd: string;\n  fromPath?: string;\n  inspect?: () => Promise<AthenaSchemaSnapshot>;\n  migration?: boolean;\n  policies?: unknown;\n  policyImpact?: boolean;\n}): Promise<SchemaDiffReport> {\n  const fromPath = resolveSchemaSnapshotPath(options.cwd, options.fromPath);\n  let from: AthenaSchemaSnapshot;\n  try {\n    from = readSchemaSnapshotFile(fromPath);\n  } catch (error) {\n    const missing =\n      error instanceof Error &&\n      \"code\" in error &&\n      (error as { code?: string }).code === \"ENOENT\";\n    if (missing) {\n      const current = await inspectPhysicalSchemaSnapshot(options);\n      writeSchemaSnapshotFile(fromPath, current);\n      const diff = diffSchemas({ from: current, to: current });\n      return {\n        baselineWritten: true,\n        destructiveCount: 0,\n        diff,\n        fromPath,\n        ok: true,\n        text: [\n          \"Wrote first schema snapshot\",\n          `  ${fromPath}`,\n          \"No prior snapshot — captured the physical database as the baseline (0 operations).\",\n          \"\",\n        ].join(\"\\n\"),\n      };\n    }\n    if (error instanceof AthenaCliError && error.code === \"SCHEMA001\") {\n      throw new AthenaCliError({\n        code: \"SCHEMA002\",\n        exitCode: CliExitCode.Configuration,\n        hint: \"Run `athena-js schema snapshot` to capture the physical database, then diff again.\",\n        message: `No schema snapshot at \"${fromPath}\".`,\n      });\n    }\n    throw error;\n  }\n  const to = await inspectPhysicalSchemaSnapshot(options);\n  const diff = diffSchemas({ from, to });\n  const destructiveCount = diff.operations.filter(\n    isDestructiveSchemaOperation\n  ).length;\n  let policyImpact: SchemaDiffReport[\"policyImpact\"];\n  if (options.policyImpact) {\n    const policies =\n      options.policies ??\n      (\n        await loadPolicyDocument({\n          configPath: options.configPath,\n          cwd: options.cwd,\n        })\n      ).document;\n    policyImpact = reportAthenaPolicySchemaImpact({\n      operations: diff.operations,\n      policies,\n    });\n  }\n  return {\n    destructiveCount,\n    diff,\n    fromPath,\n    ok: diff.operations.length === 0,\n    ...(options.policyImpact ? { policyImpact: policyImpact ?? [] } : {}),\n    proposedMigration: options.migration\n      ? formatProposedMigration(diff)\n      : undefined,\n    text: formatSchemaDiffText(diff),\n  };\n}\n\nexport async function runSchemaSnapshot(options: {\n  check?: boolean;\n  configPath?: string;\n  cwd: string;\n  inspect?: () => Promise<AthenaSchemaSnapshot>;\n  outPath?: string;\n}): Promise<{\n  check: boolean;\n  destructiveCount: number;\n  diff?: ReturnType<typeof diffSchemas>;\n  ok: boolean;\n  path: string;\n  text: string;\n}> {\n  const path = resolveSchemaSnapshotPath(options.cwd, options.outPath);\n  const current = await inspectPhysicalSchemaSnapshot(options);\n  if (options.check) {\n    let committed: AthenaSchemaSnapshot;\n    try {\n      committed = readSchemaSnapshotFile(path);\n    } catch (error) {\n      if (\n        error instanceof Error &&\n        \"code\" in error &&\n        (error as { code?: string }).code === \"ENOENT\"\n      ) {\n        throw new AthenaCliError({\n          code: \"SCHEMA002\",\n          exitCode: CliExitCode.Configuration,\n          hint: \"Run `athena-js schema snapshot` first.\",\n          message: `No schema snapshot at \"${path}\".`,\n        });\n      }\n      throw error;\n    }\n    const diff = diffSchemas({ from: committed, to: current });\n    const destructiveCount = diff.operations.filter(\n      isDestructiveSchemaOperation\n    ).length;\n    return {\n      check: true,\n      destructiveCount,\n      diff,\n      ok: diff.operations.length === 0,\n      path,\n      text: formatSchemaDiffText(diff),\n    };\n  }\n  writeSchemaSnapshotFile(path, current);\n  return {\n    check: false,\n    destructiveCount: 0,\n    ok: true,\n    path,\n    text: `Wrote schema snapshot\\n  ${path}\\n`,\n  };\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\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 { isDebugEnabled, withCliDebugContext } from \"./debug.ts\";\nimport { AthenaCliError, ensureCliErrorId } from \"./errors.ts\";\nimport {\n  getCliExitCode,\n  setCliExitCode,\n  withCliExitCodeContext,\n} from \"./exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"./format-error.ts\";\nimport {\n  createCliLogger,\n  createCliTraceContext,\n  runCliAsyncContext,\n  sanitizeCliArgv,\n} from \"./logging/index.ts\";\nimport type { AthenaCliLogger, BootstrapHandoffV1 } from \"./logging/types.ts\";\nimport { parseCommandResolved } from \"./parse-command.ts\";\nimport {\n  dispatchRegistered,\n  encodeCliJsonFailure,\n  exitCodeForError,\n  peelGlobalFlags,\n  sessionTitleFor,\n  stringifyCliJson,\n} from \"./platform/index.ts\";\nimport type { CliRunSummary, 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  type CatalogHelpTopic,\n  CLI_COMMAND_CATALOG,\n  type CliCatalogFlag,\n  type CliCommandEntry,\n  type CommandsListFormat,\n  catalogHelpTopic,\n  catalogOptionFlags,\n  catalogOptionHelpHint,\n  catalogRootCommands,\n  catalogSubcommands,\n  formatCommandsCatalog,\n  formatExpectedCommandsLine,\n  listCliCommands,\n} from \"./commands-catalog.ts\";\nexport { CliExitCode } from \"./exit-code.ts\";\nexport { logCliError } from \"./format-error.ts\";\nexport type {\n  AthenaCliLogger,\n  CliLogEvent,\n  CliLogKind,\n  CliLogLevel,\n  CliLogMode,\n  CliTraceContext,\n} from \"./logging/index.ts\";\nexport {\n  createCliLogger,\n  createCliTraceContext,\n} from \"./logging/index.ts\";\nexport { parseCommand } from \"./parse-command.ts\";\nexport {\n  CLI_JSON_SCHEMA_VERSION,\n  type CliJsonEnvelope,\n  type CommandResult,\n  defineCommand,\n  type RegisteredCommand,\n} from \"./platform/index.ts\";\nexport type { CliRunSummary, CliRuntime } from \"./types.ts\";\n\nexport function usage(\n  topic: HelpCommand[\"topic\"] = \"root\",\n  capabilities?: CliCapabilities\n): string {\n  return renderUsage(topic, capabilities);\n}\n\nfunction resolveCwd(explicit?: string): string {\n  if (explicit && explicit.length > 0) {\n    return explicit;\n  }\n  const proc = (globalThis as { process?: { cwd?: () => string } }).process;\n  return proc?.cwd?.() ?? \".\";\n}\n\nfunction wantsNoLog(argv: readonly string[]): boolean {\n  return argv.some((token) => token === \"--no-log\");\n}\n\nfunction wantsDebug(\n  argv: readonly string[],\n  env: Record<string, string | undefined>\n): boolean {\n  return (\n    argv.includes(\"--debug\") ||\n    env.ATHENA_JS_DEBUG === \"1\" ||\n    env.ATHENA_JS_DEBUG === \"true\"\n  );\n}\n\ntype BootstrapSession = AthenaCliLogger & {\n  getBootstrapHandoff: () => BootstrapHandoffV1;\n  adopt: (logger: AthenaCliLogger) => void;\n};\n\nfunction isBootstrapSession(\n  logger: AthenaCliLogger | undefined\n): logger is BootstrapSession {\n  return (\n    logger !== undefined &&\n    \"getBootstrapHandoff\" in logger &&\n    \"adopt\" in logger &&\n    typeof logger.getBootstrapHandoff === \"function\" &&\n    typeof logger.adopt === \"function\"\n  );\n}\n\n/**\n * Run the CLI without letting logging alter terminal output or business exit\n * codes. A caller-provided logger is owned by the caller, such as the package\n * launcher; direct callers get a complete invocation session automatically.\n */\nexport async function runCLI(\n  argv: string[],\n  runtime: CliRuntime = {}\n): Promise<CliRunSummary> {\n  return withCliExitCodeContext(() => runCLIInternal(argv, runtime));\n}\n\nasync function runCLIInternal(\n  argv: string[],\n  runtime: CliRuntime\n): Promise<CliRunSummary> {\n  const processState = globalThis as typeof globalThis & {\n    process?: { exitCode?: number };\n  };\n  if (processState.process) {\n    processState.process.exitCode = undefined;\n  }\n\n  const providedLogger = runtime.logger ?? runtime.session;\n  const loggerEnv = runtime.env ?? process.env;\n  let logger: AthenaCliLogger;\n  if (isBootstrapSession(providedLogger) && providedLogger.mode !== \"off\") {\n    const handoff = providedLogger.getBootstrapHandoff();\n    if (handoff) {\n      try {\n        const canonical = createCliLogger({\n          baseMetadata: {\n            packageVersion: PACKAGE_VERSION,\n            sanitizedArgv: handoff.sanitizedArgv,\n          },\n          cwd: runtime.cwd,\n          env: loggerEnv,\n          invocationId: handoff.invocationId,\n          mode: providedLogger.mode,\n          now: new Date(handoff.startedAt),\n          skipStart: true,\n          traceId: handoff.traceId,\n        });\n        providedLogger.adopt(canonical);\n        logger = canonical;\n      } catch (error) {\n        providedLogger.warn(\n          \"Canonical logger adoption failed; using bootstrap fallback.\",\n          { error }\n        );\n        logger = providedLogger;\n      }\n    } else {\n      logger = providedLogger;\n    }\n  } else {\n    logger =\n      providedLogger ??\n      createCliLogger({\n        baseMetadata: {\n          packageVersion: PACKAGE_VERSION,\n          sanitizedArgv: sanitizeCliArgv(argv),\n        },\n        cwd: runtime.cwd,\n        env: loggerEnv,\n        mode: wantsNoLog(argv)\n          ? \"off\"\n          : wantsDebug(argv, loggerEnv) && loggerEnv.ATHENA_CLI_LOG !== \"off\"\n            ? \"debug\"\n            : undefined,\n      });\n  }\n  const ownsLogger = providedLogger === undefined;\n  const trace = createCliTraceContext(logger);\n  const { argv: peeled, presentation } = peelPresentationFlags(argv);\n  let globals: ReturnType<typeof peelGlobalFlags>[\"globals\"] | undefined;\n  let finalCommandId: string | undefined;\n  let exitCode = 0;\n  let outcome: CliRunSummary[\"outcome\"] = \"success\";\n  let captured: string[] = [];\n  let writingFile = false;\n  let cwd = resolveCwd(runtime.cwd);\n\n  logger.record({\n    data: { presentation, sanitizedArgv: sanitizeCliArgv(peeled) },\n    kind: \"parse.start\",\n    level: \"debug\",\n  });\n\n  const setFailure = (error: unknown, code = exitCodeForError(error)) => {\n    exitCode = code;\n    outcome = \"failure\";\n    setCliExitCode(code);\n    const errorId = ensureCliErrorId(error);\n    if (!logger.hasReportedError?.(errorId)) {\n      logger.record({\n        data: { phase: \"cli\" },\n        error,\n        errorId,\n        kind: \"error\",\n        level: \"error\",\n      });\n    }\n  };\n\n  try {\n    try {\n      globals = peelGlobalFlags(expandEqualsArgv(peeled)).globals;\n    } catch (error) {\n      setFailure(error);\n      logger.record({\n        data: { errorId: ensureCliErrorId(error) },\n        exitCode,\n        kind: \"parse.finish\",\n        level: \"error\",\n        outcome: \"failure\",\n      });\n      const earlyErrorLog = (message: string) => {\n        (runtime.errorLog ?? console.error)(message);\n        logger.record({ kind: \"stderr\", level: \"error\", message });\n      };\n      logCliError(formatGeneratorError(error), earlyErrorLog);\n    }\n\n    if (globals) {\n      const flags = globals;\n      const debugEnv = runtime.env ?? process.env;\n      await withCliDebugContext(\n        flags.debug ||\n          debugEnv.ATHENA_JS_DEBUG === \"1\" ||\n          debugEnv.ATHENA_JS_DEBUG === \"true\",\n        async () => {\n          const json = flags.output === \"json\" || flags.output === \"ndjson\";\n          writingFile = Boolean(flags.outputPath);\n          const capabilities = resolveCliCapabilities({\n            forceColor: writingFile ? false : presentation.forceColor,\n            isTty: writingFile\n              ? false\n              : (runtime.isTty ??\n                (runtime.log === undefined ? undefined : false)),\n            json,\n            noColor: writingFile || presentation.noColor,\n            plain: flags.plain || presentation.noColor || writingFile,\n            quiet: flags.verbosity === \"quiet\",\n            verbose:\n              flags.verbosity === \"verbose\" || flags.verbosity === \"debug\",\n          });\n          captured = [];\n          const capture = (message: string) => {\n            if (!writingFile) {\n              return;\n            }\n            captured.push(message.endsWith(\"\\n\") ? message : `${message}\\n`);\n          };\n          const emit = runtime.log ?? console.log;\n          const emitErr = runtime.errorLog ?? console.error;\n          let sessionActive = false;\n          const logRaw = (message: string) => {\n            emit(message);\n            logger.record({ kind: \"stdout\", level: \"info\", message });\n            capture(message);\n          };\n          const errorLog = (message: string) => {\n            emitErr(message);\n            logger.record({ kind: \"stderr\", level: \"error\", message });\n            capture(message);\n          };\n          const log = (message: string) => {\n            if (json || !sessionActive) {\n              logRaw(\n                json ? message : colorizeTaggedLine(message, capabilities)\n              );\n              return;\n            }\n            for (const part of message.split(\"\\n\")) {\n              logRaw(\n                railBar(colorizeTaggedLine(part, capabilities), capabilities)\n              );\n            }\n          };\n          const beginSession = (title: string) => {\n            if (json || !usesRail(capabilities)) {\n              return;\n            }\n            sessionActive = true;\n            logRaw(railStart(title, capabilities));\n          };\n          const endSession = () => {\n            if (!sessionActive) {\n              return;\n            }\n            sessionActive = false;\n            logRaw(railEnd(\"\", capabilities));\n          };\n\n          cwd = resolveCwd(flags.cwd ?? runtime.cwd);\n          try {\n            let parsed: ReturnType<typeof parseCommandResolved>[\"value\"];\n            let resolved: ReturnType<typeof parseCommandResolved> | undefined;\n            try {\n              resolved = parseCommandResolved(argv);\n              parsed = resolved.value;\n              finalCommandId = resolved.registration.id;\n              logger.record({\n                commandId: finalCommandId,\n                data: { commandId: finalCommandId },\n                kind: \"parse.finish\",\n                level: \"info\",\n              });\n            } catch (error) {\n              setFailure(error);\n              logger.record({\n                data: { errorId: ensureCliErrorId(error) },\n                exitCode,\n                kind: \"parse.finish\",\n                level: \"error\",\n                outcome: \"failure\",\n              });\n              if (json) {\n                const code =\n                  error instanceof AthenaCliError ? error.code : \"CLI001\";\n                const message =\n                  error instanceof Error ? error.message : \"Unknown CLI error.\";\n                logRaw(\n                  stringifyCliJson(\n                    encodeCliJsonFailure(\"athena-js\", {\n                      code,\n                      details:\n                        error instanceof AthenaCliError\n                          ? error.metadata\n                          : undefined,\n                      hint:\n                        error instanceof AthenaCliError\n                          ? error.hint\n                          : undefined,\n                      message,\n                    })\n                  )\n                );\n              } else {\n                logCliError(\n                  formatGeneratorError(error),\n                  errorLog,\n                  capabilities\n                );\n              }\n              parsed = undefined as never;\n            }\n\n            if (parsed && resolved) {\n              const sessionTitle = sessionTitleFor(\n                resolved.registration,\n                parsed\n              );\n              if (sessionTitle) {\n                beginSession(sessionTitle);\n              }\n\n              const ctx: CommandContext = {\n                capabilities,\n                cwd,\n                errorLog,\n                globals: flags,\n                log,\n                logger,\n                logRaw,\n                output: flags.output,\n                presentation,\n                reportError: (error, metadata) => {\n                  logger.record({\n                    data: metadata,\n                    error,\n                    kind: \"error\",\n                    level: \"error\",\n                  });\n                },\n                runtime: {\n                  ...runtime,\n                  cwd,\n                  logger,\n                  session: logger,\n                },\n                trace,\n                verbosity: flags.verbosity,\n              };\n\n              try {\n                const result = await runCliAsyncContext(\n                  {\n                    commandId: resolved.registration.id,\n                    debugEnabled: isDebugEnabled(),\n                    invocationId: logger.invocationId,\n                    traceId: logger.traceId,\n                  },\n                  () => dispatchRegistered(CLI_COMMAND_REGISTRY, ctx, resolved)\n                );\n                const commandExitCode =\n                  result?.exitCode ?? getCliExitCode() ?? 0;\n                exitCode = commandExitCode;\n                if (exitCode !== 0) {\n                  outcome = \"failure\";\n                }\n              } catch (error) {\n                setFailure(error);\n                if (json) {\n                  const code =\n                    error instanceof AthenaCliError ? error.code : \"CLI001\";\n                  const message =\n                    error instanceof Error\n                      ? error.message\n                      : \"Unknown CLI error.\";\n                  logRaw(\n                    stringifyCliJson(\n                      encodeCliJsonFailure(finalCommandId ?? \"athena-js\", {\n                        code,\n                        details:\n                          error instanceof AthenaCliError\n                            ? error.metadata\n                            : undefined,\n                        hint:\n                          error instanceof AthenaCliError\n                            ? error.hint\n                            : undefined,\n                        message,\n                      })\n                    )\n                  );\n                } else {\n                  logCliError(\n                    formatGeneratorError(error),\n                    errorLog,\n                    capabilities\n                  );\n                }\n              } finally {\n                endSession();\n              }\n            }\n          } catch (error) {\n            setFailure(error);\n            (runtime.errorLog ?? console.error)(\n              formatGeneratorError(error).message\n            );\n          }\n        }\n      );\n    }\n  } finally {\n    if (globals?.outputPath) {\n      try {\n        const dest = resolve(cwd, globals.outputPath);\n        await mkdir(dirname(dest), { recursive: true });\n        await writeFile(dest, captured.join(\"\"), \"utf8\");\n        logger.record({\n          data: { operation: \"output.write\", path: dest },\n          kind: \"diagnostic\",\n          level: \"info\",\n        });\n      } catch (error) {\n        setFailure(error);\n        logger.record({\n          data: { operation: \"output.write\" },\n          error,\n          kind: \"error\",\n          level: \"error\",\n        });\n      }\n    }\n    if (ownsLogger) {\n      logger.finish({\n        commandId: finalCommandId,\n        data: { outputPath: globals?.outputPath },\n        exitCode,\n        outcome,\n      });\n    }\n    await logger.flush();\n    const contextualExitCode = getCliExitCode();\n    if (\n      (contextualExitCode !== undefined || exitCode !== 0) &&\n      processState.process\n    ) {\n      processState.process.exitCode = exitCode;\n    }\n  }\n\n  return {\n    commandId: finalCommandId,\n    exitCode,\n    loggingFailed: logger.loggingFailed,\n    logPath: logger.logPath,\n    outcome,\n  };\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n  type CatalogHelpTopic,\n  catalogHelpTopic,\n  formatCatalogTopicUsage,\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  topic: CatalogHelpTopic = \"root\",\n  capabilities?: CliCapabilities\n): string {\n  return styleHelpText(\n    formatCatalogTopicUsage(topic),\n    capabilities ?? resolveCliCapabilities({ plain: true })\n  );\n}\n\nexport function topicForCommand(\n  command: string,\n  rest: readonly string[]\n): HelpCommand[\"topic\"] | undefined {\n  return catalogHelpTopic(command, rest);\n}\n\nexport function parse(rest: string[]): CliCommand {\n  if (rest.length === 0) {\n    return { command: \"help\", topic: \"root\" };\n  }\n  const topic = topicForCommand(rest[0] ?? \"\", rest.slice(1));\n  if (topic) {\n    return { command: \"help\", topic };\n  }\n  throw unknownCommandError(rest[0] ?? \"help\");\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"root\");\n}\n\nexport function sessionTitle(): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: HelpCommand\n): Promise<void> {\n  ctx.logRaw(renderUsage(parsed.topic, ctx.capabilities));\n}\n","import {\n  defineCommand,\n  type 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 { billingCommands } from \"./billing/commands.ts\";\nimport * as commandsCommand from \"./commands/index.ts\";\nimport * as dbCommand from \"./db/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 * as logsCommand from \"./logs/index.ts\";\nimport { migrateCommands } from \"./migrate/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  path: readonly string[];\n  aliases?: readonly string[];\n  aliasPaths?: readonly (readonly string[])[];\n  secretFlags?: readonly string[];\n  legacy: RegisteredCommand[\"legacy\"];\n  parse: (rest: string[]) => CliCommand;\n  run: RegisteredCommand[\"run\"];\n  usage: () => string;\n  sessionTitle?: (parsed: CliCommand) => string | undefined;\n}): RegisteredCommand {\n  return defineCommand(options);\n}\n\nexport const CLI_REGISTERED_COMMANDS: RegisteredCommand[] = [\n  adapt({\n    legacy: \"db\",\n    parse: dbCommand.parse,\n    path: [\"db\"],\n    run: (ctx, parsed) => dbCommand.run(ctx, parsed as never),\n    usage: dbCommand.usage,\n  }),\n  adapt({\n    legacy: \"help\",\n    parse: helpCommand.parse,\n    path: [\"help\"],\n    run: (ctx, parsed) => helpCommand.run(ctx, parsed as never),\n    usage: helpCommand.usage,\n  }),\n  adapt({\n    aliases: versionCommand.names,\n    legacy: \"version\",\n    parse: versionCommand.parse,\n    path: [\"version\"],\n    run: (ctx, parsed) => versionCommand.run(ctx, parsed as never),\n    usage: versionCommand.usage,\n  }),\n  adapt({\n    legacy: \"logs\",\n    parse: logsCommand.parse,\n    path: [\"logs\"],\n    run: (ctx, parsed) => logsCommand.run(ctx, parsed as never),\n    usage: logsCommand.usage,\n  }),\n  adapt({\n    aliases: commandsCommand.names,\n    legacy: \"commands\",\n    parse: commandsCommand.parse,\n    path: [\"commands\"],\n    run: (ctx, parsed) => commandsCommand.run(ctx, parsed as never),\n    usage: commandsCommand.usage,\n  }),\n  adapt({\n    legacy: \"init\",\n    parse: initCommand.parse,\n    path: [\"init\"],\n    run: (ctx, parsed) => initCommand.run(ctx, parsed as never),\n    sessionTitle: (parsed) => initCommand.sessionTitle(parsed as never),\n    usage: initCommand.usage,\n  }),\n  adapt({\n    legacy: \"generate\",\n    parse: generateCommand.parse,\n    path: [\"generate\"],\n    run: (ctx, parsed) => generateCommand.run(ctx, parsed as never),\n    sessionTitle: (parsed) => generateCommand.sessionTitle(parsed as never),\n    usage: generateCommand.usage,\n  }),\n  ...schemaCommands,\n  ...policyCommands,\n  ...billingCommands,\n  ...migrateCommands,\n  ...authCommands,\n  adapt({\n    aliasPaths: [\n      [\"env\", \"check\"],\n      [\"env\", \"validate\"],\n    ],\n    legacy: \"env\",\n    parse: envCommand.parse,\n    path: [\"env\"],\n    run: (ctx, parsed) => envCommand.run(ctx, parsed as never),\n    usage: envCommand.usage,\n  }),\n  adapt({\n    aliasPaths: [[\"validate\", \"local\"]],\n    legacy: \"validate\",\n    parse: validateCommand.parse,\n    path: [\"validate\"],\n    run: (ctx, parsed) => validateCommand.run(ctx, parsed as never),\n    usage: validateCommand.usage,\n  }),\n  adapt({\n    legacy: \"doctor\",\n    parse: doctorCommand.parse,\n    path: [\"doctor\"],\n    run: (ctx, parsed) => doctorCommand.run(ctx, parsed as never),\n    usage: doctorCommand.usage,\n  }),\n  doctorBundleCommand,\n  adapt({\n    aliases: [\"key\"],\n    legacy: [\"api-key-generate\", \"api-key-list\", \"api-key-create\"],\n    parse: apiKeyCommand.parse,\n    path: [\"api-key\"],\n    run: (ctx, parsed) => apiKeyCommand.run(ctx, parsed as never),\n    secretFlags: [\"--admin-key\"],\n    sessionTitle: (parsed) => apiKeyCommand.sessionTitle(parsed as never),\n    usage: apiKeyCommand.usage,\n  }),\n  adapt({\n    legacy: [\"rights-list\", \"rights-catalog\", \"rights-create\"],\n    parse: rightsCommand.parse,\n    path: [\"rights\"],\n    run: (ctx, parsed) => rightsCommand.run(ctx, parsed as never),\n    sessionTitle: (parsed) => rightsCommand.sessionTitle(parsed as never),\n    usage: rightsCommand.usage,\n  }),\n];\n\nexport const CLI_COMMAND_REGISTRY = new CommandRegistry(\n  CLI_REGISTERED_COMMANDS\n);\n","import { parseAthenaRightKey } from \"../../../rights/key.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport {\n  catalogSubcommands,\n  catalogSubcommandTokens,\n  formatCatalogTopicUsage,\n  formatExpectedCommandsLine,\n} from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport {\n  createGatewayApiKey,\n  formatApiKeyRecords,\n  formatCreatedApiKey,\n  listGatewayApiKeys,\n  resolveGatewayAdminCredentials,\n} from \"../../gateway-admin.ts\";\nimport {\n  helpOrRejectUnknownFlags,\n  parseGatewayAdminFlags,\n  unknownOptionError,\n} from \"../../parse-helpers.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { closestMatches, formatDidYouMean } from \"../../suggest.ts\";\nimport type {\n  ApiKeyCreateCommand,\n  ApiKeyGenerateCommand,\n  ApiKeyListCommand,\n  CliCommand,\n} from \"../../types.ts\";\nimport {\n  assertGenerateDoesNotWriteGatewayAppKey,\n  GENERATE_DEFAULT_ENV_KEY,\n  generateApiKey,\n  writeApiKeyToEnvFile,\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  rest: string[],\n  startIndex: number\n): CliCommand {\n  let index = startIndex;\n  let bytes = 32;\n  let prefix = \"\";\n  let write = false;\n  let force = false;\n  let envFile: string | undefined;\n  let envKey = GENERATE_DEFAULT_ENV_KEY;\n\n  while (index < rest.length) {\n    const token = rest[index];\n    index += 1;\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"api-key\" };\n    }\n    if (token === \"--write\") {\n      write = true;\n      continue;\n    }\n    if (token === \"--force\") {\n      force = true;\n      continue;\n    }\n    if (token === \"--bytes\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --bytes option.\");\n      }\n      const parsed = Number(nextValue);\n      if (!Number.isInteger(parsed)) {\n        throw new Error(`Invalid --bytes value \"${nextValue}\".`);\n      }\n      bytes = parsed;\n      index += 1;\n      continue;\n    }\n    if (token === \"--prefix\") {\n      const nextValue = rest[index];\n      if (nextValue === undefined || nextValue.startsWith(\"-\")) {\n        if (nextValue === \"\") {\n          prefix = \"\";\n          index += 1;\n          continue;\n        }\n        throw new Error(\"Missing value for --prefix option.\");\n      }\n      prefix = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--env-file\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --env-file option.\");\n      }\n      envFile = nextValue;\n      write = true;\n      index += 1;\n      continue;\n    }\n    if (token === \"--env-key\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --env-key option.\");\n      }\n      envKey = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token, \"api-key generate\");\n  }\n\n  return {\n    bytes,\n    command: \"api-key-generate\",\n    envFile,\n    envKey,\n    force,\n    prefix,\n    write,\n  };\n}\n\nfunction parseApiKeyCreateFlags(\n  rest: string[],\n  startIndex: number\n): CliCommand {\n  let index = startIndex;\n  let name: string | undefined;\n  let clientName: string | undefined;\n  let description: string | undefined;\n  let expiresAt: string | undefined;\n  let rights: string[] = [];\n  let write = false;\n  let force = false;\n  let envFile: string | undefined;\n  let envKey = \"ATHENA_API_KEY\";\n  let json = false;\n  let url: string | undefined;\n  let adminKey: string | undefined;\n\n  while (index < rest.length) {\n    const token = rest[index];\n    index += 1;\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"api-key\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--write\") {\n      write = true;\n      continue;\n    }\n    if (token === \"--force\") {\n      force = true;\n      continue;\n    }\n    if (token === \"--name\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --name option.\");\n      }\n      name = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--client-name\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --client-name option.\");\n      }\n      clientName = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--description\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --description option.\");\n      }\n      description = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--expires-at\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --expires-at option.\");\n      }\n      expiresAt = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--rights\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --rights option.\");\n      }\n      rights = nextValue.split(\",\").map((token) => parseAthenaRightKey(token));\n      index += 1;\n      continue;\n    }\n    if (token === \"--url\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --url option.\");\n      }\n      url = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--admin-key\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --admin-key option.\");\n      }\n      adminKey = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--env-file\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --env-file option.\");\n      }\n      envFile = nextValue;\n      write = true;\n      index += 1;\n      continue;\n    }\n    if (token === \"--env-key\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --env-key option.\");\n      }\n      envKey = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token, \"api-key create\");\n  }\n\n  if (!name) {\n    throw new Error(\n      \"api-key create requires --name <name>. Example: athena-js api-key create --name app --rights gateway.query\"\n    );\n  }\n\n  return {\n    adminKey,\n    clientName,\n    command: \"api-key-create\",\n    description,\n    envFile,\n    envKey,\n    expiresAt,\n    force,\n    json,\n    name,\n    rights,\n    url,\n    write,\n  };\n}\n\nfunction parseApiKeyListFlags(rest: string[], startIndex: number): CliCommand {\n  const common = parseGatewayAdminFlags(rest, startIndex);\n  const help = helpOrRejectUnknownFlags(\n    rest,\n    common.index,\n    \"api-key list\",\n    \"api-key\"\n  );\n  if (help) {\n    return help;\n  }\n  return {\n    adminKey: common.adminKey,\n    command: \"api-key-list\",\n    json: common.json,\n    url: common.url,\n  };\n}\n\nexport function parse(rest: string[]): CliCommand {\n  if (\n    rest.length === 0 ||\n    rest[0] === \"help\" ||\n    rest[0] === \"--help\" ||\n    rest[0] === \"-h\"\n  ) {\n    return { command: \"help\", topic: \"api-key\" };\n  }\n\n  const sub = rest[0];\n  if (sub === \"generate\" || sub === \"gen\" || sub === \"new\") {\n    return parseApiKeyGenerateFlags(rest, 1);\n  }\n  if (sub === \"create\") {\n    return parseApiKeyCreateFlags(rest, 1);\n  }\n  if (sub === \"list\" || sub === \"ls\") {\n    return parseApiKeyListFlags(rest, 1);\n  }\n  if (sub.startsWith(\"-\")) {\n    return parseApiKeyGenerateFlags(rest, 0);\n  }\n\n  throw new Error(\n    [\n      `Unknown api-key subcommand \"${sub}\".`,\n      formatDidYouMean(closestMatches(sub, catalogSubcommandTokens(\"api-key\"))),\n      formatExpectedCommandsLine(catalogSubcommands(\"api-key\")),\n    ]\n      .filter((line) => line.length > 0)\n      .join(\"\\n\")\n  );\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"api-key\");\n}\n\nexport function sessionTitle(\n  _parsed: ApiKeyGenerateCommand | ApiKeyListCommand | ApiKeyCreateCommand\n): string {\n  return \"athena-js api-key\";\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: ApiKeyGenerateCommand | ApiKeyListCommand | ApiKeyCreateCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, runtime } = ctx;\n  try {\n    if (parsed.command === \"api-key-generate\") {\n      const generated = generateApiKey({\n        bytes: parsed.bytes,\n        prefix: parsed.prefix,\n      });\n      if (parsed.write) {\n        assertGenerateDoesNotWriteGatewayAppKey(parsed.envKey);\n        const written = writeApiKeyToEnvFile({\n          cwd: runtime.cwd,\n          envKey: parsed.envKey,\n          filePath: parsed.envFile,\n          force: parsed.force,\n          key: generated.key,\n        });\n        log(\n          `Static admin secret ${written.action} in ${written.absolutePath} (${written.envKey})`\n        );\n        log(\n          \"Set the same value on the gateway process. This is not a store-backed ATHENA_API_KEY.\"\n        );\n        log(\n          \"For a registered app key: athena-js api-key create --name <name> --rights gateway.query --write\"\n        );\n      } else {\n        log(generated.key);\n        log(\n          \"Tip: athena-js api-key generate --write  # saves to .env.local as ATHENA_KEY_12\"\n        );\n        log(\n          \"For a store-backed gateway app key: athena-js api-key create --name <name> --rights gateway.query --write\"\n        );\n      }\n      return;\n    }\n\n    const credentials = resolveGatewayAdminCredentials({\n      adminKey: parsed.adminKey,\n      baseUrl: parsed.url,\n      cwd: runtime.cwd,\n    });\n    const clientOptions = {\n      ...credentials,\n      fetchImpl: runtime.fetchImpl,\n      logger: ctx.logger,\n      trace: ctx.trace,\n    };\n\n    if (parsed.command === \"api-key-list\") {\n      const records = await listGatewayApiKeys(clientOptions);\n      if (parsed.json) {\n        log(JSON.stringify({ api_keys: records }, null, 2));\n      } else {\n        log(\n          `[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`\n        );\n        log(formatApiKeyRecords(records));\n      }\n      return;\n    }\n\n    const created = await createGatewayApiKey({\n      ...clientOptions,\n      input: {\n        client_name: parsed.clientName,\n        description: parsed.description,\n        expires_at: parsed.expiresAt,\n        name: parsed.name,\n        rights: parsed.rights,\n      },\n    });\n    if (parsed.write && created.api_key) {\n      const written = writeApiKeyToEnvFile({\n        cwd: runtime.cwd,\n        envKey: parsed.envKey,\n        filePath: parsed.envFile,\n        force: parsed.force,\n        key: created.api_key,\n      });\n      if (parsed.json) {\n        log(\n          JSON.stringify(\n            {\n              ...created,\n              envWrite: written,\n            },\n            null,\n            2\n          )\n        );\n      } else {\n        log(formatCreatedApiKey(created));\n        log(\n          `Saved plaintext to ${written.absolutePath} as ${written.envKey} (${written.action})`\n        );\n      }\n    } else if (parsed.json) {\n      log(JSON.stringify(created, null, 2));\n    } else {\n      log(formatCreatedApiKey(created));\n      if (parsed.write && !created.api_key) {\n        log(\n          \"Warning: response had no plaintext api_key; nothing written to env file.\"\n        );\n      }\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\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\";\nimport { getCliActiveSpanId } from \"./logging/tracer.ts\";\nimport type { AthenaCliLogger, CliTraceContext } from \"./logging/types.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}\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  logger?: AthenaCliLogger;\n  trace?: CliTraceContext;\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  /** Raw envelope when shape differs. */\n  raw: unknown;\n  record?: GatewayApiKeyRecord;\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 execute = async (): Promise<unknown> => {\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n      apikey: options.adminKey,\n      \"Content-Type\": \"application/json\",\n      \"User-Agent\": `athena-js-cli/${PACKAGE_VERSION}`,\n      \"X-Athena-Key\": options.adminKey,\n    };\n    if (options.trace) {\n      const requestSpanId = getCliActiveSpanId(\n        options.trace.invocationId,\n        options.trace.traceId\n      );\n      if (!requestSpanId) {\n        throw new Error(\"Gateway request trace context is unavailable.\");\n      }\n      headers.traceparent = `00-${options.trace.traceId}-${requestSpanId}-01`;\n      headers[\"x-athena-invocation-id\"] = options.trace.invocationId;\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;\n    if (text.trim()) {\n      try {\n        parsed = JSON.parse(text) as unknown;\n      } catch {\n        parsed = text;\n      }\n    }\n    options.logger?.record({\n      data: {\n        contentType: response.headers.get(\"content-type\"),\n        method: options.method,\n        operation: \"gateway.admin.request\",\n        remoteRequestId:\n          response.headers.get(\"x-athena-request-id\") ?? undefined,\n        remoteTraceId: response.headers.get(\"x-athena-trace-id\") ?? undefined,\n        route: options.path,\n        statusCode: response.status,\n      },\n      kind: \"diagnostic\",\n      level: response.ok ? \"info\" : \"error\",\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\n  return options.trace\n    ? options.trace.span(\n        \"gateway.admin.request\",\n        { method: options.method, route: options.path },\n        execute\n      )\n    : execute();\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: 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(rights: GatewayApiKeyRightRecord[]): 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(\n    \"\",\n    `Dynamic API key rights (${dynamic.length})`,\n    \"key\\tsource\\tid\"\n  );\n  for (const entry of dynamic) {\n    lines.push([entry.key, entry.source ?? \"-\", entry.id ?? \"-\"].join(\"\\t\"));\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","/**\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  ATHENA_ENV_API_KEY_KEYS,\n  ATHENA_ENV_CLIENT_KEYS,\n  ATHENA_ENV_DB_URL_KEYS,\n  ATHENA_ENV_PRIMARY_KEYS,\n  ATHENA_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  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_ENV_KEYS = [\n  ...ATHENA_ENV_URL_KEYS,\n  ...ATHENA_ENV_DB_URL_KEYS,\n  \"ATHENA_GENERATOR_URL\",\n] as const;\n\nconst GATEWAY_API_KEY_ENV_KEYS = [\n  ...ATHENA_ENV_API_KEY_KEYS,\n  \"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\nconst PLACEHOLDER_VALUE_RE =\n  /\\$\\{[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  absolutePath: string;\n  filename: string;\n  keys: string[];\n}\n\nexport interface EnvFieldCheck {\n  field: string;\n  keysTried: readonly string[];\n  message: string;\n  severity: EnvCheckSeverity;\n  source?: EnvValueSource;\n  sourceKey?: string;\n  sourcePath?: string;\n  /** Redacted preview when a value is present. */\n  valuePreview?: string;\n}\n\nexport interface EnvCheckResult {\n  checks: EnvFieldCheck[];\n  cwd: string;\n  errorCount: number;\n  files: EnvFileEntry[];\n  mode: EnvCheckMode;\n  resolvedMode: \"direct\" | \"gateway\" | \"none\";\n  sdkVersion: string;\n  warnCount: number;\n}\n\nexport interface LoadProjectEnvOptions {\n  cwd?: string;\n  /** Explicit env file paths (relative to cwd or absolute). When set, only these are read. */\n  files?: string[];\n  /** Optional process env override (defaults to process.env). */\n  processEnv?: Record<string, string | undefined>;\n}\n\n/** Resolved env value after process env wins over files. */\nexport interface LoadedProjectEnvValue {\n  source: Exclude<EnvValueSource, \"missing\">;\n  sourceKey: string;\n  sourcePath?: string;\n  value: string;\n}\n\nexport interface LoadedProjectEnv {\n  /** Absolute paths that existed and were parsed. */\n  files: EnvFileEntry[];\n  /** key → { value, source, sourcePath?, sourceKey } with process winning. */\n  values: Map<string, LoadedProjectEnvValue>;\n}\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n  if (\n    rawValue.startsWith('\"') &&\n    rawValue.endsWith('\"') &&\n    rawValue.length >= 2\n  ) {\n    const inner = rawValue.slice(1, -1);\n    return inner\n      .replace(/\\\\n/g, \"\\n\")\n      .replace(/\\\\r/g, \"\\r\")\n      .replace(/\\\\t/g, \"\\t\")\n      .replace(/\\\\\"/g, '\"')\n      .replace(/\\\\\\\\/g, \"\\\\\");\n  }\n\n  if (\n    rawValue.startsWith(\"'\") &&\n    rawValue.endsWith(\"'\") &&\n    rawValue.length >= 2\n  ) {\n    return rawValue.slice(1, -1);\n  }\n\n  const commentIndex = rawValue.search(/\\s+#/);\n  const withoutComment =\n    commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n  return withoutComment.trim();\n}\n\nexport function parseEnvLine(\n  line: string\n): [key: string, value: string] | undefined {\n  const trimmed = line.trim();\n  if (!trimmed || trimmed.startsWith(\"#\")) {\n    return;\n  }\n\n  const match = trimmed.match(\n    /^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/\n  );\n  if (!match) {\n    return;\n  }\n\n  const [, key, rawValue] = match;\n  return [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readEnvFile(absolutePath: string): {\n  entries: Map<string, string>;\n  keys: string[];\n} {\n  const content = readFileSync(absolutePath, \"utf8\");\n  const entries = new Map<string, string>();\n  const keys: string[] = [];\n  for (const line of content.split(/\\r?\\n/g)) {\n    const parsed = parseEnvLine(line);\n    if (!parsed) {\n      continue;\n    }\n    const [key, value] = parsed;\n    if (!entries.has(key)) {\n      keys.push(key);\n    }\n    entries.set(key, value);\n  }\n  return { entries, keys };\n}\n\nfunction defaultEnvFilenames(\n  processEnv: Record<string, string | undefined>\n): string[] {\n  const nodeEnv = processEnv.NODE_ENV?.trim();\n  return [\n    ...PROJECT_ENV_FILENAMES,\n    ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n  ];\n}\n\nexport function loadProjectEnv(\n  options: LoadProjectEnvOptions = {}\n): LoadedProjectEnv {\n  const cwd = options.cwd ?? process.cwd();\n  const processEnv = options.processEnv ?? process.env;\n  const filenames =\n    options.files && options.files.length > 0\n      ? options.files\n      : defaultEnvFilenames(processEnv);\n\n  const fileLayers: Array<{\n    absolutePath: string;\n    entries: Map<string, string>;\n    filename: string;\n    keys: string[];\n  }> = [];\n\n  for (const filename of filenames) {\n    const absolutePath = resolve(cwd, filename);\n    if (!existsSync(absolutePath)) {\n      continue;\n    }\n    const { entries, keys } = readEnvFile(absolutePath);\n    fileLayers.push({ absolutePath, entries, filename, keys });\n  }\n\n  const values: LoadedProjectEnv[\"values\"] = new Map();\n\n  // Later files override earlier files (same as generator apply order).\n  for (const layer of fileLayers) {\n    for (const [key, value] of layer.entries.entries()) {\n      values.set(key, {\n        source: \"file\",\n        sourceKey: key,\n        sourcePath: layer.absolutePath,\n        value,\n      });\n    }\n  }\n\n  // Process env wins.\n  for (const [key, raw] of Object.entries(processEnv)) {\n    if (typeof raw !== \"string\") {\n      continue;\n    }\n    const trimmed = raw.trim();\n    if (!trimmed) {\n      continue;\n    }\n    values.set(key, {\n      source: \"process\",\n      sourceKey: key,\n      value: trimmed,\n    });\n  }\n\n  return {\n    files: fileLayers.map((layer) => ({\n      absolutePath: layer.absolutePath,\n      filename: layer.filename,\n      keys: layer.keys,\n    })),\n    values,\n  };\n}\n\nfunction redactSecret(value: string): string {\n  if (value.length <= 8) {\n    return \"*\".repeat(Math.min(value.length, 4));\n  }\n  return `${value.slice(0, 4)}…${value.slice(-2)} (len=${value.length})`;\n}\n\nfunction isPlaceholderValue(value: string): boolean {\n  return PLACEHOLDER_VALUE_RE.test(value.trim());\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 isPostgresConnectionString(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return (\n      url.protocol === \"postgres:\" ||\n      url.protocol === \"postgresql:\" ||\n      // allow bare driver URLs some hosts use\n      url.protocol === \"pg:\"\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction pickFirst(\n  loaded: LoadedProjectEnv,\n  keys: readonly string[]\n): LoadedProjectEnvValue | undefined {\n  for (const key of keys) {\n    const hit = loaded.values.get(key);\n    if (hit?.value) {\n      return hit;\n    }\n  }\n}\n\nfunction fieldCheck(input: {\n  field: string;\n  keysTried: readonly string[];\n  message: string;\n  severity: EnvCheckSeverity;\n  hit?: LoadedProjectEnvValue;\n  previewAsSecret?: boolean;\n}): EnvFieldCheck {\n  if (!input.hit) {\n    return {\n      field: input.field,\n      keysTried: input.keysTried,\n      message: input.message,\n      severity: input.severity,\n      source: \"missing\",\n    };\n  }\n\n  return {\n    field: input.field,\n    keysTried: input.keysTried,\n    message: input.message,\n    severity: input.severity,\n    source: input.hit.source,\n    sourceKey: input.hit.sourceKey,\n    sourcePath: input.hit.sourcePath,\n    valuePreview: input.previewAsSecret\n      ? redactSecret(input.hit.value)\n      : input.hit.value.length > 80\n        ? `${input.hit.value.slice(0, 77)}…`\n        : input.hit.value,\n  };\n}\n\nexport interface ValidateProjectEnvOptions extends LoadProjectEnvOptions {\n  mode?: EnvCheckMode;\n  /**\n   * When true, missing optional companion keys become errors.\n   * Default false (warnings for optional / incomplete pairs).\n   */\n  strict?: boolean;\n}\n\n/**\n * Validate Athena-related keys and URLs from project env files + process env.\n */\nexport function validateProjectEnv(\n  options: ValidateProjectEnvOptions = {}\n): EnvCheckResult {\n  const cwd = options.cwd ?? process.cwd();\n  const mode = options.mode ?? \"auto\";\n  const strict = options.strict === true;\n  const loaded = loadProjectEnv({\n    cwd,\n    files: options.files,\n    processEnv: options.processEnv,\n  });\n\n  const checks: EnvFieldCheck[] = [];\n  const gatewayUrl = pickFirst(loaded, GATEWAY_URL_ENV_KEYS);\n  const apiKey = pickFirst(loaded, GATEWAY_API_KEY_ENV_KEYS);\n  const databaseUrl = pickFirst(loaded, DIRECT_CONNECTION_STRING_ENV_KEYS);\n  const client = pickFirst(loaded, ATHENA_ENV_CLIENT_KEYS);\n  const authUrl = pickFirst(loaded, [\n    ATHENA_ENV_PRIMARY_KEYS.authUrl,\n    \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n  ]);\n\n  let resolvedMode: EnvCheckResult[\"resolvedMode\"] = \"none\";\n  if (mode === \"direct\") {\n    resolvedMode = \"direct\";\n  } else if (mode === \"gateway\") {\n    resolvedMode = \"gateway\";\n  } else if (databaseUrl && !(gatewayUrl && apiKey)) {\n    resolvedMode = \"direct\";\n  } else if (gatewayUrl || apiKey) {\n    resolvedMode = \"gateway\";\n  } else if (databaseUrl) {\n    resolvedMode = \"direct\";\n  }\n\n  // Gateway URL\n  if (gatewayUrl) {\n    if (isPlaceholderValue(gatewayUrl.value)) {\n      checks.push(\n        fieldCheck({\n          field: \"gatewayUrl\",\n          hit: gatewayUrl,\n          keysTried: GATEWAY_URL_ENV_KEYS,\n          message: `Looks like an unexpanded placeholder or sample value in ${gatewayUrl.sourceKey}.`,\n          severity: \"error\",\n        })\n      );\n    } else if (isAbsoluteHttpUrl(gatewayUrl.value)) {\n      checks.push(\n        fieldCheck({\n          field: \"gatewayUrl\",\n          hit: gatewayUrl,\n          keysTried: GATEWAY_URL_ENV_KEYS,\n          message: `Resolved from ${gatewayUrl.sourceKey} (${gatewayUrl.source}).`,\n          severity: \"ok\",\n        })\n      );\n    } else {\n      checks.push(\n        fieldCheck({\n          field: \"gatewayUrl\",\n          hit: gatewayUrl,\n          keysTried: GATEWAY_URL_ENV_KEYS,\n          message: `${gatewayUrl.sourceKey} must be an absolute http(s) URL.`,\n          severity: \"error\",\n        })\n      );\n    }\n  } else if (resolvedMode === \"gateway\" || mode === \"gateway\") {\n    checks.push(\n      fieldCheck({\n        field: \"gatewayUrl\",\n        keysTried: GATEWAY_URL_ENV_KEYS,\n        message: `Missing gateway URL. Set ${ATHENA_ENV_PRIMARY_KEYS.url} (or ATHENA_GATEWAY_URL).`,\n        severity: \"error\",\n      })\n    );\n  } else {\n    checks.push(\n      fieldCheck({\n        field: \"gatewayUrl\",\n        keysTried: GATEWAY_URL_ENV_KEYS,\n        message: \"No gateway URL set (optional for direct Postgres mode).\",\n        severity: \"warn\",\n      })\n    );\n  }\n\n  // API key\n  if (apiKey) {\n    if (isPlaceholderValue(apiKey.value)) {\n      checks.push(\n        fieldCheck({\n          field: \"apiKey\",\n          hit: apiKey,\n          keysTried: GATEWAY_API_KEY_ENV_KEYS,\n          message: `Looks like an unexpanded placeholder or sample value in ${apiKey.sourceKey}.`,\n          previewAsSecret: true,\n          severity: \"error\",\n        })\n      );\n    } else if (apiKey.value.length < 8) {\n      checks.push(\n        fieldCheck({\n          field: \"apiKey\",\n          hit: apiKey,\n          keysTried: GATEWAY_API_KEY_ENV_KEYS,\n          message: `${apiKey.sourceKey} is unusually short (< 8 chars).`,\n          previewAsSecret: true,\n          severity: strict ? \"error\" : \"warn\",\n        })\n      );\n    } else {\n      checks.push(\n        fieldCheck({\n          field: \"apiKey\",\n          hit: apiKey,\n          keysTried: GATEWAY_API_KEY_ENV_KEYS,\n          message: `Resolved from ${apiKey.sourceKey} (${apiKey.source}).`,\n          previewAsSecret: true,\n          severity: \"ok\",\n        })\n      );\n    }\n  } else if (resolvedMode === \"gateway\" || mode === \"gateway\") {\n    checks.push(\n      fieldCheck({\n        field: \"apiKey\",\n        keysTried: GATEWAY_API_KEY_ENV_KEYS,\n        message: `Missing API key. Set ${ATHENA_ENV_PRIMARY_KEYS.apiKey} with: athena-js api-key create --name app --rights gateway.query --write.`,\n        severity: \"error\",\n      })\n    );\n  } else {\n    checks.push(\n      fieldCheck({\n        field: \"apiKey\",\n        keysTried: GATEWAY_API_KEY_ENV_KEYS,\n        message: \"No API key set (required for gateway mode).\",\n        severity: \"warn\",\n      })\n    );\n  }\n\n  // Database URL (direct)\n  if (databaseUrl) {\n    if (isPlaceholderValue(databaseUrl.value)) {\n      checks.push(\n        fieldCheck({\n          field: \"databaseUrl\",\n          hit: databaseUrl,\n          keysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n          message: `Looks like an unexpanded placeholder or sample value in ${databaseUrl.sourceKey}.`,\n          previewAsSecret: true,\n          severity: \"error\",\n        })\n      );\n    } else if (isPostgresConnectionString(databaseUrl.value)) {\n      checks.push(\n        fieldCheck({\n          field: \"databaseUrl\",\n          hit: databaseUrl,\n          keysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n          message: `Resolved from ${databaseUrl.sourceKey} (${databaseUrl.source}).`,\n          previewAsSecret: true,\n          severity: \"ok\",\n        })\n      );\n    } else {\n      checks.push(\n        fieldCheck({\n          field: \"databaseUrl\",\n          hit: databaseUrl,\n          keysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n          message: `${databaseUrl.sourceKey} must be a postgres/postgresql connection URL.`,\n          previewAsSecret: true,\n          severity: \"error\",\n        })\n      );\n    }\n  } else if (resolvedMode === \"direct\" || mode === \"direct\") {\n    checks.push(\n      fieldCheck({\n        field: \"databaseUrl\",\n        keysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n        message:\n          \"Missing DATABASE_URL (or PG_URL / POSTGRES_URL) for direct mode.\",\n        severity: \"error\",\n      })\n    );\n  } else {\n    checks.push(\n      fieldCheck({\n        field: \"databaseUrl\",\n        keysTried: DIRECT_CONNECTION_STRING_ENV_KEYS,\n        message: \"No direct Postgres URL set (optional for gateway mode).\",\n        severity: \"warn\",\n      })\n    );\n  }\n\n  // Optional companions\n  if (client) {\n    checks.push(\n      fieldCheck({\n        field: \"client\",\n        hit: client,\n        keysTried: ATHENA_ENV_CLIENT_KEYS,\n        message: `Resolved from ${client.sourceKey} (${client.source}).`,\n        severity: \"ok\",\n      })\n    );\n  } else if (resolvedMode === \"gateway\") {\n    checks.push(\n      fieldCheck({\n        field: \"client\",\n        keysTried: ATHENA_ENV_CLIENT_KEYS,\n        message:\n          \"ATHENA_CLIENT not set (optional X-Athena-Client registry name).\",\n        severity: \"warn\",\n      })\n    );\n  }\n\n  if (authUrl) {\n    if (\n      !isAbsoluteHttpUrl(authUrl.value) ||\n      isPlaceholderValue(authUrl.value)\n    ) {\n      checks.push(\n        fieldCheck({\n          field: \"authUrl\",\n          hit: authUrl,\n          keysTried: [\n            ATHENA_ENV_PRIMARY_KEYS.authUrl,\n            \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n          ],\n          message: `${authUrl.sourceKey} must be an absolute http(s) URL.`,\n          severity: \"error\",\n        })\n      );\n    } else {\n      checks.push(\n        fieldCheck({\n          field: \"authUrl\",\n          hit: authUrl,\n          keysTried: [\n            ATHENA_ENV_PRIMARY_KEYS.authUrl,\n            \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n          ],\n          message: `Resolved from ${authUrl.sourceKey} (${authUrl.source}).`,\n          severity: \"ok\",\n        })\n      );\n    }\n  }\n\n  if (loaded.files.length === 0) {\n    checks.push({\n      field: \"envFiles\",\n      keysTried: options.files ?? defaultEnvFilenames(options.processEnv ?? {}),\n      message:\n        \"No project env files found (.env / .env.local). Only process env was checked.\",\n      severity: \"warn\",\n      source: \"missing\",\n    });\n  }\n\n  if (resolvedMode === \"none\") {\n    checks.push({\n      field: \"mode\",\n      keysTried: [\n        ...GATEWAY_URL_ENV_KEYS,\n        ...DIRECT_CONNECTION_STRING_ENV_KEYS,\n      ],\n      message:\n        \"Could not infer mode. Set ATHENA_URL + ATHENA_API_KEY (gateway) or DATABASE_URL (direct).\",\n      severity: \"error\",\n      source: \"missing\",\n    });\n  }\n\n  const errorCount = checks.filter((c) => c.severity === \"error\").length;\n  const warnCount = checks.filter((c) => c.severity === \"warn\").length;\n\n  return {\n    checks,\n    cwd,\n    errorCount,\n    files: loaded.files,\n    mode,\n    resolvedMode,\n    sdkVersion: PACKAGE_VERSION,\n    warnCount,\n  };\n}\n\nexport function formatEnvCheckReport(\n  result: EnvCheckResult,\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true })\n): string {\n  const files =\n    result.files.length > 0\n      ? result.files.map((f) => f.filename).join(\", \")\n      : \"(none)\";\n  const lines: string[] = [\n    paint(\"athena-js · env check\", \"bold\", capabilities),\n    \"\",\n    `  ${paint(\"SDK        \", \"dim\", capabilities)}${result.sdkVersion}`,\n    `  ${paint(\"cwd        \", \"dim\", capabilities)}${result.cwd}`,\n    `  ${paint(\"mode       \", \"dim\", capabilities)}${result.mode} → ${result.resolvedMode}`,\n    `  ${paint(\"files      \", \"dim\", capabilities)}${files}`,\n    \"\",\n  ];\n\n  for (const check of result.checks) {\n    const tag =\n      check.severity === \"ok\"\n        ? \"ok   \"\n        : check.severity === \"warn\"\n          ? \"warn \"\n          : \"error\";\n    const tagColor =\n      check.severity === \"ok\"\n        ? \"green\"\n        : check.severity === \"warn\"\n          ? \"yellow\"\n          : \"red\";\n    const preview = check.valuePreview ? `  value=${check.valuePreview}` : \"\";\n    const key = check.sourceKey ? `  key=${check.sourceKey}` : \"\";\n    lines.push(\n      `  ${paint(`[${tag}]`, tagColor, capabilities)} ${check.field}${key}${preview}`\n    );\n    lines.push(paint(`         ${check.message}`, \"dim\", capabilities));\n  }\n\n  lines.push(\"\");\n  lines.push(\n    paint(\n      `  ${result.errorCount} error(s) · ${result.warnCount} warning(s)`,\n      \"dim\",\n      capabilities\n    )\n  );\n  if (result.errorCount === 0) {\n    lines.push(paint(\"result: OK\", \"green\", capabilities));\n  } else {\n    lines.push(paint(\"result: FAILED\", \"red\", capabilities));\n  }\n\n  return lines.join(\"\\n\");\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { randomBytes } from \"node:crypto\";\nimport { isDebugEnabled } from \"../debug.ts\";\nimport { ensureCliErrorId } from \"../errors.ts\";\nimport type { AthenaCliLogger, CliTraceContext } from \"./types.ts\";\n\nfunction spanId(): string {\n  return randomBytes(8).toString(\"hex\");\n}\n\nfunction validSpanId(value: string | undefined): value is string {\n  return (\n    value !== undefined &&\n    /^[0-9a-f]{16}$/i.test(value) &&\n    !/^[0]+$/i.test(value)\n  );\n}\n\nexport interface CliAsyncContext {\n  readonly activeSpanId?: string;\n  readonly commandId?: string;\n  readonly debugEnabled: boolean;\n  readonly invocationId: string;\n  readonly traceId: string;\n}\n\nconst asyncContext = new AsyncLocalStorage<CliAsyncContext>();\n\nexport function getCliAsyncContext(): CliAsyncContext | undefined {\n  return asyncContext.getStore();\n}\n\nexport function getCliActiveSpanId(\n  invocationId?: string,\n  traceId?: string\n): string | undefined {\n  const context = asyncContext.getStore();\n  if (\n    context &&\n    (invocationId === undefined || context.invocationId === invocationId) &&\n    (traceId === undefined || context.traceId === traceId)\n  ) {\n    return context.activeSpanId;\n  }\n}\n\nexport function runCliAsyncContext<T>(\n  context: CliAsyncContext,\n  operation: () => Promise<T> | T\n): Promise<T> {\n  return asyncContext.run(context, async () => operation());\n}\n\nfunction createTrace(\n  logger: AthenaCliLogger,\n  parentSpanId?: string\n): CliTraceContext {\n  return {\n    invocationId: logger.invocationId,\n    async span<T>(\n      name: string,\n      metadata: Record<string, unknown> | undefined,\n      operation: () => Promise<T> | T\n    ): Promise<T> {\n      const currentSpanId = spanId();\n      const activeContext = asyncContext.getStore();\n      const inheritedParent =\n        activeContext?.invocationId === logger.invocationId &&\n        activeContext.traceId === logger.traceId\n          ? activeContext.activeSpanId\n          : undefined;\n      const currentParent =\n        inheritedParent ??\n        (validSpanId(parentSpanId) ? parentSpanId : undefined);\n      const startedAt = Date.now();\n      logger.record({\n        data: { name, ...metadata },\n        kind: \"call.start\",\n        level: \"debug\",\n        parentSpanId: currentParent,\n        spanId: currentSpanId,\n      });\n      const context: CliAsyncContext = {\n        activeSpanId: currentSpanId,\n        debugEnabled: isDebugEnabled(),\n        invocationId: logger.invocationId,\n        traceId: logger.traceId,\n      };\n      return asyncContext.run(context, async () => {\n        try {\n          const result = await operation();\n          logger.record({\n            data: { name, success: true },\n            durationMs: Math.max(0, Date.now() - startedAt),\n            kind: \"call.finish\",\n            level: \"debug\",\n            parentSpanId: currentParent,\n            spanId: currentSpanId,\n          });\n          return result;\n        } catch (error) {\n          const errorId = ensureCliErrorId(error);\n          logger.record({\n            data: { name },\n            durationMs: Math.max(0, Date.now() - startedAt),\n            error,\n            errorId,\n            kind: \"error\",\n            level: \"error\",\n            message: `CLI operation failed: ${name}`,\n            parentSpanId: currentParent,\n            spanId: currentSpanId,\n          });\n          logger.record({\n            data: { errorId, name, success: false },\n            durationMs: Math.max(0, Date.now() - startedAt),\n            kind: \"call.finish\",\n            level: \"error\",\n            parentSpanId: currentParent,\n            spanId: currentSpanId,\n          });\n          throw error;\n        }\n      });\n    },\n    traceId: logger.traceId,\n  };\n}\n\nexport function createCliTraceContext(\n  logger: AthenaCliLogger\n): CliTraceContext {\n  return createTrace(logger);\n}\n\nexport function createChildCliTraceContext(\n  logger: AthenaCliLogger,\n  parentSpanId: string\n): CliTraceContext {\n  return createTrace(logger, parentSpanId);\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  return [\n    `athena-js api-key generate cannot write ${envKey}.`,\n    \"That variable is a store-backed gateway API key (`ath_<publicId>.<secret>`).\",\n    \"The gateway looks up the public ID in its API key store; this offline command registers no record.\",\n    \"Create a usable app key with:\",\n    \"  athena-js api-key create --name <name> --rights gateway.query --write\",\n    \"Use generate only for the static admin secret (ATHENA_KEY_12 / ATHENA_P12_KEY), which must also be set on the gateway process.\",\n  ].join(\"\\n\");\n}\n\nexport function assertGenerateDoesNotWriteGatewayAppKey(envKey: string): void {\n  if (GATEWAY_APP_KEY_ENV_KEYS.has(envKey)) {\n    throw new Error(gatewayAppKeyGenerateWriteError(envKey));\n  }\n}\n\nfunction getRandomBytes(size: number): Uint8Array {\n  return randomBytes(size);\n}\n\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n  return Buffer.from(bytes)\n    .toString(\"base64\")\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/[=]+$/g, \"\");\n}\n\nexport interface GenerateApiKeyOptions {\n  /** Entropy bytes before encoding. Default 32. */\n  bytes?: number;\n  /** Prefix applied to the secret. Default empty. */\n  prefix?: string;\n}\n\nexport interface GeneratedApiKey {\n  /** Full secret including prefix. */\n  key: string;\n  prefix: string;\n  /** Secret portion without prefix. */\n  secret: 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  options: GenerateApiKeyOptions = {}\n): GeneratedApiKey {\n  const bytes = options.bytes ?? DEFAULT_BYTES;\n  if (!Number.isInteger(bytes) || bytes < 16 || bytes > 64) {\n    throw new Error(\"--bytes must be an integer between 16 and 64.\");\n  }\n\n  const prefix =\n    options.prefix === undefined ? DEFAULT_PREFIX : String(options.prefix);\n  const secret = bytesToBase64Url(getRandomBytes(bytes));\n  return {\n    key: `${prefix}${secret}`,\n    prefix,\n    secret,\n  };\n}\n\nexport interface WriteApiKeyToEnvOptions {\n  cwd?: string;\n  /** Env key to set. Default `ATHENA_KEY_12`. */\n  envKey?: string;\n  /** Absolute or cwd-relative env file path. Default `.env.local`. */\n  filePath?: string;\n  /** Overwrite when the key already exists. Default false. */\n  force?: boolean;\n  /** Generated or provided key value. */\n  key: string;\n}\n\nexport interface WriteApiKeyToEnvResult {\n  absolutePath: string;\n  action: \"created\" | \"updated\" | \"unchanged\";\n  envKey: string;\n  previousPresent: boolean;\n}\n\n/**\n * Upsert an API key into a dotenv file without clobbering other keys.\n */\nexport function writeApiKeyToEnvFile(\n  options: WriteApiKeyToEnvOptions\n): WriteApiKeyToEnvResult {\n  const cwd = options.cwd ?? process.cwd();\n  const relative = options.filePath ?? \".env.local\";\n  const absolutePath = resolve(cwd, relative);\n  const envKey = options.envKey ?? GENERATE_DEFAULT_ENV_KEY;\n  const force = options.force === true;\n  const lineValue = options.key.includes(\" \")\n    ? `\"${options.key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n    : options.key;\n  const assignment = `${envKey}=${lineValue}`;\n\n  if (!existsSync(absolutePath)) {\n    const body = `# Generated by athena-js api-key generate (static admin secret)\\n${assignment}\\n`;\n    writeFileSync(absolutePath, body, \"utf8\");\n    return {\n      absolutePath,\n      action: \"created\",\n      envKey,\n      previousPresent: false,\n    };\n  }\n\n  const original = readFileSync(absolutePath, \"utf8\");\n  const lines = original.split(/\\r?\\n/);\n  let previousPresent = false;\n  let replaced = false;\n  let existingValue: string | undefined;\n  const nextLines = lines.map((line) => {\n    const parsed = parseEnvLine(line);\n    if (!parsed || parsed[0] !== envKey) {\n      return line;\n    }\n    previousPresent = true;\n    existingValue = parsed[1];\n    if (parsed[1] === options.key) {\n      return line;\n    }\n    if (!force) {\n      return line;\n    }\n    replaced = true;\n    // Preserve export prefix if present.\n    if (/^\\s*export\\s+/.test(line)) {\n      return `export ${assignment}`;\n    }\n    return assignment;\n  });\n\n  if (previousPresent && !replaced) {\n    if (existingValue === options.key) {\n      return {\n        absolutePath,\n        action: \"unchanged\",\n        envKey,\n        previousPresent: true,\n      };\n    }\n    throw new Error(\n      `${envKey} already set in ${relative}. Re-run with --force to overwrite.`\n    );\n  }\n\n  if (!previousPresent) {\n    const needsNewline =\n      original.length > 0 &&\n      !original.endsWith(\"\\n\") &&\n      !original.endsWith(\"\\r\");\n    const suffix = `${needsNewline ? \"\\n\" : \"\"}${assignment}\\n`;\n    writeFileSync(absolutePath, `${original}${suffix}`, \"utf8\");\n    return {\n      absolutePath,\n      action: \"updated\",\n      envKey,\n      previousPresent: false,\n    };\n  }\n\n  writeFileSync(absolutePath, `${nextLines.join(\"\\n\")}`, \"utf8\");\n  return {\n    absolutePath,\n    action: \"updated\",\n    envKey,\n    previousPresent: true,\n  };\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  path: readonly string[],\n  legacy: CliCommand[\"command\"],\n  prefix: string[] = []\n) {\n  return defineCommand({\n    legacy,\n    parse: (rest) => parse([...prefix, ...rest]),\n    path,\n    run: (ctx: CommandContext, parsed: CliCommand) => run(ctx, parsed as never),\n    usage,\n  });\n}\n\nexport const authCommands = [\n  adapt([\"auth\"], \"auth\"),\n  adapt([\"auth\", \"status\"], \"auth-status\", [\"status\"]),\n  adapt([\"auth\", \"doctor\"], \"auth-doctor\", [\"doctor\"]),\n  adapt([\"auth\", \"capabilities\"], \"auth-capabilities\", [\"capabilities\"]),\n  adapt([\"auth\", \"audit\"], \"auth-audit\", [\"audit\"]),\n  adapt([\"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  encodeCliJsonSuccess,\n  exitCodeForError,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type {\n  AuthAuditCommand,\n  AuthCapabilitiesCommand,\n  AuthDoctorCommand,\n  AuthStatusCommand,\n  AuthTracesCommand,\n  CliCommand,\n} from \"../../types.ts\";\nimport {\n  buildAuthCapabilityMatrix,\n  formatAuthCapabilityMatrix,\n} from \"./capabilities-report.ts\";\nimport {\n  inspectLocalAuthStatus,\n  queryLocalAuthAudit,\n  queryLocalAuthTraces,\n} from \"./inspect-local.ts\";\nimport {\n  buildAuthStatusReport,\n  formatAuthStatusText,\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  const head = rest[0];\n  if (\n    head === undefined ||\n    head === \"help\" ||\n    head === \"--help\" ||\n    head === \"-h\"\n  ) {\n    return { command: \"auth\" };\n  }\n  if (head === \"status\") {\n    return parseFlagCommand(\"auth-status\", rest.slice(1));\n  }\n  if (head === \"doctor\") {\n    return parseFlagCommand(\"auth-doctor\", rest.slice(1));\n  }\n  if (head === \"capabilities\") {\n    return parseFlagCommand(\"auth-capabilities\", rest.slice(1));\n  }\n  if (head === \"audit\") {\n    return parseObservability(\"auth-audit\", rest.slice(1));\n  }\n  if (head === \"traces\") {\n    return parseObservability(\"auth-traces\", rest.slice(1));\n  }\n  throw unknownOptionError(head, \"auth\");\n}\n\nfunction parseFlagCommand(\n  command: \"auth-status\" | \"auth-doctor\" | \"auth-capabilities\",\n  rest: readonly string[]\n): CliCommand {\n  let json = false;\n  let strict = false;\n  for (const token of rest) {\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"auth\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--strict\" && command === \"auth-doctor\") {\n      strict = true;\n      continue;\n    }\n    throw unknownOptionError(token, command.replace(\"-\", \" \"));\n  }\n  if (command === \"auth-doctor\") {\n    return { command, json, strict };\n  }\n  return { command, json };\n}\n\nfunction parseObservability(\n  command: \"auth-audit\" | \"auth-traces\",\n  rest: readonly string[]\n): CliCommand {\n  let json = false;\n  let errors = false;\n  let limit = 20;\n  let action: \"list\" | \"show\" = \"list\";\n  let target: string | undefined;\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"auth\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--errors\") {\n      errors = true;\n      continue;\n    }\n    if (token === \"--limit\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --limit option.\");\n      }\n      limit = Number(nextValue);\n      if (!Number.isInteger(limit) || limit < 1) {\n        throw new Error(`Invalid --limit value \"${nextValue}\".`);\n      }\n      index += 1;\n      continue;\n    }\n    if (token === \"list\" || token === \"show\") {\n      action = token;\n      continue;\n    }\n    if (token && !token.startsWith(\"-\") && !target) {\n      action = \"show\";\n      target = token;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", command.replace(\"-\", \" \"));\n  }\n  return { action, command, errors, json, limit, target };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"auth\");\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: { json?: boolean }): boolean {\n  return ctx.output === \"json\" || parsed.json === true;\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed:\n    | AuthStatusCommand\n    | AuthDoctorCommand\n    | AuthCapabilitiesCommand\n    | AuthAuditCommand\n    | AuthTracesCommand\n    | { command: \"auth\" }\n): Promise<void> {\n  try {\n    if (parsed.command === \"auth\") {\n      ctx.logRaw(usage());\n      return;\n    }\n    const json = wantsJson(ctx, parsed);\n    if (parsed.command === \"auth-capabilities\") {\n      const rows = buildAuthCapabilityMatrix();\n      if (json) {\n        ctx.log(\n          stringifyCliJson(encodeCliJsonSuccess(\"auth.capabilities\", { rows }))\n        );\n      } else {\n        ctx.logRaw(formatAuthCapabilityMatrix(rows, ctx.capabilities));\n      }\n      return;\n    }\n\n    if (parsed.command === \"auth-status\" || parsed.command === \"auth-doctor\") {\n      const facts = ctx.runtime.inspectAuthStatus\n        ? await ctx.trace.span(\n            \"auth.status\",\n            { configPath: ctx.globals.configPath },\n            () => ctx.runtime.inspectAuthStatus?.({ cwd: ctx.cwd })\n          )\n        : await ctx.trace.span(\n            \"auth.status\",\n            { configPath: ctx.globals.configPath },\n            () =>\n              inspectLocalAuthStatus({\n                configPath: ctx.globals.configPath,\n                cwd: ctx.cwd,\n              })\n          );\n      const status = buildAuthStatusReport(facts);\n      if (json) {\n        ctx.log(\n          stringifyCliJson(\n            encodeCliJsonSuccess(\n              parsed.command === \"auth-doctor\" ? \"auth.doctor\" : \"auth.status\",\n              status\n            )\n          )\n        );\n      } else {\n        ctx.logRaw(formatAuthStatusText(status, ctx.capabilities));\n      }\n      if (parsed.command === \"auth-doctor\" && !status.ok) {\n        setCliExitCode(CliExitCode.Validation);\n      }\n      return;\n    }\n\n    if (parsed.command === \"auth-audit\") {\n      const query = ctx.runtime.queryAuthAudit ?? queryLocalAuthAudit;\n      const rows = await ctx.trace.span(\n        \"auth.audit.query\",\n        { action: parsed.action, limit: parsed.limit },\n        () =>\n          query({\n            action: parsed.action,\n            configPath: ctx.globals.configPath,\n            cwd: ctx.cwd,\n            limit: parsed.limit,\n            target: parsed.target,\n          })\n      );\n      if (json) {\n        ctx.log(stringifyCliJson(encodeCliJsonSuccess(\"auth.audit\", { rows })));\n      } else {\n        for (const row of rows) {\n          ctx.log(`${row.at}  ${row.event}  ${row.actor ?? \"\"}`.trimEnd());\n        }\n      }\n      return;\n    }\n\n    const query = ctx.runtime.queryAuthTraces ?? queryLocalAuthTraces;\n    const rows = await ctx.trace.span(\n      \"auth.traces.query\",\n      { action: parsed.action, errorsOnly: parsed.errors, limit: parsed.limit },\n      () =>\n        query({\n          action: parsed.action,\n          configPath: ctx.globals.configPath,\n          cwd: ctx.cwd,\n          errorsOnly: parsed.errors,\n          limit: parsed.limit,\n          target: parsed.target,\n        })\n    );\n    if (json) {\n      ctx.log(stringifyCliJson(encodeCliJsonSuccess(\"auth.traces\", { rows })));\n    } else {\n      for (const row of rows) {\n        ctx.log(\n          `${row.method} ${row.path}  ${row.statusCode ?? \"\"} · ${row.totalMs ?? \"?\"}ms`\n        );\n      }\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\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  capability: string;\n  embedded: AuthRuntimeSupportMark;\n  rust: AuthRuntimeSupportMark;\n}\n\nconst CAPABILITY_ORDER = [\n  \"password\",\n  \"organizations\",\n  \"invitations\",\n  \"apiKeys\",\n  \"twoFactor\",\n  \"passkeys\",\n  \"social\",\n  \"jwt\",\n  \"oidc\",\n] as const;\n\nfunction mark(\n  operations: readonly AthenaAuthOperationDefinition[],\n  side: \"rust\" | \"embedded\"\n): AuthRuntimeSupportMark {\n  const portable = operations.filter(\n    (operation) => operation.nonportable !== true\n  );\n  if (portable.length === 0) {\n    return \"no\";\n  }\n  const supported = portable.filter(\n    (operation) => operation[side] === \"supported\"\n  );\n  if (supported.length === portable.length) {\n    return \"yes\";\n  }\n  if (supported.length === 0) {\n    return \"no\";\n  }\n  return \"partial\";\n}\n\nexport function buildAuthCapabilityMatrix(\n  operations: readonly AthenaAuthOperationDefinition[] = ATHENA_AUTH_OPERATIONS\n): AuthCapabilityRow[] {\n  const seen = new Set<string>();\n  const rows: AuthCapabilityRow[] = [];\n  const ordered = [\n    ...CAPABILITY_ORDER,\n    ...operations.map((operation) => operation.capability),\n  ];\n  for (const capability of ordered) {\n    if (seen.has(capability)) {\n      continue;\n    }\n    seen.add(capability);\n    const subset = operations.filter(\n      (operation) => operation.capability === capability\n    );\n    if (subset.length === 0) {\n      continue;\n    }\n    rows.push({\n      capability,\n      embedded: mark(subset, \"embedded\"),\n      rust: mark(subset, \"rust\"),\n    });\n  }\n  return rows;\n}\n\nfunction glyph(value: AuthRuntimeSupportMark): string {\n  if (value === \"yes\") {\n    return \"✓\";\n  }\n  if (value === \"partial\") {\n    return \"partial\";\n  }\n  return \"no\";\n}\n\nfunction markColor(value: AuthRuntimeSupportMark): \"green\" | \"yellow\" | \"dim\" {\n  if (value === \"yes\") {\n    return \"green\";\n  }\n  if (value === \"partial\") {\n    return \"yellow\";\n  }\n  return \"dim\";\n}\n\nexport function formatAuthCapabilityMatrix(\n  rows: readonly AuthCapabilityRow[] = buildAuthCapabilityMatrix(),\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true }),\n  options: { framed?: boolean } = {}\n): string {\n  const lines = [\n    paint(\"Athena Auth capabilities\", \"bold\", capabilities),\n    \"\",\n    `${paint(\"Embedded schema generation\", \"dim\", capabilities)}  ${paint(String(ATHENA_AUTH_SCHEMA_GENERATION), \"cyan\", capabilities)}`,\n    \"\",\n    paint(\"Capability          Embedded       Rust\", \"dim\", capabilities),\n  ];\n  for (const row of rows) {\n    const name = row.capability.padEnd(19);\n    const embedded = paint(\n      glyph(row.embedded).padEnd(14),\n      markColor(row.embedded),\n      capabilities\n    );\n    const rust = paint(glyph(row.rust), markColor(row.rust), capabilities);\n    lines.push(`${name} ${embedded} ${rust}`);\n  }\n  const body = `${lines.join(\"\\n\")}\\n`;\n  if (options.framed === false) {\n    return body;\n  }\n  return `${frameBlock(body.trimEnd(), capabilities)}\\n`;\n}\n","import {\n  type AthenaAuthDatabase,\n  createPostgresAuthDatabase,\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 { ATHENA_MIGRATE_COMMAND } from \"../../../migrations/commands.ts\";\nimport {\n  databaseLabel,\n  providerLabel,\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  configPath?: string;\n  cwd?: string;\n}\n\ninterface DirectAuthConnection {\n  connectionString: string;\n  databaseLabel: string;\n  providerLabel: string;\n}\n\nasync function resolveDirectAuthConnection(\n  options: LocalAuthInspectOptions\n): Promise<DirectAuthConnection> {\n  const cwd = options.cwd ?? process.cwd();\n  const loaded = await loadGeneratorConfig({\n    configPath: options.configPath,\n    cwd,\n  });\n  const authority = resolveGeneratorDatabaseAuthority({\n    applyProjectEnv: false,\n    cwd,\n    loaded,\n    mode: \"direct\",\n  });\n  const config = {\n    ...loaded.config,\n    provider: authority.provider,\n  };\n  authority.restoreEnv();\n  const { provider } = config;\n  if (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n    throw new AthenaCliError({\n      code: \"AUTH001\",\n      exitCode: CliExitCode.Runtime,\n      hint: `Use the same athena.config.ts / DATABASE_URL that \\`${ATHENA_MIGRATE_COMMAND}\\` uses.`,\n      message: `Embedded Auth CLI requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n    });\n  }\n  if (!provider.connectionString) {\n    throw new AthenaCliError({\n      code: \"AUTH001\",\n      exitCode: CliExitCode.Runtime,\n      hint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n      message: \"auth commands require a reachable Embedded Auth database.\",\n    });\n  }\n  return {\n    connectionString: provider.connectionString,\n    databaseLabel: databaseLabel(config),\n    providerLabel: providerLabel(config),\n  };\n}\n\nasync function tableExists(\n  database: { query: AthenaAuthDatabase[\"query\"] },\n  qualified: string\n): Promise<boolean> {\n  const result = await database.query(\"SELECT to_regclass($1) AS name\", [\n    qualified,\n  ]);\n  const name = result.rows[0]?.name;\n  return typeof name === \"string\" && name.length > 0;\n}\n\nexport async function inspectLocalAuthStatus(\n  options: LocalAuthInspectOptions = {}\n): Promise<AuthStatusFacts> {\n  const connection = await resolveDirectAuthConnection(options);\n  const database = await createPostgresAuthDatabase(\n    connection.connectionString\n  );\n  try {\n    const plan = await planAthenaAuthSchema(database, { inspectSchema: false });\n    const applied = plan.entries.filter((entry) => entry.action !== \"apply\");\n    const currentGeneration =\n      applied.length === 0\n        ? null\n        : Math.max(...applied.map((entry) => entry.version));\n    const auditLog = await tableExists(database, \"athena.audit_log_auth\");\n    const traces = await tableExists(database, \"athena.traces_auth\");\n    return {\n      auditLog,\n      currentGeneration,\n      databaseLabel: connection.databaseLabel,\n      mode: \"embedded\",\n      providerLabel: connection.providerLabel,\n      traces,\n    };\n  } finally {\n    await database.close?.();\n  }\n}\n\nexport async function queryLocalAuthAudit(\n  options: LocalAuthInspectOptions & {\n    action: \"list\" | \"show\";\n    limit: number;\n    target?: string;\n  }\n): Promise<AuthAuditRow[]> {\n  const connection = await resolveDirectAuthConnection(options);\n  const database = await createPostgresAuthDatabase(\n    connection.connectionString\n  );\n  try {\n    if (!(await tableExists(database, \"athena.audit_log_auth\"))) {\n      throw new AthenaCliError({\n        code: \"AUTH001\",\n        exitCode: CliExitCode.Runtime,\n        hint: `Run \\`${ATHENA_MIGRATE_COMMAND}\\` so Embedded Auth generation 023+ is applied.`,\n        message: \"auth audit requires table athena.audit_log_auth.\",\n      });\n    }\n    const result = options.target\n      ? await database.query<{\n          actor_user_id: string | null;\n          created_at: Date | string;\n          event: string;\n          id: string;\n        }>(\n          `\nSELECT id, event, actor_user_id, created_at\nFROM athena.audit_log_auth\nWHERE id = $1 OR event_id = $1\nLIMIT 1\n`,\n          [options.target]\n        )\n      : await database.query<{\n          actor_user_id: string | null;\n          created_at: Date | string;\n          event: string;\n          id: string;\n        }>(\n          `\nSELECT id, event, actor_user_id, created_at\nFROM athena.audit_log_auth\nORDER BY created_at DESC\nLIMIT $1\n`,\n          [options.limit]\n        );\n    return result.rows.map((row) => ({\n      actor: row.actor_user_id ?? undefined,\n      at:\n        row.created_at instanceof Date\n          ? row.created_at.toISOString()\n          : String(row.created_at),\n      event: row.event,\n      id: row.id,\n    }));\n  } finally {\n    await database.close?.();\n  }\n}\n\nexport async function queryLocalAuthTraces(\n  options: LocalAuthInspectOptions & {\n    action: \"list\" | \"show\";\n    errorsOnly: boolean;\n    limit: number;\n    target?: string;\n  }\n): Promise<AuthTraceRow[]> {\n  const connection = await resolveDirectAuthConnection(options);\n  const database = await createPostgresAuthDatabase(\n    connection.connectionString\n  );\n  try {\n    if (!(await tableExists(database, \"athena.traces_auth\"))) {\n      throw new AthenaCliError({\n        code: \"AUTH002\",\n        exitCode: CliExitCode.Runtime,\n        hint: `Run \\`${ATHENA_MIGRATE_COMMAND}\\` so Embedded Auth observability is applied.`,\n        message: \"auth traces requires table athena.traces_auth.\",\n      });\n    }\n    const result = options.target\n      ? await database.query<{\n          method: string;\n          path: string;\n          status_code: number | null;\n          total_ms: number | null;\n          trace_id: string | null;\n        }>(\n          `\nSELECT method, path, status_code, total_ms, trace_id\nFROM athena.traces_auth\nWHERE id = $1 OR trace_id = $1\nLIMIT 1\n`,\n          [options.target]\n        )\n      : await database.query<{\n          method: string;\n          path: string;\n          status_code: number | null;\n          total_ms: number | null;\n          trace_id: string | null;\n        }>(\n          options.errorsOnly\n            ? `\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            : `\nSELECT method, path, status_code, total_ms, trace_id\nFROM athena.traces_auth\nORDER BY started_at DESC\nLIMIT $1\n`,\n          [options.limit]\n        );\n    return result.rows.map((row) => ({\n      method: row.method,\n      path: row.path,\n      statusCode: row.status_code ?? undefined,\n      totalMs: row.total_ms ?? undefined,\n      traceId: row.trace_id ?? undefined,\n    }));\n  } finally {\n    await database.close?.();\n  }\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  type AuthCapabilityRow,\n  buildAuthCapabilityMatrix,\n  formatAuthCapabilityMatrix,\n} from \"./capabilities-report.ts\";\n\nexport interface AuthStatusFacts {\n  auditLog?: boolean;\n  currentGeneration?: number | null;\n  databaseLabel?: string;\n  mode?: \"embedded\" | \"remote\" | \"unknown\";\n  providerLabel?: string;\n  traces?: boolean;\n}\n\nexport interface AuthStatusReport {\n  capabilities: AuthCapabilityRow[];\n  currentGeneration: number | null;\n  databaseLabel?: string;\n  expectedGeneration: number;\n  mode: \"embedded\" | \"remote\" | \"unknown\";\n  observability: {\n    auditLog: boolean | \"unknown\";\n    traces: boolean | \"unknown\";\n  };\n  ok: boolean;\n  providerLabel?: string;\n}\n\nexport function buildAuthStatusReport(\n  facts: AuthStatusFacts = {}\n): AuthStatusReport {\n  const current =\n    facts.currentGeneration === undefined ? null : facts.currentGeneration;\n  const generationOk =\n    current == null || current === ATHENA_AUTH_SCHEMA_GENERATION;\n  return {\n    capabilities: buildAuthCapabilityMatrix(),\n    currentGeneration: current,\n    databaseLabel: facts.databaseLabel,\n    expectedGeneration: ATHENA_AUTH_SCHEMA_GENERATION,\n    mode: facts.mode ?? \"unknown\",\n    observability: {\n      auditLog: facts.auditLog ?? \"unknown\",\n      traces: facts.traces ?? \"unknown\",\n    },\n    ok: generationOk,\n    providerLabel: facts.providerLabel,\n  };\n}\n\nfunction obs(\n  value: boolean | \"unknown\",\n  capabilities: CliCapabilities\n): string {\n  if (value === true) {\n    return paint(\"✓\", \"green\", capabilities);\n  }\n  if (value === false) {\n    return paint(\"missing\", \"red\", capabilities);\n  }\n  return paint(\"unknown\", \"dim\", capabilities);\n}\n\nfunction modeColor(\n  mode: AuthStatusReport[\"mode\"]\n): \"green\" | \"cyan\" | \"yellow\" {\n  if (mode === \"embedded\") {\n    return \"green\";\n  }\n  if (mode === \"remote\") {\n    return \"cyan\";\n  }\n  return \"yellow\";\n}\n\nexport function formatAuthStatusText(\n  report: AuthStatusReport,\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true })\n): string {\n  const generationValue = report.currentGeneration ?? \"n/a\";\n  const generationColor =\n    report.currentGeneration === null ? \"yellow\" : report.ok ? \"green\" : \"red\";\n  const label = (text: string) => paint(text.padEnd(18), \"dim\", capabilities);\n  const lines = [\n    paint(\"Athena Auth status\", \"bold\", capabilities),\n    \"\",\n    `${label(\"Mode\")}${paint(report.mode, modeColor(report.mode), capabilities)}`,\n  ];\n  if (report.providerLabel) {\n    lines.push(`${label(\"Database\")}${report.providerLabel}`);\n  }\n  if (report.databaseLabel) {\n    lines.push(`${label(\"Target\")}${report.databaseLabel}`);\n  }\n  lines.push(\n    `${label(\"Schema generation\")}${paint(String(generationValue), generationColor, capabilities)} ${paint(`(expected ${report.expectedGeneration})`, \"dim\", capabilities)}`,\n    \"\",\n    formatAuthCapabilityMatrix(report.capabilities, capabilities, {\n      framed: false,\n    }).trimEnd(),\n    \"\",\n    paint(\"Observability\", \"bold\", capabilities),\n    `  ${paint(\"audit_log_auth\", \"dim\", capabilities)}  ${obs(report.observability.auditLog, capabilities)}`,\n    `  ${paint(\"traces_auth\", \"dim\", capabilities)}     ${obs(report.observability.traces, capabilities)}`\n  );\n  return `${frameBlock(lines.join(\"\\n\"), capabilities)}\\n`;\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type {\n  BillingIngressReplayCommand,\n  BillingWebhooksCommand,\n  CliCommand,\n} from \"../../types.ts\";\nimport {\n  type BillingReconcileSubjectsCommand,\n  parse,\n  parseBillingIngressReplay,\n  parseBillingWebhooksFlags,\n  run,\n  usage,\n} from \"./index.ts\";\n\nexport const billingCommands = [\n  defineCommand({\n    legacy: \"billing-reconcile-subjects\" as CliCommand[\"command\"],\n    parse,\n    path: [\"billing\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(\n        ctx,\n        parsed as\n          | BillingReconcileSubjectsCommand\n          | BillingWebhooksCommand\n          | BillingIngressReplayCommand\n      ),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-reconcile-subjects\" as CliCommand[\"command\"],\n    parse,\n    path: [\"billing\", \"reconcile-subjects\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingReconcileSubjectsCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-webhooks\" as CliCommand[\"command\"],\n    parse: (rest) => parseBillingWebhooksFlags(\"status\", rest),\n    path: [\"billing\", \"webhooks\", \"status\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingWebhooksCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-webhooks\" as CliCommand[\"command\"],\n    parse: (rest) => parseBillingWebhooksFlags(\"reconcile\", rest),\n    path: [\"billing\", \"webhooks\", \"reconcile\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingWebhooksCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-webhooks\" as CliCommand[\"command\"],\n    parse: (rest) => parseBillingWebhooksFlags(\"status\", rest),\n    path: [\"billing\", \"ingestion\", \"health\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingWebhooksCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-webhooks\" as CliCommand[\"command\"],\n    parse: (rest) => parseBillingWebhooksFlags(\"verify\", rest),\n    path: [\"billing\", \"webhooks\", \"verify\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingWebhooksCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"billing-ingress-replay\" as CliCommand[\"command\"],\n    parse: parseBillingIngressReplay,\n    path: [\"billing\", \"ingress\", \"replay\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as BillingIngressReplayCommand),\n    usage,\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  encodeCliJsonSuccess,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type {\n  BillingIngressReplayCommand,\n  BillingWebhooksCommand,\n  CliCommand,\n} from \"../../types.ts\";\nimport {\n  executeBillingIngressReplay,\n  executeBillingReconcileSubjects,\n  executeBillingWebhooks,\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  apply: boolean;\n  command: \"billing-reconcile-subjects\";\n  configPath?: string;\n  connectionId?: string;\n  cursor?: string;\n  customerId?: string;\n  dryRun: boolean;\n  includeAmbiguous: boolean;\n  json: boolean;\n  limit?: number;\n  maxCustomers?: number;\n  maxDurationMs?: number;\n  maxPages?: number;\n  provider?: string;\n  subjectId?: string;\n}\n\nexport function parse(rest: string[]): CliCommand {\n  const head = rest[0];\n  if (\n    head === undefined ||\n    head === \"help\" ||\n    head === \"--help\" ||\n    head === \"-h\"\n  ) {\n    return { command: \"help\", topic: \"billing\" };\n  }\n  if (\n    head !== \"reconcile-subjects\" &&\n    head !== \"webhooks\" &&\n    head !== \"ingestion\" &&\n    head !== \"ingress\"\n  ) {\n    throw unknownOptionError(head, \"billing\");\n  }\n  if (head === \"ingress\") {\n    if (rest[1] !== \"replay\") {\n      throw unknownOptionError(rest[1] ?? \"ingress\", \"billing ingress\");\n    }\n    return parseBillingIngressReplay(rest.slice(2));\n  }\n  if (head === \"ingestion\") {\n    if (rest[1] !== \"health\") {\n      throw unknownOptionError(rest[1] ?? \"ingestion\", \"billing ingestion\");\n    }\n    return parseBillingWebhooksFlags(\"status\", rest.slice(2));\n  }\n  if (head === \"webhooks\") {\n    return parseBillingWebhooks(rest.slice(1));\n  }\n  let apply = false;\n  let configPath: string | undefined;\n  let connectionId: string | undefined;\n  let cursor: string | undefined;\n  let customerId: string | undefined;\n  let dryRun = true;\n  let includeAmbiguous = false;\n  let json = false;\n  let limit: number | undefined;\n  let maxCustomers: number | undefined;\n  let maxDurationMs: number | undefined;\n  let maxPages: number | undefined;\n  let provider: string | undefined;\n  let subjectId: string | undefined;\n  const flags = rest.slice(1);\n  for (let index = 0; index < flags.length; index += 1) {\n    const token = flags[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"billing\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--apply\") {\n      apply = true;\n      dryRun = false;\n      continue;\n    }\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      apply = false;\n      continue;\n    }\n    if (token === \"--include-ambiguous\") {\n      includeAmbiguous = true;\n      continue;\n    }\n    if (\n      token === \"--config\" ||\n      token === \"--connection\" ||\n      token === \"--subject\" ||\n      token === \"--provider\" ||\n      token === \"--customer\" ||\n      token === \"--limit\" ||\n      token === \"--max-pages\" ||\n      token === \"--max-customers\" ||\n      token === \"--max-duration\" ||\n      token === \"--cursor\"\n    ) {\n      const nextValue = flags[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(`Missing value for ${token} option.`);\n      }\n      if (token === \"--config\") {\n        configPath = nextValue;\n      } else if (token === \"--connection\") {\n        connectionId = nextValue;\n      } else if (token === \"--subject\") {\n        subjectId = nextValue;\n      } else if (token === \"--provider\") {\n        provider = nextValue;\n      } else if (token === \"--customer\") {\n        customerId = nextValue;\n      } else if (token === \"--limit\") {\n        const parsedLimit = Number.parseInt(nextValue, 10);\n        if (!Number.isFinite(parsedLimit) || parsedLimit < 1) {\n          throw new Error(\"Missing value for --limit option.\");\n        }\n        limit = parsedLimit;\n      } else if (token === \"--max-pages\") {\n        const parsedPages = Number.parseInt(nextValue, 10);\n        if (!Number.isFinite(parsedPages) || parsedPages < 1) {\n          throw new Error(\"Missing value for --max-pages option.\");\n        }\n        maxPages = parsedPages;\n      } else if (token === \"--max-customers\") {\n        const parsedCustomers = Number.parseInt(nextValue, 10);\n        if (!Number.isFinite(parsedCustomers) || parsedCustomers < 1) {\n          throw new Error(\"Missing value for --max-customers option.\");\n        }\n        maxCustomers = parsedCustomers;\n      } else if (token === \"--max-duration\") {\n        const parsedDuration = Number.parseInt(nextValue, 10);\n        if (!Number.isFinite(parsedDuration) || parsedDuration < 1) {\n          throw new Error(\"Missing value for --max-duration option.\");\n        }\n        maxDurationMs = parsedDuration;\n      } else {\n        cursor = nextValue;\n      }\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"billing reconcile-subjects\");\n  }\n  return {\n    apply,\n    command: \"billing-reconcile-subjects\",\n    configPath,\n    connectionId,\n    cursor,\n    customerId,\n    dryRun,\n    includeAmbiguous,\n    json,\n    limit,\n    maxCustomers,\n    maxDurationMs,\n    maxPages,\n    provider,\n    subjectId,\n  } as CliCommand;\n}\n\nfunction parseBillingWebhooks(rest: string[]): BillingWebhooksCommand {\n  const actionToken = rest[0];\n  if (\n    actionToken !== \"status\" &&\n    actionToken !== \"reconcile\" &&\n    actionToken !== \"verify\"\n  ) {\n    throw unknownOptionError(actionToken ?? \"webhooks\", \"billing webhooks\");\n  }\n  return parseBillingWebhooksFlags(actionToken, rest.slice(1));\n}\n\nexport function parseBillingIngressReplay(\n  flags: readonly string[]\n): CliCommand {\n  let classifyOnly = false;\n  let configPath: string | undefined;\n  let dryRun = false;\n  let json = false;\n  let limit: number | undefined;\n  for (let index = 0; index < flags.length; index += 1) {\n    const token = flags[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"billing\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n    if (token === \"--classify-only\") {\n      classifyOnly = true;\n      continue;\n    }\n    if (token === \"--config\" || token === \"--limit\") {\n      const nextValue = flags[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(`Missing value for ${token} option.`);\n      }\n      if (token === \"--config\") {\n        configPath = nextValue;\n      } else {\n        const parsedLimit = Number.parseInt(nextValue, 10);\n        if (!Number.isFinite(parsedLimit) || parsedLimit < 1) {\n          throw new Error(\"Missing value for --limit option.\");\n        }\n        limit = parsedLimit;\n      }\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"billing ingress replay\");\n  }\n  return {\n    classifyOnly,\n    command: \"billing-ingress-replay\",\n    configPath,\n    dryRun,\n    json,\n    limit,\n  };\n}\n\nexport function parseBillingWebhooksFlags(\n  action: \"status\" | \"reconcile\" | \"verify\",\n  flags: readonly string[]\n): BillingWebhooksCommand {\n  let configPath: string | undefined;\n  let connectionId: string | undefined;\n  let dryRun = action === \"reconcile\";\n  let json = false;\n  let provider: string | undefined;\n  for (let index = 0; index < flags.length; index += 1) {\n    const token = flags[index];\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n    if (token === \"--apply\") {\n      dryRun = false;\n      continue;\n    }\n    if (\n      token === \"--config\" ||\n      token === \"--connection\" ||\n      token === \"--provider\"\n    ) {\n      const nextValue = flags[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(`Missing value for ${token} option.`);\n      }\n      if (token === \"--config\") {\n        configPath = nextValue;\n      } else if (token === \"--connection\") {\n        connectionId = nextValue;\n      } else {\n        provider = nextValue;\n      }\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"billing webhooks\");\n  }\n  return {\n    action,\n    command: \"billing-webhooks\",\n    configPath,\n    connectionId,\n    dryRun,\n    json,\n    provider,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"billing\");\n}\n\nfunction spanCli<T>(\n  ctx: CommandContext,\n  name: string,\n  metadata: Record<string, unknown>,\n  operation: () => Promise<T> | T\n): Promise<T> {\n  if (ctx.trace == null) {\n    return Promise.resolve(operation());\n  }\n  return ctx.trace.span(name, metadata, operation);\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed:\n    | BillingReconcileSubjectsCommand\n    | BillingWebhooksCommand\n    | BillingIngressReplayCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, runtime } = ctx;\n  try {\n    if (parsed.command === \"billing-ingress-replay\") {\n      const report = await spanCli(\n        ctx,\n        \"billing.ingress.replay\",\n        {\n          dryRun: parsed.dryRun,\n          limit: parsed.limit,\n        },\n        () =>\n          executeBillingIngressReplay({\n            cwd: runtime.cwd ?? ctx.cwd,\n            parsed,\n          })\n      );\n      if (parsed.json || ctx.output === \"json\") {\n        log(\n          stringifyCliJson(\n            encodeCliJsonSuccess(\"billing.ingress.replay\", report)\n          )\n        );\n        return;\n      }\n      ctx.logRaw(JSON.stringify(report, null, 2));\n      return;\n    }\n    if (parsed.command === \"billing-webhooks\") {\n      const report = await spanCli(\n        ctx,\n        \"billing.webhooks\",\n        { action: parsed.action, dryRun: parsed.dryRun },\n        () =>\n          executeBillingWebhooks({\n            cwd: runtime.cwd ?? ctx.cwd,\n            parsed,\n          })\n      );\n      if (parsed.json || ctx.output === \"json\") {\n        log(stringifyCliJson(encodeCliJsonSuccess(\"billing.webhooks\", report)));\n        return;\n      }\n      ctx.logRaw(\n        typeof report === \"string\" ? report : JSON.stringify(report, null, 2)\n      );\n      return;\n    }\n    const execute =\n      runtime.runBillingReconcileSubjects ?? executeBillingReconcileSubjects;\n    const report = await spanCli(\n      ctx,\n      \"billing.reconcile-subjects\",\n      { dryRun: parsed.dryRun, provider: parsed.provider },\n      () =>\n        execute({\n          cwd: runtime.cwd ?? ctx.cwd,\n          parsed,\n        })\n    );\n    if (parsed.json || ctx.output === \"json\") {\n      log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"billing.reconcile-subjects\", report)\n        )\n      );\n      return;\n    }\n    ctx.logRaw(formatBillingImportReport(report));\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    setCliExitCode(exitCodeForError(error));\n    if (error instanceof AthenaCliError) {\n      logCliError(formatAthenaCliError(error), errorLog, capabilities);\n      return;\n    }\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n  }\n}\n","import type { BillingImportPlan, BillingImportRunReport } from \"./types.ts\";\n\nfunction evidenceLine(plan: BillingImportPlan): string {\n  if (plan.evidence.length === 0) {\n    return \"    (none)\";\n  }\n  return plan.evidence\n    .map((item) => `    - ${item.kind}${item.value ? `: ${item.value}` : \"\"}`)\n    .join(\"\\n\");\n}\n\nfunction actionLine(plan: BillingImportPlan): string {\n  switch (plan.action) {\n    case \"create_active_binding\":\n      return \"create active binding\";\n    case \"noop\":\n      return \"noop\";\n    case \"resume_pending\":\n      return \"resume pending binding\";\n    case \"mark_conflict\":\n      return \"mark conflict\";\n    case \"none\":\n      return \"no automatic binding\";\n    default: {\n      const _exhaustive: never = plan.action;\n      return _exhaustive;\n    }\n  }\n}\n\nexport function formatBillingImportPlan(plan: BillingImportPlan): string {\n  if (plan.decision === \"conflict\" && plan.candidates.length > 1) {\n    const candidateLines = plan.candidates\n      .map((subject) => `    - ${subject.id}`)\n      .join(\"\\n\");\n    return [\n      plan.providerCustomerId,\n      \"  → no automatic binding\",\n      \"  candidates:\",\n      candidateLines,\n      \"  reason:\",\n      `    ${plan.reason}`,\n    ].join(\"\\n\");\n  }\n  const target = plan.subject?.id ?? \"no automatic binding\";\n  return [\n    plan.providerCustomerId,\n    `  → ${target}`,\n    `  confidence: ${plan.confidence}`,\n    \"  evidence:\",\n    evidenceLine(plan),\n    \"  action:\",\n    `    ${actionLine(plan)}`,\n    \"  reason:\",\n    `    ${plan.reason}`,\n  ].join(\"\\n\");\n}\n\nexport function formatBillingImportReport(\n  report: BillingImportRunReport\n): string {\n  const summary = [\n    report.runId ? `run ID: ${report.runId}` : null,\n    report.traceId ? `trace ID: ${report.traceId}` : null,\n    `connection: ${report.connectionId}`,\n    report.provider\n      ? `provider: ${report.provider}${report.environment ? `/${report.environment}` : \"\"}`\n      : null,\n    report.pagesProcessed === null ? null : `pages: ${report.pagesProcessed}`,\n    `scanned: ${report.customersScanned}`,\n    `bound: ${report.bindingsCreated + report.bindingsActivated}`,\n    `conflicts: ${report.conflicts}`,\n    report.status\n      ? `checkpoint: ${report.hasMore ? \"checkpointed\" : \"caught-up\"} (${report.status})`\n      : null,\n  ]\n    .filter((line): line is string => line != null)\n    .join(\"\\n\");\n  if (report.plans.length === 0) {\n    if (report.pagesProcessed != null || report.traceId) {\n      return `${summary}\\nNo subject candidates. Email is never auto-merged.`;\n    }\n    return \"No subject candidates. Email is never auto-merged.\";\n  }\n  return `${summary}\\n\\n${report.plans.map(formatBillingImportPlan).join(\"\\n\\n\")}`;\n}\n","import { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n  importPolicyFromBillingConfig,\n  runBillingCustomerImportWithPostgres,\n} from \"../../../billing/import/assemble.ts\";\nimport {\n  createBillingImportDatabaseFromManager,\n  createBillingSqlExecutorFromManager,\n  listActiveBillingImportConnections,\n} from \"../../../billing/import/postgres.ts\";\nimport type { BillingImportRunReport } from \"../../../billing/import/types.ts\";\nimport { resolveBillingWebhookApplicationId } from \"../../../billing/ingestion/application-id.ts\";\nimport {\n  normalizeAthenaBillingIngestion,\n  signingSecretsFromWebhookConfig,\n} from \"../../../billing/ingestion/config.ts\";\nimport {\n  createPostgresBillingWebhookSecretStore,\n  rememberConnectionSigningSecretSet,\n  resolveBillingWebhookMasterKey,\n  signingSecretsForConnection,\n} from \"../../../billing/ingestion/secrets/index.ts\";\nimport {\n  attachEventIngressRuntime,\n  type EventIngressAttachHost,\n} from \"../../../billing/runtime/local/ingress/attach.ts\";\nimport {\n  classifyStuckBillingIngress,\n  replayBillingIngressBatch,\n} from \"../../../billing/runtime/local/ingress/replay.ts\";\nimport { createBillingProviderRegistry } from \"../../../billing/runtime/local/providers/create-registry.ts\";\nimport {\n  applyGeneratorProjectEnv,\n  findGeneratorConfigPath,\n  loadGeneratorConfig,\n} from \"../../../generator/config.ts\";\nimport type { ResolvedGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { resolveGeneratorDatabaseAuthority } from \"../../../generator/database-authority.ts\";\nimport { ATHENA_MIGRATE_COMMAND } from \"../../../migrations/commands.ts\";\nimport {\n  type AthenaPostgresRuntime,\n  createAthenaPostgresRuntime,\n} from \"../../../postgres/owned-runtime.ts\";\nimport { eventIngressDatabaseFromManager } from \"../../../runtime/ingress/postgres.ts\";\nimport type { EventIngressRuntime } from \"../../../runtime/ingress/runtime.ts\";\nimport { createSqlEventIngressPersistence } from \"../../../runtime/ingress/sql.ts\";\nimport type { AthenaBillingConfig } from \"../../../v3-client-core.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport type {\n  BillingIngressReplayCommand,\n  BillingReconcileSubjectsCommand,\n  BillingWebhooksCommand,\n} from \"../../types.ts\";\n\nexport interface ExecuteBillingReconcileSubjectsInput {\n  cwd: string;\n  parsed: BillingReconcileSubjectsCommand;\n}\n\nfunction readOptionalBillingFromUnknown(\n  value: unknown\n): AthenaBillingConfig | undefined {\n  if (value == null || typeof value !== \"object\") {\n    return;\n  }\n  const record = value as Record<string, unknown>;\n  if (record.billing != null && typeof record.billing === \"object\") {\n    return record.billing as AthenaBillingConfig;\n  }\n  if (record.default != null) {\n    return readOptionalBillingFromUnknown(record.default);\n  }\n  if (record.config != null) {\n    return readOptionalBillingFromUnknown(record.config);\n  }\n}\n\nasync function loadProjectBillingConfig(input: {\n  configPath?: string;\n  cwd: string;\n}): Promise<AthenaBillingConfig | undefined> {\n  const resolved = input.configPath\n    ? resolve(input.cwd, input.configPath)\n    : findGeneratorConfigPath(input.cwd);\n  if (!resolved) {\n    return;\n  }\n  const module = await import(\n    `${pathToFileURL(resolved).href}?cacheBust=${Date.now()}`\n  );\n  return readOptionalBillingFromUnknown(module);\n}\n\nasync function resolveBillingDatabaseAuthority(input: {\n  configPath?: string;\n  cwd: string;\n}): Promise<{\n  authority: ResolvedGeneratorDatabaseAuthority;\n  restoreEnv: () => void;\n}> {\n  const restoreEnv = applyGeneratorProjectEnv(input.cwd);\n  try {\n    const loaded = await loadGeneratorConfig({\n      applyProjectEnv: false,\n      configPath: input.configPath,\n      cwd: input.cwd,\n      restoreProjectEnv: false,\n    });\n    const authority = resolveGeneratorDatabaseAuthority({\n      applyProjectEnv: false,\n      cwd: input.cwd,\n      loaded,\n      mode: \"direct\",\n    });\n    return { authority, restoreEnv };\n  } catch (error) {\n    restoreEnv();\n    throw error;\n  }\n}\n\nasync function withCliPostgresRuntime<T>(\n  connectionString: string,\n  fn: (runtime: AthenaPostgresRuntime) => Promise<T>\n): Promise<T> {\n  const runtime = createAthenaPostgresRuntime({ connectionString });\n  try {\n    return await fn(runtime);\n  } finally {\n    await runtime.close();\n  }\n}\n\nexport async function executeBillingReconcileSubjects(\n  input: ExecuteBillingReconcileSubjectsInput\n): Promise<BillingImportRunReport> {\n  const cwd = input.cwd;\n  const { authority, restoreEnv } = await resolveBillingDatabaseAuthority({\n    configPath: input.parsed.configPath,\n    cwd,\n  });\n  try {\n    const provider = authority.provider;\n    if (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: `Use the same athena.config.ts / DATABASE_URL that \\`${ATHENA_MIGRATE_COMMAND}\\` uses.`,\n        message: `billing reconcile-subjects requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n      });\n    }\n    if (!provider.connectionString) {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n        message: \"billing reconcile-subjects requires a reachable database.\",\n      });\n    }\n    const billing = await loadProjectBillingConfig({\n      configPath: input.parsed.configPath,\n      cwd,\n    });\n    return await withCliPostgresRuntime(\n      provider.connectionString,\n      async (runtime) => {\n        const manager = await runtime.getPoolManager();\n        const sql = createBillingSqlExecutorFromManager(manager);\n        return runBillingCustomerImportWithPostgres({\n          configuredProviders: billing?.providers,\n          connectionId: input.parsed.connectionId,\n          cursor: input.parsed.cursor,\n          customerId: input.parsed.customerId,\n          database: createBillingImportDatabaseFromManager(manager),\n          dryRun: input.parsed.dryRun,\n          includeAmbiguous: input.parsed.includeAmbiguous,\n          limit: input.parsed.limit,\n          limits: {\n            maxCustomers: input.parsed.maxCustomers,\n            maxDurationMs: input.parsed.maxDurationMs,\n            maxPages: input.parsed.maxPages,\n            pageSize: input.parsed.limit,\n          },\n          policy: importPolicyFromBillingConfig(billing),\n          provider: input.parsed.provider,\n          sql,\n          subjectId: input.parsed.subjectId,\n          testMode: billing?.testMode,\n          trigger: \"manual\",\n        });\n      }\n    );\n  } finally {\n    restoreEnv();\n  }\n}\n\nexport interface ExecuteBillingWebhooksInput {\n  cwd: string;\n  parsed: BillingWebhooksCommand;\n}\n\nexport async function executeBillingWebhooks(\n  input: ExecuteBillingWebhooksInput\n): Promise<Record<string, unknown>> {\n  const restoreEnv = applyGeneratorProjectEnv(input.cwd);\n  try {\n    const billing = await loadProjectBillingConfig({\n      configPath: input.parsed.configPath,\n      cwd: input.cwd,\n    });\n    const { normalizeAthenaBillingIngestion } = await import(\n      \"../../../billing/ingestion/config.ts\"\n    );\n    const { resolveBillingIngressEndpoints } = await import(\n      \"../../../billing/ingestion/urls.ts\"\n    );\n    const ingestion = normalizeAthenaBillingIngestion(billing?.ingestion);\n    const endpoints = resolveBillingIngressEndpoints({\n      appUrl: undefined,\n      publicBaseUrl: ingestion.webhooks.publicBaseUrl,\n    });\n    if (input.parsed.action !== \"reconcile\" || input.parsed.dryRun) {\n      return {\n        action: input.parsed.action,\n        classicUrl: endpoints?.classicUrl,\n        connectionId: input.parsed.connectionId,\n        dryRun: input.parsed.dryRun,\n        eventsUrl: endpoints?.eventsUrl,\n        management: ingestion.webhooks.management,\n        provider: input.parsed.provider ?? \"mollie\",\n      };\n    }\n    const loaded = await loadGeneratorConfig({\n      applyProjectEnv: false,\n      configPath: input.parsed.configPath,\n      cwd: input.cwd,\n      restoreProjectEnv: false,\n    });\n    const authority = resolveGeneratorDatabaseAuthority({\n      applyProjectEnv: false,\n      cwd: input.cwd,\n      loaded,\n      mode: \"direct\",\n    });\n    const provider = authority.provider;\n    if (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: `Use the same athena.config.ts / DATABASE_URL that \\`${ATHENA_MIGRATE_COMMAND}\\` uses.`,\n        message: `billing webhooks requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n      });\n    }\n    if (!provider.connectionString) {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n        message: \"billing webhooks requires a reachable database.\",\n      });\n    }\n    return await withCliPostgresRuntime(\n      provider.connectionString,\n      async (runtime) => {\n        const manager = await runtime.getPoolManager();\n        const sql = createBillingSqlExecutorFromManager(manager);\n        const { runAutomaticBillingWebhookReconcileIfEnabled } = await import(\n          \"../../../billing/ingestion/automatic.ts\"\n        );\n        const applicationId = resolveBillingWebhookApplicationId({\n          client: process.env.ATHENA_CLIENT,\n        });\n        if (applicationId == null) {\n          throw new AthenaCliError({\n            code: \"BILLING001\",\n            exitCode: CliExitCode.Runtime,\n            hint: \"Set ATHENA_CLIENT or createClient({ app: { id } }). Do not use a display name.\",\n            message:\n              \"billing webhooks reconcile requires a stable application id (ATHENA_CLIENT).\",\n          });\n        }\n        await runAutomaticBillingWebhookReconcileIfEnabled({\n          applicationId,\n          appUrl: ingestion.webhooks.publicBaseUrl,\n          configuredProviders: billing?.providers,\n          sql,\n          testMode: billing?.testMode,\n          trigger: \"manual\",\n          webhooks: ingestion.webhooks,\n        });\n        return {\n          action: \"reconcile\",\n          connectionId: input.parsed.connectionId,\n          dryRun: false,\n          provider: input.parsed.provider ?? \"mollie\",\n        };\n      }\n    );\n  } finally {\n    restoreEnv();\n  }\n}\n\nexport interface ExecuteBillingIngressReplayInput {\n  cwd: string;\n  parsed: BillingIngressReplayCommand;\n}\n\nexport async function executeBillingIngressReplay(\n  input: ExecuteBillingIngressReplayInput\n): Promise<Record<string, unknown>> {\n  const cwd = input.cwd;\n  const { authority, restoreEnv } = await resolveBillingDatabaseAuthority({\n    configPath: input.parsed.configPath,\n    cwd,\n  });\n  try {\n    const provider = authority.provider;\n    if (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: `Use the same athena.config.ts / DATABASE_URL that \\`${ATHENA_MIGRATE_COMMAND}\\` uses.`,\n        message: `billing ingress replay requires postgres/direct (got ${provider.kind}/${provider.mode}).`,\n      });\n    }\n    if (!provider.connectionString) {\n      throw new AthenaCliError({\n        code: \"BILLING001\",\n        exitCode: CliExitCode.Runtime,\n        hint: \"Set DATABASE_URL or provider.connectionString, then retry.\",\n        message: \"billing ingress replay requires a reachable database.\",\n      });\n    }\n    const billing = await loadProjectBillingConfig({\n      configPath: input.parsed.configPath,\n      cwd,\n    });\n    return await withCliPostgresRuntime(\n      provider.connectionString,\n      async (runtime) => {\n        const manager = await runtime.getPoolManager();\n        const database = eventIngressDatabaseFromManager(manager);\n        const persistence = createSqlEventIngressPersistence();\n        const classified = await classifyStuckBillingIngress({\n          database,\n          dryRun: input.parsed.dryRun,\n          limit: input.parsed.limit,\n          persistence,\n        });\n        if (input.parsed.dryRun || input.parsed.classifyOnly) {\n          return {\n            action: \"classify\",\n            ...classified,\n            dryRun: input.parsed.dryRun,\n          };\n        }\n        const sql = createBillingSqlExecutorFromManager(manager);\n        const ingestion = normalizeAthenaBillingIngestion(billing?.ingestion);\n        const secretCache = new Map<string, string[]>();\n        const masterKey = resolveBillingWebhookMasterKey({\n          configured: ingestion.webhooks.secretMasterKey,\n          databaseUrl: provider.connectionString,\n        });\n        if (masterKey) {\n          const secretStore = createPostgresBillingWebhookSecretStore({\n            masterKey,\n            sql,\n          });\n          try {\n            const connections = await listActiveBillingImportConnections(\n              sql,\n              \"mollie\"\n            );\n            for (const connection of connections) {\n              try {\n                rememberConnectionSigningSecretSet(\n                  secretCache,\n                  connection.id,\n                  await secretStore.resolve(connection.id)\n                );\n              } catch {\n                /* secrets table may be missing until billing 0015 */\n              }\n            }\n            if (connections.length === 1) {\n              const only = connections[0];\n              if (only) {\n                rememberConnectionSigningSecretSet(\n                  secretCache,\n                  only.id,\n                  signingSecretsFromWebhookConfig(ingestion.webhooks)\n                );\n              }\n            }\n          } catch {\n            /* connection list is optional for classify-only paths */\n          }\n        }\n        const internals: EventIngressAttachHost = {\n          postgresRuntime: runtime,\n        };\n        attachEventIngressRuntime(internals, {\n          configuredProviders: billing?.providers,\n          registry: createBillingProviderRegistry(\n            billing?.providers,\n            billing?.catalog\n          ),\n          resolveSigningSecrets: (connectionId) =>\n            signingSecretsForConnection(secretCache, connectionId),\n          testMode: billing?.testMode,\n        });\n        const eventRuntime =\n          internals.eventIngressRuntime as EventIngressRuntime;\n        const replayed = await replayBillingIngressBatch({\n          database,\n          limit: input.parsed.limit,\n          persistence,\n          runtime: eventRuntime,\n        });\n        return {\n          action: \"replay\",\n          classified,\n          replayed,\n        };\n      }\n    );\n  } finally {\n    restoreEnv();\n  }\n}\n","import type { AthenaPostgresPool } from \"../../postgres/driver.ts\";\nimport type { AthenaBillingConfig } from \"../create-client-config.ts\";\nimport {\n  ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n  AthenaBillingCredentialError,\n} from \"../errors.ts\";\nimport { createPostgresBillingAuditWriter } from \"../observability/audit.ts\";\nimport { normalizeAthenaBillingObservability } from \"../observability/config.ts\";\nimport {\n  createDisabledBillingTraceRecorder,\n  createPostgresBillingTraceRecorder,\n} from \"../observability/traces.ts\";\nimport type { NormalizedAthenaBillingObservability } from \"../observability/types.ts\";\nimport type { BillingProviderConfigMap } from \"../providers/types.ts\";\nimport {\n  mintManualBillingReconciliationContext,\n  mintScheduledBillingReconciliationContext,\n  reconcileBillingCustomer,\n  reconcileBillingCustomers,\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  billingConnectionHasConfiguredCredential,\n  billingConnectionMatchesProcessTestMode,\n  createConnectionProviderExecutionContext,\n  firstConfiguredMollieProvider,\n  mollieConfigForCredentialReference,\n  parseBillingCredentialReference,\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 type { BillingImportDatabase } from \"./database.ts\";\nimport { runBillingCustomerImportPage } from \"./importer.ts\";\nimport {\n  createPostgresBillingImportBindingStore,\n  createPostgresBillingImportCursorStore,\n  createPostgresBillingImportDocumentStore,\n  createPostgresBillingSubjectDirectory,\n  listActiveBillingImportConnections,\n  resolveBillingImportConnection,\n} from \"./postgres.ts\";\nimport { createMollieBillingCustomerImportPort } from \"./providers/mollie.ts\";\nimport {\n  type BillingImportPolicy,\n  type BillingImportRunReport,\n  DEFAULT_BILLING_IMPORT_POLICY,\n} from \"./types.ts\";\n\nexport function importPolicyFromBillingConfig(\n  billing?: AthenaBillingConfig\n): BillingImportPolicy {\n  return {\n    allowSecondaryBindings:\n      DEFAULT_BILLING_IMPORT_POLICY.allowSecondaryBindings,\n    allowUniqueEmailAutoBind:\n      billing?.import?.customers?.allowUniqueEmailAutoBind === true,\n  };\n}\n\nfunction isDefaultMollieCredentialReference(reference: string): boolean {\n  try {\n    const parsed = parseBillingCredentialReference(reference);\n    return parsed.provider === \"mollie\" && parsed.accountId == null;\n  } catch {\n    return false;\n  }\n}\n\nfunction mollieConfigFromProviders(\n  configured?: BillingProviderConfigMap\n): import(\"../providers/types.ts\").MollieBillingProviderConfig | undefined {\n  return firstConfiguredMollieProvider(configured);\n}\n\nfunction toImportReport(\n  result: Awaited<ReturnType<typeof reconcileBillingCustomers>>\n): BillingImportRunReport {\n  return {\n    bindingsActivated: result.bindingsActivated,\n    bindingsCreated: result.bindingsCreated,\n    conflicts: result.conflicts,\n    connectionId: result.connectionId,\n    correlationId: result.correlationId,\n    cursorAfter: result.cursorAfter,\n    cursorBefore: result.cursorBefore,\n    customersScanned: result.customersScanned,\n    dryRun: result.dryRun,\n    environment: result.environment,\n    errors: result.errors,\n    hasMore: result.hasMore,\n    pagesProcessed: result.pagesProcessed,\n    plans: result.plans,\n    provider: result.provider,\n    runId: result.runId,\n    skipped: result.skipped,\n    status: result.status,\n    traceId: result.traceId,\n  };\n}\n\nexport async function runBillingCustomerImportWithPostgres(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId?: string;\n  cursor?: string;\n  customerId?: string;\n  database?: BillingImportDatabase;\n  dryRun: boolean;\n  includeAmbiguous?: boolean;\n  limit?: number;\n  limits?: Partial<BillingReconciliationLimits>;\n  policy?: BillingImportPolicy;\n  pool?: AthenaPostgresPool;\n  provider?: string;\n  sql: BillingSqlExecutor;\n  subjectId?: string;\n  testMode?: boolean;\n  trigger?: \"bootstrap\" | \"manual\" | \"scheduled\" | \"webhook\";\n  observability?: NormalizedAthenaBillingObservability;\n  reconciliationContext?: import(\"../observability/types.ts\").BillingReconciliationContext;\n}): Promise<BillingImportRunReport> {\n  const connection = await resolveBillingImportConnection(input.sql, {\n    connectionId: input.connectionId,\n    provider: input.provider,\n  });\n  if (input.testMode !== undefined && input.testMode !== connection.testMode) {\n    throw new AthenaBillingCredentialError({\n      code: ATHENA_BILLING_CREDENTIAL_ENVIRONMENT_MISMATCH,\n      environment: connection.environment,\n      message:\n        \"billing.testMode does not match billing_provider_connections.environment.\",\n      provider: connection.provider,\n    });\n  }\n  const providerName = (input.provider ?? connection.provider)\n    .trim()\n    .toLowerCase();\n  if (providerName !== \"mollie\") {\n    throw new Error(\n      `Billing customer import supports Mollie in this slice (got \"${providerName}\").`\n    );\n  }\n  const mollie =\n    mollieConfigForCredentialReference(\n      input.configuredProviders,\n      connection.credentialReference\n    ) ??\n    (isDefaultMollieCredentialReference(connection.credentialReference)\n      ? mollieConfigFromProviders(input.configuredProviders)\n      : undefined);\n  if (mollie == null) {\n    throw new Error(\n      `Mollie is not configured for credential_reference \"${connection.credentialReference}\". Set billing.providers.mollie or billing.providers.mollieAccounts.`\n    );\n  }\n  const normalized = normalizeMollieRuntimeConfig(mollie);\n  const pool = new MollieSdkClientPool(normalized);\n  const execution = createConnectionProviderExecutionContext({\n    configuredProviders: {\n      ...input.configuredProviders,\n      mollie,\n    },\n    connection,\n    operationScope: \"organization\",\n  });\n  const discovery = createMollieBillingCustomerImportPort({\n    connection,\n    context: execution,\n    pool,\n  });\n  const policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n  const observability =\n    input.observability ?? normalizeAthenaBillingObservability();\n  const traces = observability.traces.enabled\n    ? createPostgresBillingTraceRecorder(\n        input.sql,\n        observability.traces.sampleRate\n      )\n    : createDisabledBillingTraceRecorder();\n  const semanticAudit =\n    input.dryRun || observability.auditLog === false\n      ? undefined\n      : createPostgresBillingAuditWriter(input.sql);\n  const context =\n    input.reconciliationContext ??\n    (input.trigger === \"scheduled\"\n      ? mintScheduledBillingReconciliationContext({\n          connectionId: connection.id,\n          provider: connection.provider,\n          schedulerExecutionId: crypto.randomUUID(),\n        })\n      : mintManualBillingReconciliationContext({\n          connectionId: connection.id,\n          provider: connection.provider,\n          trigger: input.trigger === \"bootstrap\" ? \"bootstrap\" : \"manual\",\n        }));\n  const limits = resolveBillingReconciliationLimits({\n    maxCustomers: input.limits?.maxCustomers,\n    maxDurationMs: input.limits?.maxDurationMs,\n    maxPages: input.limits?.maxPages,\n    pageSize: input.limit ?? input.limits?.pageSize,\n  });\n  const result =\n    input.customerId === null\n      ? await reconcileBillingCustomers({\n          audit: input.dryRun\n            ? undefined\n            : createPostgresBillingImportAuditStore(input.sql),\n          connection,\n          context,\n          cursors: createPostgresBillingImportCursorStore(input.sql),\n          dryRun: input.dryRun,\n          lease: input.dryRun\n            ? undefined\n            : createPostgresBillingReconciliationLeaseStore(input.sql),\n          limits,\n          rootSql: input.sql,\n          runPage: ({ cursor, limit, sql }) =>\n            runBillingCustomerImportPage({\n              audit: input.dryRun\n                ? undefined\n                : createPostgresBillingImportAuditStore(sql),\n              bindings: createPostgresBillingImportBindingStore(sql),\n              connectionId: connection.id,\n              context,\n              cursor: cursor ?? undefined,\n              cursors: createPostgresBillingImportCursorStore(sql),\n              directory: createPostgresBillingSubjectDirectory(sql),\n              discovery,\n              documents: createPostgresBillingImportDocumentStore(sql),\n              dryRun: input.dryRun,\n              includeAmbiguous: input.includeAmbiguous,\n              limit,\n              policy,\n              provider: connection.provider,\n              semanticAudit:\n                semanticAudit === null\n                  ? undefined\n                  : createPostgresBillingAuditWriter(sql),\n              subjectId: input.subjectId,\n            }),\n          semanticAudit,\n          traces,\n        })\n      : await reconcileBillingCustomer({\n          connection,\n          context,\n          dryRun: input.dryRun,\n          lease: input.dryRun\n            ? undefined\n            : createPostgresBillingReconciliationLeaseStore(input.sql),\n          rootSql: input.sql,\n          runTargetedPage: (sql) =>\n            runBillingCustomerImportPage({\n              audit: input.dryRun\n                ? undefined\n                : createPostgresBillingImportAuditStore(sql),\n              bindings: createPostgresBillingImportBindingStore(sql),\n              connectionId: connection.id,\n              context,\n              cursors: createPostgresBillingImportCursorStore(sql),\n              customerId: input.customerId,\n              directory: createPostgresBillingSubjectDirectory(sql),\n              discovery,\n              documents: createPostgresBillingImportDocumentStore(sql),\n              dryRun: input.dryRun,\n              includeAmbiguous: input.includeAmbiguous,\n              limit: limits.pageSize,\n              policy,\n              provider: connection.provider,\n              semanticAudit:\n                semanticAudit === null\n                  ? undefined\n                  : createPostgresBillingAuditWriter(sql),\n              skipCursorAdvance: true,\n              subjectId: input.subjectId,\n            }),\n          semanticAudit,\n          traces,\n        });\n  return toImportReport(result);\n}\n\nconst warnedSkippedImportConnections = new Set<string>();\n\nexport async function runAutomaticBillingCustomerImportIfEnabled(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  customerImport?: AthenaBillingConfig[\"import\"];\n  database?: BillingImportDatabase;\n  observability?: NormalizedAthenaBillingObservability;\n  pool?: AthenaPostgresPool;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n  trigger?: \"bootstrap\" | \"scheduled\";\n}): Promise<readonly BillingImportRunReport[]> {\n  if (\n    !shouldAutomaticallyImportBillingCustomers(input.customerImport?.customers)\n  ) {\n    return [];\n  }\n  const connections = await listActiveBillingImportConnections(\n    input.sql,\n    \"mollie\"\n  );\n  const reports: BillingImportRunReport[] = [];\n  const policy = importPolicyFromBillingConfig({\n    import: input.customerImport,\n  });\n  const limits = input.customerImport?.customers?.limits;\n  for (const connection of connections) {\n    if (\n      !billingConnectionMatchesProcessTestMode(\n        connection.testMode,\n        input.testMode\n      )\n    ) {\n      const skipKey = `env:${connection.id}`;\n      if (!warnedSkippedImportConnections.has(skipKey)) {\n        warnedSkippedImportConnections.add(skipKey);\n        console.warn(\n          \"[athena-billing] skipping customer import; connection environment does not match process billing.testMode\",\n          {\n            connectionId: connection.id,\n            environment: connection.environment,\n            processTestMode: resolveBillingEnvironment({\n              testMode: input.testMode,\n            }).testMode,\n          }\n        );\n      }\n      continue;\n    }\n    if (\n      !billingConnectionHasConfiguredCredential({\n        configuredProviders: input.configuredProviders,\n        connection,\n      })\n    ) {\n      const skipKey = `cred:${connection.id}`;\n      if (!warnedSkippedImportConnections.has(skipKey)) {\n        warnedSkippedImportConnections.add(skipKey);\n        console.warn(\n          \"[athena-billing] skipping customer import; connection environment has no configured credential\",\n          {\n            connectionId: connection.id,\n            environment: connection.environment,\n          }\n        );\n      }\n      continue;\n    }\n    reports.push(\n      await runBillingCustomerImportWithPostgres({\n        configuredProviders: input.configuredProviders,\n        connectionId: connection.id,\n        database: input.database,\n        dryRun: false,\n        limits,\n        observability: input.observability,\n        policy,\n        pool: input.pool,\n        provider: \"mollie\",\n        sql: input.sql,\n        testMode: connection.testMode,\n        trigger: input.trigger ?? \"bootstrap\",\n      })\n    );\n  }\n  return reports;\n}\n","export {\n  currentBillingReconciliationContext,\n  inheritWebhookBillingReconciliationContext,\n  mintManualBillingReconciliationContext,\n  mintScheduledBillingReconciliationContext,\n  runWithBillingReconciliationContext,\n} from \"./context.ts\";\nexport {\n  reconcileBillingCustomer,\n  reconcileBillingCustomers,\n} from \"./coordinator.ts\";\nexport {\n  BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n  BILLING_RECONCILIATION_RESOURCE_WEBHOOK_REGISTRATIONS,\n  type BillingReconciliationLeaseStore,\n  createMemoryBillingReconciliationLeaseStore,\n} from \"./lease.ts\";\nexport {\n  reconciliationBudgetExhausted,\n  resolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nexport { BILLING_RECONCILIATION_RESOURCE_KINDS } from \"./resources.ts\";\nexport {\n  AthenaBillingReconciliationError,\n  billingReconciliationBackoff,\n  classifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nexport {\n  type BillingImportExecutionMode,\n  registerBillingReconciliationScheduler,\n} from \"./scheduler.ts\";\nexport {\n  type BillingImportPageResult,\n  type BillingImportRunStatus,\n  type BillingReconciliationFailureKind,\n  type BillingReconciliationLimits,\n  type BillingReconciliationRunResult,\n  DEFAULT_BILLING_RECONCILIATION_LIMITS,\n  type ResolvedBillingProviderConnection,\n} from \"./types.ts\";\nexport { billingReconciliationContextFromIngress } from \"./webhook.ts\";\n","import type { BillingImportCursorStore } from \"../import/apply.ts\";\nimport type { BillingImportAuditStore } from \"../import/audit.ts\";\nimport type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type { AthenaBillingTraceRecorder } from \"../observability/traces.ts\";\nimport { runWithBillingTrace } from \"../observability/traces.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport { runWithBillingReconciliationContext } from \"./context.ts\";\nimport type { BillingReconciliationLeaseStore } from \"./lease.ts\";\nimport {\n  BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n  billingReconciliationLeaseTtlMs,\n} from \"./lease.ts\";\nimport {\n  reconciliationBudgetExhausted,\n  resolveBillingReconciliationLimits,\n} from \"./policy.ts\";\nimport { BILLING_RECONCILIATION_RESOURCE_KINDS } from \"./resources.ts\";\nimport {\n  AthenaBillingReconciliationError,\n  classifyBillingReconciliationFailure,\n} from \"./retry.ts\";\nimport { emitBillingAuditFailure } from \"./semantic-audit.ts\";\nimport type {\n  BillingImportPageResult,\n  BillingImportRunStatus,\n  BillingReconciliationLimits,\n  BillingReconciliationRunResult,\n  ResolvedBillingProviderConnection,\n} from \"./types.ts\";\n\nexport interface ReconcileBillingCustomersInput {\n  audit?: BillingImportAuditStore;\n  connection: ResolvedBillingProviderConnection;\n  context: BillingReconciliationContext;\n  cursors?: BillingImportCursorStore;\n  dryRun?: boolean;\n  lease?: BillingReconciliationLeaseStore;\n  limits?: Partial<BillingReconciliationLimits>;\n  ownerId?: string;\n  rootSql: BillingSqlExecutor;\n  runPage: (input: {\n    cursor: string | null;\n    limit: number;\n    sql: BillingSqlExecutor;\n  }) => Promise<BillingImportPageResult>;\n  semanticAudit?: AthenaBillingAuditWriter;\n  traces?: AthenaBillingTraceRecorder;\n  transaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}\n\nexport async function reconcileBillingCustomers(\n  input: ReconcileBillingCustomersInput\n): Promise<BillingReconciliationRunResult> {\n  const limits = resolveBillingReconciliationLimits(input.limits);\n  const dryRun = input.dryRun === true;\n  const ownerId = input.ownerId ?? crypto.randomUUID();\n  const startedMs = performance.now();\n  const cursorBefore = (await input.cursors?.get(input.connection.id)) ?? null;\n  const trace = input.traces?.start({\n    causationId: input.context.causationId,\n    connectionId: input.connection.id,\n    correlationId: input.context.correlationId,\n    operation: \"customer.reconcile\",\n    provider: input.connection.provider,\n    traceId: input.context.traceId,\n    trigger: input.context.trigger,\n  });\n\n  const run = async (): Promise<BillingReconciliationRunResult> => {\n    let leaseEpoch: number | undefined;\n    if (!dryRun && input.lease) {\n      const leasePhase = trace?.phase(\"lease\");\n      const acquired = await input.lease.acquire({\n        connectionId: input.connection.id,\n        ownerId,\n        resourceKind:\n          BILLING_RECONCILIATION_RESOURCE_KINDS.find(\n            (kind) => kind === BILLING_RECONCILIATION_RESOURCE_CUSTOMERS\n          ) ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n        ttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n      });\n      leasePhase?.finish();\n      if (!acquired) {\n        throw new AthenaBillingReconciliationError({\n          kind: \"lease_lost\",\n          message: \"Another reconciler holds the customers lease.\",\n        });\n      }\n      leaseEpoch = acquired.epoch;\n    }\n\n    let runId: string | undefined;\n    if (!dryRun && input.audit) {\n      const started = await input.audit.startRun({\n        causationId: input.context.causationId,\n        connectionId: input.connection.id,\n        correlationId: input.context.correlationId,\n        cursorBefore,\n        provider: input.connection.provider,\n        status: \"running\",\n        traceId: input.context.traceId,\n        trigger: input.context.trigger,\n      });\n      runId = started.id;\n    }\n\n    let pagesProcessed = 0;\n    let customersScanned = 0;\n    let bindingsCreated = 0;\n    let bindingsActivated = 0;\n    let conflicts = 0;\n    let skipped = 0;\n    let cursor = cursorBefore;\n    let cursorAfter = cursorBefore;\n    let hasMore = true;\n    const plans: BillingImportPageResult[\"plans\"][number][] = [];\n    let status: BillingImportRunStatus = \"running\";\n\n    try {\n      while (hasMore) {\n        if (\n          pagesProcessed > 0 &&\n          reconciliationBudgetExhausted({\n            customersScanned,\n            elapsedMs: performance.now() - startedMs,\n            limits,\n            pagesProcessed,\n          })\n        ) {\n          status = \"checkpointed\";\n          hasMore = true;\n          break;\n        }\n\n        const runOnce = async (sql: BillingSqlExecutor) => {\n          if (!dryRun && input.lease) {\n            const held = await input.lease.heartbeat({\n              connectionId: input.connection.id,\n              ...(leaseEpoch === null ? {} : { epoch: leaseEpoch }),\n              ownerId,\n              resourceKind:\n                BILLING_RECONCILIATION_RESOURCE_KINDS.find(\n                  (kind) => kind === BILLING_RECONCILIATION_RESOURCE_CUSTOMERS\n                ) ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n              ttlMs: billingReconciliationLeaseTtlMs(limits.maxDurationMs),\n            });\n            if (!held) {\n              throw new AthenaBillingReconciliationError({\n                kind: \"lease_lost\",\n                message: \"Reconciliation lease was lost.\",\n              });\n            }\n          }\n          return input.runPage({\n            cursor,\n            limit: limits.pageSize,\n            sql,\n          });\n        };\n        const page = input.transaction\n          ? await input.transaction(runOnce)\n          : await runOnce(input.rootSql);\n\n        pagesProcessed += 1;\n        customersScanned += page.customersScanned;\n        bindingsCreated += page.bindingsCreated;\n        bindingsActivated += page.bindingsActivated;\n        conflicts += page.conflicts;\n        skipped += page.skipped;\n        plans.push(...page.plans);\n        cursor = page.cursorAfter;\n        cursorAfter = page.cursorAfter;\n        hasMore = page.hasMore;\n        trace?.setCounters({ customersScanned, pagesProcessed });\n\n        if (!hasMore) {\n          status = conflicts > 0 ? \"completed_with_conflicts\" : \"completed\";\n          break;\n        }\n        if (\n          reconciliationBudgetExhausted({\n            customersScanned,\n            elapsedMs: performance.now() - startedMs,\n            limits,\n            pagesProcessed,\n          })\n        ) {\n          status = \"checkpointed\";\n          break;\n        }\n      }\n\n      const result: BillingReconciliationRunResult = {\n        bindingsActivated,\n        bindingsCreated,\n        conflicts,\n        connectionId: input.connection.id,\n        correlationId: input.context.correlationId,\n        cursorAfter,\n        cursorBefore,\n        customersScanned,\n        dryRun,\n        environment: input.connection.environment,\n        errors: 0,\n        hasMore: status === \"checkpointed\" ? true : hasMore,\n        pagesProcessed,\n        plans,\n        provider: input.connection.provider,\n        runId,\n        skipped,\n        status: dryRun ? \"dry_run\" : status,\n        traceId: input.context.traceId,\n      };\n      if (!dryRun && input.audit && runId) {\n        await input.audit.completeRun({\n          id: runId,\n          report: {\n            bindingsActivated,\n            bindingsCreated,\n            conflicts,\n            connectionId: input.connection.id,\n            correlationId: input.context.correlationId,\n            cursorAfter,\n            cursorBefore,\n            customersScanned,\n            dryRun,\n            errors: 0,\n            hasMore: result.hasMore,\n            pagesProcessed,\n            plans,\n            runId,\n            skipped,\n            status: result.status,\n            traceId: input.context.traceId,\n          },\n        });\n      }\n      try {\n        await trace?.success();\n      } catch (error) {\n        console.error(\"[athena-billing] trace persistence failed\", {\n          error: error instanceof Error ? error.message : String(error),\n          traceId: input.context.traceId,\n        });\n      }\n      return result;\n    } catch (error) {\n      if (!dryRun && input.audit && runId) {\n        const message =\n          error instanceof Error ? error.message : \"reconciliation failed\";\n        await input.audit.failRun({ error: message, id: runId });\n      }\n      if (!dryRun && input.semanticAudit) {\n        try {\n          await emitBillingAuditFailure({\n            context: input.context,\n            error,\n            writer: input.semanticAudit,\n          });\n        } catch (auditError) {\n          console.error(\"[athena-billing] failure audit persistence failed\", {\n            error:\n              auditError instanceof Error\n                ? auditError.message\n                : String(auditError),\n            traceId: input.context.traceId,\n          });\n        }\n      }\n      const kind = classifyBillingReconciliationFailure(error);\n      await trace?.failure(error, kind === \"lease_lost\" ? \"lease\" : \"apply\");\n      throw error;\n    } finally {\n      if (!dryRun && input.lease) {\n        await input.lease.release({\n          connectionId: input.connection.id,\n          ownerId,\n          resourceKind:\n            BILLING_RECONCILIATION_RESOURCE_KINDS.find(\n              (kind) => kind === BILLING_RECONCILIATION_RESOURCE_CUSTOMERS\n            ) ?? BILLING_RECONCILIATION_RESOURCE_CUSTOMERS,\n        });\n      }\n    }\n  };\n\n  return runWithBillingReconciliationContext(input.context, () =>\n    trace ? runWithBillingTrace(trace, run) : run()\n  );\n}\n\nexport async function reconcileBillingCustomer(input: {\n  connection: ResolvedBillingProviderConnection;\n  context: BillingReconciliationContext;\n  dryRun?: boolean;\n  lease?: BillingReconciliationLeaseStore;\n  runTargetedPage: (\n    sql: BillingSqlExecutor\n  ) => Promise<BillingImportPageResult>;\n  rootSql: BillingSqlExecutor;\n  semanticAudit?: AthenaBillingAuditWriter;\n  traces?: AthenaBillingTraceRecorder;\n  transaction?: <T>(fn: (tx: BillingSqlExecutor) => Promise<T>) => Promise<T>;\n}): Promise<BillingReconciliationRunResult> {\n  return reconcileBillingCustomers({\n    connection: input.connection,\n    context: input.context,\n    dryRun: input.dryRun,\n    lease: input.lease,\n    limits: {\n      maxCustomers: 1,\n      maxDurationMs: 30_000,\n      maxPages: 1,\n      pageSize: 1,\n    },\n    rootSql: input.rootSql,\n    runPage: async ({ sql }) => input.runTargetedPage(sql),\n    semanticAudit: input.semanticAudit,\n    traces: input.traces,\n    transaction: input.transaction,\n  });\n}\n","import type { BillingReconciliationLimits } from \"./types.ts\";\nimport { DEFAULT_BILLING_RECONCILIATION_LIMITS } from \"./types.ts\";\n\nexport function resolveBillingReconciliationLimits(\n  input?: Partial<BillingReconciliationLimits>\n): BillingReconciliationLimits {\n  return {\n    maxCustomers:\n      input?.maxCustomers ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxCustomers,\n    maxDurationMs:\n      input?.maxDurationMs ??\n      DEFAULT_BILLING_RECONCILIATION_LIMITS.maxDurationMs,\n    maxPages: input?.maxPages ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.maxPages,\n    pageSize: input?.pageSize ?? DEFAULT_BILLING_RECONCILIATION_LIMITS.pageSize,\n  };\n}\n\nexport function reconciliationBudgetExhausted(input: {\n  customersScanned: number;\n  elapsedMs: number;\n  limits: BillingReconciliationLimits;\n  pagesProcessed: number;\n}): boolean {\n  return (\n    input.pagesProcessed >= input.limits.maxPages ||\n    input.customersScanned >= input.limits.maxCustomers ||\n    input.elapsedMs >= input.limits.maxDurationMs\n  );\n}\n","export type BillingImportRunStatus =\n  | \"cancelled\"\n  | \"checkpointed\"\n  | \"completed\"\n  | \"completed_with_conflicts\"\n  | \"failed\"\n  | \"queued\"\n  | \"running\";\n\nexport type BillingReconciliationFailureKind =\n  | \"cursor_invalid\"\n  | \"database_unavailable\"\n  | \"internal\"\n  | \"lease_lost\"\n  | \"provider_auth_failed\"\n  | \"provider_rate_limited\"\n  | \"provider_unavailable\";\n\nexport interface BillingReconciliationLimits {\n  maxCustomers: number;\n  maxDurationMs: number;\n  maxPages: number;\n  pageSize: number;\n}\n\nexport const DEFAULT_BILLING_RECONCILIATION_LIMITS: BillingReconciliationLimits =\n  {\n    maxCustomers: 5000,\n    maxDurationMs: 120_000,\n    maxPages: 100,\n    pageSize: 100,\n  };\n\nexport interface ResolvedBillingProviderConnection {\n  accountReference: string;\n  credentialReference: string;\n  environment: \"live\" | \"test\";\n  id: string;\n  provider: string;\n  status: string;\n  testMode: boolean;\n  webhookIngressToken?: string;\n}\n\nexport interface BillingImportPageResult {\n  bindingsActivated: number;\n  bindingsCreated: number;\n  conflicts: number;\n  cursorAfter: string | null;\n  cursorBefore: string | null;\n  customersScanned: number;\n  hasMore: boolean;\n  plans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n  skipped: number;\n}\n\nexport interface BillingReconciliationRunResult {\n  bindingsActivated: number;\n  bindingsCreated: number;\n  conflicts: number;\n  connectionId: string;\n  correlationId: string;\n  cursorAfter: string | null;\n  cursorBefore: string | null;\n  customersScanned: number;\n  dryRun: boolean;\n  environment: \"live\" | \"test\";\n  errors: number;\n  hasMore: boolean;\n  pagesProcessed: number;\n  plans: readonly import(\"../import/types.ts\").BillingImportPlan[];\n  provider: string;\n  runId?: string;\n  skipped: number;\n  status: BillingImportRunStatus | \"dry_run\";\n  traceId: string;\n}\n\nexport interface BillingBackoffDecision {\n  delayMs: number;\n  kind: BillingReconciliationFailureKind;\n  retry: boolean;\n}\n","export const BILLING_RECONCILIATION_RESOURCE_KINDS = [\n  \"customers\",\n  \"payments\",\n  \"subscriptions\",\n  \"invoices\",\n  \"refunds\",\n  \"mandates\",\n  \"webhook_registrations\",\n] as const;\n\nexport type BillingReconciliationResourceKind =\n  (typeof BILLING_RECONCILIATION_RESOURCE_KINDS)[number];\n","import {\n  isAthenaBillingCredentialError,\n  isAthenaBillingProviderRequestError,\n} from \"../errors.ts\";\nimport {\n  ATHENA_BILLING_IMPORT_CURSOR_INVALID,\n  AthenaBillingImportError,\n} from \"../import/errors.ts\";\nimport type {\n  BillingBackoffDecision,\n  BillingReconciliationFailureKind,\n} from \"./types.ts\";\n\nexport class AthenaBillingReconciliationError extends Error {\n  readonly kind: BillingReconciliationFailureKind;\n  readonly retryAfterMs?: number;\n\n  constructor(input: {\n    kind: BillingReconciliationFailureKind;\n    message: string;\n    retryAfterMs?: number;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingReconciliationError\";\n    this.kind = input.kind;\n    this.retryAfterMs = input.retryAfterMs;\n  }\n}\n\nconst MAX_DELAY_MS = 60 * 60 * 1000;\nconst BASE_DELAY_MS = 60_000;\n\nexport function classifyBillingReconciliationFailure(\n  error: unknown\n): BillingReconciliationFailureKind {\n  if (error instanceof AthenaBillingReconciliationError) {\n    return error.kind;\n  }\n  if (error instanceof AthenaBillingImportError) {\n    if (error.code === ATHENA_BILLING_IMPORT_CURSOR_INVALID) {\n      return \"cursor_invalid\";\n    }\n    return \"provider_unavailable\";\n  }\n  if (isAthenaBillingCredentialError(error)) {\n    return \"provider_auth_failed\";\n  }\n  if (isAthenaBillingProviderRequestError(error)) {\n    if (error.status === 401 || error.status === 403) {\n      return \"provider_auth_failed\";\n    }\n    if (error.status === 429 || error.kind === \"rate_limited\") {\n      return \"provider_rate_limited\";\n    }\n    if (\n      error.kind === \"network\" ||\n      error.kind === \"timeout\" ||\n      error.kind === \"provider_unavailable\" ||\n      (typeof error.status === \"number\" && error.status >= 500)\n    ) {\n      return \"provider_unavailable\";\n    }\n    if (error.kind === \"authentication\" || error.kind === \"authorization\") {\n      return \"provider_auth_failed\";\n    }\n  }\n  if (error instanceof Error && \"code\" in error) {\n    const code = (error as { code?: unknown }).code;\n    if (\n      code === \"ECONNREFUSED\" ||\n      code === \"ECONNRESET\" ||\n      code === \"ENOTFOUND\" ||\n      code === \"ETIMEDOUT\" ||\n      code === \"EPIPE\"\n    ) {\n      return \"database_unavailable\";\n    }\n  }\n  return \"internal\";\n}\n\nexport function isTransientBillingReconciliationFailure(\n  kind: BillingReconciliationFailureKind\n): boolean {\n  return (\n    kind === \"provider_rate_limited\" ||\n    kind === \"provider_unavailable\" ||\n    kind === \"database_unavailable\"\n  );\n}\n\nexport function billingReconciliationBackoff(input: {\n  attempt: number;\n  error: unknown;\n  kind?: BillingReconciliationFailureKind;\n}): BillingBackoffDecision {\n  const kind = input.kind ?? classifyBillingReconciliationFailure(input.error);\n  const retry = isTransientBillingReconciliationFailure(kind);\n  if (!retry) {\n    return { delayMs: 0, kind, retry: false };\n  }\n  const retryAfter =\n    input.error instanceof AthenaBillingReconciliationError\n      ? input.error.retryAfterMs\n      : undefined;\n  const headerMs = readRetryAfterMs(input.error);\n  const exp = Math.min(\n    MAX_DELAY_MS,\n    BASE_DELAY_MS * 2 ** Math.max(0, input.attempt)\n  );\n  const jitter = Math.floor(Math.random() * Math.max(1000, exp * 0.2));\n  return {\n    delayMs: retryAfter ?? headerMs ?? Math.min(MAX_DELAY_MS, exp + jitter),\n    kind,\n    retry: true,\n  };\n}\n\nfunction readRetryAfterMs(error: unknown): number | undefined {\n  if (!error || typeof error !== \"object\") {\n    return;\n  }\n  const details = (error as { details?: unknown }).details;\n  if (!details || typeof details !== \"object\") {\n    return;\n  }\n  const retryAfter = (details as { retryAfter?: unknown }).retryAfter;\n  if (typeof retryAfter === \"number\" && Number.isFinite(retryAfter)) {\n    return Math.max(0, retryAfter * 1000);\n  }\n  if (typeof retryAfter === \"string\") {\n    const parsed = Number.parseInt(retryAfter, 10);\n    if (Number.isFinite(parsed)) {\n      return Math.max(0, parsed * 1000);\n    }\n  }\n}\n","import type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport { inheritWebhookBillingReconciliationContext } from \"./context.ts\";\n\nexport function billingReconciliationContextFromIngress(input: {\n  connectionId: string;\n  ingressId: string;\n  correlationId?: string;\n  provider: string;\n  traceId?: string;\n}): BillingReconciliationContext {\n  return inheritWebhookBillingReconciliationContext({\n    causationId: input.ingressId,\n    connectionId: input.connectionId,\n    correlationId: input.correlationId ?? input.ingressId,\n    provider: input.provider,\n    traceId: input.traceId ?? input.ingressId,\n  });\n}\n","import type {\n  MollieBillingProviderConfig,\n  NormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport { normalizeMollieBillingProviderConfig } from \"../config.ts\";\n\nfunction isNormalizedMollieConfig(\n  config: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig\n): config is NormalizedMollieBillingProviderConfig {\n  return \"provider\" in config && config.provider === \"mollie\";\n}\n\nexport function normalizeMollieRuntimeConfig(\n  config: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig\n): NormalizedMollieBillingProviderConfig {\n  if (isNormalizedMollieConfig(config)) {\n    return config;\n  }\n  return normalizeMollieBillingProviderConfig(config);\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  private readonly clients = new Map<string, MollieSdkClient>();\n\n  constructor(private readonly config: NormalizedMollieBillingProviderConfig) {}\n\n  apiBaseUrl(): string {\n    return this.config.apiBaseUrl;\n  }\n\n  private construct(options: MollieSdkClientOptions): MollieSdkClient {\n    const created =\n      this.config.adapter == null\n        ? new this.config.sdk(options)\n        : this.config.adapter(options);\n    return assertMollieSdkClient(created, \"mollie.sdk.construct\");\n  }\n\n  clientFor(input: {\n    credential: BillingResolvedCredential;\n    operationScope?: \"organization\" | \"profile\" | \"automatic\";\n    requestedProfileId?: string | null;\n  }): MollieSdkClient {\n    const options = mollieSdkClientOptions({\n      config: this.config,\n      credential: input.credential,\n      operationScope: input.operationScope,\n      requestedProfileId: input.requestedProfileId,\n    });\n    const key = mollieSdkClientKey({\n      credential: input.credential,\n      profileId: options.profileId,\n      serverURL: options.serverURL,\n    });\n    const existing = this.clients.get(key);\n    if (existing != null) {\n      return existing;\n    }\n    const created = this.construct(options);\n    this.clients.set(key, created);\n    return created;\n  }\n}\n\nexport function mollieSdkClientOptions(input: {\n  config: NormalizedMollieBillingProviderConfig;\n  credential: BillingResolvedCredential;\n  operationScope?: \"organization\" | \"profile\" | \"automatic\";\n  requestedProfileId?: string | null;\n}): MollieSdkClientOptions {\n  const secret = input.credential.revealForProviderRuntime();\n  const kind = input.config.credentialKind;\n  if (kind === \"api_key\") {\n    return {\n      security: { apiKey: secret },\n      serverURL: input.config.apiBaseUrl,\n    };\n  }\n  const security =\n    kind === \"advanced_access_token\"\n      ? { advancedAccessToken: secret }\n      : { oAuth: secret };\n  const scope = input.operationScope ?? \"automatic\";\n  const profileId =\n    scope === \"organization\"\n      ? undefined\n      : resolveMollieRequestProfileId({\n          configuredProfileId:\n            input.config.profileId ?? input.config.defaultProfileId,\n          credentialKind: kind,\n          requestedProfileId: input.requestedProfileId,\n        });\n  return {\n    ...(profileId === null ? {} : { profileId }),\n    security,\n    serverURL: input.config.apiBaseUrl,\n    testmode: input.credential.environment === \"test\",\n  };\n}\n\nexport function mollieSdkClientKey(input: {\n  credential: BillingResolvedCredential;\n  profileId?: string;\n  serverURL?: string;\n}): string {\n  return [\n    input.credential.provider,\n    input.credential.slot,\n    input.credential.fingerprint,\n    input.credential.environment,\n    input.credential.kind,\n    input.profileId ?? \"\",\n    input.serverURL ?? \"\",\n  ].join(\":\");\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  configuredProfileId?: string | null;\n  credentialKind: MollieBillingCredentialKind;\n  requestedProfileId?: string | null;\n}): string | undefined {\n  if (input.credentialKind === \"api_key\") {\n    return;\n  }\n  const requested = input.requestedProfileId;\n  if (requested != null && requested.length > 0) {\n    return requested;\n  }\n  const configured = input.configuredProfileId;\n  if (configured != null && configured.length > 0) {\n    return configured;\n  }\n}\n\nexport function mollieCreateHasProfileSelector(input: {\n  configuredProfileId?: string | null;\n  credentialKind?: string | null;\n  requestedProfileId?: string | null;\n}): boolean {\n  if (input.credentialKind == null || input.credentialKind === \"api_key\") {\n    return true;\n  }\n  return (\n    resolveMollieRequestProfileId({\n      configuredProfileId: input.configuredProfileId,\n      credentialKind: \"advanced_access_token\",\n      requestedProfileId: input.requestedProfileId,\n    }) != null\n  );\n}\n\nexport function requestedMollieProfileId(\n  requestedProfileId?: string | null\n): string | undefined {\n  if (requestedProfileId != null && requestedProfileId.length > 0) {\n    return requestedProfileId;\n  }\n}\n\nexport function rejectUnenforcedMollieProfileTarget(input: {\n  operation: string;\n  requestedProfileId?: string | null;\n}): void {\n  if (requestedMollieProfileId(input.requestedProfileId) == null) {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation: input.operation,\n    reason: \"unsupported_operation\",\n  });\n}\n\nexport function assertMolliePaymentMatchesSelectedProfile(input: {\n  operation: string;\n  payment: BillingPayment;\n  selectedProfileId: string | undefined;\n}): void {\n  if (input.selectedProfileId == null) {\n    return;\n  }\n  if (input.payment.providerProfileId !== input.selectedProfileId) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"missing_provider_scope\",\n    });\n  }\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\nimport {\n  MOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n  MOLLIE_SDK_REQUIRED_METHODS,\n  MOLLIE_SDK_REQUIRED_RESOURCES,\n  type MollieSdkClient,\n} from \"./contracts.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction hasResourcePort(value: unknown): value is Record<string, unknown> {\n  return isRecord(value);\n}\n\nfunction hasFunctionMethod(\n  resource: Record<string, unknown>,\n  method: string\n): boolean {\n  return typeof resource[method] === \"function\";\n}\n\nfunction assertRequiredMethods(\n  resource: Record<string, unknown>,\n  label: string,\n  methods: readonly string[],\n  operation: string\n): void {\n  for (const method of methods) {\n    if (!hasFunctionMethod(resource, method)) {\n      throw createMollieProviderRequestError({\n        fallbackMessage: `Injected Mollie SDK is missing ${label}.${method} for ${operation}.`,\n        kind: \"unsupported_operation\",\n        operation,\n      });\n    }\n  }\n}\n\nexport function assertMollieSdkClient(\n  client: unknown,\n  operation: string\n): MollieSdkClient {\n  if (!isRecord(client)) {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Injected Mollie SDK is not an object for ${operation}.`,\n      kind: \"unsupported_operation\",\n      operation,\n    });\n  }\n  for (const name of MOLLIE_SDK_REQUIRED_RESOURCES) {\n    const resource = client[name];\n    if (!hasResourcePort(resource)) {\n      throw createMollieProviderRequestError({\n        fallbackMessage: `Injected Mollie SDK is missing ${name} for ${operation}.`,\n        kind: \"unsupported_operation\",\n        operation,\n      });\n    }\n    assertRequiredMethods(\n      resource,\n      name,\n      MOLLIE_SDK_REQUIRED_METHODS[name],\n      operation\n    );\n  }\n  if (!hasResourcePort(client.salesInvoices)) {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Injected Mollie SDK is missing salesInvoices for ${operation}.`,\n      kind: \"unsupported_operation\",\n      operation,\n    });\n  }\n  assertRequiredMethods(\n    client.salesInvoices,\n    \"salesInvoices\",\n    MOLLIE_SDK_INVOICE_REQUIRED_METHODS,\n    operation\n  );\n  return client as unknown as MollieSdkClient;\n}\n","import type { BillingProviderErrorKind } from \"../../../../errors.ts\";\nimport {\n  AthenaBillingProviderRequestError,\n  billingProviderErrorKindFromHttp,\n} from \"../../../../errors.ts\";\nimport { BILLING_OPERATION_SAFETY } from \"../../../../safety/registry.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type { BillingRequestDispatchState } from \"../../../../safety/types.ts\";\nimport type { BillingOperation } from \"../../../capabilities.ts\";\nimport { sanitizeExternalDiagnostic } from \"../../../../../runtime/diagnostics/sanitize-external.ts\";\n\nfunction asString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value\n    : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isBillingOperation(operation: string): operation is BillingOperation {\n  return Object.hasOwn(BILLING_OPERATION_SAFETY, operation);\n}\n\nfunction asBillingOperation(operation?: string): BillingOperation {\n  if (operation != null && isBillingOperation(operation)) {\n    return operation;\n  }\n  return \"payments.get\";\n}\n\nfunction inferDispatchState(\n  kind: BillingProviderErrorKind,\n  explicit?: BillingRequestDispatchState\n): BillingRequestDispatchState {\n  if (explicit != null) {\n    return explicit;\n  }\n  switch (kind) {\n    case \"network\":\n    case \"timeout\":\n    case \"provider_unavailable\":\n      return \"unknown\";\n    case \"serialization\":\n      return \"dispatched\";\n    default:\n      return \"not_dispatched\";\n  }\n}\n\nexport function createMollieProviderRequestError(input: {\n  status?: number;\n  body?: unknown;\n  operation?: string;\n  fallbackMessage: string;\n  kind?: BillingProviderErrorKind;\n  idempotencyKeyPresent?: boolean;\n  requestDispatchState?: BillingRequestDispatchState;\n}): AthenaBillingProviderRequestError {\n  const body = isRecord(input.body) ? input.body : undefined;\n  const detail =\n    asString(body?.detail) ?? asString(body?.title) ?? input.fallbackMessage;\n  const kind =\n    input.kind ??\n    billingProviderErrorKindFromHttp({\n      detail,\n      key: asString(body?.type) ?? asString(body?.title),\n      status: input.status,\n    });\n  const operation = asBillingOperation(input.operation);\n  return new AthenaBillingProviderRequestError({\n    details: sanitizeExternalDiagnostic(body ?? {}),\n    kind,\n    message: detail,\n    operation: input.operation,\n    provider: \"mollie\",\n    retry: billingRetryDisposition({\n      idempotencyKeyPresent: input.idempotencyKeyPresent === true,\n      kind,\n      operation,\n      requestDispatchState: inferDispatchState(\n        kind,\n        input.requestDispatchState\n      ),\n    }),\n    status: input.status,\n  });\n}\n","import type {\n  BillingProviderErrorKind,\n  BillingRetryDisposition,\n} from \"../errors.ts\";\n\nimport { BILLING_OPERATION_SAFETY } from \"./registry.ts\";\nimport type {\n  BillingExecutionCertainty,\n  BillingOperationSafetyProfile,\n  BillingRequestDispatchState,\n  BillingRetryDispositionInput,\n} from \"./types.ts\";\n\nconst TRANSIENT_KINDS = new Set<string>([\n  \"network\",\n  \"timeout\",\n  \"rate_limited\",\n  \"provider_unavailable\",\n]);\n\nfunction profileFor(\n  operation: string\n): BillingOperationSafetyProfile | undefined {\n  const table: Record<string, BillingOperationSafetyProfile> =\n    BILLING_OPERATION_SAFETY;\n  return table[operation];\n}\n\nexport function billingExecutionCertainty(input: {\n  kind: string;\n  requestDispatchState: BillingRequestDispatchState;\n}): BillingExecutionCertainty {\n  if (input.requestDispatchState === \"not_dispatched\") {\n    return \"definitely_not_executed\";\n  }\n  switch (input.kind) {\n    case \"authentication\":\n    case \"authorization\":\n    case \"invalid_request\":\n    case \"not_found\":\n    case \"unsupported_operation\":\n    case \"unsupported_currency\":\n    case \"unsupported_payment_method\":\n      return \"definitely_not_executed\";\n    case \"customer_action_required\":\n    case \"payment_declined\":\n    case \"idempotency_conflict\":\n    case \"resource_state_conflict\":\n    case \"conflict\":\n      return \"definitely_executed\";\n    case \"serialization\":\n      return input.requestDispatchState === \"dispatched\"\n        ? \"definitely_executed\"\n        : \"definitely_not_executed\";\n    case \"rate_limited\":\n      return input.requestDispatchState === \"unknown\"\n        ? \"outcome_unknown\"\n        : \"definitely_not_executed\";\n    case \"timeout\":\n    case \"network\":\n    case \"provider_unavailable\":\n    case \"unknown\":\n      return \"outcome_unknown\";\n    default:\n      return input.requestDispatchState === \"dispatched\"\n        ? \"outcome_unknown\"\n        : \"definitely_not_executed\";\n  }\n}\n\nfunction isFinancialWrite(profile: BillingOperationSafetyProfile): boolean {\n  return (\n    profile.mutationClass === \"financial_create\" ||\n    profile.mutationClass === \"financial_cancel\"\n  );\n}\n\n/**\n * Operation-aware retry policy. Kind-only helpers are forbidden.\n */\nexport function billingRetryDisposition(\n  input: BillingRetryDispositionInput\n): BillingRetryDisposition {\n  const kind = input.kind as BillingProviderErrorKind;\n  if (kind === \"customer_action_required\" || kind === \"payment_declined\") {\n    return \"customer_action_required\";\n  }\n  if (kind === \"idempotency_conflict\" || kind === \"resource_state_conflict\") {\n    return \"reconcile_first\";\n  }\n  const certainty = billingExecutionCertainty({\n    kind: input.kind,\n    requestDispatchState: input.requestDispatchState,\n  });\n  const profile = profileFor(input.operation);\n  const transient = TRANSIENT_KINDS.has(input.kind);\n  if (profile?.mutationClass === \"read\" && transient) {\n    return \"safe\";\n  }\n  if (certainty === \"definitely_not_executed\" && transient) {\n    return \"safe\";\n  }\n  if (certainty === \"definitely_executed\") {\n    return \"never\";\n  }\n  if (certainty === \"outcome_unknown\") {\n    const replayOk =\n      profile?.replayGuarantee === \"provider_same_key\" &&\n      input.idempotencyKeyPresent === true;\n    if (profile != null && isFinancialWrite(profile)) {\n      if (profile.mutationClass === \"financial_create\" && replayOk) {\n        return \"safe\";\n      }\n      return \"reconcile_first\";\n    }\n    if (replayOk) {\n      return \"safe\";\n    }\n    return \"reconcile_first\";\n  }\n  return \"never\";\n}\n","const REDACTED = \"[REDACTED]\";\nconst CIRCULAR = \"[Circular]\";\nconst TRUNCATED = \"[Truncated]\";\n\nexport const EXTERNAL_DIAGNOSTIC_BUDGET = {\n  maxArrayEntries: 32,\n  maxDepth: 6,\n  maxObjectKeys: 32,\n  maxStringBytes: 2_048,\n  maxTotalBytes: 16_384,\n} as const;\n\nconst REDACTED_KEY = /authorization|api[_-]?key|password|secret|token/i;\n\nfunction truncateUtf8(value: string, maxBytes: number): string {\n  const bytes = new TextEncoder().encode(value);\n  if (bytes.byteLength <= maxBytes) {\n    return value;\n  }\n  return `${new TextDecoder().decode(bytes.slice(0, maxBytes))}${TRUNCATED}`;\n}\n\nfunction sanitizeValue(\n  value: unknown,\n  depth: number,\n  active: WeakSet<object>\n): unknown {\n  if (value === null || typeof value === \"boolean\" || typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return truncateUtf8(value, EXTERNAL_DIAGNOSTIC_BUDGET.maxStringBytes);\n  }\n  if (typeof value === \"bigint\") {\n    return `${value}n`;\n  }\n  if (typeof value === \"undefined\") {\n    return \"[Undefined]\";\n  }\n  if (typeof value === \"function\") {\n    return \"[Function]\";\n  }\n  if (typeof value === \"symbol\") {\n    return \"[Symbol]\";\n  }\n  if (depth >= EXTERNAL_DIAGNOSTIC_BUDGET.maxDepth) {\n    return TRUNCATED;\n  }\n  if (active.has(value)) {\n    return CIRCULAR;\n  }\n  active.add(value);\n  try {\n    if (Array.isArray(value)) {\n      const result = value\n        .slice(0, EXTERNAL_DIAGNOSTIC_BUDGET.maxArrayEntries)\n        .map((entry) => sanitizeValue(entry, depth + 1, active));\n      if (value.length > EXTERNAL_DIAGNOSTIC_BUDGET.maxArrayEntries) {\n        result.push(TRUNCATED);\n      }\n      return result;\n    }\n\n    const result: Record<string, unknown> = {};\n    const descriptors = Object.getOwnPropertyDescriptors(value);\n    const keys = Object.keys(descriptors);\n    for (const key of keys.slice(0, EXTERNAL_DIAGNOSTIC_BUDGET.maxObjectKeys)) {\n      if (REDACTED_KEY.test(key)) {\n        result[key] = REDACTED;\n        continue;\n      }\n      const descriptor = descriptors[key];\n      if (descriptor == null || !(\"value\" in descriptor)) {\n        result[key] = \"[Unavailable]\";\n        continue;\n      }\n      result[key] = sanitizeValue(descriptor.value, depth + 1, active);\n    }\n    if (keys.length > EXTERNAL_DIAGNOSTIC_BUDGET.maxObjectKeys) {\n      result[TRUNCATED] = keys.length - EXTERNAL_DIAGNOSTIC_BUDGET.maxObjectKeys;\n    }\n    return result;\n  } finally {\n    active.delete(value);\n  }\n}\n\nexport function sanitizeExternalDiagnostic(value: unknown): unknown {\n  const sanitized = sanitizeValue(value, 0, new WeakSet<object>());\n  let serialized: string;\n  try {\n    serialized = JSON.stringify(sanitized);\n  } catch {\n    return TRUNCATED;\n  }\n  if (new TextEncoder().encode(serialized).byteLength <= EXTERNAL_DIAGNOSTIC_BUDGET.maxTotalBytes) {\n    return sanitized;\n  }\n  return TRUNCATED;\n}\n","import type {\n  MollieSdkAdapterFactory,\n  MollieSdkClient,\n  MollieSdkClientOptions,\n  MollieSdkConstructor,\n  MollieSdkResourcePort,\n} from \"../../../../../providers/types.ts\";\n\nexport type {\n  MollieSdkAdapterFactory,\n  MollieSdkClient,\n  MollieSdkClientOptions,\n  MollieSdkConstructor,\n  MollieSdkResourcePort,\n};\n\nexport const MOLLIE_SDK_REQUIRED_RESOURCES = [\n  \"payments\",\n  \"customers\",\n  \"refunds\",\n  \"paymentLinks\",\n  \"subscriptions\",\n] as const;\n\nexport type MollieSdkRequiredResource =\n  (typeof MOLLIE_SDK_REQUIRED_RESOURCES)[number];\n\n/** Methods Athena actually invokes on each required resource. */\nexport const MOLLIE_SDK_REQUIRED_METHODS = {\n  customers: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n  paymentLinks: [\"create\", \"delete\", \"get\", \"list\", \"update\"],\n  payments: [\"cancel\", \"create\", \"get\", \"list\"],\n  refunds: [\"cancel\", \"create\", \"get\", \"list\"],\n  subscriptions: [\"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 type { BillingSqlExecutor } from \"../subject/repository.ts\";\nimport type { BillingImportPlan, BillingImportRunReport } from \"./types.ts\";\n\nexport interface BillingImportAuditStore {\n  completeRun(input: {\n    id: string;\n    report: BillingImportRunReport;\n  }): Promise<void>;\n  failRun(input: { id: string; error: string }): Promise<void>;\n  recordCandidate(input: {\n    bindingId?: string;\n    correlationId?: string;\n    plan: BillingImportPlan;\n    runId: string;\n    traceId?: string;\n  }): Promise<void>;\n  startRun(input: {\n    causationId?: string;\n    connectionId: string;\n    correlationId?: string;\n    cursorBefore?: string | null;\n    provider: string;\n    status: \"running\" | \"dry_run\";\n    traceId?: string;\n    trigger?: string;\n  }): Promise<{ id: string }>;\n}\n\nlet nextAuditId = 1;\n\nexport function createMemoryBillingImportAuditStore(): BillingImportAuditStore & {\n  candidates: BillingImportPlan[];\n  runs: Array<{\n    completed?: BillingImportRunReport;\n    error?: string;\n    id: string;\n    status: string;\n  }>;\n} {\n  const runs: Array<{\n    completed?: BillingImportRunReport;\n    error?: string;\n    id: string;\n    status: string;\n  }> = [];\n  const candidates: BillingImportPlan[] = [];\n  return {\n    candidates,\n    async completeRun(input) {\n      const row = runs.find((item) => item.id === input.id);\n      if (!row) {\n        return;\n      }\n      row.status =\n        input.report.status ?? (input.report.dryRun ? \"dry_run\" : \"completed\");\n      row.completed = input.report;\n    },\n    async failRun(input) {\n      const row = runs.find((item) => item.id === input.id);\n      if (!row) {\n        return;\n      }\n      row.status = \"failed\";\n      row.error = input.error;\n    },\n    async recordCandidate(input) {\n      candidates.push(input.plan);\n    },\n    runs,\n    async startRun(input) {\n      nextAuditId += 1;\n      const id = `run_${nextAuditId}`;\n      runs.push({ id, status: input.status });\n      return { id };\n    },\n  };\n}\n\nfunction jsonValue(value: unknown): string {\n  return JSON.stringify(value ?? {});\n}\n\nexport function createPostgresBillingImportAuditStore(\n  sql: BillingSqlExecutor\n): BillingImportAuditStore {\n  return {\n    async completeRun(input) {\n      const { report } = input;\n      await sql.query(\n        `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        [\n          input.id,\n          report.dryRun ? \"dry_run\" : (report.status ?? \"completed\"),\n          report.customersScanned,\n          report.bindingsCreated,\n          report.bindingsActivated,\n          report.conflicts,\n          report.skipped,\n          report.errors,\n          report.cursorAfter ?? null,\n          report.pagesProcessed ?? 1,\n          report.hasMore ?? false,\n        ]\n      );\n      await sql.query(\n        `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        [report.connectionId, report.cursorAfter ?? null]\n      );\n    },\n    async failRun(input) {\n      await sql.query(\n        `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        [input.id, input.error]\n      );\n      await sql.query(\n        `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        [input.id, input.error]\n      );\n    },\n    async recordCandidate(input) {\n      await sql.query(\n        `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        [\n          input.runId,\n          input.plan.connectionId,\n          input.plan.providerCustomerId,\n          input.plan.subject?.kind ?? null,\n          input.plan.subject?.id ?? null,\n          input.plan.confidence,\n          input.plan.decision,\n          jsonValue(input.plan.evidence),\n          input.plan.reason,\n          input.plan.decision === \"bind\",\n          input.traceId ?? null,\n          input.correlationId ?? null,\n          input.bindingId ?? null,\n        ]\n      );\n    },\n    async startRun(input) {\n      const result = await sql.query(\n        `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        [\n          input.connectionId,\n          input.provider,\n          input.status,\n          input.cursorBefore ?? null,\n          input.traceId ?? null,\n          input.correlationId ?? null,\n          input.causationId ?? null,\n          input.trigger ?? null,\n        ]\n      );\n      const id = result.rows[0]?.id;\n      if (typeof id !== \"string\" || id.length === 0) {\n        throw new Error(\"Failed to start billing import run.\");\n      }\n      await sql.query(\n        `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        [input.connectionId]\n      );\n      return { id };\n    },\n  };\n}\n","import type { AthenaBillingAuditWriter } from \"../observability/audit.ts\";\nimport type { BillingReconciliationContext } from \"../observability/types.ts\";\nimport {\n  emitBillingAuditFailure,\n  emitBillingImportSemanticAudit,\n} from \"../reconciliation/semantic-audit.ts\";\nimport type { BillingImportPageResult } from \"../reconciliation/types.ts\";\nimport {\n  applyBillingImportPlan,\n  type BillingImportBindingStore,\n  type BillingImportCursorStore,\n  type BillingImportDocumentStore,\n} from \"./apply.ts\";\nimport type { BillingImportAuditStore } from \"./audit.ts\";\nimport { readAthenaSubjectFromMetadata } from \"./candidate-resolver.ts\";\nimport {\n  ATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n  AthenaBillingImportError,\n} from \"./errors.ts\";\nimport { planBillingImport } from \"./planner.ts\";\nimport { reconcileBillingDocumentsForBinding } from \"./project.ts\";\nimport type { BillingCustomerImportPort } from \"./providers/types.ts\";\nimport type {\n  BillingImportCustomer,\n  BillingImportPlan,\n  BillingImportPolicy,\n  BillingImportRunReport,\n  BillingSubjectDirectory,\n} from \"./types.ts\";\nimport { DEFAULT_BILLING_IMPORT_POLICY } from \"./types.ts\";\n\nexport interface RunBillingCustomerImportInput {\n  audit?: BillingImportAuditStore;\n  bindings: BillingImportBindingStore;\n  connectionId: string;\n  context?: BillingReconciliationContext;\n  cursor?: string;\n  cursors?: BillingImportCursorStore;\n  customerId?: string;\n  directory: BillingSubjectDirectory;\n  discovery: BillingCustomerImportPort;\n  documents?: BillingImportDocumentStore;\n  dryRun: boolean;\n  includeAmbiguous?: boolean;\n  limit?: number;\n  persistCursor?: boolean;\n  policy?: BillingImportPolicy;\n  preloadedCustomers?: readonly BillingImportCustomer[];\n  provider?: string;\n  runId?: string;\n  semanticAudit?: AthenaBillingAuditWriter;\n  skipCursorAdvance?: boolean;\n  subjectId?: string;\n}\n\nasync function loadPage(\n  discovery: BillingCustomerImportPort,\n  input: { cursor?: string; customerId?: string; limit?: number }\n): Promise<{\n  items: readonly BillingImportCustomer[];\n  nextCursor?: string | null;\n}> {\n  try {\n    if (input.customerId && discovery.getCustomer) {\n      const customer = await discovery.getCustomer({\n        customerId: input.customerId,\n      });\n      return { items: [customer], nextCursor: null };\n    }\n    return await discovery.listCustomers(input);\n  } catch (error) {\n    if (error instanceof AthenaBillingImportError) {\n      throw error;\n    }\n    const message = error instanceof Error ? error.message : \"provider failed\";\n    throw new AthenaBillingImportError({\n      code: ATHENA_BILLING_IMPORT_PROVIDER_FAILED,\n      message,\n    });\n  }\n}\n\nexport async function applyBillingImportCustomers(input: {\n  audit?: BillingImportAuditStore;\n  bindings: BillingImportBindingStore;\n  connectionId: string;\n  context?: BillingReconciliationContext;\n  customerId?: string;\n  directory: BillingSubjectDirectory;\n  documents?: BillingImportDocumentStore;\n  dryRun: boolean;\n  includeAmbiguous?: boolean;\n  items: readonly BillingImportCustomer[];\n  policy: BillingImportPolicy;\n  provider: string;\n  runId?: string;\n  semanticAudit?: AthenaBillingAuditWriter;\n  subjectId?: string;\n}): Promise<{\n  bindingsActivated: number;\n  bindingsCreated: number;\n  conflicts: number;\n  plans: BillingImportPlan[];\n  scannedCustomers: BillingImportCustomer[];\n  skipped: number;\n}> {\n  const plans: BillingImportPlan[] = [];\n  let bindingsCreated = 0;\n  let bindingsActivated = 0;\n  let conflicts = 0;\n  let skipped = 0;\n  const scannedCustomers: BillingImportCustomer[] = [];\n  const persistAudit = input.audit != null && !input.dryRun;\n\n  for (const customer of input.items) {\n    if (input.customerId && customer.providerCustomerId !== input.customerId) {\n      continue;\n    }\n    scannedCustomers.push(customer);\n    const metadataSubject = readAthenaSubjectFromMetadata(customer.metadata);\n    const directorySubject = metadataSubject\n      ? await input.directory.getById(metadataSubject)\n      : null;\n    const email = customer.email?.trim();\n    const emailMatches = email\n      ? await input.directory.findUsersByEmail(email)\n      : [];\n    const existingLocator = await input.bindings.findByLocator({\n      connectionId: input.connectionId,\n      providerCustomerId: customer.providerCustomerId,\n    });\n    const proposed =\n      directorySubject?.subject ??\n      (emailMatches.length === 1 ? emailMatches[0]?.subject : undefined);\n    const existingPrimary = proposed\n      ? await input.bindings.findActivePrimary({\n          connectionId: input.connectionId,\n          subject: proposed,\n        })\n      : null;\n    const documentHints = input.documents\n      ? await input.documents.hintsForCustomer({\n          connectionId: input.connectionId,\n          providerCustomerId: customer.providerCustomerId,\n        })\n      : [];\n    const uniqueMatch = emailMatches.length === 1 ? emailMatches[0] : undefined;\n    const plan = planBillingImport({\n      connectionId: input.connectionId,\n      customer,\n      directorySubject,\n      documentHints,\n      emailMatches,\n      emailVerification:\n        uniqueMatch?.emailVerified === true && email\n          ? {\n              issuer: \"athena.auth\",\n              normalizedEmail: email.trim().toLowerCase(),\n              source: \"athena.directory\",\n              verified: true,\n              verifiedAt: new Date().toISOString(),\n            }\n          : null,\n      existingLocator,\n      existingPrimary,\n      policy: input.policy ?? DEFAULT_BILLING_IMPORT_POLICY,\n    });\n    if (input.subjectId && plan.subject?.id !== input.subjectId) {\n      continue;\n    }\n    if (\n      plan.confidence === \"ambiguous\" &&\n      input.includeAmbiguous !== true &&\n      plan.decision !== \"conflict\"\n    ) {\n      skipped += 1;\n      continue;\n    }\n    plans.push(plan);\n    if (persistAudit && input.audit && input.runId) {\n      await input.audit.recordCandidate({\n        correlationId: input.context?.correlationId,\n        plan,\n        runId: input.runId,\n        traceId: input.context?.traceId,\n      });\n    }\n    if (input.dryRun) {\n      continue;\n    }\n    try {\n      const applied = await applyBillingImportPlan(input.bindings, {\n        emailSnapshot: customer.email,\n        plan,\n      });\n      if (applied === \"created\") {\n        bindingsCreated += 1;\n      } else if (applied === \"activated\") {\n        bindingsActivated += 1;\n      } else if (applied === \"conflict\") {\n        conflicts += 1;\n      } else {\n        skipped += 1;\n      }\n      let projectionConflicts = 0;\n      if (\n        applied === \"created\" ||\n        applied === \"activated\" ||\n        plan.action === \"noop\"\n      ) {\n        const subject = plan.subject;\n        if (subject && input.documents) {\n          const projection = await reconcileBillingDocumentsForBinding(\n            input.documents,\n            {\n              connectionId: input.connectionId,\n              providerCustomerId: customer.providerCustomerId,\n              subject,\n            }\n          );\n          projectionConflicts = projection.conflicts;\n          conflicts += projection.conflicts;\n        }\n      }\n      if (input.semanticAudit && input.context) {\n        await emitBillingImportSemanticAudit({\n          applied,\n          context: input.context,\n          plan,\n          previous: existingLocator,\n          projectionConflicts,\n          writer: input.semanticAudit,\n        });\n      }\n    } catch (error) {\n      if (input.semanticAudit && input.context) {\n        await emitBillingAuditFailure({\n          context: input.context,\n          error,\n          providerCustomerId: customer.providerCustomerId,\n          subject: plan.subject,\n          writer: input.semanticAudit,\n        });\n      }\n      throw error;\n    }\n  }\n\n  return {\n    bindingsActivated,\n    bindingsCreated,\n    conflicts,\n    plans,\n    scannedCustomers,\n    skipped,\n  };\n}\n\nexport async function runBillingCustomerImportPage(\n  input: RunBillingCustomerImportInput\n): Promise<BillingImportPageResult> {\n  const policy = input.policy ?? DEFAULT_BILLING_IMPORT_POLICY;\n  const cursorBefore =\n    input.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n  const page =\n    input.preloadedCustomers == null\n      ? await loadPage(input.discovery, {\n          cursor: cursorBefore ?? undefined,\n          customerId: input.customerId,\n          limit: input.limit,\n        })\n      : {\n          items: input.preloadedCustomers,\n          nextCursor: null as string | null,\n        };\n  const applied = await applyBillingImportCustomers({\n    audit: input.audit,\n    bindings: input.bindings,\n    connectionId: input.connectionId,\n    context: input.context,\n    customerId: input.customerId,\n    directory: input.directory,\n    documents: input.documents,\n    dryRun: input.dryRun,\n    includeAmbiguous: input.includeAmbiguous,\n    items: page.items,\n    policy,\n    provider: input.provider ?? \"mollie\",\n    runId: input.runId,\n    semanticAudit: input.semanticAudit,\n    subjectId: input.subjectId,\n  });\n  const nextCursor = page.nextCursor ?? null;\n  const persistCursor =\n    input.persistCursor !== false &&\n    !input.dryRun &&\n    !input.skipCursorAdvance &&\n    input.customerId == null &&\n    input.cursors != null;\n  if (persistCursor && input.cursors) {\n    await input.cursors.set(input.connectionId, nextCursor);\n  }\n  return {\n    bindingsActivated: applied.bindingsActivated,\n    bindingsCreated: applied.bindingsCreated,\n    conflicts: applied.conflicts,\n    cursorAfter: persistCursor ? nextCursor : cursorBefore,\n    cursorBefore,\n    customersScanned: applied.scannedCustomers.length,\n    hasMore: nextCursor != null && nextCursor.length > 0,\n    plans: applied.plans,\n    skipped: applied.skipped,\n  };\n}\n\nexport async function runBillingCustomerImport(\n  input: RunBillingCustomerImportInput\n): Promise<BillingImportRunReport> {\n  const persistAudit = input.audit != null && !input.dryRun;\n  const cursorBefore =\n    input.cursor ?? (await input.cursors?.get(input.connectionId)) ?? null;\n  let runId: string | undefined;\n  if (persistAudit && input.audit) {\n    const started = await input.audit.startRun({\n      causationId: input.context?.causationId,\n      connectionId: input.connectionId,\n      correlationId: input.context?.correlationId,\n      cursorBefore,\n      provider: input.provider ?? \"mollie\",\n      status: \"running\",\n      traceId: input.context?.traceId,\n      trigger: input.context?.trigger,\n    });\n    runId = started.id;\n  }\n  try {\n    const page = await runBillingCustomerImportPage({\n      ...input,\n      runId,\n    });\n    const report: BillingImportRunReport = {\n      bindingsActivated: page.bindingsActivated,\n      bindingsCreated: page.bindingsCreated,\n      conflicts: page.conflicts,\n      connectionId: input.connectionId,\n      correlationId: input.context?.correlationId,\n      cursorAfter: page.cursorAfter,\n      cursorBefore: page.cursorBefore,\n      customersScanned: page.customersScanned,\n      dryRun: input.dryRun,\n      errors: 0,\n      hasMore: page.hasMore,\n      pagesProcessed: 1,\n      plans: page.plans,\n      runId,\n      skipped: page.skipped,\n      status: page.conflicts > 0 ? \"completed_with_conflicts\" : \"completed\",\n      traceId: input.context?.traceId,\n    };\n    if (persistAudit && input.audit && runId) {\n      await input.audit.completeRun({ id: runId, report });\n    }\n    return report;\n  } catch (error) {\n    if (persistAudit && input.audit && runId) {\n      const message = error instanceof Error ? error.message : \"import failed\";\n      await input.audit.failRun({ error: message, id: runId });\n    }\n    throw error;\n  }\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  activate(input: {\n    emailSnapshot?: string | null;\n    id: string;\n    source: \"imported\" | \"reconciled\";\n  }): Promise<void>;\n  findActivePrimary(input: {\n    connectionId: string;\n    subject: BillingSubjectRef;\n  }): Promise<BillingSubjectBindingRecord | null>;\n  findByLocator(input: {\n    connectionId: string;\n    providerCustomerId: string;\n  }): Promise<BillingSubjectBindingRecord | null>;\n  insertActive(input: {\n    connectionId: string;\n    emailSnapshot?: string | null;\n    providerCustomerId: string;\n    source: \"imported\" | \"reconciled\";\n    subject: BillingSubjectRef;\n  }): Promise<BillingSubjectBindingRecord>;\n  recordConflict?(input: {\n    confidence: string;\n    connectionId: string;\n    providerCustomerId: string;\n    reason: string;\n    subject?: BillingSubjectRef;\n  }): Promise<void>;\n}\n\nexport interface BillingImportDocumentStore {\n  hintsForCustomer(input: {\n    connectionId: string;\n    providerCustomerId: string;\n  }): Promise<readonly BillingImportDocumentHint[]>;\n  projectForBinding(input: {\n    connectionId: string;\n    providerCustomerId: string;\n    subject: BillingSubjectRef;\n  }): Promise<{ conflicts: number; resolved: number }>;\n}\n\nexport interface BillingImportCursorStore {\n  get(connectionId: string): Promise<string | null>;\n  set(connectionId: string, cursor: string | null): Promise<void>;\n}\n\nexport function createMemoryBillingImportCursorStore(): BillingImportCursorStore & {\n  cursors: Map<string, string | null>;\n} {\n  const cursors = new Map<string, string | null>();\n  return {\n    cursors,\n    async get(connectionId) {\n      return cursors.get(connectionId) ?? null;\n    },\n    async set(connectionId, cursor) {\n      cursors.set(connectionId, cursor);\n    },\n  };\n}\n\nlet nextId = 1;\n\nfunction newId(): string {\n  nextId += 1;\n  return `bind_${nextId}`;\n}\n\nexport type MemoryBillingImportConflict = {\n  confidence: string;\n  connectionId: string;\n  observationCount: number;\n  providerCustomerId: string;\n  reason: string;\n  subjectId?: string;\n  subjectKind?: string;\n};\n\nexport function createMemoryBillingImportBindingStore(\n  initial: BillingSubjectBindingRecord[] = []\n): BillingImportBindingStore & {\n  conflicts: MemoryBillingImportConflict[];\n  records: BillingSubjectBindingRecord[];\n} {\n  const records = [...initial];\n  const conflicts: MemoryBillingImportConflict[] = [];\n  return {\n    async activate(input) {\n      const row = records.find((item) => item.id === input.id);\n      if (!row) {\n        return;\n      }\n      row.status = \"active\";\n      row.isPrimary = true;\n      row.source = input.source;\n      if (input.emailSnapshot !== undefined) {\n        row.emailSnapshot = input.emailSnapshot ?? null;\n      }\n    },\n    conflicts,\n    async findActivePrimary(input) {\n      return (\n        records.find(\n          (row) =>\n            row.connectionId === input.connectionId &&\n            row.subjectKind === input.subject.kind &&\n            row.subjectId === input.subject.id &&\n            row.providerSubjectKind === \"customer\" &&\n            row.status === \"active\" &&\n            row.isPrimary\n        ) ?? null\n      );\n    },\n    async findByLocator(input) {\n      return (\n        records.find(\n          (row) =>\n            row.connectionId === input.connectionId &&\n            row.providerSubjectKind === \"customer\" &&\n            row.providerSubjectId === input.providerCustomerId\n        ) ?? null\n      );\n    },\n    async insertActive(input) {\n      const row: BillingSubjectBindingRecord = {\n        connectionId: input.connectionId,\n        emailSnapshot: input.emailSnapshot ?? null,\n        id: newId(),\n        isPrimary: true,\n        providerSubjectId: input.providerCustomerId,\n        providerSubjectKind: \"customer\",\n        source: input.source,\n        status: \"active\",\n        subjectId: input.subject.id,\n        subjectKind: input.subject.kind,\n      };\n      records.push(row);\n      return row;\n    },\n    async recordConflict(input) {\n      const subjectKind = input.subject?.kind ?? \"\";\n      const subjectId = input.subject?.id ?? \"\";\n      const existing = conflicts.find(\n        (row) =>\n          row.connectionId === input.connectionId &&\n          row.providerCustomerId === input.providerCustomerId &&\n          (row.subjectKind ?? \"\") === subjectKind &&\n          (row.subjectId ?? \"\") === subjectId\n      );\n      if (existing) {\n        existing.confidence = input.confidence;\n        existing.observationCount += 1;\n        existing.reason = input.reason;\n        existing.subjectId = input.subject?.id;\n        existing.subjectKind = input.subject?.kind;\n        return;\n      }\n      conflicts.push({\n        confidence: input.confidence,\n        connectionId: input.connectionId,\n        observationCount: 1,\n        providerCustomerId: input.providerCustomerId,\n        reason: input.reason,\n        subjectId: input.subject?.id,\n        subjectKind: input.subject?.kind,\n      });\n    },\n    records,\n  };\n}\n\nexport async function applyBillingImportPlan(\n  store: BillingImportBindingStore,\n  input: {\n    emailSnapshot?: string | null;\n    plan: BillingImportPlan;\n  }\n): Promise<\"created\" | \"activated\" | \"noop\" | \"conflict\"> {\n  const { plan } = input;\n  if (plan.action === \"none\" || plan.action === \"noop\") {\n    return \"noop\";\n  }\n  if (plan.action === \"mark_conflict\") {\n    if (store.recordConflict) {\n      await store.recordConflict({\n        confidence: plan.confidence,\n        connectionId: plan.connectionId,\n        providerCustomerId: plan.providerCustomerId,\n        reason:\n          plan.reason === \"unique email candidate only\"\n            ? \"manual_review_required\"\n            : \"ambiguous_import\",\n        subject: plan.subject,\n      });\n    }\n    return \"conflict\";\n  }\n  const subject = plan.subject;\n  if (!subject) {\n    return \"noop\";\n  }\n  const existing = await store.findByLocator({\n    connectionId: plan.connectionId,\n    providerCustomerId: plan.providerCustomerId,\n  });\n  if (existing) {\n    if (\n      existing.status === \"active\" &&\n      subjectsEqual(subject, {\n        id: existing.subjectId,\n        kind: existing.subjectKind,\n      })\n    ) {\n      return \"noop\";\n    }\n    if (\n      !subjectsEqual(subject, {\n        id: existing.subjectId,\n        kind: existing.subjectKind,\n      })\n    ) {\n      return \"conflict\";\n    }\n    if (existing.status === \"pending\" || plan.action === \"resume_pending\") {\n      await store.activate({\n        emailSnapshot: input.emailSnapshot,\n        id: existing.id,\n        source: plan.source,\n      });\n      return \"activated\";\n    }\n    return \"noop\";\n  }\n  await store.insertActive({\n    connectionId: plan.connectionId,\n    emailSnapshot: input.emailSnapshot,\n    providerCustomerId: plan.providerCustomerId,\n    source: plan.source,\n    subject,\n  });\n  return \"created\";\n}\n","import type { BillingSubjectRef } from \"../types.ts\";\nimport {\n  ATHENA_EXTERNAL_ID_METADATA_KEY,\n  ATHENA_SUBJECT_ID_METADATA_KEY,\n  ATHENA_SUBJECT_KIND_METADATA_KEY,\n  type BillingImportCustomer,\n  type BillingImportEvidence,\n} from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(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\nexport function readAthenaSubjectFromMetadata(\n  metadata: Record<string, unknown>\n): BillingSubjectRef | undefined {\n  const id = readString(metadata[ATHENA_SUBJECT_ID_METADATA_KEY]);\n  const kind = readString(metadata[ATHENA_SUBJECT_KIND_METADATA_KEY]);\n  if (!id || (kind !== \"user\" && kind !== \"organization\")) {\n    return;\n  }\n  return { id, kind };\n}\n\nexport function collectProviderCustomerEvidence(\n  customer: BillingImportCustomer\n): BillingImportEvidence[] {\n  const evidence: BillingImportEvidence[] = [];\n  const metadata = isRecord(customer.metadata) ? customer.metadata : {};\n  const subject = readAthenaSubjectFromMetadata(metadata);\n  if (subject) {\n    evidence.push({\n      kind: \"provider_metadata_subject_id\",\n      value: `${subject.kind}:${subject.id}`,\n    });\n  }\n  const externalId = readString(metadata[ATHENA_EXTERNAL_ID_METADATA_KEY]);\n  if (externalId) {\n    evidence.push({\n      kind: \"provider_metadata_external_id\",\n      value: externalId,\n    });\n  }\n  const email = readString(customer.email ?? undefined);\n  if (email) {\n    evidence.push({ kind: \"email\", value: email.toLowerCase() });\n  }\n  return evidence;\n}\n\nexport function subjectsEqual(\n  left: BillingSubjectRef,\n  right: BillingSubjectRef\n): boolean {\n  return left.kind === right.kind && left.id === right.id;\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  | \"bind\"\n  | \"skip\"\n  | \"conflict\"\n  | \"manual_review\";\n\nexport type BillingImportEvidenceKind =\n  | \"provider_metadata_subject_id\"\n  | \"provider_metadata_external_id\"\n  | \"email\"\n  | \"historical_payment\"\n  | \"historical_subscription\";\n\nexport interface BillingImportEvidence {\n  kind: BillingImportEvidenceKind;\n  value?: string;\n}\n\nexport interface BillingImportCandidate {\n  confidence: BillingImportConfidence;\n  connectionId: string;\n  evidence: BillingImportEvidence[];\n  providerCustomerId: string;\n  subject?: BillingSubjectRef;\n}\n\nexport interface BillingImportCustomer {\n  email?: string | null;\n  metadata: Record<string, unknown>;\n  name?: string | null;\n  providerCustomerId: string;\n  raw: unknown;\n}\n\nexport interface BillingImportCustomerPage {\n  items: readonly BillingImportCustomer[];\n  nextCursor?: string | null;\n}\n\nexport interface BillingSubjectRecord {\n  email?: string | null;\n  emailVerified?: boolean;\n  subject: BillingSubjectRef;\n}\n\nexport interface BillingSubjectDirectory {\n  findUsersByEmail(email: string): Promise<readonly BillingSubjectRecord[]>;\n  getById(subject: BillingSubjectRef): Promise<BillingSubjectRecord | null>;\n}\n\nexport interface BillingImportPolicy {\n  allowSecondaryBindings: boolean;\n  allowUniqueEmailAutoBind: boolean;\n}\n\nexport const DEFAULT_BILLING_IMPORT_POLICY: BillingImportPolicy = {\n  allowSecondaryBindings: false,\n  allowUniqueEmailAutoBind: false,\n};\n\nexport type BillingImportPlanAction =\n  | \"create_active_binding\"\n  | \"noop\"\n  | \"resume_pending\"\n  | \"mark_conflict\"\n  | \"none\";\n\nexport interface BillingImportPlan {\n  action: BillingImportPlanAction;\n  candidates: readonly BillingSubjectRef[];\n  confidence: BillingImportConfidence;\n  connectionId: string;\n  decision: BillingImportDecision;\n  evidence: readonly BillingImportEvidence[];\n  providerCustomerId: string;\n  reason: string;\n  source: \"imported\" | \"reconciled\";\n  subject?: BillingSubjectRef;\n}\n\nexport interface BillingImportDocumentHint {\n  connectionId: string;\n  ownershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n  providerCustomerId: string;\n  subject?: BillingSubjectRef;\n}\n\nexport interface BillingImportContext {\n  connectionId: string;\n  customer: BillingImportCustomer;\n  directorySubject: BillingSubjectRecord | null;\n  documentHints: readonly BillingImportDocumentHint[];\n  emailMatches: readonly BillingSubjectRecord[];\n  emailVerification?: {\n    issuer: string;\n    normalizedEmail: string;\n    source: string;\n    verified: boolean;\n    verifiedAt: string;\n  } | null;\n  existingLocator: BillingSubjectBindingRecord | null;\n  existingPrimary: BillingSubjectBindingRecord | null;\n  policy: BillingImportPolicy;\n}\n\nexport interface BillingImportRunReport {\n  bindingsActivated: number;\n  bindingsCreated: number;\n  conflicts: number;\n  connectionId: string;\n  correlationId?: string;\n  cursorAfter?: string | null;\n  cursorBefore?: string | null;\n  customersScanned: number;\n  dryRun: boolean;\n  environment?: \"live\" | \"test\";\n  errors: number;\n  hasMore?: boolean;\n  pagesProcessed?: number;\n  plans: readonly BillingImportPlan[];\n  provider?: string;\n  runId?: string;\n  skipped: number;\n  status?: string;\n  traceId?: 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 {\n  collectProviderCustomerEvidence,\n  subjectsEqual,\n} from \"./candidate-resolver.ts\";\nimport { confidenceFromEvidence } from \"./confidence.ts\";\nimport type {\n  BillingImportContext,\n  BillingImportPlan,\n  BillingSubjectRecord,\n} from \"./types.ts\";\n\nfunction uniqueSubjects(\n  records: readonly BillingSubjectRecord[]\n): BillingSubjectRecord[] {\n  const seen = new Set<string>();\n  const out: BillingSubjectRecord[] = [];\n  for (const record of records) {\n    const key = `${record.subject.kind}:${record.subject.id}`;\n    if (seen.has(key)) {\n      continue;\n    }\n    seen.add(key);\n    out.push(record);\n  }\n  return out;\n}\n\nexport function planBillingImport(\n  context: BillingImportContext\n): BillingImportPlan {\n  const evidence = collectProviderCustomerEvidence(context.customer);\n  const connectionId = context.connectionId;\n  const providerCustomerId = context.customer.providerCustomerId;\n  const locator = context.existingLocator;\n  const metadataSubject = context.directorySubject?.subject;\n  const historicalSubjects = uniqueSubjects(\n    context.documentHints.flatMap((hint) => {\n      const subject = hint.subject;\n      return subject == null ? [] : [{ subject }];\n    })\n  );\n  for (const hint of context.documentHints) {\n    if (hint.subject == null) {\n      continue;\n    }\n    const kind =\n      hint.ownershipStatus === \"resolved\" && hint.subject\n        ? (\"historical_payment\" as const)\n        : (\"historical_subscription\" as const);\n    if (\n      !evidence.some(\n        (item) => item.kind === kind && item.value === hint.subject?.id\n      )\n    ) {\n      evidence.push({ kind, value: hint.subject.id });\n    }\n  }\n\n  if (locator) {\n    if (locator.status === \"revoked\") {\n      /* fall through to re-evaluate */\n    } else if (\n      metadataSubject &&\n      !subjectsEqual(metadataSubject, {\n        id: locator.subjectId,\n        kind: locator.subjectKind,\n      })\n    ) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [\n          { id: locator.subjectId, kind: locator.subjectKind },\n          metadataSubject,\n        ],\n        confidence: \"none\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason: \"provider customer already bound to another subject\",\n        source: \"imported\",\n      };\n    } else if (locator.status === \"active\") {\n      return {\n        action: \"noop\",\n        candidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n        confidence: \"exact\",\n        connectionId,\n        decision: \"skip\",\n        evidence,\n        providerCustomerId,\n        reason: \"existing same binding\",\n        source: locator.source === \"reconciled\" ? \"reconciled\" : \"imported\",\n        subject: { id: locator.subjectId, kind: locator.subjectKind },\n      };\n    } else if (locator.status === \"pending\") {\n      return {\n        action: \"resume_pending\",\n        candidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n        confidence: \"exact\",\n        connectionId,\n        decision: \"bind\",\n        evidence,\n        providerCustomerId,\n        reason: \"resume pending binding\",\n        source: \"reconciled\",\n        subject: { id: locator.subjectId, kind: locator.subjectKind },\n      };\n    } else if (locator.status === \"conflict\") {\n      return {\n        action: \"mark_conflict\",\n        candidates: [{ id: locator.subjectId, kind: locator.subjectKind }],\n        confidence: \"none\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason: \"existing locator conflict\",\n        source: \"imported\",\n        subject: { id: locator.subjectId, kind: locator.subjectKind },\n      };\n    }\n  }\n\n  if (\n    collectProviderCustomerEvidence(context.customer).some(\n      (item) => item.kind === \"provider_metadata_subject_id\"\n    ) &&\n    context.directorySubject == null\n  ) {\n    return {\n      action: \"mark_conflict\",\n      candidates: [],\n      confidence: \"none\",\n      connectionId,\n      decision: \"conflict\",\n      evidence,\n      providerCustomerId,\n      reason: \"provider metadata points to nonexistent subject\",\n      source: \"imported\",\n    };\n  }\n\n  if (metadataSubject) {\n    if (\n      context.existingPrimary &&\n      !context.policy.allowSecondaryBindings &&\n      !subjectsEqual(metadataSubject, {\n        id: context.existingPrimary.subjectId,\n        kind: context.existingPrimary.subjectKind,\n      }) &&\n      context.existingPrimary.providerSubjectId !== providerCustomerId\n    ) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [metadataSubject],\n        confidence: \"exact\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason:\n          \"subject already has another primary customer for this connection\",\n        source: \"imported\",\n        subject: metadataSubject,\n      };\n    }\n    if (\n      locator &&\n      locator.status !== \"revoked\" &&\n      !subjectsEqual(metadataSubject, {\n        id: locator.subjectId,\n        kind: locator.subjectKind,\n      })\n    ) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [\n          { id: locator.subjectId, kind: locator.subjectKind },\n          metadataSubject,\n        ],\n        confidence: \"none\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason: \"provider customer already bound to another subject\",\n        source: \"imported\",\n      };\n    }\n    return {\n      action: \"create_active_binding\",\n      candidates: [metadataSubject],\n      confidence: \"exact\",\n      connectionId,\n      decision: \"bind\",\n      evidence,\n      providerCustomerId,\n      reason: \"provider metadata subject id\",\n      source: \"imported\",\n      subject: metadataSubject,\n    };\n  }\n\n  if (historicalSubjects.length > 1) {\n    return {\n      action: \"mark_conflict\",\n      candidates: historicalSubjects.map((item) => item.subject),\n      confidence: \"ambiguous\",\n      connectionId,\n      decision: \"conflict\",\n      evidence,\n      providerCustomerId,\n      reason: \"canonical rows carry conflicting subject ownership\",\n      source: \"imported\",\n    };\n  }\n  if (historicalSubjects.length === 1) {\n    const subject = historicalSubjects[0]?.subject;\n    if (subject) {\n      return {\n        action: \"create_active_binding\",\n        candidates: [subject],\n        confidence: \"strong\",\n        connectionId,\n        decision: \"bind\",\n        evidence,\n        providerCustomerId,\n        reason: \"historical canonical ownership\",\n        source: \"imported\",\n        subject,\n      };\n    }\n  }\n\n  const emailMatches = uniqueSubjects(context.emailMatches);\n  if (emailMatches.length > 1) {\n    return {\n      action: \"none\",\n      candidates: emailMatches.map((item) => item.subject),\n      confidence: \"ambiguous\",\n      connectionId,\n      decision: \"conflict\",\n      evidence,\n      providerCustomerId,\n      reason: \"duplicate email\",\n      source: \"imported\",\n    };\n  }\n  if (emailMatches.length === 1) {\n    const subject = emailMatches[0]?.subject;\n    if (!subject) {\n      return {\n        action: \"none\",\n        candidates: [],\n        confidence: \"none\",\n        connectionId,\n        decision: \"skip\",\n        evidence,\n        providerCustomerId,\n        reason: \"no candidate\",\n        source: \"imported\",\n      };\n    }\n    if (\n      context.existingPrimary &&\n      !context.policy.allowSecondaryBindings &&\n      context.existingPrimary.providerSubjectId !== providerCustomerId\n    ) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [subject],\n        confidence: \"strong\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason:\n          \"subject already has another primary customer for this connection\",\n        source: \"imported\",\n        subject,\n      };\n    }\n    if (!context.policy.allowUniqueEmailAutoBind) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [subject],\n        confidence: \"strong\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason: \"unique email candidate only\",\n        source: \"imported\",\n        subject,\n      };\n    }\n    const verification = context.emailVerification;\n    if (\n      verification == null ||\n      verification.verified !== true ||\n      verification.normalizedEmail.trim() === \"\"\n    ) {\n      return {\n        action: \"mark_conflict\",\n        candidates: [subject],\n        confidence: \"strong\",\n        connectionId,\n        decision: \"conflict\",\n        evidence,\n        providerCustomerId,\n        reason: \"unique email unverified\",\n        source: \"imported\",\n        subject,\n      };\n    }\n    return {\n      action: \"create_active_binding\",\n      candidates: [subject],\n      confidence: \"strong\",\n      connectionId,\n      decision: \"bind\",\n      evidence,\n      providerCustomerId,\n      reason: \"unique email match\",\n      source: \"imported\",\n      subject,\n    };\n  }\n\n  return {\n    action: \"none\",\n    candidates: [],\n    confidence: confidenceFromEvidence(evidence, 0, false),\n    connectionId,\n    decision: \"skip\",\n    evidence,\n    providerCustomerId,\n    reason: \"no candidate\",\n    source: \"imported\",\n  };\n}\n","import type {\n  BillingImportConfidence,\n  BillingImportEvidence,\n} from \"./types.ts\";\n\nexport function confidenceFromEvidence(\n  evidence: readonly BillingImportEvidence[],\n  emailMatchCount: number,\n  metadataSubjectResolved: boolean\n): BillingImportConfidence {\n  if (\n    evidence.some((item) => item.kind === \"provider_metadata_subject_id\") &&\n    metadataSubjectResolved\n  ) {\n    return \"exact\";\n  }\n  if (\n    evidence.some(\n      (item) =>\n        item.kind === \"historical_payment\" ||\n        item.kind === \"historical_subscription\"\n    )\n  ) {\n    return \"strong\";\n  }\n  if (evidence.some((item) => item.kind === \"email\") && emailMatchCount === 1) {\n    return \"strong\";\n  }\n  if (emailMatchCount > 1) {\n    return \"ambiguous\";\n  }\n  return \"none\";\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  connectionId: string;\n  id: string;\n  kind: \"payment\" | \"subscription\" | \"invoice\";\n  ownershipStatus: \"resolved\" | \"unresolved\" | \"conflict\";\n  providerCustomerId: string;\n  subject?: BillingSubjectRef;\n}\n\nexport function createMemoryBillingImportDocumentStore(\n  documents: MemoryBillingDocument[]\n): BillingImportDocumentStore & { documents: MemoryBillingDocument[] } {\n  return {\n    documents,\n    async hintsForCustomer(input) {\n      const hints: BillingImportDocumentHint[] = [];\n      for (const row of documents) {\n        if (\n          row.providerCustomerId !== input.providerCustomerId ||\n          row.connectionId !== input.connectionId\n        ) {\n          continue;\n        }\n        hints.push({\n          connectionId: row.connectionId,\n          ownershipStatus: row.ownershipStatus,\n          providerCustomerId: row.providerCustomerId,\n          subject: row.subject,\n        });\n      }\n      return hints;\n    },\n    async projectForBinding(input) {\n      let resolved = 0;\n      let conflicts = 0;\n      for (const row of documents) {\n        if (row.providerCustomerId !== input.providerCustomerId) {\n          continue;\n        }\n        if (\n          row.connectionId !== input.connectionId &&\n          row.connectionId !== \"\"\n        ) {\n          continue;\n        }\n        if (\n          row.ownershipStatus === \"resolved\" &&\n          row.subject &&\n          (row.subject.kind !== input.subject.kind ||\n            row.subject.id !== input.subject.id)\n        ) {\n          row.ownershipStatus = \"conflict\";\n          conflicts += 1;\n          continue;\n        }\n        if (\n          row.ownershipStatus === \"unresolved\" ||\n          row.subject == null ||\n          (row.subject.kind === input.subject.kind &&\n            row.subject.id === input.subject.id)\n        ) {\n          row.connectionId = input.connectionId;\n          row.subject = input.subject;\n          row.ownershipStatus = \"resolved\";\n          resolved += 1;\n        }\n      }\n      return { conflicts, resolved };\n    },\n  };\n}\n\nexport async function reconcileBillingDocumentsForBinding(\n  store: BillingImportDocumentStore,\n  input: {\n    connectionId: string;\n    providerCustomerId: string;\n    subject: BillingSubjectRef;\n  }\n): Promise<{ conflicts: number; resolved: number }> {\n  return store.projectForBinding(input);\n}\n","import { decodeMollieListCursor } from \"../../runtime/local/providers/mollie/cursor.ts\";\nimport { mapGetCustomerToMollieSdk } from \"../../runtime/local/providers/mollie/dialect/customers.ts\";\nimport {\n  callMollieSdk,\n  clientFromPool,\n} 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 {\n  BillingImportCustomer,\n  BillingImportCustomerPage,\n} from \"../types.ts\";\nimport type { BillingCustomerImportPort } from \"./types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction metadataRecord(value: unknown): Record<string, unknown> {\n  if (!isRecord(value)) {\n    return {};\n  }\n  return value;\n}\n\nexport function projectMollieImportCustomer(\n  raw: unknown\n): BillingImportCustomer {\n  if (!isRecord(raw) || typeof raw.id !== \"string\" || raw.id.trim() === \"\") {\n    throw new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n  }\n  return {\n    email: optionalString(raw.email),\n    metadata: metadataRecord(raw.metadata),\n    name: optionalString(raw.name),\n    providerCustomerId: raw.id,\n    raw,\n  };\n}\n\nexport function createMollieBillingCustomerImportPort(input: {\n  connection?: {\n    environment: \"live\" | \"test\";\n    id: string;\n    provider: string;\n  };\n  context: BillingProviderExecutionContext;\n  pool: MollieSdkClientPool;\n}): BillingCustomerImportPort {\n  const connection = input.connection ?? {\n    environment: input.context.environment.name,\n    id: \"unbound\",\n    provider: \"mollie\",\n  };\n  return {\n    async getCustomer(getInput) {\n      const bound = getInput.connection ?? connection;\n      if (bound.provider !== \"mollie\") {\n        throw new Error(\"ATHENA_BILLING_IMPORT_PROVIDER_FAILED\");\n      }\n      const raw = await callMollieSdk({\n        client: clientFromPool(input.pool, input.context),\n        method: \"get\",\n        operation: \"customers.get\",\n        request: mapGetCustomerToMollieSdk({\n          id: getInput.customerId,\n        }),\n        resource: \"customers\",\n        unwrap: true,\n      });\n      return projectMollieImportCustomer(raw);\n    },\n    async listCustomers(page) {\n      const from =\n        page.cursor != null && page.cursor.length > 0\n          ? decodeMollieListCursor(page.cursor, \"customers\")\n          : undefined;\n      const raw = await callMollieSdk({\n        client: clientFromPool(input.pool, input.context),\n        method: \"list\",\n        operation: \"customers.list\",\n        request: { from, limit: page.limit },\n        resource: \"customers\",\n        unwrap: false,\n      });\n      const listed = await readOneMollieSdkPage(\n        raw,\n        \"customers\",\n        input.pool.apiBaseUrl()\n      );\n      const items: BillingImportCustomer[] = [];\n      for (const item of listed.items) {\n        items.push(projectMollieImportCustomer(item));\n      }\n      const result: BillingImportCustomerPage = {\n        items,\n        nextCursor: listed.nextCursor,\n      };\n      return result;\n    },\n  };\n}\n","import { createMollieProviderRequestError } from \"./errors.ts\";\nimport { mollieLinkHref } from \"./projection/links.ts\";\n\nexport type MollieListResource =\n  | \"customers\"\n  | \"invoices\"\n  | \"payment-links\"\n  | \"payments\"\n  | \"refunds\"\n  | \"subscriptions\"\n  | \"webhooks\";\n\nexport interface MollieListCursor {\n  from: string;\n  provider: \"mollie\";\n  resource: MollieListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n  const bytes = new TextEncoder().encode(value);\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n  return btoa(binary)\n    .replaceAll(\"+\", \"-\")\n    .replaceAll(\"/\", \"_\")\n    .replace(/[=]+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n  if (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n    throw new TypeError(\"Invalid base64url value.\");\n  }\n  const base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n  const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n  const binary = atob(padded);\n  const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n  return new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nexport function encodeMollieListCursor(cursor: MollieListCursor): string {\n  return encodeBase64Url(JSON.stringify(cursor));\n}\n\nexport function decodeMollieListCursor(\n  cursor: string,\n  resource: MollieListResource\n): string {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(decodeBase64Url(cursor));\n  } catch {\n    throw createMollieProviderRequestError({\n      fallbackMessage: \"Mollie list cursor is not valid.\",\n      kind: \"serialization\",\n      operation: `${resource}.list`,\n    });\n  }\n  if (\n    !isRecord(parsed) ||\n    parsed.provider !== \"mollie\" ||\n    parsed.resource !== resource ||\n    typeof parsed.from !== \"string\" ||\n    parsed.from.length === 0\n  ) {\n    throw createMollieProviderRequestError({\n      fallbackMessage: \"Mollie list cursor is not valid.\",\n      kind: \"serialization\",\n      operation: `${resource}.list`,\n    });\n  }\n  return parsed.from;\n}\n\nexport function fromParamFromMollieHref(\n  href: string,\n  input: {\n    apiBaseUrl: string;\n    resource: MollieListResource;\n  }\n): string | undefined {\n  let url: URL;\n  let base: URL;\n  try {\n    url = new URL(href);\n    base = new URL(input.apiBaseUrl);\n  } catch {\n    return undefined;\n  }\n  if (url.origin !== base.origin) {\n    return undefined;\n  }\n  if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n    return undefined;\n  }\n  if (url.protocol === \"http:\" && !isLoopbackHostname(url.hostname)) {\n    return undefined;\n  }\n  if (!mollieContinuationPathAllowed(url.pathname, input.resource)) {\n    return undefined;\n  }\n  const from = url.searchParams.get(\"from\");\n  return from != null && from.length > 0 ? from : undefined;\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n  return (\n    hostname === \"localhost\" ||\n    hostname === \"127.0.0.1\" ||\n    hostname === \"[::1]\" ||\n    hostname === \"::1\"\n  );\n}\n\nfunction mollieContinuationPathAllowed(\n  pathname: string,\n  resource: MollieListResource\n): boolean {\n  if (resource === \"subscriptions\") {\n    return (\n      pathname === \"/v2/subscriptions\" ||\n      /^\\/v2\\/customers\\/[^/]+\\/subscriptions$/u.test(pathname)\n    );\n  }\n  const prefixes = mollieListPathPrefixes(resource);\n  return prefixes.some(\n    (prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`)\n  );\n}\n\nfunction mollieListPathPrefixes(\n  resource: MollieListResource\n): readonly string[] {\n  switch (resource) {\n    case \"customers\":\n      return [\"/v2/customers\"];\n    case \"invoices\":\n      return [\"/v2/invoices\", \"/v2/sales-invoices\"];\n    case \"payment-links\":\n      return [\"/v2/payment-links\"];\n    case \"payments\":\n      return [\"/v2/payments\"];\n    case \"refunds\":\n      return [\"/v2/refunds\", \"/v2/payments\"];\n    case \"subscriptions\":\n      return [];\n    case \"webhooks\":\n      return [\"/v2/webhooks\"];\n    default: {\n      const exhaustive: never = resource;\n      return exhaustive;\n    }\n  }\n}\n\nfunction firstRecordField(\n  payload: Record<string, unknown>,\n  keys: string[]\n): Record<string, unknown> | undefined {\n  for (const key of keys) {\n    const value = payload[key];\n    if (isRecord(value)) {\n      return value;\n    }\n  }\n}\n\nexport function nextCursorFromMolliePayload(\n  payload: unknown,\n  resource: MollieListResource,\n  apiBaseUrl: string\n): string | null {\n  if (!isRecord(payload)) {\n    return null;\n  }\n  const href = mollieLinkHref(payload, \"next\");\n  if (href == null) {\n    return null;\n  }\n  const from = fromParamFromMollieHref(href, { apiBaseUrl, resource });\n  if (from == null) {\n    return null;\n  }\n  return encodeMollieListCursor({\n    from,\n    provider: \"mollie\",\n    resource,\n  });\n}\n\nexport function embeddedListItems(payload: unknown, key: string): unknown[] {\n  if (!isRecord(payload)) {\n    return [];\n  }\n  const embedded = firstRecordField(payload, [\"_embedded\", \"embedded\"]);\n  if (embedded == null) {\n    return [];\n  }\n  const items = embedded[key];\n  return Array.isArray(items) ? items : [];\n}\n","export { billingHalLinkHref as mollieLinkHref } from \"../../../../hal-link-href.ts\";\n","function isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isHttpHref(href: string): boolean {\n  try {\n    const url = new URL(href);\n    return url.protocol === \"http:\" || url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\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  raw: unknown,\n  relation: string\n): string | null {\n  if (!isRecord(raw) || relation.trim() === \"\") {\n    return null;\n  }\n  for (const groupKey of [\"_links\", \"links\"] as const) {\n    const group = raw[groupKey];\n    if (!isRecord(group)) {\n      continue;\n    }\n    const link = group[relation];\n    if (!isRecord(link)) {\n      continue;\n    }\n    const href = link.href;\n    if (typeof href === \"string\" && href.trim() !== \"\" && isHttpHref(href)) {\n      return href;\n    }\n  }\n  return null;\n}\n","import type {\n  BillingProviderCreateCustomerInput,\n  BillingProviderGetResourceInput,\n  BillingProviderUpdateCustomerInput,\n} from \"../../types.ts\";\n\nexport function mapCreateCustomerToMollieSdk(input: {\n  body: Record<string, unknown>;\n  idempotencyKey?: string;\n}): Record<string, unknown> {\n  return {\n    customerRequest: input.body,\n    idempotencyKey: input.idempotencyKey,\n  };\n}\n\nexport function customerCreateBody(\n  input: BillingProviderCreateCustomerInput\n): Record<string, unknown> {\n  const body: Record<string, unknown> = {};\n  if (input.name != null) {\n    body.name = input.name;\n  }\n  if (input.email != null) {\n    body.email = input.email;\n  }\n  if (input.metadata != null) {\n    body.metadata = input.metadata;\n  }\n  return body;\n}\n\nexport function mapGetCustomerToMollieSdk(\n  input: BillingProviderGetResourceInput\n): Record<string, unknown> {\n  return { customerId: input.id };\n}\n\nexport function mapUpdateCustomerToMollieSdk(\n  input: BillingProviderUpdateCustomerInput\n): Record<string, unknown> {\n  const body: Record<string, unknown> = {};\n  if (input.name != null) {\n    body.name = input.name;\n  }\n  if (input.email != null) {\n    body.email = input.email;\n  }\n  return {\n    customerId: input.id,\n    customerRequest: body,\n  };\n}\n","import type { MollieSdkClientPool } from \"./client-factory.ts\";\nimport {\n  asMollieSdkClient,\n  invokeMollieSdk,\n  requireMollieSdkMethod,\n  requireMollieSdkResource,\n  unwrapMollieSdkEntity,\n} from \"./invoke.ts\";\nimport type { MollieSdkResourceClient } from \"./types.ts\";\n\nexport async function callMollieSdk(input: {\n  client: object;\n  method: string;\n  operation: string;\n  request: Record<string, unknown>;\n  resource: keyof MollieSdkResourceClient;\n  unwrap?: boolean;\n}): Promise<unknown> {\n  const client = asMollieSdkClient(input.client);\n  const resource = requireMollieSdkResource(\n    client,\n    input.resource,\n    input.operation\n  );\n  const method = requireMollieSdkMethod(\n    resource as Record<string, unknown>,\n    input.method,\n    input.operation\n  );\n  const idempotencyKey = input.request.idempotencyKey;\n  const raw = await invokeMollieSdk({\n    idempotencyKeyPresent:\n      typeof idempotencyKey === \"string\" && idempotencyKey.trim() !== \"\",\n    invoke: () => method(input.request),\n    operation: input.operation,\n  });\n  return input.unwrap === false ? raw : unwrapMollieSdkEntity(raw);\n}\n\nexport function clientFromPool(\n  pool: MollieSdkClientPool,\n  context: {\n    credential: Parameters<MollieSdkClientPool[\"clientFor\"]>[0][\"credential\"];\n    operationScope?: \"organization\" | \"profile\" | \"automatic\";\n    target: { profileId?: string | null };\n  }\n): object {\n  return pool.clientFor({\n    credential: context.credential,\n    operationScope: context.operationScope,\n    requestedProfileId: context.target.profileId,\n  });\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  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction assertMollieSdkPayload(value: unknown, operation: string): unknown {\n  if (value === undefined) {\n    return;\n  }\n  if (!(isRecord(value) || Array.isArray(value))) {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Mollie ${operation} returned a non-object body.`,\n      kind: \"serialization\",\n      operation,\n    });\n  }\n  return value;\n}\n\nexport async function invokeMollieSdk<T>(input: {\n  invoke: () => Promise<T>;\n  operation: string;\n  idempotencyKeyPresent?: boolean;\n}): Promise<T> {\n  try {\n    const result = await input.invoke();\n    return assertMollieSdkPayload(result, input.operation) as T;\n  } catch (error) {\n    if (\n      error instanceof Error &&\n      error.name === \"AthenaBillingProviderRequestError\"\n    ) {\n      throw error;\n    }\n    normalizeMollieSdkError({\n      error,\n      idempotencyKeyPresent: input.idempotencyKeyPresent,\n      operation: input.operation,\n    });\n    throw new Error(\"ATHENA_BILLING_MOLLIE_SDK_ERROR_UNREACHABLE\");\n  }\n}\n\nexport function requireMollieSdkResource(\n  client: MollieSdkResourceClient,\n  name: keyof MollieSdkResourceClient,\n  operation: string\n): NonNullable<MollieSdkResourceClient[typeof name]> {\n  const resource = client[name];\n  if (resource == null || typeof resource !== \"object\") {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Injected Mollie SDK is missing ${String(name)} for ${operation}.`,\n      kind: \"unsupported_operation\",\n      operation,\n    });\n  }\n  return resource;\n}\n\nexport function requireMollieSdkMethod(\n  resource: Record<string, unknown>,\n  method: string,\n  operation: string\n): (request: Record<string, unknown>) => Promise<unknown> {\n  const fn = resource[method];\n  if (typeof fn !== \"function\") {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Injected Mollie SDK is missing ${method} for ${operation}.`,\n      kind: \"unsupported_operation\",\n      operation,\n    });\n  }\n  return fn.bind(resource) as (\n    request: Record<string, unknown>\n  ) => Promise<unknown>;\n}\n\nexport function asMollieSdkClient(client: object): MollieSdkResourceClient {\n  return client as MollieSdkResourceClient;\n}\n\nexport function unwrapMollieSdkEntity(value: unknown): unknown {\n  if (!isRecord(value)) {\n    return value;\n  }\n  if (isRecord(value.result)) {\n    return value.result;\n  }\n  if (isRecord(value.data)) {\n    return value.data;\n  }\n  return value;\n}\n","import { createMollieProviderRequestError } from \"../errors.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction statusFrom(error: unknown): number | undefined {\n  if (!isRecord(error)) {\n    return;\n  }\n  if (typeof error.statusCode === \"number\") {\n    return error.statusCode;\n  }\n  if (typeof error.status === \"number\") {\n    return error.status;\n  }\n  const httpMeta = error.httpMeta;\n  if (isRecord(httpMeta) && isRecord(httpMeta.response)) {\n    const status = httpMeta.response.status;\n    if (typeof status === \"number\") {\n      return status;\n    }\n  }\n}\n\nfunction bodyFrom(error: unknown): unknown {\n  if (!isRecord(error)) {\n    return;\n  }\n  return error.body ?? error.data ?? error.rawBody;\n}\n\nexport function normalizeMollieSdkError(input: {\n  error: unknown;\n  operation: string;\n  idempotencyKeyPresent?: boolean;\n}): never {\n  const { error, operation } = input;\n  if (error instanceof Error && error.name === \"AbortError\") {\n    throw createMollieProviderRequestError({\n      fallbackMessage: `Mollie ${operation} was aborted.`,\n      idempotencyKeyPresent: input.idempotencyKeyPresent,\n      kind: \"timeout\",\n      operation,\n      requestDispatchState: \"unknown\",\n    });\n  }\n  const status = statusFrom(error);\n  const body = bodyFrom(error);\n  const message =\n    error instanceof Error ? error.message : `Mollie ${operation} failed.`;\n  const kind =\n    status == null &&\n    error instanceof Error &&\n    /network|fetch|ECONN|ENOTFOUND|ETIMEDOUT/i.test(error.message)\n      ? \"network\"\n      : undefined;\n  throw createMollieProviderRequestError({\n    body,\n    fallbackMessage: message,\n    idempotencyKeyPresent: input.idempotencyKeyPresent,\n    kind,\n    operation,\n    requestDispatchState:\n      kind === \"network\" || status == null ? \"unknown\" : \"dispatched\",\n    status,\n  });\n}\n","import {\n  embeddedListItems,\n  type MollieListResource,\n  nextCursorFromMolliePayload,\n} from \"../cursor.ts\";\nimport { unwrapMollieSdkEntity } from \"./invoke.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstEmbeddedKey(resource: MollieListResource): string[] {\n  switch (resource) {\n    case \"payment-links\":\n      return [\"payment_links\", \"paymentLinks\"];\n    case \"webhooks\":\n      return [\"webhooks\"];\n    case \"invoices\":\n      return [\"sales_invoices\", \"salesInvoices\"];\n    default:\n      return [resource];\n  }\n}\n\nexport async function readOneMollieSdkPage(\n  result: unknown,\n  resource: MollieListResource,\n  apiBaseUrl: string\n): Promise<{ items: unknown[]; nextCursor: string | null }> {\n  let page = result;\n  if (\n    page != null &&\n    typeof page === \"object\" &&\n    Symbol.asyncIterator in page &&\n    typeof (page as { [Symbol.asyncIterator]?: unknown })[\n      Symbol.asyncIterator\n    ] === \"function\"\n  ) {\n    const iterator = (page as AsyncIterable<unknown>)[Symbol.asyncIterator]();\n    const first = await iterator.next();\n    page = first.done ? undefined : first.value;\n  }\n  const entity = unwrapMollieSdkEntity(page);\n  if (Array.isArray(entity)) {\n    return { items: entity, nextCursor: null };\n  }\n  if (isRecord(entity) && Array.isArray(entity.items)) {\n    return {\n      items: entity.items,\n      nextCursor: nextCursorFromMolliePayload(entity, resource, apiBaseUrl),\n    };\n  }\n  for (const key of firstEmbeddedKey(resource)) {\n    const items = embeddedListItems(entity, key);\n    if (items.length > 0) {\n      return {\n        items,\n        nextCursor: nextCursorFromMolliePayload(entity, resource, apiBaseUrl),\n      };\n    }\n  }\n  return {\n    items: [],\n    nextCursor: nextCursorFromMolliePayload(entity, resource, apiBaseUrl),\n  };\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  app?: { id?: string | null; name?: string | null } | null;\n  client?: string | null;\n}): string | undefined {\n  const fromApp = trimId(input.app?.id);\n  if (fromApp != null) {\n    return fromApp;\n  }\n  return trimId(input.client);\n}\n\nfunction trimId(value: string | null | undefined): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n","export {\n  type BillingConnectionSigningSecretCache,\n  rememberConnectionSigningSecret,\n  rememberConnectionSigningSecretSet,\n  signingSecretsForConnection,\n} from \"./cache.ts\";\nexport {\n  openBillingWebhookSecret,\n  sealBillingWebhookSecret,\n} from \"./envelope.ts\";\nexport { resolveBillingWebhookMasterKey } from \"./master-key.ts\";\nexport { createMemoryBillingWebhookSecretStore } from \"./memory.ts\";\nexport { createPostgresBillingWebhookSecretStore } from \"./postgres.ts\";\nexport type {\n  BillingWebhookSecretStore,\n  BillingWebhookSigningSecretSet,\n} from \"./types.ts\";\n","import { flattenSigningSecrets } from \"../config.ts\";\nimport type { BillingSigningSecretSet } from \"../types.ts\";\n\nexport type BillingConnectionSigningSecretCache = Map<string, string[]>;\n\nexport function rememberConnectionSigningSecret(\n  cache: BillingConnectionSigningSecretCache,\n  connectionId: string,\n  secret: string\n): void {\n  const trimmed = secret.trim();\n  if (trimmed.length === 0) {\n    return;\n  }\n  const existing = cache.get(connectionId) ?? [];\n  if (!existing.includes(trimmed)) {\n    existing.push(trimmed);\n    cache.set(connectionId, existing);\n  }\n}\n\nexport function rememberConnectionSigningSecretSet(\n  cache: BillingConnectionSigningSecretCache,\n  connectionId: string,\n  secrets: BillingSigningSecretSet\n): void {\n  for (const secret of flattenSigningSecrets(secrets)) {\n    rememberConnectionSigningSecret(cache, connectionId, secret);\n  }\n}\n\nexport function signingSecretsForConnection(\n  cache: BillingConnectionSigningSecretCache,\n  connectionId: string | undefined\n): readonly string[] {\n  if (connectionId == null || connectionId.length === 0) {\n    return [];\n  }\n  return cache.get(connectionId) ?? [];\n}\n","import {\n  createCipheriv,\n  createDecipheriv,\n  createHash,\n  randomBytes,\n} from \"node:crypto\";\n\nconst VERSION = \"v1\";\nconst IV_LENGTH = 12;\nconst AUTH_TAG_LENGTH = 16;\n\nfunction aesKey(masterKey: string): Buffer {\n  return createHash(\"sha256\").update(masterKey, \"utf8\").digest();\n}\n\nexport function sealBillingWebhookSecret(\n  secret: string,\n  masterKey: string\n): string {\n  const key = aesKey(masterKey);\n  const iv = randomBytes(IV_LENGTH);\n  const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n  const encrypted = Buffer.concat([\n    cipher.update(secret, \"utf8\"),\n    cipher.final(),\n  ]);\n  const tag = cipher.getAuthTag();\n  return `${VERSION}.${iv.toString(\"base64url\")}.${encrypted.toString(\"base64url\")}.${tag.toString(\"base64url\")}`;\n}\n\nexport function openBillingWebhookSecret(\n  ciphertext: string,\n  masterKey: string\n): string {\n  const parts = ciphertext.split(\".\");\n  if (parts.length !== 4 || parts[0] !== VERSION) {\n    throw new Error(\"Unsupported billing webhook secret envelope.\");\n  }\n  const ivPart = parts[1];\n  const dataPart = parts[2];\n  const tagPart = parts[3];\n  if (ivPart == null || dataPart == null || tagPart == null) {\n    throw new Error(\"Unsupported billing webhook secret envelope.\");\n  }\n  const iv = Buffer.from(ivPart, \"base64url\");\n  const data = Buffer.from(dataPart, \"base64url\");\n  const tag = Buffer.from(tagPart, \"base64url\");\n  if (iv.length !== IV_LENGTH || tag.length !== AUTH_TAG_LENGTH) {\n    throw new Error(\"Invalid billing webhook secret envelope.\");\n  }\n  const key = aesKey(masterKey);\n  const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n  decipher.setAuthTag(tag);\n  return Buffer.concat([decipher.update(data), decipher.final()]).toString(\n    \"utf8\"\n  );\n}\n","export function resolveBillingWebhookMasterKey(input: {\n  configured?: string;\n  databaseUrl?: string;\n}): string | undefined {\n  const fromEnv = process.env.ATHENA_BILLING_WEBHOOK_MASTER_KEY?.trim();\n  if (fromEnv && fromEnv.length > 0) {\n    return fromEnv;\n  }\n  const configured = input.configured?.trim();\n  if (configured && configured.length > 0) {\n    return configured;\n  }\n  const allowTestKey =\n    process.env.NODE_ENV !== \"production\" &&\n    process.env.ATHENA_BILLING_ALLOW_TEST_WEBHOOK_KEY === \"1\";\n  if (allowTestKey) {\n    return \"athena-billing-webhook-test-master-key\";\n  }\n}\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport { fingerprintBillingSigningSecret } from \"../ownership.ts\";\nimport {\n  openBillingWebhookSecret,\n  sealBillingWebhookSecret,\n} from \"./envelope.ts\";\nimport type { BillingWebhookSecretStore } from \"./types.ts\";\n\nexport function createPostgresBillingWebhookSecretStore(input: {\n  masterKey: string;\n  sql: BillingSqlExecutor;\n}): BillingWebhookSecretStore {\n  const masterKey = input.masterKey.trim();\n  if (masterKey.length === 0) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_BILLING_INGESTION_CONFIG_INVALID\",\n      \"Encrypted billing webhook secrets require ATHENA_BILLING_WEBHOOK_MASTER_KEY (or billing.ingestion.webhooks.secretMasterKey).\",\n      \"billing\"\n    );\n  }\n  const sql = input.sql;\n  return {\n    async resolve(connectionId) {\n      const result = await sql.query(\n        `\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        [connectionId]\n      );\n      let current: string | undefined;\n      const previous: string[] = [];\n      for (const row of result.rows) {\n        const secret = openBillingWebhookSecret(\n          String(row.ciphertext),\n          masterKey\n        );\n        if (row.status === \"current\" && current == null) {\n          current = secret;\n          continue;\n        }\n        if (row.status === \"previous\") {\n          previous.push(secret);\n        }\n      }\n      return {\n        previous,\n        ...(current ? { current } : {}),\n      };\n    },\n    async rotate(inputRotate) {\n      await replaceConnectionSecrets(sql, masterKey, inputRotate.connectionId, [\n        { secret: inputRotate.current, status: \"current\" },\n        ...inputRotate.previous.map((secret) => ({\n          secret,\n          status: \"previous\" as const,\n        })),\n      ]);\n    },\n    async storeCurrent(storeInput) {\n      const existing = await sql.query(\n        `\nSELECT fingerprint, ciphertext, status\nFROM athena_internal.billing_webhook_signing_secrets\nWHERE connection_id = $1::uuid AND status IN ('current', 'previous')\n`,\n        [storeInput.connectionId]\n      );\n      const next: { secret: string; status: \"current\" | \"previous\" }[] = [\n        { secret: storeInput.secret, status: \"current\" },\n      ];\n      for (const row of existing.rows) {\n        if (String(row.fingerprint) === storeInput.fingerprint) {\n          continue;\n        }\n        const secret = openBillingWebhookSecret(\n          String(row.ciphertext),\n          masterKey\n        );\n        if (row.status === \"current\") {\n          next.push({ secret, status: \"previous\" });\n        }\n      }\n      await replaceConnectionSecrets(\n        sql,\n        masterKey,\n        storeInput.connectionId,\n        next\n      );\n    },\n  };\n}\n\nasync function replaceConnectionSecrets(\n  sql: BillingSqlExecutor,\n  masterKey: string,\n  connectionId: string,\n  secrets: readonly { secret: string; status: \"current\" | \"previous\" }[]\n): Promise<void> {\n  await sql.query(\n    `\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    [connectionId]\n  );\n  for (const entry of secrets) {\n    const fingerprint = fingerprintBillingSigningSecret(entry.secret);\n    const ciphertext = sealBillingWebhookSecret(entry.secret, masterKey);\n    await sql.query(\n      `\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      [connectionId, fingerprint, ciphertext, entry.status]\n    );\n  }\n}\n","import type { PostgresPoolManager } from \"../../../../postgres/pool/manager.ts\";\nimport {\n  ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n  ATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n  AthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport { eventIngressDatabaseFromManager } 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 {\n  createBillingImportDatabaseFromManager,\n  createBillingSqlExecutorFromManager,\n} from \"../../../import/database.ts\";\nimport {\n  listActiveBillingImportConnections,\n  resolveBillingImportConnection,\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  createConnectionProviderExecutionContext,\n  eligibleBillingConnectionsForProcess,\n  mollieConfigForCredentialReference,\n  pickSoleEligibleBillingConnection,\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\nexport interface EventIngressAttachHost {\n  eventIngressRuntime?: unknown;\n  postgresRuntime?: {\n    getPoolManager(): Promise<PostgresPoolManager>;\n  };\n}\n\nasync function postgresManager(\n  internals: EventIngressAttachHost\n): Promise<PostgresPoolManager | undefined> {\n  const owned = internals.postgresRuntime;\n  if (!owned) {\n    return;\n  }\n  return owned.getPoolManager();\n}\n\nexport function attachEventIngressRuntime(\n  internals: EventIngressAttachHost,\n  input: {\n    configuredProviders?: BillingProviderConfigMap;\n    registry: BillingProviderRegistry;\n    testMode?: boolean;\n    resolveSigningSecrets?: (connectionId: string) => readonly string[];\n    signingSecrets?: readonly string[];\n  }\n): void {\n  const getSql = async (): Promise<BillingSqlExecutor | undefined> => {\n    const manager = await postgresManager(internals);\n    if (!manager) {\n      return;\n    }\n    return createBillingSqlExecutorFromManager(manager);\n  };\n  const handler = createBillingEventIngressHandler({\n    observability: createLazyBillingWebhookIngressObservability(getSql),\n    onAuthoritativeDocument: async ({ document, ingress }) => {\n      const manager = await postgresManager(internals);\n      if (!manager) {\n        return;\n      }\n      const sql = createBillingSqlExecutorFromManager(manager);\n      if (document.kind === \"payment\") {\n        try {\n          await advanceSelfSubscriptionEnrollment({\n            configuredProviders: input.configuredProviders,\n            document,\n            registry: input.registry,\n            sql,\n            testMode: input.testMode,\n          });\n        } catch (error) {\n          console.error(\"[athena-billing] enrollment advance failed\", {\n            error: error instanceof Error ? error.message : String(error),\n            ingressId: ingress.id,\n          });\n          throw error;\n        }\n      }\n      const providerCustomerId = document.providerCustomerId;\n      const connectionId = ingress.connectionId;\n      if (\n        typeof providerCustomerId !== \"string\" ||\n        providerCustomerId.length === 0 ||\n        typeof connectionId !== \"string\" ||\n        connectionId.length === 0\n      ) {\n        return;\n      }\n      try {\n        if (typeof connectionId === \"string\" && connectionId.length > 0) {\n          const kind =\n            ingress.operation === \"webhook.mollie.classic\"\n              ? \"classic\"\n              : \"next_gen\";\n          await createPostgresBillingWebhookRegistrationStore(\n            sql\n          ).touchLastDelivery({\n            connectionId,\n            kind,\n          });\n        }\n        await runBillingCustomerImportWithPostgres({\n          configuredProviders: input.configuredProviders,\n          connectionId,\n          customerId: providerCustomerId,\n          database: createBillingImportDatabaseFromManager(manager),\n          dryRun: false,\n          reconciliationContext: billingReconciliationContextFromIngress({\n            connectionId,\n            correlationId: ingress.correlationId,\n            ingressId: ingress.id,\n            provider: document.provider,\n            traceId: ingress.traceId,\n          }),\n          sql,\n          testMode: input.testMode,\n          trigger: \"webhook\",\n        });\n      } catch (error) {\n        console.error(\"[athena-billing] webhook reconciliation failed\", {\n          connectionId,\n          error: error instanceof Error ? error.message : String(error),\n          ingressId: ingress.id,\n        });\n        throw error;\n      }\n    },\n    port: createMollieWebhookPort({\n      resolveResource: createMollieResourceResolver({\n        configuredProviders: input.configuredProviders,\n        getSql,\n        testMode: input.testMode,\n      }),\n      ...(input.resolveSigningSecrets\n        ? { resolveSigningSecrets: input.resolveSigningSecrets }\n        : {}),\n      signingSecrets: input.signingSecrets,\n      verification:\n        input.resolveSigningSecrets ||\n        (input.signingSecrets && input.signingSecrets.length > 0)\n          ? \"signature_and_refetch\"\n          : \"authoritative_refetch\",\n    }),\n  });\n\n  internals.eventIngressRuntime = {\n    async ingest(ingress: AthenaIngressIR) {\n      const manager = await postgresManager(internals);\n      if (!manager) {\n        throw new AthenaEventIngressError({\n          code: ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED,\n          domain: \"billing\",\n          message:\n            \"Financial webhook ingest requires durable PostgreSQL persistence.\",\n          retryable: true,\n        });\n      }\n      const sql = createBillingSqlExecutorFromManager(manager);\n      const bound = await bindBillingIngressConnection(ingress, sql, {\n        configuredProviders: input.configuredProviders,\n        testMode: input.testMode,\n      });\n      const sqlRepos = createSqlBillingRepositories();\n      const runtime = createEventIngressRuntime({\n        context: {\n          database: eventIngressDatabaseFromManager(manager),\n          domain: sqlRepos,\n          persistence: createSqlEventIngressPersistence(),\n        },\n        handler,\n      });\n      return runtime.ingest(bound);\n    },\n  };\n}\n\nasync function bindBillingIngressConnection(\n  ingress: AthenaIngressIR,\n  sql: BillingSqlExecutor,\n  input: {\n    configuredProviders?: BillingProviderConfigMap;\n    testMode?: boolean;\n  }\n): Promise<AthenaIngressIR> {\n  if (ingress.connectionId != null && ingress.connectionId.length > 0) {\n    return ingress;\n  }\n  const only = await resolveSoleActiveMollieConnection(sql, input);\n  return { ...ingress, connectionId: only.id };\n}\n\nfunction unavailableMollieRefetch(message: string): never {\n  throw new AthenaEventIngressError({\n    code: ATHENA_INGRESS_MOLLIE_UNAVAILABLE,\n    domain: \"billing\",\n    message,\n    provider: \"mollie\",\n    retryable: false,\n  });\n}\n\nfunction createMollieResourceResolver(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  getSql: () => Promise<BillingSqlExecutor | undefined>;\n  testMode?: boolean;\n}): (request: {\n  connectionId?: string;\n  id: string;\n  kind: \"payment\" | \"subscription\" | \"invoice\";\n}) => Promise<unknown> {\n  const pools = new Map<string, MollieSdkClientPool>();\n  return async (request) => {\n    const sql = await input.getSql();\n    if (sql == null) {\n      unavailableMollieRefetch(\n        \"Mollie webhook resource refetch requires PostgreSQL so the connection credential can be resolved.\"\n      );\n    }\n    const connection =\n      request.connectionId != null && request.connectionId.length > 0\n        ? await resolveBillingImportConnection(sql, {\n            connectionId: request.connectionId,\n            provider: \"mollie\",\n          })\n        : await resolveSoleActiveMollieConnection(sql, {\n            configuredProviders: input.configuredProviders,\n            testMode: input.testMode,\n          });\n    const mollie = mollieConfigForCredentialReference(\n      input.configuredProviders,\n      connection.credentialReference\n    );\n    if (mollie == null) {\n      unavailableMollieRefetch(\n        `Mollie is not configured for credential_reference \"${connection.credentialReference}\".`\n      );\n    }\n    let pool = pools.get(connection.credentialReference);\n    if (pool == null) {\n      pool = new MollieSdkClientPool(normalizeMollieRuntimeConfig(mollie));\n      pools.set(connection.credentialReference, pool);\n    }\n    const context = createConnectionProviderExecutionContext({\n      configuredProviders: input.configuredProviders,\n      connection,\n      operationScope: request.kind === \"invoice\" ? \"organization\" : \"profile\",\n    });\n    return resolveMollieWebhookResource({\n      credential: context.credential,\n      id: request.id,\n      kind: request.kind,\n      operationScope: context.operationScope,\n      pool,\n      profileId: context.target.profileId,\n    });\n  };\n}\n\nasync function resolveSoleActiveMollieConnection(\n  sql: BillingSqlExecutor,\n  input: {\n    configuredProviders?: BillingProviderConfigMap;\n    testMode?: boolean;\n  }\n) {\n  const active = await listActiveBillingImportConnections(sql, \"mollie\");\n  const eligible = eligibleBillingConnectionsForProcess({\n    configuredProviders: input.configuredProviders,\n    connections: active,\n    processTestMode: input.testMode,\n  });\n  const only = pickSoleEligibleBillingConnection(eligible);\n  if (only == null && eligible.length > 1) {\n    unavailableMollieRefetch(\n      `Multiple active Mollie billing connections: webhook refetch requires ingress.connectionId (${eligible\n        .map((connection) => `${connection.id}:${connection.environment}`)\n        .join(\", \")}).`\n    );\n  }\n  if (only == null) {\n    unavailableMollieRefetch(\n      \"No active Mollie billing connection is available for webhook resource refetch.\"\n    );\n  }\n  return only;\n}\n","export const ATHENA_EVENT_INGRESS_UNAVAILABLE =\n  \"ATHENA_EVENT_INGRESS_UNAVAILABLE\" as const;\nexport const ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED =\n  \"ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\" as const;\nexport const ATHENA_EVENT_INGRESS_FAILED =\n  \"ATHENA_EVENT_INGRESS_FAILED\" as const;\nexport const ATHENA_INGRESS_MOLLIE_UNAVAILABLE =\n  \"ATHENA_INGRESS_MOLLIE_UNAVAILABLE\" as const;\nexport const ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID =\n  \"ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\" as const;\nexport const ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID =\n  \"ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID\" as const;\n\nexport type AthenaEventIngressErrorCode =\n  | typeof ATHENA_EVENT_INGRESS_UNAVAILABLE\n  | typeof ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED\n  | typeof ATHENA_EVENT_INGRESS_FAILED\n  | typeof ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n  | typeof ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID\n  | typeof ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID;\n\nexport class AthenaEventIngressError extends Error {\n  readonly code: AthenaEventIngressErrorCode;\n  readonly domain: \"billing\" | \"ingress\";\n  readonly retryable: boolean;\n  readonly provider?: string;\n  /** Safe envelope facts only — never raw webhook bodies or secrets. */\n  readonly diagnostics?: Readonly<{\n    bodyBytes?: number;\n    bodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n    connectionId?: string;\n    contentType?: string;\n    operation?: string;\n    providerStatus?: number;\n    retryable?: boolean;\n    stage?: \"parse\" | \"verify\" | \"refetch\" | \"project\" | \"persist\" | \"unknown\";\n  }>;\n\n  constructor(input: {\n    code: AthenaEventIngressErrorCode;\n    message: string;\n    domain?: \"billing\" | \"ingress\";\n    retryable?: boolean;\n    provider?: string;\n    diagnostics?: {\n      bodyBytes?: number;\n      bodyKind?: \"empty\" | \"json\" | \"form\" | \"unknown\";\n      connectionId?: string;\n      contentType?: string;\n      operation?: string;\n      providerStatus?: number;\n      retryable?: boolean;\n      stage?: \"parse\" | \"verify\" | \"refetch\" | \"project\" | \"persist\" | \"unknown\";\n    };\n  }) {\n    super(input.message);\n    this.name = \"AthenaEventIngressError\";\n    this.code = input.code;\n    this.domain = input.domain ?? \"ingress\";\n    this.retryable = input.retryable ?? false;\n    if (input.provider) {\n      this.provider = input.provider;\n    }\n    if (input.diagnostics) {\n      this.diagnostics = input.diagnostics;\n    }\n  }\n}\n\nexport function isAthenaEventIngressError(\n  error: unknown\n): error is AthenaEventIngressError {\n  if (error instanceof AthenaEventIngressError) {\n    return true;\n  }\n  if (error == null || typeof error !== \"object\") {\n    return false;\n  }\n  const record = error as { code?: unknown; name?: unknown };\n  return (\n    record.name === \"AthenaEventIngressError\" && typeof record.code === \"string\"\n  );\n}\n\nexport function eventIngressHttpStatus(error: unknown): number {\n  if (!isAthenaEventIngressError(error)) {\n    return 400;\n  }\n  if (error.code === ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID) {\n    return 401;\n  }\n  if (\n    error.code === ATHENA_EVENT_INGRESS_UNAVAILABLE ||\n    error.code === ATHENA_EVENT_INGRESS_PERSISTENCE_REQUIRED ||\n    error.code === ATHENA_INGRESS_MOLLIE_UNAVAILABLE\n  ) {\n    return 503;\n  }\n  return 400;\n}\n","import { ATHENA_POSTGRES_POOL_DEFAULTS } from \"../../postgres/driver.ts\";\nimport { PostgresDeadline } from \"../../postgres/pool/deadline.ts\";\nimport type { PostgresPoolManager } from \"../../postgres/pool/manager.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressQueryResult,\n} from \"./persistence.ts\";\n\nfunction toEventIngressQueryResult<T>(result: {\n  rowCount?: number | null;\n  rows: unknown[];\n}): EventIngressQueryResult<T> {\n  return {\n    rowCount: result.rowCount ?? result.rows.length,\n    rows: result.rows as T[],\n  };\n}\n\nexport function eventIngressDatabaseFromManager(\n  manager: PostgresPoolManager\n): EventIngressDatabase {\n  const query = async <T = Record<string, unknown>>(\n    text: string,\n    values?: unknown[]\n  ) => {\n    const result = await manager.query(\n      {\n        deadline: PostgresDeadline.after(\n          ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n        ),\n        target: \"pooled\",\n        workload: \"billing\",\n      },\n      text,\n      values\n    );\n    return toEventIngressQueryResult<T>(result);\n  };\n  return {\n    query,\n    async transaction(fn) {\n      const lease = await manager.acquire({\n        deadline: PostgresDeadline.after(\n          ATHENA_POSTGRES_POOL_DEFAULTS.connectionTimeoutMillis\n        ),\n        target: \"pooled\",\n        workload: \"billing\",\n      });\n      const client = lease.client;\n      const tx: EventIngressDatabase = {\n        async query<T = Record<string, unknown>>(\n          text: string,\n          values?: unknown[]\n        ) {\n          const result = await client.query(text, values);\n          return toEventIngressQueryResult<T>(result);\n        },\n        transaction(inner) {\n          return inner(tx);\n        },\n      };\n      try {\n        await client.query(\"BEGIN\");\n        const result = await fn(tx);\n        await client.query(\"COMMIT\");\n        return result;\n      } catch (error) {\n        try {\n          await client.query(\"ROLLBACK\");\n        } catch (rollbackError) {\n          lease.destroy(rollbackError);\n          throw error;\n        }\n        throw error;\n      } finally {\n        lease.release();\n      }\n    },\n  };\n}\n","import type { CanonicalEventIR } from \"../events/ir.ts\";\nimport type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressPersistence,\n} from \"./persistence.ts\";\n\nexport interface EventIngressResult<\n  TDocument = unknown,\n  TEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n  document?: TDocument;\n  duplicate: boolean;\n  events: readonly TEvent[];\n  ignored?: boolean;\n  /**\n   * Downstream customer import / reconciliation after the ingress row is\n   * persisted. HTTP 202 can still report `failed` here.\n   */\n  reconciliation?: \"completed\" | \"failed\" | \"skipped\";\n}\n\nexport interface EventIngressRuntimeContext<TDomain = unknown> {\n  database: EventIngressDatabase;\n  domain: TDomain;\n  persistence: EventIngressPersistence;\n}\n\nexport interface EventIngressDomainHandler<\n  TDomain = unknown,\n  TDocument = unknown,\n  TEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n  ingest(\n    ingress: AthenaIngressIR,\n    runtime: EventIngressRuntimeContext<TDomain>\n  ): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport interface EventIngressRuntime<\n  TDocument = unknown,\n  TEvent extends CanonicalEventIR = CanonicalEventIR,\n> {\n  ingest(\n    ingress: AthenaIngressIR\n  ): Promise<EventIngressResult<TDocument, TEvent>>;\n}\n\nexport function createEventIngressRuntime<\n  TDomain = unknown,\n  TDocument = unknown,\n  TEvent extends CanonicalEventIR = CanonicalEventIR,\n>(input: {\n  context: EventIngressRuntimeContext<TDomain>;\n  handler: EventIngressDomainHandler<TDomain, TDocument, TEvent>;\n}): EventIngressRuntime<TDocument, TEvent> {\n  return {\n    ingest(ingress) {\n      return input.handler.ingest(ingress, input.context);\n    },\n  };\n}\n","import type { AthenaIngressIR } from \"./ir.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressPersistence,\n  EventIngressRecord,\n} from \"./persistence.ts\";\n\nfunction asRecord(value: unknown): Record<string, string> {\n  if (value && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, string>;\n  }\n  return {};\n}\n\nexport type EventIngressRow = {\n  id: string;\n  domain: string;\n  operation: string | null;\n  provider: string | null;\n  provider_event_id: string | null;\n  connection_id: string | null;\n  status: EventIngressRecord[\"status\"];\n  body: Buffer;\n  headers: unknown;\n  received_at: Date;\n  correlation_id: string | null;\n  trace_id: string | null;\n  attempt_count: number;\n  failure_stage?: string | null;\n  first_failed_at?: Date | null;\n  next_attempt_at?: Date | null;\n  lease_expires_at?: Date | null;\n};\n\nexport function mapIngressRow(row: EventIngressRow): EventIngressRecord {\n  const headers = asRecord(row.headers);\n  return {\n    attemptCount: row.attempt_count,\n    body: new Uint8Array(row.body),\n    connectionId: row.connection_id,\n    correlationId: row.correlation_id,\n    domain: row.domain,\n    failureStage: row.failure_stage ?? null,\n    firstFailedAt: row.first_failed_at ? new Date(row.first_failed_at) : null,\n    headers,\n    id: row.id,\n    leaseExpiresAt: row.lease_expires_at\n      ? new Date(row.lease_expires_at)\n      : null,\n    nextAttemptAt: row.next_attempt_at ? new Date(row.next_attempt_at) : null,\n    operation: row.operation,\n    provider: row.provider,\n    providerEventId: row.provider_event_id,\n    receivedAt: new Date(row.received_at),\n    status: row.status,\n    traceId: row.trace_id,\n  };\n}\n\nfunction insertValues(\n  ingress: AthenaIngressIR,\n  meta: { provider: string | null; providerEventId: string | null }\n): unknown[] {\n  return [\n    ingress.id,\n    ingress.domain,\n    ingress.operation,\n    meta.provider,\n    meta.providerEventId,\n    ingress.connectionId ?? null,\n    ingress.receivedAt.toISOString(),\n    Buffer.from(ingress.body),\n    JSON.stringify(ingress.headers),\n    ingress.correlationId ?? null,\n    ingress.traceId ?? null,\n  ];\n}\n\nasync function lockProviderEventClaim(\n  tx: EventIngressDatabase,\n  input: {\n    domain: string;\n    provider: string | null;\n    providerEventId: string;\n  }\n): Promise<void> {\n  await tx.query(\n    `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    [input.domain, input.provider ?? \"\", input.providerEventId]\n  );\n}\n\nasync function selectByProviderEvent(\n  tx: EventIngressDatabase,\n  input: {\n    domain: string;\n    provider: string | null;\n    providerEventId: string;\n  }\n): Promise<{ id: string } | undefined> {\n  const result = await tx.query<{ id: string }>(\n    `\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    [input.domain, input.provider, input.providerEventId]\n  );\n  return result.rows[0];\n}\n\nfunction duplicateFromRow(\n  row: { id: string },\n  ingressId: string\n): { duplicate: boolean; ingressId: string } {\n  if (row.id !== ingressId) {\n    return {\n      duplicate: true,\n      ingressId: row.id,\n    };\n  }\n  return {\n    duplicate: false,\n    ingressId: row.id,\n  };\n}\n\nasync function insertReceivedById(\n  tx: EventIngressDatabase,\n  ingress: AthenaIngressIR,\n  provider: string | null\n): Promise<void> {\n  await tx.query(\n    `\nINSERT INTO athena.event_ingress (\n  id, domain, operation, 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, $9::jsonb, 'received', $10, $11, 0\n)\nON CONFLICT (id) DO NOTHING\n`,\n    insertValues(ingress, { provider, providerEventId: null })\n  );\n}\n\nasync function claimProviderEventOnRow(\n  tx: EventIngressDatabase,\n  input: {\n    ingressId: string;\n    domain: string;\n    provider: string | null;\n    providerEventId: string;\n  }\n): Promise<string | undefined> {\n  const result = await tx.query<{ id: string }>(\n    `\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    [input.ingressId, input.domain, input.provider, input.providerEventId]\n  );\n  return result.rows[0]?.id;\n}\n\nasync function insertReceivedByProviderEvent(\n  tx: EventIngressDatabase,\n  ingress: AthenaIngressIR,\n  meta: { provider: string | null; providerEventId: string }\n): Promise<string | undefined> {\n  const result = await tx.query<{ id: string }>(\n    `\nINSERT INTO athena.event_ingress (\n  id, domain, operation, 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, $9::jsonb, 'received', $10, $11, 0\n)\nON CONFLICT (domain, provider, provider_event_id) WHERE provider_event_id IS NOT NULL\nDO NOTHING\nRETURNING id\n`,\n    insertValues(ingress, meta)\n  );\n  return result.rows[0]?.id;\n}\n\nexport function createSqlEventIngressPersistence(): EventIngressPersistence {\n  return {\n    async insertReceived(tx, ingress, meta) {\n      const provider = meta.provider ?? null;\n      const providerEventId = meta.providerEventId;\n      if (!providerEventId) {\n        await insertReceivedById(tx, ingress, provider);\n        return {\n          duplicate: false,\n          ingressId: ingress.id,\n        };\n      }\n      await lockProviderEventClaim(tx, {\n        domain: ingress.domain,\n        provider,\n        providerEventId,\n      });\n      const existing = await selectByProviderEvent(tx, {\n        domain: ingress.domain,\n        provider,\n        providerEventId,\n      });\n      if (existing) {\n        return duplicateFromRow(existing, ingress.id);\n      }\n      const claimedOnRow = await claimProviderEventOnRow(tx, {\n        domain: ingress.domain,\n        ingressId: ingress.id,\n        provider,\n        providerEventId,\n      });\n      if (claimedOnRow) {\n        return {\n          duplicate: false,\n          ingressId: claimedOnRow,\n        };\n      }\n      const afterClaim = await selectByProviderEvent(tx, {\n        domain: ingress.domain,\n        provider,\n        providerEventId,\n      });\n      if (afterClaim) {\n        return duplicateFromRow(afterClaim, ingress.id);\n      }\n      const inserted = await insertReceivedByProviderEvent(tx, ingress, {\n        provider,\n        providerEventId,\n      });\n      if (inserted) {\n        return {\n          duplicate: false,\n          ingressId: inserted,\n        };\n      }\n      const afterInsert = await selectByProviderEvent(tx, {\n        domain: ingress.domain,\n        provider,\n        providerEventId,\n      });\n      if (afterInsert) {\n        return duplicateFromRow(afterInsert, ingress.id);\n      }\n      return {\n        duplicate: false,\n        ingressId: ingress.id,\n      };\n    },\n    async lock(tx, ingressId) {\n      const result = await tx.query<EventIngressRow>(\n        \"SELECT * FROM athena.event_ingress WHERE id = $1 FOR UPDATE\",\n        [ingressId]\n      );\n      const row = result.rows[0];\n      if (!row) {\n        return;\n      }\n      return mapIngressRow(row);\n    },\n    async markProcessed(tx, input) {\n      await tx.query(\n        `\nUPDATE athena.event_ingress\nSET status = 'processed', processed_at = now()\nWHERE id = $1\n`,\n        [input.ingressId]\n      );\n      void input.eventIds;\n    },\n    async markStatus(tx, input) {\n      await tx.query(\n        `\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        [\n          input.ingressId,\n          input.status,\n          input.error == null ? null : JSON.stringify(input.error),\n          input.failureStage ?? null,\n          input.nextAttemptAt?.toISOString() ?? null,\n          input.leaseExpiresAt?.toISOString() ?? null,\n          input.firstFailedAt?.toISOString() ?? null,\n          input.lastFailedAt?.toISOString() ?? null,\n        ]\n      );\n    },\n  };\n}\n\nexport function toDirectIngress(ingress: AthenaIngressIR): AthenaIngressIR {\n  return { ...ingress, transport: { kind: \"direct\" } };\n}\n","import {\n  assertBillingWebhookObservabilitySchema,\n  withBillingObservabilitySchemaGuard,\n} from \"../../observability/schema-guard.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingWebhookRegistrationRecord } from \"../reconciliation/types.ts\";\nimport type {\n  BillingWebhookKind,\n  ResolvedBillingIngressEndpoints,\n} from \"../types.ts\";\nimport type {\n  BillingWebhookDeliveryEvent,\n  BillingWebhookDeliveryHealthRow,\n} from \"./delivery-health.ts\";\nimport {\n  createMemoryBillingWebhookDeliveryHealthStore,\n  createPostgresBillingWebhookDeliveryHealthStore,\n} from \"./delivery-health.ts\";\nimport type {\n  BillingWebhookIngressStage,\n  BillingWebhookReconciliationOutcome,\n} from \"./stages.ts\";\nimport type {\n  BillingRejectedIngressClassification,\n  BillingRejectedIngressPayloadEvidence,\n} from \"./rejection-evidence.ts\";\n\nexport interface BillingWebhookIngressStageRecord {\n  connectionId?: string;\n  correlationId?: string;\n  errorMessage?: string;\n  ingressId?: string;\n  kind: BillingWebhookKind;\n  metadata?: Record<string, unknown>;\n  occurredAt: Date;\n  operation?: string;\n  provider?: string;\n  rejectionCode?: string;\n  stage: BillingWebhookIngressStage | \"failed\";\n  status?: string;\n  traceId?: string;\n}\n\nexport interface BillingWebhookIngressRejectionEvidence {\n  payload: BillingRejectedIngressPayloadEvidence;\n  expectedEnvelope: Record<string, unknown>;\n}\n\nexport interface BillingWebhookIngressRejectionRecord {\n  bytes: number;\n  classification: BillingRejectedIngressClassification;\n  code: string;\n  connectionId?: string;\n  contentType?: string;\n  digest?: string;\n  expectedEnvelope: Record<string, unknown>;\n  ingressId?: string;\n  kind: BillingWebhookKind;\n  occurredAt: Date;\n  truncated?: boolean;\n}\n\nexport interface BillingWebhookIngressObservabilityWrite {\n  connectionId?: string;\n  correlationId?: string;\n  ingressId?: string;\n  kind: BillingWebhookKind;\n  metadata?: Record<string, unknown>;\n  stage: BillingWebhookIngressStage | \"failed\";\n  traceId?: string;\n}\n\nexport interface BillingWebhookIngressObservability {\n  aggregateRecent(\n    connectionId: string,\n    windowMs?: number\n  ): Promise<{\n    accepted: number;\n    duplicates: number;\n    received: number;\n    reconciliationFailures: number;\n    rejected: number;\n  }>;\n  listDelivery(\n    connectionId: string\n  ): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n  listRecentStages(\n    connectionId: string,\n    limit?: number\n  ): Promise<readonly BillingWebhookIngressStageRecord[]>;\n  recordAccepted(\n    input: BillingWebhookIngressObservabilityWrite & { connectionId: string }\n  ): Promise<void>;\n  recordDelivery(input: {\n    code?: string;\n    connectionId: string;\n    event: BillingWebhookDeliveryEvent;\n    kind: BillingWebhookKind;\n    message?: string;\n  }): Promise<void>;\n  recordReconciliation(\n    input: BillingWebhookIngressObservabilityWrite & {\n      connectionId: string;\n      outcome: BillingWebhookReconciliationOutcome;\n    }\n  ): Promise<void>;\n  recordRejected(\n    input: BillingWebhookIngressObservabilityWrite & {\n      code: string;\n      evidence?: BillingWebhookIngressRejectionEvidence;\n    }\n  ): Promise<void>;\n  recordStage(input: BillingWebhookIngressStageRecord): Promise<void>;\n}\n\nconst UUID_RE =\n  /^[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  if (value == null || value.length === 0) {\n    return null;\n  }\n  return UUID_RE.test(value) ? value : null;\n}\n\nfunction stageRecord(\n  input: BillingWebhookIngressObservabilityWrite & { rejectionCode?: string }\n): BillingWebhookIngressStageRecord {\n  return {\n    kind: input.kind,\n    occurredAt: new Date(),\n    stage: input.stage,\n    ...(input.connectionId ? { connectionId: input.connectionId } : {}),\n    ...(input.correlationId ? { correlationId: input.correlationId } : {}),\n    ...(input.ingressId ? { ingressId: input.ingressId } : {}),\n    ...(input.metadata ? { metadata: input.metadata } : {}),\n    ...(input.rejectionCode ? { rejectionCode: input.rejectionCode } : {}),\n    ...(input.traceId ? { traceId: input.traceId } : {}),\n  };\n}\n\nexport function createMemoryBillingWebhookIngressObservability(): {\n  delivery: ReturnType<\n    typeof createMemoryBillingWebhookDeliveryHealthStore\n  >[\"rows\"];\n  rejections: BillingWebhookIngressRejectionRecord[];\n  stages: BillingWebhookIngressStageRecord[];\n  store: BillingWebhookIngressObservability;\n} {\n  const stages: BillingWebhookIngressStageRecord[] = [];\n  const rejections: BillingWebhookIngressRejectionRecord[] = [];\n  const delivery = createMemoryBillingWebhookDeliveryHealthStore();\n  const store: BillingWebhookIngressObservability = {\n    async aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n      const cutoff = Date.now() - windowMs;\n      const recent = stages.filter(\n        (row) =>\n          row.connectionId === connectionId &&\n          row.occurredAt.getTime() >= cutoff\n      );\n      return {\n        accepted: recent.filter((row) => row.stage === \"persisted\").length,\n        duplicates: recent.filter((row) => row.stage === \"duplicate\").length,\n        received: recent.filter((row) => row.stage === \"received\").length,\n        reconciliationFailures: recent.filter(\n          (row) => row.stage === \"reconciliation_failed\"\n        ).length,\n        rejected: recent.filter(\n          (row) => row.stage === \"rejected\" || row.stage === \"failed\"\n        ).length,\n      };\n    },\n    async listDelivery(connectionId) {\n      return delivery.store.list(connectionId);\n    },\n    async listRecentStages(connectionId, limit = 32) {\n      return stages\n        .filter((row) => row.connectionId === connectionId)\n        .slice()\n        .reverse()\n        .slice(0, limit);\n    },\n    async recordAccepted(input) {\n      await store.recordStage(stageRecord(input));\n      await delivery.store.recordDelivery({\n        connectionId: input.connectionId,\n        event: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n        kind: input.kind,\n      });\n    },\n    async recordDelivery(input) {\n      await delivery.store.recordDelivery(input);\n    },\n    async recordReconciliation(input) {\n      await store.recordStage(stageRecord(input));\n      await delivery.store.recordReconciliation({\n        connectionId: input.connectionId,\n        kind: input.kind,\n        outcome: input.outcome,\n        phase:\n          input.stage === \"reconciliation_failed\"\n            ? \"failed\"\n            : input.stage === \"reconciliation_started\"\n              ? \"started\"\n              : \"completed\",\n      });\n    },\n    async recordRejected(input) {\n      await store.recordStage(\n        stageRecord({ ...input, rejectionCode: input.code })\n      );\n      if (input.evidence) {\n        rejections.push({\n          bytes: input.evidence.payload.bytes,\n          classification: input.evidence.payload.classification,\n          code: input.code,\n          ...(input.evidence.payload.digest\n            ? { digest: input.evidence.payload.digest }\n            : {}),\n          expectedEnvelope: input.evidence.expectedEnvelope,\n          kind: input.kind,\n          occurredAt: new Date(),\n          ...(input.evidence.payload.truncated\n            ? { truncated: true }\n            : {}),\n          ...(input.evidence.payload.contentType\n            ? { contentType: input.evidence.payload.contentType }\n            : {}),\n          ...(input.connectionId ? { connectionId: input.connectionId } : {}),\n          ...(input.ingressId ? { ingressId: input.ingressId } : {}),\n        });\n      }\n      if (input.connectionId) {\n        await delivery.store.recordDelivery({\n          code: input.code,\n          connectionId: input.connectionId,\n          event: \"rejected\",\n          kind: input.kind,\n        });\n      }\n    },\n    async recordStage(input) {\n      stages.push({ ...input, occurredAt: input.occurredAt ?? new Date() });\n    },\n  };\n  return { delivery: delivery.rows, rejections, stages, store };\n}\n\nexport function createPostgresBillingWebhookIngressObservability(\n  rawSql: BillingSqlExecutor\n): BillingWebhookIngressObservability {\n  const sql = withBillingObservabilitySchemaGuard(rawSql);\n  let schemaAsserted: Promise<void> | undefined;\n  const ensureSchema = () => {\n    schemaAsserted ??= assertBillingWebhookObservabilitySchema(sql);\n    return schemaAsserted;\n  };\n  const delivery = createPostgresBillingWebhookDeliveryHealthStore(rawSql);\n  const store: BillingWebhookIngressObservability = {\n    async aggregateRecent(connectionId, windowMs = 24 * 60 * 60 * 1000) {\n      await ensureSchema();\n      const result = await sql.query(\n        `\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        [connectionId, new Date(Date.now() - windowMs)]\n      );\n      const row = result.rows[0] ?? {};\n      return {\n        accepted: Number(row.accepted ?? 0),\n        duplicates: Number(row.duplicates ?? 0),\n        received: Number(row.received ?? 0),\n        reconciliationFailures: Number(row.reconciliation_failures ?? 0),\n        rejected: Number(row.rejected ?? 0),\n      };\n    },\n    async listDelivery(connectionId) {\n      return delivery.list(connectionId);\n    },\n    async listRecentStages(connectionId, limit = 32) {\n      await ensureSchema();\n      const result = await sql.query(\n        `\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        [connectionId, limit]\n      );\n      return result.rows.map((row) => {\n        const occurredAt =\n          row.occurred_at instanceof Date\n            ? row.occurred_at\n            : new Date(String(row.occurred_at));\n        return {\n          kind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n          occurredAt,\n          stage: String(row.stage) as BillingWebhookIngressStage,\n          ...(typeof row.connection_id === \"string\"\n            ? { connectionId: row.connection_id }\n            : {}),\n          ...(typeof row.ingress_id === \"string\"\n            ? { ingressId: row.ingress_id }\n            : {}),\n          ...(typeof row.rejection_code === \"string\"\n            ? { rejectionCode: row.rejection_code }\n            : {}),\n          ...(typeof row.correlation_id === \"string\"\n            ? { correlationId: row.correlation_id }\n            : {}),\n          ...(typeof row.trace_id === \"string\"\n            ? { traceId: row.trace_id }\n            : {}),\n        };\n      });\n    },\n    async recordAccepted(input) {\n      await ensureSchema();\n      await sql.query(\n        `\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        [input.connectionId, input.kind, input.stage]\n      );\n      await store.recordStage(stageRecord(input));\n      await delivery.recordDelivery({\n        connectionId: input.connectionId,\n        event: input.stage === \"duplicate\" ? \"duplicate\" : \"accepted\",\n        kind: input.kind,\n      });\n    },\n    async recordDelivery(input) {\n      await delivery.recordDelivery(input);\n    },\n    async recordReconciliation(input) {\n      await sql.query(\n        `\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        [input.connectionId, input.kind, input.outcome, input.stage]\n      );\n      await store.recordStage(stageRecord(input));\n      await delivery.recordReconciliation({\n        connectionId: input.connectionId,\n        kind: input.kind,\n        outcome: input.outcome,\n        phase:\n          input.stage === \"reconciliation_failed\"\n            ? \"failed\"\n            : input.stage === \"reconciliation_started\"\n              ? \"started\"\n              : \"completed\",\n      });\n    },\n    async recordRejected(input) {\n      await ensureSchema();\n      if (input.connectionId) {\n        await sql.query(\n          `\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          [input.connectionId, input.kind, input.code, input.stage]\n        );\n        await delivery.recordDelivery({\n          code: input.code,\n          connectionId: input.connectionId,\n          event: \"rejected\",\n          kind: input.kind,\n          message: input.code,\n        });\n      }\n      if (input.evidence) {\n        await sql.query(\n          `\nINSERT INTO billing.billing_webhook_ingress_rejections (\n\tconnection_id, ingress_id, kind, code, content_type, body_kind, body_bytes,\n\tclassification, digest, truncated, expected_envelope, occurred_at\n) VALUES (\n\t$1::uuid, $2::uuid, $3, $4, $5, $6, $7, $8, $9, $10, $11::jsonb, now()\n)\n`,\n          [\n            uuidOrNull(input.connectionId),\n            uuidOrNull(input.ingressId),\n            input.kind,\n            input.code,\n            input.evidence.payload.contentType ??\n              (typeof input.metadata?.contentType === \"string\"\n                ? input.metadata.contentType\n                : null),\n            input.evidence.payload.classification,\n            input.evidence.payload.bytes,\n            input.evidence.payload.classification,\n            input.evidence.payload.digest ?? null,\n            input.evidence.payload.truncated ?? false,\n            JSON.stringify(input.evidence.expectedEnvelope),\n          ]\n        );\n      }\n      await store.recordStage(\n        stageRecord({ ...input, rejectionCode: input.code })\n      );\n    },\n    async recordStage(input) {\n      await ensureSchema();\n      await sql.query(\n        `\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        [\n          uuidOrNull(input.connectionId),\n          uuidOrNull(input.ingressId),\n          input.kind,\n          input.stage,\n          input.rejectionCode ?? null,\n          input.correlationId ?? null,\n          input.traceId ?? null,\n          input.occurredAt,\n          input.provider ?? \"mollie\",\n          input.operation ?? null,\n          input.status ?? null,\n          input.errorMessage ?? null,\n          JSON.stringify(input.metadata ?? {}),\n        ]\n      );\n    },\n  };\n  return store;\n}\n\nexport function createLazyBillingWebhookIngressObservability(\n  getSql: () => Promise<BillingSqlExecutor | undefined>\n): BillingWebhookIngressObservability {\n  const run = async (\n    work: (store: BillingWebhookIngressObservability) => Promise<void>\n  ): Promise<void> => {\n    const sql = await getSql();\n    if (!sql) {\n      return;\n    }\n    await work(createPostgresBillingWebhookIngressObservability(sql));\n  };\n  const resolve = async () => {\n    const sql = await getSql();\n    return sql\n      ? createPostgresBillingWebhookIngressObservability(sql)\n      : undefined;\n  };\n  return {\n    async aggregateRecent(connectionId, windowMs) {\n      const store = await resolve();\n      if (!store) {\n        return {\n          accepted: 0,\n          duplicates: 0,\n          received: 0,\n          reconciliationFailures: 0,\n          rejected: 0,\n        };\n      }\n      return store.aggregateRecent(connectionId, windowMs);\n    },\n    async listDelivery(connectionId) {\n      const store = await resolve();\n      return store ? store.listDelivery(connectionId) : [];\n    },\n    async listRecentStages(connectionId, limit = 32) {\n      const store = await resolve();\n      return store ? store.listRecentStages(connectionId, limit) : [];\n    },\n    async recordAccepted(input) {\n      await run((store) => store.recordAccepted(input));\n    },\n    async recordDelivery(input) {\n      await run((store) => store.recordDelivery(input));\n    },\n    async recordReconciliation(input) {\n      await run((store) => store.recordReconciliation(input));\n    },\n    async recordRejected(input) {\n      await run((store) => store.recordRejected(input));\n    },\n    async recordStage(input) {\n      await run((store) => store.recordStage(input));\n    },\n  };\n}\n\nfunction billingWebhookDiagnosticDetail(error: unknown): { error: string } {\n  return {\n    error: error instanceof Error ? error.message : String(error),\n  };\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  label: string,\n  error: unknown\n): void {\n  if (process.env.NODE_TEST_CONTEXT) {\n    return;\n  }\n  console.error(label, billingWebhookDiagnosticDetail(error));\n}\n\nexport async function recordBillingWebhookIngressQuietly(\n  store: BillingWebhookIngressObservability | undefined,\n  work: (store: BillingWebhookIngressObservability) => Promise<void>\n): Promise<void> {\n  if (!store) {\n    return;\n  }\n  try {\n    await work(store);\n  } catch (error) {\n    reportBillingWebhookIngressDiagnostic(\n      \"[athena.billing] webhook ingress observability failed\",\n      error\n    );\n  }\n}\n\nexport interface BillingWebhookChannelDeliveryHealth {\n  lastAcceptedAt?: string;\n  lastDeliveryAt?: string;\n  lastIngressStage?: string;\n  lastReconciliationOutcome?: string;\n  lastRejectedAt?: string;\n  lastRejectionCode?: string;\n}\n\nexport interface BillingWebhookOperatorHealth {\n  classic: BillingWebhookChannelDeliveryHealth;\n  nextGen: BillingWebhookChannelDeliveryHealth;\n  routeMounted: boolean;\n  signingSecretConfigured: boolean;\n  verification: {\n    classic: \"authoritative_refetch\";\n    nextGen: \"signature_and_refetch\";\n  };\n}\n\nfunction iso(value: Date | undefined): string | undefined {\n  return value ? value.toISOString() : undefined;\n}\n\nfunction channelHealth(\n  row: BillingWebhookRegistrationRecord | undefined\n): BillingWebhookChannelDeliveryHealth {\n  return {\n    ...(iso(row?.lastAcceptedAt)\n      ? { lastAcceptedAt: iso(row?.lastAcceptedAt) }\n      : {}),\n    ...(iso(row?.lastDeliveryAt)\n      ? { lastDeliveryAt: iso(row?.lastDeliveryAt) }\n      : {}),\n    ...(row?.lastIngressStage\n      ? { lastIngressStage: row.lastIngressStage }\n      : {}),\n    ...(row?.lastReconciliationOutcome\n      ? { lastReconciliationOutcome: row.lastReconciliationOutcome }\n      : {}),\n    ...(iso(row?.lastRejectedAt)\n      ? { lastRejectedAt: iso(row?.lastRejectedAt) }\n      : {}),\n    ...(row?.lastRejectionCode\n      ? { lastRejectionCode: row.lastRejectionCode }\n      : {}),\n  };\n}\n\nexport function billingWebhookOperatorHealth(input: {\n  classic?: BillingWebhookRegistrationRecord;\n  endpoints?: ResolvedBillingIngressEndpoints;\n  nextGen?: BillingWebhookRegistrationRecord;\n  signingSecretConfigured: boolean;\n}): BillingWebhookOperatorHealth {\n  return {\n    classic: channelHealth(input.classic),\n    nextGen: channelHealth(input.nextGen),\n    routeMounted: Boolean(input.endpoints),\n    signingSecretConfigured: input.signingSecretConfigured,\n    verification: {\n      classic: \"authoritative_refetch\",\n      nextGen: \"signature_and_refetch\",\n    },\n  };\n}\n","import type { BillingSqlExecutor } from \"../subject/repository.ts\";\n\nexport const BILLING_WEBHOOK_INGRESS_STAGES_RELATION =\n  \"billing.billing_webhook_ingress_stages\";\nexport const BILLING_WEBHOOK_INGRESS_REJECTIONS_RELATION =\n  \"billing.billing_webhook_ingress_rejections\";\n\nexport const BILLING_WEBHOOK_OBSERVABILITY_LEDGER_VERSION = 22;\n\nexport function isUndefinedSqlRelation(error: unknown): boolean {\n  if (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"code\" in error &&\n    (error as { code?: string }).code === \"42P01\"\n  ) {\n    return true;\n  }\n  const message = error instanceof Error ? error.message : String(error);\n  return /relation \".*?\" does not exist/i.test(message);\n}\n\nexport function billingWebhookObservabilitySchemaMessage(\n  missingRelation?: string\n): string {\n  const relation =\n    missingRelation ?? BILLING_WEBHOOK_INGRESS_REJECTIONS_RELATION;\n  return `Embedded Billing schema is behind the runtime. Run \\`athena migrate\\` (v${BILLING_WEBHOOK_OBSERVABILITY_LEDGER_VERSION} creates ${relation}).`;\n}\n\nexport function rewriteMissingBillingObservabilityRelation(\n  error: unknown\n): Error {\n  const message = error instanceof Error ? error.message : String(error);\n  const quoted = message.match(/relation \"([^\"]+)\" does not exist/i);\n  const missing = quoted?.[1];\n  const wrapped = new Error(\n    `${billingWebhookObservabilitySchemaMessage(missingRelationFromQuote(missing))} ${message}`\n  );\n  if (typeof error === \"object\" && error !== null && \"code\" in error) {\n    (wrapped as { code?: string }).code = (error as { code?: string }).code;\n  }\n  return wrapped;\n}\n\nfunction missingRelationFromQuote(\n  quoted: string | undefined\n): string | undefined {\n  if (quoted == null) {\n    return;\n  }\n  if (quoted.includes(\"ingress_rejections\")) {\n    return BILLING_WEBHOOK_INGRESS_REJECTIONS_RELATION;\n  }\n  if (quoted.includes(\"ingress_stages\")) {\n    return BILLING_WEBHOOK_INGRESS_STAGES_RELATION;\n  }\n  return quoted.includes(\".\") ? quoted : `billing.${quoted}`;\n}\n\nexport async function assertBillingWebhookObservabilitySchema(\n  sql: BillingSqlExecutor\n): Promise<void> {\n  for (const relation of [\n    BILLING_WEBHOOK_INGRESS_STAGES_RELATION,\n    BILLING_WEBHOOK_INGRESS_REJECTIONS_RELATION,\n  ] as const) {\n    const result = await sql.query(\"SELECT to_regclass($1) AS oid\", [relation]);\n    const oid = result.rows[0]?.oid;\n    if (oid == null || String(oid).length === 0) {\n      throw new Error(billingWebhookObservabilitySchemaMessage(relation));\n    }\n  }\n}\n\nexport function throwIfMissingBillingObservabilityRelation(\n  error: unknown\n): never {\n  if (isUndefinedSqlRelation(error)) {\n    throw rewriteMissingBillingObservabilityRelation(error);\n  }\n  throw error;\n}\n\nexport function withBillingObservabilitySchemaGuard(\n  sql: BillingSqlExecutor\n): BillingSqlExecutor {\n  return {\n    async query(text, values) {\n      try {\n        return await sql.query(text, values);\n      } catch (error) {\n        throwIfMissingBillingObservabilityRelation(error);\n      }\n    },\n  };\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  acceptedCount: number;\n  connectionId: string;\n  duplicateCount: number;\n  kind: BillingWebhookKind;\n  lastAcceptedAt?: Date;\n  lastReceivedAt?: Date;\n  lastReconciliationCompletedAt?: Date;\n  lastReconciliationError?: string;\n  lastReconciliationFailedAt?: Date;\n  lastReconciliationOutcome?: BillingWebhookReconciliationOutcome;\n  lastReconciliationStartedAt?: Date;\n  lastRejectedAt?: Date;\n  lastRejectionCode?: string;\n  lastRejectionMessage?: string;\n  rejectedCount: number;\n}\n\nexport type BillingWebhookDeliveryEvent =\n  | \"received\"\n  | \"accepted\"\n  | \"rejected\"\n  | \"duplicate\";\n\nconst UUID_RE =\n  /^[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  if (value == null || value.length === 0) {\n    return null;\n  }\n  return UUID_RE.test(value) ? value : null;\n}\n\nfunction asDate(value: unknown): Date | undefined {\n  if (value instanceof Date) {\n    return value;\n  }\n  if (typeof value === \"string\" && value.length > 0) {\n    return new Date(value);\n  }\n}\n\nfunction mapRow(row: Record<string, unknown>): BillingWebhookDeliveryHealthRow {\n  const lastReconciliationOutcome = row.last_reconciliation_outcome;\n  return {\n    acceptedCount: Number(row.accepted_count ?? 0),\n    connectionId: String(row.connection_id),\n    duplicateCount: Number(row.duplicate_count ?? 0),\n    kind: row.kind === \"classic\" ? \"classic\" : \"next_gen\",\n    rejectedCount: Number(row.rejected_count ?? 0),\n    ...(asDate(row.last_received_at)\n      ? { lastReceivedAt: asDate(row.last_received_at) }\n      : {}),\n    ...(asDate(row.last_accepted_at)\n      ? { lastAcceptedAt: asDate(row.last_accepted_at) }\n      : {}),\n    ...(asDate(row.last_rejected_at)\n      ? { lastRejectedAt: asDate(row.last_rejected_at) }\n      : {}),\n    ...(typeof row.last_rejection_code === \"string\"\n      ? { lastRejectionCode: row.last_rejection_code }\n      : {}),\n    ...(typeof row.last_rejection_message === \"string\"\n      ? { lastRejectionMessage: row.last_rejection_message }\n      : {}),\n    ...(asDate(row.last_reconciliation_started_at)\n      ? {\n          lastReconciliationStartedAt: asDate(\n            row.last_reconciliation_started_at\n          ),\n        }\n      : {}),\n    ...(asDate(row.last_reconciliation_completed_at)\n      ? {\n          lastReconciliationCompletedAt: asDate(\n            row.last_reconciliation_completed_at\n          ),\n        }\n      : {}),\n    ...(asDate(row.last_reconciliation_failed_at)\n      ? {\n          lastReconciliationFailedAt: asDate(row.last_reconciliation_failed_at),\n        }\n      : {}),\n    ...(lastReconciliationOutcome === \"completed\" ||\n    lastReconciliationOutcome === \"failed\" ||\n    lastReconciliationOutcome === \"skipped\"\n      ? { lastReconciliationOutcome }\n      : {}),\n    ...(typeof row.last_reconciliation_error === \"string\"\n      ? { lastReconciliationError: row.last_reconciliation_error }\n      : {}),\n  };\n}\n\nexport interface BillingWebhookDeliveryHealthStore {\n  get(input: {\n    connectionId: string;\n    kind: BillingWebhookKind;\n  }): Promise<BillingWebhookDeliveryHealthRow | null>;\n  list(\n    connectionId: string\n  ): Promise<readonly BillingWebhookDeliveryHealthRow[]>;\n  recordDelivery(input: {\n    code?: string;\n    connectionId: string;\n    event: BillingWebhookDeliveryEvent;\n    kind: BillingWebhookKind;\n    message?: string;\n  }): Promise<void>;\n  recordReconciliation(input: {\n    connectionId: string;\n    error?: string;\n    kind: BillingWebhookKind;\n    outcome: BillingWebhookReconciliationOutcome;\n    phase: \"started\" | \"completed\" | \"failed\";\n  }): Promise<void>;\n}\n\nexport function createMemoryBillingWebhookDeliveryHealthStore(): {\n  rows: BillingWebhookDeliveryHealthRow[];\n  store: BillingWebhookDeliveryHealthStore;\n} {\n  const rows: BillingWebhookDeliveryHealthRow[] = [];\n  const find = (connectionId: string, kind: BillingWebhookKind) =>\n    rows.find((row) => row.connectionId === connectionId && row.kind === kind);\n  const ensure = (\n    connectionId: string,\n    kind: BillingWebhookKind\n  ): BillingWebhookDeliveryHealthRow => {\n    const existing = find(connectionId, kind);\n    if (existing) {\n      return existing;\n    }\n    const created: BillingWebhookDeliveryHealthRow = {\n      acceptedCount: 0,\n      connectionId,\n      duplicateCount: 0,\n      kind,\n      rejectedCount: 0,\n    };\n    rows.push(created);\n    return created;\n  };\n  return {\n    rows,\n    store: {\n      async get(input) {\n        return find(input.connectionId, input.kind) ?? null;\n      },\n      async list(connectionId) {\n        return rows.filter((row) => row.connectionId === connectionId);\n      },\n      async recordDelivery(input) {\n        const row = ensure(input.connectionId, input.kind);\n        const now = new Date();\n        row.lastReceivedAt = now;\n        if (input.event === \"accepted\") {\n          row.lastAcceptedAt = now;\n          row.acceptedCount += 1;\n        } else if (input.event === \"duplicate\") {\n          row.lastAcceptedAt = now;\n          row.duplicateCount += 1;\n        } else if (input.event === \"rejected\") {\n          row.lastRejectedAt = now;\n          row.rejectedCount += 1;\n          if (input.code) {\n            row.lastRejectionCode = input.code;\n          }\n          if (input.message) {\n            row.lastRejectionMessage = input.message;\n          }\n        }\n      },\n      async recordReconciliation(input) {\n        const row = ensure(input.connectionId, input.kind);\n        const now = new Date();\n        row.lastReconciliationOutcome = input.outcome;\n        if (input.phase === \"started\") {\n          row.lastReconciliationStartedAt = now;\n        } else if (input.phase === \"completed\") {\n          row.lastReconciliationCompletedAt = now;\n        } else {\n          row.lastReconciliationFailedAt = now;\n          if (input.error) {\n            row.lastReconciliationError = input.error;\n          }\n        }\n      },\n    },\n  };\n}\n\nexport function createPostgresBillingWebhookDeliveryHealthStore(\n  sql: BillingSqlExecutor\n): BillingWebhookDeliveryHealthStore {\n  return {\n    async get(input) {\n      const result = await sql.query(\n        `\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid AND kind = $2\n`,\n        [input.connectionId, input.kind]\n      );\n      const row = result.rows[0];\n      return row ? mapRow(row) : null;\n    },\n    async list(connectionId) {\n      const result = await sql.query(\n        `\nSELECT * FROM billing.billing_webhook_delivery_health\nWHERE connection_id = $1::uuid\n`,\n        [connectionId]\n      );\n      return result.rows.map(mapRow);\n    },\n    async recordDelivery(input) {\n      const connectionId = uuidOrNull(input.connectionId);\n      if (!connectionId) {\n        return;\n      }\n      await sql.query(\n        `\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        [\n          connectionId,\n          input.kind,\n          input.event,\n          input.code ?? null,\n          input.message ?? null,\n        ]\n      );\n    },\n    async recordReconciliation(input) {\n      const connectionId = uuidOrNull(input.connectionId);\n      if (!connectionId) {\n        return;\n      }\n      await sql.query(\n        `\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        [\n          connectionId,\n          input.kind,\n          input.phase,\n          input.outcome,\n          input.error ?? null,\n        ]\n      );\n    },\n  };\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { CanonicalBillingDocument } from \"../../canonical/document.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { recurringPriceFromCheckoutSnapshot } from \"./checkout-snapshot.ts\";\nimport { createRecurringSubscriptionForPrice } from \"./enroll.ts\";\nimport {\n  claimEnrollmentForAdvance,\n  enrollmentProviderEffectIdempotencyKey,\n  getEnrollmentById,\n  heartbeatEnrollmentLease,\n  markEnrollmentActive,\n  recordEnrollmentAdvanceFailure,\n} from \"./enrollment-reservation.ts\";\nimport {\n  getCheckoutSessionByPayment,\n  listCheckoutSessionLines,\n  updateCheckoutSession,\n} from \"./enrollment-session.ts\";\n\nfunction latePaymentStatus(\n  enrollmentState: string | undefined\n): \"late_paid\" | \"reconcile_required\" | \"refund_required\" {\n  if (enrollmentState === \"active\") {\n    return \"reconcile_required\";\n  }\n  if (enrollmentState === \"expired\" || enrollmentState === \"superseded\") {\n    return \"refund_required\";\n  }\n  return \"late_paid\";\n}\n\nexport async function advanceSelfSubscriptionEnrollment(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  document: CanonicalBillingDocument;\n  registry: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<void> {\n  if (input.document.kind !== \"payment\") {\n    return;\n  }\n  const session = await getCheckoutSessionByPayment({\n    provider: input.document.provider,\n    providerPaymentId: input.document.providerPaymentId,\n    sql: input.sql,\n  });\n  if (session == null) {\n    return;\n  }\n  if (\n    session.status === \"enrolled\" ||\n    session.status === \"late_paid\" ||\n    session.status === \"reconcile_required\" ||\n    session.status === \"refund_required\"\n  ) {\n    return;\n  }\n  if (\n    input.document.status === \"failed\" ||\n    input.document.status === \"canceled\"\n  ) {\n    await updateCheckoutSession({\n      id: session.id,\n      sql: input.sql,\n      status:\n        input.document.status === \"canceled\"\n          ? \"first_payment_canceled\"\n          : \"first_payment_failed\",\n    });\n    return;\n  }\n  if (input.document.status !== \"paid\") {\n    return;\n  }\n  const enrollmentId = session.enrollmentId;\n  if (enrollmentId == null || enrollmentId.trim() === \"\") {\n    await updateCheckoutSession({\n      id: session.id,\n      sql: input.sql,\n      status: \"reconcile_required\",\n    });\n    return;\n  }\n  const enrollment = await getEnrollmentById({\n    id: enrollmentId,\n    sql: input.sql,\n  });\n  if (enrollment == null) {\n    await updateCheckoutSession({\n      id: session.id,\n      sql: input.sql,\n      status: \"reconcile_required\",\n    });\n    return;\n  }\n  if (enrollment.state === \"active\") {\n    await updateCheckoutSession({\n      id: session.id,\n      providerCustomerId: session.providerCustomerId,\n      providerSubscriptionId: enrollment.providerSubscriptionId,\n      sql: input.sql,\n      status: \"enrolled\",\n    });\n    return;\n  }\n  if (\n    enrollment.state !== \"reserved\" &&\n    enrollment.state !== \"first_payment_pending\" &&\n    enrollment.state !== \"advancing\"\n  ) {\n    await updateCheckoutSession({\n      id: session.id,\n      sql: input.sql,\n      status: latePaymentStatus(enrollment.state),\n    });\n    return;\n  }\n  const leaseToken = randomUUID();\n  const claimed = await claimEnrollmentForAdvance({\n    id: enrollment.id,\n    leaseToken,\n    sql: input.sql,\n  });\n  if (claimed == null) {\n    const again = await getEnrollmentById({\n      id: enrollment.id,\n      sql: input.sql,\n    });\n    if (again?.state === \"active\") {\n      await updateCheckoutSession({\n        id: session.id,\n        sql: input.sql,\n        status: \"enrolled\",\n      });\n    }\n    return;\n  }\n  try {\n    const held = await heartbeatEnrollmentLease({\n      id: claimed.id,\n      leaseToken,\n      sql: input.sql,\n    });\n    if (!held) {\n      return;\n    }\n    const lines = await listCheckoutSessionLines({\n      checkoutSessionId: session.id,\n      sql: input.sql,\n    });\n    const price = recurringPriceFromCheckoutSnapshot(lines);\n    if (price == null || price.id !== claimed.priceId) {\n      await recordEnrollmentAdvanceFailure({\n        expectedLeaseToken: leaseToken,\n        id: claimed.id,\n        lastError: \"missing_snapshot\",\n        sql: input.sql,\n      });\n      return;\n    }\n    const intent = resolveBillingCheckoutIntent(price);\n    if (intent.kind !== \"recurring\") {\n      await recordEnrollmentAdvanceFailure({\n        expectedLeaseToken: leaseToken,\n        id: claimed.id,\n        lastError: \"not_recurring\",\n        sql: input.sql,\n      });\n      return;\n    }\n    const customerId =\n      session.providerCustomerId ?? input.document.providerCustomerId;\n    if (customerId == null || customerId.trim() === \"\") {\n      await recordEnrollmentAdvanceFailure({\n        expectedLeaseToken: leaseToken,\n        id: claimed.id,\n        lastError: \"missing_customer\",\n        sql: input.sql,\n      });\n      return;\n    }\n    await heartbeatEnrollmentLease({\n      id: claimed.id,\n      leaseToken,\n      sql: input.sql,\n    });\n    const subscription = await createRecurringSubscriptionForPrice({\n      configuredProviders: input.configuredProviders,\n      connectionId: claimed.connectionId,\n      customerId,\n      enrollmentId: claimed.id,\n      idempotencyKey: enrollmentProviderEffectIdempotencyKey(claimed),\n      interval: intent.interval,\n      price,\n      principal: {\n        authenticated: true,\n        grants: [],\n        rights: [],\n        userId: session.subjectId,\n      },\n      registry: input.registry,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n    const activated = await markEnrollmentActive({\n      expectedFencingEpoch: claimed.fencingEpoch,\n      expectedLeaseToken: leaseToken,\n      id: claimed.id,\n      providerSubscriptionId: subscription.providerSubscriptionId,\n      sql: input.sql,\n    });\n    if (!activated) {\n      await recordEnrollmentAdvanceFailure({\n        expectedLeaseToken: leaseToken,\n        id: claimed.id,\n        lastError: \"lease_lost\",\n        sql: input.sql,\n      });\n      return;\n    }\n    await updateCheckoutSession({\n      id: session.id,\n      providerCustomerId: customerId,\n      providerSubscriptionId: subscription.providerSubscriptionId,\n      sql: input.sql,\n      status: \"enrolled\",\n    });\n  } catch (error) {\n    await recordEnrollmentAdvanceFailure({\n      expectedLeaseToken: leaseToken,\n      id: claimed.id,\n      lastError: error instanceof Error ? error.message : \"advance_failed\",\n      sql: input.sql,\n    });\n    throw error;\n  }\n}\n","import type { BillingPrice } from \"../../types.ts\";\n\nexport type BillingCheckoutIntent =\n  | {\n      kind: \"one_time\";\n      price: BillingPrice;\n    }\n  | {\n      kind: \"recurring\";\n      interval: string;\n      price: BillingPrice;\n    };\n\nconst ONE_TIME_CATALOG_INTERVALS = new Set([\n  \"one-off\",\n  \"one_off\",\n  \"once\",\n  \"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  interval?: string | null\n): boolean {\n  const value = typeof interval === \"string\" ? interval.trim() : \"\";\n  if (value.length === 0) {\n    return false;\n  }\n  return !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  price: BillingPrice\n): BillingCheckoutIntent {\n  if (!isRecurringBillingCatalogInterval(price.interval)) {\n    return { kind: \"one_time\", price };\n  }\n  const interval =\n    typeof price.interval === \"string\" ? price.interval.trim() : \"\";\n  return { interval, kind: \"recurring\", price };\n}\n","import { addBillingMoney } from \"../../safety/money.ts\";\nimport type { BillingMoney, BillingPrice } from \"../../types.ts\";\nimport { isRecurringBillingCatalogInterval } from \"./checkout-intent.ts\";\nimport type { BillingCheckoutSessionLineRecord } from \"./enrollment-session.ts\";\n\n/**\n * Snapshot lines that settle on the provider payment.\n *\n * Mixed checkout uses setup/add-on settlement: recurring catalog lines are\n * recorded on the session but are not part of this payment. Enrollment-only\n * first-installment snapshots have no one-off lines, so the recurring line\n * remains payable.\n */\n\nexport function payableCheckoutSnapshotLines(\n  lines: readonly BillingCheckoutSessionLineRecord[]\n): readonly BillingCheckoutSessionLineRecord[] {\n  const oneOff = lines.filter(\n    (line) => !isRecurringBillingCatalogInterval(line.interval)\n  );\n  return oneOff.length > 0 ? oneOff : lines;\n}\n\nexport function paymentAmountFromCheckoutSnapshot(\n  lines: readonly BillingCheckoutSessionLineRecord[]\n): BillingMoney | null {\n  const payable = payableCheckoutSnapshotLines(lines);\n  if (payable.length === 0) {\n    return null;\n  }\n  let total: BillingMoney | null = null;\n  for (const line of payable) {\n    const amount = {\n      currency: line.amountCurrency,\n      value: line.amountValue,\n    };\n    total = total == null ? amount : addBillingMoney(total, amount);\n  }\n  return total;\n}\n\nexport function recurringPriceFromCheckoutSnapshot(\n  lines: readonly BillingCheckoutSessionLineRecord[]\n): BillingPrice | null {\n  const recurring = lines.find((line) =>\n    isRecurringBillingCatalogInterval(line.interval)\n  );\n  if (recurring == null) {\n    return null;\n  }\n  return {\n    amount: {\n      currency: recurring.amountCurrency,\n      value: recurring.amountValue,\n    },\n    id: recurring.priceId,\n    interval: recurring.interval,\n    metadata: {},\n    productId: recurring.productId,\n    raw: {},\n  };\n}\n","import type { AthenaPrincipal } from \"../../../runtime/data/principal.ts\";\nimport {\n  AthenaBillingCapabilityError,\n  AthenaBillingError,\n} from \"../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../providers/types.ts\";\nimport { prepareBillingCommand } from \"../../safety/prepare.ts\";\nimport {\n  type BillingSelfEnrollmentSetting,\n  isBillingSelfEnrollmentEnabled,\n} from \"../../self-enrollment.ts\";\nimport {\n  billingConfiguredConnectionOwner,\n  configuredProvidersForBillingConnection,\n  resolveBillingConnectionAffinity,\n} from \"../../subject/connection-affinity.ts\";\nimport { ensureActiveProviderCustomer } from \"../../subject/ensure-provider-customer.ts\";\nimport {\n  billingSubjectConflict,\n  billingSubscriptionAlreadyActive,\n} from \"../../subject/errors.ts\";\nimport { requireBillingPrincipalUserId } from \"../../subject/principal-user.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingPrice, BillingSubscription } from \"../../types.ts\";\nimport { billingHalLinkHref } from \"../hal-link-href.ts\";\nimport { PROCESS_BILLING_INVOCATION } from \"../invocation-authority.ts\";\nimport { executeLocalBillingProductList } from \"../local/execute/product-list.ts\";\nimport { executeLocalBillingPriceList } from \"../local/execute/price-list.ts\";\nimport { executeLocalBillingSubscriptionCreate } from \"../local/execute/subscriptions.ts\";\nimport type { BillingProviderRegistry } from \"../local/providers/registry.ts\";\nimport type {\n  BillingSelfSubscriptionEnrollmentStatus,\n  BillingSelfSubscriptionEnrollResult,\n} from \"../types.ts\";\nimport { resolveBillingCheckoutIntent } from \"./checkout-intent.ts\";\nimport { requireProviderPaymentFromCheckoutSnapshot } from \"./checkout-payment.ts\";\nimport {\n  CHECKOUT_INTENT_HASH_METADATA_KEY,\n  assertMatchingCheckoutIntent,\n  hashCheckoutIntent,\n} from \"./checkout-intent-hash.ts\";\nimport { freezeBillingPaymentPresentation } from \"./checkout-presentation.ts\";\nimport { selfDelegatedBillingPrincipal } from \"./delegated-principal.ts\";\nimport {\n  markEnrollmentActive,\n  recordEnrollmentJournal,\n  reserveSubjectEnrollment,\n  updateEnrollment,\n} from \"./enrollment-reservation.ts\";\nimport {\n  type BillingCheckoutSessionRecord,\n  checkoutAttemptExpiresAtIso,\n  getCheckoutSessionByIdempotency,\n  insertCheckoutSession,\n  insertCheckoutSessionLines,\n  isCheckoutSessionResumeExpired,\n  listUsableMandateSessions,\n  updateCheckoutSession,\n} from \"./enrollment-session.ts\";\nimport { resolveAllowedBillingRedirectUrl } from \"./redirect-url.ts\";\nimport {\n  appendBillingReturnToken,\n  createBillingReturnNonce,\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  const trimmed = interval.trim();\n  if (/^\\d+\\s+\\S/.test(trimmed)) {\n    return trimmed;\n  }\n  return `1 ${trimmed}`;\n}\n\nfunction sessionStatusToResult(\n  status: BillingCheckoutSessionRecord[\"status\"]\n): BillingSelfSubscriptionEnrollmentStatus {\n  if (status === \"enrolled\") {\n    return \"enrolled\";\n  }\n  if (status === \"first_payment_required\") {\n    return \"first_payment_required\";\n  }\n  if (\n    status === \"first_payment_failed\" ||\n    status === \"first_payment_canceled\" ||\n    status === \"late_paid\" ||\n    status === \"refund_required\"\n  ) {\n    return \"failed\";\n  }\n  return \"pending\";\n}\n\nfunction resultFromSession(\n  session: BillingCheckoutSessionRecord,\n  subscription?: BillingSubscription\n): BillingSelfSubscriptionEnrollResult {\n  return {\n    checkoutUrl: session.checkoutUrl,\n    enrollmentId: session.id,\n    metadata: {\n      ...session.metadata,\n      priceId: session.priceId,\n    },\n    provider: session.provider,\n    status: sessionStatusToResult(session.status),\n    ...(subscription ? { subscription } : {}),\n  };\n}\n\nexport async function persistOwnedSubscription(input: {\n  connectionId: string;\n  interval: string;\n  operation?: \"self.subscription.change\" | \"self.subscription.enroll\";\n  principal: AthenaPrincipal;\n  sql: BillingSqlExecutor;\n  subscription: BillingSubscription;\n}): Promise<BillingSubscription> {\n  const operation = input.operation ?? \"self.subscription.enroll\";\n  const connectionId = input.connectionId.trim();\n  if (connectionId.length === 0) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason: \"provider_connection_missing\",\n    });\n  }\n  const result = await input.sql.query(PERSIST_OWNED_SUBSCRIPTION_SQL, [\n    connectionId,\n    input.subscription.provider,\n    input.subscription.providerSubscriptionId,\n    input.subscription.providerCustomerId,\n    input.subscription.status,\n    input.subscription.amount?.currency ?? null,\n    input.subscription.amount?.value ?? null,\n    input.interval,\n    input.subscription.description ?? null,\n    JSON.stringify(input.subscription.metadata ?? {}),\n    JSON.stringify(input.subscription.raw ?? {}),\n    requireBillingPrincipalUserId(input.principal),\n  ]);\n  const row = result.rows[0];\n  if (!row) {\n    throw billingSubjectConflict(\n      \"This provider subscription is already bound to another billing subject.\"\n    );\n  }\n  return {\n    ...input.subscription,\n    id: String(row.id ?? input.subscription.id ?? \"\"),\n  };\n}\n\nexport async function hasUsableMandate(input: {\n  providerCustomerId: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n}): Promise<boolean> {\n  const sessions = await listUsableMandateSessions({\n    providerCustomerId: input.providerCustomerId,\n    sql: input.sql,\n    subjectId: input.subjectId,\n    subjectKind: \"user\",\n  });\n  return sessions.length > 0;\n}\n\nexport async function createRecurringSubscriptionForPrice(input: {\n  configuredProviders?: BillingProviderConfigMap;\n  connectionId: string;\n  customerId: string;\n  enrollmentId?: string;\n  idempotencyKey: string;\n  interval: string;\n  principal: AthenaPrincipal;\n  price: BillingPrice;\n  registry: BillingProviderRegistry;\n  sql: BillingSqlExecutor;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  const connectionId = input.connectionId.trim();\n  if (connectionId.length === 0) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.enroll\",\n      reason: \"provider_connection_missing\",\n    });\n  }\n  const providerKey = input.enrollmentId ?? input.idempotencyKey;\n  if (input.enrollmentId) {\n    await recordEnrollmentJournal({\n      id: input.enrollmentId,\n      intent: \"subscription_create_requested\",\n      sql: input.sql,\n    });\n  }\n  const created = await executeLocalBillingSubscriptionCreate({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders: input.configuredProviders,\n    payload: {\n      amount: input.price.amount,\n      customerId: input.customerId,\n      description: `Athena plan ${input.price.id}`,\n      idempotencyKey: `${providerKey}:subscription`,\n      interval: mollieInterval(input.interval),\n      metadata: {\n        athenaSubjectId: requireBillingPrincipalUserId(input.principal),\n        athenaSubjectKind: \"user\",\n        priceId: input.price.id,\n      },\n    },\n    principal: selfDelegatedBillingPrincipal(input.principal, [\n      \"subscriptions.create\",\n    ]),\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n  return persistOwnedSubscription({\n    connectionId,\n    interval: input.interval,\n    principal: input.principal,\n    sql: input.sql,\n    subscription: created,\n  });\n}\n\n/**\n * Recurring first-installment enrollment. Without a usable mandate the\n * first provider payment equals the recurring price (not mixed add-ons).\n */\nexport async function enrollSelfSubscription(input: {\n  allowedRedirectOrigins?: readonly string[];\n  applicationId?: string;\n  cancelUrl?: string;\n  configuredProviders?: BillingProviderConfigMap;\n  idempotencyKey: string;\n  principal: AthenaPrincipal;\n  priceId: string;\n  registry?: BillingProviderRegistry;\n  selfEnrollmentEnabled?: BillingSelfEnrollmentSetting;\n  sql: BillingSqlExecutor;\n  successUrl?: string;\n  testMode?: boolean;\n}): Promise<BillingSelfSubscriptionEnrollResult> {\n  if (!isBillingSelfEnrollmentEnabled(input.selfEnrollmentEnabled)) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.enroll\",\n      reason: \"self_enrollment_disabled\",\n    });\n  }\n  const command = prepareBillingCommand({\n    operation: \"self.subscription.enroll\",\n    payload: {\n      cancelUrl: input.cancelUrl,\n      idempotencyKey: input.idempotencyKey,\n      priceId: input.priceId,\n      successUrl: input.successUrl,\n    },\n  });\n  const priceId = String(command.payload.priceId);\n  const idempotencyKey = String(command.payload.idempotencyKey);\n  const subjectUserId = requireBillingPrincipalUserId(input.principal);\n  const allowedRedirectOrigins = input.allowedRedirectOrigins ?? [];\n  const successUrl = resolveAllowedBillingRedirectUrl({\n    allowedOrigins: allowedRedirectOrigins,\n    field: \"successUrl\",\n    url: input.successUrl,\n  });\n  const cancelUrl = resolveAllowedBillingRedirectUrl({\n    allowedOrigins: allowedRedirectOrigins,\n    field: \"cancelUrl\",\n    url: input.cancelUrl,\n  });\n  if (input.registry == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.enroll\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  const existing = await getCheckoutSessionByIdempotency({\n    idempotencyKey,\n    sql: input.sql,\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n  });\n  if (existing) {\n    if (isCheckoutSessionResumeExpired(existing)) {\n      throw new AthenaBillingError({\n        body: { sessionId: existing.id },\n        code: \"ATHENA_BILLING_INVALID_REQUEST\",\n        endpoint: \"\",\n        message:\n          \"Billing checkout session has expired. Retry enroll with a new idempotencyKey.\",\n        method: \"POST\",\n        status: 400,\n      });\n    }\n  }\n  const live = await input.sql.query(LIVE_SELF_SUBSCRIPTION_SQL, [\n    \"user\",\n    subjectUserId,\n  ]);\n  if (!existing && live.rows[0]) {\n    throw billingSubscriptionAlreadyActive();\n  }\n  const connectionAffinity = await resolveBillingConnectionAffinity({\n    configuredProviders: input.configuredProviders,\n    environment: input.testMode === false ? \"live\" : \"test\",\n    operation: \"self.subscription.enroll\",\n    provider: \"mollie\",\n    sql: input.sql,\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n    testMode: input.testMode,\n    ...(billingConfiguredConnectionOwner(input.applicationId) ?? {}),\n  });\n  const connectionId = connectionAffinity.connectionId;\n  const configuredProviders = configuredProvidersForBillingConnection({\n    affinity: connectionAffinity,\n    configuredProviders: input.configuredProviders,\n    operation: \"self.subscription.enroll\",\n  });\n  const delegated = selfDelegatedBillingPrincipal(input.principal, [\n    \"prices.list\",\n    \"products.list\",\n    \"payments.create\",\n    \"subscriptions.create\",\n  ]);\n  const prices = await executeLocalBillingPriceList({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders,\n    payload: {},\n    principal: delegated,\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n  const price = prices.items.find((item) => item.id === priceId);\n  if (price == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.enroll\",\n      reason: \"missing_catalog\",\n    });\n  }\n  const intent = resolveBillingCheckoutIntent(price);\n  if (intent.kind !== \"recurring\") {\n    throw new AthenaBillingCapabilityError({\n      message:\n        \"One-time catalog prices must use self.checkout.create, not recurring enrollment.\",\n      operation: \"self.subscription.enroll\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const intentHash = hashCheckoutIntent([\n    {\n      amountCurrency: price.amount.currency,\n      amountValue: price.amount.value,\n      interval: price.interval ?? null,\n      priceId: price.id,\n      productId: price.productId,\n      quantity: 1,\n      relationId: null,\n    },\n  ]);\n  if (existing) {\n    await assertMatchingCheckoutIntent({\n      existing,\n      intentHash,\n      sql: input.sql,\n    });\n    return resultFromSession(existing);\n  }\n  const products = await executeLocalBillingProductList({\n    authority: PROCESS_BILLING_INVOCATION,\n    configuredProviders,\n    payload: {},\n    principal: delegated,\n    registry: input.registry,\n    testMode: input.testMode,\n  });\n  const paymentPresentation = freezeBillingPaymentPresentation({\n    kind: \"first_payment\",\n    lines: [\n      {\n        interval: price.interval,\n        priceId: price.id,\n        productId: price.productId,\n        quantity: 1,\n      },\n    ],\n    operation: \"self.subscription.enroll\",\n    products: products.items,\n  });\n  const enrollment = await reserveSubjectEnrollment({\n    connectionId,\n    idempotencyKey,\n    priceId: price.id,\n    sql: input.sql,\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n  });\n  const customer = await ensureActiveProviderCustomer({\n    applicationId: input.applicationId,\n    configuredProviders: input.configuredProviders,\n    connectionId,\n    idempotencyKey,\n    principal: input.principal,\n    registry: input.registry,\n    sql: input.sql,\n    testMode: input.testMode,\n  });\n  const mandateReady = await hasUsableMandate({\n    providerCustomerId: customer.customerId,\n    sql: input.sql,\n    subjectId: subjectUserId,\n  });\n  if (mandateReady) {\n    const subscription = await createRecurringSubscriptionForPrice({\n      configuredProviders,\n      connectionId,\n      customerId: customer.customerId,\n      enrollmentId: enrollment.id,\n      idempotencyKey,\n      interval: intent.interval,\n      price,\n      principal: input.principal,\n      registry: input.registry,\n      sql: input.sql,\n      testMode: input.testMode,\n    });\n    await markEnrollmentActive({\n      id: enrollment.id,\n      providerSubscriptionId: subscription.providerSubscriptionId,\n      sql: input.sql,\n    });\n    const session = await insertCheckoutSession({\n      checkoutUrl: null,\n      connectionId,\n      enrollmentId: enrollment.id,\n      expiresAt: checkoutAttemptExpiresAtIso(),\n      id: \"\",\n      idempotencyKey,\n      kind: \"subscription_enrollment\",\n      metadata: {\n        [CHECKOUT_INTENT_HASH_METADATA_KEY]: intentHash,\n        paymentPresentation,\n        priceId: price.id,\n      },\n      priceId: price.id,\n      provider: customer.provider,\n      providerCustomerId: customer.customerId,\n      providerPaymentId: null,\n      providerSubscriptionId: subscription.providerSubscriptionId,\n      sql: input.sql,\n      status: \"enrolled\",\n      subjectId: subjectUserId,\n      subjectKind: \"user\",\n    });\n    return resultFromSession(session, subscription);\n  }\n  const nonce = createBillingReturnNonce();\n  const expiresAt = checkoutAttemptExpiresAtIso();\n  const correlatedSuccess = successUrl\n    ? appendBillingReturnToken(successUrl, nonce.token)\n    : undefined;\n  const correlatedCancel = cancelUrl\n    ? appendBillingReturnToken(cancelUrl, nonce.token)\n    : undefined;\n  const normalizedSuccessUrl = correlatedSuccess ?? correlatedCancel;\n  const normalizedCancelUrl = correlatedCancel ?? correlatedSuccess;\n  if (normalizedSuccessUrl == null || normalizedCancelUrl == null) {\n    throw new AthenaBillingCapabilityError({\n      operation: \"self.subscription.enroll\",\n      reason: \"unsupported_operation\",\n    });\n  }\n  const sessionId = crypto.randomUUID();\n  const paymentIdempotencyKey = enrollment.id;\n  const session = await insertCheckoutSession({\n    checkoutUrl: null,\n    connectionId,\n    enrollmentId: enrollment.id,\n    expiresAt,\n    id: sessionId,\n    idempotencyKey,\n    kind: \"subscription_enrollment\",\n    metadata: {\n      athenaCheckoutSessionId: sessionId,\n      athenaCheckoutWorkflow: \"subscription_enrollment\",\n      [CHECKOUT_INTENT_HASH_METADATA_KEY]: intentHash,\n      athenaEnrollment: true,\n      cancelUrl: normalizedCancelUrl,\n      paymentIdempotencyKey,\n      paymentPresentation,\n      paymentSequenceType: \"first\",\n      priceId: price.id,\n      successUrl: normalizedSuccessUrl,\n    },\n    priceId: price.id,\n    provider: customer.provider,\n    providerCustomerId: customer.customerId,\n    providerPaymentId: null,\n    providerSubscriptionId: null,\n    returnNonceHash: nonce.hash,\n    sql: input.sql,\n    status: \"first_payment_required\",\n    subjectId: subjectUserId,\n    subjectKind: \"user\",\n  });\n  await insertCheckoutSessionLines({\n    checkoutSessionId: sessionId,\n    lines: [\n      {\n        amountCurrency: price.amount.currency,\n        amountValue: price.amount.value,\n        interval: price.interval,\n        ordinal: 0,\n        priceId: price.id,\n        productId: price.productId,\n        quantity: 1,\n      },\n    ],\n    sql: input.sql,\n  });\n  const payment = await requireProviderPaymentFromCheckoutSnapshot({\n    configuredProviders,\n    principal: input.principal,\n    registry: input.registry,\n    session,\n    sql: input.sql,\n    testMode: input.testMode,\n  });\n  const updatedSession = await updateCheckoutSession({\n    checkoutUrl: billingHalLinkHref(payment.raw, \"checkout\"),\n    id: sessionId,\n    providerCustomerId: customer.customerId,\n    providerPaymentId: payment.providerPaymentId,\n    sql: input.sql,\n    status: \"first_payment_required\",\n  });\n  await updateEnrollment({\n    id: enrollment.id,\n    providerPaymentId: payment.providerPaymentId,\n    sql: input.sql,\n    state: \"first_payment_pending\",\n  });\n  return resultFromSession(updatedSession);\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport {\n  finalizeBillingCommand,\n  prepareBillingCommand,\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  BillingProviderExecutionContext,\n  BillingProviderPortMap,\n  BillingProviderPortName,\n} from \"../providers/types.ts\";\nimport {\n  prepareLocalBillingInvocation,\n  requireProviderPort,\n} from \"./shared.ts\";\n\nexport interface LocalBillingExecutorRequest<TPayload> {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: TPayload;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}\n\nexport async function executeLocalBillingOperation<\n  TPayload,\n  TResult,\n  TPort extends BillingProviderPortName,\n>(input: {\n  before?: (payload: TPayload) => void;\n  invoke: (\n    port: NonNullable<BillingProviderPortMap[TPort]>,\n    context: BillingProviderExecutionContext,\n    payload: TPayload\n  ) => Promise<TResult> | TResult;\n  operation: BillingOperation;\n  port: TPort;\n  request: LocalBillingExecutorRequest<TPayload>;\n  safety?: \"enforce\" | \"defer-then-finalize\";\n}): Promise<TResult> {\n  let payload = input.request.payload;\n  const deferSafety = input.safety === \"defer-then-finalize\";\n  const prepared = prepareBillingCommand({\n    idempotency: deferSafety ? \"defer\" : \"enforce\",\n    operation: input.operation,\n    payload,\n    testMode: input.request.testMode,\n  });\n  payload = prepared.payload as TPayload;\n  input.before?.(payload);\n  const invocation = await prepareLocalBillingInvocation({\n    authority: input.request.authority,\n    configuredProviders: input.request.configuredProviders,\n    idempotencyKey: readIdempotencyKey(payload),\n    operation: input.operation,\n    principal: input.request.principal,\n    registry: input.request.registry,\n    target: payload as TPayload & BillingExecutionTarget,\n    testMode: input.request.testMode,\n  });\n  if (deferSafety) {\n    payload = finalizeBillingCommand({\n      operation: input.operation,\n      payload,\n      testMode: input.request.testMode,\n    }).payload as TPayload;\n  }\n  const ports: BillingProviderPortMap = invocation.runtime;\n  const port = requireProviderPort(ports[input.port], input.operation);\n  return input.invoke(port, invocation.context, payload);\n}\n\nfunction readIdempotencyKey(payload: unknown): string | undefined {\n  if (\n    payload != null &&\n    typeof payload === \"object\" &&\n    \"idempotencyKey\" in payload &&\n    typeof payload.idempotencyKey === \"string\"\n  ) {\n    return payload.idempotencyKey;\n  }\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  isProcessBillingInvocation,\n  resolveBillingInvocationAuthority,\n  SESSION_BILLING_INVOCATION,\n} from \"../../invocation-authority.ts\";\nimport {\n  authorizeBillingOperation,\n  denyBillingInvocation,\n  PROCESS_OWNED_BILLING_PRINCIPAL,\n} from \"../../rights.ts\";\n\nimport {\n  decideLocalBillingOperationCapability,\n  selectedModeAllowedForCapability,\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  BillingProviderExecutionContext,\n  BillingProviderPortCapabilities,\n  BillingProviderPortMap,\n  BillingProviderPortName,\n  BillingProviderRuntime,\n  ConfiguredBillingProviderBinding,\n} from \"../providers/types.ts\";\n\nexport interface PreparedBillingInvocation {\n  readonly authority: BillingInvocationAuthority;\n  readonly binding: ConfiguredBillingProviderBinding;\n  readonly context: BillingProviderExecutionContext;\n  readonly operation: BillingOperation;\n  readonly principal: AthenaPrincipal;\n  readonly runtime: BillingProviderRuntime;\n  readonly target: Extract<\n    ReturnType<typeof resolveBillingExecutionTarget>,\n    { kind: \"configured\" }\n  >;\n}\n\nexport interface ResolvedLocalBillingProviderExecution {\n  context: BillingProviderExecutionContext;\n  runtime: BillingProviderRuntime;\n}\n\nexport function rejectUnsupportedListOffset(\n  operation: BillingOperation,\n  offset?: number\n): void {\n  if (offset == null) {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation,\n    reason: \"unsupported_operation\",\n  });\n}\n\nexport function rejectUnsupportedLocalPaymentListSource(source?: string): void {\n  if (source == null || source === \"provider\") {\n    return;\n  }\n  throw new AthenaBillingCapabilityError({\n    operation: \"payments.list\",\n    reason: \"unsupported_operation\",\n  });\n}\n\nfunction isBillingProviderPortName(\n  name: string\n): name is BillingProviderPortName {\n  switch (name) {\n    case \"checkout\":\n    case \"customers\":\n    case \"invoices\":\n    case \"paymentLinks\":\n    case \"payments\":\n    case \"prices\":\n    case \"products\":\n    case \"relations\":\n    case \"refunds\":\n    case \"subscriptions\":\n    case \"webhooks\":\n      return true;\n    default:\n      return false;\n  }\n}\n\nfunction providerPortIsAvailable(\n  runtime: BillingProviderRuntime,\n  advertised: BillingProviderPortCapabilities,\n  operation: BillingOperation\n): boolean {\n  const name = operation.split(\".\")[0] ?? \"\";\n  if (!isBillingProviderPortName(name)) {\n    return false;\n  }\n  const ports: BillingProviderPortMap = runtime;\n  return ports[name] != null && advertised[name] === true;\n}\n\nexport function requireProviderPort<T>(\n  port: T | null | undefined,\n  operation: BillingOperation\n): NonNullable<T> {\n  if (port == null) {\n    throw new AthenaBillingCapabilityError({\n      operation,\n      reason:\n        operation === \"products.list\" ||\n          operation === \"prices.list\" ||\n          operation === \"relations.list\"\n          ? \"missing_catalog\"\n          : \"unsupported_operation\",\n    });\n  }\n  return port;\n}\n\nexport async function prepareLocalBillingInvocation(input: {\n  authority: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  idempotencyKey?: string;\n  operation: BillingOperation;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  target: BillingExecutionTarget;\n  testMode?: boolean;\n}): Promise<PreparedBillingInvocation> {\n  const target = resolveBillingExecutionTarget({\n    configuredProviders: input.configuredProviders,\n    registry: input.registry,\n    target: input.target,\n  });\n  if (target.kind === \"connection\") {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"missing_connection\",\n    });\n  }\n  const binding = createConfiguredProviderBinding({\n    configuredProviders: input.configuredProviders,\n    provider: target.provider,\n  });\n  const authority = resolveBillingInvocationAuthority({\n    authority: input.authority,\n  });\n  const principal =\n    input.principal ??\n    (isProcessBillingInvocation(authority)\n      ? PROCESS_OWNED_BILLING_PRINCIPAL\n      : undefined);\n  if (!principal && authority.kind === SESSION_BILLING_INVOCATION.kind) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"runtime_unavailable\",\n    });\n  }\n  if (!principal) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: \"runtime_unavailable\",\n    });\n  }\n  await decideBillingCapability({\n    binding,\n    operation: input.operation,\n    requestedProfileId: input.target.profileId,\n    runtime: target.runtime,\n    testMode: input.testMode,\n  });\n  authorizeBillingInvocation(principal, input.operation, authority);\n  const context = createBillingProviderExecutionContext({\n    binding,\n    idempotencyKey: input.idempotencyKey,\n    ingress: input.registry.ingress,\n    operationScope: mollieOperationScopeFor(input.operation),\n    target: {\n      profileId: input.target.profileId,\n    },\n    testMode: input.testMode,\n  });\n  return {\n    authority,\n    binding,\n    context,\n    operation: input.operation,\n    principal,\n    runtime: target.runtime,\n    target,\n  };\n}\n\nexport async function resolveLocalBillingProviderExecution(input: {\n  authority?: BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  idempotencyKey?: string;\n  operation: BillingOperation;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  target: BillingExecutionTarget;\n  testMode?: boolean;\n}): Promise<ResolvedLocalBillingProviderExecution> {\n  const prepared = await prepareLocalBillingInvocation({\n    ...input,\n    authority: input.authority ?? SESSION_BILLING_INVOCATION,\n  });\n  return {\n    context: prepared.context,\n    runtime: prepared.runtime,\n  };\n}\n\nasync function decideBillingCapability(input: {\n  binding: ConfiguredBillingProviderBinding;\n  operation: BillingOperation;\n  requestedProfileId?: string;\n  runtime: BillingProviderRuntime;\n  testMode?: boolean;\n}): Promise<void> {\n  const providerCapabilities = await input.runtime.getCapabilities(\n    input.binding\n  );\n  const authority = readBillingCredentialAuthority(\n    input.binding.providerConfig\n  );\n  const environment = resolveBillingEnvironment({\n    testMode: input.testMode,\n  });\n  const capability = decideLocalBillingOperationCapability({\n    anyCredentialConfigured:\n      availableBillingCredentialEnvironments(input.binding.credentials).length >\n      0,\n    authority,\n    operation: input.operation,\n    portAvailable: providerPortIsAvailable(\n      input.runtime,\n      providerCapabilities.ports,\n      input.operation\n    ),\n    provider: input.binding.provider,\n    providerConfig: input.binding.providerConfig,\n    providerOperationEnabled:\n      providerCapabilities.operations[input.operation] === true,\n    requestedProfileId: input.requestedProfileId,\n    selectedModeAllowed: selectedModeAllowedForCapability({\n      authority,\n      selectedCredentialConfigured:\n        input.binding.credentials[environment.name] != null,\n      selectedEnvironment: environment.name,\n    }),\n  });\n  if (capability.available !== true) {\n    throw new AthenaBillingCapabilityError({\n      operation: input.operation,\n      reason: capability.reason ?? \"unsupported_operation\",\n    });\n  }\n}\n\nfunction authorizeBillingInvocation(\n  principal: AthenaPrincipal,\n  operation: BillingOperation,\n  authority: BillingInvocationAuthority\n): void {\n  const denied =\n    authorizeBillingOperation(principal, operation) ??\n    denyBillingInvocation(principal, operation, authority);\n  if (denied) {\n    throw denied;\n  }\n}\n","import {\n  ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n  AthenaBillingProviderError,\n} from \"../errors.ts\";\nimport type {\n  BillingOperationCapability,\n  BillingOperationCapabilityReason,\n} from \"./capabilities.ts\";\n\nexport type BillingAuthoritySource = \"derived\" | \"declared\" | \"provider\";\n\nexport type BillingAuthorityScope =\n  | { kind: \"organization\" }\n  | { kind: \"profile\"; profileId?: string };\n\nexport interface BillingCredentialAuthority {\n  readonly modes: {\n    readonly test: boolean;\n    readonly live: boolean;\n  };\n  readonly permissions: Readonly<Record<string, boolean>>;\n  readonly scope: BillingAuthorityScope;\n  readonly source: BillingAuthoritySource;\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  providerConfig: Readonly<Record<string, unknown>> | undefined\n): BillingCredentialAuthority | undefined {\n  const raw = providerConfig?.authority;\n  if (raw == null) {\n    return;\n  }\n  if (typeof raw !== \"object\" || Array.isArray(raw)) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: \"billing.providers authority is invalid.\",\n    });\n  }\n  const record = raw as Partial<BillingCredentialAuthority>;\n  if (record.source == null || record.modes == null || record.scope == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: \"billing.providers authority is incomplete.\",\n    });\n  }\n  return {\n    modes: {\n      live: record.modes.live === true,\n      test: record.modes.test === true,\n    },\n    permissions: record.permissions ?? {},\n    scope: record.scope,\n    source: record.source,\n  };\n}\n\nexport function grantedPermissionsFromAuthority(\n  authority: BillingCredentialAuthority\n): ReadonlySet<string> {\n  const granted = new Set<string>();\n  for (const [permission, allowed] of Object.entries(authority.permissions)) {\n    if (allowed) {\n      granted.add(permission);\n    }\n  }\n  return granted;\n}\n\nexport function authorityAllowsMode(\n  authority: BillingCredentialAuthority,\n  environment: \"test\" | \"live\"\n): boolean {\n  return authority.modes[environment] === true;\n}\n\nexport function authorityAllowsProfile(\n  authority: BillingCredentialAuthority,\n  requestedProfileId?: string | null\n): boolean {\n  if (authority.scope.kind === \"organization\") {\n    return true;\n  }\n  const restricted = authority.scope.profileId;\n  const requested =\n    requestedProfileId != null && requestedProfileId.length > 0\n      ? requestedProfileId\n      : undefined;\n  if (restricted == null || restricted.length === 0) {\n    return requested == null;\n  }\n  if (requested == null) {\n    return true;\n  }\n  return requested === restricted;\n}\n\nexport function evaluateBillingOperationCapability(input: {\n  anyCredentialConfigured: boolean;\n  grantedPermissions: ReadonlySet<string>;\n  implemented: boolean;\n  requiredPermissions: readonly string[];\n  scopeAllowed: boolean;\n  selectedModeAllowed: boolean;\n  unimplementedReason?: BillingOperationCapabilityReason;\n  actualAuthority?: \"organization\" | \"profile\";\n  requiredAuthority?: \"organization\" | \"profile\";\n}): BillingOperationCapability {\n  if (!input.implemented) {\n    return unavailable(input.unimplementedReason ?? \"unsupported_operation\");\n  }\n  if (!input.anyCredentialConfigured) {\n    return unavailable(\"missing_credential\");\n  }\n  if (!input.selectedModeAllowed) {\n    return unavailable(\"missing_provider_scope\");\n  }\n  if (!input.scopeAllowed) {\n    return unavailable(\"missing_provider_scope\");\n  }\n  for (const permission of input.requiredPermissions) {\n    if (!input.grantedPermissions.has(permission)) {\n      return unavailable(\"missing_permission\");\n    }\n  }\n  return { available: true };\n}\n\n/**\n * Operator-facing view of {@link evaluateBillingOperationCapability}.\n * Keep-green getCapabilities stays on the lean `{ available, reason }` shape.\n */\nexport function diagnoseBillingOperationCapability(\n  input: Parameters<typeof evaluateBillingOperationCapability>[0]\n): BillingOperationCapability {\n  if (\n    input.implemented &&\n    input.anyCredentialConfigured &&\n    input.selectedModeAllowed &&\n    !input.scopeAllowed\n  ) {\n    return {\n      available: false,\n      reason: \"credential_scope_insufficient\",\n      remediation: remediationFor(\"credential_scope_insufficient\"),\n      ...(input.actualAuthority\n        ? { actualAuthority: input.actualAuthority }\n        : {}),\n      requiredAuthority: input.requiredAuthority ?? \"organization\",\n    };\n  }\n  const capability = evaluateBillingOperationCapability(input);\n  if (capability.available || capability.reason == null) {\n    return capability;\n  }\n  return {\n    ...capability,\n    remediation: remediationFor(capability.reason),\n  };\n}\n\nfunction remediationFor(reason: BillingOperationCapabilityReason): string {\n  switch (reason) {\n    case \"credential_scope_insufficient\":\n    case \"missing_provider_scope\":\n      return \"configure an organization-scoped access token\";\n    case \"missing_connection\":\n    case \"provider_connection_missing\":\n      return \"declare billing.providers and wait for automatic connection materialization\";\n    case \"connection_disabled\":\n      return \"activate the persisted billing provider connection\";\n    case \"profile_target_missing\":\n      return \"set billing.providers.mollie.profileId for this credential\";\n    case \"provider_runtime_unavailable\":\n    case \"runtime_unavailable\":\n      return \"attach the local Billing runtime on Node createClient\";\n    case \"configuration_invalid\":\n      return \"fix billing.providers configuration\";\n    case \"unsupported_by_provider\":\n    case \"unsupported_provider\":\n    case \"unsupported_operation\":\n    case \"provider_operation_unsupported\":\n      return \"this operation is not implemented for the selected provider\";\n    case \"missing_catalog\":\n      return \"configure billing.catalog for this provider\";\n    case \"missing_permission\":\n      return \"see billing diagnostics for this operation\";\n    case \"runtime_initializing\":\n      return \"wait for billing runtime initialization to finish\";\n    case \"bootstrap_failed\":\n      return \"inspect billing runtime bootstrap errors\";\n    case \"provider_not_configured\":\n      return \"declare billing.providers for this provider\";\n    case \"provider_connection_ambiguous\":\n      return \"select a unique billing provider connection\";\n    case \"missing_credential\":\n      return \"configure the selected billing credential\";\n    case \"operator_only\":\n      return \"this operation is operator-only\";\n    case \"self_enrollment_disabled\":\n      return \"enable billing.selfEnrollment.enabled to allow recurring enrollment\";\n    default: {\n      const exhaustive: never = reason;\n      return exhaustive;\n    }\n  }\n}\n\nfunction unavailable(\n  reason: BillingOperationCapabilityReason\n): BillingOperationCapability {\n  return {\n    available: false,\n    reason,\n  };\n}\n","import {\n  authorityAllowsMode,\n  authorityAllowsProfile,\n  type BillingCredentialAuthority,\n  evaluateBillingOperationCapability,\n  grantedPermissionsFromAuthority,\n} from \"../authority.ts\";\nimport type {\n  BillingOperation,\n  BillingOperationCapability,\n} from \"../capabilities.ts\";\nimport { requiredMolliePermissionsFor } from \"./providers/operation-authority.ts\";\n\nfunction mollieCreateHasProfileSelector(input: {\n  configuredProfileId?: string | null;\n  credentialKind?: string | null;\n  requestedProfileId?: string | null;\n}): boolean {\n  if (input.credentialKind == null || input.credentialKind === \"api_key\") {\n    return true;\n  }\n  const requested = input.requestedProfileId;\n  if (requested != null && requested.length > 0) {\n    return true;\n  }\n  const configured = input.configuredProfileId;\n  return configured != null && configured.length > 0;\n}\n\nexport function requiredPermissionsFor(\n  provider: string,\n  operation: BillingOperation\n): readonly string[] {\n  return provider === \"mollie\" ? requiredMolliePermissionsFor(operation) : [];\n}\n\nexport function scopeAllowedForOperation(input: {\n  authority?: BillingCredentialAuthority;\n  operation: BillingOperation;\n  provider: string;\n  providerConfig: Readonly<Record<string, unknown>>;\n  requestedProfileId?: string | null;\n}): boolean {\n  const authorityAllows =\n    input.authority == null\n      ? true\n      : authorityAllowsProfile(input.authority, input.requestedProfileId);\n  if (!authorityAllows) {\n    return false;\n  }\n  if (input.provider !== \"mollie\" || input.operation !== \"payments.create\") {\n    return true;\n  }\n  const credentialKind = input.providerConfig.credentialKind;\n  const configuredProfileId = input.providerConfig.profileId;\n  return mollieCreateHasProfileSelector({\n    configuredProfileId:\n      typeof configuredProfileId === \"string\" || configuredProfileId === null\n        ? configuredProfileId\n        : undefined,\n    credentialKind:\n      typeof credentialKind === \"string\" ? credentialKind : undefined,\n    requestedProfileId: input.requestedProfileId,\n  });\n}\n\nexport function decideLocalBillingOperationCapability(input: {\n  anyCredentialConfigured: boolean;\n  authority?: BillingCredentialAuthority;\n  operation: BillingOperation;\n  portAvailable: boolean;\n  provider: string;\n  providerConfig: Readonly<Record<string, unknown>>;\n  providerOperationEnabled: boolean;\n  requestedProfileId?: string | null;\n  selectedModeAllowed: boolean;\n  unimplementedReason?: BillingOperationCapability[\"reason\"];\n}): BillingOperationCapability {\n  const implemented = input.portAvailable && input.providerOperationEnabled;\n  const requiredPermissions = requiredPermissionsFor(\n    input.provider,\n    input.operation\n  );\n  const catalogOperation =\n    input.operation === \"products.list\" ||\n    input.operation === \"prices.list\" ||\n    input.operation === \"relations.list\";\n  return evaluateBillingOperationCapability({\n    actualAuthority: input.authority?.scope.kind,\n    anyCredentialConfigured: input.anyCredentialConfigured,\n    grantedPermissions: input.authority\n      ? grantedPermissionsFromAuthority(input.authority)\n      : new Set(),\n    implemented,\n    requiredAuthority:\n      input.authority?.scope.kind === \"profile\" ? \"organization\" : undefined,\n    requiredPermissions,\n    scopeAllowed: scopeAllowedForOperation({\n      authority: input.authority,\n      operation: input.operation,\n      provider: input.provider,\n      providerConfig: input.providerConfig,\n      requestedProfileId: input.requestedProfileId,\n    }),\n    selectedModeAllowed: input.selectedModeAllowed,\n    unimplementedReason:\n      input.unimplementedReason ??\n      (catalogOperation ? \"missing_catalog\" : undefined),\n  });\n}\n\nexport function selectedModeAllowedForCapability(input: {\n  authority?: BillingCredentialAuthority;\n  selectedCredentialConfigured: boolean;\n  selectedEnvironment: \"test\" | \"live\";\n}): boolean {\n  return input.authority == null\n    ? input.selectedCredentialConfigured\n    : authorityAllowsMode(input.authority, input.selectedEnvironment);\n}\n","import type { BillingOperation } from \"../../capabilities.ts\";\n\nexport interface MollieOperationAuthority {\n  permissions: readonly string[];\n}\n\nexport const MOLLIE_OPERATION_AUTHORITY = {\n  \"admin.conflicts.list\": { permissions: [] },\n  \"admin.conflicts.resolve\": { permissions: [] },\n  \"admin.connections.materialize\": { permissions: [] },\n  \"admin.bootstrap.retry\": { permissions: [] },\n  \"admin.ingestion.health\": { permissions: [] },\n  \"admin.reconciliation.retry\": { permissions: [] },\n  \"admin.reconciliation.run\": { permissions: [] },\n  \"admin.webhooks.reconcile\": { permissions: [] },\n  \"admin.webhooks.status\": { permissions: [] },\n  \"admin.webhooks.verify\": { permissions: [] },\n  \"checkout.create\": { permissions: [\"payments.write\"] },\n  \"customers.create\": { permissions: [\"customers.write\"] },\n  \"customers.delete\": { permissions: [\"customers.write\"] },\n  \"customers.get\": { permissions: [\"customers.read\"] },\n  \"customers.list\": { permissions: [\"customers.read\"] },\n  \"customers.update\": { permissions: [\"customers.write\"] },\n  \"invoices.get\": { permissions: [\"sales-invoices.read\"] },\n  \"invoices.list\": { permissions: [\"sales-invoices.read\"] },\n  \"paymentLinks.create\": { permissions: [\"payment-links.write\"] },\n  \"paymentLinks.delete\": { permissions: [\"payment-links.write\"] },\n  \"paymentLinks.get\": { permissions: [\"payment-links.read\"] },\n  \"paymentLinks.list\": { permissions: [\"payment-links.read\"] },\n  \"paymentLinks.update\": { permissions: [\"payment-links.write\"] },\n  \"payments.cancel\": { permissions: [\"payments.write\"] },\n  \"payments.create\": { permissions: [\"payments.write\"] },\n  \"payments.get\": { permissions: [\"payments.read\"] },\n  \"payments.list\": { permissions: [\"payments.read\"] },\n  \"prices.list\": { permissions: [] },\n  \"products.list\": { permissions: [] },\n  \"relations.list\": { permissions: [] },\n  \"refunds.cancel\": { permissions: [\"refunds.write\"] },\n  \"refunds.create\": { permissions: [\"refunds.write\"] },\n  \"refunds.get\": { permissions: [\"refunds.read\"] },\n  \"refunds.list\": { permissions: [\"refunds.read\"] },\n  \"self.checkout.create\": { permissions: [] },\n  \"self.checkout.resume\": { permissions: [] },\n  \"self.customer.get\": { permissions: [] },\n  \"self.entitlements\": { permissions: [] },\n  \"self.invoices.get\": { permissions: [] },\n  \"self.invoices.list\": { permissions: [] },\n  \"self.payments.get\": { permissions: [] },\n  \"self.payments.list\": { permissions: [] },\n  \"self.subscription.cancel\": { permissions: [] },\n  \"self.subscription.change\": { permissions: [] },\n  \"self.subscription.enroll\": { permissions: [] },\n  \"self.subscription.get\": { permissions: [] },\n  \"subscriptions.cancel\": { permissions: [\"subscriptions.write\"] },\n  \"subscriptions.create\": { permissions: [\"subscriptions.write\"] },\n  \"subscriptions.get\": { permissions: [\"subscriptions.read\"] },\n  \"subscriptions.list\": { permissions: [\"subscriptions.read\"] },\n  \"subscriptions.update\": { permissions: [\"subscriptions.write\"] },\n  \"webhooks.create\": { permissions: [\"webhooks.write\"] },\n  \"webhooks.delete\": { permissions: [\"webhooks.write\"] },\n  \"webhooks.get\": { permissions: [\"webhooks.read\"] },\n  \"webhooks.list\": { permissions: [\"webhooks.read\"] },\n  \"webhooks.test\": { permissions: [\"webhooks.write\"] },\n  \"webhooks.update\": { permissions: [\"webhooks.write\"] },\n} satisfies Record<BillingOperation, MollieOperationAuthority>;\n\nexport function requiredMolliePermissionsFor(\n  operation: BillingOperation\n): readonly string[] {\n  return MOLLIE_OPERATION_AUTHORITY[operation].permissions;\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  operation: string\n): MollieOperationScope {\n  if (operation.startsWith(\"webhooks.\")) {\n    return \"organization\";\n  }\n  if (\n    operation.startsWith(\"payments.\") ||\n    operation.startsWith(\"refunds.\") ||\n    operation.startsWith(\"paymentLinks.\") ||\n    operation.startsWith(\"subscriptions.\")\n  ) {\n    return \"profile\";\n  }\n  if (operation.startsWith(\"customers.\") || operation.startsWith(\"invoices.\")) {\n    return \"organization\";\n  }\n  return \"automatic\";\n}\n","import {\n  ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n  ATHENA_BILLING_TARGET_AMBIGUOUS,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingExecutionTarget,\n  BillingProviderName,\n} from \"../../../types.ts\";\nimport type { BillingProviderRegistry } from \"./registry.ts\";\nimport { normalizeBillingProviderName } from \"./registry.ts\";\nimport type { ResolvedBillingExecutionTarget } from \"./types.ts\";\n\nfunction configuredProviderNames(\n  configured: BillingProviderConfigMap | undefined\n): BillingProviderName[] {\n  if (configured == null) {\n    return [];\n  }\n  return Object.keys(configured)\n    .filter((name) => configured[name] != null)\n    .map((name) => normalizeBillingProviderName(name));\n}\n\nfunction isProviderConfigured(\n  configured: BillingProviderConfigMap | undefined,\n  provider: BillingProviderName\n): boolean {\n  return configuredProviderNames(configured).includes(provider);\n}\n\nexport function resolveBillingExecutionTarget(input: {\n  target?: BillingExecutionTarget;\n  configuredProviders: BillingProviderConfigMap | undefined;\n  registry: BillingProviderRegistry;\n}): ResolvedBillingExecutionTarget {\n  const connectionId = input.target?.connectionId?.trim() ?? \"\";\n  const explicitProvider = input.target?.provider?.trim() ?? \"\";\n  const hasConnectionId = connectionId.length > 0;\n  const hasProvider = explicitProvider.length > 0;\n\n  if (hasConnectionId && hasProvider) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_TARGET_AMBIGUOUS,\n      message:\n        \"Billing target is ambiguous: provide either connectionId or provider, not both.\",\n    });\n  }\n\n  if (hasConnectionId) {\n    return {\n      connectionId,\n      kind: \"connection\",\n      provider: hasProvider\n        ? normalizeBillingProviderName(explicitProvider)\n        : undefined,\n    };\n  }\n\n  if (hasProvider) {\n    const provider = normalizeBillingProviderName(explicitProvider);\n    if (!isProviderConfigured(input.configuredProviders, provider)) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n        message: `Billing provider \"${provider}\" is not configured.`,\n      });\n    }\n    return {\n      kind: \"configured\",\n      provider,\n      runtime: input.registry.require(provider),\n    };\n  }\n\n  const configured = configuredProviderNames(input.configuredProviders);\n  if (configured.length === 0) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: \"No billing provider is configured.\",\n    });\n  }\n  if (configured.length > 1) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_TARGET_AMBIGUOUS,\n      message:\n        \"Billing target is ambiguous: multiple providers are configured and no provider was specified.\",\n    });\n  }\n\n  const provider = configured[0];\n  if (provider == null) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n      message: \"No billing provider is configured.\",\n    });\n  }\n  return {\n    kind: \"configured\",\n    provider,\n    runtime: input.registry.require(provider),\n  };\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  subject: AthenaPrincipal,\n  operations: readonly BillingOperation[]\n): AthenaPrincipal {\n  const rights = Object.freeze([\n    ...new Set(\n      operations.flatMap((operation) => requiredBillingRights(operation))\n    ),\n  ]);\n  return {\n    authenticated: true,\n    grants: [],\n    rights,\n    ...(subject.organizationId === null\n      ? {}\n      : { organizationId: subject.organizationId }),\n    ...(subject.sessionId === null ? {} : { sessionId: subject.sessionId }),\n    ...(subject.userId === null ? {} : { userId: subject.userId }),\n  };\n}\n","import type { AthenaPrincipal } from \"../../runtime/data/principal.ts\";\nimport { AthenaBillingError } from \"../errors.ts\";\n\nexport function requireBillingPrincipalUserId(\n  principal: AthenaPrincipal\n): string {\n  const userId = principal.userId?.trim();\n  if (userId == null || userId.length === 0) {\n    throw new AthenaBillingError({\n      body: { field: \"userId\" },\n      code: \"ATHENA_BILLING_INVALID_REQUEST\",\n      endpoint: \"\",\n      message: \"Authenticated billing subject is required.\",\n      method: \"POST\",\n      status: 400,\n    });\n  }\n  return userId;\n}\n","import type { AthenaPrincipal } from \"../../../../runtime/data/principal.ts\";\nimport type { BillingProviderConfigMap } from \"../../../providers/types.ts\";\nimport type {\n  BillingCancelSubscriptionInput,\n  BillingCreateSubscriptionInput,\n  BillingGetSubscriptionInput,\n  BillingListSubscriptionsInput,\n  BillingSubscription,\n  BillingUpdateSubscriptionInput,\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  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCreateSubscriptionInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  return executeLocalBillingOperation({\n    invoke: (subscriptions, context, payload) =>\n      subscriptions.create(context, {\n        amount: payload.amount,\n        customerId: payload.customerId,\n        description: payload.description,\n        idempotencyKey: payload.idempotencyKey,\n        interval: payload.interval,\n        metadata: payload.metadata,\n      }),\n    operation: \"subscriptions.create\",\n    port: \"subscriptions\",\n    request: input,\n    safety: \"defer-then-finalize\",\n  });\n}\n\nexport async function executeLocalBillingSubscriptionGet(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingGetSubscriptionInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  return executeLocalBillingOperation({\n    invoke: (subscriptions, context, payload) =>\n      subscriptions.get(context, {\n        customerId: payload.customerId,\n        subscriptionId: payload.subscriptionId,\n      }),\n    operation: \"subscriptions.get\",\n    port: \"subscriptions\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingSubscriptionList(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingListSubscriptionsInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingPage<BillingSubscription>> {\n  return executeLocalBillingOperation({\n    before: (payload) =>\n      rejectUnsupportedListOffset(\"subscriptions.list\", payload.offset),\n    invoke: (subscriptions, context, payload) =>\n      subscriptions.list(context, {\n        cursor: payload.cursor,\n        customerId: payload.customerId,\n        limit: payload.limit,\n      }),\n    operation: \"subscriptions.list\",\n    port: \"subscriptions\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingSubscriptionUpdate(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingUpdateSubscriptionInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  return executeLocalBillingOperation({\n    invoke: (subscriptions, context, payload) =>\n      subscriptions.update(context, {\n        amount: payload.amount,\n        customerId: payload.customerId,\n        description: payload.description,\n        interval: payload.interval,\n        metadata: payload.metadata,\n        subscriptionId: payload.subscriptionId,\n      }),\n    operation: \"subscriptions.update\",\n    port: \"subscriptions\",\n    request: input,\n  });\n}\n\nexport async function executeLocalBillingSubscriptionCancel(input: {\n  authority: import(\"../../invocation-authority.ts\").BillingInvocationAuthority;\n  configuredProviders?: BillingProviderConfigMap;\n  payload: BillingCancelSubscriptionInput;\n  principal?: AthenaPrincipal;\n  registry: BillingProviderRegistry;\n  testMode?: boolean;\n}): Promise<BillingSubscription> {\n  return executeLocalBillingOperation({\n    invoke: (subscriptions, context, payload) =>\n      subscriptions.cancel(context, {\n        customerId: payload.customerId,\n        subscriptionId: payload.subscriptionId,\n      }),\n    operation: \"subscriptions.cancel\",\n    port: \"subscriptions\",\n    request: input,\n  });\n}\n","import { AthenaBillingCapabilityError } from \"../../errors.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\nimport type { BillingProviderName } from \"../../types.ts\";\n\nexport type BillingCheckoutSessionStatus =\n  | \"first_payment_required\"\n  | \"first_payment_paid\"\n  | \"first_payment_failed\"\n  | \"first_payment_canceled\"\n  | \"enrolled\"\n  | \"late_paid\"\n  | \"reconcile_required\"\n  | \"refund_required\";\n\nexport type BillingCheckoutSessionKind = \"one_off\" | \"subscription_enrollment\";\n\nexport interface BillingCheckoutSessionRecord {\n  checkoutUrl: string | null;\n  connectionId?: string | null;\n  createdAt: string;\n  enrollmentId?: string | null;\n  expiresAt?: string | null;\n  id: string;\n  idempotencyKey: string;\n  kind?: BillingCheckoutSessionKind;\n  metadata: Record<string, unknown>;\n  priceId: string;\n  provider: BillingProviderName;\n  providerCustomerId: string | null;\n  providerPaymentId: string | null;\n  providerSubscriptionId: string | null;\n  returnNonceHash?: string | null;\n  status: BillingCheckoutSessionStatus;\n  subjectId: string;\n  subjectKind: \"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  session: BillingCheckoutSessionRecord,\n  now = Date.now()\n): boolean {\n  if (session.status !== \"first_payment_required\") {\n    return false;\n  }\n  if (session.expiresAt != null && session.expiresAt.trim() !== \"\") {\n    const expires = Date.parse(session.expiresAt);\n    if (Number.isFinite(expires)) {\n      return now > expires;\n    }\n  }\n  const created = Date.parse(session.createdAt);\n  if (!Number.isFinite(created)) {\n    return true;\n  }\n  return now - created > CHECKOUT_SESSION_RESUME_TTL_MS;\n}\n\nexport function checkoutAttemptExpiresAtIso(now = Date.now()): string {\n  return new Date(now + CHECKOUT_SESSION_RESUME_TTL_MS).toISOString();\n}\n\nfunction createdAtIso(value: unknown): string {\n  if (value instanceof Date && !Number.isNaN(value.getTime())) {\n    return value.toISOString();\n  }\n  if (typeof value === \"string\" && value.trim().length > 0) {\n    const parsed = Date.parse(value);\n    if (Number.isFinite(parsed)) {\n      return new Date(parsed).toISOString();\n    }\n  }\n  return new Date().toISOString();\n}\n\nfunction asStatus(value: unknown): BillingCheckoutSessionStatus {\n  if (\n    value === \"first_payment_paid\" ||\n    value === \"first_payment_failed\" ||\n    value === \"first_payment_canceled\" ||\n    value === \"enrolled\" ||\n    value === \"late_paid\" ||\n    value === \"reconcile_required\" ||\n    value === \"refund_required\"\n  ) {\n    return value;\n  }\n  return \"first_payment_required\";\n}\n\nfunction asKind(value: unknown): BillingCheckoutSessionKind {\n  return value === \"one_off\" ? \"one_off\" : \"subscription_enrollment\";\n}\n\nfunction asRecord(row: Record<string, unknown>): BillingCheckoutSessionRecord {\n  const metadata = row.metadata;\n  return {\n    checkoutUrl: typeof row.checkout_url === \"string\" ? row.checkout_url : null,\n    connectionId:\n      typeof row.connection_id === \"string\" ? row.connection_id : null,\n    createdAt: createdAtIso(row.created_at),\n    enrollmentId:\n      typeof row.enrollment_id === \"string\" ? row.enrollment_id : null,\n    expiresAt:\n      row.expires_at instanceof Date\n        ? row.expires_at.toISOString()\n        : typeof row.expires_at === \"string\"\n          ? row.expires_at\n          : null,\n    id: String(row.id ?? \"\"),\n    idempotencyKey: String(row.idempotency_key ?? \"\"),\n    kind: asKind(row.kind),\n    metadata:\n      metadata !== null &&\n        typeof metadata === \"object\" &&\n        !Array.isArray(metadata)\n        ? (metadata as Record<string, unknown>)\n        : {},\n    priceId: String(row.price_id ?? \"\"),\n    provider: row.provider === \"stripe\" ? \"stripe\" : \"mollie\",\n    providerCustomerId:\n      typeof row.provider_customer_id === \"string\"\n        ? row.provider_customer_id\n        : null,\n    providerPaymentId:\n      typeof row.provider_payment_id === \"string\"\n        ? row.provider_payment_id\n        : null,\n    providerSubscriptionId:\n      typeof row.provider_subscription_id === \"string\"\n        ? row.provider_subscription_id\n        : null,\n    returnNonceHash:\n      typeof row.return_nonce_hash === \"string\" ? row.return_nonce_hash : null,\n    status: asStatus(row.status),\n    subjectId: String(row.subject_id ?? \"\"),\n    subjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n  };\n}\n\nexport interface BillingCheckoutSessionLineRecord {\n  amountCurrency: string;\n  amountValue: string;\n  checkoutSessionId: string;\n  id: string;\n  interval: string | null;\n  ordinal: number;\n  priceId: string;\n  productId: string;\n  quantity: number;\n  relationId: string | null;\n}\n\nexport function billingSqlTransactionOrThrow(\n  sql: BillingSqlExecutor\n): NonNullable<BillingSqlExecutor[\"transaction\"]> {\n  const transaction = sql.transaction;\n  if (typeof transaction !== \"function\") {\n    throw new AthenaBillingCapabilityError({\n      message:\n        \"self.checkout.create requires a transactional Billing SQL runtime.\",\n      operation: \"self.checkout.create\",\n      reason: \"runtime_unavailable\",\n    });\n  }\n  return transaction;\n}\n\nexport async function requireBillingSqlTransaction<T>(\n  sql: BillingSqlExecutor,\n  fn: (sql: BillingSqlExecutor) => Promise<T>\n): Promise<T> {\n  return billingSqlTransactionOrThrow(sql)(fn);\n}\n\nconst CHECKOUT_LINE_INSERT_COLUMNS = 8;\n\nexport async function insertCheckoutSessionLines(input: {\n  checkoutSessionId: string;\n  lines: readonly {\n    amountCurrency: string;\n    amountValue: string;\n    interval?: string | null;\n    ordinal: number;\n    priceId: string;\n    productId: string;\n    quantity: number;\n    relationId?: string;\n  }[];\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  if (input.lines.length === 0) {\n    return;\n  }\n  const values = input.lines.map((_, index) => {\n    const offset = index * CHECKOUT_LINE_INSERT_COLUMNS;\n    return `(gen_random_uuid(), $1::uuid, $${offset + 2}, $${offset + 3}, $${offset + 4}, $${offset + 5}, $${offset + 6}, $${offset + 7}, $${offset + 8}, $${offset + 9})`;\n  });\n  const params: unknown[] = [\n    input.checkoutSessionId,\n    ...input.lines.flatMap((line) => [\n      line.ordinal,\n      line.productId,\n      line.priceId,\n      line.amountCurrency,\n      line.amountValue,\n      line.interval ?? null,\n      line.quantity,\n      line.relationId ?? null,\n    ]),\n  ];\n  await input.sql.query(\n    `INSERT INTO billing.billing_checkout_session_lines (\n\t\t\t\tid,\n\t\t\t\tcheckout_session_id,\n\t\t\t\tordinal,\n\t\t\t\tproduct_id,\n\t\t\t\tprice_id,\n\t\t\t\tamount_currency,\n\t\t\t\tamount_value,\n\t\t\t\tinterval,\n\t\t\t\tquantity,\n\t\t\t\trelation_id\n\t\t\t) VALUES ${values.join(\", \")}\n\t\t\tON CONFLICT (checkout_session_id, ordinal) DO NOTHING`,\n    params\n  );\n}\n\nfunction asLineRecord(\n  row: Record<string, unknown>\n): BillingCheckoutSessionLineRecord {\n  return {\n    amountCurrency: String(row.amount_currency ?? \"\"),\n    amountValue: String(row.amount_value ?? \"\"),\n    checkoutSessionId: String(row.checkout_session_id ?? \"\"),\n    id: String(row.id ?? \"\"),\n    interval: typeof row.interval === \"string\" ? row.interval : null,\n    ordinal: Number(row.ordinal ?? 0),\n    priceId: String(row.price_id ?? \"\"),\n    productId: String(row.product_id ?? \"\"),\n    quantity: Number(row.quantity ?? 1),\n    relationId: typeof row.relation_id === \"string\" ? row.relation_id : null,\n  };\n}\n\nexport async function listCheckoutSessionLines(input: {\n  checkoutSessionId: string;\n  sql: BillingSqlExecutor;\n}): Promise<readonly BillingCheckoutSessionLineRecord[]> {\n  const result = await input.sql.query(\n    `SELECT *\n\t\t FROM billing.billing_checkout_session_lines\n\t\t WHERE checkout_session_id = $1\n\t\t ORDER BY ordinal ASC`,\n    [input.checkoutSessionId]\n  );\n  return result.rows.map(asLineRecord);\n}\n\nexport async function getCheckoutSessionByIdempotency(input: {\n  idempotencyKey: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n  const result = await input.sql.query(\n    `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    [input.subjectKind, input.subjectId, input.idempotencyKey]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByPayment(input: {\n  provider: BillingProviderName;\n  providerPaymentId: string;\n  sql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n  const result = await input.sql.query(\n    `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    [input.provider, input.providerPaymentId]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function getCheckoutSessionByReturnNonce(input: {\n  returnNonceHash: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n  const result = await input.sql.query(\n    `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    [input.returnNonceHash, input.subjectKind, input.subjectId]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function listUsableMandateSessions(input: {\n  providerCustomerId: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<readonly BillingCheckoutSessionRecord[]> {\n  const result = await input.sql.query(\n    `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    [input.subjectKind, input.subjectId, input.providerCustomerId]\n  );\n  return result.rows.map(asRecord);\n}\n\nexport async function insertCheckoutSession(\n  input: Omit<BillingCheckoutSessionRecord, \"createdAt\"> & {\n    connectionId?: string | null;\n    createdAt?: string;\n    enrollmentId?: string | null;\n    expiresAt?: string | null;\n    kind?: BillingCheckoutSessionKind;\n    returnNonceHash?: string | null;\n    sql: BillingSqlExecutor;\n  }\n): Promise<BillingCheckoutSessionRecord> {\n  const result = await input.sql.query(\n    `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\tenrollment_id\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, $17::uuid\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    [\n      input.id.trim() === \"\" ? null : input.id,\n      input.idempotencyKey,\n      input.subjectKind,\n      input.subjectId,\n      input.priceId,\n      input.provider,\n      input.providerCustomerId,\n      input.providerPaymentId,\n      input.providerSubscriptionId,\n      input.status,\n      input.checkoutUrl,\n      JSON.stringify(input.metadata),\n      input.kind ?? \"subscription_enrollment\",\n      input.connectionId ?? null,\n      input.returnNonceHash ?? null,\n      input.expiresAt ?? null,\n      input.enrollmentId ?? null,\n    ]\n  );\n  const row = result.rows[0];\n  if (!row) {\n    throw new Error(\"Failed to persist billing checkout session.\");\n  }\n  return asRecord(row);\n}\n\nexport const CHECKOUT_SESSION_ADVANCE_CLAIM = \"__claiming__\";\n\nexport async function claimCheckoutSessionForSubscriptionAdvance(input: {\n  id: string;\n  sql: BillingSqlExecutor;\n}): Promise<BillingCheckoutSessionRecord | undefined> {\n  const result = await input.sql.query(\n    `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    [input.id, CHECKOUT_SESSION_ADVANCE_CLAIM]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function releaseCheckoutSessionAdvanceClaim(input: {\n  id: string;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  await input.sql.query(\n    `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    [input.id, CHECKOUT_SESSION_ADVANCE_CLAIM]\n  );\n}\n\nexport async function updateCheckoutSession(input: {\n  id: string;\n  sql: BillingSqlExecutor;\n  checkoutUrl?: string | null;\n  enrollmentId?: string | null;\n  expiresAt?: string | null;\n  metadata?: Record<string, unknown>;\n  providerCustomerId?: string | null;\n  providerPaymentId?: string | null;\n  providerSubscriptionId?: string | null;\n  returnNonceHash?: string | null;\n  status: BillingCheckoutSessionStatus;\n}): Promise<BillingCheckoutSessionRecord> {\n  const result = await input.sql.query(\n    `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     enrollment_id = COALESCE($9::uuid, enrollment_id),\n\t\t     metadata = CASE\n\t\t       WHEN $10::jsonb IS NULL THEN metadata\n\t\t       ELSE metadata || $10::jsonb\n\t\t     END,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t RETURNING *`,\n    [\n      input.id,\n      input.status,\n      input.checkoutUrl,\n      input.providerCustomerId,\n      input.providerPaymentId,\n      input.providerSubscriptionId,\n      input.returnNonceHash,\n      input.expiresAt,\n      input.enrollmentId ?? null,\n      input.metadata == null ? null : JSON.stringify(input.metadata),\n    ]\n  );\n  const row = result.rows[0];\n  if (!row) {\n    throw new Error(\"Failed to update billing checkout session.\");\n  }\n  return asRecord(row);\n}\n","import { randomUUID } from \"node:crypto\";\nimport { billingSubscriptionAlreadyActive } from \"../../subject/errors.ts\";\nimport { isBillingUniqueViolation } from \"../../subject/postgres.ts\";\nimport type { BillingSqlExecutor } from \"../../subject/repository.ts\";\n\nexport const LIVE_ENROLLMENT_STATES = [\n  \"reserved\",\n  \"first_payment_pending\",\n  \"advancing\",\n  \"active\",\n] as const;\n\nexport const CLAIMABLE_ENROLLMENT_STATES = [\n  \"reserved\",\n  \"first_payment_pending\",\n  \"advancing\",\n] as const;\n\nexport type BillingEnrollmentState =\n  | \"reserved\"\n  | \"first_payment_pending\"\n  | \"advancing\"\n  | \"active\"\n  | \"failed\"\n  | \"canceled\"\n  | \"expired\"\n  | \"superseded\";\n\nexport interface BillingSubscriptionEnrollmentRecord {\n  attemptCount: number;\n  connectionId: string;\n  fencingEpoch: number;\n  id: string;\n  idempotencyKey: string;\n  journalIntent: string | null;\n  lastError: string | null;\n  leaseExpiresAt: string | null;\n  leaseToken: string | null;\n  priceId: string;\n  providerIdempotencyKey: string | null;\n  providerPaymentId: string | null;\n  providerSubscriptionId: string | null;\n  state: BillingEnrollmentState;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}\n\nconst LIVE_LIST = LIVE_ENROLLMENT_STATES.map((state) => `'${state}'`).join(\n  \", \"\n);\n\nexport function enrollmentProviderEffectIdempotencyKey(\n  enrollment: Pick<\n    BillingSubscriptionEnrollmentRecord,\n    \"idempotencyKey\" | \"providerIdempotencyKey\"\n  >\n): string {\n  return enrollment.providerIdempotencyKey ?? enrollment.idempotencyKey;\n}\n\nfunction asState(value: unknown): BillingEnrollmentState {\n  switch (value) {\n    case \"reserved\":\n    case \"first_payment_pending\":\n    case \"advancing\":\n    case \"active\":\n    case \"failed\":\n    case \"canceled\":\n    case \"expired\":\n    case \"superseded\":\n      return value;\n    default:\n      return \"reserved\";\n  }\n}\n\nfunction asRecord(\n  row: Record<string, unknown>\n): BillingSubscriptionEnrollmentRecord {\n  return {\n    attemptCount: Number(row.attempt_count ?? 0),\n    connectionId: String(row.connection_id),\n    fencingEpoch: Number(row.fencing_epoch ?? 0),\n    id: String(row.id),\n    idempotencyKey: String(row.idempotency_key),\n    journalIntent:\n      typeof row.journal_intent === \"string\" ? row.journal_intent : null,\n    lastError: typeof row.last_error === \"string\" ? row.last_error : null,\n    leaseExpiresAt:\n      row.lease_expires_at instanceof Date\n        ? row.lease_expires_at.toISOString()\n        : typeof row.lease_expires_at === \"string\"\n          ? row.lease_expires_at\n          : null,\n    leaseToken: typeof row.lease_token === \"string\" ? row.lease_token : null,\n    priceId: String(row.price_id),\n    providerIdempotencyKey:\n      typeof row.provider_idempotency_key === \"string\"\n        ? row.provider_idempotency_key\n        : null,\n    providerPaymentId:\n      typeof row.provider_payment_id === \"string\"\n        ? row.provider_payment_id\n        : null,\n    providerSubscriptionId:\n      typeof row.provider_subscription_id === \"string\"\n        ? row.provider_subscription_id\n        : null,\n    state: asState(row.state),\n    subjectId: String(row.subject_id),\n    subjectKind: row.subject_kind === \"organization\" ? \"organization\" : \"user\",\n  };\n}\n\nexport async function getEnrollmentById(input: {\n  id: string;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSubscriptionEnrollmentRecord | undefined> {\n  const result = await input.sql.query(\n    `SELECT *\n\t\t FROM billing.billing_subscription_enrollments\n\t\t WHERE id = $1\n\t\t LIMIT 1`,\n    [input.id]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function getLiveEnrollmentForSubject(input: {\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<BillingSubscriptionEnrollmentRecord | undefined> {\n  const result = await input.sql.query(\n    `SELECT *\n\t\t FROM billing.billing_subscription_enrollments\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND state IN (${LIVE_LIST})\n\t\t LIMIT 1`,\n    [input.subjectKind, input.subjectId]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function expireStaleReservations(input: {\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<void> {\n  await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET state = 'expired',\n\t\t     updated_at = now()\n\t\t WHERE subject_kind = $1\n\t\t   AND subject_id = $2\n\t\t   AND state = 'reserved'\n\t\t   AND lease_expires_at IS NOT NULL\n\t\t   AND lease_expires_at < now()`,\n    [input.subjectKind, input.subjectId]\n  );\n}\n\nexport async function reserveSubjectEnrollment(input: {\n  connectionId: string;\n  idempotencyKey: string;\n  priceId: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<BillingSubscriptionEnrollmentRecord> {\n  await expireStaleReservations(input);\n  const existing = await getLiveEnrollmentForSubject(input);\n  if (existing) {\n    if (existing.idempotencyKey === input.idempotencyKey) {\n      return existing;\n    }\n    throw billingSubscriptionAlreadyActive();\n  }\n  const id = randomUUID();\n  try {\n    const result = await input.sql.query(\n      `INSERT INTO billing.billing_subscription_enrollments (\n\t\t\t\tid,\n\t\t\t\tconnection_id,\n\t\t\t\tsubject_kind,\n\t\t\t\tsubject_id,\n\t\t\t\tprice_id,\n\t\t\t\tidempotency_key,\n\t\t\t\tstate,\n\t\t\t\tprovider_idempotency_key,\n\t\t\t\tfencing_epoch\n\t\t\t) VALUES (\n\t\t\t\t$1::uuid, $2::uuid, $3, $4, $5, $6, 'reserved', $1::text, 0\n\t\t\t)\n\t\t\tRETURNING *`,\n      [\n        id,\n        input.connectionId,\n        input.subjectKind,\n        input.subjectId,\n        input.priceId,\n        input.idempotencyKey,\n      ]\n    );\n    const row = result.rows[0];\n    if (row) {\n      return asRecord(row);\n    }\n  } catch (error) {\n    if (!isBillingUniqueViolation(error)) {\n      throw error;\n    }\n    const raced = await getLiveEnrollmentForSubject(input);\n    if (raced && raced.idempotencyKey === input.idempotencyKey) {\n      return raced;\n    }\n    throw billingSubscriptionAlreadyActive();\n  }\n  throw billingSubscriptionAlreadyActive();\n}\n\nexport async function ensureActiveCoordinatorForSubscription(input: {\n  connectionId: string;\n  idempotencyKey: string;\n  priceId: string;\n  providerSubscriptionId: string;\n  sql: BillingSqlExecutor;\n  subjectId: string;\n  subjectKind: \"user\" | \"organization\";\n}): Promise<BillingSubscriptionEnrollmentRecord> {\n  const live = await getLiveEnrollmentForSubject(input);\n  if (live) {\n    return live;\n  }\n  const id = randomUUID();\n  try {\n    const result = await input.sql.query(\n      `INSERT INTO billing.billing_subscription_enrollments (\n\t\t\t\tid,\n\t\t\t\tconnection_id,\n\t\t\t\tsubject_kind,\n\t\t\t\tsubject_id,\n\t\t\t\tprice_id,\n\t\t\t\tidempotency_key,\n\t\t\t\tstate,\n\t\t\t\tprovider_subscription_id,\n\t\t\t\tprovider_idempotency_key,\n\t\t\t\tfencing_epoch\n\t\t\t) VALUES (\n\t\t\t\t$1::uuid, $2::uuid, $3, $4, $5, $6, 'active', $7, $1::text, 0\n\t\t\t)\n\t\t\tRETURNING *`,\n      [\n        id,\n        input.connectionId,\n        input.subjectKind,\n        input.subjectId,\n        input.priceId,\n        input.idempotencyKey,\n        input.providerSubscriptionId,\n      ]\n    );\n    const row = result.rows[0];\n    if (row) {\n      return asRecord(row);\n    }\n  } catch (error) {\n    if (!isBillingUniqueViolation(error)) {\n      throw error;\n    }\n    const raced = await getLiveEnrollmentForSubject(input);\n    if (raced) {\n      return raced;\n    }\n  }\n  throw billingSubscriptionAlreadyActive();\n}\n\nexport async function updateEnrollment(input: {\n  expectedFencingEpoch?: number;\n  expectedLeaseToken?: string | null;\n  expectedState?: BillingEnrollmentState;\n  id: string;\n  journalIntent?: string | null;\n  lastError?: string | null;\n  providerPaymentId?: string | null;\n  providerSubscriptionId?: string | null;\n  sql: BillingSqlExecutor;\n  state?: BillingEnrollmentState;\n}): Promise<BillingSubscriptionEnrollmentRecord | undefined> {\n  const result = await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET state = COALESCE($2, state),\n\t\t     provider_payment_id = COALESCE($3, provider_payment_id),\n\t\t     provider_subscription_id = COALESCE($4, provider_subscription_id),\n\t\t     journal_intent = COALESCE($5, journal_intent),\n\t\t     last_error = COALESCE($6, last_error),\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND ($7::text IS NULL OR state = $7)\n\t\t   AND ($8::integer IS NULL OR fencing_epoch = $8)\n\t\t   AND ($9::text IS NULL OR lease_token = $9)\n\t\t RETURNING *`,\n    [\n      input.id,\n      input.state ?? null,\n      input.providerPaymentId ?? null,\n      input.providerSubscriptionId ?? null,\n      input.journalIntent ?? null,\n      input.lastError ?? null,\n      input.expectedState ?? null,\n      input.expectedFencingEpoch ?? null,\n      input.expectedLeaseToken ?? null,\n    ]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function claimEnrollmentForAdvance(input: {\n  id: string;\n  leaseToken: string;\n  sql: BillingSqlExecutor;\n}): Promise<BillingSubscriptionEnrollmentRecord | undefined> {\n  const result = await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET state = 'advancing',\n\t\t     lease_token = $2,\n\t\t     lease_expires_at = now() + interval '30 seconds',\n\t\t     fencing_epoch = fencing_epoch + 1,\n\t\t     attempt_count = attempt_count + 1,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND (\n\t\t     state IN ('reserved', 'first_payment_pending')\n\t\t     OR (\n\t\t       state = 'advancing'\n\t\t       AND lease_expires_at IS NOT NULL\n\t\t       AND lease_expires_at < now()\n\t\t     )\n\t\t   )\n\t\t   AND (\n\t\t     lease_expires_at IS NULL\n\t\t     OR lease_expires_at < now()\n\t\t     OR lease_token = $2\n\t\t   )\n\t\t RETURNING *`,\n    [input.id, input.leaseToken]\n  );\n  const row = result.rows[0];\n  return row ? asRecord(row) : undefined;\n}\n\nexport async function heartbeatEnrollmentLease(input: {\n  id: string;\n  leaseToken: string;\n  sql: BillingSqlExecutor;\n}): Promise<boolean> {\n  const result = await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET lease_expires_at = now() + interval '30 seconds',\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND lease_token = $2\n\t\t   AND state = 'advancing'\n\t\t RETURNING id`,\n    [input.id, input.leaseToken]\n  );\n  return result.rows[0] != null;\n}\n\nexport async function markEnrollmentActive(input: {\n  expectedFencingEpoch?: number;\n  expectedLeaseToken?: string | null;\n  id: string;\n  providerSubscriptionId: string;\n  sql: BillingSqlExecutor;\n}): Promise<boolean> {\n  const result = await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET state = 'active',\n\t\t     provider_subscription_id = $2,\n\t\t     journal_intent = 'subscription_persisted',\n\t\t     lease_token = NULL,\n\t\t     lease_expires_at = NULL,\n\t\t     last_error = NULL,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND state IN ('reserved', 'first_payment_pending', 'advancing')\n\t\t   AND ($3::integer IS NULL OR fencing_epoch = $3)\n\t\t   AND ($4::text IS NULL OR lease_token = $4)\n\t\t   AND (\n\t\t     state IN ('reserved', 'first_payment_pending')\n\t\t     OR lease_expires_at IS NULL\n\t\t     OR lease_expires_at >= now()\n\t\t   )\n\t\t RETURNING id`,\n    [\n      input.id,\n      input.providerSubscriptionId,\n      input.expectedFencingEpoch ?? null,\n      input.expectedLeaseToken ?? null,\n    ]\n  );\n  return result.rows[0] != null;\n}\n\nexport async function recordEnrollmentJournal(input: {\n  id: string;\n  intent: string;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET journal_intent = $2,\n\t\t     updated_at = now()\n\t\t WHERE id = $1`,\n    [input.id, input.intent]\n  );\n}\n\nexport async function recordEnrollmentAdvanceFailure(input: {\n  expectedLeaseToken?: string;\n  id: string;\n  lastError: string;\n  sql: BillingSqlExecutor;\n}): Promise<void> {\n  await input.sql.query(\n    `UPDATE billing.billing_subscription_enrollments\n\t\t SET last_error = $2,\n\t\t     updated_at = now()\n\t\t WHERE id = $1\n\t\t   AND state = 'advancing'\n\t\t   AND ($3::text IS NULL OR lease_token = $3)`,\n    [input.id, input.lastError, input.expectedLeaseToken ?? null]\n  );\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  credential: BillingResolvedCredential;\n  id: string;\n  kind: \"payment\" | \"subscription\" | \"invoice\";\n  operationScope?: \"organization\" | \"profile\" | \"automatic\";\n  pool: MollieSdkClientPool;\n  profileId?: string | null;\n}): Promise<unknown> {\n  const client = clientFromPool(input.pool, {\n    credential: input.credential,\n    operationScope: input.operationScope,\n    target: { profileId: input.profileId },\n  });\n  if (input.kind === \"subscription\") {\n    return callMollieSdk({\n      client,\n      method: \"get\",\n      operation: \"subscriptions.get\",\n      request: { subscriptionId: input.id },\n      resource: \"subscriptions\",\n    });\n  }\n  if (input.kind === \"invoice\") {\n    return callMollieSdk({\n      client,\n      method: \"get\",\n      operation: \"invoices.get\",\n      request: { invoiceId: input.id },\n      resource: \"invoices\",\n    });\n  }\n  return callMollieSdk({\n    client,\n    method: \"get\",\n    operation: \"payments.get\",\n    request: { paymentId: input.id },\n    resource: \"payments\",\n  });\n}\n","import {\n  ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n  ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n  AthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../../runtime/ingress/identity.ts\";\nimport type { AthenaIngressIR } from \"../../../../../runtime/ingress/ir.ts\";\nimport {\n  type CanonicalBillingDocument,\n  canonicalDocumentRevision,\n  canonicalDocumentSubjectId,\n} from \"../../../../canonical/document.ts\";\nimport { canonicalizeBillingEvents } from \"../../../../canonical/transition.ts\";\nimport type {\n  BillingProviderWebhookPort,\n  BillingWebhookVerificationStrategy,\n} from \"../webhook-port.ts\";\nimport {\n  type MollieWebhookChannel,\n  requireMollieWebhookChannel,\n} from \"./channel.ts\";\nimport {\n  classifyMollieWebhookBody,\n  type MollieWebhookEnvelope,\n  parseMollieWebhookForChannel,\n} from \"./parse-webhook.ts\";\nimport { projectMollieResourceToCanonical } from \"./project-document.ts\";\nimport {\n  MOLLIE_WEBHOOK_MAX_BODY_BYTES,\n  verifyMollieWebhookSignature,\n} from \"./verify-webhook.ts\";\n\nexport interface MollieWebhookResource {\n  kind: \"payment\" | \"subscription\" | \"invoice\";\n  raw: unknown;\n}\n\nexport interface BillingWebhookResolution {\n  provider: \"mollie\";\n  providerEventId: string;\n  resourceId: string;\n  resourceKind: \"payment\" | \"subscription\" | \"invoice\";\n}\n\nexport function mollieResourceKind(\n  envelope: MollieWebhookEnvelope\n): \"payment\" | \"subscription\" | \"invoice\" {\n  if (envelope.kind === \"classic\") {\n    return \"payment\";\n  }\n  if (\n    envelope.eventType.startsWith(\"subscription.\") ||\n    envelope.resource === \"subscription\"\n  ) {\n    return \"subscription\";\n  }\n  if (\n    envelope.eventType.startsWith(\"sales-invoice.\") ||\n    envelope.eventType.startsWith(\"invoice.\") ||\n    envelope.resource === \"invoice\"\n  ) {\n    return \"invoice\";\n  }\n  return \"payment\";\n}\n\nexport function mollieEnvelopeResourceId(\n  envelope: MollieWebhookEnvelope\n): string {\n  return envelope.kind === \"classic\" ? envelope.resourceId : envelope.entityId;\n}\n\nfunction signingSecretsForIngress(\n  input: {\n    resolveSigningSecrets?: (connectionId: string) => readonly string[];\n    signingSecrets?: readonly string[];\n  },\n  connectionId: string | undefined\n): readonly string[] {\n  if (input.resolveSigningSecrets) {\n    if (connectionId == null || connectionId.length === 0) {\n      return [];\n    }\n    return input.resolveSigningSecrets(connectionId);\n  }\n  return input.signingSecrets ?? [];\n}\n\nfunction channelForIngress(ingress: AthenaIngressIR): MollieWebhookChannel {\n  try {\n    return requireMollieWebhookChannel(ingress.operation);\n  } catch {\n    throw new AthenaEventIngressError({\n      code: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n      diagnostics: classifyMollieWebhookBody(\n        ingress.body,\n        ingress.headers[\"content-type\"]\n      ),\n      domain: \"billing\",\n      message:\n        \"Mollie webhook channel must be bound from the route, not inferred from the body.\",\n      provider: \"mollie\",\n      retryable: false,\n    });\n  }\n}\n\nexport function mollieDeterministicEventId(input: {\n  connectionId?: string;\n  document: CanonicalBillingDocument;\n}): string {\n  const revision = canonicalDocumentRevision(input.document);\n  return deriveIngressProviderEventId({\n    authoritativeStateOrVersion: revision.sequence ?? input.document.status,\n    connectionId: input.connectionId,\n    provider: \"mollie\",\n    resourceId: canonicalDocumentSubjectId(input.document),\n    resourceKind: input.document.kind,\n  });\n}\n\nexport function resolveBillingWebhookResolution(input: {\n  connectionId?: string;\n  document: CanonicalBillingDocument;\n  envelope: MollieWebhookEnvelope;\n}): BillingWebhookResolution {\n  const resourceKind = mollieResourceKind(input.envelope);\n  const resourceId = mollieEnvelopeResourceId(input.envelope);\n  const providerEventId =\n    input.envelope.kind === \"next_gen\"\n      ? input.envelope.eventId\n      : mollieDeterministicEventId({\n          document: input.document,\n          ...(input.connectionId ? { connectionId: input.connectionId } : {}),\n        });\n  return {\n    provider: \"mollie\",\n    providerEventId,\n    resourceId,\n    resourceKind,\n  };\n}\n\nexport function createMollieWebhookPort(input: {\n  signingSecrets?: readonly string[];\n  resolveSigningSecrets?: (connectionId: string) => readonly string[];\n  requireSignature?: boolean;\n  verification?: BillingWebhookVerificationStrategy;\n  resolveResource: (input: {\n    connectionId?: string;\n    kind: \"payment\" | \"subscription\" | \"invoice\";\n    id: string;\n  }) => Promise<unknown>;\n}): BillingProviderWebhookPort<MollieWebhookEnvelope, MollieWebhookResource> {\n  return {\n    canonicalizeEvents(context) {\n      return canonicalizeBillingEvents(context);\n    },\n    parseIngress(ingress: AthenaIngressIR): MollieWebhookEnvelope {\n      if (ingress.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n        throw new AthenaEventIngressError({\n          code: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n          diagnostics: classifyMollieWebhookBody(\n            ingress.body,\n            ingress.headers[\"content-type\"]\n          ),\n          domain: \"billing\",\n          message: \"Mollie webhook payload exceeds size limit.\",\n          provider: \"mollie\",\n          retryable: false,\n        });\n      }\n      const channel = channelForIngress(ingress);\n      return parseMollieWebhookForChannel(\n        channel.kind,\n        ingress.body,\n        ingress.headers[\"content-type\"]\n      );\n    },\n    projectDocument(resource) {\n      return projectMollieResourceToCanonical(resource.raw, resource.kind);\n    },\n    providerEventIdBeforeRefetch(envelope) {\n      return envelope.kind === \"next_gen\" ? envelope.eventId : undefined;\n    },\n    async resolveAuthoritativeState(envelope, ingress) {\n      if (input.verification === \"signature\") {\n        throw new AthenaEventIngressError({\n          code: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n          domain: \"billing\",\n          message:\n            \"Mollie ingest requires authoritative refetch; signature-only is not supported.\",\n          provider: \"mollie\",\n          retryable: false,\n        });\n      }\n      const kind = mollieResourceKind(envelope);\n      const id = mollieEnvelopeResourceId(envelope);\n      const raw = await input.resolveResource({\n        id,\n        kind,\n        ...(ingress.connectionId ? { connectionId: ingress.connectionId } : {}),\n      });\n      return { kind, raw };\n    },\n    resolveProviderEventId(envelope, document, ingress) {\n      return resolveBillingWebhookResolution({\n        document,\n        envelope,\n        ...(ingress.connectionId ? { connectionId: ingress.connectionId } : {}),\n      }).providerEventId;\n    },\n    verification: \"signature_and_refetch\",\n    verifyIngress(envelope, ingress) {\n      const channel = channelForIngress(ingress);\n      if (channel.kind !== \"next_gen\" || envelope.kind !== \"next_gen\") {\n        return;\n      }\n      const signature = ingress.headers[\"x-mollie-signature\"];\n      const signingSecrets = signingSecretsForIngress(\n        input,\n        ingress.connectionId\n      );\n      if (signingSecrets.length === 0) {\n        throw new AthenaEventIngressError({\n          code: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n          domain: \"billing\",\n          message:\n            \"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          provider: \"mollie\",\n          retryable: false,\n        });\n      }\n      if (\n        !verifyMollieWebhookSignature({\n          body: ingress.body,\n          signatureHeader: signature,\n          signingSecrets,\n        })\n      ) {\n        throw new AthenaEventIngressError({\n          code: ATHENA_INGRESS_MOLLIE_SIGNATURE_INVALID,\n          domain: \"billing\",\n          message: \"Mollie webhook signature is invalid.\",\n          provider: \"mollie\",\n          retryable: false,\n        });\n      }\n    },\n  };\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveIngressProviderEventId(input: {\n  provider: string;\n  connectionId?: string;\n  resourceKind: string;\n  resourceId: string;\n  authoritativeStateOrVersion: string;\n}): string {\n  const material = [\n    input.provider,\n    input.connectionId ?? \"\",\n    input.resourceKind,\n    input.resourceId,\n    input.authoritativeStateOrVersion,\n  ].join(\"\\0\");\n  return createHash(\"sha256\").update(material).digest(\"hex\");\n}\n","import type {\n  BillingInvoiceStatus,\n  BillingMoney,\n  BillingPaymentStatus,\n  BillingProviderName,\n  BillingSubscriptionStatus,\n} from \"../types.ts\";\n\nexport interface CanonicalMoney {\n  currency: string;\n  value: string;\n}\n\nexport interface CanonicalPayment {\n  amount: BillingMoney;\n  amountRefunded?: BillingMoney | null;\n  createdAt?: string | null;\n  description?: string | null;\n  kind: \"payment\";\n  metadata: unknown;\n  paidAt?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId?: string | null;\n  providerPaymentId: string;\n  providerPaymentLinkId?: string | null;\n  providerProfileId?: string | null;\n  providerSubscriptionId?: string | null;\n  raw: unknown;\n  status: BillingPaymentStatus;\n  updatedAt?: string | null;\n}\n\nexport interface CanonicalSubscription {\n  amount?: BillingMoney | null;\n  canceledAt?: string | null;\n  createdAt?: string | null;\n  currency?: string | null;\n  description?: string | null;\n  interval?: string | null;\n  kind: \"subscription\";\n  metadata: unknown;\n  nextPaymentDate?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId: string;\n  providerProfileId?: string | null;\n  providerSubscriptionId: string;\n  raw: unknown;\n  status: BillingSubscriptionStatus;\n  updatedAt?: string | null;\n}\n\nexport interface CanonicalInvoice {\n  amount?: BillingMoney | null;\n  amountPaid?: BillingMoney | null;\n  createdAt?: string | null;\n  description?: string | null;\n  issuedAt?: string | null;\n  kind: \"invoice\";\n  metadata: unknown;\n  paidAt?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId?: string | null;\n  providerInvoiceId: string;\n  providerProfileId?: string | null;\n  raw: unknown;\n  status: BillingInvoiceStatus;\n  updatedAt?: string | null;\n}\n\nexport type CanonicalBillingDocument =\n  | CanonicalPayment\n  | CanonicalSubscription\n  | CanonicalInvoice;\n\nexport function canonicalDocumentSubjectId(\n  document: CanonicalBillingDocument\n): string {\n  if (document.kind === \"payment\") {\n    return document.providerPaymentId;\n  }\n  if (document.kind === \"subscription\") {\n    return document.providerSubscriptionId;\n  }\n  return document.providerInvoiceId;\n}\n\nexport function canonicalDocumentRevision(document: CanonicalBillingDocument): {\n  providerUpdatedAt?: Date;\n  sequence?: string;\n} {\n  const stamp =\n    document.updatedAt ??\n    (document.kind === \"payment\"\n      ? (document.paidAt ?? document.createdAt)\n      : document.kind === \"subscription\"\n        ? (document.canceledAt ?? document.createdAt)\n        : (document.paidAt ?? document.createdAt));\n  return {\n    sequence: `${document.kind}:${canonicalDocumentSubjectId(document)}:${documentFingerprint(document)}`,\n    ...(stamp ? { providerUpdatedAt: new Date(stamp) } : {}),\n  };\n}\n\nfunction documentFingerprint(document: CanonicalBillingDocument): string {\n  const amount =\n    document.kind === \"payment\"\n      ? `${document.amount.currency}:${document.amount.value}`\n      : `${document.amount?.currency ?? \"\"}:${document.amount?.value ?? \"\"}`;\n  const refunded =\n    document.kind === \"payment\"\n      ? `${document.amountRefunded?.currency ?? \"\"}:${document.amountRefunded?.value ?? \"\"}`\n      : \"\";\n  return [\n    document.status,\n    amount,\n    refunded,\n    document.updatedAt ?? \"\",\n    document.kind === \"payment\"\n      ? (document.paidAt ?? \"\")\n      : document.kind === \"subscription\"\n        ? (document.canceledAt ?? \"\")\n        : (document.paidAt ?? \"\"),\n  ].join(\":\");\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  type CanonicalBillingDocument,\n  canonicalDocumentRevision,\n  canonicalDocumentSubjectId,\n} from \"./document.ts\";\n\nexport type CanonicalBillingEvent = CanonicalEventIR<\n  CanonicalBillingEventName,\n  CanonicalBillingDocument\n>;\n\nexport class AthenaBillingIllegalTransitionError extends Error {\n  readonly code = \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n\n  constructor(previous: string, current: string) {\n    super(\n      `Canonical billing transition ${previous} → ${current} is not allowed.`\n    );\n    this.name = \"AthenaBillingIllegalTransitionError\";\n  }\n}\n\nconst PAYMENT_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n  authorized: new Set([\"authorized\", \"paid\", \"failed\", \"canceled\"]),\n  canceled: new Set([\"canceled\"]),\n  failed: new Set([\"failed\"]),\n  paid: new Set([\"paid\", \"refunded\", \"canceled\"]),\n  pending: new Set([\"pending\", \"authorized\", \"paid\", \"failed\", \"canceled\"]),\n  refunded: new Set([\"refunded\"]),\n};\n\nconst SUBSCRIPTION_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n  active: new Set([\"active\", \"past_due\", \"canceled\", \"paused\"]),\n  canceled: new Set([\"canceled\"]),\n  past_due: new Set([\"past_due\", \"active\", \"canceled\", \"paused\"]),\n  paused: new Set([\"paused\", \"active\", \"canceled\"]),\n  trialing: new Set([\"trialing\", \"active\", \"past_due\", \"canceled\", \"paused\"]),\n};\n\nconst INVOICE_TRANSITIONS: Record<string, ReadonlySet<string>> = {\n  draft: new Set([\"draft\", \"open\", \"void\"]),\n  open: new Set([\"open\", \"paid\", \"void\", \"uncollectible\"]),\n  paid: new Set([\"paid\"]),\n  uncollectible: new Set([\"uncollectible\"]),\n  void: new Set([\"void\"]),\n};\n\nfunction allowedStatuses(\n  kind: CanonicalBillingDocument[\"kind\"],\n  status: string\n): ReadonlySet<string> | undefined {\n  if (kind === \"payment\") {\n    return PAYMENT_TRANSITIONS[status];\n  }\n  if (kind === \"subscription\") {\n    return SUBSCRIPTION_TRANSITIONS[status];\n  }\n  return INVOICE_TRANSITIONS[status];\n}\n\nexport function assertCanonicalBillingTransition(\n  previous: CanonicalBillingDocument | null,\n  current: CanonicalBillingDocument\n): void {\n  if (previous == null || previous.kind !== current.kind) {\n    return;\n  }\n  const allowed = allowedStatuses(previous.kind, previous.status);\n  if (allowed == null || !allowed.has(current.status)) {\n    throw new AthenaBillingIllegalTransitionError(\n      `${previous.kind}:${previous.status}`,\n      `${current.kind}:${current.status}`\n    );\n  }\n}\n\nfunction eventNameForTransition(\n  previous: CanonicalBillingDocument | null,\n  current: CanonicalBillingDocument\n): CanonicalBillingEventName | undefined {\n  if (current.kind === \"payment\") {\n    if (previous == null) {\n      if (current.status === \"paid\") {\n        return \"billing.payment.paid\";\n      }\n      if (current.status === \"failed\") {\n        return \"billing.payment.failed\";\n      }\n      if (current.status === \"canceled\") {\n        return \"billing.payment.canceled\";\n      }\n      if (current.status === \"refunded\") {\n        return \"billing.payment.refunded\";\n      }\n      if (current.status === \"pending\") {\n        return \"billing.payment.pending\";\n      }\n      return \"billing.payment.created\";\n    }\n    if (previous.kind === \"payment\" && previous.status === current.status) {\n      return;\n    }\n    if (current.status === \"paid\") {\n      return \"billing.payment.paid\";\n    }\n    if (current.status === \"failed\") {\n      return \"billing.payment.failed\";\n    }\n    if (current.status === \"canceled\") {\n      return \"billing.payment.canceled\";\n    }\n    if (current.status === \"refunded\") {\n      return \"billing.payment.refunded\";\n    }\n    if (current.status === \"pending\") {\n      return \"billing.payment.pending\";\n    }\n    return \"billing.payment.created\";\n  }\n  if (current.kind === \"subscription\") {\n    if (current.status === \"canceled\") {\n      return \"billing.subscription.canceled\";\n    }\n    if (current.status === \"active\") {\n      return previous == null\n        ? \"billing.subscription.created\"\n        : \"billing.subscription.active\";\n    }\n    return previous == null ? \"billing.subscription.created\" : undefined;\n  }\n  if (current.status === \"paid\") {\n    return \"billing.invoice.paid\";\n  }\n  return previous == null ? \"billing.invoice.created\" : undefined;\n}\n\nexport function canonicalizeBillingEvents(input: {\n  ingress: AthenaIngressIR;\n  previous: CanonicalBillingDocument | null;\n  current: CanonicalBillingDocument;\n}): readonly CanonicalBillingEvent[] {\n  const name = eventNameForTransition(input.previous, input.current);\n  if (!name) {\n    return [];\n  }\n  const revision = canonicalDocumentRevision(input.current);\n  return [\n    {\n      causality: causalityFromIngress(input.ingress),\n      id: deriveCanonicalEventId(\n        [\n          input.ingress.id,\n          name,\n          input.current.kind,\n          canonicalDocumentSubjectId(input.current),\n          input.current.status,\n        ].join(\"\\0\")\n      ),\n      ingressId: input.ingress.id,\n      name,\n      observedAt: input.ingress.receivedAt,\n      occurredAt: revision.providerUpdatedAt ?? input.ingress.receivedAt,\n      payload: input.current,\n      revision,\n      source: {\n        domain: \"billing\",\n        provider:\n          typeof input.current.provider === \"string\"\n            ? input.current.provider\n            : undefined,\n      },\n      subject: {\n        id: canonicalDocumentSubjectId(input.current),\n        type: input.current.kind,\n      },\n    },\n  ];\n}\n","import type { AthenaIngressIR } from \"../ingress/ir.ts\";\nimport type { CanonicalEventCausality } from \"./ir.ts\";\n\nexport function causalityFromIngress(\n  ingress: AthenaIngressIR,\n  causationId?: string\n): CanonicalEventCausality {\n  return {\n    ...(ingress.correlationId ? { correlationId: ingress.correlationId } : {}),\n    ...(causationId ? { causationId } : { causationId: ingress.id }),\n  };\n}\n","import { createHash } from \"node:crypto\";\n\nexport function deriveCanonicalEventId(material: string): string {\n  const hex = createHash(\"sha256\").update(material).digest(\"hex\").slice(0, 32);\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;\n}\n","export const MOLLIE_WEBHOOK_CLASSIC_OPERATION = \"webhook.mollie.classic\";\nexport const MOLLIE_WEBHOOK_EVENTS_OPERATION = \"webhook.mollie.events\";\n\nexport type MollieWebhookChannel =\n  | {\n      kind: \"classic\";\n      operation: typeof MOLLIE_WEBHOOK_CLASSIC_OPERATION;\n      verification: \"authoritative_refetch\";\n    }\n  | {\n      kind: \"next_gen\";\n      operation: typeof MOLLIE_WEBHOOK_EVENTS_OPERATION;\n      verification: \"signature_and_refetch\";\n    };\n\nexport function mollieWebhookChannel(\n  operation: string\n): MollieWebhookChannel | undefined {\n  if (operation === MOLLIE_WEBHOOK_EVENTS_OPERATION) {\n    return {\n      kind: \"next_gen\",\n      operation: MOLLIE_WEBHOOK_EVENTS_OPERATION,\n      verification: \"signature_and_refetch\",\n    };\n  }\n  if (\n    operation === MOLLIE_WEBHOOK_CLASSIC_OPERATION ||\n    operation === \"webhook\"\n  ) {\n    return {\n      kind: \"classic\",\n      operation: MOLLIE_WEBHOOK_CLASSIC_OPERATION,\n      verification: \"authoritative_refetch\",\n    };\n  }\n}\n\nexport function requireMollieWebhookChannel(\n  operation: string\n): MollieWebhookChannel {\n  const channel = mollieWebhookChannel(operation);\n  if (channel == null) {\n    throw new Error(\n      `Mollie webhook channel is not bound to operation \"${operation}\".`\n    );\n  }\n  return channel;\n}\n","import {\n  ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n  AthenaEventIngressError,\n} from \"../../../../../runtime/ingress/errors.ts\";\nimport { mollieWebhookChannel } from \"./channel.ts\";\nimport { MOLLIE_WEBHOOK_MAX_BODY_BYTES } from \"./verify-webhook.ts\";\n\n/** Observability threshold only. Next-gen ingest must not reject on age. */\nexport const MOLLIE_WEBHOOK_MAX_AGE_MS = 15 * 60 * 1000;\n\nexport interface MollieClassicWebhookEnvelope {\n  id: string;\n  kind: \"classic\";\n  resourceId: string;\n}\n\nexport interface MollieNextGenWebhookEnvelope {\n  createdAt: string;\n  entityId: string;\n  eventId: string;\n  eventType: string;\n  id: string;\n  kind: \"next_gen\";\n  resource: string;\n  type: string;\n}\n\nexport type MollieWebhookEnvelope =\n  | MollieClassicWebhookEnvelope\n  | MollieNextGenWebhookEnvelope;\n\nexport type MollieWebhookBodyKind = \"empty\" | \"json\" | \"form\" | \"unknown\";\n\nexport interface MollieWebhookEnvelopeDiagnostics {\n  bodyBytes: number;\n  bodyKind: MollieWebhookBodyKind;\n  contentType?: string;\n}\n\nexport interface MollieWebhookExpectedEnvelope {\n  contentType: string;\n  example: string;\n  fields: Record<string, string>;\n  kind: \"classic\" | \"next_gen\";\n}\n\nexport const MOLLIE_CLASSIC_WEBHOOK_EXPECTED_ENVELOPE: MollieWebhookExpectedEnvelope =\n  {\n    contentType: \"application/x-www-form-urlencoded\",\n    example: \"id=tr_xxxxxxxxxxx\",\n    fields: {\n      id: \"resource id (payment, subscription, or invoice)\",\n    },\n    kind: \"classic\",\n  };\n\nexport const MOLLIE_NEXT_GEN_WEBHOOK_EXPECTED_ENVELOPE: MollieWebhookExpectedEnvelope =\n  {\n    contentType: \"application/json\",\n    example: JSON.stringify({\n      createdAt: \"2026-08-30T00:00:00.000Z\",\n      entityId: \"tr_xxxxxxxxxxx\",\n      id: \"event_xxxxxxxxxxx\",\n      resource: \"event\",\n      type: \"payment.paid\",\n    }),\n    fields: {\n      createdAt: \"ISO-8601 timestamp (delivery-lag observability only)\",\n      entityId: \"resource id\",\n      id: \"event id\",\n      resource: \"optional resource name\",\n      type: \"optional event type\",\n    },\n    kind: \"next_gen\",\n  };\n\nexport function expectedMollieWebhookEnvelope(\n  operation?: string\n): MollieWebhookExpectedEnvelope {\n  const channel = operation ? mollieWebhookChannel(operation) : undefined;\n  if (channel?.kind === \"classic\") {\n    return MOLLIE_CLASSIC_WEBHOOK_EXPECTED_ENVELOPE;\n  }\n  return MOLLIE_NEXT_GEN_WEBHOOK_EXPECTED_ENVELOPE;\n}\n\nexport function decodeMollieWebhookAttemptedBody(body: Uint8Array): string {\n  return new TextDecoder().decode(body);\n}\n\nexport function formatMollieWebhookAttemptedBody(\n  body: Uint8Array,\n  bodyKind: MollieWebhookBodyKind\n): string {\n  const text = decodeMollieWebhookAttemptedBody(body);\n  if (bodyKind !== \"json\") {\n    return text;\n  }\n  try {\n    return JSON.stringify(JSON.parse(text) as unknown, null, 2);\n  } catch {\n    return text;\n  }\n}\n\nfunction decodeBody(body: Uint8Array): string {\n  return new TextDecoder().decode(body);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function classifyMollieWebhookBody(\n  body: Uint8Array,\n  contentType?: string\n): MollieWebhookEnvelopeDiagnostics {\n  const text = decodeBody(body).trim();\n  let bodyKind: MollieWebhookBodyKind = \"unknown\";\n  if (text.length === 0) {\n    bodyKind = \"empty\";\n  } else if (text.startsWith(\"{\") || text.startsWith(\"[\")) {\n    bodyKind = \"json\";\n  } else if (text.includes(\"=\")) {\n    bodyKind = \"form\";\n  }\n  return {\n    bodyBytes: body.byteLength,\n    bodyKind,\n    ...(contentType ? { contentType } : {}),\n  };\n}\n\nfunction envelopeError(\n  message: string,\n  diagnostics: MollieWebhookEnvelopeDiagnostics\n): AthenaEventIngressError {\n  return new AthenaEventIngressError({\n    code: ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n    diagnostics,\n    domain: \"billing\",\n    message,\n    provider: \"mollie\",\n    retryable: false,\n  });\n}\n\nfunction assertMollieWebhookBodySize(\n  body: Uint8Array,\n  diagnostics: MollieWebhookEnvelopeDiagnostics\n): void {\n  if (body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n    throw envelopeError(\n      \"Mollie webhook payload exceeds size limit.\",\n      diagnostics\n    );\n  }\n}\n\nfunction assertMollieWebhookCreatedAtSyntax(\n  createdAt: string | undefined,\n  diagnostics: MollieWebhookEnvelopeDiagnostics\n): asserts createdAt is string {\n  if (createdAt == null || createdAt.trim() === \"\") {\n    throw envelopeError(\"Mollie webhook createdAt is required.\", diagnostics);\n  }\n  const created = Date.parse(createdAt);\n  if (!Number.isFinite(created)) {\n    throw envelopeError(\"Mollie webhook createdAt is invalid.\", diagnostics);\n  }\n}\n\nexport function mollieWebhookDeliveryLagMs(\n  createdAt: string,\n  receivedAt: Date\n): number {\n  return receivedAt.getTime() - Date.parse(createdAt);\n}\n\nexport function parseClassicMollieWebhook(\n  body: Uint8Array,\n  contentType?: string\n): MollieClassicWebhookEnvelope {\n  const diagnostics = classifyMollieWebhookBody(body, contentType);\n  assertMollieWebhookBodySize(body, diagnostics);\n  if (diagnostics.bodyKind === \"json\") {\n    throw envelopeError(\n      \"Classic Mollie webhook expected a form id payload.\",\n      diagnostics\n    );\n  }\n  const text = decodeBody(body).trim();\n  const params = new URLSearchParams(text);\n  const resourceId = params.get(\"id\");\n  if (!resourceId) {\n    throw envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n  }\n  return { id: resourceId, kind: \"classic\", resourceId };\n}\n\nexport function parseNextGenMollieWebhook(\n  body: Uint8Array,\n  contentType?: string\n): MollieNextGenWebhookEnvelope {\n  const diagnostics = classifyMollieWebhookBody(body, contentType);\n  assertMollieWebhookBodySize(body, diagnostics);\n  if (diagnostics.bodyKind !== \"json\") {\n    throw envelopeError(\n      \"Next-gen Mollie webhook expected a JSON event payload.\",\n      diagnostics\n    );\n  }\n  const text = decodeBody(body).trim();\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(text);\n  } catch {\n    throw envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n  }\n  if (\n    !(\n      isRecord(parsed) &&\n      typeof parsed.id === \"string\" &&\n      typeof parsed.entityId === \"string\"\n    )\n  ) {\n    throw envelopeError(\"Mollie webhook envelope is invalid.\", diagnostics);\n  }\n  const createdAt =\n    typeof parsed.createdAt === \"string\" ? parsed.createdAt : undefined;\n  assertMollieWebhookCreatedAtSyntax(createdAt, diagnostics);\n  const eventType = typeof parsed.type === \"string\" ? parsed.type : \"unknown\";\n  return {\n    createdAt,\n    entityId: parsed.entityId,\n    eventId: parsed.id,\n    eventType,\n    id: parsed.id,\n    kind: \"next_gen\",\n    resource: typeof parsed.resource === \"string\" ? parsed.resource : \"event\",\n    type: eventType,\n  };\n}\n\nexport function parseMollieWebhookBody(\n  body: Uint8Array,\n  input: { contentType?: string; operation: string }\n): MollieWebhookEnvelope {\n  const channel = mollieWebhookChannel(input.operation);\n  if (channel == null) {\n    throw envelopeError(\n      \"Mollie webhook channel must be bound from the route, not inferred from the body.\",\n      classifyMollieWebhookBody(body, input.contentType)\n    );\n  }\n  return parseMollieWebhookForChannel(channel.kind, body, input.contentType);\n}\n\nexport function parseMollieWebhookForChannel(\n  kind: \"classic\" | \"next_gen\",\n  body: Uint8Array,\n  contentType?: string\n): MollieWebhookEnvelope {\n  if (kind === \"classic\") {\n    return parseClassicMollieWebhook(body, contentType);\n  }\n  return parseNextGenMollieWebhook(body, contentType);\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\n\nexport const MOLLIE_WEBHOOK_MAX_BODY_BYTES = 64 * 1024;\n\nexport function verifyMollieWebhookSignature(input: {\n  body: Uint8Array;\n  signatureHeader?: string;\n  signingSecrets: readonly string[];\n}): boolean {\n  if (input.body.byteLength > MOLLIE_WEBHOOK_MAX_BODY_BYTES) {\n    return false;\n  }\n  const header = input.signatureHeader?.trim();\n  if (!header || input.signingSecrets.length === 0) {\n    return false;\n  }\n  const providedHeaders = header\n    .split(/[\\n,]/u)\n    .map((entry) => entry.trim())\n    .filter((entry) => entry.length > 0);\n  for (const candidate of providedHeaders) {\n    const provided = candidate.startsWith(\"sha256=\")\n      ? candidate.slice(7)\n      : candidate;\n    const providedBytes = decodeMollieWebhookSignatureHex(provided);\n    if (providedBytes == null) {\n      continue;\n    }\n    for (const secret of input.signingSecrets) {\n      const calculated = createHmac(\"sha256\", secret)\n        .update(input.body)\n        .digest();\n      if (\n        calculated.length === providedBytes.length &&\n        timingSafeEqual(calculated, providedBytes)\n      ) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/** Mollie next-gen `X-Mollie-Signature` is HMAC-SHA256 hex (`sha256=<hex>`). */\nfunction decodeMollieWebhookSignatureHex(value: string): Buffer | null {\n  const hex = value.trim();\n  if (!/^[0-9a-fA-F]+$/.test(hex) || hex.length !== 64) {\n    return null;\n  }\n  return Buffer.from(hex, \"hex\");\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  resource: unknown,\n  kind: \"payment\" | \"subscription\" | \"invoice\"\n): CanonicalBillingDocument {\n  if (kind === \"subscription\") {\n    const projected = projectMollieSubscription(resource);\n    return {\n      amount: projected.amount,\n      canceledAt: projected.canceledAt,\n      createdAt: projected.createdAt,\n      currency: projected.currency,\n      description: projected.description,\n      interval: projected.interval,\n      kind: \"subscription\",\n      metadata: projected.metadata,\n      nextPaymentDate: projected.nextPaymentDate,\n      provider: projected.provider,\n      providerCustomerId: projected.providerCustomerId,\n      providerProfileId: projected.providerProfileId,\n      providerSubscriptionId: projected.providerSubscriptionId,\n      raw: projected.raw,\n      status: projected.status,\n    };\n  }\n  if (kind === \"invoice\") {\n    const projected = projectMollieInvoice(resource);\n    return {\n      amount: projected.amount,\n      amountPaid: projected.amountPaid,\n      createdAt: projected.createdAt,\n      description: projected.description,\n      issuedAt: projected.issuedAt,\n      kind: \"invoice\",\n      metadata: projected.metadata,\n      paidAt: projected.paidAt,\n      provider: projected.provider,\n      providerCustomerId: projected.providerCustomerId,\n      providerInvoiceId: projected.providerInvoiceId,\n      providerProfileId: projected.providerProfileId,\n      raw: projected.raw,\n      status: projected.status,\n    };\n  }\n  const projected = projectMolliePayment(resource);\n  return {\n    amount: projected.amount,\n    amountRefunded: projected.amountRefunded,\n    createdAt: projected.createdAt,\n    description: projected.description,\n    kind: \"payment\",\n    metadata: projected.metadata,\n    paidAt: projected.paidAt,\n    provider: projected.provider,\n    providerCustomerId: projected.providerCustomerId,\n    providerPaymentId: projected.providerPaymentId,\n    providerPaymentLinkId: projected.providerPaymentLinkId,\n    providerProfileId: projected.providerProfileId,\n    providerSubscriptionId: projected.providerSubscriptionId,\n    raw: projected.raw,\n    status: projected.status,\n  };\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n  BillingInvoice,\n  BillingInvoiceStatus,\n  BillingMoney,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nfunction serializationRetry() {\n  return billingRetryDisposition({\n    idempotencyKeyPresent: false,\n    kind: \"serialization\",\n    operation: \"invoices.get\",\n    requestDispatchState: \"dispatched\",\n  });\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n  if (!isRecord(value)) {\n    return;\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    return;\n  }\n  try {\n    return normalizeBillingMoney(value);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"ATHENA_BILLING_MONEY_INVALID\";\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message,\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n}\n\nexport function projectMollieInvoiceStatus(\n  status: string\n): BillingInvoiceStatus {\n  if (status === \"draft\") {\n    return \"draft\";\n  }\n  if (\n    status === \"issuing\" ||\n    status === \"issued\" ||\n    status === \"open\" ||\n    status === \"pending-payment\"\n  ) {\n    return \"open\";\n  }\n  if (status === \"paid\") {\n    return \"paid\";\n  }\n  if (status === \"cancelled\" || status === \"canceled\") {\n    return \"void\";\n  }\n  if (status === \"failed\") {\n    return \"uncollectible\";\n  }\n  throw new AthenaBillingProviderRequestError({\n    kind: \"serialization\",\n    message: `Mollie invoice status \"${status}\" is not supported.`,\n    provider: \"mollie\",\n    retry: serializationRetry(),\n  });\n}\n\nexport function projectMollieInvoice(raw: unknown): BillingInvoice {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie invoice response is missing an invoice id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const status =\n    typeof raw.status === \"string\"\n      ? projectMollieInvoiceStatus(raw.status)\n      : projectMollieInvoiceStatus(\"\");\n  return {\n    amount: projectMoney(raw.totalAmount) ?? null,\n    amountPaid: projectMoney(raw.amountPaid) ?? null,\n    createdAt: optionalString(raw.createdAt),\n    description: optionalString(raw.description),\n    issuedAt: optionalString(raw.issuedAt),\n    metadata: raw.metadata,\n    paidAt: optionalString(raw.paidAt),\n    provider: \"mollie\",\n    providerCustomerId: optionalString(raw.customerId),\n    providerInvoiceId: raw.id,\n    providerProfileId: optionalString(raw.profileId),\n    raw,\n    status,\n  };\n}\n","import { canonicalizeBillingSubscriptionStatus } from \"../../../../../canonical/status.ts\";\nimport { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n  BillingMoney,\n  BillingSubscription,\n  BillingSubscriptionStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nfunction serializationRetry() {\n  return billingRetryDisposition({\n    idempotencyKeyPresent: false,\n    kind: \"serialization\",\n    operation: \"subscriptions.get\",\n    requestDispatchState: \"dispatched\",\n  });\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n  if (!isRecord(value)) {\n    return;\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    return;\n  }\n  try {\n    return normalizeBillingMoney(value);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"ATHENA_BILLING_MONEY_INVALID\";\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message,\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n}\n\nexport function projectMollieSubscriptionStatus(\n  status: string\n): BillingSubscriptionStatus {\n  if (status === \"pending\") {\n    return \"trialing\";\n  }\n  if (status === \"active\") {\n    return \"active\";\n  }\n  if (status === \"canceled\" || status === \"completed\") {\n    return \"canceled\";\n  }\n  if (status === \"suspended\") {\n    return \"past_due\";\n  }\n  throw new AthenaBillingProviderRequestError({\n    kind: \"serialization\",\n    message: `Mollie subscription status \"${status}\" is not supported.`,\n    provider: \"mollie\",\n    retry: serializationRetry(),\n  });\n}\n\nexport function projectMollieSubscription(\n  raw: unknown,\n  customerId?: string\n): BillingSubscription {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie subscription response is missing a subscription id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const resolvedCustomerId =\n    typeof raw.customerId === \"string\" ? raw.customerId : customerId;\n  if (typeof resolvedCustomerId !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie subscription response is missing a customer id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const providerStatus = typeof raw.status === \"string\" ? raw.status : \"\";\n  const status =\n    providerStatus.length > 0\n      ? projectMollieSubscriptionStatus(providerStatus)\n      : projectMollieSubscriptionStatus(\"\");\n  const amount = projectMoney(raw.amount);\n  return {\n    amount: amount ?? null,\n    canceledAt: optionalString(raw.canceledAt),\n    canonicalStatus: canonicalizeBillingSubscriptionStatus({\n      providerStatus: providerStatus || status,\n    }),\n    createdAt: optionalString(raw.createdAt),\n    currency: amount?.currency ?? null,\n    description: optionalString(raw.description),\n    interval: optionalString(raw.interval),\n    metadata: raw.metadata,\n    nextPaymentDate: optionalString(raw.nextPaymentDate),\n    provider: \"mollie\",\n    providerCustomerId: resolvedCustomerId,\n    providerProfileId: optionalString(raw.profileId),\n    providerStatus: providerStatus || status,\n    providerSubscriptionId: raw.id,\n    raw,\n    status,\n  };\n}\n","export type BillingCanonicalPaymentStatus =\n  | \"created\"\n  | \"pending\"\n  | \"authorized\"\n  | \"paid\"\n  | \"failed\"\n  | \"cancelled\"\n  | \"refunded\"\n  | \"partially_refunded\";\n\nexport type BillingCanonicalSubscriptionStatus =\n  | \"pending\"\n  | \"active\"\n  | \"past_due\"\n  | \"cancel_scheduled\"\n  | \"cancelled\";\n\nexport function canonicalizeBillingPaymentStatus(input: {\n  providerStatus: string;\n}): BillingCanonicalPaymentStatus {\n  const raw = input.providerStatus.trim().toLowerCase();\n  switch (raw) {\n    case \"created\":\n      return \"created\";\n    case \"open\":\n      return \"pending\";\n    case \"pending\":\n      return \"pending\";\n    case \"authorized\":\n      return \"authorized\";\n    case \"paid\":\n      return \"paid\";\n    case \"failed\":\n    case \"expired\":\n      return \"failed\";\n    case \"canceled\":\n    case \"cancelled\":\n      return \"cancelled\";\n    case \"refunded\":\n      return \"refunded\";\n    case \"partially_refunded\":\n      return \"partially_refunded\";\n    default:\n      return \"pending\";\n  }\n}\n\nexport function canonicalizeBillingSubscriptionStatus(input: {\n  providerStatus: string;\n}): BillingCanonicalSubscriptionStatus {\n  const raw = input.providerStatus.trim().toLowerCase();\n  switch (raw) {\n    case \"pending\":\n    case \"trialing\":\n      return \"pending\";\n    case \"active\":\n      return \"active\";\n    case \"past_due\":\n    case \"suspended\":\n      return \"past_due\";\n    case \"cancel_scheduled\":\n    case \"paused\":\n      return \"cancel_scheduled\";\n    case \"canceled\":\n    case \"cancelled\":\n    case \"completed\":\n      return \"cancelled\";\n    default:\n      return \"pending\";\n  }\n}\n","import { canonicalizeBillingPaymentStatus } from \"../../../../canonical/status.ts\";\nimport { AthenaBillingProviderRequestError } from \"../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../safety/retry.ts\";\nimport type {\n  BillingMoney,\n  BillingPayment,\n  BillingPaymentStatus,\n} from \"../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nfunction serializationRetry() {\n  return billingRetryDisposition({\n    idempotencyKeyPresent: false,\n    kind: \"serialization\",\n    operation: \"payments.get\",\n    requestDispatchState: \"dispatched\",\n  });\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n  if (!isRecord(value)) {\n    return;\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    return;\n  }\n  try {\n    return normalizeBillingMoney(value);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"ATHENA_BILLING_MONEY_INVALID\";\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message,\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n}\n\nfunction unknownStatusError(status: string): AthenaBillingProviderRequestError {\n  return new AthenaBillingProviderRequestError({\n    kind: \"serialization\",\n    message: `Mollie payment status \"${status}\" is not supported.`,\n    provider: \"mollie\",\n    retry: serializationRetry(),\n  });\n}\n\nexport function projectMolliePaymentStatus(\n  status: string\n): BillingPaymentStatus {\n  if (status === \"open\" || status === \"pending\") {\n    return \"pending\";\n  }\n  if (status === \"authorized\") {\n    return \"authorized\";\n  }\n  if (status === \"paid\") {\n    return \"paid\";\n  }\n  if (status === \"failed\") {\n    return \"failed\";\n  }\n  if (status === \"canceled\") {\n    return \"canceled\";\n  }\n  if (status === \"expired\") {\n    return \"failed\";\n  }\n  throw unknownStatusError(status);\n}\n\nexport function projectMolliePayment(raw: unknown): BillingPayment {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie payment response is missing a payment id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const amount = projectMoney(raw.amount);\n  if (amount == null) {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie payment response is missing amount.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const providerStatus = typeof raw.status === \"string\" ? raw.status : \"\";\n  const status =\n    providerStatus.length > 0\n      ? projectMolliePaymentStatus(providerStatus)\n      : projectMolliePaymentStatus(\"\");\n  return {\n    amount,\n    amountRefunded: projectMoney(raw.amountRefunded) ?? null,\n    canonicalStatus: canonicalizeBillingPaymentStatus({\n      providerStatus: providerStatus || status,\n    }),\n    createdAt: optionalString(raw.createdAt),\n    description: optionalString(raw.description),\n    id: raw.id,\n    metadata: raw.metadata,\n    paidAt: optionalString(raw.paidAt),\n    provider: \"mollie\",\n    providerCustomerId: optionalString(raw.customerId),\n    providerPaymentId: raw.id,\n    providerPaymentLinkId: optionalString(raw.paymentLinkId),\n    providerProfileId: optionalString(raw.profileId),\n    providerStatus: providerStatus || status,\n    providerSubscriptionId: optionalString(raw.subscriptionId),\n    raw,\n    status,\n  };\n}\n","import { dispatchCanonicalEventAfterCommit } from \"../../../../runtime/events/hooks.ts\";\nimport {\n  classifyIngressFailure,\n  INGRESS_PROCESSING_LEASE_MS,\n  wrapIngressProcessingError,\n  type IngressFailureStage,\n} from \"../../../../runtime/ingress/failure.ts\";\nimport { deriveIngressProviderEventId } from \"../../../../runtime/ingress/identity.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n  EventIngressDomainHandler,\n  EventIngressRuntimeContext,\n} from \"../../../../runtime/ingress/runtime.ts\";\nimport {\n  type CanonicalBillingDocument,\n  canonicalDocumentRevision,\n  canonicalDocumentSubjectId,\n} from \"../../../canonical/document.ts\";\nimport type { CanonicalBillingEvent } from \"../../../canonical/transition.ts\";\nimport {\n  type BillingWebhookIngressObservability,\n  recordBillingWebhookIngressQuietly,\n  reportBillingWebhookIngressDiagnostic,\n} from \"../../../ingestion/observability/health.ts\";\nimport {\n  type BillingWebhookIngressStage,\n  billingWebhookRegistrationKind,\n} from \"../../../ingestion/observability/stages.ts\";\nimport { mollieWebhookChannel } from \"../providers/mollie/channel.ts\";\nimport { mollieWebhookDeliveryLagMs } from \"../providers/mollie/parse-webhook.ts\";\nimport type { BillingProviderWebhookPort } from \"../providers/webhook-port.ts\";\nimport {\n  type ApplyCanonicalBillingIngressResult,\n  applyCanonicalBillingIngress,\n} from \"./apply.ts\";\nimport type { BillingIngressDomainContext } from \"./repository.ts\";\n\nexport function billingDeterministicEventId(input: {\n  provider: string;\n  connectionId?: string;\n  document: CanonicalBillingDocument;\n}): string {\n  const revision = canonicalDocumentRevision(input.document);\n  return deriveIngressProviderEventId({\n    authoritativeStateOrVersion:\n      revision.sequence ??\n      `${input.document.status}:${revision.providerUpdatedAt?.toISOString() ?? \"\"}`,\n    connectionId: input.connectionId,\n    provider: input.provider,\n    resourceId: canonicalDocumentSubjectId(input.document),\n    resourceKind: input.document.kind,\n  });\n}\n\nfunction observeContext(ingress: AthenaIngressIR) {\n  return {\n    kind: billingWebhookRegistrationKind(ingress.operation),\n    ...(ingress.connectionId ? { connectionId: ingress.connectionId } : {}),\n    ...(ingress.correlationId ? { correlationId: ingress.correlationId } : {}),\n    ingressId: ingress.id,\n    ...(ingress.traceId ? { traceId: ingress.traceId } : {}),\n  };\n}\n\nfunction observabilityWrite(\n  ctx: ReturnType<typeof observeContext>,\n  connectionId: string,\n  stage: BillingWebhookIngressStage\n) {\n  return {\n    connectionId,\n    ingressId: ctx.ingressId,\n    kind: ctx.kind,\n    stage,\n    ...(ctx.correlationId ? { correlationId: ctx.correlationId } : {}),\n    ...(ctx.traceId ? { traceId: ctx.traceId } : {}),\n  };\n}\n\nexport function createBillingEventIngressHandler<TEnvelope, TResource>(input: {\n  observability?: BillingWebhookIngressObservability;\n  onAuthoritativeDocument?: (input: {\n    document: CanonicalBillingDocument;\n    ingress: AthenaIngressIR;\n  }) => Promise<void> | void;\n  port: BillingProviderWebhookPort<TEnvelope, TResource>;\n  provider?: string;\n}): EventIngressDomainHandler<\n  BillingIngressDomainContext,\n  CanonicalBillingDocument,\n  CanonicalBillingEvent\n> {\n  const provider = input.provider ?? \"mollie\";\n  return {\n    async ingest(ingress, runtime) {\n      const ctx = observeContext(ingress);\n      const connectionId = ctx.connectionId;\n      const note = async (stage: BillingWebhookIngressStage) => {\n        await recordBillingWebhookIngressQuietly(input.observability, (store) =>\n          store.recordStage({\n            ...ctx,\n            occurredAt: new Date(),\n            stage,\n          })\n        );\n      };\n      const acceptDuplicate = async () => {\n        if (connectionId) {\n          await recordBillingWebhookIngressQuietly(\n            input.observability,\n            (store) =>\n              store.recordAccepted(\n                observabilityWrite(ctx, connectionId, \"duplicate\")\n              )\n          );\n        } else {\n          await note(\"duplicate\");\n        }\n        return {\n          duplicate: true,\n          events: [],\n          reconciliation: \"skipped\" as const,\n        };\n      };\n      const early = await runtime.database.transaction(async (tx) => {\n        await runtime.persistence.insertReceived(tx, ingress, {\n          provider,\n        });\n        const existing = await runtime.persistence.lock(tx, ingress.id);\n        if (existing?.status === \"processed\") {\n          return { duplicate: true as const };\n        }\n        await runtime.persistence.markStatus(tx, {\n          ingressId: ingress.id,\n          leaseExpiresAt: new Date(Date.now() + INGRESS_PROCESSING_LEASE_MS),\n          status: \"resolving\",\n        });\n        return { duplicate: false as const };\n      });\n      if (early.duplicate) {\n        return acceptDuplicate();\n      }\n      let stage: IngressFailureStage = \"parse\";\n      let result: ApplyCanonicalBillingIngressResult;\n      let canonicalDocument: CanonicalBillingDocument | undefined;\n      try {\n        const envelope = await input.port.parseIngress(ingress);\n        if (\n          envelope != null &&\n          typeof envelope === \"object\" &&\n          \"kind\" in envelope &&\n          envelope.kind === \"next_gen\" &&\n          \"createdAt\" in envelope &&\n          typeof envelope.createdAt === \"string\"\n        ) {\n          const createdAt = envelope.createdAt;\n          await recordBillingWebhookIngressQuietly(\n            input.observability,\n            (store) =>\n              store.recordStage({\n                ...ctx,\n                metadata: {\n                  createdAt,\n                  deliveryLagMs: mollieWebhookDeliveryLagMs(\n                    createdAt,\n                    ingress.receivedAt\n                  ),\n                },\n                occurredAt: new Date(),\n                stage: \"parsed\",\n              })\n          );\n        } else {\n          await note(\"parsed\");\n        }\n        if (\n          mollieWebhookChannel(ingress.operation)?.kind === \"next_gen\" &&\n          input.port.verifyIngress\n        ) {\n          stage = \"verify\";\n          await input.port.verifyIngress(envelope, ingress);\n          await note(\"verified\");\n        }\n        const earlyProviderEventId =\n          input.port.providerEventIdBeforeRefetch?.(envelope);\n        if (earlyProviderEventId) {\n          const claimed = await runtime.database.transaction((tx) =>\n            runtime.persistence.insertReceived(tx, ingress, {\n              provider,\n              providerEventId: earlyProviderEventId,\n            })\n          );\n          if (claimed.duplicate) {\n            return acceptDuplicate();\n          }\n        }\n        stage = \"refetch\";\n        await note(\"authoritative_refetch_started\");\n        const resource = await input.port.resolveAuthoritativeState(\n          envelope,\n          ingress\n        );\n        await note(\"authoritative_refetch_completed\");\n        stage = \"project\";\n        canonicalDocument = input.port.projectDocument(resource);\n        const document = canonicalDocument;\n        await note(\"canonicalized\");\n        const providerEventId =\n          input.port.resolveProviderEventId?.(envelope, document, ingress) ??\n          billingDeterministicEventId({\n            connectionId: ingress.connectionId,\n            document,\n            provider,\n          });\n        const claimed = await runtime.database.transaction((tx) =>\n          runtime.persistence.insertReceived(tx, ingress, {\n            provider,\n            providerEventId,\n          })\n        );\n        if (claimed.duplicate) {\n          return acceptDuplicate();\n        }\n        stage = \"persist\";\n        result = await applyCanonicalBillingIngress({\n          canonicalizeEvents: (context) =>\n            input.port.canonicalizeEvents(context),\n          database: runtime.database,\n          document,\n          documents: runtime.domain.documents,\n          events: runtime.domain.events,\n          ingress,\n          outbox: runtime.domain.outbox,\n          persistence: runtime.persistence,\n        });\n      } catch (error) {\n        const wrapped = wrapIngressProcessingError({\n          ...(connectionId ? { connectionId } : {}),\n          error,\n          stage,\n        });\n        await persistIngressFailure(runtime, ingress.id, wrapped, stage);\n        throw wrapped;\n      }\n      const acceptStage: BillingWebhookIngressStage = result.duplicate\n        ? \"duplicate\"\n        : \"persisted\";\n      if (connectionId) {\n        await recordBillingWebhookIngressQuietly(input.observability, (store) =>\n          store.recordAccepted(\n            observabilityWrite(ctx, connectionId, acceptStage)\n          )\n        );\n      } else {\n        await note(acceptStage);\n      }\n      let reconciliation: \"completed\" | \"failed\" | \"skipped\" = \"skipped\";\n      if (!result.duplicate) {\n        try {\n          await dispatchCanonicalEventAfterCommit(result.events);\n          if (input.onAuthoritativeDocument) {\n            if (canonicalDocument == null) {\n              throw new Error(\n                \"Billing webhook accepted without a canonical document.\"\n              );\n            }\n            await note(\"reconciliation_started\");\n            await input.onAuthoritativeDocument({\n              document: canonicalDocument,\n              ingress,\n            });\n            if (connectionId) {\n              await recordBillingWebhookIngressQuietly(\n                input.observability,\n                (store) =>\n                  store.recordReconciliation({\n                    ...observabilityWrite(\n                      ctx,\n                      connectionId,\n                      \"reconciliation_completed\"\n                    ),\n                    outcome: \"completed\",\n                  })\n              );\n            } else {\n              await note(\"reconciliation_completed\");\n            }\n            reconciliation = \"completed\";\n          } else if (connectionId) {\n            await recordBillingWebhookIngressQuietly(\n              input.observability,\n              (store) =>\n                store.recordReconciliation({\n                  ...observabilityWrite(ctx, connectionId, acceptStage),\n                  outcome: \"skipped\",\n                })\n            );\n          }\n        } catch (error) {\n          reportBillingWebhookIngressDiagnostic(\n            \"[athena.billing] webhook reconciliation failed after accept\",\n            error\n          );\n          if (connectionId) {\n            await recordBillingWebhookIngressQuietly(\n              input.observability,\n              (store) =>\n                store.recordReconciliation({\n                  ...observabilityWrite(\n                    ctx,\n                    connectionId,\n                    \"reconciliation_failed\"\n                  ),\n                  outcome: \"failed\",\n                })\n            );\n          } else {\n            await note(\"reconciliation_failed\");\n          }\n          reconciliation = \"failed\";\n        }\n      }\n      return {\n        ...result,\n        reconciliation,\n      };\n    },\n  };\n}\n\nasync function persistIngressFailure(\n  runtime: EventIngressRuntimeContext,\n  ingressId: string,\n  error: unknown,\n  stage: IngressFailureStage\n): Promise<void> {\n  try {\n    await runtime.database.transaction(async (tx) => {\n      const locked = await runtime.persistence.lock(tx, ingressId);\n      if (locked?.status === \"processed\") {\n        return;\n      }\n      const classified = classifyIngressFailure({\n        attemptCount: (locked?.attemptCount ?? 0) + 1,\n        error,\n        firstFailedAt: locked?.firstFailedAt ?? undefined,\n        stage,\n      });\n      await runtime.persistence.markStatus(tx, {\n        error: classified.error,\n        failureStage: classified.stage,\n        firstFailedAt: new Date(classified.error.firstFailedAt),\n        ingressId,\n        lastFailedAt: new Date(classified.error.lastFailedAt),\n        status: classified.status,\n        ...(classified.nextAttemptAt\n          ? { nextAttemptAt: classified.nextAttemptAt }\n          : {}),\n      });\n    });\n  } catch {\n    /* persistence of the failure row must not hide the original error */\n  }\n}\n","import type { CanonicalBillingEventName } from \"./catalog.ts\";\nimport type { CanonicalEventIR } from \"./ir.ts\";\n\nexport type CanonicalEventHook = (\n  event: CanonicalEventIR<CanonicalBillingEventName>\n) => void | Promise<void>;\n\nconst hooks = new Map<string, CanonicalEventHook[]>();\n\nexport function onCanonicalEvent(\n  name: CanonicalBillingEventName,\n  hook: CanonicalEventHook\n): void {\n  const existing = hooks.get(name) ?? [];\n  existing.push(hook);\n  hooks.set(name, existing);\n}\n\nexport async function dispatchCanonicalEventAfterCommit(\n  events: readonly CanonicalEventIR<CanonicalBillingEventName>[]\n): Promise<void> {\n  for (const event of events) {\n    const registered = hooks.get(event.name) ?? [];\n    for (const hook of registered) {\n      await hook(event);\n    }\n  }\n}\n\n/** @deprecated Mutation lifecycle hooks are not this registry. Prefer dispatchCanonicalEventAfterCommit. */\nexport async function dispatchCanonicalEventHooks(\n  events: readonly CanonicalEventIR<CanonicalBillingEventName>[]\n): Promise<void> {\n  await dispatchCanonicalEventAfterCommit(events);\n}\n","import { isAthenaBillingProviderRequestError } from \"../../billing/errors.ts\";\nimport {\n  ATHENA_EVENT_INGRESS_FAILED,\n  AthenaEventIngressError,\n  isAthenaEventIngressError,\n} 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  | \"parse\"\n  | \"verify\"\n  | \"refetch\"\n  | \"project\"\n  | \"persist\"\n  | \"unknown\";\n\nexport interface IngressFailureRecord {\n  attemptCount: number;\n  code: string;\n  firstFailedAt: string;\n  lastFailedAt: string;\n  nextAttemptAt?: string;\n  retryable: boolean;\n  stage: IngressFailureStage;\n}\n\nexport interface ClassifiedIngressFailure {\n  code: string;\n  error: IngressFailureRecord;\n  nextAttemptAt?: Date;\n  retryable: boolean;\n  stage: IngressFailureStage;\n  status: Extract<\n    AthenaIngressStatus,\n    \"retryable_failure\" | \"terminal_failure\"\n  >;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction pgCode(error: unknown): string | undefined {\n  if (!isRecord(error)) {\n    return;\n  }\n  if (typeof error.code === \"string\") {\n    return error.code;\n  }\n  const cause = error.cause;\n  if (isRecord(cause) && typeof cause.code === \"string\") {\n    return cause.code;\n  }\n}\n\nfunction isTransientDatabaseFailure(error: unknown): boolean {\n  const code = pgCode(error);\n  if (\n    code === \"40001\" ||\n    code === \"40P01\" ||\n    code === \"55P03\" ||\n    code === \"57P01\" ||\n    code === \"08006\" ||\n    code === \"08001\" ||\n    code === \"57P03\"\n  ) {\n    return true;\n  }\n  if (!isRecord(error)) {\n    return false;\n  }\n  const message = typeof error.message === \"string\" ? error.message : \"\";\n  return (\n    error.name === \"AthenaBillingCapabilityError\" ||\n    /timeout|ECONNRESET|ECONNREFUSED|connection terminated/i.test(message)\n  );\n}\n\nfunction isProjectionInvariantFailure(error: unknown): boolean {\n  if (!isRecord(error)) {\n    return false;\n  }\n  const name = typeof error.name === \"string\" ? error.name : \"\";\n  const code = typeof error.code === \"string\" ? error.code : \"\";\n  return (\n    name === \"AthenaBillingIllegalTransitionError\" ||\n    name === \"AthenaBillingRevisionStaleError\" ||\n    code === \"ATHENA_BILLING_ILLEGAL_TRANSITION\" ||\n    code === \"ATHENA_BILLING_REVISION_STALE\"\n  );\n}\n\nexport function backoffAfterAttempt(attemptCount: number): Date {\n  const exponent = Math.max(0, attemptCount - 1);\n  const delay = Math.min(INGRESS_MAX_BACKOFF_MS, 1000 * 2 ** exponent);\n  return new Date(Date.now() + delay);\n}\n\nfunction isProviderIngressRetryable(error: { retry: string }): boolean {\n  return error.retry === \"safe\" || error.retry === \"reconcile_first\";\n}\n\nexport function wrapIngressProcessingError(input: {\n  connectionId?: string;\n  error: unknown;\n  stage: IngressFailureStage;\n}): unknown {\n  if (isAthenaEventIngressError(input.error)) {\n    return input.error;\n  }\n  if (isAthenaBillingProviderRequestError(input.error)) {\n    const stage = input.stage === \"unknown\" ? \"refetch\" : input.stage;\n    return new AthenaEventIngressError({\n      code: ATHENA_EVENT_INGRESS_FAILED,\n      domain: \"billing\",\n      diagnostics: {\n        ...(input.connectionId ? { connectionId: input.connectionId } : {}),\n        ...(input.error.operation ? { operation: input.error.operation } : {}),\n        ...(input.error.status != null\n          ? { providerStatus: input.error.status }\n          : {}),\n        retryable: isProviderIngressRetryable(input.error),\n        stage,\n      },\n      message: \"Billing webhook provider request failed during ingress.\",\n      provider: input.error.provider,\n      retryable: isProviderIngressRetryable(input.error),\n    });\n  }\n  return input.error;\n}\n\nexport function classifyIngressFailure(input: {\n  attemptCount: number;\n  error: unknown;\n  firstFailedAt?: Date;\n  stage: IngressFailureStage;\n}): ClassifiedIngressFailure {\n  const now = new Date();\n  const firstFailedAt = input.firstFailedAt ?? now;\n  let code = \"ATHENA_EVENT_INGRESS_FAILED\";\n  let retryable = false;\n  if (isAthenaEventIngressError(input.error)) {\n    code = input.error.code;\n    retryable = input.error.retryable;\n  } else if (isAthenaBillingProviderRequestError(input.error)) {\n    retryable = isProviderIngressRetryable(input.error);\n  } else if (isProjectionInvariantFailure(input.error)) {\n    code =\n      isRecord(input.error) && typeof input.error.code === \"string\"\n        ? input.error.code\n        : \"ATHENA_BILLING_ILLEGAL_TRANSITION\";\n    retryable = false;\n  } else if (isTransientDatabaseFailure(input.error)) {\n    code = pgCode(input.error) ?? \"ATHENA_EVENT_INGRESS_FAILED\";\n    retryable = true;\n  } else if (input.stage === \"refetch\" || input.stage === \"persist\") {\n    retryable = true;\n  }\n  if (input.attemptCount >= INGRESS_MAX_ATTEMPTS) {\n    retryable = false;\n  }\n  const status = retryable ? \"retryable_failure\" : \"terminal_failure\";\n  const nextAttemptAt = retryable\n    ? backoffAfterAttempt(input.attemptCount)\n    : undefined;\n  const record: IngressFailureRecord = {\n    attemptCount: input.attemptCount,\n    code,\n    firstFailedAt: firstFailedAt.toISOString(),\n    lastFailedAt: now.toISOString(),\n    retryable,\n    stage: input.stage,\n    ...(nextAttemptAt ? { nextAttemptAt: nextAttemptAt.toISOString() } : {}),\n  };\n  return {\n    code,\n    error: record,\n    retryable,\n    stage: input.stage,\n    status,\n    ...(nextAttemptAt ? { nextAttemptAt } : {}),\n  };\n}\n\nexport function redactedIngressFailure(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return \"ingress failed\";\n}\n","export const BILLING_WEBHOOK_INGRESS_STAGES = [\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  \"subject_projection_refreshed\",\n  \"entitlements_refreshed\",\n  \"completed\",\n  \"duplicate\",\n  \"rejected\",\n] as const;\n\nexport type BillingWebhookIngressStage =\n  (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  | \"completed\"\n  | \"failed\"\n  | \"skipped\";\n\n/** Persistable CHECK value on v8 `billing_webhook_ingress_stages` (API name is `rejected`). */\nexport function persistableWebhookRejectionStage(): \"failed\" {\n  return \"failed\";\n}\n\nexport function isBillingWebhookIngressStage(\n  value: string\n): value is BillingWebhookIngressStage {\n  return (BILLING_WEBHOOK_INGRESS_STAGES as readonly string[]).includes(value);\n}\n\nexport function billingWebhookRegistrationKind(\n  operation: string\n): \"classic\" | \"next_gen\" {\n  return operation === \"webhook.mollie.events\" ? \"next_gen\" : \"classic\";\n}\n\nexport function publicBillingRejectionCode(error: unknown): string {\n  if (error != null && typeof error === \"object\" && \"code\" in error) {\n    const code = error.code;\n    if (typeof code === \"string\" && code.length > 0 && !/secret/i.test(code)) {\n      return code;\n    }\n  }\n  return \"ATHENA_EVENT_INGRESS_FAILED\";\n}\n\nexport function publicBillingRejectionMessage(error: unknown): string {\n  const raw = error instanceof Error ? error.message : String(error);\n  if (raw.length === 0 || /secret/i.test(raw)) {\n    return publicBillingRejectionCode(error);\n  }\n  return raw.length > 240 ? `${raw.slice(0, 237)}...` : raw;\n}\n","import { projectOutboxIntents } from \"../../../../runtime/events/outbox.ts\";\nimport type { AthenaIngressIR } from \"../../../../runtime/ingress/ir.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressPersistence,\n} from \"../../../../runtime/ingress/persistence.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport {\n  assertCanonicalBillingTransition,\n  type CanonicalBillingEvent,\n  canonicalizeBillingEvents,\n} from \"../../../canonical/transition.ts\";\nimport type {\n  BillingEventRepository,\n  BillingIngressDocumentRepository,\n  BillingOutboxRepository,\n} from \"./repository.ts\";\nimport { assertRevisionIsNotStale } from \"./revision.ts\";\n\nexport interface ApplyCanonicalBillingIngressInput {\n  canonicalizeEvents?: typeof canonicalizeBillingEvents;\n  database: EventIngressDatabase;\n  document: CanonicalBillingDocument;\n  documents: BillingIngressDocumentRepository;\n  events: BillingEventRepository;\n  ingress: AthenaIngressIR;\n  outbox: BillingOutboxRepository;\n  persistence: EventIngressPersistence;\n}\n\nexport interface ApplyCanonicalBillingIngressResult {\n  document: CanonicalBillingDocument;\n  duplicate: boolean;\n  events: readonly CanonicalBillingEvent[];\n}\n\nexport async function applyCanonicalBillingIngress(\n  input: ApplyCanonicalBillingIngressInput\n): Promise<ApplyCanonicalBillingIngressResult> {\n  return input.database.transaction(async (tx) => {\n    const locked = await input.persistence.lock(tx, input.ingress.id);\n    if (locked?.status === \"processed\") {\n      return {\n        document: input.document,\n        duplicate: true,\n        events: [],\n      };\n    }\n\n    const previous = await input.documents.readCurrentForUpdate(\n      tx,\n      input.document,\n      input.ingress.connectionId\n    );\n    assertRevisionIsNotStale(previous, input.document);\n    assertCanonicalBillingTransition(previous, input.document);\n    await input.documents.upsert(\n      tx,\n      input.document,\n      input.ingress.connectionId\n    );\n\n    const canonicalize = input.canonicalizeEvents ?? canonicalizeBillingEvents;\n    const events = canonicalize({\n      current: input.document,\n      ingress: input.ingress,\n      previous,\n    });\n    await input.events.append(tx, events);\n    await input.outbox.enqueue(tx, projectOutboxIntents(events));\n    await input.persistence.markProcessed(tx, {\n      eventIds: events.map((event) => event.id),\n      ingressId: input.ingress.id,\n    });\n    return { document: input.document, duplicate: false, events };\n  });\n}\n","import type { CanonicalEventIR } from \"./ir.ts\";\n\nexport interface CanonicalOutboxIntent {\n  readonly eventId: string;\n  readonly id: string;\n  readonly name: string;\n  readonly payload: unknown;\n}\n\nexport function projectOutboxIntents(\n  events: readonly CanonicalEventIR[]\n): CanonicalOutboxIntent[] {\n  return events.map((event) => ({\n    eventId: event.id,\n    id: crypto.randomUUID(),\n    name: event.name,\n    payload: event.payload,\n  }));\n}\n","import type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\n\nexport class AthenaBillingRevisionStaleError extends Error {\n  readonly code = \"ATHENA_BILLING_REVISION_STALE\";\n\n  constructor() {\n    super(\"Canonical billing revision is stale relative to stored state.\");\n    this.name = \"AthenaBillingRevisionStaleError\";\n  }\n}\n\nconst STATUS_RANK: Record<string, number> = {\n  active: 3,\n  authorized: 2,\n  canceled: 4,\n  draft: 1,\n  failed: 4,\n  open: 2,\n  paid: 4,\n  past_due: 3,\n  paused: 3,\n  pending: 1,\n  refunded: 5,\n  trialing: 1,\n  uncollectible: 4,\n  void: 4,\n};\n\nfunction rank(document: CanonicalBillingDocument): number {\n  return STATUS_RANK[document.status] ?? 0;\n}\n\nexport function assertRevisionIsNotStale(\n  previous: CanonicalBillingDocument | null,\n  current: CanonicalBillingDocument\n): void {\n  if (previous == null || previous.kind !== current.kind) {\n    return;\n  }\n  const previousTime = previous.updatedAt ?? previous.createdAt;\n  const currentTime = current.updatedAt ?? current.createdAt;\n  if (\n    previousTime &&\n    currentTime &&\n    new Date(currentTime).getTime() < new Date(previousTime).getTime()\n  ) {\n    throw new AthenaBillingRevisionStaleError();\n  }\n  if (rank(current) < rank(previous)) {\n    throw new AthenaBillingRevisionStaleError();\n  }\n}\n","import { createSqlCanonicalEventRepositories } from \"../../../../runtime/events/sql.ts\";\nimport {\n  ATHENA_EVENT_INGRESS_FAILED,\n  AthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport type { CanonicalBillingDocument } from \"../../../canonical/document.ts\";\nimport type {\n  BillingEventRepository,\n  BillingIngressDocumentRepository,\n  BillingOutboxRepository,\n} from \"./repository.ts\";\n\nfunction jsonValue(value: unknown): string {\n  return JSON.stringify(value ?? {});\n}\n\nfunction requirePersistConnectionId(connectionId: string | undefined): string {\n  if (connectionId == null || connectionId.length === 0) {\n    throw new AthenaEventIngressError({\n      code: ATHENA_EVENT_INGRESS_FAILED,\n      domain: \"billing\",\n      message:\n        \"Billing document persist requires a billing connection id (uniqueness is connection-scoped).\",\n      retryable: false,\n    });\n  }\n  return connectionId;\n}\n\nexport function createSqlBillingDocumentRepository(): BillingIngressDocumentRepository {\n  return {\n    async readCurrentForUpdate(tx, document, connectionId) {\n      const boundConnectionId = requirePersistConnectionId(connectionId);\n      if (document.kind === \"payment\") {\n        const result = await tx.query<CanonicalBillingDocument>(\n          `\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          [boundConnectionId, document.providerPaymentId]\n        );\n        return result.rows[0] ?? null;\n      }\n      if (document.kind === \"subscription\") {\n        const result = await tx.query<CanonicalBillingDocument>(\n          `\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          [boundConnectionId, document.providerSubscriptionId]\n        );\n        return result.rows[0] ?? null;\n      }\n      const result = await tx.query<CanonicalBillingDocument>(\n        `\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        [boundConnectionId, document.providerInvoiceId]\n      );\n      return result.rows[0] ?? null;\n    },\n    async upsert(tx, document, connectionId) {\n      const boundConnectionId = requirePersistConnectionId(connectionId);\n      if (document.kind === \"payment\") {\n        await tx.query(\n          `\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          [\n            boundConnectionId,\n            document.provider,\n            document.providerPaymentId,\n            document.providerCustomerId ?? null,\n            document.providerProfileId ?? null,\n            document.providerSubscriptionId ?? null,\n            document.providerPaymentLinkId ?? null,\n            document.status,\n            document.amount.currency,\n            document.amount.value,\n            document.description ?? null,\n            jsonValue(document.metadata),\n            jsonValue(document.raw),\n            document.paidAt ?? null,\n            document.createdAt ?? null,\n          ]\n        );\n        return;\n      }\n      if (document.kind === \"subscription\") {\n        await tx.query(\n          `\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          [\n            boundConnectionId,\n            document.provider,\n            document.providerSubscriptionId,\n            document.providerCustomerId,\n            document.providerProfileId ?? null,\n            document.status,\n            document.description ?? null,\n            jsonValue(document.metadata),\n            jsonValue(document.raw),\n            document.createdAt ?? null,\n            document.canceledAt ?? null,\n          ]\n        );\n        return;\n      }\n      await tx.query(\n        `\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        [\n          boundConnectionId,\n          document.provider,\n          document.providerInvoiceId,\n          document.providerProfileId ?? null,\n          document.providerCustomerId ?? null,\n          document.status,\n          document.description ?? null,\n          jsonValue(document.metadata),\n          jsonValue(document.raw),\n          document.paidAt ?? null,\n          document.createdAt ?? null,\n        ]\n      );\n    },\n  };\n}\n\nexport function createSqlBillingRepositories(): {\n  documents: BillingIngressDocumentRepository;\n  events: BillingEventRepository;\n  outbox: BillingOutboxRepository;\n} {\n  const ledger = createSqlCanonicalEventRepositories();\n  return {\n    documents: createSqlBillingDocumentRepository(),\n    events: ledger.events,\n    outbox: ledger.outbox,\n  };\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  append(\n    tx: EventIngressDatabase,\n    events: readonly CanonicalEventIR[]\n  ): Promise<void>;\n}\n\nexport interface CanonicalOutboxRepository {\n  enqueue(\n    tx: EventIngressDatabase,\n    intents: readonly CanonicalOutboxIntent[]\n  ): Promise<void>;\n}\n\nfunction jsonValue(value: unknown): string {\n  return JSON.stringify(value ?? {});\n}\n\nexport function createSqlCanonicalEventRepositories(): {\n  events: CanonicalEventRepository;\n  outbox: CanonicalOutboxRepository;\n} {\n  return {\n    events: {\n      async append(tx, events) {\n        for (const event of events) {\n          await tx.query(\n            `\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            [\n              event.id,\n              event.name,\n              event.source.domain,\n              event.source.provider ?? null,\n              event.subject.type,\n              event.subject.id,\n              event.ingressId ?? null,\n              jsonValue(event.payload),\n              event.occurredAt.toISOString(),\n              event.observedAt.toISOString(),\n            ]\n          );\n        }\n      },\n    },\n    outbox: {\n      async enqueue(tx, intents) {\n        for (const intent of intents) {\n          await tx.query(\n            `\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            [intent.id, intent.eventId, intent.name, jsonValue(intent.payload)]\n          );\n        }\n      },\n    },\n  };\n}\n","import {\n  ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID,\n  isAthenaEventIngressError,\n} from \"../../../../runtime/ingress/errors.ts\";\nimport {\n  classifyIngressFailure,\n  INGRESS_MAX_ATTEMPTS,\n  INGRESS_PROCESSING_LEASE_MS,\n  type IngressFailureStage,\n} from \"../../../../runtime/ingress/failure.ts\";\nimport {\n  ATHENA_INGRESS_OPERATION_HEADER,\n  type AthenaIngressIR,\n} from \"../../../../runtime/ingress/ir.ts\";\nimport { memoryIngressFromRecord } from \"../../../../runtime/ingress/memory.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressPersistence,\n  EventIngressRecord,\n} from \"../../../../runtime/ingress/persistence.ts\";\nimport type { EventIngressRuntime } from \"../../../../runtime/ingress/runtime.ts\";\nimport {\n  type EventIngressRow,\n  mapIngressRow,\n} from \"../../../../runtime/ingress/sql.ts\";\nimport { mollieWebhookChannel } from \"../providers/mollie/channel.ts\";\nimport { parseMollieWebhookForChannel } from \"../providers/mollie/parse-webhook.ts\";\n\nexport const BILLING_INGRESS_REPLAY_BATCH_DEFAULT = 25;\n\nexport interface BillingIngressReplayResult {\n  classified: number;\n  failed: number;\n  processed: number;\n  replayed: number;\n  retryable: number;\n  skipped: number;\n  terminal: number;\n}\n\nexport function persistedIngressOperation(\n  record: EventIngressRecord\n): string | undefined {\n  const column = record.operation?.trim();\n  if (column) {\n    return column;\n  }\n  const header = record.headers[ATHENA_INGRESS_OPERATION_HEADER]?.trim();\n  if (header) {\n    return header;\n  }\n}\n\nfunction classifyStuckResolving(record: EventIngressRecord): {\n  stage: IngressFailureStage;\n  error: unknown;\n} {\n  const operation = persistedIngressOperation(record);\n  const channel = operation ? mollieWebhookChannel(operation) : undefined;\n  if (channel == null) {\n    return {\n      error: new Error(\n        \"Ingress replay requires the persisted channel operation; do not infer it from the body.\"\n      ),\n      stage: \"parse\",\n    };\n  }\n  try {\n    parseMollieWebhookForChannel(\n      channel.kind,\n      record.body,\n      record.headers[\"content-type\"]\n    );\n    return {\n      error: new Error(\n        \"Ingress remained resolving after the processing lease expired.\"\n      ),\n      stage: \"refetch\",\n    };\n  } catch (error) {\n    if (\n      isAthenaEventIngressError(error) &&\n      error.code === ATHENA_INGRESS_MOLLIE_ENVELOPE_INVALID\n    ) {\n      return { error, stage: \"parse\" };\n    }\n    return { error, stage: \"parse\" };\n  }\n}\n\nexport async function classifyStuckBillingIngress(input: {\n  database: EventIngressDatabase;\n  dryRun?: boolean;\n  limit?: number;\n  persistence: EventIngressPersistence;\n}): Promise<{ classified: number; terminal: number; retryable: number }> {\n  const limit = input.limit ?? BILLING_INGRESS_REPLAY_BATCH_DEFAULT;\n  const listed = await input.database.query<{ id: string }>(\n    `\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    [limit]\n  );\n  if (input.dryRun) {\n    return { classified: listed.rows.length, retryable: 0, terminal: 0 };\n  }\n  let classified = 0;\n  let terminal = 0;\n  let retryable = 0;\n  for (const row of listed.rows) {\n    await input.database.transaction(async (tx) => {\n      const locked = await input.persistence.lock(tx, row.id);\n      if (locked?.status !== \"resolving\") {\n        return;\n      }\n      if (locked.attemptCount >= INGRESS_MAX_ATTEMPTS) {\n        const classifiedFailure = classifyIngressFailure({\n          attemptCount: locked.attemptCount + 1,\n          error: new Error(\"Ingress retry budget exhausted.\"),\n          firstFailedAt: locked.firstFailedAt ?? undefined,\n          stage: \"unknown\",\n        });\n        await input.persistence.markStatus(tx, {\n          error: classifiedFailure.error,\n          failureStage: classifiedFailure.stage,\n          firstFailedAt: new Date(classifiedFailure.error.firstFailedAt),\n          ingressId: locked.id,\n          lastFailedAt: new Date(),\n          status: \"terminal_failure\",\n        });\n        terminal += 1;\n        classified += 1;\n        return;\n      }\n      const stuck = classifyStuckResolving(locked);\n      const classifiedFailure = classifyIngressFailure({\n        attemptCount: locked.attemptCount + 1,\n        error: stuck.error,\n        firstFailedAt: locked.firstFailedAt ?? undefined,\n        stage: stuck.stage,\n      });\n      await input.persistence.markStatus(tx, {\n        error: classifiedFailure.error,\n        failureStage: classifiedFailure.stage,\n        firstFailedAt: new Date(classifiedFailure.error.firstFailedAt),\n        ingressId: locked.id,\n        lastFailedAt: new Date(),\n        status: classifiedFailure.status,\n        ...(classifiedFailure.nextAttemptAt\n          ? { nextAttemptAt: classifiedFailure.nextAttemptAt }\n          : {}),\n      });\n      classified += 1;\n      if (classifiedFailure.status === \"terminal_failure\") {\n        terminal += 1;\n      } else {\n        retryable += 1;\n      }\n    });\n  }\n  return { classified, retryable, terminal };\n}\n\nexport async function replayBillingIngressBatch(input: {\n  database: EventIngressDatabase;\n  limit?: number;\n  ownerId?: string;\n  persistence: EventIngressPersistence;\n  runtime: EventIngressRuntime;\n}): Promise<BillingIngressReplayResult> {\n  const limit = input.limit ?? BILLING_INGRESS_REPLAY_BATCH_DEFAULT;\n  const ownerId = input.ownerId ?? crypto.randomUUID();\n  const claimed = await input.database.transaction(async (tx) =>\n    tx.query<EventIngressRow>(\n      `\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      [limit, INGRESS_MAX_ATTEMPTS, ownerId, INGRESS_PROCESSING_LEASE_MS]\n    )\n  );\n  const result: BillingIngressReplayResult = {\n    classified: 0,\n    failed: 0,\n    processed: 0,\n    replayed: claimed.rows.length,\n    retryable: 0,\n    skipped: 0,\n    terminal: 0,\n  };\n  for (const row of claimed.rows) {\n    const record = mapIngressRow(row);\n    let ingress: AthenaIngressIR;\n    try {\n      ingress = memoryIngressFromRecord(record);\n    } catch {\n      result.failed += 1;\n      continue;\n    }\n    try {\n      const ingest = await input.runtime.ingest(ingress);\n      if (ingest.duplicate) {\n        result.skipped += 1;\n      } else {\n        result.processed += 1;\n      }\n    } catch {\n      result.failed += 1;\n    }\n  }\n  return result;\n}\n","export const ATHENA_INGRESS_OPERATION_HEADER = \"x-athena-ingress-operation\";\n\nexport type AthenaIngressTransportKind = \"http\" | \"direct\";\n\nexport type AthenaIngressStatus =\n  | \"received\"\n  | \"resolving\"\n  | \"processed\"\n  | \"ignored\"\n  | \"retryable_failure\"\n  | \"terminal_failure\";\n\nexport interface AthenaIngressIR {\n  readonly body: Uint8Array;\n  readonly connectionId?: string;\n  readonly correlationId?: string;\n  readonly domain: string;\n  readonly headers: Readonly<Record<string, string>>;\n  readonly id: string;\n  readonly operation: string;\n  readonly receivedAt: Date;\n  readonly traceId?: string;\n  readonly transport: {\n    readonly kind: AthenaIngressTransportKind;\n  };\n}\n","import {\n  ATHENA_INGRESS_OPERATION_HEADER,\n  type AthenaIngressIR,\n  type AthenaIngressStatus,\n} from \"./ir.ts\";\nimport type {\n  EventIngressDatabase,\n  EventIngressPersistence,\n  EventIngressQueryResult,\n  EventIngressRecord,\n} from \"./persistence.ts\";\n\nexport class MemoryEventIngressDatabase implements EventIngressDatabase {\n  readonly ingress = new Map<string, EventIngressRecord>();\n\n  async query<T = Record<string, unknown>>(): Promise<\n    EventIngressQueryResult<T>\n  > {\n    return { rowCount: 0, rows: [] };\n  }\n\n  async transaction<T>(\n    fn: (tx: EventIngressDatabase) => Promise<T>\n  ): Promise<T> {\n    return fn(this);\n  }\n}\n\nfunction cloneBody(body: Uint8Array): Uint8Array {\n  return Uint8Array.from(body);\n}\n\nexport function createMemoryEventIngressPersistence(\n  store: MemoryEventIngressDatabase\n): EventIngressPersistence {\n  return {\n    async insertReceived(_tx, ingress, meta) {\n      if (meta.providerEventId) {\n        for (const row of store.ingress.values()) {\n          if (\n            row.id !== ingress.id &&\n            row.domain === ingress.domain &&\n            row.provider === (meta.provider ?? null) &&\n            row.providerEventId === meta.providerEventId\n          ) {\n            return {\n              duplicate: true,\n              ingressId: row.id,\n            };\n          }\n        }\n      }\n      const existing = store.ingress.get(ingress.id);\n      if (existing) {\n        if (meta.providerEventId) {\n          existing.providerEventId = meta.providerEventId;\n        }\n        return {\n          duplicate: false,\n          ingressId: existing.id,\n        };\n      }\n      store.ingress.set(ingress.id, {\n        attemptCount: 0,\n        body: cloneBody(ingress.body),\n        connectionId: ingress.connectionId ?? null,\n        correlationId: ingress.correlationId ?? null,\n        domain: ingress.domain,\n        headers: ingress.headers,\n        id: ingress.id,\n        operation: ingress.operation,\n        provider: meta.provider ?? null,\n        providerEventId: meta.providerEventId ?? null,\n        receivedAt: ingress.receivedAt,\n        status: \"received\",\n        traceId: ingress.traceId ?? null,\n      });\n      return {\n        duplicate: false,\n        ingressId: ingress.id,\n      };\n    },\n    async lock(_tx, ingressId) {\n      return store.ingress.get(ingressId);\n    },\n    async markProcessed(_tx, input) {\n      const row = store.ingress.get(input.ingressId);\n      if (row) {\n        row.status = \"processed\";\n      }\n    },\n    async markStatus(_tx, input) {\n      const row = store.ingress.get(input.ingressId);\n      if (row) {\n        row.status = input.status;\n        if (\n          input.status === \"retryable_failure\" ||\n          input.status === \"terminal_failure\"\n        ) {\n          row.attemptCount += 1;\n        }\n        if (input.error !== undefined) {\n          row.error = input.error;\n        }\n        row.failureStage = input.failureStage ?? row.failureStage;\n        row.firstFailedAt = input.firstFailedAt ?? row.firstFailedAt;\n        row.nextAttemptAt = input.nextAttemptAt ?? row.nextAttemptAt;\n        row.leaseExpiresAt =\n          input.status === \"retryable_failure\" ||\n          input.status === \"terminal_failure\" ||\n          input.status === \"processed\" ||\n          input.status === \"ignored\"\n            ? null\n            : (input.leaseExpiresAt ?? row.leaseExpiresAt);\n      }\n    },\n  };\n}\n\nexport function memoryIngressFromRecord(\n  record: EventIngressRecord,\n  operation?: string\n): AthenaIngressIR {\n  const resolved =\n    operation ??\n    record.operation ??\n    record.headers[ATHENA_INGRESS_OPERATION_HEADER];\n  if (resolved == null || resolved.length === 0) {\n    throw new Error(\n      \"Ingress replay requires the persisted channel operation; do not infer it from the body.\"\n    );\n  }\n  return {\n    body: record.body,\n    domain: record.domain,\n    headers: record.headers,\n    id: record.id,\n    operation: resolved,\n    receivedAt: record.receivedAt,\n    transport: { kind: \"direct\" },\n    ...(record.correlationId ? { correlationId: record.correlationId } : {}),\n    ...(record.traceId ? { traceId: record.traceId } : {}),\n    ...(record.connectionId ? { connectionId: record.connectionId } : {}),\n  };\n}\n\nexport type { AthenaIngressStatus };\n","import type {\n  BillingProviderConfigMap,\n} from \"../../../providers/types.ts\";\nimport {\n  ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { AthenaBillingCatalogConfig } from \"../../../types.ts\";\nimport { normalizeAthenaBillingCatalog } from \"../catalog/normalize.ts\";\nimport { normalizeBillingProviderConfiguration } from \"./configuration/index.ts\";\nimport { createBillingProviderDefinitionRegistry } from \"./definition-registry.ts\";\nimport { BillingProviderRegistry } from \"./registry.ts\";\nimport type { BillingProviderRuntime } from \"./types.ts\";\n\nfunction createSlotAwareProviderRuntime(\n  provider: string,\n  runtimes: ReadonlyMap<string, BillingProviderRuntime>,\n  fallback: BillingProviderRuntime,\n): BillingProviderRuntime {\n  const isConnectionBinding = (context: unknown): boolean =>\n    context != null &&\n    typeof context === \"object\" &&\n    \"binding\" in context &&\n    (context as { binding?: { kind?: unknown } }).binding?.kind ===\n      \"connection\";\n  const delegateFor = (context: unknown): BillingProviderRuntime => {\n    if (\n      context != null &&\n      typeof context === \"object\" &&\n      \"binding\" in context\n    ) {\n      const binding = (context as {\n        binding?: { credentialReference?: unknown; kind?: unknown };\n      }).binding;\n      if (typeof binding?.credentialReference === \"string\") {\n        const runtime = runtimes.get(binding.credentialReference);\n        if (runtime != null) {\n          return runtime;\n        }\n        if (binding.kind === \"connection\") {\n          throw new AthenaBillingProviderError({\n            code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n            message: `No provider runtime is registered for credential_reference \"${binding.credentialReference}\".`,\n          });\n        }\n      }\n    }\n    return fallback;\n  };\n  const routePort = <T extends object>(port: keyof BillingProviderRuntime) => {\n    const fallbackPort = fallback[port];\n    if (fallbackPort == null || typeof fallbackPort !== \"object\") {\n      return undefined;\n    }\n    return new Proxy(fallbackPort, {\n      get(target, property, receiver) {\n        const value = Reflect.get(target, property, receiver);\n        if (typeof value !== \"function\") {\n          return value;\n        }\n        return (...args: unknown[]) => {\n          const runtime = delegateFor(args[0]);\n          const portValue = runtime[port];\n          const method =\n            portValue != null && typeof portValue === \"object\"\n              ? (portValue as unknown as Record<PropertyKey, unknown>)[property]\n              : undefined;\n          if (typeof method !== \"function\") {\n            if (isConnectionBinding(args[0])) {\n              throw new AthenaBillingProviderError({\n                code: ATHENA_BILLING_PROVIDER_NOT_CONFIGURED,\n                message: `The selected provider runtime does not support \"${String(property)}\".`,\n              });\n            }\n            return value(...args);\n          }\n          return method.apply(portValue, args);\n        };\n      },\n    }) as T;\n  };\n  return {\n    checkout: routePort(\"checkout\"),\n    customers: routePort(\"customers\"),\n    getCapabilities: (binding) =>\n      delegateFor({ binding }).getCapabilities(binding),\n    invoices: routePort(\"invoices\"),\n    paymentLinks: routePort(\"paymentLinks\"),\n    payments: routePort(\"payments\"),\n    prices: routePort(\"prices\"),\n    products: routePort(\"products\"),\n    provider: provider as BillingProviderRuntime[\"provider\"],\n    refunds: routePort(\"refunds\"),\n    subscriptions: routePort(\"subscriptions\"),\n    webhooks: routePort(\"webhooks\"),\n    relations: routePort(\"relations\"),\n  };\n}\n\nexport function createBillingProviderRegistry(\n  configured?: BillingProviderConfigMap,\n  catalog?: AthenaBillingCatalogConfig\n): BillingProviderRegistry {\n  const normalizedSlots = normalizeBillingProviderConfiguration({\n    configuredProviders: configured,\n    environment: \"test\",\n  });\n  const athenaCatalog = normalizeAthenaBillingCatalog(catalog);\n  const definitions = createBillingProviderDefinitionRegistry();\n  const runtimes = [];\n  for (const [provider, configured] of normalizedSlots.providers) {\n    const definition = definitions.require(provider);\n    const slots = [\n      ...(configured.defaultSlot == null ? [] : [configured.defaultSlot]),\n      ...configured.slots.values(),\n    ];\n    if (slots.length === 0) {\n      continue;\n    }\n    const slotRuntimes = new Map<string, BillingProviderRuntime>();\n    for (const slot of slots) {\n      const normalized = definition.configuration.normalize(slot.rawConfig);\n      const runtime = definition.runtime.create(normalized, {\n        catalog: athenaCatalog,\n      });\n      slotRuntimes.set(slot.credentialReference, runtime);\n      if (slot.slotKey == null) {\n        slotRuntimes.set(`providers.${provider}-live`, runtime);\n      }\n    }\n    const fallback = slotRuntimes.get(\n      configured.defaultSlot?.credentialReference ?? slots[0].credentialReference,\n    );\n    if (fallback == null) {\n      continue;\n    }\n    runtimes.push(\n      createSlotAwareProviderRuntime(provider, slotRuntimes, fallback),\n    );\n  }\n  return new BillingProviderRegistry(runtimes);\n}\n","import {\n  ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../safety/money.ts\";\nimport type {\n  AthenaBillingCatalogConfig,\n  AthenaBillingCatalogRelationConstraints,\n  BillingCatalogRelation,\n  BillingCatalogRelationType,\n  BillingPrice,\n  BillingProduct,\n} from \"../../../types.ts\";\nimport { BILLING_CATALOG_RELATION_TYPES } from \"../../../types.ts\";\n\nexport interface NormalizedAthenaBillingCatalog {\n  prices: readonly BillingPrice[] | null;\n  products: readonly BillingProduct[] | null;\n  relations: readonly BillingCatalogRelation[] | null;\n}\n\nfunction nonEmptyId(value: unknown, label: string): string {\n  if (typeof value !== \"string\" || value.trim().length === 0) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: `billing.catalog ${label} requires a non-empty id.`,\n    });\n  }\n  return value.trim();\n}\n\nfunction isRelationType(value: unknown): value is BillingCatalogRelationType {\n  return (\n    typeof value === \"string\" &&\n    (BILLING_CATALOG_RELATION_TYPES as readonly string[]).includes(value)\n  );\n}\n\nfunction normalizeRelationConstraints(\n  value: unknown,\n  relationId: string\n): AthenaBillingCatalogRelationConstraints | undefined {\n  if (value == null) {\n    return;\n  }\n  if (typeof value !== \"object\" || Array.isArray(value)) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: `billing.catalog relation ${relationId} constraints must be an object.`,\n    });\n  }\n  const record = value as Record<string, unknown>;\n  const constraints: AthenaBillingCatalogRelationConstraints = {};\n  if (record.jurisdictions != null) {\n    if (\n      !Array.isArray(record.jurisdictions) ||\n      record.jurisdictions.some(\n        (entry) => typeof entry !== \"string\" || entry.trim().length === 0\n      )\n    ) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n        message: `billing.catalog relation ${relationId} jurisdictions must be non-empty strings.`,\n      });\n    }\n    constraints.jurisdictions = record.jurisdictions.map((entry) =>\n      String(entry).trim()\n    );\n  }\n  if (record.minQuantityContext != null) {\n    if (\n      typeof record.minQuantityContext !== \"number\" ||\n      !Number.isInteger(record.minQuantityContext) ||\n      record.minQuantityContext < 1\n    ) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n        message: `billing.catalog relation ${relationId} minQuantityContext must be a positive integer.`,\n      });\n    }\n    constraints.minQuantityContext = record.minQuantityContext;\n  }\n  if (record.maxQuantityContext != null) {\n    if (\n      typeof record.maxQuantityContext !== \"number\" ||\n      !Number.isInteger(record.maxQuantityContext) ||\n      record.maxQuantityContext < 1\n    ) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n        message: `billing.catalog relation ${relationId} maxQuantityContext must be a positive integer.`,\n      });\n    }\n    constraints.maxQuantityContext = record.maxQuantityContext;\n  }\n  if (\n    constraints.minQuantityContext != null &&\n    constraints.maxQuantityContext != null &&\n    constraints.minQuantityContext > constraints.maxQuantityContext\n  ) {\n    throw new AthenaBillingProviderError({\n      code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n      message: `billing.catalog relation ${relationId} minQuantityContext cannot exceed maxQuantityContext.`,\n    });\n  }\n  return constraints;\n}\n\nexport function normalizeAthenaBillingCatalog(\n  catalog?: AthenaBillingCatalogConfig\n): NormalizedAthenaBillingCatalog | undefined {\n  if (catalog == null) {\n    return;\n  }\n  const productsConfigured = Array.isArray(catalog.products);\n  const pricesConfigured = Array.isArray(catalog.prices);\n  const relationsConfigured = Array.isArray(catalog.relations);\n  if (!(productsConfigured || pricesConfigured || relationsConfigured)) {\n    return;\n  }\n\n  const products: BillingProduct[] = [];\n  const productIds = new Set<string>();\n  if (productsConfigured) {\n    for (const entry of catalog.products ?? []) {\n      const id = nonEmptyId(entry.id, \"product\");\n      if (productIds.has(id)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog product id ${id} is duplicated.`,\n        });\n      }\n      if (typeof entry.name !== \"string\" || entry.name.trim().length === 0) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog product ${id} requires a name.`,\n        });\n      }\n      productIds.add(id);\n      products.push({\n        description: entry.description,\n        id,\n        metadata: entry.metadata ?? {},\n        name: entry.name.trim(),\n        raw: entry,\n      });\n    }\n  }\n\n  const prices: BillingPrice[] = [];\n  const priceIds = new Set<string>();\n  if (pricesConfigured) {\n    for (const entry of catalog.prices ?? []) {\n      const id = nonEmptyId(entry.id, \"price\");\n      if (priceIds.has(id)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog price id ${id} is duplicated.`,\n        });\n      }\n      const productId = nonEmptyId(entry.productId, \"price.productId\");\n      if (productsConfigured && !productIds.has(productId)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog price ${id} references unknown product ${productId}.`,\n        });\n      }\n      priceIds.add(id);\n      prices.push({\n        amount: normalizeBillingMoney(entry.amount),\n        id,\n        interval: entry.interval,\n        metadata: entry.metadata ?? {},\n        productId,\n        raw: entry,\n      });\n    }\n  }\n\n  const relations: BillingCatalogRelation[] = [];\n  const relationIds = new Set<string>();\n  if (relationsConfigured) {\n    if (!productsConfigured) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n        message: \"billing.catalog relations require products.\",\n      });\n    }\n    for (const entry of catalog.relations ?? []) {\n      const id = nonEmptyId(entry.id, \"relation\");\n      if (relationIds.has(id)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog relation id ${id} is duplicated.`,\n        });\n      }\n      if (!isRelationType(entry.type)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog relation ${id} has unsupported type.`,\n        });\n      }\n      const sourceProductId = nonEmptyId(\n        entry.sourceProductId,\n        \"relation.sourceProductId\"\n      );\n      const targetProductId = nonEmptyId(\n        entry.targetProductId,\n        \"relation.targetProductId\"\n      );\n      if (!productIds.has(sourceProductId)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog relation ${id} references unknown source product ${sourceProductId}.`,\n        });\n      }\n      if (!productIds.has(targetProductId)) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog relation ${id} references unknown target product ${targetProductId}.`,\n        });\n      }\n      if (sourceProductId === targetProductId) {\n        throw new AthenaBillingProviderError({\n          code: ATHENA_BILLING_PROVIDER_CONFIG_INVALID,\n          message: `billing.catalog relation ${id} cannot target its source product.`,\n        });\n      }\n      relationIds.add(id);\n      relations.push({\n        constraints: normalizeRelationConstraints(entry.constraints, id),\n        id,\n        metadata: entry.metadata ?? {},\n        raw: entry,\n        sourceProductId,\n        targetProductId,\n        type: entry.type,\n      });\n    }\n  }\n\n  return {\n    prices: pricesConfigured ? prices : null,\n    products: productsConfigured ? products : null,\n    relations: relationsConfigured ? relations : null,\n  };\n}\n","/**\n * Canonical Athena Billing domain types for the JS runtime.\n * Distinct from provider-native payloads (`raw`) and from HTTP envelopes.\n */\n\nimport type {\n  BillingCanonicalPaymentStatus,\n  BillingCanonicalSubscriptionStatus,\n} from \"./canonical/status.ts\";\n\nexport type BillingRuntimeMode = \"local\" | \"remote\";\n\nexport type BillingProviderName = \"mollie\" | \"stripe\" | (string & {});\n\nexport interface BillingMoney {\n  currency: string;\n  value: string;\n}\n\nexport type BillingPaymentStatus =\n  | \"pending\"\n  | \"authorized\"\n  | \"paid\"\n  | \"failed\"\n  | \"canceled\"\n  | \"refunded\";\n\nexport type BillingSubscriptionStatus =\n  | \"trialing\"\n  | \"active\"\n  | \"past_due\"\n  | \"canceled\"\n  | \"paused\";\n\nexport type BillingInvoiceStatus =\n  | \"draft\"\n  | \"open\"\n  | \"paid\"\n  | \"void\"\n  | \"uncollectible\";\n\nexport type BillingRefundStatus =\n  | \"queued\"\n  | \"pending\"\n  | \"processing\"\n  | \"refunded\"\n  | \"failed\"\n  | \"canceled\";\n\nexport type BillingPaymentLinkStatus = \"open\" | \"paid\" | \"expired\" | \"canceled\";\n\nexport interface BillingConnectionRef {\n  clientName?: string;\n  connectionId: string;\n}\n\n/**\n * Application/runtime targeting for a billing operation.\n * Distinct from {@link BillingConnectionRef}, which is an explicit persisted\n * Athena connection required by remote HTTP today.\n */\nexport interface BillingExecutionTarget {\n  clientName?: string;\n  connectionId?: string;\n  profileId?: string;\n  provider?: BillingProviderName;\n}\n\nexport interface BillingPayment {\n  amount: BillingMoney;\n  amountRefunded?: BillingMoney | null;\n  canonicalStatus?: BillingCanonicalPaymentStatus;\n  createdAt?: string | null;\n  description?: string | null;\n  id?: string;\n  metadata: unknown;\n  paidAt?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId?: string | null;\n  providerPaymentId: string;\n  providerPaymentLinkId?: string | null;\n  providerProfileId?: string | null;\n  providerStatus?: string;\n  providerSubscriptionId?: string | null;\n  raw: unknown;\n  status: BillingPaymentStatus;\n}\n\nexport interface BillingCustomer {\n  email?: string | null;\n  metadata: unknown;\n  name?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId: string;\n  raw: unknown;\n}\n\nexport interface BillingRefund {\n  amount?: BillingMoney | null;\n  description?: string | null;\n  metadata: unknown;\n  provider: BillingProviderName;\n  providerPaymentId?: string | null;\n  providerRefundId: string;\n  raw: unknown;\n  status?: BillingRefundStatus;\n}\n\nexport interface BillingPaymentLink {\n  amount?: BillingMoney | null;\n  checkoutUrl?: string | null;\n  description?: string | null;\n  metadata: unknown;\n  provider: BillingProviderName;\n  providerPaymentLinkId: string;\n  raw: unknown;\n  status?: BillingPaymentLinkStatus;\n}\n\nexport interface BillingSubscription {\n  amount?: BillingMoney | null;\n  canceledAt?: string | null;\n  canonicalStatus?: BillingCanonicalSubscriptionStatus;\n  createdAt?: string | null;\n  currency?: string | null;\n  description?: string | null;\n  id?: string | null;\n  interval?: string | null;\n  metadata: unknown;\n  nextPaymentDate?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId: string;\n  providerProfileId?: string | null;\n  providerStatus?: string;\n  providerSubscriptionId: string;\n  raw: unknown;\n  status: BillingSubscriptionStatus;\n}\n\nexport interface BillingInvoice {\n  amount?: BillingMoney | null;\n  amountPaid?: BillingMoney | null;\n  createdAt?: string | null;\n  description?: string | null;\n  issuedAt?: string | null;\n  metadata: unknown;\n  paidAt?: string | null;\n  provider: BillingProviderName;\n  providerCustomerId?: string | null;\n  providerInvoiceId: string;\n  providerProfileId?: string | null;\n  raw: unknown;\n  status: BillingInvoiceStatus;\n}\n\nexport interface BillingWebhook {\n  createdAt?: string | null;\n  eventTypes?: string[];\n  metadata: unknown;\n  mode?: string | null;\n  name?: string | null;\n  profileId?: string | null;\n  provider: BillingProviderName;\n  providerWebhookId: string;\n  raw: unknown;\n  status?: string;\n  url?: string | null;\n}\n\nexport interface BillingListPaymentsInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n  source?: \"provider\" | \"persistence\" | string;\n}\n\nexport type BillingPaymentSequenceType = \"first\" | \"recurring\" | \"oneoff\";\n\nexport interface BillingCreatePaymentInput extends BillingExecutionTarget {\n  amount: BillingMoney;\n  customerId?: string | null;\n  description?: string | null;\n  idempotencyKey: string;\n  metadata?: Record<string, unknown>;\n  redirectUrl?: string | null;\n  sequenceType?: BillingPaymentSequenceType;\n}\n\nexport interface BillingGetPaymentInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingCancelPaymentInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingListCustomersInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingCreateCustomerInput extends BillingExecutionTarget {\n  email?: string | null;\n  idempotencyKey: string;\n  metadata?: Record<string, unknown>;\n  name?: string | null;\n}\n\nexport interface BillingGetCustomerInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingUpdateCustomerInput extends BillingExecutionTarget {\n  email?: string | null;\n  id: string;\n  name?: string | null;\n}\n\nexport interface BillingDeleteCustomerInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingListRefundsInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingCreateRefundInput extends BillingExecutionTarget {\n  amount: BillingMoney;\n  description?: string | null;\n  idempotencyKey: string;\n  paymentId: string;\n}\n\n/**\n * Compound refund identity. A standalone `id` cannot address Mollie or Rust\n * `GET/DELETE /payments/{paymentId}/refunds/{refundId}`; do not restore it.\n */\nexport interface BillingGetRefundInput extends BillingExecutionTarget {\n  paymentId: string;\n  refundId: string;\n}\n\nexport interface BillingCancelRefundInput extends BillingExecutionTarget {\n  idempotencyKey?: string;\n  paymentId: string;\n  refundId: string;\n}\n\nexport interface BillingListPaymentLinksInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingCreatePaymentLinkInput extends BillingExecutionTarget {\n  amount: BillingMoney;\n  description: string;\n  idempotencyKey: string;\n  redirectUrl?: string | null;\n}\n\nexport interface BillingGetPaymentLinkInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingUpdatePaymentLinkInput extends BillingExecutionTarget {\n  description?: string | null;\n  id: string;\n}\n\nexport interface BillingDeletePaymentLinkInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingListSubscriptionsInput extends BillingExecutionTarget {\n  cursor?: string;\n  customerId?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingCreateSubscriptionInput extends BillingExecutionTarget {\n  amount: BillingMoney;\n  customerId: string;\n  description: string;\n  idempotencyKey: string;\n  interval: string;\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * Compound subscription identity. A standalone `id` cannot reconstruct\n * `customerId` for Mollie or Rust customer-scoped routes.\n */\nexport interface BillingGetSubscriptionInput extends BillingExecutionTarget {\n  customerId: string;\n  subscriptionId: string;\n}\n\nexport interface BillingUpdateSubscriptionInput extends BillingExecutionTarget {\n  amount?: BillingMoney;\n  customerId: string;\n  description?: string | null;\n  interval?: string;\n  metadata?: Record<string, unknown>;\n  subscriptionId: string;\n}\n\nexport interface BillingCancelSubscriptionInput extends BillingExecutionTarget {\n  customerId: string;\n  subscriptionId: string;\n}\n\nexport interface BillingListInvoicesInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingGetInvoiceInput extends BillingExecutionTarget {\n  invoiceId: string;\n}\n\nexport interface BillingListWebhooksInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingCreateWebhookInput extends BillingExecutionTarget {\n  eventTypes?: string[];\n  idempotencyKey?: string;\n  name?: string;\n  url: string;\n}\n\nexport interface BillingGetWebhookInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingUpdateWebhookInput extends BillingExecutionTarget {\n  eventTypes?: string[];\n  id: string;\n  name?: string;\n  url?: string;\n}\n\nexport interface BillingDeleteWebhookInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingTestWebhookInput extends BillingExecutionTarget {\n  id: string;\n}\n\nexport interface BillingProduct {\n  description?: string | null;\n  id: string;\n  metadata: unknown;\n  name: string;\n  raw: unknown;\n}\n\nexport interface BillingPrice {\n  amount: BillingMoney;\n  id: string;\n  interval?: string | null;\n  metadata: unknown;\n  productId: string;\n  raw: unknown;\n}\n\n/**\n * Canonical billing owner. Provider customer IDs and emails are locators /\n * contact data, never this identity.\n */\nexport type BillingSubjectRef =\n  | { kind: \"user\"; id: string }\n  | { kind: \"organization\"; id: string };\n\nexport type BillingProviderSubjectKind = \"customer\" | \"recipient\";\n\nexport type BillingSubjectBindingStatus =\n  | \"pending\"\n  | \"active\"\n  | \"conflict\"\n  | \"revoked\";\n\nexport type BillingSubjectBindingSource = \"created\" | \"imported\" | \"reconciled\";\n\nexport type BillingOwnershipStatus = \"resolved\" | \"unresolved\" | \"conflict\";\n\nexport interface BillingSubjectBinding {\n  connectionId: string;\n  emailSnapshot?: string | null;\n  id: string;\n  isPrimary: boolean;\n  providerSubjectId: string;\n  providerSubjectKind: BillingProviderSubjectKind;\n  source: BillingSubjectBindingSource;\n  status: BillingSubjectBindingStatus;\n  subject: BillingSubjectRef;\n}\n\n/** Athena-owned catalog seed for local billing. Not Mollie/Stripe native products. */\nexport interface AthenaBillingCatalogProductInput {\n  description?: string | null;\n  id: string;\n  metadata?: unknown;\n  name: string;\n}\n\nexport interface AthenaBillingCatalogPriceInput {\n  amount: BillingMoney;\n  id: string;\n  interval?: string | null;\n  metadata?: unknown;\n  productId: string;\n}\n\nexport const BILLING_CATALOG_RELATION_TYPES = [\n  \"addon\",\n  \"upsell\",\n  \"upgrade\",\n  \"requires\",\n  \"incompatible\",\n] as const;\n\nexport type BillingCatalogRelationType =\n  (typeof BILLING_CATALOG_RELATION_TYPES)[number];\n\nexport interface AthenaBillingCatalogRelationConstraints {\n  jurisdictions?: readonly string[];\n  maxQuantityContext?: number;\n  minQuantityContext?: number;\n}\n\nexport interface AthenaBillingCatalogRelationInput {\n  constraints?: AthenaBillingCatalogRelationConstraints;\n  id: string;\n  metadata?: unknown;\n  sourceProductId: string;\n  targetProductId: string;\n  type: BillingCatalogRelationType;\n}\n\nexport interface AthenaBillingCatalogConfig {\n  prices?: readonly AthenaBillingCatalogPriceInput[];\n  products?: readonly AthenaBillingCatalogProductInput[];\n  relations?: readonly AthenaBillingCatalogRelationInput[];\n}\n\nexport interface BillingCatalogRelation {\n  constraints?: AthenaBillingCatalogRelationConstraints;\n  id: string;\n  metadata: unknown;\n  raw: unknown;\n  sourceProductId: string;\n  targetProductId: string;\n  type: BillingCatalogRelationType;\n}\n\nexport interface BillingCheckout {\n  checkoutUrl?: string | null;\n  expiresAt?: string | null;\n  metadata: unknown;\n  provider: BillingProviderName;\n  providerCheckoutId: string;\n  raw: unknown;\n}\n\nexport interface BillingListProductsInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface BillingListPricesInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n  productId?: string;\n}\n\nexport interface BillingListRelationsInput extends BillingExecutionTarget {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n  sourceProductId?: string;\n}\n\nexport interface BillingCreateCheckoutInput extends BillingExecutionTarget {\n  cancelUrl?: string | null;\n  currency?: string;\n  customer?: unknown;\n  idempotencyKey: string;\n  lineItems?: unknown[];\n  metadata?: Record<string, unknown>;\n  mode?: string;\n  recurrence?: unknown;\n  successUrl: string;\n}\n","import { createMollieProviderDefinition } from \"./mollie/definition.ts\";\nimport { createStripeProviderDefinition } from \"./stripe/definition.ts\";\nimport { BillingProviderDefinitionRegistry } from \"./definitions.ts\";\n\nexport function createBillingProviderDefinitionRegistry(): BillingProviderDefinitionRegistry {\n  return new BillingProviderDefinitionRegistry([\n    createMollieProviderDefinition(),\n    createStripeProviderDefinition(),\n  ]);\n}\n","import type {\n  MollieBillingProviderConfig,\n  NormalizedMollieBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type { BillingProviderDefinition } from \"../definition.ts\";\nimport { createMollieBillingProviderRuntime } from \"./runtime.ts\";\nimport { normalizeMollieBillingProviderConfig } from \"../config.ts\";\n\nexport function createMollieProviderDefinition(): BillingProviderDefinition<\n  NormalizedMollieBillingProviderConfig\n> {\n  return {\n    configuration: {\n      credentialKind: (config) => config.credentialKind,\n      normalize: (config) =>\n        normalizeMollieBillingProviderConfig(\n          config as MollieBillingProviderConfig\n        ),\n    },\n    provider: \"mollie\",\n    runtime: {\n      create: (config, context) =>\n        createMollieBillingProviderRuntime(config, context?.catalog),\n    },\n  };\n}\n","import type {\n  MollieBillingProviderConfig,\n  NormalizedMollieBillingProviderConfig,\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 { createAthenaBillingRelationsPort } from \"../../catalog/relations.ts\";\nimport type {\n  BillingProviderBinding,\n  BillingProviderCapabilities,\n  MollieBillingProviderRuntime,\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  implements MollieBillingProviderRuntime\n{\n  readonly provider = \"mollie\" as const;\n  readonly payments;\n  readonly customers;\n  readonly refunds;\n  readonly paymentLinks;\n  readonly subscriptions;\n  readonly invoices;\n  readonly webhooks;\n  readonly products;\n  readonly prices;\n  readonly relations;\n  readonly checkout = undefined;\n\n  constructor(\n    readonly config: NormalizedMollieBillingProviderConfig,\n    catalog?: NormalizedAthenaBillingCatalog\n  ) {\n    const pool = new MollieSdkClientPool(config);\n    this.payments = createMollieBillingPaymentsPort(config, pool);\n    this.customers = createMollieBillingCustomersPort(config, pool);\n    this.refunds = createMollieBillingRefundsPort(config, pool);\n    this.paymentLinks = createMollieBillingPaymentLinksPort(config, pool);\n    this.subscriptions = createMollieBillingSubscriptionsPort(config, pool);\n    this.invoices = createMollieBillingInvoicesPort(config, pool);\n    this.webhooks = createMollieBillingWebhooksPort(pool);\n    this.products =\n      catalog?.products == null\n        ? undefined\n        : createAthenaBillingProductsPort(catalog.products);\n    this.prices =\n      catalog?.prices == null\n        ? undefined\n        : createAthenaBillingPricesPort(catalog.prices);\n    this.relations =\n      catalog?.relations == null\n        ? undefined\n        : createAthenaBillingRelationsPort(catalog.relations);\n  }\n\n  async getCapabilities(\n    binding: BillingProviderBinding\n  ): Promise<BillingProviderCapabilities> {\n    const hasProducts = this.products != null;\n    const hasPrices = this.prices != null;\n    const hasRelations = this.relations != null;\n    const webhookCapability = resolveMollieWebhookManagementCapability(binding);\n    const canListWebhooks = webhookCapability.nextGen.list === true;\n    const canWriteWebhooks = webhookCapability.nextGen.write === true;\n    return {\n      operations: {\n        ...MOLLIE_BILLING_PROVIDER_CAPABILITIES.operations,\n        \"prices.list\": hasPrices,\n        \"products.list\": hasProducts,\n        \"relations.list\": hasRelations,\n        \"webhooks.create\": canWriteWebhooks,\n        \"webhooks.delete\": canWriteWebhooks,\n        \"webhooks.get\": false,\n        \"webhooks.list\": canListWebhooks,\n        \"webhooks.test\": false,\n        \"webhooks.update\": canWriteWebhooks,\n      },\n      ports: {\n        ...MOLLIE_BILLING_PROVIDER_CAPABILITIES.ports,\n        prices: hasPrices,\n        products: hasProducts,\n        relations: hasRelations,\n        webhooks: true,\n      },\n    };\n  }\n}\n\nexport function createMollieBillingProviderRuntime(\n  config: MollieBillingProviderConfig | NormalizedMollieBillingProviderConfig,\n  catalog?: NormalizedAthenaBillingCatalog\n): MollieBillingProviderRuntime {\n  return new MollieBillingProviderRuntimeImpl(\n    normalizeMollieRuntimeConfig(config),\n    catalog\n  );\n}\n","import type { BillingPrice } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n  BillingPricesPort,\n  BillingProviderExecutionContext,\n  BillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingPricesPort implements BillingPricesPort {\n  readonly kind = \"prices\" as const;\n\n  constructor(private readonly prices: readonly BillingPrice[]) {}\n\n  async list(\n    _context: BillingProviderExecutionContext,\n    input: BillingProviderListInput & { productId?: string }\n  ): Promise<BillingPage<BillingPrice>> {\n    const filtered =\n      input.productId != null && input.productId.length > 0\n        ? this.prices.filter((price) => price.productId === input.productId)\n        : this.prices;\n    return pageAthenaCatalogItems(filtered, input, \"prices\");\n  }\n}\n\nexport function createAthenaBillingPricesPort(\n  prices: readonly BillingPrice[]\n): BillingPricesPort {\n  return new AthenaBillingPricesPort(prices);\n}\n","import { AthenaBillingCapabilityError } from \"../../../errors.ts\";\nimport type { BillingPage } from \"../../types.ts\";\n\nexport type AthenaCatalogListResource = \"products\" | \"prices\" | \"relations\";\n\ninterface AthenaCatalogCursor {\n  offset: number;\n  provider: \"athena\";\n  resource: AthenaCatalogListResource;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction encodeBase64Url(value: string): string {\n  const bytes = new TextEncoder().encode(value);\n  let binary = \"\";\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n  return btoa(binary)\n    .replaceAll(\"+\", \"-\")\n    .replaceAll(\"/\", \"_\")\n    .replace(/[=]+$/u, \"\");\n}\n\nfunction decodeBase64Url(value: string): string {\n  if (!/^[A-Za-z0-9_-]+$/u.test(value)) {\n    throw new TypeError(\"Invalid base64url value.\");\n  }\n  const base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"/\", \"_\");\n  const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n  const binary = atob(padded);\n  const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n  return new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n}\n\nfunction decodeCatalogCursor(\n  cursor: string,\n  resource: AthenaCatalogListResource\n): number {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(decodeBase64Url(cursor));\n  } catch {\n    throw new AthenaBillingCapabilityError({\n      operation: `${resource}.list`,\n      reason: \"unsupported_operation\",\n    });\n  }\n  if (\n    !isRecord(parsed) ||\n    parsed.provider !== \"athena\" ||\n    parsed.resource !== resource ||\n    typeof parsed.offset !== \"number\" ||\n    !Number.isInteger(parsed.offset) ||\n    parsed.offset < 0\n  ) {\n    throw new AthenaBillingCapabilityError({\n      operation: `${resource}.list`,\n      reason: \"unsupported_operation\",\n    });\n  }\n  return parsed.offset;\n}\n\nexport function pageAthenaCatalogItems<T>(\n  items: readonly T[],\n  input: { cursor?: string; limit?: number },\n  resource: AthenaCatalogListResource\n): BillingPage<T> {\n  const start =\n    input.cursor != null && input.cursor.length > 0\n      ? decodeCatalogCursor(input.cursor, resource)\n      : 0;\n  const limit =\n    input.limit != null && Number.isInteger(input.limit) && input.limit > 0\n      ? input.limit\n      : 50;\n  const slice = items.slice(start, start + limit);\n  const nextOffset = start + slice.length;\n  if (nextOffset >= items.length) {\n    return { items: [...slice], nextCursor: null };\n  }\n  const cursor: AthenaCatalogCursor = {\n    offset: nextOffset,\n    provider: \"athena\",\n    resource,\n  };\n  return {\n    items: [...slice],\n    nextCursor: encodeBase64Url(JSON.stringify(cursor)),\n  };\n}\n","import type { BillingProduct } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n  BillingProductsPort,\n  BillingProviderExecutionContext,\n  BillingProviderListInput,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingProductsPort implements BillingProductsPort {\n  readonly kind = \"products\" as const;\n\n  constructor(private readonly products: readonly BillingProduct[]) {}\n\n  async list(\n    _context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingProduct>> {\n    return pageAthenaCatalogItems(this.products, input, \"products\");\n  }\n}\n\nexport function createAthenaBillingProductsPort(\n  products: readonly BillingProduct[]\n): BillingProductsPort {\n  return new AthenaBillingProductsPort(products);\n}\n","import type { BillingCatalogRelation } from \"../../../types.ts\";\nimport type { BillingPage } from \"../../types.ts\";\nimport type {\n  BillingProviderExecutionContext,\n  BillingProviderListInput,\n  BillingRelationsPort,\n} from \"../providers/types.ts\";\nimport { pageAthenaCatalogItems } from \"./page.ts\";\n\nexport class AthenaBillingRelationsPort implements BillingRelationsPort {\n  readonly kind = \"relations\" as const;\n\n  constructor(private readonly relations: readonly BillingCatalogRelation[]) {}\n\n  async list(\n    _context: BillingProviderExecutionContext,\n    input: BillingProviderListInput & { sourceProductId?: string }\n  ): Promise<BillingPage<BillingCatalogRelation>> {\n    const filtered =\n      input.sourceProductId != null && input.sourceProductId.length > 0\n        ? this.relations.filter(\n            (relation) => relation.sourceProductId === input.sourceProductId\n          )\n        : this.relations;\n    return pageAthenaCatalogItems(filtered, input, \"relations\");\n  }\n}\n\nexport function createAthenaBillingRelationsPort(\n  relations: readonly BillingCatalogRelation[]\n): BillingRelationsPort {\n  return new AthenaBillingRelationsPort(relations);\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    operations: {\n      \"checkout.create\": false,\n      \"customers.create\": true,\n      \"customers.delete\": true,\n      \"customers.get\": true,\n      \"customers.list\": true,\n      \"customers.update\": true,\n      \"invoices.get\": true,\n      \"invoices.list\": true,\n      \"paymentLinks.create\": true,\n      \"paymentLinks.delete\": true,\n      \"paymentLinks.get\": true,\n      \"paymentLinks.list\": true,\n      \"paymentLinks.update\": true,\n      \"payments.cancel\": true,\n      \"payments.create\": true,\n      \"payments.get\": true,\n      \"payments.list\": true,\n      \"prices.list\": false,\n      \"products.list\": false,\n      \"relations.list\": false,\n      \"refunds.cancel\": true,\n      \"refunds.create\": true,\n      \"refunds.get\": true,\n      \"refunds.list\": true,\n      \"subscriptions.cancel\": true,\n      \"subscriptions.create\": true,\n      \"subscriptions.get\": true,\n      \"subscriptions.list\": true,\n      \"subscriptions.update\": true,\n      \"webhooks.create\": true,\n      \"webhooks.delete\": true,\n      \"webhooks.get\": false,\n      \"webhooks.list\": true,\n      \"webhooks.test\": false,\n      \"webhooks.update\": true,\n    },\n    ports: {\n      checkout: false,\n      customers: true,\n      invoices: true,\n      paymentLinks: true,\n      payments: true,\n      prices: false,\n      products: false,\n      relations: false,\n      refunds: true,\n      subscriptions: true,\n      webhooks: true,\n    },\n  };\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingCustomer } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n  BillingCustomersPort,\n  BillingProviderCreateCustomerInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetResourceInput,\n  BillingProviderListInput,\n  BillingProviderUpdateCustomerInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n  customerCreateBody,\n  mapCreateCustomerToMollieSdk,\n  mapGetCustomerToMollieSdk,\n  mapUpdateCustomerToMollieSdk,\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  readonly kind = \"customers\" as const;\n\n  constructor(\n    config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {\n    void config;\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreateCustomerInput\n  ): Promise<BillingCustomer> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"customers.create\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"create\",\n      operation: \"customers.create\",\n      request: mapCreateCustomerToMollieSdk({\n        body: customerCreateBody(input),\n        idempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n      }),\n      resource: \"customers\",\n    });\n    return projectMollieCustomer(raw);\n  }\n\n  async delete(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<void> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"customers.delete\",\n      requestedProfileId: context.target.profileId,\n    });\n    await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"delete\",\n      operation: \"customers.delete\",\n      request: mapGetCustomerToMollieSdk(input),\n      resource: \"customers\",\n    });\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<BillingCustomer> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"customers.get\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation: \"customers.get\",\n      request: mapGetCustomerToMollieSdk(input),\n      resource: \"customers\",\n    });\n    return projectMollieCustomer(raw);\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingCustomer>> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"customers.list\",\n      requestedProfileId: context.target.profileId,\n    });\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"customers\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"customers.list\",\n      request: { from, limit: input.limit },\n      resource: \"customers\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(\n      raw,\n      \"customers\",\n      this.pool.apiBaseUrl()\n    );\n    return {\n      items: page.items.map(projectMollieCustomer),\n      nextCursor: page.nextCursor,\n    };\n  }\n\n  async update(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderUpdateCustomerInput\n  ): Promise<BillingCustomer> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"customers.update\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"update\",\n      operation: \"customers.update\",\n      request: mapUpdateCustomerToMollieSdk(input),\n      resource: \"customers\",\n    });\n    return projectMollieCustomer(raw);\n  }\n}\n\nexport function createMollieBillingCustomersPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingCustomersPort {\n  return new MollieBillingCustomersPort(config, pool);\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  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nexport function projectMollieCustomer(raw: unknown): BillingCustomer {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie customer response is missing a customer id.\",\n      provider: \"mollie\",\n      retry: billingRetryDisposition({\n        idempotencyKeyPresent: false,\n        kind: \"serialization\",\n        operation: \"customers.get\",\n        requestDispatchState: \"dispatched\",\n      }),\n    });\n  }\n  return {\n    email: optionalString(raw.email),\n    metadata: raw.metadata,\n    name: optionalString(raw.name),\n    provider: \"mollie\",\n    providerCustomerId: raw.id,\n    raw,\n  };\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingInvoice } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n  BillingInvoicesPort,\n  BillingProviderExecutionContext,\n  BillingProviderGetInvoiceInput,\n  BillingProviderListInput,\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  return \"salesInvoices\";\n}\n\nexport class MollieBillingInvoicesPort implements BillingInvoicesPort {\n  readonly kind = \"invoices\" as const;\n\n  constructor(\n    config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {\n    void config;\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetInvoiceInput\n  ): Promise<BillingInvoice> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"invoices.get\",\n      requestedProfileId: context.target.profileId,\n    });\n    const client = clientFromPool(this.pool, context);\n    const raw = await callMollieSdk({\n      client,\n      method: \"get\",\n      operation: \"invoices.get\",\n      request: mapGetInvoiceToMollieSdk(input),\n      resource: invoiceResourceName(),\n    });\n    return projectMollieInvoice(raw);\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingInvoice>> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"invoices.list\",\n      requestedProfileId: context.target.profileId,\n    });\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"invoices\")\n        : undefined;\n    const client = clientFromPool(this.pool, context);\n    const raw = await callMollieSdk({\n      client,\n      method: \"list\",\n      operation: \"invoices.list\",\n      request: { from, limit: input.limit },\n      resource: invoiceResourceName(),\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(raw, \"invoices\", this.pool.apiBaseUrl());\n    return {\n      items: page.items.map(projectMollieInvoice),\n      nextCursor: page.nextCursor,\n    };\n  }\n}\n\nexport function createMollieBillingInvoicesPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingInvoicesPort {\n  return new MollieBillingInvoicesPort(config, pool);\n}\n","import type { BillingProviderGetInvoiceInput } from \"../../types.ts\";\n\nexport function mapGetInvoiceToMollieSdk(\n  input: BillingProviderGetInvoiceInput\n): Record<string, unknown> {\n  return { invoiceId: input.invoiceId };\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingPaymentLink } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n  BillingPaymentLinksPort,\n  BillingProviderCreatePaymentLinkInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetResourceInput,\n  BillingProviderListInput,\n  BillingProviderUpdatePaymentLinkInput,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n  mapCreatePaymentLinkToMollieSdk,\n  mapGetPaymentLinkToMollieSdk,\n  mapUpdatePaymentLinkToMollieSdk,\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  readonly kind = \"payment-links\" as const;\n\n  constructor(\n    config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {\n    void config;\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreatePaymentLinkInput\n  ): Promise<BillingPaymentLink> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"paymentLinks.create\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"create\",\n      operation: \"paymentLinks.create\",\n      request: mapCreatePaymentLinkToMollieSdk({\n        idempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n        input,\n        webhookUrl: trustedClassicWebhookUrl(context),\n      }),\n      resource: \"paymentLinks\",\n    });\n    return projectMolliePaymentLink(raw);\n  }\n\n  async delete(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<void> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"paymentLinks.delete\",\n      requestedProfileId: context.target.profileId,\n    });\n    await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"delete\",\n      operation: \"paymentLinks.delete\",\n      request: mapGetPaymentLinkToMollieSdk(input),\n      resource: \"paymentLinks\",\n    });\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<BillingPaymentLink> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"paymentLinks.get\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation: \"paymentLinks.get\",\n      request: mapGetPaymentLinkToMollieSdk(input),\n      resource: \"paymentLinks\",\n    });\n    return projectMolliePaymentLink(raw);\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingPaymentLink>> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"paymentLinks.list\",\n      requestedProfileId: context.target.profileId,\n    });\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"payment-links\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"paymentLinks.list\",\n      request: { from, limit: input.limit },\n      resource: \"paymentLinks\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(\n      raw,\n      \"payment-links\",\n      this.pool.apiBaseUrl()\n    );\n    return {\n      items: page.items.map(projectMolliePaymentLink),\n      nextCursor: page.nextCursor,\n    };\n  }\n\n  async update(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderUpdatePaymentLinkInput\n  ): Promise<BillingPaymentLink> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"paymentLinks.update\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"update\",\n      operation: \"paymentLinks.update\",\n      request: mapUpdatePaymentLinkToMollieSdk(input),\n      resource: \"paymentLinks\",\n    });\n    return projectMolliePaymentLink(raw);\n  }\n}\n\nexport function createMollieBillingPaymentLinksPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingPaymentLinksPort {\n  return new MollieBillingPaymentLinksPort(config, pool);\n}\n","import type {\n  BillingProviderCreatePaymentLinkInput,\n  BillingProviderGetResourceInput,\n  BillingProviderUpdatePaymentLinkInput,\n} from \"../../types.ts\";\n\nexport function mapCreatePaymentLinkToMollieSdk(input: {\n  input: BillingProviderCreatePaymentLinkInput;\n  idempotencyKey: string;\n  webhookUrl?: string;\n}): Record<string, unknown> {\n  const paymentLinkRequest: Record<string, unknown> = {\n    amount: input.input.amount,\n    description: input.input.description,\n  };\n  if (input.input.redirectUrl != null) {\n    paymentLinkRequest.redirectUrl = input.input.redirectUrl;\n  }\n  if (input.webhookUrl) {\n    paymentLinkRequest.webhookUrl = input.webhookUrl;\n  }\n  return {\n    idempotencyKey: input.idempotencyKey,\n    paymentLinkRequest,\n  };\n}\n\nexport function mapGetPaymentLinkToMollieSdk(\n  input: BillingProviderGetResourceInput\n): Record<string, unknown> {\n  return { paymentLinkId: input.id };\n}\n\nexport function mapUpdatePaymentLinkToMollieSdk(\n  input: BillingProviderUpdatePaymentLinkInput\n): Record<string, unknown> {\n  const paymentLinkRequest: Record<string, unknown> = {};\n  if (input.description != null) {\n    paymentLinkRequest.description = input.description;\n  }\n  return {\n    paymentLinkId: input.id,\n    paymentLinkRequest,\n  };\n}\n","import type { BillingProviderExecutionContext } from \"../../types.ts\";\n\nexport function trustedClassicWebhookUrl(\n  context: BillingProviderExecutionContext\n): string | undefined {\n  const url = context.ingress?.classicWebhookUrl?.trim();\n  return url && url.length > 0 ? url : undefined;\n}\n\nexport function applyTrustedClassicWebhookUrl(\n  body: Record<string, unknown>,\n  context: BillingProviderExecutionContext\n): Record<string, unknown> {\n  const url = trustedClassicWebhookUrl(context);\n  if (url) {\n    body.webhookUrl = url;\n  }\n  return body;\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n  BillingMoney,\n  BillingPaymentLink,\n  BillingPaymentLinkStatus,\n} from \"../../../../../types.ts\";\n\nimport { mollieLinkHref } from \"./links.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nfunction serializationRetry() {\n  return billingRetryDisposition({\n    idempotencyKeyPresent: false,\n    kind: \"serialization\",\n    operation: \"paymentLinks.get\",\n    requestDispatchState: \"dispatched\",\n  });\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n  if (!isRecord(value)) {\n    return;\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    return;\n  }\n  try {\n    return normalizeBillingMoney(value);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"ATHENA_BILLING_MONEY_INVALID\";\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message,\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n}\n\nexport function projectMolliePaymentLinkStatus(input: {\n  archived?: unknown;\n  paidAt?: unknown;\n}): BillingPaymentLinkStatus {\n  if (input.archived === true) {\n    return \"canceled\";\n  }\n  if (typeof input.paidAt === \"string\" && input.paidAt.length > 0) {\n    return \"paid\";\n  }\n  return \"open\";\n}\n\nexport function projectMolliePaymentLink(raw: unknown): BillingPaymentLink {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie payment link response is missing a payment link id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  return {\n    amount: projectMoney(raw.amount) ?? null,\n    checkoutUrl: mollieLinkHref(raw, \"paymentLink\"),\n    description: optionalString(raw.description),\n    metadata: raw.metadata,\n    provider: \"mollie\",\n    providerPaymentLinkId: raw.id,\n    raw,\n    status: projectMolliePaymentLinkStatus({\n      archived: raw.archived,\n      paidAt: raw.paidAt,\n    }),\n  };\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  BillingProviderCreatePaymentInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetResourceInput,\n  BillingProviderListInput,\n  BillingProviderPaymentPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n  mapCreatePaymentToMollieSdk,\n  mapGetPaymentToMollieSdk,\n  mapListPaymentsToMollieSdk,\n  paymentCreateBody,\n} from \"./dialect/payments.ts\";\nimport {\n  assertMolliePaymentMatchesSelectedProfile,\n  resolveMollieRequestProfileId,\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  constructor(\n    private readonly config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {}\n\n  private profileId(\n    context: BillingProviderExecutionContext\n  ): string | undefined {\n    return resolveMollieRequestProfileId({\n      configuredProfileId:\n        this.config.profileId ?? this.config.defaultProfileId,\n      credentialKind: this.config.credentialKind,\n      requestedProfileId: context.target.profileId,\n    });\n  }\n\n  async cancel(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<BillingPayment> {\n    const client = clientFromPool(this.pool, context);\n    const profileId = this.profileId(context);\n    if (profileId != null) {\n      const existing = await callMollieSdk({\n        client,\n        method: \"get\",\n        operation: \"payments.cancel\",\n        request: mapGetPaymentToMollieSdk(input),\n        resource: \"payments\",\n      });\n      assertMolliePaymentMatchesSelectedProfile({\n        operation: \"payments.cancel\",\n        payment: projectMolliePayment(existing),\n        selectedProfileId: profileId,\n      });\n    }\n    const raw = await callMollieSdk({\n      client,\n      method: \"cancel\",\n      operation: \"payments.cancel\",\n      request: mapGetPaymentToMollieSdk(input),\n      resource: \"payments\",\n    });\n    return projectMolliePayment(raw);\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreatePaymentInput\n  ): Promise<BillingPayment> {\n    const profileId = this.profileId(context);\n    if (this.config.credentialKind !== \"api_key\" && profileId == null) {\n      throw new AthenaBillingCapabilityError({\n        operation: \"payments.create\",\n        reason: \"missing_provider_scope\",\n      });\n    }\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"create\",\n      operation: \"payments.create\",\n      request: mapCreatePaymentToMollieSdk({\n        body: paymentCreateBody(input, profileId, context),\n        idempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n      }),\n      resource: \"payments\",\n    });\n    return projectMolliePayment(raw);\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetResourceInput\n  ): Promise<BillingPayment> {\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation: \"payments.get\",\n      request: mapGetPaymentToMollieSdk(input),\n      resource: \"payments\",\n    });\n    const payment = projectMolliePayment(raw);\n    assertMolliePaymentMatchesSelectedProfile({\n      operation: \"payments.get\",\n      payment,\n      selectedProfileId: this.profileId(context),\n    });\n    return payment;\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingPayment>> {\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"payments\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"payments.list\",\n      request: mapListPaymentsToMollieSdk({\n        from,\n        limit: input.limit,\n        profileId: this.profileId(context),\n      }),\n      resource: \"payments\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(raw, \"payments\", this.pool.apiBaseUrl());\n    return {\n      items: page.items.map(projectMolliePayment),\n      nextCursor: page.nextCursor,\n    };\n  }\n}\n\nexport function createMollieBillingPaymentsPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingProviderPaymentPort {\n  return new MollieBillingPaymentsPort(config, pool);\n}\n","import type {\n  BillingProviderCreatePaymentInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetResourceInput,\n  BillingProviderListInput,\n} from \"../../types.ts\";\nimport { applyTrustedClassicWebhookUrl } from \"./webhook-url.ts\";\n\nexport function mapCreatePaymentToMollieSdk(input: {\n  body: Record<string, unknown>;\n  idempotencyKey?: string;\n}): Record<string, unknown> {\n  return {\n    idempotencyKey: input.idempotencyKey,\n    paymentRequest: input.body,\n  };\n}\n\nexport function mapGetPaymentToMollieSdk(\n  input: BillingProviderGetResourceInput\n): Record<string, unknown> {\n  return { paymentId: input.id };\n}\n\nexport function mapListPaymentsToMollieSdk(input: {\n  from?: string;\n  limit?: number;\n  profileId?: string;\n}): Record<string, unknown> {\n  return {\n    from: input.from,\n    limit: input.limit,\n    profileId: input.profileId,\n  };\n}\n\nexport function paymentCreateBody(\n  input: BillingProviderCreatePaymentInput,\n  profileId?: string,\n  context?: BillingProviderExecutionContext\n): Record<string, unknown> {\n  const body: Record<string, unknown> = {\n    amount: input.amount,\n    description: input.description ?? \"\",\n    metadata: input.metadata ?? {},\n  };\n  if (input.redirectUrl != null) {\n    body.redirectUrl = input.redirectUrl;\n  }\n  if (input.cancelUrl != null) {\n    body.cancelUrl = input.cancelUrl;\n  }\n  if (input.customerId != null) {\n    body.customerId = input.customerId;\n  }\n  if (input.sequenceType != null) {\n    body.sequenceType = input.sequenceType;\n  }\n  if (profileId != null) {\n    body.profileId = profileId;\n  }\n  if (context) {\n    applyTrustedClassicWebhookUrl(body, context);\n  }\n  return body;\n}\n\nexport function mapListInputFrom(\n  input: BillingProviderListInput\n): string | undefined {\n  return input.cursor != null && input.cursor.length > 0\n    ? input.cursor\n    : 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  BillingProviderCreateRefundInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetRefundInput,\n  BillingProviderListInput,\n  BillingRefundsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport { mapGetPaymentToMollieSdk } from \"./dialect/payments.ts\";\nimport {\n  mapCancelRefundToMollieSdk,\n  mapCreateRefundToMollieSdk,\n  mapGetRefundToMollieSdk,\n} from \"./dialect/refunds.ts\";\nimport {\n  assertMolliePaymentMatchesSelectedProfile,\n  resolveMollieRequestProfileId,\n} from \"./profile-target.ts\";\nimport { projectMollieRefund } from \"./projection/refund.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 MollieBillingRefundsPort implements BillingRefundsPort {\n  readonly kind = \"refunds\" as const;\n\n  constructor(\n    private readonly config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {}\n\n  private selectedProfileId(\n    context: BillingProviderExecutionContext\n  ): string | undefined {\n    return resolveMollieRequestProfileId({\n      configuredProfileId:\n        this.config.profileId ?? this.config.defaultProfileId,\n      credentialKind: this.config.credentialKind,\n      requestedProfileId: context.target.profileId,\n    });\n  }\n\n  private async assertParentPaymentProfile(\n    context: BillingProviderExecutionContext,\n    paymentId: string,\n    operation: \"refunds.cancel\" | \"refunds.create\" | \"refunds.get\"\n  ): Promise<void> {\n    const selectedProfileId = this.selectedProfileId(context);\n    if (selectedProfileId == null) {\n      return;\n    }\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation,\n      request: mapGetPaymentToMollieSdk({ id: paymentId }),\n      resource: \"payments\",\n    });\n    assertMolliePaymentMatchesSelectedProfile({\n      operation,\n      payment: projectMolliePayment(raw),\n      selectedProfileId,\n    });\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreateRefundInput\n  ): Promise<BillingRefund> {\n    await this.assertParentPaymentProfile(\n      context,\n      input.paymentId,\n      \"refunds.create\"\n    );\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"create\",\n      operation: \"refunds.create\",\n      request: mapCreateRefundToMollieSdk({\n        idempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n        input,\n      }),\n      resource: \"refunds\",\n    });\n    return projectMollieRefund(raw);\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetRefundInput\n  ): Promise<BillingRefund> {\n    await this.assertParentPaymentProfile(\n      context,\n      input.paymentId,\n      \"refunds.get\"\n    );\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation: \"refunds.get\",\n      request: mapGetRefundToMollieSdk(input),\n      resource: \"refunds\",\n    });\n    return projectMollieRefund(raw);\n  }\n\n  async cancel(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetRefundInput\n  ): Promise<BillingRefund> {\n    await this.assertParentPaymentProfile(\n      context,\n      input.paymentId,\n      \"refunds.cancel\"\n    );\n    await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"cancel\",\n      operation: \"refunds.cancel\",\n      request: mapCancelRefundToMollieSdk({\n        idempotencyKey: context.idempotencyKey ?? \"\",\n        input,\n      }),\n      resource: \"refunds\",\n    });\n    try {\n      return await this.get(context, input);\n    } catch (error) {\n      if (\n        isAthenaBillingProviderRequestError(error) &&\n        error.kind === \"not_found\"\n      ) {\n        return {\n          amount: null,\n          metadata: undefined,\n          provider: \"mollie\",\n          providerPaymentId: input.paymentId,\n          providerRefundId: input.refundId,\n          raw: {\n            canceled: true,\n            paymentId: input.paymentId,\n            refundId: input.refundId,\n          },\n          status: \"canceled\",\n        };\n      }\n      throw error;\n    }\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingRefund>> {\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"refunds\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"refunds.list\",\n      request: {\n        from,\n        limit: input.limit,\n        profileId: this.selectedProfileId(context),\n      },\n      resource: \"refunds\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(raw, \"refunds\", this.pool.apiBaseUrl());\n    return {\n      items: page.items.map(projectMollieRefund),\n      nextCursor: page.nextCursor,\n    };\n  }\n}\n\nexport function createMollieBillingRefundsPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingRefundsPort {\n  return new MollieBillingRefundsPort(config, pool);\n}\n","import type {\n  BillingProviderCreateRefundInput,\n  BillingProviderGetRefundInput,\n} from \"../../types.ts\";\n\nexport function mapCreateRefundToMollieSdk(input: {\n  input: BillingProviderCreateRefundInput;\n  idempotencyKey: string;\n}): Record<string, unknown> {\n  const refundRequest: Record<string, unknown> = {\n    amount: input.input.amount,\n  };\n  if (input.input.description != null) {\n    refundRequest.description = input.input.description;\n  }\n  return {\n    idempotencyKey: input.idempotencyKey,\n    paymentId: input.input.paymentId,\n    refundRequest,\n  };\n}\n\nexport function mapGetRefundToMollieSdk(\n  input: BillingProviderGetRefundInput\n): Record<string, unknown> {\n  return {\n    paymentId: input.paymentId,\n    refundId: input.refundId,\n  };\n}\n\nexport function mapCancelRefundToMollieSdk(input: {\n  input: BillingProviderGetRefundInput;\n  idempotencyKey: string;\n}): Record<string, unknown> {\n  return {\n    idempotencyKey: input.idempotencyKey,\n    paymentId: input.input.paymentId,\n    refundId: input.input.refundId,\n  };\n}\n","import { AthenaBillingProviderRequestError } from \"../../../../../errors.ts\";\nimport { normalizeBillingMoney } from \"../../../../../safety/money.ts\";\nimport { billingRetryDisposition } from \"../../../../../safety/retry.ts\";\nimport type {\n  BillingMoney,\n  BillingRefund,\n  BillingRefundStatus,\n} from \"../../../../../types.ts\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction optionalString(value: unknown): string | null | undefined {\n  if (value == null) {\n    return value === undefined ? undefined : null;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n}\n\nfunction serializationRetry() {\n  return billingRetryDisposition({\n    idempotencyKeyPresent: false,\n    kind: \"serialization\",\n    operation: \"refunds.get\",\n    requestDispatchState: \"dispatched\",\n  });\n}\n\nfunction projectMoney(value: unknown): BillingMoney | undefined {\n  if (!isRecord(value)) {\n    return;\n  }\n  if (typeof value.currency !== \"string\" || typeof value.value !== \"string\") {\n    return;\n  }\n  try {\n    return normalizeBillingMoney(value);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"ATHENA_BILLING_MONEY_INVALID\";\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message,\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n}\n\nexport function projectMollieRefundStatus(status: string): BillingRefundStatus {\n  if (\n    status === \"queued\" ||\n    status === \"pending\" ||\n    status === \"processing\" ||\n    status === \"refunded\" ||\n    status === \"failed\" ||\n    status === \"canceled\"\n  ) {\n    return status;\n  }\n  throw new AthenaBillingProviderRequestError({\n    kind: \"serialization\",\n    message: `Mollie refund status \"${status}\" is not supported.`,\n    provider: \"mollie\",\n    retry: serializationRetry(),\n  });\n}\n\nexport function projectMollieRefund(raw: unknown): BillingRefund {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie refund response is missing a refund id.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  if (typeof raw.status !== \"string\") {\n    throw new AthenaBillingProviderRequestError({\n      kind: \"serialization\",\n      message: \"Mollie refund response is missing status.\",\n      provider: \"mollie\",\n      retry: serializationRetry(),\n    });\n  }\n  const status = projectMollieRefundStatus(raw.status);\n  return {\n    amount: projectMoney(raw.amount) ?? null,\n    description: optionalString(raw.description),\n    metadata: raw.metadata,\n    provider: \"mollie\",\n    providerPaymentId: optionalString(raw.paymentId),\n    providerRefundId: raw.id,\n    raw,\n    status,\n  };\n}\n","import type { NormalizedMollieBillingProviderConfig } from \"../../../../providers/types.ts\";\nimport type { BillingSubscription } from \"../../../../types.ts\";\nimport type { BillingPage } from \"../../../types.ts\";\nimport type {\n  BillingProviderCreateSubscriptionInput,\n  BillingProviderExecutionContext,\n  BillingProviderGetSubscriptionInput,\n  BillingProviderListSubscriptionsInput,\n  BillingProviderUpdateSubscriptionInput,\n  BillingSubscriptionsPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n  mapCreateSubscriptionToMollieSdk,\n  mapGetSubscriptionToMollieSdk,\n  mapUpdateSubscriptionToMollieSdk,\n} from \"./dialect/subscriptions.ts\";\nimport { trustedClassicWebhookUrl } from \"./dialect/webhook-url.ts\";\nimport {\n  rejectUnenforcedMollieProfileTarget,\n  resolveMollieRequestProfileId,\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\n  implements BillingSubscriptionsPort\n{\n  readonly kind = \"subscriptions\" as const;\n\n  constructor(\n    private readonly config: NormalizedMollieBillingProviderConfig,\n    private readonly pool: MollieSdkClientPool\n  ) {}\n\n  private profileId(\n    context: BillingProviderExecutionContext\n  ): string | undefined {\n    return resolveMollieRequestProfileId({\n      configuredProfileId:\n        this.config.profileId ?? this.config.defaultProfileId,\n      credentialKind: this.config.credentialKind,\n      requestedProfileId: context.target.profileId,\n    });\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreateSubscriptionInput\n  ): Promise<BillingSubscription> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"subscriptions.create\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"create\",\n      operation: \"subscriptions.create\",\n      request: mapCreateSubscriptionToMollieSdk({\n        idempotencyKey: context.idempotencyKey ?? input.idempotencyKey,\n        input,\n        webhookUrl: trustedClassicWebhookUrl(context),\n      }),\n      resource: \"subscriptions\",\n    });\n    return projectMollieSubscription(raw, input.customerId);\n  }\n\n  async get(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetSubscriptionInput\n  ): Promise<BillingSubscription> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"subscriptions.get\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"get\",\n      operation: \"subscriptions.get\",\n      request: mapGetSubscriptionToMollieSdk(input),\n      resource: \"subscriptions\",\n    });\n    return projectMollieSubscription(raw, input.customerId);\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListSubscriptionsInput\n  ): Promise<BillingPage<BillingSubscription>> {\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"subscriptions\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"subscriptions.list\",\n      request: {\n        customerId: input.customerId,\n        from,\n        limit: input.limit,\n        profileId: this.profileId(context),\n      },\n      resource: \"subscriptions\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(\n      raw,\n      \"subscriptions\",\n      this.pool.apiBaseUrl()\n    );\n    return {\n      items: page.items.map((item) =>\n        projectMollieSubscription(item, input.customerId)\n      ),\n      nextCursor: page.nextCursor,\n    };\n  }\n\n  async update(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderUpdateSubscriptionInput\n  ): Promise<BillingSubscription> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"subscriptions.update\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"update\",\n      operation: \"subscriptions.update\",\n      request: mapUpdateSubscriptionToMollieSdk(input),\n      resource: \"subscriptions\",\n    });\n    return projectMollieSubscription(raw, input.customerId);\n  }\n\n  async cancel(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderGetSubscriptionInput\n  ): Promise<BillingSubscription> {\n    rejectUnenforcedMollieProfileTarget({\n      operation: \"subscriptions.cancel\",\n      requestedProfileId: context.target.profileId,\n    });\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"cancel\",\n      operation: \"subscriptions.cancel\",\n      request: mapGetSubscriptionToMollieSdk(input),\n      resource: \"subscriptions\",\n    });\n    return projectMollieSubscription(raw, input.customerId);\n  }\n}\n\nexport function createMollieBillingSubscriptionsPort(\n  config: NormalizedMollieBillingProviderConfig,\n  pool: MollieSdkClientPool\n): BillingSubscriptionsPort {\n  return new MollieBillingSubscriptionsPort(config, pool);\n}\n","import type {\n  BillingProviderCreateSubscriptionInput,\n  BillingProviderGetSubscriptionInput,\n  BillingProviderUpdateSubscriptionInput,\n} from \"../../types.ts\";\n\nexport function mapCreateSubscriptionToMollieSdk(input: {\n  input: BillingProviderCreateSubscriptionInput;\n  idempotencyKey: string;\n  webhookUrl?: string;\n}): Record<string, unknown> {\n  const subscriptionRequest: Record<string, unknown> = {\n    amount: input.input.amount,\n    description: input.input.description,\n    interval: input.input.interval,\n  };\n  if (input.input.metadata != null) {\n    subscriptionRequest.metadata = input.input.metadata;\n  }\n  if (input.webhookUrl) {\n    subscriptionRequest.webhookUrl = input.webhookUrl;\n  }\n  return {\n    customerId: input.input.customerId,\n    idempotencyKey: input.idempotencyKey,\n    subscriptionRequest,\n  };\n}\n\nexport function mapGetSubscriptionToMollieSdk(\n  input: BillingProviderGetSubscriptionInput\n): Record<string, unknown> {\n  return {\n    customerId: input.customerId,\n    subscriptionId: input.subscriptionId,\n  };\n}\n\nexport function mapUpdateSubscriptionToMollieSdk(\n  input: BillingProviderUpdateSubscriptionInput\n): Record<string, unknown> {\n  const subscriptionRequest: Record<string, unknown> = {};\n  if (input.description != null) {\n    subscriptionRequest.description = input.description;\n  }\n  if (input.amount != null) {\n    subscriptionRequest.amount = input.amount;\n  }\n  if (input.interval != null) {\n    subscriptionRequest.interval = input.interval;\n  }\n  if (input.metadata != null) {\n    subscriptionRequest.metadata = input.metadata;\n  }\n  return {\n    customerId: input.customerId,\n    subscriptionId: input.subscriptionId,\n    subscriptionRequest,\n  };\n}\n","import type { BillingPage } from \"../../../types.ts\";\nimport type {\n  BillingProviderBinding,\n  BillingProviderCreateWebhookInput,\n  BillingProviderExecutionContext,\n  BillingProviderListInput,\n  BillingProviderUpdateWebhookInput,\n  BillingProviderWebhook,\n  BillingWebhookManagementCapability,\n  BillingWebhooksPort,\n} from \"../types.ts\";\nimport { decodeMollieListCursor } from \"./cursor.ts\";\nimport {\n  decodeMollieWebhookEventTypes,\n  mapCreateWebhookToMollieSdk,\n  mapUpdateWebhookToMollieSdk,\n  readMollieWebhookSigningSecret,\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  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction projectMollieWebhook(\n  raw: unknown,\n  environment: \"test\" | \"live\"\n): BillingProviderWebhook {\n  if (!isRecord(raw) || typeof raw.id !== \"string\") {\n    throw new Error(\"Mollie webhook projection requires an id.\");\n  }\n  const eventTypes = decodeMollieWebhookEventTypes(\n    raw.eventTypes ?? raw.event_types\n  );\n  const status =\n    raw.status === \"disabled\" || raw.enabled === false ? \"disabled\" : \"active\";\n  const signingSecret = readMollieWebhookSigningSecret(raw);\n  return {\n    environment,\n    eventTypes,\n    id: raw.id,\n    ...(typeof raw.name === \"string\" ? { name: raw.name } : {}),\n    provider: \"mollie\",\n    status,\n    url: typeof raw.url === \"string\" ? raw.url : \"\",\n    ...(signingSecret ? { signingSecret } : {}),\n  };\n}\n\nexport class MollieBillingWebhooksPort implements BillingWebhooksPort {\n  readonly kind = \"webhooks\" as const;\n\n  constructor(private readonly pool: MollieSdkClientPool) {}\n\n  async getCapability(\n    binding: BillingProviderBinding\n  ): Promise<BillingWebhookManagementCapability> {\n    return resolveMollieWebhookManagementCapability(binding);\n  }\n\n  async list(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderListInput\n  ): Promise<BillingPage<BillingProviderWebhook>> {\n    const capability = resolveMollieWebhookManagementCapability(\n      context.binding\n    );\n    if (capability.nextGen.list !== true) {\n      return { items: [], nextCursor: null };\n    }\n    const from =\n      input.cursor != null && input.cursor.length > 0\n        ? decodeMollieListCursor(input.cursor, \"webhooks\")\n        : undefined;\n    const raw = await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"list\",\n      operation: \"webhooks.list\",\n      request: {\n        from,\n        limit: input.limit,\n        testmode: context.environment.testMode,\n      },\n      resource: \"webhooks\",\n      unwrap: false,\n    });\n    const page = await readOneMollieSdkPage(\n      raw,\n      \"webhooks\",\n      this.pool.apiBaseUrl()\n    );\n    const environment = context.environment.testMode ? \"test\" : \"live\";\n    return {\n      items: page.items.map((item) => projectMollieWebhook(item, environment)),\n      nextCursor: page.nextCursor,\n    };\n  }\n\n  async create(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderCreateWebhookInput\n  ): Promise<BillingProviderWebhook> {\n    const mapped = mapCreateWebhookToMollieSdk({\n      input,\n      testMode: context.environment.testMode,\n    });\n    const requestBody = mapped.requestBody;\n    if (!isRecord(requestBody)) {\n      throw new Error(\"Mollie webhook create requires a JSON request body.\");\n    }\n    const raw = await sendMollieJson({\n      apiBaseUrl: this.pool.apiBaseUrl(),\n      body: requestBody,\n      credential: context.credential,\n      ...(typeof mapped.idempotencyKey === \"string\"\n        ? { idempotencyKey: mapped.idempotencyKey }\n        : {}),\n      method: \"POST\",\n      operation: \"webhooks.create\",\n      path: \"/v2/webhooks\",\n      signal: context.signal,\n    });\n    return projectMollieWebhook(\n      raw,\n      context.environment.testMode ? \"test\" : \"live\"\n    );\n  }\n\n  async update(\n    context: BillingProviderExecutionContext,\n    input: BillingProviderUpdateWebhookInput\n  ): Promise<BillingProviderWebhook> {\n    const mapped = mapUpdateWebhookToMollieSdk({\n      input,\n      testMode: context.environment.testMode,\n    });\n    const requestBody = mapped.requestBody;\n    const webhookId = mapped.webhookId;\n    if (!isRecord(requestBody) || typeof webhookId !== \"string\") {\n      throw new Error(\"Mollie webhook update requires an id and JSON body.\");\n    }\n    const raw = await sendMollieJson({\n      apiBaseUrl: this.pool.apiBaseUrl(),\n      body: requestBody,\n      credential: context.credential,\n      method: \"PATCH\",\n      operation: \"webhooks.update\",\n      path: `/v2/webhooks/${encodeURIComponent(webhookId)}`,\n      signal: context.signal,\n    });\n    return projectMollieWebhook(\n      raw,\n      context.environment.testMode ? \"test\" : \"live\"\n    );\n  }\n\n  async delete(\n    context: BillingProviderExecutionContext,\n    input: { id: string }\n  ): Promise<void> {\n    await callMollieSdk({\n      client: clientFromPool(this.pool, context),\n      method: \"delete\",\n      operation: \"webhooks.delete\",\n      request: {\n        requestBody: { testmode: context.environment.testMode },\n        webhookId: input.id,\n      },\n      resource: \"webhooks\",\n    });\n  }\n}\n\nexport function createMollieBillingWebhooksPort(\n  pool: MollieSdkClientPool\n): BillingWebhooksPort {\n  return new MollieBillingWebhooksPort(pool);\n}\n","import { billingWebhookUrlIsLoopback } from \"../../../../../ingestion/urls.ts\";\nimport type {\n  BillingProviderCreateWebhookInput,\n  BillingProviderUpdateWebhookInput,\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  eventTypes: readonly string[]\n): string {\n  const encoded = eventTypes\n    .map((entry) => entry.trim())\n    .filter((entry) => entry.length > 0)\n    .join(\",\");\n  if (encoded.length === 0) {\n    throw new Error(\"Mollie webhook create requires at least one event type.\");\n  }\n  return encoded;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Mollie returns `webhookSecret` only on create (and sometimes update). */\nexport function readMollieWebhookSigningSecret(\n  raw: unknown\n): string | undefined {\n  if (!isRecord(raw)) {\n    return;\n  }\n  const secret = raw.webhookSecret ?? raw.webhook_secret;\n  if (typeof secret !== \"string\") {\n    return;\n  }\n  const trimmed = secret.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function decodeMollieWebhookEventTypes(value: unknown): string[] {\n  if (typeof value === \"string\") {\n    return value\n      .split(\",\")\n      .map((entry) => entry.trim())\n      .filter((entry) => entry.length > 0);\n  }\n  if (Array.isArray(value)) {\n    return value.filter((entry): entry is string => typeof entry === \"string\");\n  }\n  return [];\n}\n\nfunction rejectLoopbackMollieWebhookUrl(\n  url: string | undefined,\n  operation: \"webhooks.create\" | \"webhooks.update\"\n): void {\n  if (url == null || url.trim().length === 0) {\n    return;\n  }\n  if (!billingWebhookUrlIsLoopback(url)) {\n    return;\n  }\n  throw createMollieProviderRequestError({\n    fallbackMessage:\n      \"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    kind: \"invalid_request\",\n    operation,\n    requestDispatchState: \"not_dispatched\",\n    status: 422,\n  });\n}\n\nexport function mapCreateWebhookToMollieSdk(input: {\n  input: BillingProviderCreateWebhookInput;\n  testMode: boolean;\n}): Record<string, unknown> {\n  const name = input.input.name.trim();\n  if (name.length === 0 || name.length > MOLLIE_WEBHOOK_NAME_MAX) {\n    throw new Error(\n      `Mollie webhook name must be 1–${MOLLIE_WEBHOOK_NAME_MAX} characters.`\n    );\n  }\n  rejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.create\");\n  return {\n    idempotencyKey: input.input.idempotencyKey,\n    requestBody: {\n      eventTypes: encodeMollieWebhookEventTypes(input.input.eventTypes),\n      name,\n      testmode: input.testMode,\n      url: input.input.url,\n    },\n  };\n}\n\nexport function mapUpdateWebhookToMollieSdk(input: {\n  input: BillingProviderUpdateWebhookInput;\n  testMode: boolean;\n}): Record<string, unknown> {\n  const requestBody: Record<string, unknown> = {\n    testmode: input.testMode,\n  };\n  if (input.input.eventTypes) {\n    requestBody.eventTypes = encodeMollieWebhookEventTypes(\n      input.input.eventTypes\n    );\n  }\n  if (input.input.name) {\n    requestBody.name = input.input.name;\n  }\n  if (input.input.url) {\n    rejectLoopbackMollieWebhookUrl(input.input.url, \"webhooks.update\");\n    requestBody.url = input.input.url;\n  }\n  return {\n    requestBody,\n    webhookId: input.input.id,\n  };\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  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport async function sendMollieJson(input: {\n  apiBaseUrl: string;\n  body: Record<string, unknown>;\n  credential: BillingResolvedCredential;\n  idempotencyKey?: string;\n  method: \"PATCH\" | \"POST\";\n  operation: string;\n  path: string;\n  signal?: AbortSignal;\n}): Promise<unknown> {\n  const url = `${input.apiBaseUrl.replace(/\\/$/, \"\")}${input.path}`;\n  const headers: Record<string, string> = {\n    Accept: \"application/hal+json\",\n    Authorization: `Bearer ${input.credential.revealForProviderRuntime()}`,\n    \"Content-Type\": \"application/json\",\n  };\n  if (input.idempotencyKey != null && input.idempotencyKey.trim() !== \"\") {\n    headers[\"idempotency-key\"] = input.idempotencyKey;\n  }\n  return invokeMollieSdk({\n    idempotencyKeyPresent:\n      input.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n    invoke: async () => {\n      const response = await fetch(url, {\n        body: JSON.stringify(input.body),\n        headers,\n        method: input.method,\n        signal: input.signal,\n      });\n      const text = await response.text();\n      let parsed: unknown;\n      try {\n        parsed = text.length === 0 ? {} : JSON.parse(text);\n      } catch {\n        parsed = { detail: text };\n      }\n      if (!response.ok) {\n        throw createMollieProviderRequestError({\n          body: parsed,\n          fallbackMessage: `Mollie ${input.operation} failed.`,\n          idempotencyKeyPresent:\n            input.idempotencyKey != null && input.idempotencyKey.trim() !== \"\",\n          operation: input.operation,\n          requestDispatchState: \"dispatched\",\n          status: response.status,\n        });\n      }\n      if (!(isRecord(parsed) || Array.isArray(parsed))) {\n        throw createMollieProviderRequestError({\n          fallbackMessage: `Mollie ${input.operation} returned a non-object body.`,\n          kind: \"serialization\",\n          operation: input.operation,\n          requestDispatchState: \"dispatched\",\n          status: response.status,\n        });\n      }\n      return parsed;\n    },\n    operation: input.operation,\n  });\n}\n","import type {\n  NormalizedStripeBillingProviderConfig,\n  StripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type { BillingProviderDefinition } from \"../definition.ts\";\nimport { createStripeBillingProviderRuntime } from \"./runtime.ts\";\nimport { normalizeStripeBillingProviderConfig } from \"./config.ts\";\n\nexport function createStripeProviderDefinition(): BillingProviderDefinition<\n  NormalizedStripeBillingProviderConfig\n> {\n  return {\n    configuration: {\n      credentialKind: (config) => config.credentialKind,\n      normalize: (config) =>\n        normalizeStripeBillingProviderConfig(\n          config as StripeBillingProviderConfig\n        ),\n    },\n    provider: \"stripe\",\n    runtime: {\n      create: (config) => createStripeBillingProviderRuntime(config),\n    },\n  };\n}\n","import type {\n  NormalizedStripeBillingProviderConfig,\n  StripeBillingProviderConfig,\n} from \"../../../../providers/types.ts\";\nimport type {\n  BillingProviderBinding,\n  BillingProviderCapabilities,\n  StripeBillingProviderRuntime,\n} from \"../types.ts\";\nimport { STRIPE_BILLING_PROVIDER_CAPABILITIES } from \"./capabilities.ts\";\nimport { normalizeStripeRuntimeConfig } from \"./config.ts\";\n\nexport class StripeBillingProviderRuntimeImpl\n  implements StripeBillingProviderRuntime\n{\n  readonly provider = \"stripe\" as const;\n  readonly payments = undefined;\n  readonly customers = undefined;\n  readonly refunds = undefined;\n  readonly paymentLinks = undefined;\n  readonly subscriptions = undefined;\n  readonly invoices = undefined;\n  readonly webhooks = undefined;\n\n  constructor(readonly config: NormalizedStripeBillingProviderConfig) {}\n\n  async getCapabilities(\n    _binding: BillingProviderBinding\n  ): Promise<BillingProviderCapabilities> {\n    return STRIPE_BILLING_PROVIDER_CAPABILITIES;\n  }\n}\n\nexport function createStripeBillingProviderRuntime(\n  config: StripeBillingProviderConfig | NormalizedStripeBillingProviderConfig\n): StripeBillingProviderRuntime {\n  return new StripeBillingProviderRuntimeImpl(\n    normalizeStripeRuntimeConfig(config)\n  );\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  {\n    operations: {\n      \"checkout.create\": false,\n      \"customers.create\": false,\n      \"customers.delete\": false,\n      \"customers.get\": false,\n      \"customers.list\": false,\n      \"customers.update\": false,\n      \"invoices.get\": false,\n      \"invoices.list\": false,\n      \"paymentLinks.create\": false,\n      \"paymentLinks.delete\": false,\n      \"paymentLinks.get\": false,\n      \"paymentLinks.list\": false,\n      \"paymentLinks.update\": false,\n      \"payments.cancel\": false,\n      \"payments.create\": false,\n      \"payments.get\": false,\n      \"payments.list\": false,\n      \"prices.list\": false,\n      \"products.list\": false,\n      \"relations.list\": false,\n      \"refunds.cancel\": false,\n      \"refunds.create\": false,\n      \"refunds.get\": false,\n      \"refunds.list\": false,\n      \"subscriptions.cancel\": false,\n      \"subscriptions.create\": false,\n      \"subscriptions.get\": false,\n      \"subscriptions.list\": false,\n      \"subscriptions.update\": false,\n      \"webhooks.create\": false,\n      \"webhooks.delete\": false,\n      \"webhooks.get\": false,\n      \"webhooks.list\": false,\n      \"webhooks.test\": false,\n      \"webhooks.update\": false,\n    },\n    ports: {\n      checkout: false,\n      customers: false,\n      invoices: false,\n      paymentLinks: false,\n      payments: false,\n      prices: false,\n      products: false,\n      relations: false,\n      refunds: false,\n      subscriptions: false,\n      webhooks: false,\n    },\n  };\n","import {\n  ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n  AthenaBillingProviderError,\n} from \"../../../errors.ts\";\nimport type { BillingProviderName } from \"../../../types.ts\";\nimport type { BillingProviderDefinition } from \"./definition.ts\";\n\nexport class BillingProviderDefinitionRegistry {\n  private readonly definitions = new Map<\n    BillingProviderName,\n    BillingProviderDefinition\n  >();\n\n  constructor(definitions: readonly BillingProviderDefinition[] = []) {\n    for (const definition of definitions) {\n      this.register(definition);\n    }\n  }\n\n  get(provider: BillingProviderName): BillingProviderDefinition | undefined {\n    return this.definitions.get(provider.trim().toLowerCase());\n  }\n\n  has(provider: BillingProviderName): boolean {\n    return this.get(provider) != null;\n  }\n\n  list(): readonly BillingProviderDefinition[] {\n    return Object.freeze([...this.definitions.values()]);\n  }\n\n  register(definition: BillingProviderDefinition): void {\n    const provider = definition.provider.trim().toLowerCase();\n    if (this.definitions.has(provider)) {\n      throw new Error(`Billing provider definition \"${provider}\" is already registered.`);\n    }\n    this.definitions.set(provider, definition);\n  }\n\n  require(provider: BillingProviderName): BillingProviderDefinition {\n    const definition = this.get(provider);\n    if (definition == null) {\n      throw new AthenaBillingProviderError({\n        code: ATHENA_BILLING_PROVIDER_NOT_REGISTERED,\n        message: `Billing provider definition \"${provider}\" is not registered.`,\n      });\n    }\n    return definition;\n  }\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport {\n  type CommandsListFormat,\n  formatCatalogTopicUsage,\n  formatCommandsCatalog,\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  \"--commands\",\n  \"--list-commands\",\n  \"--cmds\",\n  \"-C\",\n  \"commands\",\n  \"list-commands\",\n  \"cmds\",\n];\n\nfunction parseCommandsFormat(rest: string[]): CommandsListFormat {\n  let format: CommandsListFormat = \"full\";\n  for (const token of rest) {\n    if (token === \"--help\" || token === \"-h\") {\n      continue;\n    }\n    if (token === \"--json\") {\n      format = \"json\";\n      continue;\n    }\n    if (token === \"--plain\") {\n      format = \"plain\";\n      continue;\n    }\n    if (token === \"--groups\") {\n      format = \"groups\";\n      continue;\n    }\n    throw unknownOptionError(token, \"commands\");\n  }\n  return format;\n}\n\nexport function parse(rest: string[]): CliCommand {\n  if (rest.includes(\"--help\") || rest.includes(\"-h\")) {\n    return { command: \"help\", topic: \"commands\" };\n  }\n  return {\n    command: \"commands\",\n    format: parseCommandsFormat(rest),\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"commands\");\n}\n\nexport function sessionTitle(_parsed: CommandsCommand): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: CommandsCommand\n): Promise<void> {\n  ctx.logRaw(\n    formatCommandsCatalog({\n      capabilities: ctx.capabilities,\n      format: parsed.format,\n    })\n  );\n}\n","import { resolve } from \"node:path\";\nimport { findGeneratorConfigPath } from \"../../../generator/config.ts\";\nimport {\n  LocalPostgresRuntime,\n  type LocalPostgresRuntimeOptions,\n} from \"../../../local/runtime.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { createCliUi } from \"../../ui/index.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { loadStaticCliProject } from \"../../project/load-project.ts\";\nimport type { CliCommand, DbCommand } from \"../../types.ts\";\n\nexport const names: readonly string[] = [\"db\"];\n\nexport function parse(rest: string[]): CliCommand {\n  const action = rest[0];\n  if (action === undefined || action === \"--help\" || action === \"-h\") {\n    return { command: \"help\", topic: \"db\" };\n  }\n  if (\n    ![\"start\", \"stop\", \"status\", \"restart\", \"reset\", \"logs\"].includes(action)\n  ) {\n    throw new Error(`Unknown db action \"${action}\".`);\n  }\n  let configPath: string | undefined;\n  let force = false;\n  let json = false;\n  let writeEnv = false;\n  let yes = false;\n  for (let index = 1; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--config\") {\n      const value = rest[index + 1];\n      if (!value || value.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = value;\n      index += 1;\n    } else if (token === \"--force\") {\n      force = true;\n    } else if (token === \"--json\") {\n      json = true;\n    } else if (token === \"--write-env\") {\n      writeEnv = true;\n    } else if (token === \"--yes\") {\n      yes = true;\n    } else {\n      throw unknownOptionError(token, \"db\");\n    }\n  }\n  return {\n    action: action as DbCommand[\"action\"],\n    command: \"db\",\n    configPath,\n    force,\n    json,\n    writeEnv,\n    yes,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"db\");\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: DbCommand\n): Promise<void> {\n  if (parsed.action === \"reset\" && !parsed.yes) {\n    throw new Error(\"db reset is destructive; pass --yes to continue.\");\n  }\n  const projectRoot = ctx.runtime.cwd ?? ctx.cwd;\n  const needsConfig =\n    parsed.action === \"start\" ||\n    parsed.action === \"restart\" ||\n    parsed.action === \"status\";\n  const loaded = needsConfig\n    ? await loadStaticCliProject({\n        configPath: parsed.configPath,\n        cwd: projectRoot,\n      })\n    : undefined;\n  const cleanupConfigPath = parsed.configPath\n    ? resolve(projectRoot, parsed.configPath)\n    : (findGeneratorConfigPath(projectRoot) ??\n      resolve(projectRoot, \"athena.config.ts\"));\n  const createLocalRuntime =\n    ctx.runtime.createLocalRuntime ??\n    ((options: LocalPostgresRuntimeOptions) => new LocalPostgresRuntime(options));\n  const runtime = createLocalRuntime({\n    config: loaded?.athena.config.local,\n    configPath: loaded?.athena.configPath ?? cleanupConfigPath,\n    ...(loaded\n      ? {\n          migrate: async (databaseUrl: string) => {\n            const migrateRunner =\n              ctx.runtime.runMigrations ??\n              (await import(\"../../../migrations/runner.ts\")).runMigrations;\n            await migrateRunner({\n              config: loaded.athena.config,\n              configPath: loaded.athena.configPath,\n              cwd: loaded.cwd,\n              databaseUrl,\n              mode: \"apply\",\n              ...(parsed.json\n                ? {\n                    json: false,\n                    log: () => {},\n                    ui: createCliUi({ plain: true, write: () => {} }),\n                  }\n                : {}),\n            });\n          },\n        }\n      : {}),\n    projectRoot,\n  });\n  if (parsed.action === \"start\") {\n    const state = await runtime.start({\n      forceEnv: parsed.force,\n      writeEnv: parsed.writeEnv,\n    });\n    ctx.log(\n      parsed.json\n        ? JSON.stringify({\n            database: state.database,\n            port: state.port,\n            status: \"healthy\",\n          })\n        : `Local PostgreSQL is healthy on ${state.port}.`\n    );\n    return;\n  }\n  if (parsed.action === \"stop\") {\n    await runtime.stop();\n    ctx.log(\n      parsed.json\n        ? JSON.stringify({ status: \"stopped\" })\n        : \"Local PostgreSQL stopped.\"\n    );\n    return;\n  }\n  if (parsed.action === \"restart\") {\n    const state = await runtime.restart({\n      forceEnv: parsed.force,\n      writeEnv: parsed.writeEnv,\n    });\n    ctx.log(\n      parsed.json\n        ? JSON.stringify({\n            database: state.database,\n            port: state.port,\n            status: \"healthy\",\n          })\n        : `Local PostgreSQL is healthy on ${state.port}.`\n    );\n    return;\n  }\n  if (parsed.action === \"reset\") {\n    await runtime.reset();\n    ctx.log(\n      parsed.json\n        ? JSON.stringify({ status: \"reset\" })\n        : \"Local PostgreSQL reset.\"\n    );\n    return;\n  }\n  if (parsed.action === \"logs\") {\n    ctx.log(formatDbLogsOutput(await runtime.logs(), parsed.json));\n    return;\n  }\n  const report = await runtime.status();\n  ctx.log(\n    parsed.json\n      ? JSON.stringify(report)\n      : `${report.status}${report.reason ? `: ${report.reason}` : \"\"}`\n  );\n}\n\nexport function formatDbLogsOutput(logs: string, json: boolean): string {\n  return json ? JSON.stringify({ logs }) : logs;\n}\n","import { randomBytes } from \"node:crypto\";\nimport { mkdirSync } from \"node:fs\";\nimport type { AthenaLocalRuntimeConfig } from \"../generator/types.ts\";\nimport { normalizeLocalRuntimeConfig } from \"./config.ts\";\nimport {\n  assertOwnedDockerLabels,\n  buildDockerLogsArgs,\n  buildDockerRunArgs,\n  buildDockerVolumeCreateArgs,\n  createDockerProcess,\n  type DockerInspect,\n  type DockerProcess,\n  type DockerVolumeInspect,\n} from \"./docker.ts\";\nimport {\n  buildLocalDatabaseUrl,\n  resolveProjectEnvDatabaseUrlTarget,\n  updateEnvDatabaseUrl,\n} from \"./env.ts\";\nimport {\n  createLocalProjectIdentity,\n  type LocalProjectIdentity,\n  localContainerName,\n  localRuntimeDirectory,\n  localVolumeName,\n} from \"./identity.ts\";\nimport { withLocalRuntimeLock } from \"./lock.ts\";\nimport { waitForPostgres } from \"./readiness.ts\";\nimport {\n  deleteLocalRuntimeState,\n  type LocalRuntimeDiagnostics,\n  type LocalRuntimeState,\n  readLocalRuntimeState,\n  redactLocalRuntimeState,\n  writeLocalRuntimeState,\n} from \"./state.ts\";\n\nexport type LocalRuntimeStatus =\n  | \"not-created\"\n  | \"stopped\"\n  | \"starting\"\n  | \"healthy\"\n  | \"unhealthy\"\n  | \"orphaned\"\n  | \"state-drift\";\n\nexport interface LocalRuntimeStatusReport {\n  diagnostics?: LocalRuntimeDiagnostics;\n  reason?: string;\n  status: LocalRuntimeStatus;\n}\n\nexport interface LocalPostgresRuntimeOptions {\n  config?: AthenaLocalRuntimeConfig;\n  configPath: string;\n  docker?: DockerProcess;\n  migrate?: (connectionString: string) => Promise<void>;\n  now?: () => Date;\n  projectRoot: string;\n  readiness?: typeof waitForPostgres;\n}\n\nexport class LocalPostgresRuntime {\n  readonly identity: LocalProjectIdentity;\n  private readonly config: ReturnType<typeof normalizeLocalRuntimeConfig>;\n  private readonly docker: DockerProcess;\n  private readonly now: () => Date;\n  private readonly readiness: typeof waitForPostgres;\n  private readonly projectRoot: string;\n  private readonly migrate?: (connectionString: string) => Promise<void>;\n\n  constructor(options: LocalPostgresRuntimeOptions) {\n    this.projectRoot = options.projectRoot;\n    this.identity = createLocalProjectIdentity(\n      options.projectRoot,\n      options.configPath\n    );\n    this.config = normalizeLocalRuntimeConfig(options.config);\n    this.docker = options.docker ?? createDockerProcess();\n    this.now = options.now ?? (() => new Date());\n    this.readiness = options.readiness ?? waitForPostgres;\n    this.migrate = options.migrate;\n    mkdirSync(localRuntimeDirectory(options.projectRoot), { recursive: true });\n  }\n\n  async start(\n    options: { envPath?: string; forceEnv?: boolean; writeEnv?: boolean } = {}\n  ): Promise<LocalRuntimeState> {\n    return await withLocalRuntimeLock(this.projectRoot, () =>\n      this.startUnlocked(options)\n    );\n  }\n\n  async restart(\n    options: { envPath?: string; forceEnv?: boolean; writeEnv?: boolean } = {}\n  ): Promise<LocalRuntimeState> {\n    return await withLocalRuntimeLock(this.projectRoot, async () => {\n      await this.stopUnlocked();\n      return await this.startUnlocked(options);\n    });\n  }\n\n  private async startUnlocked(\n    options: { envPath?: string; forceEnv?: boolean; writeEnv?: boolean } = {}\n  ): Promise<LocalRuntimeState> {\n    let state = readLocalRuntimeState(this.projectRoot);\n    let containerCreated = false;\n    let volumeCreated = false;\n    let stateCreated = false;\n    try {\n      if (state && state.identity !== this.identity.id) {\n        throw new Error(\n          \"Local runtime state belongs to a different project identity.\"\n        );\n      }\n      if (state && this.stateDriftsFromConfig(state)) {\n        throw new Error(\n          \"Local runtime state does not match the current local runtime configuration.\"\n        );\n      }\n      if (state) {\n        const inspect = await this.inspect(state.containerName);\n        if (inspect) {\n          assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n          this.assertContainerMatchesState(state, inspect);\n          const volume = await this.inspectVolume(state.volumeName);\n          if (!volume) {\n            throw new Error(\n              `Persisted state references a missing volume ${state.volumeName}.`\n            );\n          }\n          assertOwnedDockerLabels(volume.labels, this.identity.id);\n        }\n        if (!inspect) {\n          volumeCreated = await this.ensureVolume(state.volumeName);\n          containerCreated = true;\n          await this.runContainer(state);\n        } else if (!inspect.running) {\n          await this.startContainer(state.containerName);\n        }\n      } else {\n        const containerName = localContainerName(this.identity);\n        const inspect = await this.inspect(containerName);\n        if (inspect) {\n          assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n          state = await this.recoverState(inspect);\n          if (!state) {\n            throw new Error(\n              `Cannot recover credentials for local PostgreSQL container ${containerName}.`\n            );\n          }\n          if (this.stateDriftsFromConfig(state)) {\n            throw new Error(\n              \"Recovered local runtime does not match the current local runtime configuration.\"\n            );\n          }\n          if (!inspect.running) {\n            await this.startContainer(state.containerName);\n          }\n          writeLocalRuntimeState(this.projectRoot, state);\n        } else {\n          state = this.createState();\n          volumeCreated = await this.ensureVolume(state.volumeName);\n          if (!volumeCreated) {\n            throw new Error(\n              \"Local PostgreSQL runtime state is missing while its owned volume still exists; run db reset before starting again.\"\n            );\n          }\n          containerCreated = true;\n          await this.runContainer(state);\n          writeLocalRuntimeState(this.projectRoot, state);\n          stateCreated = true;\n        }\n      }\n\n      if (!state) {\n        throw new Error(\n          \"Local PostgreSQL runtime state could not be established.\"\n        );\n      }\n      const url = buildLocalDatabaseUrl({\n        database: state.database,\n        host: this.config.host,\n        password: state.password,\n        port: state.port,\n        user: state.user,\n      });\n      await this.readiness({\n        connectionString: url,\n        timeoutMs: this.config.startupTimeoutMs,\n      });\n      if (this.migrate) {\n        await this.migrate(url);\n      }\n      if (options.writeEnv) {\n        const target = resolveProjectEnvDatabaseUrlTarget(this.projectRoot);\n        updateEnvDatabaseUrl(\n          options.envPath ?? target.path,\n          url,\n          {\n            envKey: target.envKey,\n            force: options.forceEnv,\n            managedDatabaseUrl: url,\n          }\n        );\n      }\n      return state;\n    } catch (error) {\n      if (state && (containerCreated || volumeCreated || stateCreated)) {\n        await this.rollbackCreatedResources(state, {\n          containerCreated,\n          stateCreated,\n          volumeCreated,\n        });\n      }\n      throw error;\n    }\n  }\n\n  async stop(): Promise<void> {\n    await withLocalRuntimeLock(this.projectRoot, () => this.stopUnlocked());\n  }\n\n  private async stopUnlocked(): Promise<void> {\n    const state = readLocalRuntimeState(this.projectRoot);\n    const containerName =\n      state?.containerName ?? localContainerName(this.identity);\n    const inspect = await this.inspect(containerName);\n    if (!inspect) {\n      return;\n    }\n    assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n    if (inspect.running) {\n      const result = await this.docker.run([\"stop\", containerName]);\n      if (result.code !== 0) {\n        throw new Error(result.stderr || `Failed to stop ${containerName}.`);\n      }\n    }\n  }\n\n  async reset(): Promise<void> {\n    await withLocalRuntimeLock(this.projectRoot, () => this.resetUnlocked());\n  }\n\n  private async resetUnlocked(): Promise<void> {\n    const state = readLocalRuntimeState(this.projectRoot);\n    if (!state) {\n      const containerName = localContainerName(this.identity);\n      const volumeName = localVolumeName(this.identity);\n      const inspect = await this.inspect(containerName);\n      if (inspect) {\n        assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n        await this.removeContainer(containerName);\n      }\n      const volumeLabels = await this.inspectVolume(volumeName);\n      if (volumeLabels) {\n        assertOwnedDockerLabels(volumeLabels.labels, this.identity.id);\n        await this.removeVolume(volumeName);\n      }\n      return;\n    }\n    const inspect = await this.inspect(state.containerName);\n    if (inspect) {\n      assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n      await this.removeContainer(state.containerName);\n    }\n    const volumeInspect = await this.inspectVolume(state.volumeName);\n    if (volumeInspect) {\n      assertOwnedDockerLabels(volumeInspect.labels, this.identity.id);\n    }\n    await this.removeVolume(state.volumeName);\n    deleteLocalRuntimeState(this.projectRoot);\n  }\n\n  async status(): Promise<LocalRuntimeStatusReport> {\n    return await withLocalRuntimeLock(this.projectRoot, () =>\n      this.statusUnlocked()\n    );\n  }\n\n  private async statusUnlocked(): Promise<LocalRuntimeStatusReport> {\n    let state = readLocalRuntimeState(this.projectRoot);\n    if (!state) {\n      const containerName = localContainerName(this.identity);\n      const inspect = await this.inspect(containerName);\n      if (!inspect) {\n        return { status: \"not-created\" };\n      }\n      try {\n        assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n        state = await this.recoverState(inspect);\n        if (!state) {\n          return {\n            reason:\n              \"Owned container metadata is insufficient to recover runtime state.\",\n            status: \"orphaned\",\n          };\n        }\n        writeLocalRuntimeState(this.projectRoot, state);\n      } catch (error) {\n        if (error instanceof DockerInspectFailure) {\n          throw error;\n        }\n        return {\n          reason: error instanceof Error ? error.message : String(error),\n          status: \"orphaned\",\n        };\n      }\n    }\n    if (state.identity !== this.identity.id) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: \"Persisted state identity does not match the current project.\",\n        status: \"state-drift\",\n      };\n    }\n    if (this.stateDriftsFromConfig(state)) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: \"Persisted runtime settings do not match athena.config.ts.\",\n        status: \"state-drift\",\n      };\n    }\n    const inspect = await this.inspect(state.containerName);\n    if (!inspect) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: \"Persisted state references a missing container.\",\n        status: \"orphaned\",\n      };\n    }\n    try {\n      assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n    } catch (error) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: error instanceof Error ? error.message : String(error),\n        status: \"orphaned\",\n      };\n    }\n    try {\n      this.assertContainerMatchesState(state, inspect);\n    } catch (error) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: error instanceof Error ? error.message : String(error),\n        status: \"state-drift\",\n      };\n    }\n    let volumeLabels: DockerVolumeInspect | undefined;\n    try {\n      volumeLabels = await this.inspectVolume(state.volumeName);\n    } catch (error) {\n      if (error instanceof DockerInspectFailure) {\n        throw error;\n      }\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: error instanceof Error ? error.message : String(error),\n        status: \"orphaned\",\n      };\n    }\n    if (!volumeLabels) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: \"Persisted state references a missing volume.\",\n        status: \"orphaned\",\n      };\n    }\n    try {\n      assertOwnedDockerLabels(volumeLabels.labels, this.identity.id);\n    } catch (error) {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        reason: error instanceof Error ? error.message : String(error),\n        status: \"orphaned\",\n      };\n    }\n    if (!inspect.running) {\n      return { diagnostics: redactLocalRuntimeState(state), status: \"stopped\" };\n    }\n    try {\n      await this.readiness({\n        connectionString: buildLocalDatabaseUrl({\n          database: state.database,\n          host: this.config.host,\n          password: state.password,\n          port: state.port,\n          user: state.user,\n        }),\n        timeoutMs: 1000,\n      });\n      return { diagnostics: redactLocalRuntimeState(state), status: \"healthy\" };\n    } catch {\n      return {\n        diagnostics: redactLocalRuntimeState(state),\n        status: \"unhealthy\",\n      };\n    }\n  }\n\n  async logs(): Promise<string> {\n    const state = readLocalRuntimeState(this.projectRoot);\n    const containerName =\n      state?.containerName ?? localContainerName(this.identity);\n    const inspect = await this.inspect(containerName);\n    if (!inspect) {\n      throw new Error(\n        `Local PostgreSQL container ${containerName} was not found.`\n      );\n    }\n    assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n    const result = await this.docker.run(buildDockerLogsArgs(containerName));\n    if (result.code !== 0) {\n      throw new Error(result.stderr || \"Failed to read local PostgreSQL logs.\");\n    }\n    if (!result.stderr) {\n      return result.stdout;\n    }\n    if (!result.stdout) {\n      return result.stderr;\n    }\n    return result.stdout.endsWith(\"\\n\")\n      ? `${result.stdout}${result.stderr}`\n      : `${result.stdout}\\n${result.stderr}`;\n  }\n\n  private createState(): LocalRuntimeState {\n    const containerName = localContainerName(this.identity);\n    return {\n      containerName,\n      createdAt: this.now().toISOString(),\n      database: this.config.database,\n      identity: this.identity.id,\n      image: this.config.image,\n      password: randomBytes(24).toString(\"base64url\"),\n      port: this.config.port,\n      user: this.config.user,\n      volumeName: localVolumeName(this.identity),\n    };\n  }\n\n  private stateDriftsFromConfig(state: LocalRuntimeState): boolean {\n    return (\n      state.database !== this.config.database ||\n      state.image !== this.config.image ||\n      state.port !== this.config.port ||\n      state.user !== this.config.user\n    );\n  }\n\n  private assertContainerMatchesState(\n    state: LocalRuntimeState,\n    inspect: DockerInspect\n  ): void {\n    const values = new Map<string, string>();\n    for (const entry of inspect.env ?? []) {\n      const separator = entry.indexOf(\"=\");\n      if (separator > 0) {\n        values.set(entry.slice(0, separator), entry.slice(separator + 1));\n      }\n    }\n    const drift =\n      inspect.image !== state.image\n        ? \"image\"\n        : inspect.host !== this.config.host\n          ? \"host binding\"\n          : inspect.port !== state.port\n            ? \"port binding\"\n            : inspect.volumeName !== state.volumeName\n              ? \"volume\"\n              : values.get(\"POSTGRES_DB\") !== state.database\n                ? \"POSTGRES_DB\"\n                : values.get(\"POSTGRES_USER\") !== state.user\n                  ? \"POSTGRES_USER\"\n                  : values.get(\"POSTGRES_PASSWORD\") !== state.password\n                    ? \"POSTGRES_PASSWORD\"\n                    : undefined;\n    if (drift) {\n      throw new Error(\n        `Inspected local PostgreSQL container metadata does not match persisted state (${drift} drift).`\n      );\n    }\n  }\n\n  private async ensureVolume(volumeName: string): Promise<boolean> {\n    const existing = await this.inspectVolume(volumeName);\n    if (existing) {\n      assertOwnedDockerLabels(existing.labels, this.identity.id);\n      return false;\n    }\n    const result = await this.docker.run(\n      buildDockerVolumeCreateArgs(volumeName, {\n        \"athena.client\": this.identity.slug,\n        \"athena.managed\": \"true\",\n        \"athena.project\": this.identity.id,\n        \"athena.project.slug\": this.identity.slug,\n        \"athena.service\": \"postgres\",\n      })\n    );\n    if (result.code !== 0) {\n      throw new Error(result.stderr || `Failed to create ${volumeName}.`);\n    }\n    const created = await this.inspectVolume(volumeName);\n    if (created) {\n      assertOwnedDockerLabels(created.labels, this.identity.id);\n    }\n    return true;\n  }\n\n  private async inspectVolume(\n    volumeName: string\n  ): Promise<DockerVolumeInspect | undefined> {\n    const result = await this.docker.run([\"volume\", \"inspect\", volumeName]);\n    if (result.code !== 0) {\n      if (isDockerNotFoundResult(\"volume\", result.stderr, result.stdout)) {\n        return undefined;\n      }\n      throw new DockerInspectFailure(\n        result.stderr || `Failed to inspect Docker volume ${volumeName}.`\n      );\n    }\n    const parsed: unknown = JSON.parse(result.stdout);\n    if (\n      !(Array.isArray(parsed) && parsed[0]) ||\n      typeof parsed[0] !== \"object\"\n    ) {\n      throw new Error(`Docker returned invalid volume data for ${volumeName}.`);\n    }\n    const labels = (parsed[0] as { Labels?: unknown }).Labels;\n    if (!labels || typeof labels !== \"object\" || Array.isArray(labels)) {\n      throw new Error(\n        `Volume ${volumeName} is missing Athena ownership labels.`\n      );\n    }\n    const name = (parsed[0] as { Name?: unknown }).Name;\n    return {\n      labels: labels as Record<string, string | undefined>,\n      name: typeof name === \"string\" && name ? name : volumeName,\n    };\n  }\n\n  private async runContainer(state: LocalRuntimeState): Promise<void> {\n    const labels = {\n      \"athena.client\": this.identity.slug,\n      \"athena.managed\": \"true\",\n      \"athena.project\": this.identity.id,\n      \"athena.project.slug\": this.identity.slug,\n      \"athena.service\": \"postgres\",\n    };\n    const result = await this.docker.run(\n      buildDockerRunArgs({\n        containerName: state.containerName,\n        database: state.database,\n        image: state.image,\n        labels,\n        password: state.password,\n        port: state.port,\n        user: state.user,\n        volumeName: state.volumeName,\n      })\n    );\n    if (result.code !== 0) {\n      throw new Error(\n        result.stderr || `Failed to start ${state.containerName}.`\n      );\n    }\n  }\n\n  private async recoverState(\n    inspect: DockerInspect\n  ): Promise<LocalRuntimeState | undefined> {\n    const values = new Map<string, string>();\n    for (const entry of inspect.env ?? []) {\n      const separator = entry.indexOf(\"=\");\n      if (separator > 0) {\n        values.set(entry.slice(0, separator), entry.slice(separator + 1));\n      }\n    }\n    const password = values.get(\"POSTGRES_PASSWORD\");\n    if (\n      !(password && inspect.image) ||\n      inspect.port === undefined ||\n      !inspect.volumeName\n    ) {\n      return undefined;\n    }\n    if (inspect.host === undefined || inspect.host !== this.config.host) {\n      throw new Error(\n        \"Recovered local runtime host does not match the current local runtime configuration.\"\n      );\n    }\n    const volume = await this.inspectVolume(inspect.volumeName);\n    if (!volume) {\n      return undefined;\n    }\n    assertOwnedDockerLabels(volume.labels, this.identity.id);\n    return {\n      containerName: localContainerName(this.identity),\n      createdAt: this.now().toISOString(),\n      database: values.get(\"POSTGRES_DB\") ?? this.config.database,\n      identity: this.identity.id,\n      image: inspect.image,\n      password,\n      port: inspect.port,\n      user: values.get(\"POSTGRES_USER\") ?? this.config.user,\n      volumeName: volume.name,\n    };\n  }\n\n  private async startContainer(containerName: string): Promise<void> {\n    const result = await this.docker.run([\"start\", containerName]);\n    if (result.code !== 0) {\n      throw new Error(result.stderr || `Failed to start ${containerName}.`);\n    }\n  }\n\n  private async removeContainer(containerName: string): Promise<void> {\n    const result = await this.docker.run([\"rm\", \"--force\", containerName]);\n    if (result.code !== 0 && !/no such container/i.test(result.stderr)) {\n      throw new Error(result.stderr || `Failed to remove ${containerName}.`);\n    }\n  }\n\n  private async removeVolume(volumeName: string): Promise<void> {\n    const result = await this.docker.run([\"volume\", \"rm\", volumeName]);\n    if (result.code !== 0 && !/no such volume/i.test(result.stderr)) {\n      throw new Error(result.stderr || `Failed to remove ${volumeName}.`);\n    }\n  }\n\n  private async rollbackCreatedResources(\n    state: LocalRuntimeState,\n    resources: {\n      containerCreated: boolean;\n      stateCreated: boolean;\n      volumeCreated: boolean;\n    }\n  ): Promise<void> {\n    if (resources.containerCreated) {\n      const inspect = await this.inspect(state.containerName);\n      if (inspect) {\n        assertOwnedDockerLabels(inspect.labels ?? {}, this.identity.id);\n        await this.removeContainer(state.containerName);\n      }\n    }\n    if (resources.volumeCreated) {\n      await this.removeVolume(state.volumeName);\n    }\n    if (resources.stateCreated) {\n      deleteLocalRuntimeState(this.projectRoot);\n    }\n  }\n\n  private async inspect(\n    containerName: string\n  ): Promise<DockerInspect | undefined> {\n    const result = await this.docker.run([\"inspect\", containerName]);\n    if (result.code !== 0) {\n      if (isDockerNotFoundResult(\"container\", result.stderr, result.stdout)) {\n        return undefined;\n      }\n      throw new DockerInspectFailure(\n        result.stderr || `Failed to inspect Docker container ${containerName}.`\n      );\n    }\n    const parsed: unknown = JSON.parse(result.stdout);\n    if (\n      !(Array.isArray(parsed) && parsed[0]) ||\n      typeof parsed[0] !== \"object\"\n    ) {\n      throw new Error(\n        `Docker returned invalid inspect data for ${containerName}.`\n      );\n    }\n    const record = parsed[0] as {\n      Config?: {\n        Env?: string[];\n        Image?: string;\n        Labels?: Record<string, string | undefined>;\n      };\n      HostConfig?: {\n        PortBindings?: Record<\n          string,\n          readonly { HostIp?: string; HostPort?: string }[]\n        >;\n      };\n      Mounts?: readonly {\n        Destination?: string;\n        Name?: string;\n        Source?: string;\n        Type?: string;\n      }[];\n      State?: { Running?: boolean; Status?: string };\n    };\n    return {\n      env: record.Config?.Env,\n      host: this.parseHost(record.HostConfig?.PortBindings),\n      image: record.Config?.Image,\n      labels: record.Config?.Labels,\n      port: this.parsePort(record.HostConfig?.PortBindings),\n      running: record.State?.Running,\n      status: record.State?.Status,\n      volumeName: this.parseVolumeName(record.Mounts),\n    };\n  }\n\n  private parseHost(\n    bindings:\n      | Record<string, readonly { HostIp?: string; HostPort?: string }[]>\n      | undefined\n  ): string | undefined {\n    return bindings?.[\"5432/tcp\"]?.[0]?.HostIp;\n  }\n\n  private parsePort(\n    bindings:\n      | Record<string, readonly { HostIp?: string; HostPort?: string }[]>\n      | undefined\n  ): number | undefined {\n    const value = bindings?.[\"5432/tcp\"]?.[0]?.HostPort;\n    if (!value) {\n      return undefined;\n    }\n    const port = Number(value);\n    return Number.isInteger(port) && port > 0 ? port : undefined;\n  }\n\n  private parseVolumeName(\n    mounts:\n      | readonly {\n          Destination?: string;\n          Name?: string;\n          Source?: string;\n          Type?: string;\n        }[]\n      | undefined\n  ): string | undefined {\n    const mount = mounts?.find(\n      (candidate) =>\n        candidate.Destination === \"/var/lib/postgresql/data\" &&\n        candidate.Type === \"volume\"\n    );\n    return typeof mount?.Name === \"string\" && mount.Name.length > 0\n      ? mount.Name\n      : undefined;\n  }\n}\n\nclass DockerInspectFailure extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"DockerInspectFailure\";\n  }\n}\n\nfunction isDockerNotFoundResult(\n  resource: \"container\" | \"volume\",\n  stderr: string,\n  stdout: string\n): boolean {\n  const payload = stdout.trim();\n  if (payload && payload !== \"[]\") {\n    return false;\n  }\n  const message = stderr.trim();\n  if (resource === \"container\") {\n    return /^Error:\\s+No such (?:object|container)(?::\\s+.+)?$/i.test(message);\n  }\n  return (\n    /^Error response from daemon:\\s+get\\s+.+:\\s+no such volume$/i.test(\n      message\n    ) ||\n    /^Error:\\s+No such (?:object|volume)(?::\\s+.+)?$/i.test(message)\n  );\n}\n","import type { AthenaLocalRuntimeConfig } from \"../generator/types.ts\";\n\nexport const DEFAULT_LOCAL_RUNTIME_CONFIG: Required<AthenaLocalRuntimeConfig> =\n  {\n    database: \"postgres\",\n    host: \"127.0.0.1\",\n    image: \"postgres:17-alpine\",\n    port: 54_322,\n    startupTimeoutMs: 60_000,\n    user: \"postgres\",\n    volume: \"named\",\n  };\n\nexport function normalizeLocalRuntimeConfig(\n  input: AthenaLocalRuntimeConfig | undefined\n): Required<AthenaLocalRuntimeConfig> {\n  const config = {\n    ...DEFAULT_LOCAL_RUNTIME_CONFIG,\n    ...(input ?? {}),\n  };\n  if (\n    config.host !== \"127.0.0.1\" &&\n    config.host !== \"localhost\" &&\n    config.host !== \"::1\"\n  ) {\n    throw new Error(\n      \"Local PostgreSQL runtime host must be a loopback address (127.0.0.1, localhost, or ::1).\"\n    );\n  }\n  return {\n    ...config,\n    host: \"127.0.0.1\",\n  };\n}\n","export interface DockerRunOptions {\n  containerName: string;\n  database: string;\n  image: string;\n  labels: Record<string, string>;\n  password: string;\n  port: number;\n  user: string;\n  volumeName: string;\n}\n\nexport interface DockerProcess {\n  run(\n    args: readonly string[]\n  ): Promise<{ code: number; stdout: string; stderr: string }>;\n}\n\nexport interface DockerInspect {\n  env?: readonly string[];\n  host?: string;\n  image?: string;\n  labels?: Record<string, string | undefined>;\n  port?: number;\n  running?: boolean;\n  status?: string;\n  volumeName?: string;\n}\n\nexport interface DockerVolumeInspect {\n  labels: Record<string, string | undefined>;\n  name: string;\n}\n\nexport const REQUIRED_LOCAL_LABELS = [\n  \"athena.client\",\n  \"athena.managed\",\n  \"athena.project\",\n  \"athena.project.slug\",\n  \"athena.service\",\n] as const;\n\nexport function buildDockerRunArgs(options: DockerRunOptions): string[] {\n  const args = [\n    \"run\",\n    \"--detach\",\n    \"--name\",\n    options.containerName,\n    \"--publish\",\n    `127.0.0.1:${options.port}:5432`,\n    \"--volume\",\n    `${options.volumeName}:/var/lib/postgresql/data`,\n  ];\n  for (const [key, value] of Object.entries(options.labels)) {\n    args.push(\"--label\", `${key}=${value}`);\n  }\n  args.push(\n    \"--env\",\n    `POSTGRES_DB=${options.database}`,\n    \"--env\",\n    `POSTGRES_USER=${options.user}`,\n    \"--env\",\n    `POSTGRES_PASSWORD=${options.password}`,\n    options.image\n  );\n  return args;\n}\n\nexport function buildDockerLogsArgs(containerName: string): string[] {\n  return [\"logs\", \"--timestamps\", containerName];\n}\n\nexport function buildDockerVolumeCreateArgs(\n  volumeName: string,\n  labels: Record<string, string>\n): string[] {\n  const args = [\"volume\", \"create\"];\n  for (const [key, value] of Object.entries(labels)) {\n    args.push(\"--label\", `${key}=${value}`);\n  }\n  args.push(volumeName);\n  return args;\n}\n\nexport function assertOwnedDockerLabels(\n  labels: Record<string, string | undefined>,\n  projectId: string\n): void {\n  const owned =\n    labels[\"athena.managed\"] === \"true\" &&\n    labels[\"athena.project\"] === projectId &&\n    labels[\"athena.service\"] === \"postgres\" &&\n    REQUIRED_LOCAL_LABELS.every((key) => Boolean(labels[key]));\n  if (!owned) {\n    throw new Error(\n      `Refusing to operate on an unowned Athena PostgreSQL container (expected project ${projectId}).`\n    );\n  }\n}\n\nexport function createDockerProcess(): DockerProcess {\n  return {\n    async run(args) {\n      const { spawn } = await import(\"node:child_process\");\n      return await new Promise((resolve, reject) => {\n        const child = spawn(\"docker\", [...args], {\n          shell: false,\n          windowsHide: true,\n        });\n        let stdout = \"\";\n        let stderr = \"\";\n        child.stdout?.on(\"data\", (chunk: Buffer) => {\n          stdout += chunk.toString();\n        });\n        child.stderr?.on(\"data\", (chunk: Buffer) => {\n          stderr += chunk.toString();\n        });\n        child.once(\"error\", reject);\n        child.once(\"close\", (code) =>\n          resolve({ code: code ?? 1, stderr, stdout })\n        );\n      });\n    },\n  };\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadProjectEnv } from \"../cli/commands/env/project-env.ts\";\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\ntype DirectConnectionStringEnvKey =\n  (typeof DIRECT_CONNECTION_STRING_ENV_KEYS)[number];\n\nexport interface LocalDatabaseUrlOptions {\n  database: string;\n  host: string;\n  password: string;\n  port: number;\n  user: string;\n}\n\nexport function buildLocalDatabaseUrl(\n  options: LocalDatabaseUrlOptions\n): string {\n  return `postgres://${encodeURIComponent(options.user)}:${encodeURIComponent(options.password)}@${options.host}:${options.port}/${encodeURIComponent(options.database)}`;\n}\n\n/**\n * Resolve the file and key that own the effective direct connection string\n * using the generator's layered project-env precedence. Process environment\n * values are authoritative but cannot be updated by --write-env.\n */\nexport function resolveProjectEnvDatabaseUrlTarget(\n  projectRoot: string,\n  processEnv: Record<string, string | undefined> = process.env\n): { envKey: DirectConnectionStringEnvKey; path: string } {\n  const loaded = loadProjectEnv({ cwd: projectRoot, processEnv });\n  const value = DIRECT_CONNECTION_STRING_ENV_KEYS.map((envKey) => ({\n    envKey,\n    value: loaded.values.get(envKey),\n  })).find(({ value }) => value?.value);\n  if (!value) {\n    return { envKey: \"DATABASE_URL\", path: join(projectRoot, \".env\") };\n  }\n  if (value.value?.source === \"process\") {\n    throw new Error(\n      `Cannot write ${value.envKey}: the effective value comes from the process environment.`\n    );\n  }\n  if (!value.value?.sourcePath) {\n    throw new Error(\n      `Cannot write ${value.envKey}: the effective project env file could not be determined.`\n    );\n  }\n  return { envKey: value.envKey, path: value.value.sourcePath };\n}\n\nexport function resolveProjectEnvDatabaseUrlPath(\n  projectRoot: string,\n  processEnv: Record<string, string | undefined> = process.env\n): string {\n  return resolveProjectEnvDatabaseUrlTarget(projectRoot, processEnv).path;\n}\n\nexport function updateEnvDatabaseUrl(\n  path: string,\n  databaseUrl: string,\n  options: {\n    envKey?: DirectConnectionStringEnvKey;\n    force?: boolean;\n    managedDatabaseUrl?: string;\n  } = {}\n): void {\n  const envKey = options.envKey ?? \"DATABASE_URL\";\n  let source = \"\";\n  try {\n    source = readFileSync(path, \"utf8\");\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n  const newline = source.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n  const lines = source.split(/\\r?\\n/);\n  const databaseUrlAssignment = new RegExp(\n    `^(\\\\s*)(export\\\\s+)?${envKey}\\\\s*=\\\\s*`\n  );\n  const assignments = lines.flatMap((line, index) => {\n    const assignment = line.match(databaseUrlAssignment);\n    return assignment ? [{ assignment, index }] : [];\n  });\n  const effective = assignments[assignments.length - 1];\n  if (effective) {\n    const { assignment, index } = effective;\n    if (!assignment) {\n      throw new Error(`Failed to parse the existing ${envKey} assignment.`);\n    }\n    const existingValue = normalizeEnvAssignmentValue(\n      lines[index].slice(assignment[0].length)\n    );\n    const managedDatabaseUrl = options.managedDatabaseUrl ?? databaseUrl;\n    if (\n      existingValue &&\n      !options.force &&\n      !isManagedDatabaseUrl(existingValue, managedDatabaseUrl)\n    ) {\n      throw new Error(\n        `Refusing to overwrite a non-local ${envKey} without force.`\n      );\n    }\n    lines[index] =\n      `${assignment[1]}${assignment[2] ?? \"\"}${envKey}=${databaseUrl}`;\n    for (const duplicate of assignments\n      .slice(0, -1)\n      .map(({ index: duplicateIndex }) => duplicateIndex)\n      .reverse()) {\n      lines.splice(duplicate, 1);\n    }\n  } else if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n    lines.splice(lines.length - 1, 0, `${envKey}=${databaseUrl}`);\n  } else {\n    lines.push(`${envKey}=${databaseUrl}`);\n  }\n  writeFileSync(path, lines.join(newline), \"utf8\");\n}\n\nfunction normalizeEnvAssignmentValue(rawValue: string): string {\n  const trimmed = rawValue.trim();\n  if (\n    trimmed.startsWith('\"') &&\n    trimmed.endsWith('\"') &&\n    trimmed.length >= 2\n  ) {\n    return trimmed.slice(1, -1);\n  }\n  if (\n    trimmed.startsWith(\"'\") &&\n    trimmed.endsWith(\"'\") &&\n    trimmed.length >= 2\n  ) {\n    return trimmed.slice(1, -1);\n  }\n  const commentIndex = trimmed.search(/\\s+#/);\n  return (commentIndex >= 0 ? trimmed.slice(0, commentIndex) : trimmed).trim();\n}\n\nfunction isManagedDatabaseUrl(\n  value: string,\n  managedDatabaseUrl: string\n): boolean {\n  try {\n    const url = new URL(value.trim().replace(/^['\"]|['\"]$/g, \"\"));\n    const managed = new URL(\n      managedDatabaseUrl.trim().replace(/^['\"]|['\"]$/g, \"\")\n    );\n    return (\n      isLoopbackPostgresUrl(url) &&\n      isLoopbackPostgresUrl(managed) &&\n      url.hostname === managed.hostname &&\n      url.port === managed.port &&\n      url.pathname === managed.pathname &&\n      url.username === managed.username\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction isLoopbackPostgresUrl(url: URL): boolean {\n  return (\n    (url.protocol === \"postgres:\" || url.protocol === \"postgresql:\") &&\n    (url.hostname === \"127.0.0.1\" ||\n      url.hostname === \"localhost\" ||\n      url.hostname === \"::1\" ||\n      url.hostname === \"[::1]\") &&\n    url.port !== \"\"\n  );\n}\n","import { createHash } from \"node:crypto\";\nimport { realpathSync } from \"node:fs\";\nimport { basename, relative, resolve } from \"node:path\";\n\nexport interface LocalProjectIdentity {\n  configPath: string;\n  id: string;\n  root: string;\n  slug: string;\n}\n\nfunction canonicalPath(path: string): string {\n  const resolved = resolve(path);\n  try {\n    return realpathSync(resolved);\n  } catch {\n    return resolved;\n  }\n}\n\nexport function localProjectSlug(id: string): string {\n  return `p-${id.slice(0, 12)}`;\n}\n\nexport function createLocalProjectIdentity(\n  projectRoot: string,\n  configPath: string\n): LocalProjectIdentity {\n  const root = canonicalPath(projectRoot);\n  const resolvedConfigPath = canonicalPath(configPath);\n  const id = createHash(\"sha256\").update(root).digest(\"hex\").slice(0, 32);\n  return {\n    configPath: resolvedConfigPath,\n    id,\n    root,\n    slug: localProjectSlug(id),\n  };\n}\n\nexport function localRuntimeDirectory(projectRoot: string): string {\n  return resolve(projectRoot, \".athena\", \"runtime\");\n}\n\nexport function localRuntimeStatePath(projectRoot: string): string {\n  return resolve(localRuntimeDirectory(projectRoot), \"postgres.json\");\n}\n\nexport function localContainerName(identity: LocalProjectIdentity): string {\n  return `athena-postgres-${identity.slug}`;\n}\n\nexport function localVolumeName(identity: LocalProjectIdentity): string {\n  return `athena-postgres-${identity.slug}`;\n}\n\nexport function configRelativeToRoot(identity: LocalProjectIdentity): string {\n  return (\n    relative(identity.root, identity.configPath) ||\n    basename(identity.configPath)\n  );\n}\n","import {\n  mkdirSync,\n  readFileSync,\n  renameSync,\n  rmdirSync,\n  statSync,\n  unlinkSync,\n  writeFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { localRuntimeDirectory } from \"./identity.ts\";\n\nconst LOCK_WAIT_MS = 25;\nconst LOCK_TIMEOUT_MS = 120_000;\n\nexport async function withLocalRuntimeLock<T>(\n  projectRoot: string,\n  operation: () => Promise<T>\n): Promise<T> {\n  const directory = localRuntimeDirectory(projectRoot);\n  const path = join(directory, \"postgres.lock\");\n  mkdirSync(directory, { recursive: true });\n  const startedAt = Date.now();\n  let acquired = false;\n  while (!acquired) {\n    try {\n      writeFileSync(\n        path,\n        JSON.stringify({\n          createdAt: new Date().toISOString(),\n          pid: process.pid,\n        }),\n        { encoding: \"utf8\", flag: \"wx\" }\n      );\n      acquired = true;\n    } catch (error) {\n      if (!isLockContention(error)) {\n        throw error;\n      }\n      if (reclaimStaleLock(path)) {\n        continue;\n      }\n      if (Date.now() - startedAt >= LOCK_TIMEOUT_MS) {\n        throw new Error(\n          `Timed out waiting for the local PostgreSQL lifecycle lock at ${path}.`\n        );\n      }\n      await new Promise((resolve) => setTimeout(resolve, LOCK_WAIT_MS));\n    }\n  }\n  try {\n    return await operation();\n  } finally {\n    try {\n      unlinkSync(path);\n    } catch (error) {\n      const code = (error as NodeJS.ErrnoException).code;\n      if (code !== \"ENOENT\" && code !== \"EPERM\" && code !== \"EACCES\") {\n        throw error;\n      }\n    }\n  }\n}\n\nfunction isLockContention(error: unknown): boolean {\n  const code = (error as NodeJS.ErrnoException).code;\n  return code === \"EEXIST\" || code === \"EPERM\" || code === \"EACCES\";\n}\n\nfunction reclaimStaleLock(path: string): boolean {\n  const snapshot = readLockSnapshot(path);\n  if (!snapshot) {\n    return false;\n  }\n  const metadata = snapshot.metadata;\n  if (\n    typeof metadata.pid !== \"number\" ||\n    !Number.isInteger(metadata.pid) ||\n    typeof metadata.createdAt !== \"string\" ||\n    !Number.isFinite(Date.parse(metadata.createdAt))\n  ) {\n    return reclaimLockFile(path, snapshot);\n  }\n  if (isProcessAlive(metadata.pid)) {\n    return false;\n  }\n  return reclaimLockFile(path, snapshot);\n}\n\nfunction isProcessAlive(pid: number): boolean {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (error) {\n    const code = (error as NodeJS.ErrnoException).code;\n    if (code === \"ESRCH\") {\n      return false;\n    }\n    if (code === \"EPERM\") {\n      return true;\n    }\n    throw error;\n  }\n}\n\ninterface LockSnapshot {\n  content: string;\n  metadata: { createdAt?: unknown; pid?: unknown };\n  stat: LockStat;\n}\n\ninterface LockStat {\n  ctimeMs: number;\n  dev: number;\n  ino: number;\n  mtimeMs: number;\n  size: number;\n}\n\nfunction readLockSnapshot(path: string): LockSnapshot | undefined {\n  try {\n    const before = readLockStat(path);\n    const content = readFileSync(path, \"utf8\");\n    const after = readLockStat(path);\n    if (!sameLockStat(before, after)) {\n      return undefined;\n    }\n    let metadata: { createdAt?: unknown; pid?: unknown } = {};\n    try {\n      const parsed: unknown = JSON.parse(content);\n      if (parsed && typeof parsed === \"object\") {\n        metadata = parsed as { createdAt?: unknown; pid?: unknown };\n      }\n    } catch {\n      // Invalid lock metadata remains reclaimable, as in the previous behavior.\n    }\n    return { content, metadata, stat: after };\n  } catch (error) {\n    const code = (error as NodeJS.ErrnoException).code;\n    if (code === \"ENOENT\" || code === \"EPERM\") {\n      return undefined;\n    }\n    throw error;\n  }\n}\n\nfunction readLockStat(path: string): LockStat {\n  const stat = statSync(path);\n  return {\n    ctimeMs: stat.ctimeMs,\n    dev: stat.dev,\n    ino: stat.ino,\n    mtimeMs: stat.mtimeMs,\n    size: stat.size,\n  };\n}\n\nfunction sameLockStat(left: LockStat, right: LockStat): boolean {\n  return (\n    left.ctimeMs === right.ctimeMs &&\n    left.dev === right.dev &&\n    left.ino === right.ino &&\n    left.mtimeMs === right.mtimeMs &&\n    left.size === right.size\n  );\n}\n\nfunction reclaimLockFile(path: string, expected: LockSnapshot): boolean {\n  const claimPath = `${path}.reclaim`;\n  const stalePath = `${path}.${process.pid}.${Date.now()}.stale`;\n  try {\n    mkdirSync(claimPath);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"EEXIST\") {\n      return false;\n    }\n    throw error;\n  }\n  try {\n    const current = readLockSnapshot(path);\n    if (\n      !current ||\n      current.content !== expected.content ||\n      !sameLockStat(current.stat, expected.stat)\n    ) {\n      releaseClaim(claimPath);\n      return false;\n    }\n    renameSync(path, stalePath);\n  } catch (error) {\n    releaseClaim(claimPath);\n    const code = (error as NodeJS.ErrnoException).code;\n    if (code === \"ENOENT\" || code === \"EPERM\" || code === \"EACCES\") {\n      return false;\n    }\n    throw error;\n  }\n  releaseClaim(claimPath);\n  unlinkSync(stalePath);\n  return true;\n}\n\nfunction releaseClaim(claimPath: string): void {\n  try {\n    rmdirSync(claimPath);\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n}\n","import { setTimeout as delay } from \"node:timers/promises\";\n\nimport { PostgresDeadline } from \"../postgres/pool/deadline.ts\";\nimport {\n  createPostgresPoolManager,\n  type PostgresPoolManager,\n} from \"../postgres/pool/manager.ts\";\n\ntype ReadinessManager = Pick<PostgresPoolManager, \"query\" | \"close\">;\n\nexport interface PostgresReadinessOptions {\n  connectionString: string;\n  createManager?: (connectionString: string) => ReadinessManager;\n  intervalMs?: number;\n  timeoutMs: number;\n}\n\nexport async function waitForPostgres(\n  options: PostgresReadinessOptions\n): Promise<void> {\n  const deadline = Date.now() + options.timeoutMs;\n  let lastError: unknown;\n  const manager =\n    options.createManager?.(options.connectionString) ??\n    createPostgresPoolManager({\n      connectionString: options.connectionString,\n    });\n\n  try {\n    while (Date.now() < deadline) {\n      const remaining = Math.max(1, deadline - Date.now());\n\n      try {\n        await withDeadline(\n          manager.query(\n            {\n              deadline: PostgresDeadline.after(remaining),\n              target: \"pooled\",\n              workload: \"introspection\",\n            },\n            \"SELECT 1\",\n          ),\n          deadline,\n        );\n\n        return;\n      } catch (error) {\n        lastError = error;\n\n        const remainingAfterAttempt = deadline - Date.now();\n        if (remainingAfterAttempt <= 0) {\n          break;\n        }\n\n        await delay(\n          Math.min(\n            options.intervalMs ?? 250,\n            Math.max(1, remainingAfterAttempt),\n          ),\n        );\n      }\n    }\n  } finally {\n    try {\n      await manager.close();\n    } catch (error) {\n      lastError ??= error;\n    }\n  }\n\n  throw new Error(\n    `Local PostgreSQL did not become ready within ${options.timeoutMs}ms.`,\n    { cause: lastError }\n  );\n}\n\nfunction withDeadline<T>(\n  operation: Promise<T>,\n  deadline: number,\n  onLateValue?: (value: T) => void\n): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    let settled = false;\n    const timeout = setTimeout(() => {\n      settled = true;\n      reject(new Error(\"Local PostgreSQL readiness deadline exceeded.\"));\n    }, Math.max(0, deadline - Date.now()));\n\n    operation.then(\n      (value) => {\n        if (settled) {\n          onLateValue?.(value);\n          return;\n        }\n        settled = true;\n        clearTimeout(timeout);\n        resolve(value);\n      },\n      (error: unknown) => {\n        if (settled) {\n          return;\n        }\n        settled = true;\n        clearTimeout(timeout);\n        reject(error);\n      }\n    );\n  });\n}\n","import {\n  mkdirSync,\n  readFileSync,\n  renameSync,\n  unlinkSync,\n  writeFileSync,\n} from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { localRuntimeStatePath } from \"./identity.ts\";\n\nexport interface LocalRuntimeState {\n  containerName: string;\n  createdAt: string;\n  database: string;\n  identity: string;\n  image: string;\n  password: string;\n  port: number;\n  user: string;\n  volumeName: string;\n}\n\nexport type LocalRuntimeDiagnostics = Omit<LocalRuntimeState, \"password\">;\n\nexport function readLocalRuntimeState(\n  projectRoot: string\n): LocalRuntimeState | undefined {\n  const path = localRuntimeStatePath(projectRoot);\n  try {\n    const parsed: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n    if (!isLocalRuntimeState(parsed)) {\n      throw new Error(`Invalid local runtime state at ${path}.`);\n    }\n    return parsed;\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return undefined;\n    }\n    throw error;\n  }\n}\n\nexport function writeLocalRuntimeState(\n  projectRoot: string,\n  state: LocalRuntimeState\n): void {\n  const path = resolve(localRuntimeStatePath(projectRoot));\n  mkdirSync(dirname(path), { recursive: true });\n  const temporaryPath = `${path}.tmp-${process.pid}`;\n  writeFileSync(temporaryPath, `${JSON.stringify(state, null, 2)}\\n`, {\n    encoding: \"utf8\",\n    mode: 0o600,\n  });\n  renameSync(temporaryPath, path);\n}\n\nexport function deleteLocalRuntimeState(projectRoot: string): void {\n  try {\n    unlinkSync(localRuntimeStatePath(projectRoot));\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n}\n\nexport function redactLocalRuntimeState(\n  state: LocalRuntimeState\n): LocalRuntimeDiagnostics {\n  const { password: _password, ...diagnostics } = state;\n  return diagnostics;\n}\n\nfunction isLocalRuntimeState(value: unknown): value is LocalRuntimeState {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const record = value as Record<string, unknown>;\n  return (\n    typeof record.containerName === \"string\" &&\n    typeof record.createdAt === \"string\" &&\n    typeof record.database === \"string\" &&\n    typeof record.identity === \"string\" &&\n    typeof record.image === \"string\" &&\n    typeof record.password === \"string\" &&\n    typeof record.port === \"number\" &&\n    typeof record.user === \"string\" &&\n    typeof record.volumeName === \"string\"\n  );\n}\n","import {\n  loadAthenaConfig,\n  loadGeneratorConfig,\n} from \"../../generator/config.ts\";\nimport type {\n  LoadAthenaConfigOptions,\n  LoadedAthenaConfig,\n  LoadedGeneratorConfig,\n} from \"../../generator/types.ts\";\nimport { wrapCliProjectLoadError } from \"./errors.ts\";\nimport { type CliProjectTarget, resolveCliProjectTarget } from \"./target.ts\";\n\nexport type LoadCliProjectOptions = LoadAthenaConfigOptions;\n\nexport interface LoadedCliProject {\n  athena: LoadedAthenaConfig;\n  generator: LoadedGeneratorConfig;\n  target: CliProjectTarget;\n}\n\nexport interface LoadedStaticCliProject {\n  athena: LoadedAthenaConfig;\n  cwd: string;\n}\n\n/**\n * CLI-owned project/config resolution. Evaluates `athena.config.*` via the\n * generator loaders and never instantiates domain runtimes or connects.\n */\nexport async function loadCliProject(\n  options: LoadCliProjectOptions = {}\n): Promise<LoadedCliProject> {\n  const cwd = options.cwd ?? process.cwd();\n  try {\n    const athena = await loadAthenaConfig({\n      configPath: options.configPath,\n      cwd,\n    });\n    const generator = await loadGeneratorConfig({\n      configPath: options.configPath,\n      cwd,\n    });\n    return {\n      athena,\n      generator,\n      target: resolveCliProjectTarget(generator, cwd),\n    };\n  } catch (error) {\n    throw wrapCliProjectLoadError(error);\n  }\n}\n\n/**\n * Loads only the static project config. This is the path for local runtime\n * commands, which must not require a generator provider or DATABASE_URL.\n */\nexport async function loadStaticCliProject(\n  options: LoadCliProjectOptions = {}\n): Promise<LoadedStaticCliProject> {\n  const cwd = options.cwd ?? process.cwd();\n  try {\n    return {\n      athena: await loadAthenaConfig({\n        configPath: options.configPath,\n        cwd,\n      }),\n      cwd,\n    };\n  } catch (error) {\n    throw wrapCliProjectLoadError(error);\n  }\n}\n","import { AthenaConfigurationError } from \"../../config/errors.ts\";\nimport { AthenaCliError } from \"../errors.ts\";\nimport { CliExitCode } from \"../exit-code.ts\";\n\nexport const CLI_PROJECT_CONFIG_IMPORT_FAILED =\n  \"ATHENA_CLI_PROJECT_CONFIG_IMPORT_FAILED\";\nexport const CLI_PROJECT_CONFIG_NOT_FOUND =\n  \"ATHENA_CLI_PROJECT_CONFIG_NOT_FOUND\";\n\nexport function wrapCliProjectLoadError(error: unknown): AthenaCliError {\n  if (error instanceof AthenaCliError) {\n    return error;\n  }\n  if (error instanceof AthenaConfigurationError) {\n    return new AthenaCliError({\n      cause: error,\n      code:\n        error.code === \"ATHENA_CONFIG_IMPORT_FAILED\"\n          ? CLI_PROJECT_CONFIG_IMPORT_FAILED\n          : error.code,\n      exitCode: CliExitCode.Configuration,\n      message: error.message,\n    });\n  }\n  const message = error instanceof Error ? error.message : String(error);\n  const notFound = /No (Athena|generator) config found/i.test(message);\n  return new AthenaCliError({\n    cause: error instanceof Error ? error : undefined,\n    code: notFound\n      ? CLI_PROJECT_CONFIG_NOT_FOUND\n      : CLI_PROJECT_CONFIG_IMPORT_FAILED,\n    exitCode: CliExitCode.Configuration,\n    message,\n  });\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } 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 {\n  findCliLog,\n  readCliLogFile,\n  resolveLatestCompletedLog,\n} from \"../../logging/index.ts\";\nimport { redactValue, serializeCliLogEvent } from \"../../logging/redact.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport {\n  encodeCliJsonSuccess,\n  exitCodeForError,\n  stringifyCliJson,\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  let json = false;\n  let outDir: string | undefined;\n  let includeLatestLog = false;\n  let invocation: string | undefined;\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"doctor\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--include-latest-log\") {\n      includeLatestLog = true;\n      continue;\n    }\n    if (token === \"--invocation\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --invocation option.\");\n      }\n      invocation = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--out\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --out option.\");\n      }\n      outDir = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"doctor bundle\");\n  }\n  return {\n    command: \"doctor-bundle\",\n    includeLatestLog,\n    invocation,\n    json,\n    outDir,\n  };\n}\n\nfunction stamp(): string {\n  return new Date().toISOString().replace(/[:.]/g, \"\").slice(0, 15);\n}\n\nasync function writeSecureAtomic(path: string, content: string): Promise<void> {\n  await mkdir(dirname(path), { mode: 0o700, recursive: true });\n  const temporary = `${path}.${randomUUID()}.tmp`;\n  await writeFile(temporary, content, { encoding: \"utf8\", mode: 0o600 });\n  try {\n    await rename(temporary, path);\n  } catch (error) {\n    await unlink(temporary).catch(() => undefined);\n    throw error;\n  }\n}\n\nfunction fileContent(body: unknown): string {\n  return typeof body === \"string\"\n    ? body.endsWith(\"\\n\")\n      ? body\n      : `${body}\\n`\n    : `${JSON.stringify(body, null, 2)}\\n`;\n}\n\nfunction sha256(content: string): string {\n  return createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nfunction normalizeHomePrefix(value: string): string {\n  const home = homedir().replace(/[\\\\/]+$/, \"\");\n  if (value === home) {\n    return \"~\";\n  }\n  if (value.startsWith(`${home}\\\\`) || value.startsWith(`${home}/`)) {\n    return `~${value.slice(home.length)}`;\n  }\n  return value;\n}\n\nfunction normalizePortablePaths(value: unknown, depth = 0): unknown {\n  if (depth >= 6 || value === null || value === undefined) {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return normalizeHomePrefix(value);\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => normalizePortablePaths(item, depth + 1));\n  }\n  if (typeof value !== \"object\") {\n    return value;\n  }\n  return Object.fromEntries(\n    Object.entries(value).map(([key, nested]) => [\n      key,\n      normalizePortablePaths(nested, depth + 1),\n    ])\n  );\n}\n\nexport async function runDoctorBundle(\n  ctx: CommandContext,\n  parsed: DoctorBundleCommand\n): Promise<void> {\n  try {\n    const doctor =\n      ctx.runtime.runCliDoctor ??\n      ((options: Parameters<typeof runCliDoctor>[0]) => runCliDoctor(options));\n    const report = await doctor({\n      cwd: ctx.cwd,\n      json: true,\n      plain: true,\n      skipRuntime: false,\n      strict: false,\n    });\n    const files: Record<string, unknown> = {\n      \"cli-version.txt\": PACKAGE_VERSION,\n      \"doctor.json\": report,\n      \"environment-summary.json\": {\n        cwd: ctx.cwd,\n        node: process.version,\n        platform: process.platform,\n      },\n    };\n    if (ctx.runtime.inspectAuthStatus) {\n      files[\"auth-status.json\"] = await ctx.runtime.inspectAuthStatus({\n        cwd: ctx.cwd,\n      });\n    }\n    if (ctx.runtime.runMigrationVerify) {\n      files[\"migration-status.json\"] = await ctx.runtime.runMigrationVerify({\n        cwd: ctx.cwd,\n      });\n    }\n    let logManifest: Record<string, unknown> | undefined;\n    const logPath = parsed.invocation\n      ? await findCliLog(parsed.invocation, {\n          cwd: ctx.cwd,\n          env: ctx.runtime.env,\n        })\n      : parsed.includeLatestLog\n        ? await resolveLatestCompletedLog({\n            cwd: ctx.cwd,\n            env: ctx.runtime.env,\n            excludeInvocationIds: [ctx.logger.invocationId],\n            excludePaths: ctx.logger.logPath ? [ctx.logger.logPath] : [],\n          })\n        : undefined;\n    if (logPath) {\n      const log = await readCliLogFile(logPath);\n      const maxBytes = 1024 * 1024;\n      const lines: string[] = [];\n      let logBytes = 0;\n      let truncated = false;\n      for (const event of log.events) {\n        const line = serializeCliLogEvent(event);\n        const lineBytes =\n          Buffer.byteLength(line, \"utf8\") + (lines.length > 0 ? 1 : 0);\n        if (logBytes + lineBytes > maxBytes) {\n          truncated = true;\n          break;\n        }\n        lines.push(line);\n        logBytes += lineBytes;\n      }\n      const bounded = lines.join(\"\\n\");\n      files[\"cli-log.jsonl\"] = bounded;\n      const content = fileContent(bounded);\n      logManifest = {\n        bytes: Buffer.byteLength(content, \"utf8\"),\n        capturedAt: new Date().toISOString(),\n        malformed: log.malformed,\n        schemaVersion: 1,\n        sha256: sha256(content),\n        source: logPath,\n        truncated,\n      };\n    } else if (parsed.includeLatestLog || parsed.invocation) {\n      ctx.logger.warn(\"Requested CLI log was not found.\", {\n        invocation: parsed.invocation,\n      });\n    }\n    const sanitized = normalizePortablePaths(redactValue(files)) as Record<\n      string,\n      unknown\n    >;\n    const directory = parsed.outDir\n      ? resolve(ctx.cwd, parsed.outDir)\n      : join(ctx.cwd, `athena-diagnostics-${stamp()}`);\n    await mkdir(directory, { mode: 0o700, recursive: true });\n    for (const [name, body] of Object.entries(sanitized)) {\n      await writeSecureAtomic(join(directory, name), fileContent(body));\n    }\n    const safeLogManifest = logManifest\n      ? (normalizePortablePaths(redactValue(logManifest)) as Record<\n          string,\n          unknown\n        >)\n      : undefined;\n    const bundle = {\n      ...sanitized,\n      ...(safeLogManifest\n        ? {\n            \"cli-log.jsonl\": {\n              reference: \"cli-log.jsonl\",\n              ...safeLogManifest,\n            },\n          }\n        : {}),\n    };\n    await writeSecureAtomic(\n      join(directory, \"bundle.json\"),\n      `${JSON.stringify(bundle, null, 2)}\\n`\n    );\n    if (logManifest) {\n      await writeSecureAtomic(\n        join(directory, \"bundle-manifest.json\"),\n        `${JSON.stringify(redactValue(logManifest), null, 2)}\\n`\n      );\n    }\n    if (ctx.output === \"json\" || parsed.json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"doctor.bundle\", {\n            directory,\n            files: Object.keys(sanitized),\n          })\n        )\n      );\n    } else {\n      ctx.log(`Wrote diagnostic bundle\\n  ${directory}\\n`);\n      ctx.log(\"Secrets (passwords, API keys, tokens) are redacted.\");\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n\nexport const doctorBundleCommand = defineCommand({\n  legacy: \"doctor-bundle\",\n  parse: (rest) => parseDoctorBundle(rest),\n  path: [\"doctor\", \"bundle\"],\n  run: (ctx, parsed) => runDoctorBundle(ctx, parsed as DoctorBundleCommand),\n  usage: () => formatCatalogTopicUsage(\"doctor\"),\n});\n","export type { CliLogReadResult, CliLogSummary } from \"./inventory.ts\";\nexport {\n  exportCliLog,\n  findCliLog,\n  latestCliLog,\n  listCliLogs,\n  maybeRunCliLogRetention,\n  pruneCliLogs,\n  readCliLogFile,\n  resolveLatestCompletedLog,\n} from \"./inventory.ts\";\nexport { createCliLogger, ensureLogDirectory } from \"./logger.ts\";\nexport type { AthenaCliLogPaths, AthenaHomePaths } from \"./paths.ts\";\nexport {\n  resolveAthenaCliLogPaths,\n  resolveAthenaHome,\n  resolveAthenaHomePaths,\n} from \"./paths.ts\";\nexport type { ArgvSanitizationPolicy } from \"./redact.ts\";\nexport {\n  redactSecrets,\n  redactValue,\n  sanitizeCliArgv,\n  sanitizeCliError,\n  serializeCliLogEvent,\n} from \"./redact.ts\";\nexport type { CliAsyncContext } from \"./tracer.ts\";\nexport {\n  createChildCliTraceContext,\n  createCliTraceContext,\n  getCliActiveSpanId,\n  getCliAsyncContext,\n  runCliAsyncContext,\n} from \"./tracer.ts\";\nexport type {\n  AthenaCliLogger,\n  BootstrapHandoffV1,\n  CliLogEvent,\n  CliLogEventInput,\n  CliLogFinishOptions,\n  CliLogKind,\n  CliLogLevel,\n  CliLogMode,\n  CliLogOutcome,\n  CliTraceContext,\n} from \"./types.ts\";\n","import { randomUUID } from \"node:crypto\";\nimport type { Dirent } from \"node:fs\";\nimport {\n  lstat,\n  mkdir,\n  readdir,\n  readFile,\n  realpath,\n  rename,\n  stat,\n  unlink,\n  writeFile,\n} from \"node:fs/promises\";\nimport {\n  basename,\n  dirname,\n  isAbsolute,\n  join,\n  relative,\n  resolve,\n} from \"node:path\";\nimport {\n  type resolveAthenaCliLogPaths,\n  resolveAthenaHomePaths,\n} from \"./paths.ts\";\nimport { redactSecrets, serializeCliLogEvent } from \"./redact.ts\";\nimport type { CliLogEvent } from \"./types.ts\";\n\nexport interface CliLogSummary {\n  bytes: number;\n  commandId?: string;\n  finishedAt?: string;\n  invocationId: string;\n  malformed: number;\n  outcome?: \"success\" | \"failure\" | \"cancelled\";\n  path: string;\n  startedAt?: string;\n}\n\nexport interface CliLogReadResult {\n  events: CliLogEvent[];\n  malformed: number;\n}\n\nfunction isWithinRoot(candidate: string, root: string): boolean {\n  const relativePath = relative(resolve(root), resolve(candidate));\n  return (\n    relativePath === \"\" ||\n    !(relativePath.startsWith(\"..\") || isAbsolute(relativePath))\n  );\n}\n\nasync function isSafeLogFile(path: string, root: string): Promise<boolean> {\n  if (!(isWithinRoot(path, root) && path.endsWith(\".jsonl\"))) {\n    return false;\n  }\n  try {\n    const details = await lstat(path);\n    if (!details.isFile()) {\n      return false;\n    }\n    const [rootPath, filePath] = await Promise.all([\n      realpath(root),\n      realpath(path),\n    ]);\n    return isWithinRoot(filePath, rootPath);\n  } catch {\n    return false;\n  }\n}\n\nfunction validInvocationId(value: string): boolean {\n  return /^[a-z0-9-]{1,96}$/i.test(value);\n}\n\nasync function writeSecureAtomic(path: string, body: string): Promise<void> {\n  await mkdir(dirname(path), { mode: 0o700, recursive: true });\n  const temporary = join(\n    dirname(path),\n    `.${basename(path)}-${randomUUID()}.tmp`\n  );\n  await writeFile(temporary, body, {\n    encoding: \"utf8\",\n    mode: 0o600,\n  });\n  try {\n    await rename(temporary, path);\n  } catch (error) {\n    if (\n      error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      (error.code === \"EEXIST\" || error.code === \"EPERM\")\n    ) {\n      await unlink(path).catch(() => undefined);\n      await rename(temporary, path);\n      return;\n    }\n    await unlink(temporary).catch(() => undefined);\n    throw error;\n  }\n}\n\nasync function repairLatestPointer(options: {\n  env: Record<string, string | undefined>;\n  cwd?: string;\n  paths: ReturnType<typeof resolveAthenaHomePaths>;\n}): Promise<void> {\n  const pointerPath = join(options.paths.cliLogsRoot, \"latest.json\");\n  try {\n    const pointer = JSON.parse(await readFile(pointerPath, \"utf8\")) as {\n      path?: unknown;\n    };\n    if (\n      typeof pointer.path === \"string\" &&\n      (await isSafeLogFile(pointer.path, options.paths.cliLogsRoot))\n    ) {\n      const result = await readCliLogFile(pointer.path);\n      const summary = summaryFromEvents(pointer.path, 0, result);\n      if (summary.finishedAt !== undefined && summary.outcome !== undefined) {\n        return;\n      }\n    }\n  } catch {\n    // Replace stale or malformed pointers from the surviving completed logs.\n  }\n\n  const summaries = (\n    await listCliLogs({\n      cwd: options.cwd,\n      env: options.env,\n      limit: 10_000,\n    })\n  )\n    .filter(\n      (summary) =>\n        summary.finishedAt !== undefined && summary.outcome !== undefined\n    )\n    .sort((left, right) =>\n      (right.finishedAt ?? right.startedAt ?? right.path).localeCompare(\n        left.finishedAt ?? left.startedAt ?? left.path\n      )\n    );\n  const latest = summaries[0];\n  if (!latest) {\n    await unlink(pointerPath).catch(() => undefined);\n    return;\n  }\n  const events = await readCliLogFile(latest.path);\n  const start = events.events.find(\n    (event) => event.kind === \"invocation.start\"\n  );\n  await writeSecureAtomic(\n    pointerPath,\n    `${JSON.stringify(\n      {\n        invocationId: start?.invocationId ?? latest.invocationId,\n        path: latest.path,\n        schemaVersion: 1,\n        startedAt: start?.timestamp ?? latest.startedAt,\n        traceId: start?.traceId,\n        updatedAt: new Date().toISOString(),\n        writer: start?.writer ?? \"canonical\",\n      },\n      null,\n      2\n    )}\\n`\n  );\n}\n\nasync function logFiles(root: string): Promise<string[]> {\n  const files: string[] = [];\n  let days: Dirent[] = [];\n  try {\n    days = await readdir(root, { withFileTypes: true });\n  } catch (error) {\n    if (\n      error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      error.code === \"ENOENT\"\n    ) {\n      return files;\n    }\n    throw error;\n  }\n  for (const day of days) {\n    if (!(day.isDirectory() && /^\\d{4}-\\d{2}-\\d{2}$/.test(day.name))) {\n      continue;\n    }\n    const dayPath = join(root, day.name);\n    for (const entry of await readdir(dayPath, { withFileTypes: true })) {\n      if (entry.isFile() && entry.name.endsWith(\".jsonl\")) {\n        const file = join(dayPath, entry.name);\n        if (isWithinRoot(file, root)) {\n          files.push(file);\n        }\n      }\n    }\n  }\n  return files;\n}\n\nexport async function readCliLogFile(path: string): Promise<CliLogReadResult> {\n  const body = await readFile(path, \"utf8\");\n  const events: CliLogEvent[] = [];\n  let malformed = 0;\n  for (const line of body.split(/\\r?\\n/)) {\n    if (!line.trim()) {\n      continue;\n    }\n    try {\n      events.push(JSON.parse(line) as CliLogEvent);\n    } catch {\n      malformed += 1;\n    }\n  }\n  return { events, malformed };\n}\n\nfunction summaryFromEvents(\n  path: string,\n  bytes: number,\n  result: CliLogReadResult\n): CliLogSummary {\n  const start = result.events.find(\n    (event) => event.kind === \"invocation.start\"\n  );\n  const finish = [...result.events]\n    .reverse()\n    .find((event) => event.kind === \"invocation.finish\");\n  const invocationId =\n    typeof start?.invocationId === \"string\"\n      ? start.invocationId\n      : (path\n          .split(/[\\\\/]/)\n          .at(-1)\n          ?.replace(/\\.jsonl$/, \"\") ?? \"unknown\");\n  return {\n    bytes,\n    commandId: finish?.commandId,\n    finishedAt: finish?.timestamp,\n    invocationId,\n    malformed: result.malformed,\n    outcome: finish?.outcome,\n    path,\n    startedAt: start?.timestamp,\n  };\n}\n\nexport async function listCliLogs(\n  options: {\n    env?: Record<string, string | undefined>;\n    cwd?: string;\n    root?: string;\n    limit?: number;\n    errorsOnly?: boolean;\n  } = {}\n): Promise<CliLogSummary[]> {\n  const root =\n    options.root ??\n    resolveAthenaHomePaths(options.env, options.cwd).cliLogsRoot;\n  const files = await logFiles(root);\n  const summaries: CliLogSummary[] = [];\n  for (const path of files) {\n    try {\n      const [result, details] = await Promise.all([\n        readCliLogFile(path),\n        stat(path),\n      ]);\n      const summary = summaryFromEvents(path, details.size, result);\n      if (!options.errorsOnly || summary.outcome === \"failure\") {\n        summaries.push(summary);\n      }\n    } catch {\n      summaries.push({\n        bytes: 0,\n        invocationId:\n          path\n            .split(/[\\\\/]/)\n            .at(-1)\n            ?.replace(/\\.jsonl$/, \"\") ?? \"unknown\",\n        malformed: 1,\n        path,\n      });\n    }\n  }\n  summaries.sort((left, right) => right.path.localeCompare(left.path));\n  return summaries.slice(0, Math.max(1, Math.min(options.limit ?? 20, 10_000)));\n}\n\nexport async function findCliLog(\n  invocationId: string,\n  options: { env?: Record<string, string | undefined>; cwd?: string } = {}\n): Promise<string | undefined> {\n  if (!validInvocationId(invocationId)) {\n    return;\n  }\n  const root = resolveAthenaHomePaths(options.env, options.cwd).cliLogsRoot;\n  for (const path of await logFiles(root)) {\n    const name = path.split(/[\\\\/]/).at(-1) ?? \"\";\n    if (name.endsWith(`-${invocationId}.jsonl`) && isWithinRoot(path, root)) {\n      return path;\n    }\n  }\n}\n\nexport async function latestCliLog(\n  options: {\n    env?: Record<string, string | undefined>;\n    cwd?: string;\n    root?: string;\n    excludePaths?: readonly string[];\n    excludeInvocationIds?: readonly string[];\n  } = {}\n): Promise<string | undefined> {\n  return resolveLatestCompletedLog(options);\n}\n\nexport async function resolveLatestCompletedLog(\n  options: {\n    env?: Record<string, string | undefined>;\n    cwd?: string;\n    root?: string;\n    excludePaths?: readonly string[];\n    excludeInvocationIds?: readonly string[];\n  } = {}\n): Promise<string | undefined> {\n  const root =\n    options.root ??\n    resolveAthenaHomePaths(options.env, options.cwd).cliLogsRoot;\n  const excludedPaths = new Set(\n    (options.excludePaths ?? [])\n      .filter((path) => path.length > 0)\n      .map((path) => resolve(path))\n  );\n  const excludedInvocationIds = new Set(options.excludeInvocationIds ?? []);\n  const isExcluded = (path: string, summary?: CliLogSummary): boolean =>\n    excludedPaths.has(resolve(path)) ||\n    (summary !== undefined && excludedInvocationIds.has(summary.invocationId));\n  const isCompleted = (summary: CliLogSummary): boolean =>\n    summary.finishedAt !== undefined && summary.outcome !== undefined;\n\n  try {\n    const pointer = JSON.parse(\n      await readFile(join(root, \"latest.json\"), \"utf8\")\n    ) as {\n      path?: unknown;\n    };\n    if (\n      typeof pointer.path === \"string\" &&\n      (await isSafeLogFile(pointer.path, root)) &&\n      !isExcluded(pointer.path)\n    ) {\n      const pointerResult = await readCliLogFile(pointer.path);\n      const pointerSummary = summaryFromEvents(pointer.path, 0, pointerResult);\n      if (\n        !isExcluded(pointer.path, pointerSummary) &&\n        isCompleted(pointerSummary)\n      ) {\n        return pointer.path;\n      }\n    }\n  } catch {\n    // Fall through to bounded metadata scanning when the pointer is stale.\n  }\n\n  const summaries = await listCliLogs({\n    cwd: options.cwd,\n    env: options.env,\n    limit: 10_000,\n    root,\n  });\n  return summaries\n    .filter((summary) => !isExcluded(summary.path, summary))\n    .filter(isCompleted)\n    .sort((left, right) =>\n      (right.finishedAt ?? right.startedAt ?? right.path).localeCompare(\n        left.finishedAt ?? left.startedAt ?? left.path\n      )\n    )\n    .at(0)?.path;\n}\n\nfunction parseDuration(\n  value: string | undefined,\n  fallbackDays: number\n): number {\n  if (!value) {\n    return fallbackDays * 24 * 60 * 60 * 1000;\n  }\n  const match = /^(\\d+(?:\\.\\d+)?)([smhdw])$/i.exec(value.trim());\n  if (!match) {\n    throw new Error(`Invalid --older-than duration \"${value}\".`);\n  }\n  const amount = Number(match[1]);\n  const unit = match[2]?.toLowerCase();\n  const multiplier =\n    unit === \"s\"\n      ? 1000\n      : unit === \"m\"\n        ? 60 * 1000\n        : unit === \"h\"\n          ? 60 * 60 * 1000\n          : unit === \"w\"\n            ? 7 * 24 * 60 * 60 * 1000\n            : 24 * 60 * 60 * 1000;\n  const duration = amount * multiplier;\n  if (\n    !Number.isFinite(duration) ||\n    duration <= 0 ||\n    duration > 3650 * 24 * 60 * 60 * 1000\n  ) {\n    throw new Error(`Invalid --older-than duration \"${value}\".`);\n  }\n  return duration;\n}\n\nfunction configuredNumber(\n  value: string | undefined,\n  fallback: number,\n  minimum: number,\n  maximum: number\n): number {\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed)) {\n    return fallback;\n  }\n  return Math.max(minimum, Math.min(Math.floor(parsed), maximum));\n}\n\nasync function writeRetentionState(path: string): Promise<void> {\n  const temporary = `${path}.${randomUUID()}.tmp`;\n  await writeFile(\n    temporary,\n    `${JSON.stringify({ lastCleanupDate: new Date().toISOString().slice(0, 10), schemaVersion: 1 })}\\n`,\n    { encoding: \"utf8\", mode: 0o600 }\n  );\n  try {\n    await rename(temporary, path);\n  } catch (error) {\n    if (\n      error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      (error.code === \"EEXIST\" || error.code === \"EPERM\")\n    ) {\n      await unlink(path).catch(() => undefined);\n      await rename(temporary, path);\n      return;\n    }\n    await unlink(temporary).catch(() => undefined);\n    throw error;\n  }\n}\n\nexport async function pruneCliLogs(\n  options: {\n    env?: Record<string, string | undefined>;\n    cwd?: string;\n    olderThan?: string;\n    activePath?: string;\n  } = {}\n): Promise<{ bytes: number; count: number }> {\n  const env = options.env ?? process.env;\n  const paths = resolveAthenaHomePaths(env, options.cwd);\n  const maxBytes = configuredNumber(\n    env.ATHENA_CLI_LOG_MAX_BYTES,\n    100 * 1024 * 1024,\n    1,\n    1024 * 1024 * 1024\n  );\n  const cutoff =\n    Date.now() -\n    parseDuration(\n      options.olderThan,\n      configuredNumber(env.ATHENA_CLI_LOG_RETENTION_DAYS, 30, 1, 3650)\n    );\n  const summaries = await listCliLogs({\n    cwd: options.cwd,\n    env,\n    limit: 10_000,\n  });\n  const candidates = summaries\n    .filter(\n      (summary) =>\n        options.activePath === undefined ||\n        resolve(summary.path) !== resolve(options.activePath)\n    )\n    .filter((summary) => isWithinRoot(summary.path, paths.cliLogsRoot))\n    .map((summary) => ({\n      ...summary,\n      mtime: Date.parse(summary.finishedAt ?? summary.startedAt ?? \"\") || 0,\n    }));\n  let totalBytes = candidates.reduce((total, item) => total + item.bytes, 0);\n  let removedCount = 0;\n  let removedBytes = 0;\n  const remove = candidates\n    .filter((item) => item.mtime === 0 || item.mtime < cutoff)\n    .sort((left, right) => {\n      const failed =\n        Number(left.outcome === \"failure\") -\n        Number(right.outcome === \"failure\");\n      return failed || left.mtime - right.mtime;\n    });\n  const planned = [...remove];\n  let projectedBytes =\n    totalBytes - remove.reduce((total, item) => total + item.bytes, 0);\n  if (projectedBytes > maxBytes) {\n    const agePaths = new Set(remove.map((item) => resolve(item.path)));\n    const remaining = candidates\n      .filter((item) => !agePaths.has(resolve(item.path)))\n      .sort((left, right) => {\n        const failed =\n          Number(left.outcome === \"failure\") -\n          Number(right.outcome === \"failure\");\n        return failed || left.mtime - right.mtime;\n      });\n    for (const item of remaining) {\n      if (projectedBytes <= maxBytes) {\n        break;\n      }\n      planned.push(item);\n      projectedBytes -= item.bytes;\n    }\n  }\n  const targets = new Set<string>();\n  for (const item of planned) {\n    if (\n      !(\n        isWithinRoot(item.path, paths.cliLogsRoot) &&\n        item.path.endsWith(\".jsonl\") &&\n        (await isSafeLogFile(item.path, paths.cliLogsRoot))\n      ) ||\n      targets.has(resolve(item.path))\n    ) {\n      throw new Error(\"Invalid log retention deletion target.\");\n    }\n    targets.add(resolve(item.path));\n  }\n  totalBytes = candidates.reduce((total, item) => total + item.bytes, 0);\n  for (const item of planned) {\n    try {\n      await unlink(item.path);\n    } catch (error) {\n      if (\n        !(\n          error &&\n          typeof error === \"object\" &&\n          \"code\" in error &&\n          error.code === \"ENOENT\"\n        )\n      ) {\n        throw error;\n      }\n      continue;\n    }\n    totalBytes -= item.bytes;\n    removedCount += 1;\n    removedBytes += item.bytes;\n  }\n  await repairLatestPointer({\n    cwd: options.cwd,\n    env,\n    paths,\n  });\n  await mkdir(paths.cliLogsRoot, { mode: 0o700, recursive: true });\n  await writeRetentionState(join(paths.cliLogsRoot, \"retention-state.json\"));\n  return {\n    bytes: removedBytes,\n    count: removedCount,\n  };\n}\n\nexport async function maybeRunCliLogRetention(\n  paths: ReturnType<typeof resolveAthenaCliLogPaths>,\n  env: Record<string, string | undefined>,\n  cwd?: string\n): Promise<void> {\n  try {\n    const state = JSON.parse(await readFile(paths.retentionState, \"utf8\")) as {\n      lastCleanupDate?: unknown;\n    };\n    if (state.lastCleanupDate === new Date().toISOString().slice(0, 10)) {\n      return;\n    }\n  } catch (error) {\n    if (\n      !(\n        error &&\n        typeof error === \"object\" &&\n        \"code\" in error &&\n        error.code === \"ENOENT\"\n      )\n    ) {\n      return;\n    }\n  }\n  await pruneCliLogs({ activePath: paths.logFile, cwd, env });\n}\n\nexport async function exportCliLog(\n  sourcePath: string,\n  destination: string\n): Promise<{ bytes: number; malformed: number; truncated: boolean }> {\n  if (resolve(sourcePath) === resolve(destination)) {\n    throw new Error(\"CLI log export destination must differ from its source.\");\n  }\n  const result = await readCliLogFile(sourcePath);\n  const maxBytes = 10 * 1024 * 1024;\n  const lines: string[] = [];\n  let bytes = 0;\n  let truncated = false;\n  for (const event of result.events) {\n    const line = serializeCliLogEvent(event);\n    const lineBytes =\n      Buffer.byteLength(line, \"utf8\") + (lines.length > 0 ? 1 : 0);\n    if (bytes + lineBytes > maxBytes) {\n      truncated = true;\n      break;\n    }\n    lines.push(line);\n    bytes += lineBytes;\n  }\n  const body = lines.join(\"\\n\");\n  const output = body ? `${redactSecrets(body)}\\n` : \"\";\n  await writeSecureAtomic(destination, output);\n  return {\n    bytes: Buffer.byteLength(output, \"utf8\"),\n    malformed: result.malformed,\n    truncated,\n  };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nexport interface AthenaHomePaths {\n  cliLogsRoot: string;\n  configPath: string;\n  diagnosticsRoot: string;\n  home: string;\n  logsRoot: string;\n}\n\nexport interface AthenaCliLogPaths extends AthenaHomePaths {\n  dayDir: string;\n  latestPointer: string;\n  logFile: string;\n  retentionState: string;\n}\n\nfunction currentWorkingDirectory(): string {\n  const proc = globalThis as typeof globalThis & {\n    process?: { cwd?: () => string };\n  };\n  return proc.process?.cwd?.() ?? \".\";\n}\n\n/**\n * Resolve Athena home without interpreting shell syntax in ATHENA_HOME.\n * Relative overrides are resolved against the caller's working directory.\n */\nexport function resolveAthenaHome(\n  env: Record<string, string | undefined> = process.env,\n  cwd = currentWorkingDirectory()\n): string {\n  const override = env.ATHENA_HOME?.trim();\n  if (override) {\n    return isAbsolute(override) ? resolve(override) : resolve(cwd, override);\n  }\n  return resolve(homedir(), \".athena\");\n}\n\nexport function resolveAthenaHomePaths(\n  env: Record<string, string | undefined> = process.env,\n  cwd = currentWorkingDirectory()\n): AthenaHomePaths {\n  const home = resolveAthenaHome(env, cwd);\n  const logsRoot = join(home, \"logs\");\n  return {\n    cliLogsRoot: join(logsRoot, \"athena-js\"),\n    configPath: join(home, \"config.json\"),\n    diagnosticsRoot: join(home, \"diagnostics\"),\n    home,\n    logsRoot,\n  };\n}\n\nfunction safeInvocationId(invocationId: string): string {\n  const normalized = invocationId.toLowerCase().replace(/[^a-z0-9-]/g, \"-\");\n  return normalized.length > 0 ? normalized.slice(0, 96) : randomUUID();\n}\n\nfunction timestampForFilename(now: Date): string {\n  return now.toISOString().replace(/[-:]/g, \"\");\n}\n\nexport function resolveAthenaCliLogPaths(\n  options: {\n    env?: Record<string, string | undefined>;\n    cwd?: string;\n    now?: Date;\n    command?: string;\n    invocationId?: string;\n    pid?: number;\n  } = {}\n): AthenaCliLogPaths {\n  const env = options.env ?? process.env;\n  const homePaths = resolveAthenaHomePaths(env, options.cwd);\n  const now = options.now ?? new Date();\n  const day = now.toISOString().slice(0, 10);\n  const invocationId = safeInvocationId(options.invocationId ?? randomUUID());\n  const dayDir = join(homePaths.cliLogsRoot, day);\n  const logFile = join(\n    dayDir,\n    `${timestampForFilename(now)}-${invocationId}.jsonl`\n  );\n  return {\n    ...homePaths,\n    dayDir,\n    latestPointer: join(homePaths.cliLogsRoot, \"latest.json\"),\n    logFile,\n    retentionState: join(homePaths.cliLogsRoot, \"retention-state.json\"),\n  };\n}\n","import { randomBytes, randomUUID } from \"node:crypto\";\nimport { appendFile, mkdir, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { ensureCliErrorId } from \"../errors.ts\";\nimport { maybeRunCliLogRetention } from \"./inventory.ts\";\nimport { resolveAthenaCliLogPaths } from \"./paths.ts\";\nimport {\n  redactSecrets,\n  redactValue,\n  sanitizeCliError,\n  serializeCliLogEvent,\n} from \"./redact.ts\";\nimport type {\n  AthenaCliLogger,\n  BootstrapHandoffV1,\n  CliLogEvent,\n  CliLogEventInput,\n  CliLogFinishOptions,\n  CliLogMode,\n} from \"./types.ts\";\n\nconst ERROR_BUFFER_LIMIT = 256;\n\nexport interface CreateCliLoggerOptions {\n  baseMetadata?: Record<string, unknown>;\n  command?: string;\n  cwd?: string;\n  /** Backwards-compatible alias for `mode: \"off\"`. */\n  disabled?: boolean;\n  env?: Record<string, string | undefined>;\n  invocationId?: string;\n  mode?: CliLogMode;\n  now?: Date;\n  pid?: number;\n  /** Internal option used when adopting pre-runtime bootstrap events. */\n  skipStart?: boolean;\n  traceId?: string;\n}\n\ninterface LogSink {\n  readonly baseMetadata: Readonly<Record<string, unknown>>;\n  bootstrapAdopted: boolean;\n  buffer: CliLogEvent[];\n  readonly cwd?: string;\n  readonly env: Record<string, string | undefined>;\n  finalized: boolean;\n  firstFailure?: unknown;\n  readonly invocationId: string;\n  readonly mode: CliLogMode;\n  readonly paths: ReturnType<typeof resolveAthenaCliLogPaths>;\n  ready?: Promise<void>;\n  reportedErrorIds: Set<string>;\n  sequence: number;\n  readonly startedAt: Date;\n  tail: Promise<void>;\n  readonly traceId: string;\n}\n\nfunction traceId(): string {\n  return randomBytes(16).toString(\"hex\");\n}\n\nfunction isValidTraceId(value: string | undefined): value is string {\n  return (\n    value !== undefined &&\n    /^[0-9a-f]{32}$/i.test(value) &&\n    !/^[0]+$/i.test(value)\n  );\n}\n\nfunction isValidInvocationId(value: string | undefined): value is string {\n  return value !== undefined && /^[a-z0-9-]{1,96}$/i.test(value);\n}\n\nfunction normalizeMode(\n  mode: string | undefined,\n  disabled: boolean | undefined\n): CliLogMode {\n  if (disabled) {\n    return \"off\";\n  }\n  if (\n    mode === \"off\" ||\n    mode === \"errors\" ||\n    mode === \"all\" ||\n    mode === \"debug\"\n  ) {\n    return mode;\n  }\n  return \"all\";\n}\n\nfunction modeFromEnvironment(\n  env: Record<string, string | undefined>,\n  options: CreateCliLoggerOptions\n): CliLogMode {\n  const configured = options.mode ?? env.ATHENA_CLI_LOG;\n  if (\n    configured !== undefined &&\n    configured !== \"off\" &&\n    configured !== \"errors\" &&\n    configured !== \"all\" &&\n    configured !== \"debug\"\n  ) {\n    return \"all\";\n  }\n  return normalizeMode(configured, options.disabled);\n}\n\nfunction eventTimestamp(): string {\n  return new Date().toISOString();\n}\n\nfunction mergeData(\n  baseMetadata: Readonly<Record<string, unknown>>,\n  data: Record<string, unknown> | undefined\n): Record<string, unknown> | undefined {\n  if (!baseMetadata || Object.keys(baseMetadata).length === 0) {\n    return data;\n  }\n  return { ...baseMetadata, ...data };\n}\n\nasync function writeLatestPointer(sink: LogSink): Promise<void> {\n  const pointer = JSON.stringify(\n    {\n      invocationId: sink.invocationId,\n      path: sink.paths.logFile,\n      schemaVersion: 1,\n      startedAt: sink.startedAt.toISOString(),\n      traceId: sink.traceId,\n      updatedAt: eventTimestamp(),\n      writer: \"canonical\",\n    },\n    null,\n    2\n  );\n  const temporary = join(\n    sink.paths.cliLogsRoot,\n    `.latest-${sink.invocationId}-${randomUUID()}.tmp`\n  );\n  await writeFile(temporary, `${pointer}\\n`, { encoding: \"utf8\", mode: 0o600 });\n  try {\n    await rename(temporary, sink.paths.latestPointer);\n  } catch (error) {\n    if (\n      typeof error === \"object\" &&\n      error !== null &&\n      \"code\" in error &&\n      (error.code === \"EEXIST\" || error.code === \"EPERM\")\n    ) {\n      await unlink(sink.paths.latestPointer).catch(() => undefined);\n      await rename(temporary, sink.paths.latestPointer);\n    } else {\n      await unlink(temporary).catch(() => undefined);\n      throw error;\n    }\n  }\n}\n\nasync function ensureReady(sink: LogSink): Promise<void> {\n  if (sink.mode === \"off\") {\n    return;\n  }\n  if (!sink.ready) {\n    sink.ready = (async () => {\n      await mkdir(sink.paths.dayDir, { mode: 0o700, recursive: true });\n      await writeLatestPointer(sink);\n    })();\n  }\n  await sink.ready;\n}\n\nfunction schedule(sink: LogSink, operation: () => Promise<void>): void {\n  sink.tail = sink.tail\n    .catch(() => undefined)\n    .then(async () => {\n      try {\n        await operation();\n      } catch (error) {\n        if (sink.firstFailure === undefined) {\n          sink.firstFailure = error;\n        }\n      }\n    });\n}\n\nfunction makeEvent(\n  sink: LogSink,\n  input: CliLogEventInput,\n  sequence: number,\n  mode: CliLogMode\n): CliLogEvent {\n  const event: CliLogEvent = {\n    commandId: input.commandId,\n    data: mergeData(sink.baseMetadata, input.data),\n    durationMs: input.durationMs,\n    error:\n      input.error === undefined\n        ? undefined\n        : sanitizeCliError(input.error, { includeStack: mode === \"debug\" }),\n    errorId: input.errorId,\n    exitCode: input.exitCode,\n    invocationId: sink.invocationId,\n    kind: input.kind,\n    level: input.level,\n    message: input.message ? redactSecrets(input.message) : undefined,\n    outcome: input.outcome,\n    parentSpanId: input.parentSpanId,\n    schemaVersion: 1,\n    sequence,\n    spanId: input.spanId,\n    timestamp: eventTimestamp(),\n    traceId: sink.traceId,\n    writer: \"canonical\",\n  };\n  return redactValue(event) as CliLogEvent;\n}\n\nfunction createSink(\n  options: CreateCliLoggerOptions,\n  env: Record<string, string | undefined>\n): LogSink {\n  const now = options.now ?? new Date();\n  const invocationId = isValidInvocationId(options.invocationId)\n    ? options.invocationId\n    : randomUUID();\n  const trace = isValidTraceId(options.traceId) ? options.traceId : traceId();\n  const mode = modeFromEnvironment(env, options);\n  return {\n    baseMetadata: Object.freeze(\n      (redactValue(options.baseMetadata ?? {}) as Record<string, unknown>) ?? {}\n    ),\n    bootstrapAdopted: false,\n    buffer: [],\n    cwd: options.cwd,\n    env,\n    finalized: false,\n    invocationId,\n    mode,\n    paths: resolveAthenaCliLogPaths({\n      command: options.command,\n      cwd: options.cwd,\n      env,\n      invocationId,\n      now,\n      pid: options.pid,\n    }),\n    reportedErrorIds: new Set<string>(),\n    sequence: 0,\n    startedAt: now,\n    tail: Promise.resolve(),\n    traceId: trace,\n  };\n}\n\nfunction makeLogger(\n  sink: LogSink,\n  baseMetadata: Readonly<Record<string, unknown>>,\n  isRoot: boolean\n): AthenaCliLogger {\n  const enqueue = (event: CliLogEvent): void => {\n    if (sink.finalized || sink.mode === \"off\") {\n      return;\n    }\n    try {\n      const sanitized = redactValue(event) as CliLogEvent;\n      if (Number.isInteger(sanitized.sequence)) {\n        sink.sequence = Math.max(sink.sequence, sanitized.sequence);\n      }\n      if (sink.mode === \"errors\") {\n        sink.buffer.push(sanitized);\n        if (sink.buffer.length > ERROR_BUFFER_LIMIT) {\n          sink.buffer.splice(0, sink.buffer.length - ERROR_BUFFER_LIMIT);\n        }\n        return;\n      }\n      schedule(sink, async () => {\n        await ensureReady(sink);\n        await appendFile(\n          sink.paths.logFile,\n          `${serializeCliLogEvent(sanitized)}\\n`,\n          { encoding: \"utf8\", mode: 0o600 }\n        );\n      });\n    } catch (error) {\n      if (sink.firstFailure === undefined) {\n        sink.firstFailure = error;\n      }\n    }\n  };\n\n  const record = (input: CliLogEventInput): void => {\n    if (sink.finalized || sink.mode === \"off\") {\n      return;\n    }\n    try {\n      const errorId =\n        input.kind === \"error\"\n          ? (input.errorId ??\n            (input.error === undefined\n              ? undefined\n              : ensureCliErrorId(input.error)))\n          : undefined;\n      if (errorId && sink.reportedErrorIds.has(errorId)) {\n        return;\n      }\n      const nextSequence = sink.sequence + 1;\n      sink.sequence = nextSequence;\n      if (errorId) {\n        sink.reportedErrorIds.add(errorId);\n      }\n      const event = makeEvent(\n        sink,\n        {\n          ...input,\n          data: mergeData(baseMetadata, input.data),\n          errorId,\n        },\n        nextSequence,\n        sink.mode\n      );\n      enqueue(event);\n    } catch (error) {\n      if (sink.firstFailure === undefined) {\n        sink.firstFailure = error;\n      }\n    }\n  };\n\n  const logger: AthenaCliLogger = {\n    adoptBootstrap(handoff: BootstrapHandoffV1) {\n      if (sink.bootstrapAdopted) {\n        return;\n      }\n      if (\n        handoff.version !== 1 ||\n        handoff.invocationId !== sink.invocationId ||\n        handoff.traceId !== sink.traceId ||\n        !isValidInvocationId(handoff.invocationId) ||\n        !isValidTraceId(handoff.traceId) ||\n        typeof handoff.startedMonotonicNs !== \"string\" ||\n        !Number.isInteger(handoff.sequence) ||\n        handoff.sequence < 0 ||\n        !Array.isArray(handoff.events) ||\n        handoff.events.length > ERROR_BUFFER_LIMIT ||\n        handoff.events.length === 0 ||\n        !Array.isArray(handoff.sanitizedArgv) ||\n        !handoff.sanitizedArgv.every(\n          (argument) => typeof argument === \"string\"\n        ) ||\n        !handoff.fallback ||\n        typeof handoff.fallback.enabled !== \"boolean\" ||\n        Number.isNaN(Date.parse(handoff.startedAt))\n      ) {\n        throw new Error(\"Invalid bootstrap logging handoff.\");\n      }\n      let previousSequence = 0;\n      const acceptedEvents: CliLogEvent[] = [];\n      for (const event of handoff.events) {\n        if (\n          event?.schemaVersion !== 1 ||\n          event.invocationId !== sink.invocationId ||\n          event.traceId !== sink.traceId ||\n          !Number.isInteger(event.sequence) ||\n          event.sequence <= previousSequence ||\n          typeof event.timestamp !== \"string\" ||\n          Number.isNaN(Date.parse(event.timestamp))\n        ) {\n          throw new Error(\"Invalid bootstrap logging event.\");\n        }\n        previousSequence = event.sequence;\n        acceptedEvents.push({\n          ...event,\n          writer: \"canonical\",\n        });\n      }\n      if (handoff.events[0]?.kind !== \"invocation.start\") {\n        throw new Error(\n          \"Bootstrap logging handoff is missing its start event.\"\n        );\n      }\n      for (const event of acceptedEvents) {\n        if (event.kind === \"error\" && event.errorId) {\n          sink.reportedErrorIds.add(event.errorId);\n        }\n        enqueue(event);\n      }\n      if (handoff.sequence < previousSequence) {\n        throw new Error(\"Bootstrap logging sequence is not monotonic.\");\n      }\n      sink.sequence = Math.max(sink.sequence, handoff.sequence);\n      sink.bootstrapAdopted = true;\n    },\n    child(metadata) {\n      return makeLogger(\n        sink,\n        Object.freeze({ ...baseMetadata, ...metadata }),\n        false\n      );\n    },\n    debug(message, metadata) {\n      record({ data: metadata, kind: \"diagnostic\", level: \"debug\", message });\n    },\n    enqueue,\n    error(message, metadata, cause) {\n      record({\n        data: metadata,\n        error: cause,\n        kind: \"error\",\n        level: \"error\",\n        message,\n      });\n    },\n    finish(options: CliLogFinishOptions) {\n      if (!isRoot || sink.finalized || sink.mode === \"off\") {\n        return;\n      }\n      sink.finalized = true;\n      try {\n        const sequence = sink.sequence + 1;\n        sink.sequence = sequence;\n        const event = makeEvent(\n          sink,\n          {\n            commandId: options.commandId,\n            data: {\n              ...options.data,\n              loggingFailed: sink.firstFailure !== undefined,\n            },\n            durationMs:\n              options.durationMs ??\n              Math.max(0, Date.now() - sink.startedAt.getTime()),\n            exitCode: options.exitCode,\n            kind: \"invocation.finish\",\n            level: options.outcome === \"success\" ? \"info\" : \"error\",\n            outcome: options.outcome,\n          },\n          sequence,\n          sink.mode\n        );\n        if (sink.mode === \"errors\") {\n          if (options.outcome === \"success\") {\n            sink.buffer = [];\n            return;\n          }\n          sink.buffer.push(event);\n          if (sink.buffer.length > ERROR_BUFFER_LIMIT) {\n            sink.buffer.splice(0, sink.buffer.length - ERROR_BUFFER_LIMIT);\n          }\n          schedule(sink, async () => {\n            await ensureReady(sink);\n            const body = `${sink.buffer\n              .map((item) => serializeCliLogEvent(item))\n              .join(\"\\n\")}\\n`;\n            await appendFile(sink.paths.logFile, body, {\n              encoding: \"utf8\",\n              mode: 0o600,\n            });\n            sink.buffer = [];\n          });\n          schedule(sink, async () => {\n            await writeLatestPointer(sink);\n          });\n          schedule(sink, async () => {\n            await maybeRunCliLogRetention(sink.paths, sink.env, sink.cwd);\n          });\n          return;\n        }\n        schedule(sink, async () => {\n          await ensureReady(sink);\n          await appendFile(\n            sink.paths.logFile,\n            `${serializeCliLogEvent(event)}\\n`,\n            { encoding: \"utf8\", mode: 0o600 }\n          );\n        });\n        schedule(sink, async () => {\n          await writeLatestPointer(sink);\n        });\n        schedule(sink, async () => {\n          await maybeRunCliLogRetention(sink.paths, sink.env, sink.cwd);\n        });\n      } catch (error) {\n        if (sink.firstFailure === undefined) {\n          sink.firstFailure = error;\n        }\n      }\n    },\n    async flush() {\n      let pending: Promise<void> | undefined;\n      do {\n        pending = sink.tail;\n        await pending.catch(() => undefined);\n      } while (pending !== sink.tail);\n    },\n    hasReportedError(errorId) {\n      return sink.reportedErrorIds.has(errorId);\n    },\n    info(message, metadata) {\n      record({ data: metadata, kind: \"diagnostic\", level: \"info\", message });\n    },\n    invocationId: sink.invocationId,\n    get loggingFailed() {\n      return sink.firstFailure !== undefined;\n    },\n    logPath: sink.mode === \"off\" ? undefined : sink.paths.logFile,\n    mode: sink.mode,\n    record,\n    traceId: sink.traceId,\n    warn(message, metadata) {\n      record({ data: metadata, kind: \"diagnostic\", level: \"warn\", message });\n    },\n  };\n\n  return logger;\n}\n\nexport function createCliLogger(\n  options: CreateCliLoggerOptions = {}\n): AthenaCliLogger {\n  const env = options.env ?? process.env;\n  const sink = createSink(options, env);\n  const logger = makeLogger(sink, sink.baseMetadata, true);\n  if (sink.mode !== \"off\" && !options.skipStart) {\n    logger.record({\n      data: {\n        architecture: process.arch,\n        command: options.command,\n        nodeVersion: process.version,\n        packageVersion: sink.baseMetadata.packageVersion,\n        pid: options.pid ?? process.pid,\n        platform: process.platform,\n      },\n      kind: \"invocation.start\",\n      level: \"info\",\n      message: \"Athena JS CLI invocation started.\",\n    });\n    const configuredMode = options.mode ?? env.ATHENA_CLI_LOG;\n    if (\n      configuredMode !== undefined &&\n      configuredMode !== \"off\" &&\n      configuredMode !== \"errors\" &&\n      configuredMode !== \"all\" &&\n      configuredMode !== \"debug\"\n    ) {\n      logger.warn(\"Unknown ATHENA_CLI_LOG value; using all.\", {\n        configuredMode,\n      });\n    }\n  }\n  return logger;\n}\n\nexport async function ensureLogDirectory(logFile: string): Promise<void> {\n  await mkdir(dirname(logFile), { mode: 0o700, recursive: true });\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 {\n  findGeneratorConfigPath,\n  loadAthenaConfig,\n} from \"../../../generator/config.ts\";\nimport { PACKAGE_VERSION } from \"../../../sdk-version.ts\";\nimport {\n  formatModuleEnablement,\n  resolveAthenaJsPackageRoot,\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  type ValidationCheck,\n  type ValidationReport,\n  validateLocalRuntime,\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  detail?: string;\n  group: DoctorGroup;\n  id: string;\n  status: DoctorSeverity;\n  title: string;\n}\n\nexport interface DoctorReport {\n  checks: DoctorCheck[];\n  cwd: string;\n  errorCount: number;\n  ok: boolean;\n  resolvedMode: \"direct\" | \"gateway\" | \"none\";\n  sdkVersion: string;\n  title: string;\n  warnCount: number;\n}\n\nexport interface DoctorOptions {\n  configPath?: string;\n  cwd?: string;\n  json?: boolean;\n  plain?: boolean;\n  skipRuntime?: boolean;\n  strict?: boolean;\n  validateEnv?: typeof validateProjectEnv;\n  validateLocal?: typeof validateLocalRuntime;\n}\n\nfunction nodeMajor(version: string): number {\n  const major = Number.parseInt(version.split(\".\")[0] ?? \"0\", 10);\n  return Number.isFinite(major) ? major : 0;\n}\n\nfunction displayPath(cwd: string, absolutePath: string): string {\n  const rel = relative(cwd, absolutePath);\n  if (!rel || rel.startsWith(\"..\")) {\n    return absolutePath;\n  }\n  return rel.replace(/\\\\/g, \"/\");\n}\n\nfunction tag(status: DoctorSeverity, capabilities: CliCapabilities): string {\n  const raw =\n    status === \"ok\"\n      ? \"ok  \"\n      : status === \"warn\"\n        ? \"warn\"\n        : status === \"skip\"\n          ? \"skip\"\n          : \"err \";\n  const color =\n    status === \"ok\"\n      ? \"green\"\n      : status === \"warn\"\n        ? \"yellow\"\n        : status === \"skip\"\n          ? \"dim\"\n          : \"red\";\n  return paint(raw, color, capabilities);\n}\n\nfunction toDoctorStatus(status: ValidationCheck[\"status\"]): DoctorSeverity {\n  return status;\n}\n\nexport function formatDoctorReport(\n  report: DoctorReport,\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true })\n): string {\n  const lines: string[] = [paint(report.title, \"bold\", capabilities), \"\"];\n  lines.push(\n    `  ${paint(\"SDK        \", \"dim\", capabilities)}${report.sdkVersion}`\n  );\n  lines.push(\n    `  ${paint(\"CLI package\", \"dim\", capabilities)}${resolveAthenaJsPackageRoot()}`\n  );\n  lines.push(`  ${paint(\"cwd        \", \"dim\", capabilities)}${report.cwd}`);\n  lines.push(\n    `  ${paint(\"mode       \", \"dim\", capabilities)}${report.resolvedMode}`\n  );\n  lines.push(\"\");\n\n  const titles: Record<DoctorGroup, string> = {\n    env: \"Environment\",\n    project: \"Project\",\n    runtime: \"Local runtime\",\n    tooling: \"Tooling\",\n  };\n  let currentGroup: DoctorGroup | undefined;\n  for (const check of report.checks) {\n    if (check.group !== currentGroup) {\n      if (currentGroup) {\n        lines.push(\"\");\n      }\n      currentGroup = check.group;\n      lines.push(paint(titles[check.group], \"bold\", capabilities));\n      lines.push(\"\");\n    }\n    lines.push(`  [${tag(check.status, capabilities)}] ${check.title}`);\n    if (check.detail) {\n      for (const line of check.detail.split(\"\\n\")) {\n        lines.push(paint(`         ${line}`, \"dim\", capabilities));\n      }\n    }\n  }\n\n  lines.push(\"\");\n  lines.push(\n    paint(\n      `  ${report.errorCount} error(s) · ${report.warnCount} warning(s)`,\n      \"dim\",\n      capabilities\n    )\n  );\n  lines.push(report.ok ? \"result: OK\" : \"result: FAILED\");\n  return lines.join(\"\\n\");\n}\n\nfunction pushEnvChecks(checks: DoctorCheck[], env: EnvCheckResult): void {\n  for (const field of env.checks) {\n    checks.push({\n      detail: field.message,\n      group: \"env\",\n      id: `env.${field.field}`,\n      status: field.severity,\n      title: field.sourceKey\n        ? `${field.field} (${field.sourceKey})`\n        : field.field,\n    });\n  }\n}\n\nfunction pushRuntimeChecks(\n  checks: DoctorCheck[],\n  runtime: ValidationReport\n): void {\n  for (const check of runtime.checks) {\n    checks.push({\n      detail: check.detail,\n      group: \"runtime\",\n      id: `runtime.${check.id}`,\n      status: toDoctorStatus(check.status),\n      title: check.title,\n    });\n  }\n}\n\nexport async function runCliDoctor(\n  options: DoctorOptions = {}\n): Promise<DoctorReport> {\n  const cwd = options.cwd ?? process.cwd();\n  const checks: DoctorCheck[] = [];\n  const runEnv = options.validateEnv ?? validateProjectEnv;\n  const runLocal = options.validateLocal ?? validateLocalRuntime;\n\n  checks.push({\n    detail: resolveAthenaJsPackageRoot(),\n    group: \"tooling\",\n    id: \"cli.sdk\",\n    status: \"ok\",\n    title: `@xylex-group/athena ${PACKAGE_VERSION}`,\n  });\n\n  const major = nodeMajor(process.versions.node);\n  checks.push({\n    detail:\n      major >= MIN_NODE_MAJOR\n        ? `Required: >=${MIN_NODE_MAJOR}.0.0`\n        : `Athena JS requires Node.js ${MIN_NODE_MAJOR} or newer.`,\n    group: \"tooling\",\n    id: \"cli.node\",\n    status: major >= MIN_NODE_MAJOR ? \"ok\" : \"error\",\n    title: `Node.js ${process.versions.node}`,\n  });\n\n  const configuredPath = options.configPath\n    ? resolve(cwd, options.configPath)\n    : findGeneratorConfigPath(cwd);\n  if (configuredPath && existsSync(configuredPath)) {\n    checks.push({\n      detail: displayPath(cwd, configuredPath),\n      group: \"project\",\n      id: \"project.config\",\n      status: \"ok\",\n      title: \"Generator config found\",\n    });\n  } else if (options.configPath) {\n    checks.push({\n      detail: `Missing ${options.configPath}. Pass a real --config path or run athena-js init.`,\n      group: \"project\",\n      id: \"project.config\",\n      status: \"error\",\n      title: \"Generator config missing\",\n    });\n  } else {\n    checks.push({\n      detail:\n        \"No athena.config.ts (or compatible file) in cwd. Env-only generate still works; run athena-js init to commit one.\",\n      group: \"project\",\n      id: \"project.config\",\n      status: \"warn\",\n      title: \"Generator config not found\",\n    });\n  }\n\n  if (configuredPath && existsSync(configuredPath)) {\n    try {\n      const loaded = await loadAthenaConfig({\n        configPath: configuredPath,\n        cwd,\n      });\n      checks.push({\n        detail: formatModuleEnablement(loaded.config.modules).join(\"\\n\"),\n        group: \"project\",\n        id: \"project.modules\",\n        status: \"ok\",\n        title: \"Packaged migrate modules\",\n      });\n    } catch (error) {\n      checks.push({\n        detail:\n          error instanceof Error\n            ? error.message\n            : \"Could not load athena.config.ts modules.\",\n        group: \"project\",\n        id: \"project.modules\",\n        status: \"warn\",\n        title: \"Packaged migrate modules\",\n      });\n    }\n  }\n\n  const env = runEnv({\n    cwd,\n    mode: \"auto\",\n    strict: options.strict,\n  });\n  pushEnvChecks(checks, env);\n\n  if (options.skipRuntime) {\n    checks.push({\n      detail: \"Skipped (--skip-runtime).\",\n      group: \"runtime\",\n      id: \"runtime.inspect\",\n      status: \"skip\",\n      title: \"Local runtime inspect\",\n    });\n  } else if (env.resolvedMode === \"none\") {\n    checks.push({\n      detail:\n        \"No DATABASE_URL / ATHENA_URL profile. Set env or config, then re-run doctor.\",\n      group: \"runtime\",\n      id: \"runtime.inspect\",\n      status: \"skip\",\n      title: \"Local runtime inspect\",\n    });\n  } else if (env.resolvedMode === \"gateway\") {\n    checks.push({\n      detail:\n        \"Gateway mode: local Data Runtime inspect is skipped. Use generate against the gateway.\",\n      group: \"runtime\",\n      id: \"runtime.inspect\",\n      status: \"skip\",\n      title: \"Local runtime inspect\",\n    });\n  } else {\n    try {\n      const runtime = await runLocal({\n        configPath: options.configPath,\n        cwd,\n        json: options.json,\n        plain: options.plain,\n        strict: options.strict,\n      });\n      pushRuntimeChecks(checks, runtime);\n    } catch (error) {\n      const message =\n        error instanceof Error\n          ? error.message\n          : \"Unknown runtime inspect error.\";\n      checks.push({\n        detail: message,\n        group: \"runtime\",\n        id: \"runtime.inspect\",\n        status: \"error\",\n        title: \"Local runtime inspect failed\",\n      });\n    }\n  }\n\n  const errorCount = checks.filter((check) => check.status === \"error\").length;\n  const warnCount = checks.filter((check) => check.status === \"warn\").length;\n  return {\n    checks,\n    cwd,\n    errorCount,\n    ok: errorCount === 0,\n    resolvedMode: env.resolvedMode,\n    sdkVersion: PACKAGE_VERSION,\n    title: \"Athena JS · doctor\",\n    warnCount,\n  };\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  return join(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\");\n}\n\nexport function formatModuleEnablement(\n  modules:\n    | {\n        auth?: boolean;\n        billing?: boolean;\n        chat?: boolean;\n        eventIngress?: boolean;\n      }\n    | undefined\n): readonly string[] {\n  const auth =\n    modules == null\n      ? \"enabled (default)\"\n      : modules.auth === true\n        ? \"enabled\"\n        : \"disabled\";\n  const flag = (value: boolean | undefined): string =>\n    value === true ? \"enabled\" : \"disabled\";\n  return [\n    `  Auth            ${auth}`,\n    `  Chat            ${flag(modules?.chat)}`,\n    `  Event Ingress   ${flag(modules?.eventIngress)}`,\n    `  Billing         ${flag(modules?.billing)}`,\n  ];\n}\n\nexport function resolveCliExecutionMode(): \"workspace-source\" | \"packed-dist\" {\n  const href = import.meta.url.replace(/\\\\/g, \"/\");\n  return href.includes(\"/src/cli/\") ? \"workspace-source\" : \"packed-dist\";\n}\n\nexport function formatCliIdentity(input: {\n  configPath?: string | null;\n  modules?: {\n    auth?: boolean;\n    billing?: boolean;\n    chat?: boolean;\n    eventIngress?: boolean;\n  };\n}): string {\n  return [\n    `CLI version     ${PACKAGE_VERSION}`,\n    `CLI source      ${resolveCliExecutionMode()}`,\n    `CLI package     ${resolveAthenaJsPackageRoot()}`,\n    `Config path     ${input.configPath ?? \"(none)\"}`,\n    \"Modules:\",\n    ...formatModuleEnablement(input.modules),\n  ].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  planHasBlockingConflicts,\n  planMigrations,\n} from \"../../../migrations/planner.ts\";\nimport { createPostgresMigrationBackend } from \"../../../migrations/postgres.ts\";\nimport {\n  ATHENA_MIGRATE_COMMAND,\n  ATHENA_MIGRATE_REPAIR_YES_COMMAND,\n} from \"../../../migrations/commands.ts\";\nimport type {\n  AppliedMigration,\n  MigrationPlan,\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  collectBillingIngressRouteChecks,\n  collectEmbeddedSchemaDatabaseChecks,\n  collectLocalBillingValidationChecks,\n  isValidateLedgerTable,\n  type LocalBillingValidateInput,\n  type VALIDATE_LEDGER_TABLES,\n} from \"./validate-billing.ts\";\n\nexport type ValidationSeverity = \"ok\" | \"warn\" | \"error\" | \"skip\";\n\nexport interface ValidationCheck {\n  detail?: string;\n  group: \"data\" | \"auth\" | \"passkey\" | \"billing\";\n  id: string;\n  status: ValidationSeverity;\n  title: string;\n}\n\nexport interface ValidationReport {\n  checks: ValidationCheck[];\n  errorCount: number;\n  ok: boolean;\n  target?: { database: string; provider: string };\n  title: string;\n  warnCount: number;\n}\n\nexport interface ValidateLocalInspect {\n  applicationPlan?: () => Promise<MigrationPlan>;\n  appliedLedgerVersions?: (\n    ledger: (typeof VALIDATE_LEDGER_TABLES)[number]\n  ) => Promise<readonly number[]>;\n  authorization?: () => AthenaPrincipalRightsProjection;\n  authPlan?: () => Promise<AthenaAuthMigrationPlan>;\n  billing?: () => LocalBillingValidateInput | null | undefined;\n  columns?: (schema: string, table: string) => Promise<readonly string[]>;\n  modules?: () => {\n    billing?: boolean;\n    chat?: boolean;\n    eventIngress?: boolean;\n  };\n  passkey?: () => {\n    enabled?: boolean;\n    origins?: readonly string[];\n    relatedOrigins?: readonly string[];\n    rpId?: string | null;\n    rpName?: string | null;\n  };\n  ping?: () => Promise<void>;\n  tables?: (schema: string) => Promise<readonly string[]>;\n  target?: () => Promise<{\n    database: string;\n    directory: string;\n    provider: string;\n  }>;\n}\n\nexport interface ValidateLocalOptions {\n  configPath?: string;\n  cwd?: string;\n  environment?: \"development\" | \"production\";\n  inspect?: ValidateLocalInspect;\n  json?: boolean;\n  plain?: boolean;\n  strict?: boolean;\n}\n\nfunction tag(\n  status: ValidationSeverity,\n  capabilities: CliCapabilities\n): string {\n  const raw =\n    status === \"ok\"\n      ? \"ok  \"\n      : status === \"warn\"\n        ? \"warn\"\n        : status === \"skip\"\n          ? \"skip\"\n          : \"err \";\n  const color =\n    status === \"ok\"\n      ? \"green\"\n      : status === \"warn\"\n        ? \"yellow\"\n        : status === \"skip\"\n          ? \"dim\"\n          : \"red\";\n  return paint(raw, color, capabilities);\n}\n\nexport function formatValidationReport(\n  report: ValidationReport,\n  capabilities: CliCapabilities = resolveCliCapabilities({ plain: true })\n): string {\n  const lines: string[] = [paint(report.title, \"bold\", capabilities), \"\"];\n  if (report.target) {\n    lines.push(paint(\"Target\", \"bold\", capabilities), \"\");\n    lines.push(\n      `  ${paint(\"Provider    \", \"dim\", capabilities)}${report.target.provider}`\n    );\n    lines.push(\n      `  ${paint(\"Database    \", \"dim\", capabilities)}${report.target.database}`\n    );\n    lines.push(\"\");\n  }\n\n  let currentGroup: ValidationCheck[\"group\"] | undefined;\n  const titles: Record<ValidationCheck[\"group\"], string> = {\n    auth: \"Embedded Auth\",\n    billing: \"Billing\",\n    data: \"Data runtime\",\n    passkey: \"Passkeys\",\n  };\n  for (const check of report.checks) {\n    if (check.group !== currentGroup) {\n      if (currentGroup) {\n        lines.push(\"\");\n      }\n      currentGroup = check.group;\n      lines.push(paint(titles[check.group], \"bold\", capabilities), \"\");\n    }\n    lines.push(`  [${tag(check.status, capabilities)}] ${check.title}`);\n    if (check.detail) {\n      for (const line of check.detail.split(\"\\n\")) {\n        lines.push(paint(`         ${line}`, \"dim\", capabilities));\n      }\n    }\n  }\n\n  lines.push(\"\");\n  lines.push(\n    paint(\n      `  ${report.errorCount} error(s) · ${report.warnCount} warning(s)`,\n      \"dim\",\n      capabilities\n    )\n  );\n  lines.push(report.ok ? \"result: OK\" : \"result: FAILED\");\n  return lines.join(\"\\n\");\n}\n\nfunction push(\n  checks: ValidationCheck[],\n  check: ValidationCheck,\n  strict: boolean\n): void {\n  if (strict && check.status === \"warn\") {\n    checks.push({ ...check, status: \"error\" });\n    return;\n  }\n  checks.push(check);\n}\n\nasync function defaultInspect(\n  options: ValidateLocalOptions\n): Promise<ValidateLocalInspect> {\n  const cwd = options.cwd ?? process.cwd();\n  const loaded = await loadGeneratorConfig({\n    configPath: options.configPath,\n    cwd,\n  });\n  const authority = resolveGeneratorDatabaseAuthority({\n    applyProjectEnv: false,\n    cwd,\n    loaded,\n    mode: \"direct\",\n  });\n  const provider = authority.provider;\n  authority.restoreEnv();\n  if (provider.kind !== \"postgres\" || provider.mode !== \"direct\") {\n    throw new Error(\n      `Local validate requires postgres/direct (got ${provider.kind}/${provider.mode}).`\n    );\n  }\n  const connectionString = provider.connectionString;\n  const database =\n    provider.database ??\n    (() => {\n      try {\n        const url = new URL(\n          connectionString.replace(/^postgresql:/i, \"postgres:\")\n        );\n        return (\n          decodeURIComponent(url.pathname.replace(/^\\//, \"\")) || \"postgres\"\n        );\n      } catch {\n        return \"postgres\";\n      }\n    })();\n  const directory = loaded.config.migrations.directory || \"athena/migrations\";\n\n  return {\n    async applicationPlan() {\n      const backend = await createPostgresMigrationBackend({\n        connectionString,\n        database,\n      });\n      try {\n        const local = await discoverMigrations({ cwd, directory });\n        let applied: AppliedMigration[] = [];\n        try {\n          applied = await backend.listAppliedMigrations();\n        } catch {\n          applied = [];\n        }\n        return planMigrations({ applied, local });\n      } finally {\n        await backend.close();\n      }\n    },\n    async appliedLedgerVersions(ledger) {\n      if (!isValidateLedgerTable(ledger)) {\n        return [];\n      }\n      const db = await createPostgresAuthDatabase(connectionString);\n      try {\n        const result = await db.query<{ version: number }>(\n          `SELECT version FROM ${ledger} ORDER BY version`\n        );\n        return result.rows.map((row) => Number(row.version));\n      } catch {\n        return [];\n      } finally {\n        await db.close?.();\n      }\n    },\n    async authPlan() {\n      const db = await createPostgresAuthDatabase(connectionString);\n      try {\n        return await planAthenaAuthSchema(db, { inspectSchema: true });\n      } finally {\n        await db.close?.();\n      }\n    },\n    billing() {\n      return loaded.config.modules?.billing === true ? {} : null;\n    },\n    async columns(schema, table) {\n      const db = await createPostgresAuthDatabase(connectionString);\n      try {\n        const result = await db.query<{ column_name: string }>(\n          `SELECT column_name\n           FROM information_schema.columns\n           WHERE table_schema = $1 AND table_name = $2`,\n          [schema, table]\n        );\n        return result.rows.map((row) => row.column_name);\n      } finally {\n        await db.close?.();\n      }\n    },\n    modules() {\n      return {\n        billing: loaded.config.modules?.billing === true,\n        chat: loaded.config.modules?.chat === true,\n        eventIngress:\n          loaded.config.modules?.eventIngress === true ||\n          loaded.config.modules?.billing === true,\n      };\n    },\n    passkey() {\n      const loadedEnv = loadProjectEnv({ cwd });\n      const env: Record<string, string | undefined> = {};\n      for (const [key, entry] of loadedEnv.values) {\n        env[key] = entry.value;\n      }\n      const identity = resolveAthenaAppIdentity({ env });\n      if (!identity) {\n        return {};\n      }\n      return {\n        origins: [identity.origin],\n        rpId: identity.hostname,\n        rpName: identity.name,\n      };\n    },\n    async ping() {\n      const db = await createPostgresAuthDatabase(connectionString);\n      try {\n        await db.query(\"SELECT 1 AS ok\");\n      } finally {\n        await db.close?.();\n      }\n    },\n    async tables(schema) {\n      const db = await createPostgresAuthDatabase(connectionString);\n      try {\n        const result = await db.query<{ table_name: string }>(\n          `SELECT table_name\n           FROM information_schema.tables\n           WHERE table_schema = $1`,\n          [schema]\n        );\n        return result.rows.map((row) => row.table_name);\n      } finally {\n        await db.close?.();\n      }\n    },\n    async target() {\n      return {\n        database,\n        directory,\n        provider: `postgres/${provider.mode}`,\n      };\n    },\n  };\n}\n\nexport async function validateLocalRuntime(\n  options: ValidateLocalOptions = {}\n): Promise<ValidationReport> {\n  const strict = Boolean(options.strict);\n  const environment =\n    options.environment ??\n    (process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n  const checks: ValidationCheck[] = [];\n  let inspect: ValidateLocalInspect;\n  let target: ValidationReport[\"target\"];\n\n  try {\n    inspect = options.inspect ?? (await defaultInspect(options));\n    target = await inspect.target?.();\n    push(\n      checks,\n      {\n        detail: target\n          ? `${target.provider} · ${target.database}`\n          : \"postgres/direct\",\n        group: \"data\",\n        id: \"data.config\",\n        status: \"ok\",\n        title: \"Generator config\",\n      },\n      strict\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    push(\n      checks,\n      {\n        detail: message,\n        group: \"data\",\n        id: \"data.config\",\n        status: \"error\",\n        title: \"Generator config\",\n      },\n      strict\n    );\n    return finalize(checks, target);\n  }\n\n  try {\n    await inspect.ping?.();\n    push(\n      checks,\n      {\n        group: \"data\",\n        id: \"data.connect\",\n        status: \"ok\",\n        title: \"Database connection\",\n      },\n      strict\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    push(\n      checks,\n      {\n        detail: message,\n        group: \"data\",\n        id: \"data.connect\",\n        status: \"error\",\n        title: \"Database connection\",\n      },\n      strict\n    );\n    return finalize(checks, target);\n  }\n\n  if (inspect.applicationPlan) {\n    try {\n      const plan = await inspect.applicationPlan();\n      if (planHasBlockingConflicts(plan)) {\n        push(\n          checks,\n          {\n            detail: `${plan.conflicts.length} history conflict(s). Restore applied files or add a forward migration.`,\n            group: \"data\",\n            id: \"data.migrations\",\n            status: \"error\",\n            title: \"Application migrations\",\n          },\n          strict\n        );\n      } else if (plan.pending.length > 0) {\n        push(\n          checks,\n          {\n            detail: `${plan.pending.length} pending. Run ${ATHENA_MIGRATE_COMMAND}.`,\n            group: \"data\",\n            id: \"data.migrations\",\n            status: \"warn\",\n            title: \"Application migrations\",\n          },\n          strict\n        );\n      } else {\n        push(\n          checks,\n          {\n            detail: `${plan.applied.length} applied`,\n            group: \"data\",\n            id: \"data.migrations\",\n            status: \"ok\",\n            title: \"Application migrations\",\n          },\n          strict\n        );\n      }\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      push(\n        checks,\n        {\n          detail: message,\n          group: \"data\",\n          id: \"data.migrations\",\n          status: \"error\",\n          title: \"Application migrations\",\n        },\n        strict\n      );\n    }\n  }\n\n  let authPlan: AthenaAuthMigrationPlan | undefined;\n  if (inspect.authPlan) {\n    try {\n      authPlan = await inspect.authPlan();\n      if (authPlan.conflictCount > 0 || authPlan.hasBlockingDrift) {\n        push(\n          checks,\n          {\n            detail: `${authPlan.conflictCount} conflict(s), ${authPlan.driftCount} drift. Use ${ATHENA_MIGRATE_REPAIR_YES_COMMAND} after inspecting.`,\n            group: \"auth\",\n            id: \"auth.schema\",\n            status: \"error\",\n            title: \"Embedded Auth schema\",\n          },\n          strict\n        );\n      } else if (authPlan.pendingCount > 0) {\n        push(\n          checks,\n          {\n            detail: `${authPlan.pendingCount} pending / ${authPlan.appliedCount} applied. Run ${ATHENA_MIGRATE_COMMAND}.`,\n            group: \"auth\",\n            id: \"auth.schema\",\n            status: \"warn\",\n            title: \"Embedded Auth schema\",\n          },\n          strict\n        );\n      } else {\n        push(\n          checks,\n          {\n            detail: `${authPlan.appliedCount} applied`,\n            group: \"auth\",\n            id: \"auth.schema\",\n            status: \"ok\",\n            title: \"Embedded Auth schema\",\n          },\n          strict\n        );\n      }\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      push(\n        checks,\n        {\n          detail: message,\n          group: \"auth\",\n          id: \"auth.schema\",\n          status: \"error\",\n          title: \"Embedded Auth schema\",\n        },\n        strict\n      );\n    }\n  }\n\n  if (inspect.authorization) {\n    const projection = inspect.authorization();\n    const mapping = validateAthenaRightsProjection(projection);\n    const firstIssue = mapping.issues[0];\n    push(\n      checks,\n      {\n        detail: firstIssue?.message,\n        group: \"auth\",\n        id: \"auth.authorization.mapping\",\n        status: mapping.ok ? \"ok\" : \"error\",\n        title: \"Authorization role mapping\",\n      },\n      strict\n    );\n  }\n\n  const tables = inspect.tables\n    ? new Set(\n        (await inspect.tables(\"athena\").catch(() => [] as const)).map((name) =>\n          name.toLowerCase()\n        )\n      )\n    : undefined;\n\n  if (tables) {\n    if (tables.has(\"users\") && tables.has(\"sessions\")) {\n      push(\n        checks,\n        {\n          detail: \"athena.users + athena.sessions\",\n          group: \"auth\",\n          id: \"auth.core-tables\",\n          status: \"ok\",\n          title: \"Core Auth tables\",\n        },\n        strict\n      );\n    } else {\n      push(\n        checks,\n        {\n          detail:\n            `Expected athena.users and athena.sessions. Run ${ATHENA_MIGRATE_COMMAND}.`,\n          group: \"auth\",\n          id: \"auth.core-tables\",\n          status: tables.size === 0 ? \"warn\" : \"error\",\n          title: \"Core Auth tables\",\n        },\n        strict\n      );\n    }\n\n    if (tables.has(\"verifications\")) {\n      push(\n        checks,\n        {\n          detail: \"Used for passkey challenge consume (DELETE … RETURNING)\",\n          group: \"passkey\",\n          id: \"passkey.challenges\",\n          status: \"ok\",\n          title: \"Challenge store\",\n        },\n        strict\n      );\n    } else {\n      push(\n        checks,\n        {\n          detail:\n            \"athena.verifications missing — passkey challenges cannot persist.\",\n          group: \"passkey\",\n          id: \"passkey.challenges\",\n          status: authPlan && authPlan.pendingCount > 0 ? \"warn\" : \"error\",\n          title: \"Challenge store\",\n        },\n        strict\n      );\n    }\n\n    if (tables.has(\"passkeys\")) {\n      const columns = new Set(\n        (\n          (await inspect.columns?.(\"athena\", \"passkeys\").catch(() => [])) ?? []\n        ).map((name) => name.toLowerCase())\n      );\n      const required = [\"credential_id\", \"counter\", \"user_id\", \"public_key\"];\n      const missingRequired = required.filter((name) => !columns.has(name));\n      if (missingRequired.length > 0) {\n        push(\n          checks,\n          {\n            detail: `Missing columns: ${missingRequired.join(\", \")}`,\n            group: \"passkey\",\n            id: \"passkey.table\",\n            status: \"error\",\n            title: \"Passkeys table\",\n          },\n          strict\n        );\n      } else if (columns.has(\"updated_at\")) {\n        push(\n          checks,\n          {\n            detail: \"athena.passkeys with updated_at\",\n            group: \"passkey\",\n            id: \"passkey.table\",\n            status: \"ok\",\n            title: \"Passkeys table\",\n          },\n          strict\n        );\n      } else {\n        push(\n          checks,\n          {\n            detail:\n              `updated_at missing. Run ${ATHENA_MIGRATE_COMMAND} (Auth generation 22).`,\n            group: \"passkey\",\n            id: \"passkey.table\",\n            status: \"warn\",\n            title: \"Passkeys table\",\n          },\n          strict\n        );\n      }\n    } else {\n      push(\n        checks,\n        {\n          detail:\n            \"athena.passkeys missing until Embedded Auth migrations apply.\",\n          group: \"passkey\",\n          id: \"passkey.table\",\n          status: \"warn\",\n          title: \"Passkeys table\",\n        },\n        strict\n      );\n    }\n  }\n\n  const passkey = inspect.passkey?.();\n  const envRpId =\n    process.env.PASSKEY_RP_ID?.trim() ||\n    process.env.ATHENA_PASSKEY_RP_ID?.trim() ||\n    null;\n  try {\n    const snapshot = createPasskeyRelyingPartySnapshot({\n      environment,\n      passkey: {\n        origins: [...(passkey?.origins ?? [])],\n        relatedOrigins: [...(passkey?.relatedOrigins ?? [])],\n        rpId: passkey?.rpId ?? envRpId,\n        rpName: passkey?.rpName ?? null,\n      },\n      trustedOrigins: [],\n    });\n    const usingDevDefault =\n      snapshot.id === \"localhost\" && environment !== \"production\";\n    push(\n      checks,\n      {\n        detail: usingDevDefault\n          ? `rpId=${snapshot.id} (development default). Set passkey.rpId for production.`\n          : `rpId=${snapshot.id} · ${snapshot.origins.length} origin(s)`,\n        group: \"passkey\",\n        id: \"passkey.rp\",\n        status: usingDevDefault ? \"warn\" : \"ok\",\n        title: \"Relying party\",\n      },\n      strict\n    );\n  } catch (error) {\n    const message =\n      error instanceof AthenaConfigurationError\n        ? error.message\n        : error instanceof Error\n          ? error.message\n          : String(error);\n    push(\n      checks,\n      {\n        detail: message,\n        group: \"passkey\",\n        id: \"passkey.rp\",\n        status: \"error\",\n        title: \"Relying party\",\n      },\n      strict\n    );\n  }\n\n  const billingInput = inspect.billing?.();\n  for (const check of collectLocalBillingValidationChecks(billingInput)) {\n    push(checks, check, strict);\n  }\n\n  const modules = inspect.modules?.() ?? {};\n  for (const check of collectBillingIngressRouteChecks({\n    billingEnabled: modules.billing === true,\n    cwd: options.cwd ?? process.cwd(),\n  })) {\n    push(checks, check, strict);\n  }\n\n  if (\n    inspect.tables &&\n    (modules.billing || modules.chat || modules.eventIngress)\n  ) {\n    const [billingTables, publicTables, athenaTables] = await Promise.all([\n      inspect.tables(\"billing\").catch(() => [] as const),\n      inspect.tables(\"public\").catch(() => [] as const),\n      inspect.tables(\"athena\").catch(() => [] as const),\n    ]);\n    const billingSubscriptionColumns = inspect.columns\n      ? await inspect\n          .columns(\"billing\", \"billing_subscriptions\")\n          .catch(() => [] as const)\n      : undefined;\n    const billingLedgerVersions = inspect.appliedLedgerVersions\n      ? await inspect\n          .appliedLedgerVersions(\"athena_billing_migrations\")\n          .catch(() => [] as const)\n      : [];\n    const chatLedgerVersions = inspect.appliedLedgerVersions\n      ? await inspect\n          .appliedLedgerVersions(\"athena_chat_schema_migrations\")\n          .catch(() => [] as const)\n      : [];\n    const eventIngressLedgerVersions = inspect.appliedLedgerVersions\n      ? await inspect\n          .appliedLedgerVersions(\"athena_event_ingress_migrations\")\n          .catch(() => [] as const)\n      : [];\n    for (const check of collectEmbeddedSchemaDatabaseChecks({\n      athenaTables,\n      billingEnabled: modules.billing === true,\n      billingLedgerVersions,\n      billingSubscriptionColumns,\n      billingTables,\n      chatEnabled: modules.chat === true,\n      chatLedgerVersions,\n      eventIngressEnabled: modules.eventIngress === true,\n      eventIngressLedgerVersions,\n      publicTables,\n    })) {\n      push(checks, check, strict);\n    }\n  }\n\n  return finalize(checks, target);\n}\n\nfunction finalize(\n  checks: ValidationCheck[],\n  target: ValidationReport[\"target\"]\n): ValidationReport {\n  const errorCount = checks.filter((check) => check.status === \"error\").length;\n  const warnCount = checks.filter((check) => check.status === \"warn\").length;\n  return {\n    checks,\n    errorCount,\n    ok: errorCount === 0,\n    target,\n    title: \"Athena JS · validate local\",\n    warnCount,\n  };\n}\n","import { AthenaConfigurationError } from \"../../../config/errors.ts\";\nimport type { AthenaAppIdentity } from \"../../app-identity.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 interface 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;\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 =\n    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\n          ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n          : \"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\n          ? \"ATHENA_PASSKEY_APP_ORIGIN_REQUIRED\"\n          : \"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  | \"role\"\n  | \"default-role\"\n  | \"stored\"\n  | \"none\";\n\nexport type AthenaRightsResolutionReason =\n  | \"role_not_mapped\"\n  | \"default_role_not_mapped\"\n  | \"no_rights_configured\";\n\nexport type AthenaRightsResolution =\n  | {\n      ok: true;\n      role: string;\n      source: Exclude<AthenaRightsResolutionSource, \"none\">;\n      rights: readonly string[];\n    }\n  | {\n      ok: false;\n      reason: AthenaRightsResolutionReason;\n      role: string;\n      rights: readonly [];\n      source: \"none\";\n    };\n\nexport const ATHENA_RIGHTS_RESOLUTION_KIND =\n  \"athena_rights_resolution\" as const;\n\nexport interface AthenaRightsResolutionDiagnostic {\n  configuredRoles: readonly string[];\n  defaultRole?: string;\n  effectiveRightCount: number;\n  effectiveRights: readonly string[];\n  kind: typeof ATHENA_RIGHTS_RESOLUTION_KIND;\n  mode: AthenaRightsResolutionMode;\n  reason?: AthenaRightsResolutionReason;\n  selectedRole?: string;\n  source: AthenaRightsResolutionSource;\n  storedRole?: string;\n  userId: string;\n}\n\nexport type AthenaRightsResolutionDiagnosticListener = (\n  diagnostic: AthenaRightsResolutionDiagnostic\n) => void;\n\nexport interface AthenaRightsProjectionValidationIssue {\n  message: string;\n  path: string;\n}\n\nexport interface AthenaRightsProjectionValidation {\n  issues: readonly AthenaRightsProjectionValidationIssue[];\n  ok: boolean;\n}\n\nexport const ATHENA_PERSISTED_AUTHORIZATION_RESOLUTION_KIND =\n  \"athena_persisted_authorization_resolution\" as const;\n\nexport interface AthenaPersistedAuthorizationDiagnostic {\n  assignment: \"present\" | \"absent\" | \"unknown\";\n  error?: string;\n  fallback: \"forbidden\" | \"legacy-role-map\";\n  kind: typeof ATHENA_PERSISTED_AUTHORIZATION_RESOLUTION_KIND;\n  resolution: \"ok\" | \"failed\";\n  source: \"persisted\";\n  userId: string;\n}\n\nconst listeners = new Set<AthenaRightsResolutionDiagnosticListener>();\nlet lastDiagnostic: AthenaRightsResolutionDiagnostic | undefined;\nlet lastPersistedDiagnostic: AthenaPersistedAuthorizationDiagnostic | undefined;\n\nexport function subscribeAthenaRightsResolutionDiagnostics(\n  listener: AthenaRightsResolutionDiagnosticListener\n): () => void {\n  listeners.add(listener);\n  return () => {\n    listeners.delete(listener);\n  };\n}\n\nexport function getLastAthenaRightsResolutionDiagnostic():\n  | AthenaRightsResolutionDiagnostic\n  | undefined {\n  return lastDiagnostic;\n}\n\nexport function getLastAthenaPersistedAuthorizationDiagnostic():\n  | AthenaPersistedAuthorizationDiagnostic\n  | undefined {\n  return lastPersistedDiagnostic;\n}\n\nexport function formatAthenaPersistedAuthorizationDiagnostic(\n  diagnostic: AthenaPersistedAuthorizationDiagnostic\n): string {\n  const lines = [\n    \"Auth authorization\",\n    \"Source .............. persisted\",\n    `User assignment ..... ${diagnostic.assignment}`,\n    `Resolution .......... ${diagnostic.resolution}`,\n    `Fallback ............ ${diagnostic.fallback}`,\n  ];\n  if (diagnostic.error) {\n    lines.push(`Error ................ ${diagnostic.error}`);\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function emitAthenaPersistedAuthorizationDiagnostic(\n  diagnostic: AthenaPersistedAuthorizationDiagnostic\n): void {\n  lastPersistedDiagnostic = diagnostic;\n  if (diagnostic.resolution === \"failed\") {\n    console.error(\n      \"[athena]\",\n      formatAthenaPersistedAuthorizationDiagnostic(diagnostic)\n    );\n  }\n}\n\nexport function resetAthenaRightsResolutionDiagnostics(): void {\n  lastDiagnostic = undefined;\n  lastPersistedDiagnostic = undefined;\n}\n\nexport function defineAthenaRights(\n  keys: readonly string[]\n): readonly AthenaRightKey[] {\n  return Object.freeze(keys.map((key) => parseAthenaRightKey(key)));\n}\n\nexport function resolveAuthorizationMode(\n  authorization?: AthenaPrincipalRightsProjection\n): AthenaRightsResolutionMode {\n  return authorization?.mode === \"stored\" ? \"stored\" : \"role\";\n}\n\nexport function configuredRoleNames(\n  authorization?: AthenaPrincipalRightsProjection\n): readonly string[] {\n  return Object.keys(authorization?.rightsByRole ?? {});\n}\n\nexport function resolveStoredUserRightsResolution(\n  user: {\n    metadata?: unknown;\n    rights?: readonly string[];\n    role?: string | null;\n  },\n  authorization?: AthenaPrincipalRightsProjection,\n  options?: { userId?: string }\n): AthenaRightsResolution {\n  const mode = resolveAuthorizationMode(authorization);\n  const resolution =\n    mode === \"stored\"\n      ? resolveStoredMode(user)\n      : resolveRoleMode(user, authorization);\n  emitAthenaRightsResolutionDiagnostic(\n    diagnosticFromResolution(resolution, user, authorization, options?.userId)\n  );\n  return resolution;\n}\n\nexport function effectiveRightsFromResolution(\n  resolution: AthenaRightsResolution\n): readonly string[] {\n  return resolution.rights;\n}\n\nexport function validateAthenaRightsProjection(\n  authorization: AthenaPrincipalRightsProjection | undefined\n): AthenaRightsProjectionValidation {\n  const issues: AthenaRightsProjectionValidationIssue[] = [];\n  if (!authorization) {\n    return { issues, ok: true };\n  }\n  const mode = resolveAuthorizationMode(authorization);\n  if (mode === \"stored\") {\n    return { issues, ok: true };\n  }\n  const table = authorization.rightsByRole;\n  const roles = configuredRoleNames(authorization);\n  if (!table || roles.length === 0) {\n    return { issues, ok: true };\n  }\n  const defaultRole = authorization.defaultRole?.trim();\n  if (defaultRole && !(table && Object.hasOwn(table, defaultRole))) {\n    issues.push({\n      message: `defaultRole \"${defaultRole}\" is not present in rightsByRole`,\n      path: \"auth.authorization.defaultRole\",\n    });\n  }\n  if (table) {\n    for (const role of roles) {\n      const mapped = table[role];\n      if (!Array.isArray(mapped)) {\n        issues.push({\n          message: `rightsByRole.${role} must be a string array`,\n          path: `auth.authorization.rightsByRole.${role}`,\n        });\n        continue;\n      }\n      for (const [index, entry] of mapped.entries()) {\n        if (typeof entry !== \"string\") {\n          issues.push({\n            message: `rightsByRole.${role}[${index}] is not a string`,\n            path: `auth.authorization.rightsByRole.${role}`,\n          });\n          continue;\n        }\n        try {\n          parseAthenaRightKey(entry);\n        } catch (error) {\n          issues.push({\n            message:\n              error instanceof Error ? error.message : `invalid right ${entry}`,\n            path: `auth.authorization.rightsByRole.${role}`,\n          });\n        }\n      }\n    }\n  }\n  return { issues, ok: issues.length === 0 };\n}\n\nexport function formatAthenaRightsResolutionDiagnostic(\n  diagnostic: AthenaRightsResolutionDiagnostic\n): string {\n  const lines = [\n    \"Auth authorization\",\n    `Stored role ........ ${diagnostic.storedRole ?? \"(absent)\"}`,\n    `Configured roles ... ${\n      diagnostic.configuredRoles.length > 0\n        ? diagnostic.configuredRoles.join(\", \")\n        : \"(none)\"\n    }`,\n    `Selected role ...... ${diagnostic.selectedRole ?? \"none\"}`,\n    `Effective rights ... ${String(diagnostic.effectiveRightCount)}`,\n  ];\n  if (diagnostic.reason) {\n    lines.push(`Reason .............. ${diagnostic.reason}`);\n  }\n  return lines.join(\"\\n\");\n}\n\nexport function projectAthenaRightsResolutionForDevtools(\n  diagnostic: AthenaRightsResolutionDiagnostic | undefined\n): {\n  configuredRoles: readonly string[];\n  defaultRole: string | null;\n  effectiveRights: readonly string[];\n  mode: AthenaRightsResolutionMode;\n  reason: AthenaRightsResolutionReason | null;\n  selectedRole: string | null;\n  source: AthenaRightsResolutionSource;\n  storedRole: string | null;\n} | null {\n  if (!diagnostic) {\n    return null;\n  }\n  return {\n    configuredRoles: diagnostic.configuredRoles,\n    defaultRole: diagnostic.defaultRole ?? null,\n    effectiveRights: diagnostic.effectiveRights,\n    mode: diagnostic.mode,\n    reason: diagnostic.reason ?? null,\n    selectedRole: diagnostic.selectedRole ?? null,\n    source: diagnostic.source,\n    storedRole: diagnostic.storedRole ?? null,\n  };\n}\n\nexport function formatAthenaRightsProjectionValidateDetail(\n  authorization: AthenaPrincipalRightsProjection\n): string {\n  const mode = resolveAuthorizationMode(authorization);\n  const roles = configuredRoleNames(authorization);\n  const defaultRole = authorization.defaultRole?.trim() ?? \"\";\n  const table = authorization.rightsByRole ?? {};\n  const mapped =\n    defaultRole.length > 0 && Object.hasOwn(table, defaultRole) ? \"yes\" : \"no\";\n  const lines = [\n    `Mode ................ ${mode}`,\n    `Default role ......... ${defaultRole || \"(none)\"}`,\n    `Configured roles ..... ${roles.length > 0 ? roles.join(\", \") : \"(none)\"}`,\n  ];\n  if (mode === \"role\") {\n    lines.push(`Default role mapped .. ${mapped}`);\n    lines.push(\"Rights\");\n    if (roles.length === 0) {\n      lines.push(\"  (none)\");\n    } else {\n      for (const role of roles) {\n        const count = asStringList(table[role]).length;\n        lines.push(\n          `  ${role} ${\".\".repeat(Math.max(1, 18 - role.length))} ${String(count)}`\n        );\n      }\n    }\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction resolveRoleMode(\n  user: {\n    role?: string | null;\n  },\n  authorization?: AthenaPrincipalRightsProjection\n): AthenaRightsResolution {\n  const storedRole = user.role?.trim() ?? \"\";\n  const table = authorization?.rightsByRole;\n  if (storedRole) {\n    const mapped = lookupMappedRights(table, storedRole);\n    if (mapped !== undefined) {\n      return {\n        ok: true,\n        rights: mapped,\n        role: storedRole,\n        source: \"role\",\n      };\n    }\n    return {\n      ok: false,\n      reason: \"role_not_mapped\",\n      rights: [],\n      role: storedRole,\n      source: \"none\",\n    };\n  }\n  const defaultRole = authorization?.defaultRole?.trim() ?? \"\";\n  if (defaultRole) {\n    const mapped = lookupMappedRights(table, defaultRole);\n    if (mapped !== undefined) {\n      return {\n        ok: true,\n        rights: mapped,\n        role: defaultRole,\n        source: \"default-role\",\n      };\n    }\n    return {\n      ok: false,\n      reason: \"default_role_not_mapped\",\n      rights: [],\n      role: defaultRole,\n      source: \"none\",\n    };\n  }\n  return {\n    ok: false,\n    reason: \"no_rights_configured\",\n    rights: [],\n    role: \"\",\n    source: \"none\",\n  };\n}\n\nfunction resolveStoredMode(user: {\n  metadata?: unknown;\n  rights?: readonly string[];\n}): AthenaRightsResolution {\n  if (user.rights !== undefined) {\n    const rights = asStringList(user.rights);\n    return {\n      ok: true,\n      rights,\n      role: \"\",\n      source: \"stored\",\n    };\n  }\n  const metaRights = metadataRecord(user.metadata)?.rights;\n  if (metaRights !== undefined) {\n    return {\n      ok: true,\n      rights: asStringList(metaRights),\n      role: \"\",\n      source: \"stored\",\n    };\n  }\n  return {\n    ok: false,\n    reason: \"no_rights_configured\",\n    rights: [],\n    role: \"\",\n    source: \"none\",\n  };\n}\n\nfunction lookupMappedRights(\n  table: Readonly<Record<string, readonly string[]>> | undefined,\n  role: string\n): readonly string[] | undefined {\n  if (!(table && Object.hasOwn(table, role))) {\n    return;\n  }\n  return asStringList(table[role]);\n}\n\nfunction asStringList(value: unknown): string[] {\n  if (!Array.isArray(value)) {\n    return [];\n  }\n  return value\n    .filter((entry): entry is string => typeof entry === \"string\")\n    .map((entry) => entry.trim())\n    .filter(Boolean);\n}\n\nfunction metadataRecord(\n  metadata: unknown\n): Record<string, unknown> | undefined {\n  if (metadata && typeof metadata === \"object\" && !Array.isArray(metadata)) {\n    return metadata as Record<string, unknown>;\n  }\n  if (typeof metadata === \"string\" && metadata.trim()) {\n    try {\n      const parsed: unknown = JSON.parse(metadata);\n      if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n        return parsed as Record<string, unknown>;\n      }\n    } catch {\n      /* metadata is not JSON */\n    }\n  }\n}\n\nfunction diagnosticFromResolution(\n  resolution: AthenaRightsResolution,\n  user: { role?: string | null },\n  authorization: AthenaPrincipalRightsProjection | undefined,\n  userId: string | undefined\n): AthenaRightsResolutionDiagnostic {\n  const storedRole = user.role?.trim() || undefined;\n  const defaultRole = authorization?.defaultRole?.trim() || undefined;\n  const selectedRole =\n    resolution.source === \"none\" || resolution.role.length === 0\n      ? undefined\n      : resolution.role;\n  return Object.freeze({\n    configuredRoles: configuredRoleNames(authorization),\n    defaultRole,\n    effectiveRightCount: resolution.rights.length,\n    effectiveRights: resolution.rights,\n    kind: ATHENA_RIGHTS_RESOLUTION_KIND,\n    mode: resolveAuthorizationMode(authorization),\n    reason: resolution.ok ? undefined : resolution.reason,\n    selectedRole,\n    source: resolution.source,\n    storedRole,\n    userId: userId?.trim() || \"unknown\",\n  });\n}\n\nfunction emitAthenaRightsResolutionDiagnostic(\n  diagnostic: AthenaRightsResolutionDiagnostic\n): void {\n  lastDiagnostic = diagnostic;\n  for (const listener of [...listeners]) {\n    listener(diagnostic);\n  }\n  if (diagnostic.reason) {\n    console.warn(\n      \"[athena]\",\n      formatAthenaRightsResolutionDiagnostic(diagnostic)\n    );\n  }\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  AUTH_UI_BILLING_PRESET_TABLES,\n  EMBEDDED_BILLING_MIGRATIONS,\n  EMBEDDED_BILLING_REQUIRED_COLUMNS,\n  EMBEDDED_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  detail?: string;\n  group: \"billing\";\n  id: string;\n  status: \"ok\" | \"warn\" | \"error\" | \"skip\";\n  title: string;\n};\n\nexport interface LocalBillingValidateInput {\n  catalog?: AthenaBillingCatalogConfig;\n  providers?: {\n    mollie?: unknown;\n    stripe?: unknown;\n  };\n}\n\nexport function collectLocalBillingValidationChecks(\n  input: LocalBillingValidateInput | null | undefined\n): BillingValidationCheck[] {\n  if (input == null) {\n    return [];\n  }\n  const hasProviders =\n    input.providers?.mollie != null || input.providers?.stripe != null;\n  const hasCatalog = input.catalog != null;\n  if (!(hasProviders || hasCatalog)) {\n    return [\n      {\n        detail:\n          \"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        group: \"billing\",\n        id: \"billing.runtime.createClient\",\n        status: \"skip\",\n        title: \"Runtime billing\",\n      },\n    ];\n  }\n  const checks: BillingValidationCheck[] = [];\n  const mollieConfigured = input.providers?.mollie != null;\n  const stripeConfigured = input.providers?.stripe != null;\n  checks.push({\n    detail: mollieConfigured\n      ? \"configured\"\n      : stripeConfigured\n        ? \"not configured (Stripe is registered separately)\"\n        : \"not configured\",\n    group: \"billing\",\n    id: \"billing.provider.mollie\",\n    status: mollieConfigured || stripeConfigured ? \"ok\" : \"warn\",\n    title: \"Provider · Mollie\",\n  });\n  if (stripeConfigured) {\n    checks.push({\n      detail: \"configured\",\n      group: \"billing\",\n      id: \"billing.provider.stripe\",\n      status: \"ok\",\n      title: \"Provider · Stripe\",\n    });\n  }\n\n  let productsCount = 0;\n  let pricesCount = 0;\n  let catalogNormalized = false;\n  try {\n    const normalized = normalizeAthenaBillingCatalog(input.catalog);\n    catalogNormalized = normalized != null;\n    productsCount = normalized?.products?.length ?? 0;\n    pricesCount = normalized?.prices?.length ?? 0;\n    checks.push({\n      detail: catalogNormalized\n        ? `${productsCount} configured`\n        : \"billing.catalog.products is not configured\",\n      group: \"billing\",\n      id: \"billing.catalog.products\",\n      status: catalogNormalized ? \"ok\" : \"warn\",\n      title: \"Catalog · Products\",\n    });\n    checks.push({\n      detail:\n        catalogNormalized && normalized?.prices != null\n          ? `${pricesCount} configured`\n          : \"billing.catalog.prices is not configured\",\n      group: \"billing\",\n      id: \"billing.catalog.prices\",\n      status: catalogNormalized && normalized?.prices != null ? \"ok\" : \"warn\",\n      title: \"Catalog · Prices\",\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    checks.push({\n      detail: message,\n      group: \"billing\",\n      id: \"billing.catalog\",\n      status: \"error\",\n      title: \"Catalog\",\n    });\n    return checks;\n  }\n\n  const productsAvailable =\n    catalogNormalized && input.catalog?.products != null;\n  const pricesAvailable = catalogNormalized && input.catalog?.prices != null;\n  checks.push({\n    detail: productsAvailable\n      ? \"available\"\n      : \"unavailable · billing.catalog.products is not configured\",\n    group: \"billing\",\n    id: \"billing.capability.products.list\",\n    status: productsAvailable ? \"ok\" : \"warn\",\n    title: \"Capabilities · products.list\",\n  });\n  checks.push({\n    detail: pricesAvailable\n      ? \"available\"\n      : \"unavailable · billing.catalog.prices is not configured\",\n    group: \"billing\",\n    id: \"billing.capability.prices.list\",\n    status: pricesAvailable ? \"ok\" : \"warn\",\n    title: \"Capabilities · prices.list\",\n  });\n  checks.push({\n    detail: mollieConfigured ? \"available\" : \"unavailable\",\n    group: \"billing\",\n    id: \"billing.capability.invoices.list\",\n    status: mollieConfigured ? \"ok\" : \"warn\",\n    title: \"Capabilities · invoices.list\",\n  });\n  checks.push({\n    detail: mollieConfigured ? \"available\" : \"unavailable\",\n    group: \"billing\",\n    id: \"billing.capability.subscriptions.list\",\n    status: mollieConfigured ? \"ok\" : \"warn\",\n    title: \"Capabilities · subscriptions.list\",\n  });\n  const hasFinality = EMBEDDED_BILLING_MIGRATIONS.some(\n    (migration) => migration.version === 3\n  );\n  checks.push({\n    detail: hasFinality\n      ? `embedded catalog ${EMBEDDED_BILLING_REQUIRED_TABLES.join(\", \")}`\n      : \"missing 0003 billing subject finality\",\n    group: \"billing\",\n    id: \"billing.schema.embedded-manifest\",\n    status: hasFinality ? \"ok\" : \"error\",\n    title: \"Schema · embedded billing tables\",\n  });\n  const missingPresetTables = AUTH_UI_BILLING_PRESET_TABLES.filter(\n    (name) =>\n      !(EMBEDDED_BILLING_REQUIRED_TABLES as readonly string[]).includes(name)\n  );\n  checks.push({\n    detail:\n      missingPresetTables.length === 0\n        ? AUTH_UI_BILLING_PRESET_TABLES.join(\", \")\n        : `Auth UI presets missing from catalog: ${missingPresetTables.join(\", \")}`,\n    group: \"billing\",\n    id: \"billing.schema.auth-ui-presets\",\n    status: missingPresetTables.length === 0 ? \"ok\" : \"error\",\n    title: \"Catalog · Auth UI billing tables\",\n  });\n  return checks;\n}\n\nexport const VALIDATE_LEDGER_TABLES = [\n  \"athena_billing_migrations\",\n  \"athena_chat_schema_migrations\",\n  \"athena_event_ingress_migrations\",\n] as const;\n\nexport type ValidateLedgerTable = (typeof VALIDATE_LEDGER_TABLES)[number];\n\nexport function isValidateLedgerTable(\n  name: string\n): name is ValidateLedgerTable {\n  return (VALIDATE_LEDGER_TABLES as readonly string[]).includes(name);\n}\n\nexport interface EmbeddedSchemaInspectInput {\n  athenaTables: readonly string[];\n  billingEnabled: boolean;\n  billingLedgerVersions: readonly number[];\n  billingSubscriptionColumns?: readonly string[];\n  billingTables: readonly string[];\n  chatEnabled: boolean;\n  chatLedgerVersions: readonly number[];\n  eventIngressEnabled: boolean;\n  eventIngressLedgerVersions: readonly number[];\n  publicTables: readonly string[];\n}\n\nfunction missingNames(\n  required: readonly string[],\n  present: ReadonlySet<string>\n): string[] {\n  return required.filter((name) => !present.has(name));\n}\n\nexport function collectEmbeddedSchemaDatabaseChecks(\n  input: EmbeddedSchemaInspectInput\n): BillingValidationCheck[] {\n  const checks: BillingValidationCheck[] = [];\n  const billingPresent = new Set(\n    input.billingTables.map((name) => name.toLowerCase())\n  );\n  const publicPresent = new Set(\n    input.publicTables.map((name) => name.toLowerCase())\n  );\n  const athenaPresent = new Set(\n    input.athenaTables.map((name) => name.toLowerCase())\n  );\n\n  if (input.billingEnabled) {\n    const missingTables = missingNames(\n      EMBEDDED_BILLING_REQUIRED_TABLES,\n      billingPresent\n    );\n    checks.push({\n      detail:\n        missingTables.length === 0\n          ? EMBEDDED_BILLING_REQUIRED_TABLES.join(\", \")\n          : `missing ${missingTables.join(\", \")}`,\n      group: \"billing\",\n      id: \"billing.schema.tables\",\n      status: missingTables.length === 0 ? \"ok\" : \"error\",\n      title: \"Database · billing tables\",\n    });\n    if (input.billingSubscriptionColumns != null) {\n      const presentColumns = new Set(\n        input.billingSubscriptionColumns.map((column) => column.toLowerCase())\n      );\n      const requiredColumns = EMBEDDED_BILLING_REQUIRED_COLUMNS.filter(\n        (column) =>\n          column.schema === \"billing\" &&\n          column.table === \"billing_subscriptions\"\n      ).map((column) => column.column);\n      const missingColumns = requiredColumns.filter(\n        (column) => !presentColumns.has(column)\n      );\n      checks.push({\n        detail:\n          missingColumns.length === 0\n            ? requiredColumns.join(\", \")\n            : `missing ${missingColumns.join(\", \")}`,\n        group: \"billing\",\n        id: \"billing.schema.columns\",\n        status: missingColumns.length === 0 ? \"ok\" : \"error\",\n        title: \"Database · billing subscription columns\",\n      });\n    }\n    const expectedVersions = EMBEDDED_BILLING_MIGRATIONS.map(\n      (migration) => migration.version\n    );\n    const missingVersions = expectedVersions.filter(\n      (version) => !input.billingLedgerVersions.includes(version)\n    );\n    const ledgerPresent = publicPresent.has(\"athena_billing_migrations\");\n    checks.push({\n      detail: ledgerPresent\n        ? missingVersions.length === 0\n          ? `athena_billing_migrations ${[...input.billingLedgerVersions].sort((a, b) => a - b).join(\",\")}`\n          : `ledger missing versions ${missingVersions.join(\", \")}`\n        : \"athena_billing_migrations is missing\",\n      group: \"billing\",\n      id: \"billing.schema.ledger\",\n      status: ledgerPresent && missingVersions.length === 0 ? \"ok\" : \"error\",\n      title: \"Database · billing ledger\",\n    });\n  }\n\n  if (input.billingEnabled || input.eventIngressEnabled) {\n    const missingIngress = missingNames(\n      EMBEDDED_EVENT_INGRESS_REQUIRED_TABLES,\n      athenaPresent\n    );\n    checks.push({\n      detail:\n        missingIngress.length === 0\n          ? \"athena.event_ingress, event_ledger, event_outbox\"\n          : `missing ${missingIngress.join(\", \")}`,\n      group: \"billing\",\n      id: \"billing.schema.event-ingress\",\n      status: missingIngress.length === 0 ? \"ok\" : \"error\",\n      title: \"Database · event ingress\",\n    });\n    const ingressLedgerOk =\n      publicPresent.has(\"athena_event_ingress_migrations\") &&\n      input.eventIngressLedgerVersions.includes(1) &&\n      input.eventIngressLedgerVersions.includes(3);\n    checks.push({\n      detail: ingressLedgerOk\n        ? \"athena_event_ingress_migrations versions 1,3\"\n        : \"event-ingress ledger is empty or missing operation channel (v3)\",\n      group: \"billing\",\n      id: \"billing.schema.event-ingress-ledger\",\n      status: ingressLedgerOk ? \"ok\" : \"error\",\n      title: \"Database · event-ingress ledger\",\n    });\n  }\n\n  if (input.chatEnabled) {\n    const missingChat = missingNames(\n      EMBEDDED_CHAT_REQUIRED_TABLES,\n      athenaPresent\n    );\n    checks.push({\n      detail:\n        missingChat.length === 0\n          ? \"nine chat runtime tables\"\n          : `missing ${missingChat.join(\", \")}`,\n      group: \"billing\",\n      id: \"billing.schema.chat\",\n      status: missingChat.length === 0 ? \"ok\" : \"error\",\n      title: \"Database · chat schema\",\n    });\n    const chatLedgerOk =\n      publicPresent.has(\"athena_chat_schema_migrations\") &&\n      input.chatLedgerVersions.includes(1);\n    checks.push({\n      detail: chatLedgerOk\n        ? \"athena_chat_schema_migrations version 1\"\n        : \"chat ledger is empty or missing\",\n      group: \"billing\",\n      id: \"billing.schema.chat-ledger\",\n      status: chatLedgerOk ? \"ok\" : \"error\",\n      title: \"Database · chat ledger\",\n    });\n  }\n\n  return checks;\n}\n\nconst NEXT_CONFIG_FILES = [\n  \"next.config.ts\",\n  \"next.config.mjs\",\n  \"next.config.js\",\n  \"next.config.mts\",\n] as const;\n\nconst BILLING_INGRESS_ROUTE_CANDIDATES = [\n  \"src/app/api/athena/billing/webhook/[[...path]]/route.ts\",\n  \"app/api/athena/billing/webhook/[[...path]]/route.ts\",\n  \"src/app/api/athena/billing/webhook/[...path]/route.ts\",\n  \"app/api/athena/billing/webhook/[...path]/route.ts\",\n] as const;\n\nfunction isNextApp(cwd: string): boolean {\n  return NEXT_CONFIG_FILES.some((name) => existsSync(join(cwd, name)));\n}\n\nfunction readIfExists(path: string): string | undefined {\n  if (!existsSync(path)) {\n    return;\n  }\n  return readFileSync(path, \"utf8\");\n}\n\nfunction collectRouteSources(dir: string, acc: string[]): void {\n  if (!existsSync(dir)) {\n    return;\n  }\n  for (const entry of readdirSync(dir, { withFileTypes: true })) {\n    if (\n      entry.name === \"node_modules\" ||\n      entry.name === \".next\" ||\n      entry.name === \"dist\"\n    ) {\n      continue;\n    }\n    const full = join(dir, entry.name);\n    if (entry.isDirectory()) {\n      collectRouteSources(full, acc);\n      continue;\n    }\n    if (entry.name === \"route.ts\" || entry.name === \"route.js\") {\n      acc.push(readFileSync(full, \"utf8\"));\n    }\n  }\n}\n\nfunction usesUnifiedAthenaNextHandler(cwd: string): boolean {\n  const sources: string[] = [];\n  collectRouteSources(join(cwd, \"src\", \"app\"), sources);\n  collectRouteSources(join(cwd, \"app\"), sources);\n  return sources.some((source) =>\n    /\\bcreateAthenaNextHandler\\s*\\(/.test(source)\n  );\n}\n\nfunction billingIngressRouteMount(cwd: string): {\n  detail: string;\n  ok: boolean;\n} {\n  for (const relative of BILLING_INGRESS_ROUTE_CANDIDATES) {\n    const source = readIfExists(join(cwd, relative));\n    if (source === undefined) {\n      continue;\n    }\n    if (/\\bbillingIngress\\b/.test(source)) {\n      return { detail: relative, ok: true };\n    }\n    if (/\\bexport const \\{ POST \\} = billing\\b/.test(source)) {\n      return {\n        detail: `${relative} mounts Billing RPC instead of BillingIngress.`,\n        ok: false,\n      };\n    }\n  }\n  return {\n    detail: [\n      \"billing.ingestion.webhooks.enabled=true but no BillingIngress\",\n      \"route was detected.\",\n      \"\",\n      \"Expected:\",\n      \"app/api/athena/billing/webhook/[[...path]]/route.ts\",\n      \"\",\n      \"or use the unified Athena handler.\",\n    ].join(\"\\n\"),\n    ok: false,\n  };\n}\n\nexport function collectBillingIngressRouteChecks(input: {\n  billingEnabled: boolean;\n  cwd?: string;\n}): BillingValidationCheck[] {\n  const cwd = input.cwd;\n  if (!input.billingEnabled || cwd == null || cwd === \"\") {\n    return [];\n  }\n  if (!isNextApp(cwd)) {\n    return [];\n  }\n  if (usesUnifiedAthenaNextHandler(cwd)) {\n    return [\n      {\n        detail:\n          \"createAthenaNextHandler dispatches /webhook before Billing RPC\",\n        group: \"billing\",\n        id: \"billing.ingress.route\",\n        status: \"ok\",\n        title: \"Billing webhook ingress\",\n      },\n    ];\n  }\n  const mount = billingIngressRouteMount(cwd);\n  return [\n    {\n      detail: mount.detail,\n      group: \"billing\",\n      id: \"billing.ingress.route\",\n      status: mount.ok ? \"ok\" : \"error\",\n      title: \"Billing webhook ingress\",\n    },\n  ];\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 { exitCodeForError } from \"../../platform/map-exit.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  let configPath: string | undefined;\n  let json = false;\n  let plain = false;\n  let skipRuntime = false;\n  let strict = false;\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"doctor\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--plain\") {\n      plain = true;\n      continue;\n    }\n    if (token === \"--strict\") {\n      strict = true;\n      continue;\n    }\n    if (token === \"--skip-runtime\") {\n      skipRuntime = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token, \"doctor\");\n  }\n  return {\n    command: \"doctor\",\n    configPath,\n    json,\n    plain,\n    skipRuntime,\n    strict,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"doctor\");\n}\n\nexport function sessionTitle(): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: DoctorCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, logRaw, presentation, runtime } = ctx;\n  try {\n    const executeDoctor = runtime.runCliDoctor ?? runCliDoctor;\n    const report = await ctx.trace.span(\n      \"doctor.inspect\",\n      {\n        configPath: parsed.configPath,\n        skipRuntime: parsed.skipRuntime,\n        strict: parsed.strict,\n      },\n      () =>\n        executeDoctor({\n          configPath: parsed.configPath,\n          cwd: runtime.cwd,\n          json: parsed.json,\n          plain: parsed.plain || presentation.noColor === true,\n          skipRuntime: parsed.skipRuntime,\n          strict: parsed.strict,\n          validateLocal: runtime.validateLocal,\n        })\n    );\n    if (parsed.json) {\n      log(JSON.stringify(report, null, 2));\n    } else {\n      logRaw(\n        frameBlock(formatDoctorReport(report, capabilities), capabilities)\n      );\n    }\n    if (!report.ok) {\n      setCliExitCode(CliExitCode.Validation);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\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 { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type { CliCommand, EnvCommand } from \"../../types.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport {\n  type EnvCheckMode,\n  formatEnvCheckReport,\n  validateProjectEnv,\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  let mode: EnvCheckMode = \"auto\";\n  let strict = false;\n  let json = false;\n  const files: string[] = [];\n\n  let index = 0;\n  if (rest[0] === \"check\" || rest[0] === \"validate\") {\n    index = 1;\n  } else if (rest[0] === \"help\") {\n    return { command: \"help\", topic: \"env\" };\n  }\n\n  while (index < rest.length) {\n    const token = rest[index];\n    index += 1;\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"env\" };\n    }\n    if (token === \"--strict\") {\n      strict = true;\n      continue;\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--mode\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\n          \"Missing value for --mode option. Expected auto, direct, or gateway.\"\n        );\n      }\n      if (\n        nextValue !== \"auto\" &&\n        nextValue !== \"direct\" &&\n        nextValue !== \"gateway\"\n      ) {\n        throw new Error(\n          `Invalid --mode value \"${nextValue}\". Expected auto, direct, or gateway.`\n        );\n      }\n      mode = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--file\" || token === \"-f\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --file option.\");\n      }\n      files.push(nextValue);\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token, \"env\");\n  }\n\n  return {\n    command: \"env\",\n    files,\n    json,\n    mode,\n    strict,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"env\");\n}\n\nexport function sessionTitle(_parsed: EnvCommand): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: EnvCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, logRaw, runtime } = ctx;\n  try {\n    const result = validateProjectEnv({\n      cwd: runtime.cwd,\n      files: parsed.files.length > 0 ? parsed.files : undefined,\n      mode: parsed.mode,\n      strict: parsed.strict,\n    });\n    if (parsed.json) {\n      log(JSON.stringify(result, null, 2));\n    } else {\n      logRaw(\n        frameBlock(formatEnvCheckReport(result, capabilities), capabilities)\n      );\n    }\n    if (result.errorCount > 0) {\n      setCliExitCode(CliExitCode.Validation);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n","import {\n  isCurrentAthenaGeneratedPath,\n  isLegacyFlatAthenaGeneratedPath,\n} from \"../../../generator/config.ts\";\nimport { runSchemaGenerator } from \"../../../generator/pipeline.ts\";\nimport type {\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n  WrittenGeneratedArtifact,\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  let configPath: string | undefined;\n  let check = false;\n  let dryRun = false;\n  let strict = false;\n  let writeConfig = true;\n  let discoverSchemas = true;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"generate\" };\n    }\n\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n\n    if (token === \"--check\") {\n      check = true;\n      continue;\n    }\n\n    if (token === \"--strict\") {\n      strict = true;\n      continue;\n    }\n\n    if (token === \"--no-write-config\") {\n      writeConfig = false;\n      continue;\n    }\n\n    if (token === \"--write-config\") {\n      writeConfig = true;\n      continue;\n    }\n\n    if (token === \"--no-discover-schemas\") {\n      discoverSchemas = false;\n      continue;\n    }\n\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n\n    throw unknownOptionError(token, \"generate\");\n  }\n\n  return {\n    command: \"generate\",\n    check,\n    configPath,\n    discoverSchemas,\n    dryRun,\n    strict,\n    writeConfig,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"generate\");\n}\n\nfunction normalizePath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction isLegacyConfigRegistryTarget(target: string): boolean {\n  return isLegacyFlatAthenaGeneratedPath(target);\n}\n\nfunction isFlatSchemaTarget(target: string): boolean {\n  return normalizePath(target) === \"athena/schema.ts\";\n}\n\nfunction isCanonicalRegistryTarget(target: string): boolean {\n  return isCurrentAthenaGeneratedPath(target);\n}\n\nfunction formatProviderLine(result: RunGeneratorResult): string {\n  const { provider } = result.config;\n  if (provider.kind === \"postgres\") {\n    const schemaList = Array.isArray(provider.schemas)\n      ? provider.schemas.join(\",\")\n      : typeof provider.schemas === \"string\"\n        ? provider.schemas\n        : \"public\";\n    const database = provider.database ? ` database=${provider.database}` : \"\";\n    const backend =\n      provider.mode === \"gateway\" && provider.backend\n        ? ` backend=${provider.backend}`\n        : \"\";\n    return `[provider] kind=${provider.kind} mode=${provider.mode}${database}${backend} schemas=${schemaList}`;\n  }\n\n  const datacenter = provider.datacenter\n    ? ` datacenter=${provider.datacenter}`\n    : \"\";\n  return `[provider] kind=${provider.kind} mode=${provider.mode} keyspace=${provider.keyspace} contactPoints=${provider.contactPoints.join(\",\")}${datacenter}`;\n}\n\nfunction formatFilterLine(result: RunGeneratorResult): string | undefined {\n  const { includeTables, excludeTables } = result.config.filter;\n  if (includeTables.length === 0 && excludeTables.length === 0) {\n    return;\n  }\n\n  return `[filter] include=${includeTables.length > 0 ? includeTables.join(\",\") : \"-\"} exclude=${excludeTables.length > 0 ? excludeTables.join(\",\") : \"-\"}`;\n}\n\nfunction formatGeneratorModeLines(result: RunGeneratorResult): string[] {\n  const lines = [\n    `[mode] preset=${result.config.output.preset} format=${result.config.output.format} modelTarget=${result.config.output.targets.model}`,\n    formatProviderLine(result),\n    `[targets] schema=${result.config.output.targets.schema} database=${result.config.output.targets.database} registry=${result.config.output.targets.registry}`,\n  ];\n  const filterLine = formatFilterLine(result);\n  if (filterLine) {\n    lines.push(filterLine);\n  }\n\n  if (result.config.output.format === \"define-model\") {\n    lines.push(\n      '[note] Legacy define-model compatibility output is active. Set output.format=\"table-builder\" or ATHENA_GENERATOR_OUTPUT_FORMAT=table-builder to emit table(...).schema(...).columns(...).primaryKey(...).'\n    );\n  }\n\n  if (result.config.output.preset === \"legacy\") {\n    lines.push(\n      '[note] Legacy (N-1) preset is active — flat athena/* output. Prefer output.preset=\"athena-direct\" for athena/generated/* (or src/lib/athena/generated/*).'\n    );\n  }\n\n  lines.push(\n    \"[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  );\n\n  if (\n    isLegacyConfigRegistryTarget(result.config.output.targets.registry) &&\n    !isCanonicalRegistryTarget(result.config.output.targets.registry)\n  ) {\n    lines.push(\n      \"[warn] Registry target is a legacy N-1 path (flat athena/*). Prefer athena/generated/registry.ts (or src/lib/athena/generated/registry.ts).\"\n    );\n  }\n\n  if (isFlatSchemaTarget(result.config.output.targets.schema)) {\n    lines.push(\n      \"[warn] Schema target points at athena/schema.ts. Prefer schema-scoped output under athena/generated/schema/{schema_kebab}.ts.\"\n    );\n  }\n\n  return lines;\n}\n\nfunction formatSkippedArtifactLine(artifact: SkippedGeneratedArtifact): string {\n  if (artifact.reason === \"protected-existing-file\") {\n    return ` [skip] ${artifact.path} (existing ${artifact.kind} artifacts are protected from overwrite; set output.artifactWrite.${artifact.kind}=\"merge\"|\"overwrite\" or delete/retarget the file)`;\n  }\n\n  if (artifact.reason === \"already-current\") {\n    const custom =\n      artifact.preservedCustom && artifact.preservedCustom.length > 0\n        ? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n        : \"\";\n    return ` [ok] ${artifact.path} (already current${custom})`;\n  }\n\n  if (artifact.reason === \"merge-conflict\") {\n    return ` [skip] ${artifact.path} (merge conflict: ${artifact.detail ?? \"see conflicts\"}; file left unchanged)`;\n  }\n\n  if (artifact.reason === \"merge-lint-failed\") {\n    return ` [skip] ${artifact.path} (merge lint failed: ${artifact.detail ?? \"invalid merged TypeScript\"}; file left unchanged)`;\n  }\n\n  if (artifact.reason === \"merge-unparseable\") {\n    return ` [skip] ${artifact.path} (existing ${artifact.kind} artifact is not mergeable; delete, retarget, or set output.artifactWrite.${artifact.kind}=\"overwrite\")`;\n  }\n\n  return ` [skip] ${artifact.path}`;\n}\n\nfunction formatWrittenArtifactLine(artifact: WrittenGeneratedArtifact): string {\n  if (artifact.reason === \"merged\") {\n    const added =\n      artifact.added && artifact.added.length > 0\n        ? ` +${artifact.added.length}: ${artifact.added.slice(0, 4).join(\", \")}${artifact.added.length > 4 ? \"…\" : \"\"}`\n        : \"\";\n    const custom =\n      artifact.preservedCustom && artifact.preservedCustom.length > 0\n        ? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n        : \"\";\n    return ` [merge] ${artifact.path}${added}${custom}`;\n  }\n\n  if (artifact.reason === \"overwritten\") {\n    return ` [write] ${artifact.path} (overwritten)`;\n  }\n\n  return ` - ${artifact.path}`;\n}\n\nfunction formatCustomPreserveWarnings(result: RunGeneratorResult): string[] {\n  const lines: string[] = [];\n  for (const artifact of result.writtenDetails) {\n    if (artifact.preservedCustom && artifact.preservedCustom.length > 0) {\n      lines.push(\n        ` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`\n      );\n    }\n  }\n  for (const artifact of result.skippedFiles) {\n    if (\n      artifact.reason === \"already-current\" &&\n      artifact.preservedCustom &&\n      artifact.preservedCustom.length > 0\n    ) {\n      lines.push(\n        ` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`\n      );\n    }\n  }\n  return lines;\n}\n\nfunction formatConfigEnsureLines(result: RunGeneratorResult): string[] {\n  if (!result.configEnsure) {\n    return [];\n  }\n\n  const { action, path, schemas, reason, changes } = result.configEnsure;\n  const lines = [\n    `[config] ${action} ${path} schemas=${schemas.join(\",\") || \"-\"}`,\n  ];\n  if (reason) {\n    lines.push(`[config] reason: ${reason}`);\n  }\n  if (changes.length > 0 && action !== \"unchanged\") {\n    lines.push(\n      `[config] changes: ${changes.slice(0, 4).join(\"; \")}${changes.length > 4 ? \"…\" : \"\"}`\n    );\n  }\n  return lines;\n}\n\nfunction exitCodeForConvergence(\n  convergence: RunGeneratorResult[\"convergence\"],\n  check: boolean\n): number {\n  if (convergence === \"ownership-violation\") {\n    return 3;\n  }\n  if (convergence === \"failed\") {\n    return 2;\n  }\n  if (check && convergence === \"stale\") {\n    return 1;\n  }\n  return 0;\n}\n\nexport function sessionTitle(parsed: GenerateCommand): string {\n  return parsed.check || parsed.dryRun\n    ? \"athena-js generate · dry-run\"\n    : \"athena-js generate\";\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: GenerateCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, runtime } = ctx;\n  const runGenerator = runtime.runGenerator ?? runSchemaGenerator;\n  let result: RunGeneratorResult;\n  try {\n    if (isDebugEnabled()) {\n      errorLog(\n        `[athena-js] generate starting (check=${parsed.check} dryRun=${parsed.dryRun} strict=${parsed.strict} writeConfig=${parsed.writeConfig} discoverSchemas=${parsed.discoverSchemas}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n      );\n    }\n    result = await ctx.trace.span(\n      \"generator.run\",\n      {\n        configPath: parsed.configPath,\n        check: parsed.check,\n        discoverSchemas: parsed.discoverSchemas,\n        dryRun: parsed.dryRun,\n        strict: parsed.strict,\n        writeConfig: parsed.writeConfig,\n      },\n      () =>\n        runGenerator({\n          configPath: parsed.configPath,\n          check: parsed.check,\n          discoverSchemas: parsed.discoverSchemas,\n          dryRun: parsed.dryRun,\n          strict: parsed.strict,\n          writeConfig: parsed.writeConfig,\n        })\n    );\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    const formatted = formatGeneratorError(error, parsed.configPath);\n    logCliError(formatted, errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n    return;\n  }\n\n  if (parsed.dryRun || parsed.check) {\n    log(\n      `[${parsed.check ? \"check\" : \"dry-run\"}] Generated ${result.files.length} files from ${result.configPath}`\n    );\n    for (const line of formatGeneratorModeLines(result)) {\n      log(line);\n    }\n    for (const line of formatConfigEnsureLines(result)) {\n      log(line);\n    }\n    for (const file of result.files) {\n      log(` - ${file.path}`);\n    }\n    for (const diagnostic of result.diagnostics ?? []) {\n      log(`[${diagnostic.severity}] ${diagnostic.code}: ${diagnostic.message}`);\n    }\n    setCliExitCode(exitCodeForConvergence(result.convergence, parsed.check));\n    if (result.writtenDetails?.length || result.skippedFiles?.length) {\n      for (const artifact of result.writtenDetails ?? []) {\n        if (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n          log(formatWrittenArtifactLine(artifact));\n        }\n\n      }\n      for (const artifact of result.skippedFiles ?? []) {\n        if (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n          log(formatSkippedArtifactLine(artifact));\n        }\n      }\n      for (const line of formatCustomPreserveWarnings(result)) {\n        log(line);\n      }\n    }\n    if (result.deletedFiles?.length) {\n      for (const filePath of result.deletedFiles) {\n        log(` - ${filePath} (deleted)`);\n      }\n    }\n    return;\n  }\n\n  log(\n    `Generated ${result.writtenFiles.length} files from ${result.configPath}`\n  );\n  for (const line of formatGeneratorModeLines(result)) {\n    log(line);\n  }\n  for (const line of formatConfigEnsureLines(result)) {\n    log(line);\n  }\n  const detailByPath = new Map<string, WrittenGeneratedArtifact>();\n  for (const detail of result.writtenDetails ?? []) {\n    detailByPath.set(detail.path, detail);\n  }\n  for (const filePath of result.writtenFiles) {\n    const detail = detailByPath.get(filePath);\n    if (\n      detail &&\n      (detail.reason === \"merged\" || detail.reason === \"overwritten\")\n    ) {\n      log(formatWrittenArtifactLine(detail));\n    } else {\n      log(` - ${filePath}`);\n    }\n  }\n  for (const artifact of result.skippedFiles) {\n    log(formatSkippedArtifactLine(artifact));\n  }\n  for (const line of formatCustomPreserveWarnings(result)) {\n    log(line);\n  }\n  for (const filePath of result.deletedFiles ?? []) {\n    log(` - ${filePath} (deleted)`);\n  }\n  setCliExitCode(exitCodeForConvergence(result.convergence, false));\n}\n","import {\n  lstat,\n  mkdir,\n  readFile,\n  realpath,\n  unlink,\n  writeFile,\n} from \"node:fs/promises\";\nimport {\n  basename,\n  dirname,\n  isAbsolute,\n  posix,\n  relative,\n  resolve,\n  sep,\n  win32,\n} from \"node:path\";\nimport { resolveArtifactWritePlan } from \"./artifact-merge.ts\";\nimport { GENERATED_MANIFEST_REL, loadGeneratorConfig } from \"./config.ts\";\nimport { ensureGeneratorConfigFile } from \"./config-file.ts\";\nimport { isAthenaGeneratedSource } from \"./generated-file-header.ts\";\nimport { resolveGeneratorProvider } from \"./providers.ts\";\nimport { generateArtifactsFromSnapshot } from \"./renderer.ts\";\nimport {\n  discoverPostgresSchemas,\n  mergeSchemaSelections,\n} from \"./schema-discovery.ts\";\nimport { resolveProviderSchemas } from \"./schema-selection.ts\";\nimport { findDuplicateTableSelectors } from \"./table-selection.ts\";\nimport type {\n  GeneratedArtifact,\n  GeneratedManifest,\n  GeneratorConfigEnsureSummary,\n  GeneratorDiagnostic,\n  LoadGeneratorConfigOptions,\n  NormalizedAthenaGeneratorConfig,\n  RunGeneratorOptions,\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n  WrittenGeneratedArtifact,\n} from \"./types.ts\";\n\nconst GENERATOR_VERSION = \"4.0.0\";\n\nfunction toPosixRel(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction buildGeneratedManifest(input: {\n  configPath: string;\n  cwd: string;\n  files: GeneratedArtifact[];\n}): GeneratedManifest {\n  const configRel =\n    input.configPath === \"[environment defaults]\"\n      ? \"athena.config.ts\"\n      : toPosixRel(relative(input.cwd, input.configPath));\n  const outputs = [\n    ...new Set(input.files.map((file) => toPosixRel(file.path))),\n  ].sort();\n  return {\n    config: configRel.startsWith(\"..\") ? \"athena.config.ts\" : configRel,\n    generatorVersion: GENERATOR_VERSION,\n    outputs,\n  };\n}\n\nasync function writeGeneratedManifest(\n  cwd: string,\n  manifest: GeneratedManifest,\n  dryRun: boolean\n): Promise<string> {\n  const rel = GENERATED_MANIFEST_REL;\n  const absolutePath = await resolveSafeGeneratedPath(cwd, rel);\n  if (absolutePath === null) {\n    throw new Error(`Generated output path is unsafe: ${rel}`);\n  }\n  const body = `${JSON.stringify(manifest, null, 2)}\\n`;\n  if (!dryRun) {\n    await mkdir(dirname(absolutePath), { recursive: true });\n    await writeFile(absolutePath, body, \"utf8\");\n  }\n  return rel;\n}\n\nasync function readExisting(path: string): Promise<string | null> {\n  try {\n    return await readFile(path, \"utf8\");\n  } catch {\n    return null;\n  }\n}\n\nasync function readExistingManifest(\n  cwd: string\n): Promise<{ error?: string; manifest: GeneratedManifest | null }> {\n  const manifestPath = await resolveSafeGeneratedPath(\n    cwd,\n    GENERATED_MANIFEST_REL\n  );\n  if (manifestPath === null) {\n    return {\n      error: `Generated manifest is invalid: ${GENERATED_MANIFEST_REL}`,\n      manifest: null,\n    };\n  }\n  let body: string;\n  try {\n    body = await readFile(manifestPath, \"utf8\");\n  } catch (error) {\n    if (\n      error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      error.code === \"ENOENT\"\n    ) {\n      return { manifest: null };\n    }\n    return {\n      error: `Unable to read generated manifest: ${GENERATED_MANIFEST_REL}`,\n      manifest: null,\n    };\n  }\n\n  try {\n    const parsed: unknown = JSON.parse(body);\n    if (\n      typeof parsed !== \"object\" ||\n      parsed === null ||\n      typeof (parsed as { config?: unknown }).config !== \"string\" ||\n      typeof (parsed as { generatorVersion?: unknown }).generatorVersion !==\n        \"string\" ||\n      !Array.isArray((parsed as { outputs?: unknown }).outputs) ||\n      !(parsed as { outputs: unknown[] }).outputs.every(\n        (output) =>\n          typeof output === \"string\" &&\n          output.length > 0 &&\n          isSafeManifestOutput(output, cwd)\n      )\n    ) {\n      return {\n        error: `Generated manifest is invalid: ${GENERATED_MANIFEST_REL}`,\n        manifest: null,\n      };\n    }\n    return { manifest: parsed as GeneratedManifest };\n  } catch {\n    return {\n      error: `Generated manifest is invalid: ${GENERATED_MANIFEST_REL}`,\n      manifest: null,\n    };\n  }\n}\n\nfunction isSafeManifestOutput(output: string, cwd: string): boolean {\n  if (isAbsolute(output)) {\n    return false;\n  }\n  const normalized = toPosixRel(output);\n  if (\n    normalized !== output ||\n    normalized.length === 0 ||\n    normalized === \".\" ||\n    normalized.includes(\"\\0\")\n  ) {\n    return false;\n  }\n  if (\n    posix.isAbsolute(normalized) ||\n    win32.isAbsolute(normalized) ||\n    /^[A-Za-z]:/.test(normalized)\n  ) {\n    return false;\n  }\n  const candidate = resolve(cwd, output);\n  const candidateRelative = toPosixRel(relative(cwd, candidate));\n  return (\n    candidateRelative.length > 0 &&\n    candidateRelative !== \".\" &&\n    candidateRelative !== \"..\" &&\n    !candidateRelative.startsWith(\"../\") &&\n    !isAbsolute(candidateRelative)\n  );\n}\n\nfunction isContainedPath(root: string, candidate: string): boolean {\n  const candidateRelative = relative(root, candidate);\n  return (\n    candidateRelative !== \"..\" &&\n    !candidateRelative.startsWith(`..${sep}`) &&\n    !isAbsolute(candidateRelative)\n  );\n}\n\nasync function resolveSafeGeneratedPath(\n  cwd: string,\n  output: string\n): Promise<string | null> {\n  if (!isSafeManifestOutput(output, cwd)) {\n    return null;\n  }\n\n  let root: string;\n  try {\n    root = await realpath(cwd);\n  } catch {\n    return null;\n  }\n\n  let current = resolve(cwd, output);\n  const missing: string[] = [];\n  while (true) {\n    try {\n      const entry = await lstat(current);\n      if (entry.isSymbolicLink()) {\n        return null;\n      }\n      const resolvedCurrent = await realpath(current);\n      if (!isContainedPath(root, resolvedCurrent)) {\n        return null;\n      }\n      const resolvedCandidate = resolve(resolvedCurrent, ...missing);\n      return isContainedPath(root, resolvedCandidate)\n        ? resolvedCandidate\n        : null;\n    } catch (error) {\n      if (\n        !error ||\n        typeof error !== \"object\" ||\n        !(\"code\" in error) ||\n        error.code !== \"ENOENT\"\n      ) {\n        return null;\n      }\n      const parent = dirname(current);\n      if (parent === current) {\n        return null;\n      }\n      missing.unshift(basename(current));\n      current = parent;\n    }\n  }\n}\n\nasync function resolvePhysicalOutputIdentity(\n  absolutePath: string\n): Promise<string | null> {\n  try {\n    return await realpath(absolutePath);\n  } catch (error) {\n    if (\n      error &&\n      typeof error === \"object\" &&\n      \"code\" in error &&\n      error.code === \"ENOENT\"\n    ) {\n      return absolutePath;\n    }\n    return null;\n  }\n}\n\nasync function resolveManifestOwnership(\n  existing: GeneratedManifest | null,\n  expected: GeneratedManifest,\n  cwd: string,\n  generatedFiles: GeneratedArtifact[],\n  config: NormalizedAthenaGeneratorConfig\n): Promise<{ deletions: string[]; violations: string[] }> {\n  const expectedOutputs = new Set(expected.outputs);\n  const policyManagedOutputs = new Set(\n    generatedFiles\n      .filter((file) => file.kind === \"database\" || file.kind === \"registry\")\n      .filter((file) => policyForArtifact(file, config) !== \"always\")\n      .map((file) => toPosixRel(file.path))\n  );\n  const deletions: string[] = [];\n  const violations: string[] = [];\n  const resolvedOutputs = new Map<\n    string,\n    { absolutePath: string; identity: string } | null\n  >();\n\n  const resolveOutput = async (\n    output: string\n  ): Promise<{ absolutePath: string; identity: string } | null> => {\n    if (resolvedOutputs.has(output)) {\n      return resolvedOutputs.get(output) ?? null;\n    }\n    const absolutePath = await resolveSafeGeneratedPath(cwd, output);\n    if (absolutePath === null) {\n      violations.push(`Generated output path is unsafe: ${output}`);\n      resolvedOutputs.set(output, null);\n      return null;\n    }\n    const identity = await resolvePhysicalOutputIdentity(absolutePath);\n    if (identity === null) {\n      violations.push(`Generated output path is unsafe: ${output}`);\n      resolvedOutputs.set(output, null);\n      return null;\n    }\n    const resolved = { absolutePath, identity };\n    resolvedOutputs.set(output, resolved);\n    return resolved;\n  };\n\n  const expectedIdentities = new Set<string>();\n  for (const output of expected.outputs) {\n    const resolved = await resolveOutput(output);\n    if (resolved) {\n      expectedIdentities.add(resolved.identity);\n    }\n  }\n  const existingIdentities = new Set<string>();\n  for (const output of existing?.outputs ?? []) {\n    const resolved = await resolveOutput(output);\n    if (resolved) {\n      existingIdentities.add(resolved.identity);\n    }\n  }\n\n  for (const output of expected.outputs) {\n    const resolved = await resolveOutput(output);\n    if (resolved === null) {\n      continue;\n    }\n    const content = await readExisting(resolved.absolutePath);\n    if (\n      content !== null &&\n      !policyManagedOutputs.has(output) &&\n      !isAthenaGeneratedSource(content)\n    ) {\n      violations.push(`Generated output is not Athena-owned: ${output}`);\n    }\n  }\n\n  for (const output of existing?.outputs ?? []) {\n    const resolved = await resolveOutput(output);\n    if (resolved === null) {\n      continue;\n    }\n    if (expectedOutputs.has(output) || expectedIdentities.has(resolved.identity)) {\n      continue;\n    }\n    const content = await readExisting(resolved.absolutePath);\n    if (content === null) {\n      continue;\n    }\n    if (isAthenaGeneratedSource(content)) {\n      deletions.push(output);\n      continue;\n    }\n    violations.push(`Generated output is no longer Athena-owned: ${output}`);\n  }\n\n  return { deletions, violations };\n}\n\nasync function deleteGeneratedFiles(\n  files: string[],\n  cwd: string,\n  dryRun: boolean\n): Promise<string[]> {\n  const deletedFiles: string[] = [];\n  for (const file of files) {\n    const absolutePath = await resolveSafeGeneratedPath(cwd, file);\n    if (absolutePath === null) {\n      continue;\n    }\n    const content = await readExisting(absolutePath);\n    if (content === null || !isAthenaGeneratedSource(content)) {\n      continue;\n    }\n    if (!dryRun) {\n      await unlink(absolutePath);\n    }\n    deletedFiles.push(file);\n  }\n  return deletedFiles;\n}\n\nfunction policyForArtifact(\n  file: GeneratedArtifact,\n  config: NormalizedAthenaGeneratorConfig\n):\n  | \"always\"\n  | NormalizedAthenaGeneratorConfig[\"output\"][\"artifactWrite\"][\"database\"] {\n  if (file.kind === \"model\" || file.kind === \"schema\") {\n    return \"always\";\n  }\n  if (file.kind === \"database\") {\n    return config.output.artifactWrite.database;\n  }\n  return config.output.artifactWrite.registry;\n}\n\nasync function writeArtifacts(\n  files: GeneratedArtifact[],\n  cwd: string,\n  config: NormalizedAthenaGeneratorConfig,\n  dryRun: boolean\n): Promise<{\n  writtenFiles: string[];\n  writtenDetails: WrittenGeneratedArtifact[];\n  skippedFiles: SkippedGeneratedArtifact[];\n}> {\n  const writtenFiles: string[] = [];\n  const writtenDetails: WrittenGeneratedArtifact[] = [];\n  const skippedFiles: SkippedGeneratedArtifact[] = [];\n\n  for (const file of files) {\n    const absolutePath = await resolveSafeGeneratedPath(cwd, file.path);\n    if (absolutePath === null) {\n      throw new Error(`Generated output path is unsafe: ${file.path}`);\n    }\n    const existingContent = await readExisting(absolutePath);\n    const policy = policyForArtifact(file, config);\n    const plan = resolveArtifactWritePlan(file, existingContent, policy);\n\n    if (plan.action === \"skip\" || plan.action === \"unchanged\") {\n      skippedFiles.push({\n        conflicts: plan.conflicts.length > 0 ? plan.conflicts : undefined,\n        detail: plan.detail,\n        kind: file.kind,\n        lintErrors: plan.lintErrors.length > 0 ? plan.lintErrors : undefined,\n        path: file.path,\n        preservedCustom:\n          plan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n        reason: plan.skipReason ?? \"already-current\",\n      });\n      continue;\n    }\n\n    if (!(plan.content && plan.writeReason)) {\n      skippedFiles.push({\n        detail: \"merge produced no content\",\n        kind: file.kind,\n        lintErrors: plan.lintErrors,\n        path: file.path,\n        reason: \"merge-lint-failed\",\n      });\n      continue;\n    }\n\n    if (!dryRun) {\n      await mkdir(dirname(absolutePath), { recursive: true });\n      await writeFile(absolutePath, plan.content, \"utf8\");\n    }\n\n    writtenFiles.push(file.path);\n    writtenDetails.push({\n      added: plan.added.length > 0 ? plan.added : undefined,\n      kind: file.kind,\n      path: file.path,\n      preservedCustom:\n        plan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n      reason: plan.writeReason,\n    });\n  }\n\n  return {\n    skippedFiles,\n    writtenDetails,\n    writtenFiles,\n  };\n}\n\nfunction withPostgresSchemas(\n  config: NormalizedAthenaGeneratorConfig,\n  schemas: string[]\n): NormalizedAthenaGeneratorConfig {\n  if (config.provider.kind !== \"postgres\") {\n    return config;\n  }\n\n  return {\n    ...config,\n    provider: {\n      ...config.provider,\n      schemas,\n    },\n  };\n}\n\n/**\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\n *\n * When `writeConfig` is enabled (default), also ensures `athena.config.ts` exists and\n * auto-fills discovered schemas without clobbering custom config fields.\n */\nexport async function runSchemaGenerator(\n  options: RunGeneratorOptions = {}\n): Promise<RunGeneratorResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const dryRun = options.dryRun === true;\n  const check = options.check === true;\n  const writeConfig = options.writeConfig !== false;\n  const discoverSchemas = options.discoverSchemas !== false;\n  const configOptions: LoadGeneratorConfigOptions = {\n    configPath: options.configPath,\n    cwd,\n  };\n\n  const loaded = await loadGeneratorConfig(configOptions);\n  let { configPath, config } = loaded;\n  let configEnsure: GeneratorConfigEnsureSummary | undefined;\n\n  // Expand schemas from live discovery before introspection so gateway/direct\n  // multi-schema databases generate fully without requiring a hand-maintained list.\n  // Injected test/custom providers skip live discovery to avoid real network I/O.\n  let effectiveSchemas = resolveProviderSchemas(config.provider);\n  const canDiscoverLive =\n    discoverSchemas && config.provider.kind === \"postgres\" && !options.provider;\n\n  if (canDiscoverLive) {\n    try {\n      const discovered = await discoverPostgresSchemas(config.provider);\n      if (discovered.length > 0) {\n        effectiveSchemas = mergeSchemaSelections(effectiveSchemas, discovered);\n      }\n    } catch {\n      // Discovery is best-effort during generate; configured schemas still run.\n    }\n  }\n\n  config = withPostgresSchemas(config, effectiveSchemas);\n\n  // Intelligent config ensure: create when missing, patch schemas when expanded.\n  // Skip when a custom provider is injected (unit tests / programmatic overrides).\n  const shouldEnsureConfig =\n    writeConfig && config.provider.kind === \"postgres\" && !options.provider;\n\n  if (shouldEnsureConfig) {\n    const ensureResult = await ensureGeneratorConfigFile({\n      configPath: options.configPath,\n      cwd,\n      // Schemas already resolved above — avoid a second discovery round-trip.\n      discoverSchemas: false,\n      dryRun: dryRun || check,\n      loaded: { config, configPath },\n      mode: config.provider.mode,\n      provider: config.provider,\n      schemas: effectiveSchemas,\n    });\n\n    configEnsure = {\n      action: ensureResult.action,\n      changes: ensureResult.changes,\n      discoveryError: ensureResult.discoveryError,\n      path: ensureResult.path,\n      reason: ensureResult.reason,\n      schemaProvenance: ensureResult.schemaProvenance,\n      schemas: ensureResult.schemas,\n    };\n\n    // Prefer the durable config path once a real file was created/updated.\n    if (\n      ensureResult.action === \"created\" ||\n      ensureResult.action === \"updated\" ||\n      (ensureResult.action === \"unchanged\" &&\n        configPath === \"[environment defaults]\")\n    ) {\n      configPath = ensureResult.absolutePath;\n      if (ensureResult.schemas.length > 0) {\n        effectiveSchemas = ensureResult.schemas;\n        config = withPostgresSchemas(config, effectiveSchemas);\n      }\n    }\n  }\n\n  const provider =\n    options.provider ??\n    resolveGeneratorProvider(config.provider, config.experimental);\n\n  const snapshot = await provider.inspect({\n    schemas: effectiveSchemas,\n  });\n\n  const generated = generateArtifactsFromSnapshot(snapshot, config);\n  const generatedManifest = buildGeneratedManifest({\n    configPath,\n    cwd,\n    files: generated.files,\n  });\n  const existingManifestRead = await readExistingManifest(cwd);\n  const existingManifest = existingManifestRead.manifest;\n  const manifestOwnership = existingManifestRead.error\n    ? { deletions: [], violations: [existingManifestRead.error] }\n    : await resolveManifestOwnership(\n        existingManifest,\n        generatedManifest,\n        cwd,\n        generated.files,\n        config\n      );\n  const ownership = manifestOwnership.violations;\n  const diagnostics: GeneratorDiagnostic[] = [];\n  if (existingManifestRead.error) {\n    diagnostics.push({\n      code: \"ATHENA_GENERATOR_MANIFEST_INVALID\",\n      message: existingManifestRead.error,\n      severity: \"error\",\n    });\n  }\n  for (const [filterName, selection] of [\n    [\"includeTables\", config.filter.raw?.includeTables],\n    [\"excludeTables\", config.filter.raw?.excludeTables],\n  ] as const) {\n    for (const selector of findDuplicateTableSelectors(selection)) {\n      diagnostics.push({\n        code: \"ATHENA_GENERATOR_DUPLICATE_TABLE_SELECTOR\",\n        message: `${filterName} contains duplicate table selector \"${selector}\".`,\n        severity: options.strict ? \"error\" : \"warning\",\n      });\n    }\n  }\n  for (const message of ownership) {\n    diagnostics.push({\n      code: \"ATHENA_GENERATOR_OWNERSHIP_VIOLATION\",\n      message,\n      severity: \"error\",\n    });\n  }\n  const hasFatalDiagnostics = diagnostics.some(\n    (diagnostic) => diagnostic.severity === \"error\"\n  );\n  if (hasFatalDiagnostics) {\n    return {\n      ...generated,\n      config,\n      configEnsure,\n      configPath,\n      convergence: ownership.length > 0 ? \"ownership-violation\" : \"failed\",\n      deletedFiles: [],\n      diagnostics,\n      generatedManifest,\n      generatedManifestPath: GENERATED_MANIFEST_REL,\n      ownershipViolations: ownership,\n      skippedFiles: [],\n      writtenDetails: [],\n      writtenFiles: [],\n    };\n  }\n  const writeResult = await writeArtifacts(\n    generated.files,\n    cwd,\n    config,\n    dryRun || check\n  );\n  const deletedFiles = await deleteGeneratedFiles(\n    manifestOwnership.deletions,\n    cwd,\n    dryRun || check\n  );\n\n  const generatedManifestPath = await writeGeneratedManifest(\n    cwd,\n    generatedManifest,\n    dryRun || check\n  );\n\n  const configChangesPending =\n    configEnsure?.action === \"created\" || configEnsure?.action === \"updated\";\n  const artifactsChangesPending =\n    writeResult.writtenDetails.length > 0 ||\n    deletedFiles.length > 0 ||\n    writeResult.skippedFiles.some((file) => file.reason !== \"already-current\");\n  const manifestChangesPending =\n    existingManifest === null ||\n    JSON.stringify(existingManifest) !== JSON.stringify(generatedManifest);\n  const changesPending =\n    configChangesPending || artifactsChangesPending || manifestChangesPending;\n\n  return {\n    ...generated,\n    config,\n    configEnsure,\n    configPath,\n    convergence:\n      dryRun || check\n        ? changesPending\n          ? \"stale\"\n          : \"current\"\n        : writeResult.skippedFiles.some(\n              (file) => file.reason !== \"already-current\"\n            )\n          ? \"stale\"\n          : \"current\",\n    deletedFiles,\n    diagnostics,\n    generatedManifest,\n    generatedManifestPath,\n    ownershipViolations: ownership,\n    skippedFiles: writeResult.skippedFiles,\n    writtenDetails: writeResult.writtenDetails,\n    writtenFiles: writeResult.writtenFiles,\n  };\n}\n","import type {\n  GeneratedArtifact,\n  GeneratorArtifactKind,\n  GeneratorArtifactWritePolicy,\n  SkippedGeneratedArtifactReason,\n  WrittenGeneratedArtifactReason,\n} from \"./types.ts\";\n\nexport interface ArtifactMergeResult {\n  action: \"write\" | \"unchanged\" | \"skip\";\n  added: string[];\n  conflicts: string[];\n  content?: string;\n  detail?: string;\n  lintErrors: string[];\n  preservedCustom: string[];\n  skipReason?: SkippedGeneratedArtifactReason;\n  writeReason?: WrittenGeneratedArtifactReason;\n}\n\ninterface StyleFingerprint {\n  indent: string;\n  newline: \"\\n\" | \"\\r\\n\";\n  quote: \"'\" | '\"';\n  semicolons: boolean;\n  trailingComma: boolean;\n}\n\ninterface NamedImport {\n  end: number;\n  module: string;\n  names: string[];\n  raw: string;\n  start: number;\n}\n\ninterface ObjectEntry {\n  key: string;\n  raw: string;\n  value: string;\n}\n\ninterface DefineBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  callName: string;\n  entries: ObjectEntry[];\n  exportName: string;\n  fullEnd: number;\n  fullStart: number;\n  kind: \"database\" | \"registry\";\n  raw: string;\n}\n\ninterface MetaBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  entries: ObjectEntry[];\n  fullEnd: number;\n  fullStart: number;\n  raw: string;\n}\n\nconst IMPORT_RE =\n  /^import\\s+(?:type\\s+)?(?:\\{([^}]*)\\}|([A-Za-z_$][\\w$]*))\\s+from\\s+(['\"])([^'\"]+)\\3\\s*;?\\s*$/gm;\n\nconst DEFINE_EXPORT_RE =\n  /export\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*(define(?:Database|Registry))\\s*\\(\\s*\\{/g;\n\nconst META_EXPORT_RE = /export\\s+const\\s+__athena_schema_meta\\s*=\\s*\\{/g;\n\nconst KNOWN_META_KEYS = new Set([\n  \"schemaVersion\",\n  \"generatedAt\",\n  \"database\",\n  \"outputPreset\",\n  \"outputFormat\",\n]);\n\nfunction detectNewline(source: string): \"\\n\" | \"\\r\\n\" {\n  return source.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction detectStyle(source: string): StyleFingerprint {\n  const newline = detectNewline(source);\n  const single = (source.match(/'/g) ?? []).length;\n  const double = (source.match(/\"/g) ?? []).length;\n  const quote: \"'\" | '\"' = double > single ? '\"' : \"'\";\n\n  const importLines = source\n    .split(/\\r?\\n/)\n    .filter((line) => line.trimStart().startsWith(\"import \"));\n  const semicolons =\n    importLines.length > 0\n      ? importLines.filter((line) => line.trimEnd().endsWith(\";\")).length >=\n        importLines.length / 2\n      : false;\n\n  const objectLines = source\n    .split(/\\r?\\n/)\n    .map((line) => line.trim())\n    .filter((line) => /^[A-Za-z0-9_'\"]+\\s*:\\s*.+/.test(line));\n  const trailingComma =\n    objectLines.length > 0\n      ? objectLines.filter((line) => line.endsWith(\",\")).length >=\n        Math.ceil(objectLines.length / 2)\n      : true;\n\n  const indentMatch = source.match(/\\n([ \\t]+)\\S/);\n  const indent = indentMatch?.[1] ?? \"  \";\n\n  return { indent, newline, quote, semicolons, trailingComma };\n}\n\nfunction quoteString(value: string, quote: \"'\" | '\"'): string {\n  const escaped = value\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(new RegExp(quote, \"g\"), `\\\\${quote}`);\n  return `${quote}${escaped}${quote}`;\n}\n\nfunction parseNamedImports(source: string): NamedImport[] {\n  const imports: NamedImport[] = [];\n  IMPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = IMPORT_RE.exec(source);\n  while (match !== null) {\n    const named = match[1];\n    const defaultName = match[2];\n    const module = match[4];\n    const names = named\n      ? named\n          .split(\",\")\n          .map((part) => part.trim())\n          .filter(Boolean)\n          .map((part) => {\n            const alias = part.split(/\\s+as\\s+/);\n            return (alias[1] ?? alias[0]).trim();\n          })\n      : defaultName\n        ? [defaultName]\n        : [];\n\n    imports.push({\n      end: match.index + match[0].length,\n      module,\n      names,\n      raw: match[0],\n      start: match.index,\n    });\n    match = IMPORT_RE.exec(source);\n  }\n  return imports;\n}\n\nfunction findMatchingBrace(source: string, openIndex: number): number {\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplate = false;\n  let escaped = false;\n\n  for (let i = openIndex; i < source.length; i += 1) {\n    const ch = source[i];\n    if (escaped) {\n      escaped = false;\n      continue;\n    }\n    if (ch === \"\\\\\" && (inSingle || inDouble || inTemplate)) {\n      escaped = true;\n      continue;\n    }\n    if (!(inDouble || inTemplate) && ch === \"'\") {\n      inSingle = !inSingle;\n      continue;\n    }\n    if (!(inSingle || inTemplate) && ch === '\"') {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!(inSingle || inDouble) && ch === \"`\") {\n      inTemplate = !inTemplate;\n      continue;\n    }\n    if (inSingle || inDouble || inTemplate) {\n      continue;\n    }\n    if (ch === \"{\") {\n      depth += 1;\n    } else if (ch === \"}\") {\n      depth -= 1;\n      if (depth === 0) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nfunction parseObjectEntries(body: string): ObjectEntry[] {\n  const entries: ObjectEntry[] = [];\n  const lines = body.split(/\\r?\\n/);\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"//\") || trimmed.startsWith(\"/*\")) {\n      continue;\n    }\n    const withoutComma = trimmed.endsWith(\",\")\n      ? trimmed.slice(0, -1).trimEnd()\n      : trimmed;\n    const match = withoutComma.match(\n      /^([A-Za-z_$][\\w$]*|['\"][^'\"]+['\"])\\s*:\\s*(.+)$/\n    );\n    if (!match) {\n      continue;\n    }\n    const keyRaw = match[1];\n    const key =\n      keyRaw.startsWith(\"'\") || keyRaw.startsWith('\"')\n        ? keyRaw.slice(1, -1)\n        : keyRaw;\n    entries.push({\n      key,\n      raw: trimmed,\n      value: match[2].trim(),\n    });\n  }\n  return entries;\n}\n\nfunction parseDefineBlocks(source: string): DefineBlock[] {\n  const blocks: DefineBlock[] = [];\n  DEFINE_EXPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = DEFINE_EXPORT_RE.exec(source);\n  while (match !== null) {\n    const exportName = match[1];\n    const callName = match[2];\n    const openBrace = match.index + match[0].lastIndexOf(\"{\");\n    const closeBrace = findMatchingBrace(source, openBrace);\n    if (closeBrace >= 0) {\n      const body = source.slice(openBrace + 1, closeBrace);\n      const fullEnd = (() => {\n        let i = closeBrace + 1;\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \")\") {\n          i += 1;\n        }\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \";\") {\n          i += 1;\n        }\n        return i;\n      })();\n      blocks.push({\n        bodyEnd: closeBrace,\n        bodyStart: openBrace + 1,\n        callName,\n        entries: parseObjectEntries(body),\n        exportName,\n        fullEnd,\n        fullStart: match.index,\n        kind: callName === \"defineDatabase\" ? \"database\" : \"registry\",\n        raw: source.slice(match.index, fullEnd),\n      });\n    }\n    match = DEFINE_EXPORT_RE.exec(source);\n  }\n  return blocks;\n}\n\nfunction parseMetaBlock(source: string): MetaBlock | undefined {\n  META_EXPORT_RE.lastIndex = 0;\n  const match = META_EXPORT_RE.exec(source);\n  if (!match) {\n    return;\n  }\n  const openBrace = match.index + match[0].lastIndexOf(\"{\");\n  const closeBrace = findMatchingBrace(source, openBrace);\n  if (closeBrace < 0) {\n    return;\n  }\n  let fullEnd = closeBrace + 1;\n  const after = source.slice(fullEnd);\n  const asConst = after.match(/^\\s*as\\s+const\\s*;?/);\n  if (asConst) {\n    fullEnd += asConst[0].length;\n  } else if (source[fullEnd] === \";\") {\n    fullEnd += 1;\n  }\n  return {\n    bodyEnd: closeBrace,\n    bodyStart: openBrace + 1,\n    entries: parseObjectEntries(source.slice(openBrace + 1, closeBrace)),\n    fullEnd,\n    fullStart: match.index,\n    raw: source.slice(match.index, fullEnd),\n  };\n}\n\nfunction hasImportBinding(\n  imports: NamedImport[],\n  name: string,\n  module?: string\n): boolean {\n  return imports.some(\n    (item) =>\n      item.names.includes(name) &&\n      (module === undefined ||\n        normalizeModulePath(item.module) === normalizeModulePath(module))\n  );\n}\n\nfunction findImportForName(\n  imports: NamedImport[],\n  name: string\n): NamedImport | undefined {\n  return imports.find((item) => item.names.includes(name));\n}\n\nfunction normalizeModulePath(modulePath: string): string {\n  return modulePath\n    .replace(/\\\\/g, \"/\")\n    .replace(/^\\.\\//, \"\")\n    .replace(/\\.ts$/, \"\");\n}\n\nfunction formatImport(\n  names: string[],\n  modulePath: string,\n  style: StyleFingerprint\n): string {\n  const body = `import { ${names.join(\", \")} } from ${quoteString(modulePath, style.quote)}`;\n  return style.semicolons ? `${body};` : body;\n}\n\nfunction formatObjectEntry(\n  key: string,\n  value: string,\n  style: StyleFingerprint,\n  isLast: boolean\n): string {\n  const needsQuote = !/^[A-Za-z_$][\\w$]*$/.test(key);\n  const renderedKey = needsQuote ? quoteString(key, style.quote) : key;\n  const 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 { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n  ensureAthenaProjectLayout,\n  materializeManagedAuthMigrations,\n} from \"../migrations/managed-auth.ts\";\nimport {\n  DEFAULT_MIGRATIONS_DIRECTORY,\n  findGeneratorConfigPath,\n  loadGeneratorConfig,\n} from \"./config.ts\";\nimport {\n  detectAuthorityMode,\n  formatSchemaFallbackMessages,\n  type GeneratorSchemaProvenance,\n  resolveGeneratorDatabaseAuthority,\n} from \"./database-authority.ts\";\nimport {\n  discoverPostgresSchemas,\n  mergeSchemaSelections,\n  schemasEqual,\n} from \"./schema-discovery.ts\";\nimport {\n  DEFAULT_POSTGRES_SCHEMAS,\n  normalizeSchemaSelection,\n} from \"./schema-selection.ts\";\nimport type {\n  GeneratorProviderConfig,\n  GeneratorProviderInputConfig,\n  LoadedGeneratorConfig,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorConfigFileAction =\n  | \"created\"\n  | \"updated\"\n  | \"unchanged\"\n  | \"skipped\";\n\nexport type GeneratorConfigProviderMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport interface EnsureGeneratorConfigFileOptions {\n  /** Explicit path relative to cwd or absolute. Defaults to discovered path or `athena.config.ts`. */\n  configPath?: string;\n  cwd?: string;\n  /**\n   * Discover live schemas and auto-fill `provider.schemas`.\n   * Defaults to true.\n   */\n  discoverSchemas?: boolean;\n  /**\n   * Test/programmatic seam for live schema discovery (defaults to\n   * `discoverPostgresSchemas`).\n   */\n  discoverSchemasImpl?: (\n    provider: GeneratorProviderConfig\n  ) => Promise<string[]>;\n  /**\n   * When false, never write to disk (report would-be action only).\n   * Defaults to false.\n   */\n  dryRun?: boolean;\n  /**\n   * When true, rewrite the full modern template even if a file already exists.\n   * Defaults to false (intelligent surgical update only).\n   */\n  force?: boolean;\n  /**\n   * Optional pre-loaded config (skips a second disk load).\n   */\n  loaded?: LoadedGeneratorConfig;\n  /** Provider mode preference when creating a new file. */\n  mode?: GeneratorConfigProviderMode;\n  /**\n   * Pre-resolved provider used for schema discovery (avoids re-normalizing).\n   */\n  provider?: GeneratorProviderConfig;\n  /**\n   * Explicit schemas to write when discovery is disabled or fails.\n   */\n  schemas?: readonly string[];\n}\n\nexport interface EnsureGeneratorConfigFileResult {\n  absolutePath: string;\n  action: GeneratorConfigFileAction;\n  changes: string[];\n  content?: string;\n  discoveryError?: string;\n  mode: \"direct\" | \"gateway\";\n  path: string;\n  reason?: string;\n  /** How `schemas` were chosen for this ensure pass. */\n  schemaProvenance: GeneratorSchemaProvenance;\n  schemas: 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  preferred: GeneratorConfigProviderMode = \"auto\"\n): DetectedMode {\n  return detectAuthorityMode(preferred);\n}\n\nfunction formatStringArray(values: readonly string[], indent: string): string {\n  if (values.length === 0) {\n    return \"[]\";\n  }\n  const inner = values\n    .map((value) => `${indent}  ${JSON.stringify(value)}`)\n    .join(\",\\n\");\n  return `[\\n${inner},\\n${indent}]`;\n}\n\nfunction buildDirectProviderBlock(schemas: readonly string[]): string {\n  return `  provider: {\n    kind: \"postgres\",\n    mode: \"direct\",\n    connectionString: generatorEnv(\"DATABASE_URL\"),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { optional: true }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\nfunction buildGatewayProviderBlock(schemas: readonly string[]): string {\n  return `  provider: {\n    kind: \"postgres\",\n    mode: \"gateway\",\n    gatewayUrl: generatorEnv(\"ATHENA_URL\"),\n    apiKey: generatorEnv(\"ATHENA_API_KEY\"),\n    client: generatorEnv(\"ATHENA_CLIENT\", { optional: true }),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { default: \"postgres\" }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\n/**\n * Renders a modern, typed `athena.config.ts` using `defineGeneratorConfig` + `generatorEnv`.\n * Secrets stay env-backed so gateway and direct modes both work without hardcoding keys.\n */\nexport function renderGeneratorConfigFile(options: {\n  mode: DetectedMode;\n  schemas?: readonly string[];\n}): string {\n  const schemas =\n    options.schemas && options.schemas.length > 0\n      ? [...options.schemas]\n      : [...DEFAULT_POSTGRES_SCHEMAS];\n\n  const providerBlock =\n    options.mode === \"gateway\"\n      ? buildGatewayProviderBlock(schemas)\n      : buildDirectProviderBlock(schemas);\n\n  return `import { defineAthenaConfig, generatorEnv } from \"@xylex-group/athena/config\";\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  cwd: string,\n  configPath?: string\n): {\n  absolutePath: string;\n  relativePath: string;\n  exists: boolean;\n} {\n  if (configPath) {\n    const absolutePath = resolve(cwd, configPath);\n    return {\n      absolutePath,\n      exists: existsSync(absolutePath),\n      relativePath: configPath.replace(/\\\\/g, \"/\"),\n    };\n  }\n\n  const discovered = findGeneratorConfigPath(cwd);\n  if (discovered) {\n    const relativePath = discovered.startsWith(cwd)\n      ? discovered\n        .slice(cwd.length)\n        .replace(/^[/\\\\]/, \"\")\n        .replace(/\\\\/g, \"/\")\n      : \"athena.config.ts\";\n    return {\n      absolutePath: discovered,\n      exists: true,\n      relativePath,\n    };\n  }\n\n  const absolutePath = resolve(cwd, \"athena.config.ts\");\n  return {\n    absolutePath,\n    exists: false,\n    relativePath: \"athena.config.ts\",\n  };\n}\n\nfunction providerModeFromConfig(\n  provider: GeneratorProviderConfig | GeneratorProviderInputConfig | undefined,\n  preferred: GeneratorConfigProviderMode\n): DetectedMode {\n  if (provider && provider.kind === \"postgres\") {\n    if (provider.mode === \"gateway\") {\n      return \"gateway\";\n    }\n    if (provider.mode === \"direct\") {\n      return \"direct\";\n    }\n  }\n  return detectGeneratorProviderMode(preferred);\n}\n\nfunction schemasFromNormalized(\n  config: NormalizedAthenaGeneratorConfig\n): string[] {\n  if (config.provider.kind !== \"postgres\") {\n    return [...DEFAULT_POSTGRES_SCHEMAS];\n  }\n  return normalizeSchemaSelection(config.provider.schemas);\n}\n\n/**\n * Updates only the `schemas:` value inside an existing TypeScript config source.\n * Supports:\n * - `schemas: [\"public\", \"athena\"]`\n * - `schemas: generatorEnv.list(\"...\", { default: [\"public\"] })`\n *\n * Returns undefined when the file cannot be updated surgically (caller may full-render).\n */\nexport function patchSchemasInConfigSource(\n  source: string,\n  schemas: readonly string[]\n): string | undefined {\n  const formattedInline = `[${schemas.map((value) => JSON.stringify(value)).join(\", \")}]`;\n  const formattedMultiline = formatStringArray(schemas, \"    \");\n\n  // Prefer generatorEnv.list default updates so env override still works.\n  const listDefaultPattern =\n    /(schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*)(\\[[^\\]]*\\])/m;\n  if (listDefaultPattern.test(source)) {\n    return source.replace(listDefaultPattern, `$1${formattedInline}`);\n  }\n\n  // Literal array assignment on provider.schemas.\n  const literalPattern = /(schemas\\s*:\\s*)(\\[[^\\]]*\\])/m;\n  if (literalPattern.test(source)) {\n    const usesMultiline = /schemas\\s*:\\s*\\[\\s*\\n/.test(source);\n    return source.replace(\n      literalPattern,\n      `$1${usesMultiline ? formattedMultiline : formattedInline}`\n    );\n  }\n\n  // Missing schemas field: inject after kind/mode block if we can find provider mode.\n  const modeLine = /(mode\\s*:\\s*[\"'](?:direct|gateway)[\"']\\s*,)/m;\n  if (modeLine.test(source)) {\n    return source.replace(modeLine, `$1\\n    schemas: ${formattedInline},`);\n  }\n}\n\nfunction extractLiteralSchemas(source: string): string[] | undefined {\n  const listDefaultMatch = source.match(\n    /schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*(\\[[^\\]]*\\])/m\n  );\n  const literalMatch =\n    listDefaultMatch ?? source.match(/schemas\\s*:\\s*(\\[[^\\]]*\\])/m);\n  if (!literalMatch) {\n    return;\n  }\n\n  try {\n    const parsed = JSON.parse(literalMatch[1].replace(/'/g, '\"')) as unknown;\n    if (!Array.isArray(parsed)) {\n      return;\n    }\n    return parsed\n      .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n      .filter((value) => value.length > 0);\n  } catch {\n    // Malformed JSON array literal — treat as no schemas.\n  }\n}\n\ninterface SchemaResolution {\n  discoveryError?: string;\n  provenance: GeneratorSchemaProvenance;\n  schemas: string[];\n}\n\nasync function resolveDiscoveredSchemas(options: {\n  cwd: string;\n  discoverSchemas: boolean;\n  discoverSchemasImpl?: (\n    provider: GeneratorProviderConfig\n  ) => Promise<string[]>;\n  provider?: GeneratorProviderConfig;\n  loaded?: LoadedGeneratorConfig;\n  explicit?: readonly string[];\n  mode: GeneratorConfigProviderMode;\n}): Promise<SchemaResolution> {\n  if (options.explicit && options.explicit.length > 0) {\n    return {\n      provenance: \"explicit\",\n      schemas: normalizeSchemaSelection(options.explicit),\n    };\n  }\n\n  if (!options.discoverSchemas) {\n    if (options.loaded) {\n      return {\n        provenance: \"configured\",\n        schemas: schemasFromNormalized(options.loaded.config),\n      };\n    }\n    return {\n      provenance: \"fallback\",\n      schemas: [...DEFAULT_POSTGRES_SCHEMAS],\n    };\n  }\n\n  let restoreEnv = () => { };\n  try {\n    const authority = resolveGeneratorDatabaseAuthority({\n      // When a loaded/explicit provider is already normalized, env was applied\n      // during load — still apply here for environment-probe so `.env*` works.\n      applyProjectEnv: true,\n      cwd: options.cwd,\n      loaded: options.loaded,\n      mode: options.mode,\n      provider: options.provider,\n    });\n    restoreEnv = authority.restoreEnv;\n\n    const discover = options.discoverSchemasImpl ?? discoverPostgresSchemas;\n    const discovered = await discover(authority.provider);\n    if (discovered.length === 0) {\n      if (options.loaded) {\n        return {\n          provenance: \"configured\",\n          schemas: schemasFromNormalized(options.loaded.config),\n        };\n      }\n      return {\n        discoveryError:\n          \"live catalog returned no non-system schemas with base tables\",\n        provenance: \"fallback\",\n        schemas: [...DEFAULT_POSTGRES_SCHEMAS],\n      };\n    }\n\n    if (options.loaded) {\n      return {\n        provenance: \"discovered\",\n        schemas: mergeSchemaSelections(\n          schemasFromNormalized(options.loaded.config),\n          discovered\n        ),\n      };\n    }\n\n    return { provenance: \"discovered\", schemas: discovered };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    if (options.loaded) {\n      return {\n        discoveryError: message,\n        provenance: \"configured\",\n        schemas: schemasFromNormalized(options.loaded.config),\n      };\n    }\n    return {\n      discoveryError: message,\n      provenance: \"fallback\",\n      schemas: [...DEFAULT_POSTGRES_SCHEMAS],\n    };\n  } finally {\n    restoreEnv();\n  }\n}\n\n/**\n * Creates or intelligently updates `athena.config.ts`.\n *\n * Intelligence rules:\n * - missing file → write modern direct/gateway template with env-backed secrets\n * - existing file + force → full rewrite\n * - existing file → only patch `provider.schemas` when auto-fill finds new values\n * - skip write when content/schemas already match (no churn, safe for typecheck CI)\n * - never removes user-listed schemas that discovery did not return\n * - gateway mode uses the same template surface as direct (generatorEnv for url/key)\n */\nexport async function ensureGeneratorConfigFile(\n  options: EnsureGeneratorConfigFileOptions = {}\n): Promise<EnsureGeneratorConfigFileResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const dryRun = options.dryRun === true;\n  const discoverSchemas = options.discoverSchemas !== false;\n  const force = options.force === true;\n  const preferredMode = options.mode ?? \"auto\";\n\n  const pathInfo = resolveConfigPath(cwd, options.configPath);\n  const changes: string[] = [];\n\n  let loaded = options.loaded;\n  if (!loaded && pathInfo.exists && !force) {\n    try {\n      loaded = await loadGeneratorConfig({\n        configPath: pathInfo.absolutePath,\n        cwd,\n      });\n    } catch {\n      // Fall through to create/replace when existing file is unloadable and force is off:\n      // only patch if we can read text; otherwise report skipped with reason.\n    }\n  }\n\n  const migrationsRelative =\n    loaded?.config.migrations.directory || DEFAULT_MIGRATIONS_DIRECTORY;\n  const layout = await ensureAthenaProjectLayout({\n    applicationDirectory: resolve(cwd, migrationsRelative),\n    cwd,\n    dryRun,\n  });\n  if (layout.createdApplicationMigrations) {\n    changes.push(`created-migrations-directory: ${migrationsRelative}`);\n  }\n  if (layout.createdManagedAuthMigrations) {\n    changes.push(\n      \"created-managed-auth-migrations-directory: athena/managed/auth/migrations\"\n    );\n  }\n  if (!dryRun) {\n    const materialized = await materializeManagedAuthMigrations({\n      cwd,\n      overwrite: false,\n    });\n    if (materialized.written.length > 0) {\n      changes.push(\n        `materialized-managed-auth-migrations: ${materialized.written.length}`\n      );\n    }\n  }\n\n  // Resolve mode with the same project-env authority migrate uses, so\n  // `.env` / `.env.local` DATABASE_URL is visible before discovery.\n  let mode: DetectedMode = providerModeFromConfig(\n    loaded?.config.provider ?? options.provider,\n    preferredMode\n  );\n  try {\n    const authority = resolveGeneratorDatabaseAuthority({\n      applyProjectEnv: true,\n      cwd,\n      loaded,\n      mode: preferredMode,\n      provider: options.provider ?? loaded?.config.provider,\n    });\n    mode = authority.mode;\n    authority.restoreEnv();\n  } catch {\n    // Mode probe may fail when connection info is missing; keep preferred/default.\n    mode = providerModeFromConfig(\n      loaded?.config.provider ?? options.provider,\n      preferredMode\n    );\n  }\n\n  const schemaResolution = await resolveDiscoveredSchemas({\n    cwd,\n    discoverSchemas,\n    discoverSchemasImpl: options.discoverSchemasImpl,\n    explicit: options.schemas,\n    loaded,\n    mode: preferredMode,\n    provider: options.provider ?? loaded?.config.provider,\n  });\n\n  if (schemaResolution.provenance === \"discovered\") {\n    changes.push(`schemas-discovered: ${schemaResolution.schemas.join(\",\")}`);\n  } else if (schemaResolution.provenance === \"fallback\") {\n    changes.push(\n      ...formatSchemaFallbackMessages({\n        discoveryError: schemaResolution.discoveryError,\n        expectedLiveSchemas: [\"public\", \"athena\"],\n        schemas: schemaResolution.schemas,\n      })\n    );\n  } else if (schemaResolution.discoveryError) {\n    changes.push(`schema-discovery-failed: ${schemaResolution.discoveryError}`);\n  }\n\n  // --- Create path ---\n  if (!pathInfo.exists || force) {\n    const content = renderGeneratorConfigFile({\n      mode,\n      schemas: schemaResolution.schemas,\n    });\n\n    if (pathInfo.exists) {\n      changes.push(\"force-rewrote-config\");\n    } else {\n      changes.push(\"created-modern-config\");\n    }\n\n    if (!dryRun) {\n      await mkdir(dirname(pathInfo.absolutePath), { recursive: true });\n      await writeFile(pathInfo.absolutePath, content, \"utf8\");\n    }\n\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: pathInfo.exists ? \"updated\" : \"created\",\n      changes,\n      content,\n      discoveryError: schemaResolution.discoveryError,\n      mode,\n      path: pathInfo.relativePath,\n      reason: pathInfo.exists ? \"force rewrite\" : \"config file missing\",\n      schemaProvenance: schemaResolution.provenance,\n      schemas: schemaResolution.schemas,\n    };\n  }\n\n  // --- Update path (intelligent, non-destructive) ---\n  const existingSource = await readFile(pathInfo.absolutePath, \"utf8\");\n  const existingLiteralSchemas = extractLiteralSchemas(existingSource);\n  const existingSchemas =\n    existingLiteralSchemas ??\n    (loaded\n      ? schemasFromNormalized(loaded.config)\n      : [...DEFAULT_POSTGRES_SCHEMAS]);\n\n  if (schemasEqual(existingSchemas, schemaResolution.schemas)) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"unchanged\",\n      changes: changes.length > 0 ? changes : [\"schemas-already-current\"],\n      content: existingSource,\n      discoveryError: schemaResolution.discoveryError,\n      mode,\n      path: pathInfo.relativePath,\n      reason: \"schemas already match discovered/configured set\",\n      schemaProvenance: schemaResolution.provenance,\n      schemas: existingSchemas,\n    };\n  }\n\n  const patched = patchSchemasInConfigSource(\n    existingSource,\n    schemaResolution.schemas\n  );\n  if (!patched) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"skipped\",\n      changes: [\n        ...changes,\n        \"could-not-patch-schemas-surgically\",\n        \"re-run with force=true to rewrite full template\",\n      ],\n      content: existingSource,\n      discoveryError: schemaResolution.discoveryError,\n      mode,\n      path: pathInfo.relativePath,\n      reason:\n        \"existing config schemas could not be updated surgically without risking a destructive rewrite\",\n      schemaProvenance: schemaResolution.provenance,\n      schemas: existingSchemas,\n    };\n  }\n\n  if (patched === existingSource) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"unchanged\",\n      changes: [...changes, \"patch-noop\"],\n      content: existingSource,\n      discoveryError: schemaResolution.discoveryError,\n      mode,\n      path: pathInfo.relativePath,\n      reason: \"patch produced identical content\",\n      schemaProvenance: schemaResolution.provenance,\n      schemas: existingSchemas,\n    };\n  }\n\n  changes.push(\n    `schemas-updated: ${existingSchemas.join(\",\")} -> ${schemaResolution.schemas.join(\",\")}`\n  );\n\n  if (!dryRun) {\n    await writeFile(pathInfo.absolutePath, patched, \"utf8\");\n  }\n\n  return {\n    absolutePath: pathInfo.absolutePath,\n    action: \"updated\",\n    changes,\n    content: patched,\n    discoveryError: schemaResolution.discoveryError,\n    mode,\n    path: pathInfo.relativePath,\n    reason: \"auto-filled provider.schemas\",\n    schemaProvenance: schemaResolution.provenance,\n    schemas: schemaResolution.schemas,\n  };\n}\n","import { createAthenaPostgresRuntime } from \"../postgres/owned-runtime.ts\";\nimport { createClient } from \"../v3-client-core.ts\";\nimport type {\n  GeneratorProviderConfig,\n  PostgresDirectProviderConfig,\n  PostgresGatewayProviderConfig,\n} from \"./types.ts\";\n\n/**\n * SQL that lists non-system PostgreSQL schemas that contain base tables.\n * Used by both direct (`pg`) and gateway (`/gateway/query`) discovery paths.\n */\nexport const DISCOVER_POSTGRES_SCHEMAS_SQL = `\n  SELECT DISTINCT n.nspname AS schema_name\n  FROM pg_namespace n\n  JOIN pg_class c ON c.relnamespace = n.oid\n  WHERE c.relkind IN ('r', 'p')\n    AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n    AND n.nspname NOT LIKE 'pg_toast%'\n    AND n.nspname NOT LIKE 'pg_temp_%'\n    AND n.nspname NOT LIKE 'pg_toast_temp_%'\n  ORDER BY n.nspname;\n`.trim();\n\nconst SYSTEM_SCHEMA_PREFIXES = [\"pg_\"] as const;\nconst SYSTEM_SCHEMAS = new Set([\"pg_catalog\", \"information_schema\"]);\n\ninterface SchemaNameRow {\n  nspname?: unknown;\n  schema_name?: unknown;\n  schemaName?: unknown;\n}\n\n/**\n * Filters and normalizes a raw list of schema names into a stable, unique array.\n * Drops empty strings and PostgreSQL system/catalog namespaces.\n */\nexport function normalizeDiscoveredSchemas(input: readonly string[]): string[] {\n  const schemas: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of input) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    if (SYSTEM_SCHEMAS.has(schema)) {\n      continue;\n    }\n    if (SYSTEM_SCHEMA_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n      continue;\n    }\n    seen.add(schema);\n    schemas.push(schema);\n  }\n\n  return schemas;\n}\n\n/**\n * Merges configured schemas with discovered ones without dropping user intent.\n * - preserves configured order first\n * - appends newly discovered schemas\n * - never removes a configured schema that discovery did not return\n */\nexport function mergeSchemaSelections(\n  configured: readonly string[] | undefined,\n  discovered: readonly string[]\n): string[] {\n  const result: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of configured ?? []) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    result.push(schema);\n  }\n\n  for (const value of discovered) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    result.push(schema);\n  }\n\n  return result.length > 0 ? result : [\"public\"];\n}\n\n/**\n * True when two schema lists select the same set (order-insensitive).\n */\nexport function schemasEqual(\n  left: readonly string[] | undefined,\n  right: readonly string[] | undefined\n): boolean {\n  const a = normalizeDiscoveredSchemas(left ?? []);\n  const b = normalizeDiscoveredSchemas(right ?? []);\n  if (a.length !== b.length) {\n    return false;\n  }\n  const set = new Set(a);\n  return b.every((schema) => set.has(schema));\n}\n\nfunction coerceSchemaName(row: SchemaNameRow): string | undefined {\n  const raw = row.schema_name ?? row.schemaName ?? row.nspname;\n  if (typeof raw !== \"string\") {\n    return;\n  }\n  const trimmed = raw.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function discoverDirectSchemas(\n  config: PostgresDirectProviderConfig\n): Promise<string[]> {\n  const runtime = createAthenaPostgresRuntime({\n    connectionString: config.connectionString,\n  });\n  try {\n    const result = await runtime.query<SchemaNameRow>(\n      DISCOVER_POSTGRES_SCHEMAS_SQL,\n      undefined,\n      { workload: \"introspection\" }\n    );\n    const names = result.rows\n      .map(coerceSchemaName)\n      .filter((value): value is string => Boolean(value));\n    return normalizeDiscoveredSchemas(names);\n  } finally {\n    await runtime.close();\n  }\n}\n\nasync function discoverGatewaySchemas(\n  config: PostgresGatewayProviderConfig\n): Promise<string[]> {\n  // Avoid ReturnType<typeof createClient> — it overflows TS instantiation depth.\n  interface GatewayQueryClient {\n    query: <T>(sql: string) => Promise<{\n      data?: T[] | null;\n      error?: { message?: string } | null;\n      status: number;\n    }>;\n  }\n  const client = (\n    createClient as unknown as (c: unknown) => GatewayQueryClient\n  )({\n    backend: {\n      type: config.backend ?? \"postgresql\",\n    },\n    client: config.client,\n    db: { url: config.gatewayUrl },\n    env: typeof process === \"undefined\" ? undefined : process.env,\n    key: config.apiKey,\n  });\n\n  const result = await client.query<SchemaNameRow>(\n    DISCOVER_POSTGRES_SCHEMAS_SQL\n  );\n  if (result.error || result.status < 200 || result.status >= 300) {\n    throw new Error(\n      result.error?.message ??\n        `Gateway schema discovery failed with status ${result.status}`\n    );\n  }\n\n  const names = (result.data ?? [])\n    .map(coerceSchemaName)\n    .filter((value): value is string => Boolean(value));\n  return normalizeDiscoveredSchemas(names);\n}\n\n/**\n * Discovers application-owned PostgreSQL schemas for generator config auto-fill.\n * Supports both direct Postgres and Athena gateway providers.\n */\nexport async function discoverPostgresSchemas(\n  provider: GeneratorProviderConfig\n): Promise<string[]> {\n  if (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n    return discoverDirectSchemas(provider);\n  }\n\n  if (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n    return discoverGatewaySchemas(provider);\n  }\n\n  throw new Error(\n    `Schema discovery is only implemented for postgres direct/gateway providers (received ${provider.kind}/${\"mode\" in provider ? provider.mode : \"unknown\"}).`\n  );\n}\n","export interface RenderGeneratedFileHeaderOptions {\n  /** Config / authority path shown in the header. Defaults to `athena.config.ts`. */\n  source?: 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  /^(?:\\uFEFF?\\s*\\/\\*\\*[\\s\\S]*?(?:@generated|Generated by Athena)[\\s\\S]*?\\*\\/\\s*)+/;\n\n/**\n * Exact signature used by the pre-canonical Athena generator banner.\n * Keep this separate from the tolerant normalizer above: marker prose in a\n * hand-authored file must never grant generator ownership.\n */\nconst ATHENA_LEGACY_GENERATED_HEADER_RE =\n  /^(?:\\uFEFF?[ \\t]*\\/\\*\\*\\r?\\n[ \\t]*\\* Generated by Athena\\.\\r?\\n[ \\t]*\\*[ \\t]*\\r?\\n[ \\t]*\\* Do not edit manually\\.\\r?\\n[ \\t]*\\*[ \\t]*\\r?\\n[ \\t]*\\* Source:\\r?\\n[ \\t]*\\* athena\\.config\\.ts\\r?\\n)/;\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  \"/**\\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  options: RenderGeneratedFileHeaderOptions = {}\n): string {\n  const source = (options.source ?? DEFAULT_GENERATED_HEADER_SOURCE).trim();\n  const sourceLine =\n    source.length > 0 ? source : DEFAULT_GENERATED_HEADER_SOURCE;\n  return `${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/** True when `source` begins with a recognized Athena generated-file header. */\nexport function isAthenaGeneratedSource(source: string): boolean {\n  const normalized = source.replace(/^\\uFEFF/, \"\");\n  return (\n    normalized.startsWith(ATHENA_GENERATED_FILE_PREFIX) ||\n    ATHENA_LEGACY_GENERATED_HEADER_RE.test(normalized)\n  );\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  return 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  content: string,\n  options: RenderGeneratedFileHeaderOptions = {}\n): string {\n  const body = stripGeneratedFileHeader(\n    content.replace(/^\\uFEFF?/, \"\")\n  ).replace(/^\\s*\\n/, \"\");\n  return `${renderGeneratedFileHeader(options)}\\n${body}`;\n}\n","import type {\n  IntrospectionColumn,\n  IntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n  composeGeneratorArtifacts,\n  type ModelArtifactDescriptorBase,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n} from \"./render-shared.ts\";\nimport {\n  generateTableBuilderArtifactsFromSnapshot,\n  renderColumnBuilder,\n  renderNativeTypeDescriptor,\n} from \"./table-builder-renderer.ts\";\nimport { filterIntrospectionSnapshot } from \"./table-selection.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string;\n  insertTypeName: string;\n  updateTypeName: string;\n  modelConstName: string;\n};\n\nfunction renderModelColumnMetadata(column: IntrospectionColumn): string {\n  const rendered = renderColumnBuilder(column);\n  const fields = [\n    `kind: '${rendered.helper}'`,\n    `nativeType: ${renderNativeTypeDescriptor(column)}`,\n    `nullable: ${column.isNullable}`,\n  ];\n\n  if (column.hasDefault) {\n    const expression = column.defaultExpression?.trim();\n    const defaultValue =\n      expression === undefined || expression.length === 0\n        ? \"{ kind: 'unknown' }\"\n        : `{ kind: 'sql', dialect: 'postgres', expression: ${escapeStringLiteral(expression)} }`;\n    fields.push(`default: ${defaultValue}`, \"hasDefault: true\");\n  }\n\n  if (column.identity !== undefined) {\n    fields.push(\n      `identity: ${escapeStringLiteral(column.identity)}`,\n      `generationStrategy: { kind: 'identity', mode: ${escapeStringLiteral(column.identity)} }`\n    );\n  } else if (column.isGenerated) {\n    fields.push(\n      \"isGenerated: true\",\n      \"generationStrategy: { kind: 'generated-always' }\"\n    );\n  }\n\n  if (column.enumValues !== undefined) {\n    fields.push(\n      `enumValues: [${column.enumValues.map(escapeStringLiteral).join(\", \")}]`\n    );\n  }\n\n  if (typeof column.numericPrecision === \"number\") {\n    fields.push(`precision: ${column.numericPrecision}`);\n  }\n  if (typeof column.numericScale === \"number\") {\n    fields.push(`scale: ${column.numericScale}`);\n  }\n\n  return `{ ${fields.join(\", \")} }`;\n}\n\nfunction renderModelArtifact(\n  databaseName: string,\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig\n): GeneratedArtifact {\n  const columnLines = Object.values(descriptor.table.columns)\n    .map((column) => {\n      const propertyName = escapeTypePropertyName(column.name);\n      const baseType = resolvePostgresColumnType(column);\n      const isOptional = column.isNullable;\n      const typeWithNullability = column.isNullable\n        ? `${baseType} | null`\n        : baseType;\n      return `  ${propertyName}${isOptional ? \"?\" : \"\"}: ${typeWithNullability}`;\n    })\n    .join(\"\\n\");\n\n  const nullableLines = Object.values(descriptor.table.columns)\n    .map(\n      (column) =>\n        `      ${renderObjectKey(column.name)}: ${column.isNullable ? \"true\" : \"false\"}`\n    )\n    .join(\",\\n\");\n\n  const metadataLines = Object.values(descriptor.table.columns)\n    .map((column) => {\n      return `      ${renderObjectKey(column.name)}: ${renderModelColumnMetadata(column)}`;\n    })\n    .join(\",\\n\");\n\n  const relationEntries = Object.entries(descriptor.table.relations);\n  const relationBlock =\n    config.features.emitRelations && relationEntries.length > 0\n      ? `,\n    relations: {\n${relationEntries\n  .map(\n    ([relationKey, relationValue]) =>\n      `      ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`\n  )\n  .join(\",\\n\")}\n    }`\n      : \"\";\n\n  const content = `import { defineModel } from '@xylex-group/athena'\n\nexport interface ${descriptor.rowTypeName} {\n${columnLines}\n}\n\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\n\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\n  meta: {\n    database: ${escapeStringLiteral(databaseName)},\n    schema: ${escapeStringLiteral(descriptor.schemaName)},\n    model: ${escapeStringLiteral(descriptor.tableName)},\n    tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\n    primaryKey: [${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")}],\n    nullable: {\n${nullableLines}\n    },\n    columns: {\n${metadataLines}\n    }${relationBlock}\n  }\n})\n`;\n\n  return {\n    content,\n    kind: \"model\",\n    path: descriptor.filePath,\n  };\n}\n\n/**\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\n */\nexport function generateArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig\n): GeneratedArtifacts {\n  const normalizedConfig =\n    \"internal\" in config\n      ? (config as NormalizedAthenaGeneratorConfig)\n      : normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n  const filteredSnapshot = filterIntrospectionSnapshot(\n    snapshot,\n    normalizedConfig.filter\n  );\n  if (normalizedConfig.output.format === \"table-builder\") {\n    return generateTableBuilderArtifactsFromSnapshot(\n      filteredSnapshot,\n      normalizedConfig\n    );\n  }\n  return composeGeneratorArtifacts({\n    config: normalizedConfig,\n    createModelDescriptor({\n      providerName,\n      databaseName,\n      schemaName,\n      tableName,\n      table,\n    }) {\n      const modelConstName = toSafeIdentifier(\n        `${schemaName} ${tableName} model`,\n        normalizedConfig.naming.modelConst,\n        \"model\"\n      );\n      return {\n        exportConstName: modelConstName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            database: databaseName,\n            kind: \"model\",\n            model: tableName,\n            provider: providerName,\n            schema: schemaName,\n          },\n          normalizedConfig\n        ),\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n        modelConstName,\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n        schemaName,\n        table,\n        tableName,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n      };\n    },\n    renderModelArtifact: (descriptor) =>\n      renderModelArtifact(\n        filteredSnapshot.database,\n        descriptor,\n        normalizedConfig\n      ),\n    snapshot: filteredSnapshot,\n  });\n}\n","import { slugify } from \"../utils/slugify.ts\";\nimport type { NamingStyle } from \"./types.ts\";\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED_IDENTIFIERS = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"class\",\n  \"const\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"delete\",\n  \"do\",\n  \"else\",\n  \"enum\",\n  \"export\",\n  \"extends\",\n  \"false\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"import\",\n  \"in\",\n  \"instanceof\",\n  \"new\",\n  \"null\",\n  \"return\",\n  \"super\",\n  \"switch\",\n  \"this\",\n  \"throw\",\n  \"true\",\n  \"try\",\n  \"typeof\",\n  \"var\",\n  \"void\",\n  \"while\",\n  \"with\",\n  \"as\",\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  \"any\",\n  \"boolean\",\n  \"constructor\",\n  \"declare\",\n  \"get\",\n  \"module\",\n  \"require\",\n  \"number\",\n  \"set\",\n  \"string\",\n  \"symbol\",\n  \"type\",\n  \"from\",\n  \"of\",\n]);\n\nfunction splitWords(input: string): string[] {\n  return input\n    .trim()\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n    .replace(/[^A-Za-z0-9]+/g, \" \")\n    .split(\" \")\n    .map((word) => word.trim())\n    .filter((word) => word.length > 0);\n}\n\nfunction capitalize(word: string): string {\n  return word.length > 0\n    ? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`\n    : word;\n}\n\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\n  const normalized = candidate.length > 0 ? candidate : fallback;\n  const prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized;\n  if (RESERVED_IDENTIFIERS.has(prefixed)) {\n    return `${prefixed}_value`;\n  }\n  return prefixed;\n}\n\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\n  const words = splitWords(input);\n  if (words.length === 0) {\n    return \"\";\n  }\n\n  switch (style) {\n    case \"preserve\":\n      return input;\n    case \"camel\": {\n      const [first, ...rest] = words;\n      return `${first.toLowerCase()}${rest.map(capitalize).join(\"\")}`;\n    }\n    case \"pascal\":\n      return words.map(capitalize).join(\"\");\n    case \"snake\":\n      return words.map((word) => word.toLowerCase()).join(\"_\");\n    case \"kebab\":\n      return slugify(words.join(\"-\"));\n    default:\n      return input;\n  }\n}\n\nexport function toSafeIdentifier(\n  input: string,\n  style: NamingStyle,\n  fallback = \"value\"\n): string {\n  const transformed = applyNamingStyle(input, style);\n  const normalized = transformed\n    .replace(/[^A-Za-z0-9_$]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n  const fallbackValue = splitWords(input).join(\"\");\n  return ensureValidIdentifier(\n    normalized.length > 0 ? normalized : fallbackValue,\n    fallback\n  );\n}\n\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  if (IDENTIFIER_PATTERN.test(propertyName)) {\n    return propertyName;\n  }\n  return `'${propertyName.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapeStringLiteral(value: string): string {\n  return `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n","export function slugify(input: string): string {\n  return input\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\")\n    .slice(0, 64);\n}\n","import type { IntrospectionColumn } from \"../schema/types.ts\";\n\nconst NUMBER_TYPES = new Set([\n  \"int2\",\n  \"int4\",\n  \"float4\",\n  \"float8\",\n  \"smallint\",\n  \"integer\",\n  \"real\",\n  \"double precision\",\n]);\n\nconst STRING_NUMERIC_TYPES = new Set([\n  \"int8\",\n  \"bigint\",\n  \"serial8\",\n  \"bigserial\",\n  \"numeric\",\n  \"decimal\",\n  \"money\",\n]);\n\nconst TEXT_TYPES = new Set([\n  \"char\",\n  \"bpchar\",\n  \"varchar\",\n  \"character varying\",\n  \"text\",\n  \"citext\",\n  \"name\",\n  \"uuid\",\n  \"date\",\n  \"time\",\n  \"timetz\",\n  \"timestamp\",\n  \"timestamptz\",\n  \"interval\",\n  \"inet\",\n  \"cidr\",\n  \"macaddr\",\n  \"macaddr8\",\n  \"point\",\n  \"line\",\n  \"lseg\",\n  \"box\",\n  \"path\",\n  \"polygon\",\n  \"circle\",\n  \"bit\",\n  \"varbit\",\n  \"xml\",\n  \"tsvector\",\n  \"tsquery\",\n  \"jsonpath\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim();\n  if (column.arrayDimensions > 0 && preferred.startsWith(\"_\")) {\n    return preferred.slice(1);\n  }\n  return preferred;\n}\n\nfunction wrapArrayType(baseType: string, depth: number): string {\n  let wrapped = baseType;\n  for (let index = 0; index < depth; index += 1) {\n    wrapped = `Array<${wrapped}>`;\n  }\n  return wrapped;\n}\n\nfunction resolveScalarType(column: IntrospectionColumn): string {\n  const label = normalizeTypeLabel(column);\n\n  if (NUMBER_TYPES.has(label)) {\n    return \"number\";\n  }\n\n  if (STRING_NUMERIC_TYPES.has(label)) {\n    return \"string\";\n  }\n\n  if (label === \"bool\" || label === \"boolean\") {\n    return \"boolean\";\n  }\n\n  if (label === \"bytea\") {\n    return \"Buffer\";\n  }\n\n  if (label === \"json\" || label === \"jsonb\") {\n    return \"unknown\";\n  }\n\n  if (TEXT_TYPES.has(label)) {\n    return \"string\";\n  }\n\n  if (label.endsWith(\"range\") || label.endsWith(\"multirange\")) {\n    return \"string\";\n  }\n\n  return \"unknown\";\n}\n\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\n  if (column.typeKind === \"enum\") {\n    const values = column.enumValues ?? [];\n    if (values.length === 0) {\n      return \"string\";\n    }\n    return values\n      .map((value) => `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`)\n      .join(\" | \");\n  }\n\n  if (column.typeKind === \"composite\") {\n    return \"Record<string, unknown>\";\n  }\n\n  if (\n    column.typeKind === \"domain\" ||\n    column.typeKind === \"range\" ||\n    column.typeKind === \"multirange\"\n  ) {\n    return \"string\";\n  }\n\n  return resolveScalarType(column);\n}\n\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\n  const baseType = resolveKindAwareType(column);\n  if (!column.arrayDimensions || column.arrayDimensions <= 0) {\n    return baseType;\n  }\n  return wrapArrayType(baseType, column.arrayDimensions);\n}\n","import { posix } from \"node:path\";\nimport type {\n  IntrospectionRelation,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n} from \"../schema/types.ts\";\nimport { sha256HexUtf8 } from \"../node-crypto.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\nimport {\n  ATHENA_GENERATED_FILE_PREFIX,\n  GENERATED_FILE_BANNER,\n  isAthenaGeneratedSource,\n  type RenderGeneratedFileHeaderOptions,\n  renderGeneratedFileHeader,\n  stripGeneratedFileHeader,\n  withGeneratedFileBanner,\n} from \"./generated-file-header.ts\";\nimport {\n  applyNamingStyle,\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { renderOutputPath } from \"./placeholders.ts\";\nimport type {\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport type { RenderGeneratedFileHeaderOptions };\nexport {\n  ATHENA_GENERATED_FILE_PREFIX,\n  GENERATED_FILE_BANNER,\n  isAthenaGeneratedSource,\n  renderGeneratedFileHeader,\n  stripGeneratedFileHeader,\n  withGeneratedFileBanner,\n};\n\ntype OutputPathKind = \"model\" | \"schema\" | \"database\" | \"registry\";\n\nfunction sortForFingerprint(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(sortForFingerprint);\n  }\n  if (value && typeof value === \"object\") {\n    const object = value as Record<string, unknown>;\n    return Object.fromEntries(\n      Object.keys(object)\n        .sort()\n        .map((key) => [key, sortForFingerprint(object[key])])\n    );\n  }\n  return value;\n}\n\nfunction schemaFingerprint(snapshot: Pick<IntrospectionSnapshot, \"schemas\">): string {\n  return sha256HexUtf8(JSON.stringify(sortForFingerprint(snapshot.schemas)));\n}\n\ninterface OutputPathTokens {\n  database: string;\n  kind: OutputPathKind;\n  model: string;\n  provider: string;\n  schema: string;\n}\n\ninterface SchemaScopedPathDescriptor {\n  filePath: string;\n  schemaName: string;\n}\n\ninterface DatabaseArtifactDescriptor<\n  TSchema extends SchemaArtifactDescriptor = SchemaArtifactDescriptor,\n> {\n  databaseConstName: string;\n  filePath: string;\n  schemas: TSchema[];\n}\n\ninterface ComposeGeneratorArtifactsInput<\n  TModel extends ModelArtifactDescriptorBase,\n> {\n  config: NormalizedAthenaGeneratorConfig;\n  createModelDescriptor: (input: {\n    providerName: string;\n    databaseName: string;\n    schemaName: string;\n    tableName: string;\n    table: IntrospectionTable;\n  }) => TModel;\n  renderModelArtifact: (descriptor: TModel) => GeneratedArtifact;\n  snapshot: IntrospectionSnapshot;\n}\n\nexport interface ModelArtifactDescriptorBase\n  extends SchemaScopedPathDescriptor {\n  exportConstName: string;\n  table: IntrospectionTable;\n  tableName: string;\n}\n\nexport interface SchemaArtifactDescriptor<\n  TModel extends ModelArtifactDescriptorBase = ModelArtifactDescriptorBase,\n> extends SchemaScopedPathDescriptor {\n  models: TModel[];\n  schemaConstName: string;\n}\n\nexport function normalizePath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction withoutTypeScriptExtension(pathValue: string): string {\n  return pathValue.replace(/\\.tsx?$/i, \"\");\n}\n\nexport function toModuleImportPath(\n  fromFile: string,\n  targetFile: string\n): string {\n  const relativePath = withoutTypeScriptExtension(\n    normalizePath(posix.relative(posix.dirname(fromFile), targetFile))\n  );\n  return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n\nexport function resolveOutputPath(\n  target: string,\n  tokens: OutputPathTokens,\n  config: NormalizedAthenaGeneratorConfig\n): string {\n  return normalizePath(renderOutputPath(target, tokens, config.output));\n}\n\nconst IDENTIFIER_NAME_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nexport function renderObjectKey(key: string): string {\n  return escapeTypePropertyName(key);\n}\n\nexport interface RenderObjectPropertyOptions {\n  /** Indentation prefix. Defaults to two spaces. */\n  indent?: 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  key: string,\n  value: string,\n  options: RenderObjectPropertyOptions = {}\n): string {\n  const indent = options.indent ?? \"  \";\n  const renderedKey = renderObjectKey(key);\n  const trimmedValue = value.trim();\n  const canShorthand =\n    IDENTIFIER_NAME_PATTERN.test(key) &&\n    renderedKey === key &&\n    trimmedValue === key;\n  return `${indent}${canShorthand ? renderedKey : `${renderedKey}: ${trimmedValue}`}`;\n}\n\nexport interface RenderObjectLiteralOptions\n  extends RenderObjectPropertyOptions {\n  /**\n   * When true (default), every property line ends with a trailing comma —\n   * including the last entry — matching Athena generated TS style.\n   */\n  trailingCommas?: boolean;\n}\n\n/**\n * Render a multi-line object-literal body (one property per line).\n */\nexport function renderObjectLiteral(\n  entries: ReadonlyArray<{ key: string; value: string }>,\n  options: RenderObjectLiteralOptions = {}\n): string {\n  const trailingCommas = options.trailingCommas !== false;\n  return entries\n    .map((entry) => {\n      const property = renderObjectProperty(entry.key, entry.value, options);\n      return trailingCommas ? `${property},` : property;\n    })\n    .join(\"\\n\");\n}\n\nexport function renderRelationLiteral(relation: IntrospectionRelation): string {\n  const through = relation.through\n    ? `,\n      through: {\n        schema: ${escapeStringLiteral(relation.through.schema)},\n        model: ${escapeStringLiteral(relation.through.model)},\n        sourceColumns: [${relation.through.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n        targetColumns: [${relation.through.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      }`\n    : \"\";\n\n  return `{\n      kind: ${escapeStringLiteral(relation.kind)},\n      sourceColumns: [${relation.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      targetSchema: ${escapeStringLiteral(relation.targetSchema)},\n      targetModel: ${escapeStringLiteral(relation.targetModel)},\n      targetColumns: [${relation.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}]${through}\n    }`;\n}\n\nexport function renderSchemaArtifact<\n  TModel extends ModelArtifactDescriptorBase,\n>(descriptor: SchemaArtifactDescriptor<TModel>): GeneratedArtifact {\n  const importLines = descriptor.models\n    .map((modelDescriptor) => {\n      const importPath = toModuleImportPath(\n        descriptor.filePath,\n        modelDescriptor.filePath\n      );\n      return `import { ${modelDescriptor.exportConstName} } from '${importPath}'`;\n    })\n    .join(\"\\n\");\n\n  const modelEntries = renderObjectLiteral(\n    descriptor.models.map((modelDescriptor) => ({\n      key: modelDescriptor.tableName,\n      value: modelDescriptor.exportConstName,\n    }))\n  );\n\n  const content = `import { defineSchema } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.schemaConstName} = defineSchema({\n${modelEntries}\n})\n`;\n\n  return {\n    content,\n    kind: \"schema\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function renderDatabaseArtifact<\n  TSchema extends SchemaArtifactDescriptor,\n>(descriptor: DatabaseArtifactDescriptor<TSchema>): GeneratedArtifact {\n  const importLines = descriptor.schemas\n    .map((schemaDescriptor) => {\n      const importPath = toModuleImportPath(\n        descriptor.filePath,\n        schemaDescriptor.filePath\n      );\n      return `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`;\n    })\n    .join(\"\\n\");\n\n  const schemaEntries = renderObjectLiteral(\n    descriptor.schemas.map((schemaDescriptor) => ({\n      key: schemaDescriptor.schemaName,\n      value: schemaDescriptor.schemaConstName,\n    }))\n  );\n\n  const content = `import { defineDatabase } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.databaseConstName} = defineDatabase({\n${schemaEntries}\n})\n`;\n\n  return {\n    content,\n    kind: \"database\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function renderRegistryArtifact(\n  registryPath: string,\n  databasePath: string,\n  databaseConstName: string,\n  registryConstName: string,\n  databaseName: string,\n  snapshot: Pick<IntrospectionSnapshot, \"schemas\">,\n  outputPreset: NormalizedAthenaGeneratorConfig[\"output\"][\"preset\"],\n  outputFormat: NormalizedAthenaGeneratorConfig[\"output\"][\"format\"],\n  schemaVersion: number\n): GeneratedArtifact {\n  const databaseImportPath = toModuleImportPath(registryPath, databasePath);\n  const content = `import { defineRegistry } from '@xylex-group/athena'\nimport { ${databaseConstName} } from '${databaseImportPath}'\n\nexport const __athena_schema_meta = {\n  schemaVersion: ${schemaVersion},\n  schemaFingerprint: ${escapeStringLiteral(schemaFingerprint(snapshot))},\n  schemaSource: ${escapeStringLiteral(`postgres:${databaseName}`)},\n  generatorVersion: ${escapeStringLiteral(PACKAGE_VERSION)},\n  generationFormatVersion: ${escapeStringLiteral(`${outputPreset}/${outputFormat}/1`)},\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  return {\n    content,\n    kind: \"registry\",\n    path: registryPath,\n  };\n}\n\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n  const seen = new Map<string, GeneratedArtifact>();\n  for (const file of files) {\n    const existing = seen.get(file.path);\n    if (existing) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${file.path}`,\n          `Collision: ${existing.kind} and ${file.kind}.`,\n          \"Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.\",\n        ].join(\" \")\n      );\n    }\n    seen.set(file.path, file);\n  }\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n  const normalizedPath = normalizePath(pathValue);\n  const parsedPath = posix.parse(normalizedPath);\n  const schemaSegment = applyNamingStyle(schemaName, \"kebab\");\n  if (!schemaSegment) {\n    return normalizedPath;\n  }\n\n  const dir =\n    parsedPath.dir.length > 0\n      ? `${parsedPath.dir}/${schemaSegment}`\n      : schemaSegment;\n  return normalizePath(posix.join(dir, parsedPath.base));\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n  TDescriptor extends SchemaScopedPathDescriptor,\n>(descriptors: TDescriptor[]): TDescriptor[] {\n  const nextDescriptors = descriptors.map((descriptor) => ({ ...descriptor }));\n  const duplicates = new Map<string, number[]>();\n\n  for (let index = 0; index < nextDescriptors.length; index += 1) {\n    const descriptor = nextDescriptors[index];\n    const indexes = duplicates.get(descriptor.filePath) ?? [];\n    indexes.push(index);\n    duplicates.set(descriptor.filePath, indexes);\n  }\n\n  let appliedSchemaScoping = false;\n  for (const indexes of duplicates.values()) {\n    if (indexes.length <= 1) {\n      continue;\n    }\n\n    const schemaNames = new Set(\n      indexes.map((index) => nextDescriptors[index].schemaName)\n    );\n    if (schemaNames.size <= 1) {\n      continue;\n    }\n\n    for (const index of indexes) {\n      const descriptor = nextDescriptors[index];\n      descriptor.filePath = addSchemaSegmentToPath(\n        descriptor.filePath,\n        descriptor.schemaName\n      );\n    }\n    appliedSchemaScoping = true;\n  }\n\n  if (!appliedSchemaScoping) {\n    return nextDescriptors;\n  }\n\n  const normalizedPaths = new Set<string>();\n  for (const descriptor of nextDescriptors) {\n    if (normalizedPaths.has(descriptor.filePath)) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${descriptor.filePath}`,\n          \"Automatic schema path scoping was applied but collisions remain.\",\n          \"Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.\",\n        ].join(\" \")\n      );\n    }\n    normalizedPaths.add(descriptor.filePath);\n  }\n\n  return nextDescriptors;\n}\n\nexport function composeGeneratorArtifacts<\n  TModel extends ModelArtifactDescriptorBase,\n>(input: ComposeGeneratorArtifactsInput<TModel>): GeneratedArtifacts {\n  const { snapshot, config, createModelDescriptor, renderModelArtifact } =\n    input;\n  const providerName = snapshot.backend;\n  const databaseName = snapshot.database;\n  const modelDescriptors: TModel[] = [];\n\n  for (const schemaName of Object.keys(snapshot.schemas).sort()) {\n    const schema = snapshot.schemas[schemaName];\n    for (const tableName of Object.keys(schema.tables).sort()) {\n      modelDescriptors.push(\n        createModelDescriptor({\n          databaseName,\n          providerName,\n          schemaName,\n          table: schema.tables[tableName],\n          tableName,\n        })\n      );\n    }\n  }\n\n  const scopedModelDescriptors =\n    scopeDuplicateDescriptorPathsBySchema(modelDescriptors);\n\n  let schemaDescriptors: SchemaArtifactDescriptor<TModel>[] = Object.keys(\n    snapshot.schemas\n  )\n    .sort()\n    .map((schemaName) => ({\n      filePath: resolveOutputPath(\n        config.output.targets.schema,\n        {\n          database: databaseName,\n          kind: \"schema\",\n          model: \"index\",\n          provider: providerName,\n          schema: schemaName,\n        },\n        config\n      ),\n      models: scopedModelDescriptors.filter(\n        (model) => model.schemaName === schemaName\n      ),\n      schemaConstName: toSafeIdentifier(\n        `${schemaName} schema`,\n        config.naming.schemaConst,\n        \"schema\"\n      ),\n      schemaName,\n    }));\n\n  schemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors);\n\n  const databaseDescriptor: DatabaseArtifactDescriptor<\n    SchemaArtifactDescriptor<TModel>\n  > = {\n    databaseConstName: toSafeIdentifier(\n      `${databaseName} database`,\n      config.naming.databaseConst,\n      \"database\"\n    ),\n    filePath: resolveOutputPath(\n      config.output.targets.database,\n      {\n        database: databaseName,\n        kind: \"database\",\n        model: \"index\",\n        provider: providerName,\n        schema: \"index\",\n      },\n      config\n    ),\n    schemas: schemaDescriptors,\n  };\n\n  const files: GeneratedArtifact[] = [];\n\n  for (const modelDescriptor of scopedModelDescriptors) {\n    files.push(renderModelArtifact(modelDescriptor));\n  }\n\n  for (const schemaDescriptor of schemaDescriptors) {\n    files.push(renderSchemaArtifact(schemaDescriptor));\n  }\n\n  files.push(renderDatabaseArtifact(databaseDescriptor));\n\n  if (config.features.emitRegistry) {\n    const registryPath = resolveOutputPath(\n      config.output.targets.registry,\n      {\n        database: databaseName,\n        kind: \"registry\",\n        model: \"index\",\n        provider: providerName,\n        schema: \"index\",\n      },\n      config\n    );\n    files.push(\n      renderRegistryArtifact(\n        registryPath,\n        databaseDescriptor.filePath,\n        databaseDescriptor.databaseConstName,\n        toSafeIdentifier(\"registry\", config.naming.registryConst, \"registry\"),\n        databaseName,\n        snapshot,\n        config.output.preset,\n        config.output.format,\n        config.internal.schemaVersion\n      )\n    );\n  }\n\n  assertNoDuplicatePaths(files);\n\n  return {\n    files: files.map((file) => ({\n      ...file,\n      content: withGeneratedFileBanner(file.content),\n    })),\n    snapshot,\n  };\n}\n","import { applyNamingStyle } from \"./naming.ts\";\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from \"./types.ts\";\n\nexport interface PlaceholderContext {\n  database: string;\n  kind: GeneratorArtifactKind;\n  model: string;\n  provider: string;\n  schema: string;\n}\n\nfunction createStyleTokens(\n  prefix: string,\n  value: string\n): Record<string, string> {\n  return {\n    [prefix]: value,\n    [`${prefix}_camel`]: applyNamingStyle(value, \"camel\"),\n    [`${prefix}_pascal`]: applyNamingStyle(value, \"pascal\"),\n    [`${prefix}_snake`]: applyNamingStyle(value, \"snake\"),\n    [`${prefix}_kebab`]: applyNamingStyle(value, \"kebab\"),\n  };\n}\n\nfunction renderTemplate(\n  template: string,\n  tokenMap: Record<string, string>\n): string {\n  return template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\n    if (!(token in tokenMap)) {\n      throw new Error(\n        `Unknown placeholder token \"${token}\" in template \"${template}\"`\n      );\n    }\n    return tokenMap[token];\n  });\n}\n\nfunction resolvePlaceholderMap(\n  baseTokens: Record<string, string>,\n  outputConfig: GeneratorOutputConfig\n): Record<string, string> {\n  const resolved: Record<string, string> = {\n    ...baseTokens,\n  };\n  const reservedTokenKeys = new Set(Object.keys(baseTokens));\n\n  const entries = Object.entries(outputConfig.placeholderMap ?? {});\n  for (const [key, value] of entries) {\n    if (reservedTokenKeys.has(key)) {\n      continue;\n    }\n\n    let current = value;\n    for (let depth = 0; depth < 8; depth += 1) {\n      const next = renderTemplate(current, resolved);\n      if (next === current) {\n        break;\n      }\n      current = next;\n    }\n    resolved[key] = current;\n  }\n\n  return resolved;\n}\n\nexport function renderOutputPath(\n  template: string,\n  context: PlaceholderContext,\n  outputConfig: GeneratorOutputConfig\n): string {\n  const baseTokens: Record<string, string> = {\n    kind: context.kind,\n    provider: context.provider,\n    ...createStyleTokens(\"database\", context.database),\n    ...createStyleTokens(\"schema\", context.schema),\n    ...createStyleTokens(\"model\", context.model),\n  };\n\n  const tokens = resolvePlaceholderMap(baseTokens, outputConfig);\n  return renderTemplate(template, tokens);\n}\n","import { parseSchemaTypeString } from \"../schema/diff/normalize.ts\";\nimport type {\n  IntrospectionColumn,\n  IntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n  composeGeneratorArtifacts,\n  type ModelArtifactDescriptorBase,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n} from \"./render-shared.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string;\n  insertTypeName: string;\n  updateTypeName: string;\n  formValuesTypeName: string;\n  tableConstName: string;\n};\n\nconst SMALLINT_TYPES = new Set([\"int2\", \"smallint\", \"serial2\", \"smallserial\"]);\nconst INTEGER_TYPES = new Set([\"int4\", \"integer\", \"serial\", \"serial4\"]);\nconst BIGINT_TYPES = new Set([\"int8\", \"bigint\", \"serial8\", \"bigserial\"]);\nconst SAFE_NUMBER_TYPES = new Set([\n  \"float4\",\n  \"float8\",\n  \"real\",\n  \"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/** PostgreSQL int8 values stay string-backed to preserve precision at the JS boundary. */\nconst STRING_TYPES = new Set([\n  \"bytea\",\n]);\nconst BUILTIN_POSTGRES_TYPES = new Set([\n  \"bigint\",\n  \"bigserial\",\n  \"bit\",\n  \"boolean\",\n  \"bytea\",\n  \"char\",\n  \"date\",\n  \"double precision\",\n  \"inet\",\n  \"integer\",\n  \"interval\",\n  \"json\",\n  \"jsonb\",\n  \"macaddr\",\n  \"money\",\n  \"numeric\",\n  \"real\",\n  \"smallint\",\n  \"smallserial\",\n  \"text\",\n  \"time\",\n  \"timestamp\",\n  \"timestamptz\",\n  \"timetz\",\n  \"uuid\",\n  \"varbit\",\n  \"varchar\",\n  \"xml\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim();\n  // Strip format_type params: \"numeric(12,2)\" → \"numeric\"\n  const bare = preferred.replace(/\\s*\\([^)]*\\)\\s*$/, \"\").trim();\n  if (column.arrayDimensions > 0 && bare.startsWith(\"_\")) {\n    return bare.slice(1);\n  }\n  return bare;\n}\n\nfunction parseFormattedType(column: IntrospectionColumn) {\n  const parsed = parseSchemaTypeString(column.dataType || column.udtName, 0);\n  const catalogDimensions = column.arrayDimensions ?? 0;\n  if ((parsed.arrayDimensions > 0) !== (catalogDimensions > 0)) {\n    throw new Error(\n      `Column \"${column.name}\" has inconsistent PostgreSQL array dimensions: formatted type has ${parsed.arrayDimensions}, catalog has ${catalogDimensions}`\n    );\n  }\n  return catalogDimensions === parsed.arrayDimensions\n    ? parsed\n    : { ...parsed, arrayDimensions: catalogDimensions };\n}\n\nfunction formattedBaseType(column: IntrospectionColumn): string {\n  let formatted = (column.dataType || column.udtName).trim();\n  while (formatted.endsWith(\"[]\")) {\n    formatted = formatted.slice(0, -2).trim();\n  }\n  return formatted.replace(/\\s*\\([^)]*\\)\\s*$/, \"\").trim();\n}\n\nfunction resolveExactNumericBounds(column: IntrospectionColumn): {\n  precision?: number;\n  scale?: number;\n} {\n  if (\n    typeof column.numericPrecision === \"number\" ||\n    typeof column.numericScale === \"number\"\n  ) {\n    return {\n      ...(typeof column.numericPrecision === \"number\"\n        ? { precision: column.numericPrecision }\n        : {}),\n      ...(typeof column.numericScale === \"number\"\n        ? { scale: column.numericScale }\n        : {}),\n    };\n  }\n\n  const parsed = parseFormattedType(column);\n  if (parsed.name !== \"numeric\") {\n    return {};\n  }\n  return {\n    ...(typeof parsed.precision === \"number\"\n      ? { precision: parsed.precision }\n      : {}),\n    ...(typeof parsed.scale === \"number\" ? { scale: parsed.scale } : {}),\n  };\n}\n\nexport function renderNativeTypeDescriptor(column: IntrospectionColumn): string {\n  const parsed = parseFormattedType(column);\n  const rawName = (\n    BUILTIN_POSTGRES_TYPES.has(parsed.name)\n      ? column.udtName || parsed.name\n      : formattedBaseType(column)\n  ).trim();\n  const name =\n    parsed.arrayDimensions > 0 && rawName.startsWith(\"_\")\n      ? rawName.slice(1)\n      : rawName;\n  const fields = [\n    `arrayDimensions: ${parsed.arrayDimensions}`,\n    \"backend: 'postgresql'\",\n    ...(parsed.intervalQualifier === undefined\n      ? []\n      : [`intervalQualifier: ${escapeStringLiteral(parsed.intervalQualifier)}`]),\n    ...(parsed.length === null || parsed.length === undefined\n      ? []\n      : [`length: ${parsed.length}`]),\n    `name: ${escapeStringLiteral(name)}`,\n    ...(parsed.precision === null || parsed.precision === undefined\n      ? []\n      : [`precision: ${parsed.precision}`]),\n    ...(parsed.scale === null || parsed.scale === undefined\n      ? []\n      : [`scale: ${parsed.scale}`]),\n  ];\n  return `{ ${fields.join(\", \")} }`;\n}\n\nfunction renderNativeType(column: IntrospectionColumn): string {\n  return `.nativeType(${renderNativeTypeDescriptor(column)})`;\n}\n\nfunction renderDecimalBuilder(column: IntrospectionColumn): string {\n  const { precision, scale } = resolveExactNumericBounds(column);\n\n  if (precision === undefined && scale === undefined) {\n    return \"decimal()\";\n  }\n\n  const options: string[] = [];\n  if (precision !== undefined) {\n    options.push(`precision: ${precision}`);\n  }\n  if (scale !== undefined) {\n    options.push(`scale: ${scale}`);\n  }\n  return `decimal({ ${options.join(\", \")} })`;\n}\n\nexport function renderColumnBuilder(column: IntrospectionColumn): {\n  helper:\n    | \"boolean\"\n    | \"number\"\n    | \"smallint\"\n    | \"integer\"\n    | \"bigint\"\n    | \"string\"\n    | \"json\"\n    | \"enumeration\"\n    | \"decimal\";\n  expression: string;\n} {\n  if (column.identity !== undefined && column.isNullable) {\n    throw new Error(\n      `Identity column \"${column.name}\" must be non-nullable`\n    );\n  }\n  if (column.identity !== undefined && column.isGenerated) {\n    throw new Error(\n      `Cannot render identity column \"${column.name}\" with multiple generation strategies`\n    );\n  }\n  const label = normalizeTypeLabel(column);\n  let helper:\n    | \"boolean\"\n    | \"number\"\n    | \"smallint\"\n    | \"integer\"\n    | \"bigint\"\n    | \"string\"\n    | \"json\"\n    | \"enumeration\"\n    | \"decimal\";\n  let expression: string;\n\n  if (\n    column.typeKind === \"enum\" &&\n    column.enumValues &&\n    column.enumValues.length > 0\n  ) {\n    helper = \"enumeration\";\n    expression = `enumeration([${column.enumValues.map((value) => escapeStringLiteral(value)).join(\", \")}] as const)`;\n  } else if (\n    column.arrayDimensions > 0 ||\n    JSON_TYPES.has(label) ||\n    column.typeKind === \"composite\"\n  ) {\n    helper = \"json\";\n    expression = `json<${resolvePostgresColumnType(column)}>()`;\n  } else if (BOOLEAN_TYPES.has(label)) {\n    helper = \"boolean\";\n    expression = \"boolean()\";\n  } else if (SMALLINT_TYPES.has(label)) {\n    helper = \"smallint\";\n    expression = \"smallint()\";\n  } else if (INTEGER_TYPES.has(label)) {\n    helper = \"integer\";\n    expression = \"integer()\";\n  } else if (BIGINT_TYPES.has(label)) {\n    helper = \"bigint\";\n    expression = \"bigint()\";\n  } else if (SAFE_NUMBER_TYPES.has(label)) {\n    helper = \"number\";\n    expression = \"number()\";\n  } else if (DECIMAL_TYPES.has(label)) {\n    helper = \"decimal\";\n    expression = renderDecimalBuilder(column);\n  } else if (STRING_TYPES.has(label)) {\n    helper = \"string\";\n    expression = \"string()\";\n  } else {\n    helper = \"string\";\n    expression = \"string()\";\n  }\n\n  if (column.isNullable) {\n    expression = `${expression}.optional()`;\n  }\n  if (column.hasDefault) {\n    const defaultExpression = column.defaultExpression?.trim();\n    expression =\n      defaultExpression === undefined || defaultExpression.length === 0\n        ? `${expression}.defaulted()`\n        : `${expression}.defaulted({ dialect: 'postgres', expression: ${escapeStringLiteral(defaultExpression)} })`;\n  }\n  if (column.identity) {\n    if (\n      helper !== \"smallint\" &&\n      helper !== \"integer\" &&\n      helper !== \"bigint\"\n    ) {\n      throw new Error(\n        `Cannot render identity column \"${column.name}\" with incompatible helper \"${helper}\"`\n      );\n    }\n    expression = `${expression}.identity(\"${column.identity}\")`;\n  } else if (column.isGenerated) {\n    expression = `${expression}.generated()`;\n  }\n\n  expression = `${expression}${renderNativeType(column)}`;\n  return { expression, helper };\n}\n\nfunction renderModelArtifact(\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig\n): GeneratedArtifact {\n  const helperImports = new Set<string>([\"table\"]);\n  const columnLines = Object.entries(descriptor.table.columns)\n    .map(([columnName, column]) => {\n      const propertyName = escapeTypePropertyName(columnName);\n      const rendered = renderColumnBuilder(column);\n      helperImports.add(rendered.helper);\n      return `    ${propertyName}: ${rendered.expression}`;\n    })\n    .join(\",\\n\");\n\n  const helperImportLine = Array.from(helperImports).sort().join(\", \");\n  const rowSchemaConstName = `${descriptor.tableConstName}_row_schema`;\n  const insertSchemaConstName = `${descriptor.tableConstName}_insert_schema`;\n  const updateSchemaConstName = `${descriptor.tableConstName}_update_schema`;\n  const formSchemaConstName = `${descriptor.tableConstName}_form_schema`;\n\n  const relationEntries = Object.entries(descriptor.table.relations);\n  const relationsAssignment =\n    config.features.emitRelations && relationEntries.length > 0\n      ? `\nObject.assign(${descriptor.tableConstName}.meta, {\n  relations: {\n${relationEntries\n  .map(\n    ([relationKey, relationValue]) =>\n      `    ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`\n  )\n  .join(\",\\n\")}\n  }\n})\n`\n      : \"\";\n\n  const content = `import { ${helperImportLine} } from '@xylex-group/athena'\nimport type { FormValuesOf, InsertOf, RowOf, UpdateOf } from '@xylex-group/athena'\n\nexport const ${descriptor.tableConstName} = table(${escapeStringLiteral(descriptor.tableName)})\n  .schema(${escapeStringLiteral(descriptor.schemaName)})\n  .columns({\n${columnLines}\n  })\n  ${\n    descriptor.table.primaryKey.length > 0\n      ? `.primaryKey(${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")})`\n      : \".withoutPrimaryKey()\"\n  }\n${relationsAssignment ? `${relationsAssignment}` : \"\"}\nexport type ${descriptor.rowTypeName} = RowOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.insertTypeName} = InsertOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.updateTypeName} = UpdateOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.formValuesTypeName} = FormValuesOf<typeof ${descriptor.tableConstName}>\n\nexport const ${rowSchemaConstName} = ${descriptor.tableConstName}.schemas.row\nexport const ${insertSchemaConstName} = ${descriptor.tableConstName}.schemas.insert\nexport const ${updateSchemaConstName} = ${descriptor.tableConstName}.schemas.update\nexport const ${formSchemaConstName} = ${descriptor.tableConstName}.schemas.form\n`;\n\n  return {\n    content,\n    kind: \"model\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function generateTableBuilderArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig\n): GeneratedArtifacts {\n  const normalizedConfig =\n    \"internal\" in config\n      ? (config as NormalizedAthenaGeneratorConfig)\n      : normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n  return composeGeneratorArtifacts({\n    config: normalizedConfig,\n    createModelDescriptor({\n      providerName,\n      databaseName,\n      schemaName,\n      tableName,\n      table,\n    }) {\n      const tableConstName = toSafeIdentifier(tableName, \"preserve\", \"table\");\n      return {\n        exportConstName: tableConstName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            database: databaseName,\n            kind: \"model\",\n            model: tableName,\n            provider: providerName,\n            schema: schemaName,\n          },\n          normalizedConfig\n        ),\n        formValuesTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}FormValues`,\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n        schemaName,\n        table,\n        tableConstName,\n        tableName,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n      };\n    },\n    renderModelArtifact: (descriptor) =>\n      renderModelArtifact(descriptor, normalizedConfig),\n    snapshot,\n  });\n}\n","import { 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 { unknownOptionError } from \"../../parse-helpers.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.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  let configPath: string | undefined;\n  let dryRun = false;\n  let force = false;\n  let mode: InitCommand[\"mode\"] = \"auto\";\n  let discoverSchemas = true;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"init\" };\n    }\n\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n\n    if (token === \"--force\") {\n      force = true;\n      continue;\n    }\n\n    if (token === \"--no-discover-schemas\") {\n      discoverSchemas = false;\n      continue;\n    }\n\n    if (token === \"--mode\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\n          \"Missing value for --mode option. Expected direct or gateway.\"\n        );\n      }\n      if (\n        nextValue !== \"direct\" &&\n        nextValue !== \"gateway\" &&\n        nextValue !== \"auto\"\n      ) {\n        throw new Error(\n          `Invalid --mode value \"${nextValue}\". Expected direct, gateway, or auto.`\n        );\n      }\n      mode = nextValue;\n      index += 1;\n      continue;\n    }\n\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n\n    throw unknownOptionError(token, \"init\");\n  }\n\n  return {\n    command: \"init\",\n    configPath,\n    discoverSchemas,\n    dryRun,\n    force,\n    mode,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"init\");\n}\n\nexport function sessionTitle(parsed: InitCommand): string {\n  return parsed.dryRun ? \"athena-js init · dry-run\" : \"athena-js init\";\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: InitCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, runtime } = ctx;\n  const ensureConfig = runtime.ensureConfig ?? ensureGeneratorConfigFile;\n  try {\n    if (isDebugEnabled()) {\n      errorLog(\n        `[athena-js] init starting (dryRun=${parsed.dryRun} force=${parsed.force} mode=${parsed.mode}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n      );\n    }\n    const result = await ctx.trace.span(\n      \"config.ensure\",\n      {\n        configPath: parsed.configPath,\n        discoverSchemas: parsed.discoverSchemas,\n        dryRun: parsed.dryRun,\n        mode: parsed.mode,\n      },\n      () =>\n        ensureConfig({\n          configPath: parsed.configPath,\n          discoverSchemas: parsed.discoverSchemas,\n          dryRun: parsed.dryRun,\n          force: parsed.force,\n          mode: parsed.mode,\n        })\n    );\n    const prefix = parsed.dryRun ? \"[dry-run] \" : \"\";\n    const provenance = result.schemaProvenance ?? \"configured\";\n    log(\n      `${prefix}Config ${result.action}: ${result.path} (mode=${result.mode} schemas=${result.schemas.join(\",\") || \"-\"} provenance=${provenance})`\n    );\n    if (result.reason) {\n      log(`${prefix}reason: ${result.reason}`);\n    }\n    for (const change of result.changes) {\n      if (\n        provenance === \"fallback\" &&\n        !change.startsWith(\"created-\") &&\n        !change.startsWith(\"force-\")\n      ) {\n        log(`${prefix}${change}`);\n      } else {\n        log(`${prefix}- ${change}`);\n      }\n    }\n    if (parsed.dryRun && result.content && result.action !== \"unchanged\") {\n      log(`${prefix}--- planned content ---`);\n      log(result.content);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    const formatted = formatGeneratorError(error, parsed.configPath);\n    logCliError(formatted, errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { AthenaCliError } from \"../../errors.ts\";\nimport { CliExitCode } from \"../../exit-code.ts\";\nimport {\n  exportCliLog,\n  findCliLog,\n  listCliLogs,\n  pruneCliLogs,\n  readCliLogFile,\n  resolveAthenaHomePaths,\n  resolveLatestCompletedLog,\n} from \"../../logging/index.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n  encodeCliJsonSuccess,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { CliCommand, LogsCommand } from \"../../types.ts\";\n\nexport { logsCatalog, logsCatalog as catalog } from \"./catalog.ts\";\n\nexport const names: readonly string[] = [\"logs\"];\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"logs\");\n}\n\nfunction integerOption(value: string, flag: string): number {\n  const parsed = Number(value);\n  if (!Number.isInteger(parsed) || parsed < 1) {\n    throw new Error(`${flag} must be a positive integer.`);\n  }\n  return parsed;\n}\n\nexport function parse(rest: string[]): CliCommand {\n  let action: LogsCommand[\"action\"] = \"list\";\n  let errors = false;\n  let json = false;\n  let limit = 20;\n  let invocationId: string | undefined;\n  let olderThan: string | undefined;\n  let outPath: string | undefined;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"logs\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--errors\") {\n      errors = true;\n      continue;\n    }\n    if (token === \"--limit\") {\n      const next = rest[index + 1];\n      if (!next) {\n        throw new Error(\"Missing value for --limit option.\");\n      }\n      limit = integerOption(next, \"--limit\");\n      index += 1;\n      continue;\n    }\n    if (token === \"--older-than\") {\n      const next = rest[index + 1];\n      if (!next) {\n        throw new Error(\"Missing value for --older-than option.\");\n      }\n      olderThan = next;\n      index += 1;\n      continue;\n    }\n    if (token === \"--out\") {\n      const next = rest[index + 1];\n      if (!next || next.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --out option.\");\n      }\n      outPath = next;\n      index += 1;\n      continue;\n    }\n    if (\n      token === \"path\" ||\n      token === \"list\" ||\n      token === \"latest\" ||\n      token === \"show\" ||\n      token === \"export\" ||\n      token === \"prune\"\n    ) {\n      action = token;\n      if (token === \"show\" || token === \"export\") {\n        const next = rest[index + 1];\n        if (!next || next.startsWith(\"-\")) {\n          throw new Error(`Missing invocation id for logs ${token}.`);\n        }\n        invocationId = next;\n        index += 1;\n      }\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"logs\");\n  }\n\n  return {\n    action,\n    command: \"logs\",\n    errors,\n    invocationId,\n    json,\n    limit,\n    olderThan,\n    outPath,\n  };\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: LogsCommand): boolean {\n  return parsed.json || ctx.output === \"json\" || ctx.output === \"ndjson\";\n}\n\nfunction missingLogError(invocationId: string): AthenaCliError {\n  return new AthenaCliError({\n    code: \"CLI_LOG_NOT_FOUND\",\n    exitCode: CliExitCode.Validation,\n    message: `No CLI log found for invocation \"${invocationId}\".`,\n  });\n}\n\nfunction emit(\n  ctx: CommandContext,\n  parsed: LogsCommand,\n  data: unknown,\n  text: string\n): void {\n  if (wantsJson(ctx, parsed)) {\n    ctx.log(stringifyCliJson(encodeCliJsonSuccess(\"logs\", data)));\n    return;\n  }\n  ctx.log(text);\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: LogsCommand\n): Promise<void> {\n  const env = ctx.runtime.env;\n  if (parsed.action === \"path\") {\n    const paths = resolveAthenaHomePaths(env, ctx.cwd);\n    const { home, cliLogsRoot } = paths;\n    emit(\n      ctx,\n      parsed,\n      { cliLogsRoot, home },\n      `Athena home\\n  ${home}\\nCLI logs\\n  ${cliLogsRoot}`\n    );\n    return;\n  }\n\n  if (parsed.action === \"list\") {\n    const summaries = await ctx.trace.span(\n      \"logs.list\",\n      { errorsOnly: parsed.errors, limit: parsed.limit },\n      () =>\n        listCliLogs({\n          cwd: ctx.cwd,\n          env,\n          errorsOnly: parsed.errors,\n          limit: parsed.limit,\n        })\n    );\n    emit(\n      ctx,\n      parsed,\n      { logs: summaries },\n      summaries.length === 0\n        ? \"No CLI logs found.\"\n        : summaries\n            .map(\n              (summary) =>\n                `${summary.invocationId}  ${summary.outcome ?? \"incomplete\"}  ${summary.bytes} bytes  ${summary.path}`\n            )\n            .join(\"\\n\")\n    );\n    return;\n  }\n\n  if (parsed.action === \"latest\") {\n    const path = await resolveLatestCompletedLog({\n      cwd: ctx.cwd,\n      env,\n      excludeInvocationIds: [ctx.logger.invocationId],\n      excludePaths: ctx.logger.logPath ? [ctx.logger.logPath] : [],\n    });\n    if (!path) {\n      emit(ctx, parsed, { path: undefined }, \"No latest CLI log found.\");\n      return;\n    }\n    const result = await readCliLogFile(path);\n    const summary = (\n      await listCliLogs({ cwd: ctx.cwd, env, limit: 1000 })\n    ).find((item) => item.path === path);\n    emit(\n      ctx,\n      parsed,\n      { events: result.events, path, summary },\n      `${path}\\n${result.events.at(-1)?.outcome ?? \"incomplete\"}`\n    );\n    return;\n  }\n\n  if (parsed.action === \"show\" || parsed.action === \"export\") {\n    const invocationId = parsed.invocationId;\n    if (!invocationId) {\n      throw new Error(`Missing invocation id for logs ${parsed.action}.`);\n    }\n    const source = await findCliLog(invocationId, { cwd: ctx.cwd, env });\n    if (!source) {\n      throw missingLogError(invocationId);\n    }\n    if (parsed.action === \"show\") {\n      const result = await readCliLogFile(source);\n      emit(\n        ctx,\n        parsed,\n        { events: result.events, malformed: result.malformed, path: source },\n        result.events\n          .map(\n            (event) =>\n              `${event.timestamp}  ${event.kind}  ${event.message ?? event.outcome ?? \"\"}`\n          )\n          .join(\"\\n\")\n      );\n      return;\n    }\n    const destination = resolve(\n      ctx.cwd,\n      parsed.outPath ?? `athena-support-${invocationId}.jsonl`\n    );\n    await mkdir(dirname(destination), { recursive: true });\n    const result = await exportCliLog(source, destination);\n    emit(\n      ctx,\n      parsed,\n      { destination, source, ...result },\n      `Exported support-safe CLI log\\n  ${destination}`\n    );\n    return;\n  }\n\n  const result = await pruneCliLogs({\n    activePath: ctx.logger.logPath,\n    cwd: ctx.cwd,\n    env,\n    olderThan: parsed.olderThan,\n  });\n  emit(\n    ctx,\n    parsed,\n    result,\n    `Pruned ${result.count} CLI logs and ${result.bytes} bytes.`\n  );\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  migrateAuthSyncCommand,\n  migrateStatusCommand,\n  migratePlanCommand,\n  migrateCheckCommand,\n  migrateGraphCommand,\n  migrateExplainCommand,\n  migrateDriftCommand,\n  migrateReconcileCommand,\n  migrateRepairCommand,\n  migrateVerifyCommand,\n  migrateApplyCommand,\n] as const;\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateApplyCommand = defineMigrateCommand({\n  mode: \"apply\",\n  path: [\"migrate\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateCheckCommand = defineMigrateCommand({\n  mode: \"check\",\n  path: [\"migrate\", \"check\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateDriftCommand = defineMigrateCommand({\n  mode: \"drift\",\n  path: [\"migrate\", \"drift\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateExplainCommand = defineMigrateCommand({\n  mode: \"explain\",\n  path: [\"migrate\", \"explain\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateGraphCommand = defineMigrateCommand({\n  mode: \"graph\",\n  path: [\"migrate\", \"graph\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migratePlanCommand = defineMigrateCommand({\n  mode: \"plan\",\n  path: [\"migrate\", \"plan\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateReconcileCommand = defineMigrateCommand({\n  mode: \"reconcile\",\n  path: [\"migrate\", \"reconcile\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateRepairCommand = defineMigrateCommand({\n  mode: \"repair\",\n  path: [\"migrate\", \"repair\"],\n});\n","import { defineMigrateCommand } from \"./define.ts\";\n\nexport const migrateStatusCommand = defineMigrateCommand({\n  mode: \"status\",\n  path: [\"migrate\", \"status\"],\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  return defineCommand({\n    legacy:\n      path.length === 1\n        ? \"policy\"\n        : (`policy-${path[1] ?? \"list\"}` as CliCommand[\"command\"]),\n    parse: (rest) => parse([...prefix, ...rest]),\n    path,\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as PolicyDxCommand),\n    usage,\n  });\n}\n\nexport const policyCommands = [\n  adapt([\"policy\"]),\n  adapt([\"policy\", \"list\"], [\"list\"]),\n  adapt([\"policy\", \"show\"], [\"show\"]),\n  adapt([\"policy\", \"validate\"], [\"validate\"]),\n  adapt([\"policy\", \"lint\"], [\"lint\"]),\n  adapt([\"policy\", \"coverage\"], [\"coverage\"]),\n  adapt([\"policy\", \"explain\"], [\"explain\"]),\n  adapt([\"policy\", \"simulate\"], [\"simulate\"]),\n  adapt([\"policy\", \"fingerprint\"], [\"fingerprint\"]),\n  adapt([\"policy\", \"export\"], [\"export\"]),\n];\n","import {\n  canonicalizeDocument,\n  coverageAthenaPolicy,\n  explainAthenaPolicy,\n  fingerprintDocument,\n  lintAthenaPolicy,\n  simulateAthenaPolicy,\n} from \"../../../policy/index.ts\";\nimport { validatePolicyDefinition } from \"../../../policy/validate-ir.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport { formatCatalogTopicUsage } from \"../../commands-catalog.ts\";\nimport { unknownOptionError } from \"../../parse-helpers.ts\";\nimport {\n  encodeCliJsonSuccess,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type { CliCommand, PolicyDxCommand } from \"../../types.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 = [\n  \"list\",\n  \"show\",\n  \"validate\",\n  \"lint\",\n  \"coverage\",\n  \"explain\",\n  \"simulate\",\n  \"fingerprint\",\n  \"export\",\n] as const;\n\ntype PolicyAction = (typeof POLICY_ACTIONS)[number];\n\nfunction isPolicyAction(value: string): value is PolicyAction {\n  return (POLICY_ACTIONS as readonly string[]).includes(value);\n}\n\nfunction commandId(\n  action: PolicyAction | undefined\n): PolicyDxCommand[\"command\"] {\n  if (!action || action === \"list\") {\n    return action === \"list\" ? \"policy-list\" : \"policy\";\n  }\n  return `policy-${action}` as PolicyDxCommand[\"command\"];\n}\n\nexport function parse(rest: string[]): CliCommand {\n  const head = rest[0];\n  if (\n    head === undefined ||\n    head === \"help\" ||\n    head === \"--help\" ||\n    head === \"-h\"\n  ) {\n    if (head === \"help\" || head === \"--help\" || head === \"-h\") {\n      return { command: \"help\", topic: \"policy\" };\n    }\n    return { command: \"policy\" };\n  }\n  if (!isPolicyAction(head)) {\n    throw unknownOptionError(head, \"policy\");\n  }\n  return parseFlags(head, rest.slice(1));\n}\n\nfunction parseFlags(\n  action: PolicyAction,\n  rest: readonly string[]\n): PolicyDxCommand {\n  let configPath: string | undefined;\n  let format: \"ir\" | undefined;\n  let id: string | undefined;\n  let json = false;\n  let policyAction: string | undefined;\n  let resource: string | undefined;\n  let row: string | undefined;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"policy\" } as never;\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--format\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --format option.\");\n      }\n      if (nextValue !== \"ir\") {\n        throw unknownOptionError(`--format ${nextValue}`, \"policy export\");\n      }\n      format = \"ir\";\n      index += 1;\n      continue;\n    }\n    if (token === \"--id\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --id option.\");\n      }\n      id = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--action\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --action option.\");\n      }\n      policyAction = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--resource\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --resource option.\");\n      }\n      resource = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--row\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --row option.\");\n      }\n      row = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", `policy ${action}`);\n  }\n\n  if (action === \"export\") {\n    return {\n      action: policyAction,\n      command: \"policy-export\",\n      configPath,\n      format: format ?? \"ir\",\n      id,\n      json,\n      resource,\n      row,\n    };\n  }\n\n  return {\n    action: policyAction,\n    command: commandId(action),\n    configPath,\n    format,\n    id,\n    json,\n    resource,\n    row,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"policy\");\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: PolicyDxCommand): boolean {\n  return ctx.output === \"json\" || parsed.json === true;\n}\n\nfunction parseRow(raw: string | undefined): Record<string, unknown> {\n  if (!raw) {\n    return {};\n  }\n  const parsed = JSON.parse(raw) as unknown;\n  if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n    throw new Error(\"--row must be a JSON object.\");\n  }\n  return parsed as Record<string, unknown>;\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: PolicyDxCommand\n): Promise<void> {\n  const loaded = await loadPolicyDocument({\n    configPath: parsed.configPath,\n    cwd: ctx.cwd,\n  });\n  const document = loaded.document;\n  const json = wantsJson(ctx, parsed);\n  const verb =\n    parsed.command === \"policy\" || parsed.command === \"policy-list\"\n      ? \"list\"\n      : parsed.command.replace(\"policy-\", \"\");\n\n  if (verb === \"list\") {\n    const rows = document.policies.map((item) => ({\n      actions: item.actions,\n      id: item.id,\n      resource: item.resource,\n    }));\n    if (json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"policy.list\", { policies: rows })\n        )\n      );\n      return;\n    }\n    ctx.logRaw(rows.map((item) => item.id).join(\"\\n\") || \"(no policies)\");\n    return;\n  }\n\n  if (verb === \"show\") {\n    const match = document.policies.find((item) => item.id === parsed.id);\n    if (json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"policy.show\", { policy: match ?? null })\n        )\n      );\n      return;\n    }\n    ctx.logRaw(JSON.stringify(match ?? null, null, 2));\n    return;\n  }\n\n  if (verb === \"validate\") {\n    for (const policy of document.policies) {\n      validatePolicyDefinition(policy);\n    }\n    if (json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"policy.validate\", {\n            count: document.policies.length,\n            ok: true,\n          })\n        )\n      );\n      return;\n    }\n    ctx.logRaw(`ok (${document.policies.length} policies)`);\n    return;\n  }\n\n  if (verb === \"lint\") {\n    const report = lintAthenaPolicy(document);\n    if (json) {\n      ctx.log(stringifyCliJson(encodeCliJsonSuccess(\"policy.lint\", report)));\n      return;\n    }\n    ctx.logRaw(JSON.stringify(report.findings, null, 2));\n    return;\n  }\n\n  if (verb === \"coverage\") {\n    const report = coverageAthenaPolicy(document);\n    if (json) {\n      ctx.log(\n        stringifyCliJson(encodeCliJsonSuccess(\"policy.coverage\", report))\n      );\n      return;\n    }\n    ctx.logRaw(JSON.stringify(report.cells, null, 2));\n    return;\n  }\n\n  if (verb === \"explain\") {\n    const explained = explainAthenaPolicy({\n      action: (parsed.action as \"select\") ?? \"select\",\n      document,\n      resource: parsed.resource ?? \"\",\n    });\n    if (json) {\n      ctx.log(\n        stringifyCliJson(encodeCliJsonSuccess(\"policy.explain\", explained))\n      );\n      return;\n    }\n    ctx.logRaw(JSON.stringify(explained, null, 2));\n    return;\n  }\n\n  if (verb === \"simulate\") {\n    const simulated = simulateAthenaPolicy({\n      action: (parsed.action as \"select\") ?? \"select\",\n      document,\n      resource: parsed.resource ?? \"\",\n      row: parseRow(parsed.row),\n    });\n    if (json) {\n      ctx.log(\n        stringifyCliJson(encodeCliJsonSuccess(\"policy.simulate\", simulated))\n      );\n      return;\n    }\n    ctx.logRaw(JSON.stringify(simulated, null, 2));\n    return;\n  }\n\n  if (verb === \"fingerprint\") {\n    const fingerprint = fingerprintDocument(document);\n    if (json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"policy.fingerprint\", { fingerprint })\n        )\n      );\n      return;\n    }\n    ctx.logRaw(fingerprint);\n    return;\n  }\n\n  if (verb === \"export\") {\n    const canonical = canonicalizeDocument(document);\n    const bytes = JSON.stringify(canonical);\n    ctx.logRaw(bytes);\n  }\n}\n","import { parseAthenaRightKey } from \"../../../rights/key.ts\";\nimport type { CommandContext } from \"../../command-context.ts\";\nimport {\n  catalogSubcommands,\n  catalogSubcommandTokens,\n  formatCatalogTopicUsage,\n  formatExpectedCommandsLine,\n} from \"../../commands-catalog.ts\";\nimport { setCliExitCode } from \"../../exit-code.ts\";\nimport { formatGeneratorError, logCliError } from \"../../format-error.ts\";\nimport {\n  createGatewayApiKeyRight,\n  formatApiKeyRights,\n  formatRightsCatalog,\n  listGatewayApiKeyRights,\n  listGatewayRightsCatalog,\n  resolveGatewayAdminCredentials,\n} from \"../../gateway-admin.ts\";\nimport {\n  helpOrRejectUnknownFlags,\n  parseGatewayAdminFlags,\n  unknownOptionError,\n} from \"../../parse-helpers.ts\";\nimport { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport { closestMatches, formatDidYouMean } from \"../../suggest.ts\";\nimport type {\n  CliCommand,\n  RightsCatalogCommand,\n  RightsCreateCommand,\n  RightsListCommand,\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  if (\n    rest.length === 0 ||\n    rest[0] === \"help\" ||\n    rest[0] === \"--help\" ||\n    rest[0] === \"-h\"\n  ) {\n    return { command: \"help\", topic: \"rights\" };\n  }\n\n  const sub = rest[0];\n  if (sub === \"list\" || sub === \"ls\") {\n    const common = parseGatewayAdminFlags(rest, 1);\n    const help = helpOrRejectUnknownFlags(\n      rest,\n      common.index,\n      \"rights list\",\n      \"rights\"\n    );\n    if (help) {\n      return help;\n    }\n    return {\n      adminKey: common.adminKey,\n      command: \"rights-list\",\n      json: common.json,\n      url: common.url,\n    };\n  }\n\n  if (sub === \"catalog\" || sub === \"all\") {\n    const common = parseGatewayAdminFlags(rest, 1);\n    const help = helpOrRejectUnknownFlags(\n      rest,\n      common.index,\n      \"rights catalog\",\n      \"rights\"\n    );\n    if (help) {\n      return help;\n    }\n    return {\n      adminKey: common.adminKey,\n      command: \"rights-catalog\",\n      json: common.json,\n      url: common.url,\n    };\n  }\n\n  if (sub === \"create\") {\n    let index = 1;\n    let name: string | undefined;\n    let description: string | undefined;\n    let json = false;\n    let url: string | undefined;\n    let adminKey: string | undefined;\n\n    while (index < rest.length) {\n      const token = rest[index];\n      index += 1;\n      if (token === \"--help\" || token === \"-h\") {\n        return { command: \"help\", topic: \"rights\" };\n      }\n      if (token === \"--json\") {\n        json = true;\n        continue;\n      }\n      if (token === \"--name\") {\n        const nextValue = rest[index];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\"Missing value for --name option.\");\n        }\n        name = nextValue;\n        index += 1;\n        continue;\n      }\n      if (token === \"--description\") {\n        const nextValue = rest[index];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\"Missing value for --description option.\");\n        }\n        description = nextValue;\n        index += 1;\n        continue;\n      }\n      if (token === \"--url\") {\n        const nextValue = rest[index];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\"Missing value for --url option.\");\n        }\n        url = nextValue;\n        index += 1;\n        continue;\n      }\n      if (token === \"--admin-key\") {\n        const nextValue = rest[index];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\"Missing value for --admin-key option.\");\n        }\n        adminKey = nextValue;\n        index += 1;\n        continue;\n      }\n      throw unknownOptionError(token, \"rights create\");\n    }\n\n    if (!name) {\n      throw new Error(\n        \"rights create requires --name <right>. Example: athena-js rights create --name gateway.query\"\n      );\n    }\n\n    return {\n      adminKey,\n      command: \"rights-create\",\n      description,\n      json,\n      name: parseAthenaRightKey(name),\n      url,\n    };\n  }\n\n  throw new Error(\n    [\n      `Unknown rights subcommand \"${sub}\".`,\n      formatDidYouMean(closestMatches(sub, catalogSubcommandTokens(\"rights\"))),\n      formatExpectedCommandsLine(catalogSubcommands(\"rights\")),\n    ]\n      .filter((line) => line.length > 0)\n      .join(\"\\n\")\n  );\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"rights\");\n}\n\nexport function sessionTitle(\n  _parsed: RightsListCommand | RightsCatalogCommand | RightsCreateCommand\n): string {\n  return \"athena-js rights\";\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: RightsListCommand | RightsCatalogCommand | RightsCreateCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, runtime } = ctx;\n  try {\n    const credentials = resolveGatewayAdminCredentials({\n      adminKey: parsed.adminKey,\n      baseUrl: parsed.url,\n      cwd: runtime.cwd,\n    });\n    const clientOptions = {\n      ...credentials,\n      fetchImpl: runtime.fetchImpl,\n      logger: ctx.logger,\n      trace: ctx.trace,\n    };\n\n    if (parsed.command === \"rights-list\") {\n      const rights = await listGatewayApiKeyRights(clientOptions);\n      if (parsed.json) {\n        log(JSON.stringify({ rights }, null, 2));\n      } else {\n        log(\n          `[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`\n        );\n        log(formatApiKeyRights(rights));\n      }\n      return;\n    }\n\n    if (parsed.command === \"rights-catalog\") {\n      const catalog = await listGatewayRightsCatalog(clientOptions);\n      if (parsed.json) {\n        log(JSON.stringify(catalog, null, 2));\n      } else {\n        log(\n          `[admin] url=${credentials.urlSource} key=${credentials.adminKeySource}`\n        );\n        log(formatRightsCatalog(catalog));\n      }\n      return;\n    }\n\n    const right = await createGatewayApiKeyRight({\n      ...clientOptions,\n      input: {\n        description: parsed.description,\n        name: parsed.name,\n      },\n    });\n    if (parsed.json) {\n      log(JSON.stringify({ right }, null, 2));\n    } else {\n      log(\n        `Created API key right name=${right.name}${right.id ? ` id=${right.id}` : \"\"}`\n      );\n      if (right.description) {\n        log(`description: ${right.description}`);\n      }\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n","import type { CommandContext } from \"../../command-context.ts\";\nimport { defineCommand } from \"../../platform/define-command.ts\";\nimport type {\n  CliCommand,\n  SchemaDiffCommand,\n  SchemaSnapshotCommand,\n} from \"../../types.ts\";\nimport { parse, run, usage } from \"./index.ts\";\n\nexport const schemaCommands = [\n  defineCommand({\n    legacy: \"schema\",\n    parse: () => ({ command: \"schema\" }),\n    path: [\"schema\"],\n    run: async (ctx) => {\n      ctx.logRaw(usage());\n    },\n    usage,\n  }),\n  defineCommand({\n    legacy: \"schema-diff\",\n    parse: (rest) => parse([\"diff\", ...rest]),\n    path: [\"schema\", \"diff\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as SchemaDiffCommand),\n    usage,\n  }),\n  defineCommand({\n    legacy: \"schema-snapshot\",\n    parse: (rest) => parse([\"snapshot\", ...rest]),\n    path: [\"schema\", \"snapshot\"],\n    run: (ctx: CommandContext, parsed: CliCommand) =>\n      run(ctx, parsed as SchemaSnapshotCommand),\n    usage,\n  }),\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  encodeCliJsonFailure,\n  encodeCliJsonSuccess,\n  exitCodeForError,\n  stringifyCliJson,\n} from \"../../platform/index.ts\";\nimport type {\n  CliCommand,\n  SchemaDiffCommand,\n  SchemaSnapshotCommand,\n} 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  const head = rest[0];\n  if (\n    head === undefined ||\n    head === \"help\" ||\n    head === \"--help\" ||\n    head === \"-h\"\n  ) {\n    return { command: \"help\", topic: \"schema\" };\n  }\n  if (head === \"diff\") {\n    return parseDiffFlags(rest.slice(1));\n  }\n  if (head === \"snapshot\") {\n    return parseSnapshotFlags(rest.slice(1));\n  }\n  throw unknownOptionError(head, \"schema\");\n}\n\nfunction parseDiffFlags(rest: readonly string[]): CliCommand {\n  let configPath: string | undefined;\n  let fromPath: string | undefined;\n  let json = false;\n  let migration = false;\n  let policyImpact = false;\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"schema\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--migration\") {\n      migration = true;\n      continue;\n    }\n    if (token === \"--policy-impact\") {\n      policyImpact = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--from\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --from option.\");\n      }\n      fromPath = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"schema diff\");\n  }\n  return {\n    command: \"schema-diff\",\n    configPath,\n    fromPath,\n    json,\n    migration,\n    policyImpact,\n  };\n}\n\nfunction parseSnapshotFlags(rest: readonly string[]): CliCommand {\n  let configPath: string | undefined;\n  let outPath: string | undefined;\n  let json = false;\n  let check = false;\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"schema\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--check\") {\n      check = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    if (token === \"--out\" || token === \"--file\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --out option.\");\n      }\n      outPath = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token ?? \"\", \"schema snapshot\");\n  }\n  return {\n    check,\n    command: \"schema-snapshot\",\n    configPath,\n    json,\n    outPath,\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"schema\");\n}\n\nfunction wantsJson(ctx: CommandContext, parsed: { json?: boolean }): boolean {\n  return ctx.output === \"json\" || parsed.json === true;\n}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: SchemaDiffCommand | SchemaSnapshotCommand\n): Promise<void> {\n  const json = wantsJson(ctx, parsed);\n  try {\n    const { runSchemaDiff, runSchemaSnapshot } = await import(\"./run.ts\");\n    if (parsed.command === \"schema-diff\") {\n      const report = await runSchemaDiff({\n        configPath: parsed.configPath,\n        cwd: ctx.cwd,\n        fromPath: parsed.fromPath,\n        inspect: ctx.runtime.inspectSchemaSnapshot,\n        migration: parsed.migration,\n        policyImpact: parsed.policyImpact,\n      });\n      if (json) {\n        ctx.log(\n          stringifyCliJson(\n            encodeCliJsonSuccess(\"schema.diff\", {\n              baselineWritten: report.baselineWritten === true,\n              destructiveCount: report.destructiveCount,\n              fromPath: report.fromPath,\n              ok: report.ok,\n              operations: report.diff.operations,\n              policyImpact: report.policyImpact,\n              proposedMigration: report.proposedMigration,\n              summary: report.diff.summary,\n            })\n          )\n        );\n      } else if (parsed.migration && report.proposedMigration) {\n        ctx.logRaw(report.proposedMigration);\n      } else {\n        ctx.logRaw(report.text);\n      }\n      if (!report.ok) {\n        setCliExitCode(CliExitCode.Conflict);\n      }\n      return;\n    }\n\n    const report = await runSchemaSnapshot({\n      check: parsed.check,\n      configPath: parsed.configPath,\n      cwd: ctx.cwd,\n      inspect: ctx.runtime.inspectSchemaSnapshot,\n      outPath: parsed.outPath,\n    });\n    if (json) {\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonSuccess(\"schema.snapshot\", {\n            check: report.check,\n            destructiveCount: report.destructiveCount,\n            ok: report.ok,\n            operations: report.diff?.operations,\n            path: report.path,\n            summary: report.diff?.summary,\n          })\n        )\n      );\n    } else {\n      ctx.logRaw(report.text);\n    }\n    if (!report.ok) {\n      setCliExitCode(CliExitCode.Conflict);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    if (json) {\n      const message = error instanceof Error ? error.message : String(error);\n      ctx.log(\n        stringifyCliJson(\n          encodeCliJsonFailure(\n            parsed.command === \"schema-diff\"\n              ? \"schema.diff\"\n              : \"schema.snapshot\",\n            {\n              code:\n                error instanceof Error && \"code\" in error\n                  ? String((error as { code?: string }).code ?? \"SCHEMA000\")\n                  : \"SCHEMA000\",\n              message,\n            }\n          )\n        )\n      );\n    } else {\n      logCliError(formatGeneratorError(error), ctx.errorLog, ctx.capabilities);\n    }\n    setCliExitCode(exitCodeForError(error));\n  }\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 { exitCodeForError } from \"../../platform/map-exit.ts\";\nimport type { CliCommand, ValidateCommand } from \"../../types.ts\";\nimport { frameBlock } from \"../../ui/rail.ts\";\nimport {\n  formatValidationReport,\n  validateLocalRuntime,\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  let configPath: string | undefined;\n  let json = false;\n  let plain = false;\n  let strict = false;\n  let index = 0;\n  if (rest[0] === \"local\") {\n    index = 1;\n  }\n  while (index < rest.length) {\n    const token = rest[index];\n    index += 1;\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"validate\" };\n    }\n    if (token === \"--json\") {\n      json = true;\n      continue;\n    }\n    if (token === \"--plain\") {\n      plain = true;\n      continue;\n    }\n    if (token === \"--strict\") {\n      strict = true;\n      continue;\n    }\n    if (token === \"--config\") {\n      const nextValue = rest[index];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n    throw unknownOptionError(token, \"validate\");\n  }\n  return { command: \"validate\", configPath, json, plain, strict };\n}\n\nexport function usage(): string {\n  return formatCatalogTopicUsage(\"validate\");\n}\n\nexport function sessionTitle(_parsed: ValidateCommand): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: ValidateCommand\n): Promise<void> {\n  const { capabilities, errorLog, log, logRaw, presentation, runtime } = ctx;\n  try {\n    const runValidate = runtime.validateLocal ?? validateLocalRuntime;\n    const report = await runValidate({\n      configPath: parsed.configPath,\n      cwd: runtime.cwd,\n      json: parsed.json,\n      plain: parsed.plain || presentation.noColor === true,\n      strict: parsed.strict,\n    });\n    if (parsed.json) {\n      log(JSON.stringify(report, null, 2));\n    } else {\n      logRaw(\n        frameBlock(formatValidationReport(report, capabilities), capabilities)\n      );\n    }\n    if (!report.ok) {\n      setCliExitCode(CliExitCode.Validation);\n    }\n  } catch (error) {\n    ctx.reportError(error, {\n      commandId: parsed.command,\n      phase: \"command\",\n    });\n    logCliError(formatGeneratorError(error), errorLog, capabilities);\n    setCliExitCode(exitCodeForError(error));\n  }\n}\n","import { existsSync } from \"node:fs\";\n\nimport {\n  findGeneratorConfigPath,\n  loadAthenaConfig,\n} 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  return (\n    token === \"-v\" ||\n    token === \"--version\" ||\n    token === \"version\" ||\n    token === \"v\"\n  );\n}\n\nexport function parse(rest: string[]): CliCommand {\n  if (rest[0] === \"--help\" || rest[0] === \"-h\") {\n    return { command: \"help\", topic: \"version\" };\n  }\n  return {\n    command: \"version\",\n    short: rest.includes(\"--short\") || rest.includes(\"-q\"),\n  };\n}\n\nexport function usage(): string {\n  return formatCatalogCommandUsage(\"version\");\n}\n\nexport function sessionTitle(_parsed: VersionCommand): undefined {}\n\nexport async function run(\n  ctx: CommandContext,\n  parsed: VersionCommand\n): Promise<void> {\n  if (parsed.short) {\n    ctx.log(PACKAGE_VERSION);\n    return;\n  }\n  const configPath = ctx.globals.configPath ?? findGeneratorConfigPath(ctx.cwd);\n  let modules: Awaited<\n    ReturnType<typeof loadAthenaConfig>\n  >[\"config\"][\"modules\"];\n  if (configPath && existsSync(configPath)) {\n    try {\n      const loaded = await loadAthenaConfig({\n        configPath,\n        cwd: ctx.cwd,\n      });\n      modules = loaded.config.modules;\n    } catch {\n      modules = undefined;\n    }\n  }\n  ctx.log(\n    formatCliIdentity({\n      configPath: configPath && existsSync(configPath) ? configPath : null,\n      modules,\n    })\n  );\n}\n","import { expandEqualsArgv, peelPresentationFlags } from \"./argv.ts\";\nimport { CLI_COMMAND_REGISTRY } from \"./commands/register.ts\";\nimport { sanitizeCliArgv } from \"./logging/redact.ts\";\nimport {\n  applyGlobalsToCommand,\n  parseRegisteredCommandResolved,\n  peelGlobalFlags,\n} from \"./platform/index.ts\";\nimport type { CliCommand } from \"./types.ts\";\n\nexport function parseCommand(inputArgv: string[]): CliCommand {\n  return parseCommandResolved(inputArgv).value;\n}\n\nexport function parseCommandResolved(inputArgv: string[]) {\n  const { argv: peeled } = peelPresentationFlags(inputArgv);\n  const argv = expandEqualsArgv(peeled);\n  const { argv: withoutGlobals, globals } = peelGlobalFlags(argv);\n  const resolved = parseRegisteredCommandResolved(\n    CLI_COMMAND_REGISTRY,\n    withoutGlobals,\n    sanitizeCliArgv(withoutGlobals, {\n      secretFlags: CLI_COMMAND_REGISTRY.secretFlagsFor(withoutGlobals),\n    })\n  );\n  return {\n    ...resolved,\n    value: applyGlobalsToCommand(resolved.value, globals),\n  };\n}\n"]}